Geant4 10.5 Release Notes

December 7th, 2018

The code and binary libraries for the supported systems are available through our Source Code Web page.

We are grateful for the efforts of Geant4 users who have provided detailed feedback or comprehensive reports of issues. We thank in particular those who have contributed corrections, improvements or developments included in this release.

Please refer to the Geant4 User Documentation for further information about using Geant4.

## Contents

1. Supported and Tested Platforms
2. Supported CLHEP version
3. Items for migration of the user code
4. New Developments and Capabilities
5. Expected effects on physics and performance
6. Known Run-Time Problems and Limitations
7. Compilation Warnings
8. Geant4 Software License
9. Detailed list of changes and fixes

## 1. Supported and Tested Platforms

Platforms:

- Linux, gcc-4.8.5.
  Tested on 64 bit architectures (Intel or AMD) with CERN CentOS Linux 7 (CC7) (based on CentOS Linux 7).
- MacOSX 10.14 Mojave with llvm/clang-6.0.1 (Apple LLVM/Clang-10.0.0)
- Windows-10 with Visual C++ 14.11 (Visual Studio 2017)

More verified and tested configurations (64 bits):

- Linux, gcc-4.9.3/5.4.0/6.3.0/7.3.0/8.2.0, clang-3.9/5.0
- Linux, Intel-icc 19.0
- MacOSX 10.11, 12, 13 with clang-3.8/4.0/5.0
- Windows-10 with Visual C++ 14.0 (Visual Studio 2015)

## 2. Supported CLHEP version

This release of Geant4 requires and has been verified with CLHEP, release 2.4.1.0. Use of a different CLHEP version may cause incorrect simulation results.
NOTE: an internal module of the relevant CLHEP classes is provided and can be used as alternative to an external CLHEP library installation.

## 3. Items for migration of the user code

Listed here is some relevant information on developments included in this release. Note that for all users a full re-installation of libraries (or a full re-compilation) and a re-compilation of user applications is required.

General

- Minimum required version of CMake to build Geant4 is 3.3.
- Due to the migration from POSIX threading to C++11 threading, enabling multi-threading on Windows for use with either static or dynamic libraries, the following migration is required:
  - Any usage of `G4THREADCREATE` should pass a reference to an allocated `G4Thread` pointer.
  - `G4THREADCREATE` (previously a macro) is now a variadic template function that accepts an unlimited number of arguments to the function launched on the thread.
  - `G4Thread t; G4THREADCREATE(&t, myfunction, myarg);` is no longer valid
  - `G4Thread* t = new G4Thread(); G4THREADCREATE(t, myfunction, myarg);` is required
  - `G4MUTEX_INITIALIZER`, `G4MUTEXINIT`, and `G4MUTEXDESTROY` are now empty macros and their usage is unnecessary and thus deprecated.

Geometry

- The behaviour of G4Transportation and G4CoupledTransportation concerning the treatment of looping particles has been reviewed:
  - From this release on, only stable particles are killed if they 'loop', i.e. take more than the maximum (default 1000) integration steps in one physics step; unstable particles are now propagated indefinitely.
  - Warning exceptions with full details of the particle, location and volume are now generated for stable looping particles which are killed (as before, this only happens if their energy exceeds a threshold 'warning' energy). In previous releases a short message with only energy and location was generated, and only for installations which did not use G4_NO_VERBOSE. Typically these warnings occur predominantly in vacuum or other low density media.
- As before the killing of loopers and potential warnings are controlled by two energy thresholds and a step number parameter. Default settings imply:
  - `100 MeV` (warning energy): below this, tracks are killed silently.
  - `250 MeV` (important energy): above this, tracks are given multiple chances (10 physics steps).
  These settings are fully under user control. The new methods in G4PhysicsListHelper allow the user to select a set of low (or the above high) values of the 'looper' energy thresholds. Existing methods of G4[Coupled]Transportation can be used for fine-grained control of the parameter values. Additional information regarding how to reduce the incidence of looping particles is provided in an expanded section on Transportation in the Users Guide for Applications Developers.
- G4MagneticField has been corrected to no longer inherit from G4ElectroMagneticField; this anomaly used to allow a user to provide a 'full' EM field (mixed electric and magnetic), but obtain the force only from the B-field when using the equation created in the G4ChordFinder constructor. With this correction it is no longer possible to use the equation of motion for a pure magnetic field for the case of a mixed electromagnetic field. Instead the full chain of classes for equation of full EM field, steppers and driver must be used for the case of the 'full' EM field.

Electromagnetic and optical physics

- The new data set G4EMLOW-7.7 should be used.

Hadronic physics

- The new data sets `G4PhotonEvaporation-5.3`, `G4INCL-1.0`, `G4RadioactiveDecay-5.3`, `G4SAIDDATA-2.0` and `G4PARTICLEXS-1.1` should be used.
- Requiring new `G4INCL-1.0` data set and corresponnding G4INCLDATA path environment variable when using INCLXX physics.
- The old G4NEUTRONXS data set is now replaced by `G4PARTICLEXS-1.1`, and the corresponding G4PARTICLEXSDATA environment variable should be now used.

Analysis

- The default mode for Root n-tuple merging (in multi-threaded runs) is changed to row-wise in order to preserve an "event point of view" (the n-tuple rows) after merging. The output files written with this mode use a different data schema (organisations of TBranches and TLeaves) than before and so require adapting the macros for reading back the data.

Data Sets

This release introduces new data set versions. Please see the corresponding details in Section 9 of this document.

- New data set versions: `G4EMLOW-7.7, G4RadioactiveDecay-5.3, G4PhotonEvaporation-5.3, G4INCL-1.0, G4SAIDDATA-2.0, G4PARTICLEXS-1.1`.
- In order to use `ParticleHP` for charged particles (protons, deuterons, tritons, He3 and alphas), an optional data set `G4TENDL-1.3.2` is required, and should be downloaded in addition from the Geant4 web site.

## 4. New Developments and Capabilities

General

- Replaced POSIX threading with C++11 threading, enabling multi-threading on Windows for use with either static or dynamic libraries.

- `G4THREADCREATE` is now a variadic template function (unlimited arguments) instead of a macro
- `G4THREADCREATE` can be used outside of MT. In sequential mode, `G4THREADCREATE` will execute the function on the calling thread.

- `G4Mutex` is now a typedef to `std::mutex`, even in sequential mode.
- Added `G4RecursiveMutex` typedef to `std::recursive_mutex`.
- Provided generic template functions `G4TypeMutex<T>()` and `G4TypeRecursiveMutex<T>()` to create and access static instances of mutexes without the need for declarations.

- When combined with `G4AutoLock`, this enables easy creation of class-specific locks, e.g. `G4AutoLock lock(G4TypeMutex<decltype(this)>());`

- `G4AutoLock` now inherits from `std::unique_lock`, even in sequential mode.

- In sequential mode, `G4AutoLock` does not lock upon construction, i.e. `std::defer_lock`
- Added overloads to accept reference to mutex, in addition to previous form of a pointer to a mutex.

Analysis

- Switched the default Root ntuple merge mode to row-wise in analysis tools and added new `G4RootAnalysisManager::SetNtupleRowWise(G4bool)` function which can be used to override the defaults.
- Added "Boolean reset" argument in `G4AnalysisManager::CloseFile()` function, allowing to close a file without resetting data.

Digitization & Hits

- Added new class G4StatAnalysis, a lightweight statistics class that calculates the mean, FOM, relative error, standard deviation, variance and other quantities. Compatible with usage in G4THitsMap and (new) G4THitsVector -- replacing `G4THitsMap<G4double>` with `G4THitsMap<G4StatAnalysis>` and can provide a quick implementation of accumulating statistics for scoring.
- Added new class G4THitsVector, a generic hits container compatible with G4THitsMap, that enables the underlying storage container to utilize a sequential container instead of a map (saving memory); additionally, it allows the underlying container to store data as non-pointer types (saving more memory).

- These containers are intended to be used at the G4Run level to accumulate data over the course of the run and it is not recommended for use at the event level -- a G4THitsMap is ideal at the event level due to the general sparsity of hits per index but at the run level, G4THitsVector becomes ideal with respect to memory usage as approximately 40% of the total available indices accumulate non-zero hits.
- See DICOM2 and ThreadsafeScorers for usage examples, including demonstrations of G4THitsVector + non-pointer data storage and the new style of generic iteration over the hits container classes that is valid for both G4THitsMap and G4THitsVector (the previous form of iteration over G4THitsMap is still valid, and will remain valid, for G4THitsMap types).

- Introduced a new interface class, G4VScoreNtupleWriter, which allows automated storing of scorers hits with Geant4 analysis tools. Concrete implementations (G4ScoreNtupleWriter with associated messenger) are demonstrated in new provided extended/analysis examples.

Geometry

- A configuration option allows an installation to use the VecGeom Unified Solids Library primitives, to replace the original Geant4 solids, as in the previous release. The path to an external installation of the VecGeom library (VecGeom version `v01.01.00`) should be specified. See the associated instructions file for configuration and installation.
- Enabled VecGeom wrappers for G4ExtrudedSolid, G4TessellatedSolid, G4Hype and G4Tet.
- Reimplemented `EstimateSurfaceArea()` for approximate calculation of the surface area of a solid with new algorithm providing more accurate estimation without performance penalty.
- Introduced Bulirsch-Stoer method of integration, an alternative to Runge-Kutta based on the mid-point method.
- New G4InterpolationDriver field driver class using Runge-Kutta method with interpolation property to integrate EoM with error control.
- Updated field steppers to make use of cached field vales.
- Improved reporting of looping particle, adding info on density, fraction (%) of proposed step that was completed and momentum.

Electromagnetic physics

- Use new parameter `MscEnergyLimit()` (default is `100 MeV`) in EM physics constructors, allowing to customise transition from low-energy multiple scattering to high energy combination of multiple and single scattering.
- Alg96 lateral displacement algorithm used in G4UrbanMscModel in all EM physics.
- Default angular generator for bremsstrahlung is G4ModifiedTsai.
- Revisions of G4BetheHeitlerModel and G4PairProductionRelModel with improved screening function approximation, improved LPM function approximation, angular generation and efficiency of sampling of the final state.
- New gamma conversion model G4BetheHeitler5DModel.
- Added optional possibility to use ICRU90 data.
- New optional ion ionisation models G4LindhardSorensenIonModel, G4AtimaEnergyLossModel, G4AtimaFluctuations.
- Added new classes for the simulation of elastic scattering of gammas.

Hadronic physics

- For both Fritiof (FTF) and Quark-Gluon-String (QGS) string models, we have released the latest versions, which have been developed since the release 10.2 but have not been included in the two previous releases, 10.3 and 10.4, to keep stable the simulation of hadronic showers (note that snapshots of these developments have been made available in previous beta releases: 10.3.beta, 10.4.beta and 10.5.beta).
- New tuning of the FTF model parameters, for both string formation and string fragmentation. Introduced smearing of delta-isobar mass and improved di-quark fragmentation into baryons in Lund string fragmentation. First implementation of rotating strings in FTF, at the level of string fragmentation, with introduction of Mt distribution of hadrons. Improved process probability parameterizations for Pi-Nucleon interactions; corrected calculation of nuclear residual excitation energy.
- Major revision of the QGS final-state model: implemented Reggeon cascading and "Fermi motion"; new algorithm for the determination of the kinematical properties of partons; improved formation of the residual nucleus. Improved cross-sections of K-meson - nucleon interactions in QGS: Pomeron and two non-vacuum exchanges are taken into account. Gamma-nucleon cross sections are also improved by tuning of parameters. Improved string fragmentation (G4QGSMFragmentation): new algorithm for last string decay a-la Lund is implemented; refined the algorithm to stop the fragmentation. Tuning the parameters related to both string formation and string fragmentation to improve the description of thin-target data.
- For both string models (FTF and QGS): first implementation of alpha cluster structure of carbon nuclei (affecting only hadron-Carbon interactions), according to P.Bozek et al., Phys.Rev.C90, 064902 (2014).
- For Bertini Cascade, extended strange pair production channels, and improved pion-quasideuteron reactions.
- Extended upper limit of applicability (from 1 to `100 TeV`) for the diffuse-elastic processes.
- New class for diffuse-elastic process, where the underlying physics model code has been revised and significantly improved in performance.
- Introduced switch in cross-sections to allow transuranic elements.
- Coherent use of the same parameterisation of level density and pairing correction between all models in hadronic de-excitation.

Physics Lists

- In all hadronic builders fixed use of data for neutron capture in HP physics-lists.
- Major revision of all ion builders.
- New tuning of parameters for several EM constructors.
- The physics lists QGSP_BIC_HP and QGSP_BIC_AllHP use EM Opt4 (instead of EM Opt0 as before).
- For FTF/QGS/INCLXX physics-lists builders, use Barashenkov-Glauber-Gribov inelastic cross-section for pions, avoiding to use Gheisha cross-sections for pion inelastic on Hydrogen target.

Run

- Added track/step/volume information in G4ExceptionHandler when an exception happens while event is being processed.

Visualization and Interfaces

- Implemented simple algorithm in visualization to allow colouring of detector elements based on materials density.
- RayTracer now visualizes layered-mass-geometry volumes defined in parallel worlds.
- G4UIcommand: additional implementation for adding a mechanism of carrying back error message from the messenger if a command is rejected due to the target class or the messenger.

Examples

- B3aScoreWrgiter and B4dScoreWriter: new examples (in extended/analysis) demonstrating saving of scorers hits in form of n-tuples in a Root file using Geant4 analysis tools.
- DICOM2: new example (in extended/medical) demonstrating how to specialise and extend functionalities from DICOM example.
- chem5: new example (in extended/medical/dna), variation of chem4, showing how to activate chemistry code and score the radiochemical yield G, using preliminary `G4EmDNAPhysics_option8` and `G4EmDNAChemistry_option1` constructors.
- splitting: new example (in extended/medical/dna) demonstrating acceleration of Geant4-DNA physics simulations by particle splitting.
- OpNovice2: new example (in extended/optical) for investigation of optical properties and parameters. Details of optical photon boundary interactions on a surface are recorded, as well as the details of optical photon generation and transport.
- exMPI04: new example in extended/parallel/MPI demonstrating merging n-tuples via MPI. The G4mpi classes were adapted to allow to define (an) extra worker(s) for collecting data from processing workers (needed for merging n-tuples).
- field01: Added code to demonstrate use of G4PhysicsListHelper's `Use[Low|High]LooperThresholds()` methods and code to demonstrate fine grained control of G4[Coupled]Transportation parameters for (killing) looping tracks (tracks which take too many iterations to finish integration; typically due to electrons in vacuum, but also can affect other charged particles).

## 5. Expected effects on physics and computing performance

Electromagnetic physics

- Extended G4SeltzerBergerModel model with optional sampling tables for faster run time sampling of the emitted photon energy. Measuring 40-60% model speedup.

Hadronic physics

- Both hadronic string models (FTF and QGS) describe generally better the thin-target data with respect to the previous versions. Moreover, the QGS model becomes competitive with the FTF model, for most thin-target observables for projectile kinetic energies above about 20 GeV.
- For the simulation of hadronic showers, both hadronic string models give higher energy response with respect to the previous versions, and consistently higher when compared with test-beam and collider data. We believe at least part of this is due to an underestimate with the Birks quenching factor which must be applied to the simulation in order to compare to measured data. The Birks coefficient is a phenomenological function of energy loss and not of energy deposit. It therefore neglects the effect of discrete delta ray production performed in Geant4. We therefore suggest re-fitting from data the Birks coefficient to the h/e ratio: energy response of a hadron (charged pion or proton) at a given energy with respect to the energy response of an electron of the same energy.

## 6. Known Run-Time Problems and Limitations

For a complete list of outstanding run-time problems and to submit any problem you may find while running this version of Geant4, please refer to the Geant4 Problem Reporting System.

## 7. Compilation Warnings

There may be a few compilation warnings on some platforms. We do not believe that any of these lead to incorrect run-time behaviour.

## 8. Geant4 Software License

A Software License applies to the Geant4 code. Users must accept this license in order to use it. The details and the list of copyright holders is available at http://cern.ch/geant4/license and also in the text file `LICENSE` distributed with the source code.

## 9. Detailed list of changes and fixes

These are the main new features/fixes included in this release since the last patched public release (for more detailed lists of fixes/additions, please refer to the corresponding History files provided in most packages):

### Configuration

- CMake
  - Added c++17 to C++ standards against which Geant4 can be compiled. Requires a minimum CMake version of 3.8 to enable.
  - Added "auto" dummy Thread Local Storage model; when "auto" is used, no explicit compiler flag is being set to select the TLS model; selection is left to compiler default.
  - Added configuration for optional profiling package TiMemory.
  - Skip validation checking for external zlib sources.
  - Added TESSELLATEDSOLID flag to enable optional wrapping of G4TessellatedSolid with VecGeom implementation.
  - Added configuration support for MT on Windows; removed restrictions and warnings on enabling MT on Windows.
  - Support use of WINDOWS_EXPORT_ALL_SYMBOLS for DLL builds with cmake >=3.4 retaining old capability for CMake 3.3.
  - Updated FindInventor.cmake to properly setup SoQt if existing.
  - Geant4InterfaceOptions.cmake: added check for existance of SoQt package.
  - Geant4MakeRules_cxx.cmake: added -DGL_SILENCE_DEPRECATION to CMAKE_CXX_FLAGS_INIT for clang to silence GL deprecation compilation warnings on MacOS 10.14 Mojave.
  - Corrected URLs for data installation to use https; added -L flag to curl to follow redirects when accessing a dataset URL.
  - Removed entry for G4NEUTRONXS data set, no longer necessary.
  - Updated data-sets versions.
- GNUMake
  - In geomconf.gmk, added G4GEOM_USE_UTESSELLATEDSOLID flag to enable VecGeom wrapper for G4TessellatedSolid.
  - Fixed setting of G4RUNPATHOPTION in Darwin/Linux-clang/g++ and binmake.cmk. Addressing problem report #2086.
  - Cleanup settings for GL in Darwin-clang.gmk and Darwin-g++.gmk. Added -DGL_SILENCE_DEPRECATION to CPPFLAGS to silence GL deprecation compilation warnings on MacOS 10.14 Mojave.

### Analysis

- Ntuples
  - Switched the default Root n-tuple merge mode to row-wise.
  - Added function `SetNtupleRowWise(G4bool)` to G4RootAnalysisManager, allowing to choose row-wise/column-wise mode also in sequential mode.
  - Updated `G4TNtupleManager::FinishTNtuple()` to support creating n-tuples both before and after `OpenFile()`.
  - Added friend class declarations to allow an implementation of MPI n-tuple merging.
  - Allow overriding of selected functions in G4RootAnalysisManager, G4RootNtupleManager and G4TNtupleManager, needed MPI ntuple merging.
- Output files
  - Added "Boolean reset" argument in `G4AnalysisManager::CloseFile()` function, allowing to close a file without resetting data.
- Fixes
  - Fixed compilation warnings on gcc-8.1.0.
  - Fixed a deadlock issue with G4RootPNtupleManager where the mutex was locked before being passed to Root.
  - Modified management of plotting: G4PlotManager is now instantiated with G4AnalysisManager what makes possible to remove static G4PlotParameters. Addressing problem report #2083.
  - Use the same mutex for add_row and end_fill. This should fix occasional failures of tests in MT mode.
- g4tools
  - Updated the g4tools version to g4tools-4.2.3. See History_tools for the complete list of modifications.

### Digitization & Hits

- Introduced a new interface class, G4VScoreNtupleWriter which allows implementing in the user code automated storing of hits collections of G4THitsMap (used by primitive scorers) with Geant4 analysis tools; concrete implementations (G4ScoreNtupleWriter with associated messenger) are demonstrated in new provided extended/analysis examples.
- Updated G4THitsMap: generic `GetContainer(), size(), GetIndex(...), GetObject(...), begin(), end(), cbegin()` and `cend()`.
- Added G4THitsVector class, a generic container compatible with G4THitsMap such that vectors can be used to score over the course of a run (saving memory); it allows the underlying container to store data as non-pointer types.
- Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.

### Electromagnetic Processes

- Requires data-set G4EMLOW-7.7.
- DNA:
  - Updated G4DNAOneStepThermalizationModel and other classes for chemistry.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - Included upper energy limit of models.
  - Updated Si mass in G4DNAGenericIonsManager.
  - Added protection in Auger emission.
  - Fixed header guards in G4ITFinder and G4AllITFinder. Addressing problem report #2084.
- High Energy
  - G4AnnihiToMuPair: added Coulomb correction to cross-section at threshold.
  - Minor code cleanup in G4eeToHadronsMultiModel, G4eeToHadronsModel and G4mplIonisationWithDeltaModel.
  - G4eeToHadrons, G4eeToHadronsMultiModel, G4hBremsstrahlung, G4hPairProduction, G4hhIonisation, G4mplIonisation: automatic documentation format now rST.
- Low Energy
  - Added new classes for elastic scattering of gammas by M.Omer and R.Hajima.
  - Updated JAEA elastic model classes.
  - G4LivermoreBremsstrahlungModel: no functional changes. Some base class member names have been changed and these modifications propagated down to the derived class.
  - Fixed problem G4PenelopeIonisationModel responsible for rare energy non-conservation and run-time warning.
  - Fix in G4PenelopeComptonModel and G4PenelopePhotoElectricModel for rare energy non-conservation.
  - Fix for differential cross-section of photo-electrons in G4LivermorePolarizedPhotoElectricModel. Addressing problem report #2089.
  - G4RayleighScattering: changed automatic documentation format to rST.
- Muons
  - G4MuMultipleScattering, G4MuPairProduction, G4MuIonisation, G4ePairProduction, G4MuBremsstrahlungModel, G4MuBremsstrahlung, G4MuBetheBlochModel: use default destructor.
  - Added minor protection in G4MuPairProductionModel.
  - G4ePairProduction: fixed model name.
  - G4EnergyLossForExtrapolator: fixed MT initialisation and destruction.
  - G4MuMultipleScattering, G4MuPairProduction, G4eePairProduction, G4MuBremsstrahlung, G4MuIonisation: automatic documentation format now rST.
- Polarisation
  - G4PolarizedAnnihilationModel: implemented sampling of final state at-rest.
  - Code cleanup; removed unused headers and methods.
- Standard
  - G4GoudsmitSaundersonMscModel: implemented interface method for macroscopic first transport cross-section computation per volume (used only for testing).
  - G4GSMottCorrection, G4GSPWACorrections: fixed initialization of first moment correction factor.
  - G4GoudsmitSaundersonTable: fixed gcc-8.1.0 compilation warnings.
  - G4WentzelOKandVIxSection: fixed form-factor for proton. Added Mott corrections to e+-.
  - G4WentzelOKandVIxSection: fixed destructor.
  - G4ScreeningMottCrossSection: added extra method for more CPU effective computation of the Mott correction.
  - G4UrbanMscModel: correction in order to get better backscattering for low energy.
  - G4eSingleCoulombScatteringModel: fixed calculation of scattering angle. Addressing problem report #2090.
  - G4ScreeningMottCrossSection: use G4MottData and improved time consuming computations. Removed obsolete G4MottCoefficients class, replaced by static data class G4MottData.
  - G4ScreeningMottCrossSection, G4eSingleCoulombScatteringModel: added extra protections on argument of std::acos avoiding crash due to precision lost; code cleanup.
  - G4BetheBlochModel: use form-factor for projectile ion as in formulation of NIM A 488 (2002) 282.
  - G4ionIonisation: apply correction to energy loss only to BetheBloch ionisation model.
  - G4BraggModel, G4BraggIonModel, G4BetheBlochModel: added optional possibility to use ICRU90 data.
  - G4PSTARStopping: minor code cleanup.
  - G4LindhardSorensenIonModel, G4LindhardSorensenData: new ion ionisation model for moderate and high energies.
  - G4AtimaEnergyLossModel, G4AtimaFluctuations: new ion ionisation model.
  - G4BetheHeitler5DModel: new 5D model.
  - G4BetheHeitlerModel, G4PairProductionRelModel: new versions with improved screening function approximation, improved LPM function approximation, efficiency, documentation and cleanup. Corrected call to selecting target atom in final state sampling.
  - G4PairProductionRelModel, G4BetheHeitlerModel: use G4ModifiedTsai angular generator for the final state sampling.
  - G4PairProductionRelModel: fixed computation of cross-section in the new version of the high energy model.
  - G4DipBustGenerator, G4ModifiedTsai: implemented new interface for sampling of directions of e+e- pair.
  - G4eplusAnnihilation: moved sampling of final state from AtRestDoIt() method to `SamplingSecondaries()`.
  - Code cleanup in G4eeToTwoGammaModel, G4BetheHeitlerModel and G4NISTStoppingData.
  - G4eplusAnnihilation: set weights for directional splitting.
  - G4eplusTo2GammaOKVIModel, G4eplusTo3GammaOKVIModel: make consistent definition of cross-section for 2-gamma and 3-gamma models; use cuts for gamma in sampling of 3-gamma final state.
  - Added new models, G4eplusTo2GammaOKVIModel and G4eplusTo3GammaOKVIModel.
  - G4eBremsstrahlungRelModel, G4PairProductionRelModel, G4PAIySection, G4PAIxSection, G4ICRU73QOModel: moved inline method which use static constants to source. Improved code formatting.
  - G4SeltzerBergerModel: extended model with optional sampling tables for fast run time sampling of the emitted photon energy from the Seltzer-Berger scaled DCS, instead of using the rejection. The sampling tables are hadled by the new G4SBBremTable class. Measuring 40-60% model speedup with some additional memory consumption.
  - G4eBremsstrahlungRelModel: improved LPM function approximation; code cleanup and optimization.
  - G4SeltzerBergerModel, G4eBremsstrahlungRelModel: use by default G4ModifiedTsai generator instead of G4DipBustGenerator.
  - G4DipBustGenerator: optimisation, speedup; using G4Pow::A13.
  - G4GammaConversion, G4eBremsstrahlung, G4hIonisation: use upper energy limit for low-energy model from physics-list instead of hard-coded values.
  - G4CoulombScattering, G4eBremsstrahlung, G4[e,h]MultipleScattering, G4eplusAnnihilation, G4[e,h,ion,alpha]Ionisation, G4ComptonScattering, G4NuclearStopping, G4PhotoElectricEffect: changed auto-generated documentation format to rST.
- Utils
  - G4EmCorrections, G4VEmModel, G4ionEffectiveCharge, G4VAtomDeexcitation: avoid use of static class members in inline methods; moved long methods to source; added thread safe definition of model index for atomic de-excitation.
  - G4EmCalculator: fixed `GetCrossSectionPerVolume()` method in case of multiple scattering process; the proper value of the first transport cross-section is retrieved now.
  - G4EmCalculator: fixed computation dEdx for ions.
  - G4EmParameters, G4EmParametersMessenger: added 5D gamma conversion model parameters; added `MscEnergyLimit()` and corresponding UI command; addressing problem report #2045; added extra DNA UI directory and command; improved dump of EM parameters.
  - G4EmParameters: added extra protection to avoid simulteneous definition of options which should not be enabled together.
  - G4EmParameters, G4EmParameterMessenger, G4LossTableManager: minor update of interfaces; added extra parameters.
  - G4EmParameters, G4EmParametersMessenger: added extra parameter and UI command to enable usage of ICRU90 data; fixed DNA parameters; added checks of EM physics type.
  - G4EmParameters: fixed typo in printout.
  - G4VEmAngularDistribution: added `SamplePairDirections()` method for sampling of e+e- pair production.
  - Added new enumerator G4DNAModelSubType.
  - G4LossTableManager: moved inline run time method to source.
  - Minor code cleanup in G4VMscModel and G4VEmModel.
  - G4EmDataHandler: added public interfaces.
  - G4VEmProcess: code cleanup in `StorePhysicsTable(..)` methods; introduced 'isTheMaster' flag.
  - G4EmElementSelector: code optimisation.
  - G4EmModelManager, G4VEmModel, G4VEmProcess, G4VEnergyLossProcess, G4VMultipleScattering: auto-generated documentation now in rST format.
  - G4EmBiasingManager, G4EmParameters, G4EmParametersMessenger, G4VEnergyLossProcess, G4VEmProcess: enable directional splitting and moved logic to G4EmBiasingManager.
  - Fixed Coverity defects.
- Xrays
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - G4Cerenkov. added protection against infinite loops due to very small steps. Addressing problem report #1992.
  - G4Cerenkov, G4Scintillation: correctly reset number of photons to zero each step. Addressing problem report #2056.

### Event

- Code cleanup in G4StackManager to remove branches for muonic atom settings.
- Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.

### Externals

- CLHEP:
  - Updated to CLHEP version 2.4.1.0.
  - Enabled thread-local storage and atomics on Windows and clang, as now all supported by c++11.
  - Ranlux64Engine: fixed compilation warning on Windows for shift count negative or too big.
  - Fixed compilation warnings from gcc-8.1.0 when using -Woverloaded-virtual compilation option.
- Zlib:
  - Updated to Zlib version 1.2.11
  - Use original files format and adopt C Compiler for installation. Addressing compilation warnings on gcc-8.1.0.

### General Processes

- Biasing
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Cuts
  - Code cleanup; use of nullptr and c++11.
- Management
  - Code cleanup; use of nullptr and c++11.
- Optical
  - G4OpMieHG: changed `GetProperty()` to use enum indeces instead of strings.
- Scoring
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - G4ParallelWorldProcess: fixed track velocity of optical photons for the first step in a layered mass geometry.
- Transportation
  - G4Transportation and G4CoupledTransportation: adjusted killing of looping particles, to apply only to stable particles. Unstable particles will be propagated indefinitely. At object destruction, added printing of the maximum energy and sum of energies of particles "saved". Added method `SetHighLooperThresholds()` to restore old default parameters for killing looping particles (warning energy to 100 MeV - tracks below this are killed silently; important energy to 250 MeV - above this, tracks are given multiple chances). Default constructors now use these high values. New auxiliary methods `PushThresholdsToLogger()` and `ReportMissingLogger()`. New method `SetLowLooperThresholds()` for low-E applications. New method `ReportLooperThresholds()` to print out the values. Added extra simple statistics at destruction: stats on non-electrons loopers killed (sum E, number, max E & its PDG); stats for non-electron loopers killed (total energy, maximum energy and PDG of the type of that track). Statistics are now printed by a new method and are printed also in non-verbose mode. Addressing problem report #2063.
  - New class G4TransportationLogger to consolidate reports from the Transportation processes.
  - Use G4Exception for warnings, instead of streaming to `cout/cerr`.
  - Fixed Coverity defects.

### Geometry

- Magnetic field
  - Correction in G4MagneticField to no longer inherit from G4ElectroMagneticField; this allowed a user to provide a full EM field, but obtain the force only from the B-field when using the equation created in the G4ChordFinder constructor. It is no longer possible to use the equation of motion for a pure magnetic field for the case of a mixed electromagnetic field. Instead the full chain of classes for equation of full EM field, steppers and driver must be used for the case of the 'full' EM field.
  - Introduced Bulirsch-Stoer method of integration, an alternative to Runge-Kutta based on the mid-point method. A separate driver derived from G4VIntegrationDriver was needed, using specialisation of G4IntegrationDriver template class.
  - Change in `G4FieldManager::CreateChordFinder()` to cope better with case where field argument is null.
  - Fix for missing interface method in G4VIntegrationDriver; added method `RenewStepperAndAdjust()` which used to exist in G4MagInt_Driver. This method must be defined in those derived driver classes which accept a Runge Kutta stepper.
  - Defined default implementation of the method in G4IntegrationDriver and G4FSALIntegrationDriver, and implementations in the templated classes G4IntegrationDriver and G4FSALIntegrationDriver.
  - Removed static data from G4FSALIntegrationDriver, G4IntegrationDriver and G4MagIntegratorDriver and moved to base class as normal data members. Fix was required for allowing proper symbol exporting on Windows DLLs.
  - Use G4Exception warnings instead of streaming to cerr.
  - Added override final for virtual methods in G4UniformMagField.
  - Corrections in calculation of chord distance in G4DormandPrince745 (use 4th order interpolation from Shampine 1986 for mid-point).
  - Revised G4FieldUtils: moved `copy()` method from steppers, added two new setters for simple & variadic methods.
  - Fixes to copy input time in ModifiedMidpoint, CashKarp, G4RK547FEq1/2/3 Bogacki-Shampine 4/5 and 2/3, Dormand Prince 4/5, 5/6 and 7/8 and Tsitouras steppers.
  - Fix for unitialised pointer in G4FSALIntegrationDriver constructor. Revision of data member variable names.
  - G4NystromRK4 now uses G4CachedMagneticField for caching values and creates it if not provided. Any other stepper will work with that cached field too.
  - Removed `G4MagIntegratorStepper::ComputeRightHandSide()` virtual method, previously introduced for use with G4NystromRK4 (calling non-virtual `RightHandSide()` instead).
  - New experimental class G4BFieldIntegrationDriver for pure magnetic field. In `QuickAdvance()` it uses helix stepper when rotation angle is larger than `pi/3`.
  - New experimental class G4InterpolationDriver; using Runge-Kutta method with interpolation property to integrate EoM with error control.
- Management
  - G4AffineTransform: added explicit copy constructor, assignment and destructor; `InverseProduct()` has been optimised, now it does 36 multiplications instead of 45; optimised also for the case of pure translation; added methods for inverse transformation: `InverseTransformPoint(), InverseTransformAxis(), InverseNetRotation()` and `InverseNetTranslation()`. Minor optimisation to multiplication of matrix by vector, to make use of temporaries in accessing vector components.
  - G4GeomSplitter: replaced use or `realloc()/free()` and `memcpy()` with normal allocation/deallocation through G4Allocator. Also addressing compilation warnings on gcc-8.1.0.
  - G4VSolid: reimplemented `EstimateSurfaceArea()` for approximate calculation of the surface area of a solid, by estimating volume of a thin shell surrounding the surface using Monte-Carlo method; algorithm providing more accurate estimation without performance penalty.
- Navigation
  - `G4Navigator::ComputeLocalAxis()`: removed unnecessary check for `IsRotated()`.
  - Replaced use of `Inverse()` from G4AffineTransform with new dedicated methods, to avoid creation of temporaries in G4RegularNavigation, G4Navigator and G4ReplicaNavigation.
  - G4PropagatorInField: fix for case of finishing integration in last iteration (so a looping particle will not be signalled incorrectly in that case). Improved reporting of looping particle, adding info on density and fraction (%) of proposed step that was completed, and momentum.
  - Use G4Exception instead of streaming to cerr in various classes.
  - Fixed Coverity defect in diagnostic report in G4MultiLevelLocator.
  - In `G4PropagatorInField::ComputeStep()`, notify G4ChordFinder at the beginning of each call.
- Solids (Boolean)
  - G4MultiUnion: added protection for normal initialisation in `DistanceToOutVoxels()`. Minor optimisation in `DistanceToOut(p,v,..)`.
  - Minor optimisations to G4SubtractionSolid and G4IntersectionSolid for use of early returns.
- Solids (CSG)
  - G4Cons: fix in `GetPointOnSurface()` when sampling on inner and outer conical surfaces.
  - G4Orb: improved check if point is too far in `DistanceToIn(p,v)`.
  - G4Torus: added check if point is too far in `DistanceToIn(p,v)`. Addressing problem report #2100.
  - Make G4UCons wrapper inheriting from vecgeom::GenericUnplacedCone, following the latest changes in VecGeom.
  - Make G4UTrd wrapper inheriting from vecgeom::GenericUnplacedTrd, following the latest changes in VecGeom.
  - G4UTorus: removed leftover use of UVector3 and replaced with U3Vector.
- Solids (Specific)
  - Enabled VecGeom wrappers for G4ExtrudedSolid, G4TessellatedSolid G4Tet and G4Hype.
  - Make G4UPolycone wrapper inheriting from vecgeom::GenericUnplacedPolycone, following the latest changes in VecGeom.
  - Minor cleanup in `G4TessellatedSolid::CreatePolyhedron()`, no functional changes.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - Removed G4SolidsWorkspacePool class. Adapted G4SolidsWorkspace to use templated class G4TWorkspacePool.
- Volumes
  - Replaced use of `Inverse()` from G4AffineTransform with new dedicated methods, to avoid creation of temporaries in G4TouchableHistory, G4PVPlacement and G4PVParameterised.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - G4PVPlacement: added copy number to G4Exception printing in `CheckOverlaps()`.
  - Removed G4GeometryWorkspacePool class. Adapted G4GeometryWorkspace to use templated class G4TWorkspacePool.
  - Added G4AssemblyStore singleton class for assembly structures bookeeping, to address the specific use-case of allowing identification of assembly envelopes.

### Global

- Threading
  - Removed obsolete MT wrappers for random numbers, no longer necessary. Simplified definition of G4Random types in Randomize.hh accordingly.
  - Full support for thread-local storage on clang (also MacOS clang) now enabled; updated tls.hh definitions accordingly; removed use of the G4USE_STD11 flag, now always enabled by default.
  - Use `thread_local` keyword on Windows, instead of `__declspec(thread)` in tls.hh. Avoid exporting symbols for Windows DLLs in multi-threaded builds. Removed no longer necessary windefs.hh header.
  - G4Threading: replaced POSIX threading with C++11 threading (`std::condition_variable, std::mutex, std::recursive_mutex, std::thread`). Many of the former macros are now dummy macros (e.g. G4MUTEXINIT, G4MUTEX_INITIALIZER, etc.). Updated pin affinity. Replaced `typedef` statements with C++11 `using` correspondents.
  - G4AutoLock is now a thin wrapper around `std::unique_lock` providing previous functionality + more features (e.g. `try_lock, try_lock_until`, etc.). Overloaded G4AutoLock member functions in sequential mode to not execute locking/unlocking.
  - Added G4RecursiveAutoLock for recursive mutexes.
  - Extended G4TemplateAutoLock to take advantage of the features `std::unique_lock` offers.
  - G4MTBarrier: removed WIN32 specifics, updated G4CONDITIONWAIT to use G4AutoLock (`std::unique_lock`) instead of G4Mutex, removed G4MUTEX_INITIALIZER from constructor.
  - Added G4TypeMutex<T> and G4TypeRecursiveMutex<T> function to threading for safely obtaining a static mutex that is unique to the template type `T`.
  - Replaced static G4Mutex in G4Cache with calls to G4TypeMutex function calls to safely initialize mutexes on Windows.
  - Updated G4cout_p and G4cerr_p to point to `std::cout` and `std::cerr` before and after library load. G4cout before G4RunManager creation has been seen to fail on Windows.
  - Improvement to G4AutoLock in non-MT mode + bug fix (void `try_lock()` -> `bool try_lock()`) plus error handling within G4AutoLock if static mutex is attempted to be used at application cleanup (previously handled in G4Cache). Using atomics in G4Cache.
  - G4Cache, G4CacheDetails: minor code cleanup and formatting.
  - Define G4ThisThread, G4Promise, G4Future, and G4SharedFuture in G4Threading the promises and futures are not currently used but will be used in future.
  - G4TypeMutex and G4RecursiveTypeMutex now accept an index.
  - G4DummyThread typedef `std::thread::id` as id instead of id_type.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Increased accuracy of `G4Pow::A13()` in the most critical [1/4,4] interval.
- Extracted G4Exception banner front/end strings for use in Qt parsing.
- G4PhysicsVector, G4Physics2DVector: fixed possible out-of-bound access in `FindBin()` method. Addressing problem report #2087.
- Reset singleton pointer in G4StateManager destructor; addressing problem report #2094. Minor code cleanup.
- Migrated G4Timer real (wall) time to use `std::chrono::high_precision_clock` from C++11. Fixed CPU number printout in `operator<<()`. Use G4 types. Code formatting.
- Expanded DEFINED_PPC and DEFINED_INTEL in G4FPEDetection.
- Added G4TiMemory header which defines an dummy initializer and empty macros when the profiling package TiMemory is disabled, while it includes the TiMemory headers and defines an initializer when built with TiMemory support enabled. Removed obsolete definition in G4Timer and G4SliceTimer, causing conflicts with TiMemory. Updated CMake scripts.
- Minor code cleanup in G4UniformRandPool.
- Added new classe G4StatAnalysis, a lightweight statistics class that calculates the mean, FOM, relative error, standard deviation, variance, coefficient of variation, efficiency, r2eff, r2int (corr-coeff-of-interp/ coeff-of-determ).
- Added new utility class G4EnvironmentUtils, including convenient environment converters.
- Added variadic template function to templates.hh to consume unused parameters and variables.
- G4OrderedTable and G4DataVector: fixed store/retrieve of binary data format.
- G4AllocatorPool: moved copy-ctr and `operator=()` to public section.
- Fixes to G4ConvergenceTester to ensure there are no divide-by-zeros when calculating the stat history. Added `operator += (G4double)`.Fixed printout typos.
- Updated date of release for 10.5.

### Graphical Representations

- Replaced DBL_MAX by `G4VisAttributes::veryLargeTime = 1.e100*ns`, (i.e. about 1.e75 billion years), to avoid for consistency DBL_MAX which is dimensionless. Disabled deprecated static data member G4VisAttributes::Invisible for Windows systems.
- Added `GetNullExtent()` function and `operator==()` to G4VisExtent.
- Added G4GREPS_ALLOC_EXPORT flag for DLL symbols export and apply it to data in G4VisAttributes.

### Hadronic Processes

- Cross sections
  - G4NeutrinoElectronTotXsc: new class for total (i.e. neutral current plus charged current) cross-section for neutrino-electron interactions.
  - Introduced switch to allow transuranic elements.
  - G4PiNuclearCrossSection: for transuranic elements, scale the cross-sections from those of Uranium (using the ratio of atomic weights), instead of using directly the latter.
  - G4NeutronElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS: adopting new data structure from data set, incompatible with previous.
  - G4ParticleInelasticXS: new inelastic cross sections for neutrons, protons and light ions based on G4PARTICLEXS-1.1.
  - G4HadronXSDataTable: new class for cross-section handling.
  - G4CrossSectionDataStore: added new method ComputeCrossSection(); reduced number of type conversions, number of computation of cross-sections and code branches; use const pointers to G4Material, G4Element and G4Isotope; fixed selection of isotope, for energy below `20 MeV` use isotope cross-sections, above `20 MeV` - isotope abundaces.
  - G4VCrossSectionDataSet: added new flag 'isForAllAtomsAndEnergies' and get/set methods allowing to reduce the list of cross-sections per particle.
  - Commented out debug printouts in G4ProjectileFragmentCrossSection header.
  - Replaced file-scoped mutexes in G4CrossSectionFactoryRegistry to use G4TypeMutexwhich addresses a static mutex initialization bug on Windows.
  - G4NeutronElasticXS, G4PhotoNuclearCrossSection, G4ElectroNuclearCrossSection: removed Gheisha cross-section from data store; use these classes as default. Corrected list of isotope cross-section.
  - G4NeutronElasticXS: instantiate components in BuildPhysicsTable.
  - G4HadronNucleonXsc: improved computation of kaon cross-sections, kaon-short and kaon-long cross-sections are computed as half sum of K- and K+. Implemented PDG-2017 parameterisation of total cross-sections. Use G4Pow, G4Exp, G4Log substituting `std::pow()`; added interfaces with G4ParticleDefinition and kinetic energy.
  - G4CrossSectionElastic, G4CrossSectionInelastic: use new class G4HadronicParameters for definition of max energy.
  - G4ComponentGGHadronNucleusXsc: general review and speed up without functional changes; added method `ComputeCrossSections()`; added cache values.
  - G4VCrossSectionDataSet, G4BGGPionElasticXS, G4BGGPionInelasticXS: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - G4CrossSectionElastic, G4CrossSectionDataSetRegistry, G4CrossSectionInelastic: added safe deletion of G4VComponentCrossSection at end of run.
  - G4CrossSectionDataSetRegistry, G4VComponentCrossSection: added registration/de-registration of component cross-sections.
  - G4ComponentGGHadronNucleusXsc: minor code cleanup.
  - G4HadronCrossSections: use G4ThreadLocalSingleton pattern.
  - G4HadronElasticDataSet, G4HadronInelasticDataSet: added cache; optimized `IsElementApplicable()` method.
  - G4CrossSectionElastic, G4CrossSectionInelastic: set `Zmin=1` instead of 0.
  - G4HadronCrossSections: added a protection (with a `JustWarning` exception) in the case of direct calls of cross-sections for particles not handled by Gheisha (e.g. gamma, He3, light anti-ions).
  - G4ComponentGGNuclNuclXsc: fixed bug for light ion cross-sections.
  - G4VComponentCrossSection, G4CrossSectionInelastic, G4CrossSectionElastic, G4ComponentSAIDTotalXS, G4ComponentGGNuclNuclXsc, G4ComponentGGHadronNucleusXsc: use stream in the `Description()` method instead of standard output.
  - G4ComponentBarNucleonNucleusXsc: simplified and cleaned up, use G4BarashenkovData.
  - G4BGGPionInelasticXS: use N. Starkov parameterisation for pion-nucleon.
  - G4NucleonNuclearCrossSection: use G4ComponentBarNucleonNucleusXsc.
  - G4UPiNuclearCrossSection, G4PiNuclearCrossSection: code cleanup.
  - G4ComponentGGNuclNuclXsc, G4ComponentGGHadronNucleusXsc: completed cleanup; removed code duplication, all parameterisations are used from G4HadronNucleonXsc class only; do not create temporary G4DynamicParticle objects; implemented computations only inside `ComputeCrossSections()` methods.
  - G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS, G4BGGPionElasticXS, G4ComponentSAIDTotalXS, G4CrossSectionPairGG, G4NeutronElasticXS, G4NeutronInelasticXS, G4ParticleInelasticXS: improved destruction.
  - G4VComponentCrossSection, G4CrossSectionDataSetRegistry, G4CrossSectionElastic, G4CrossSectionInelastic: fixed deletion of cross-sections and components in MT mode.
  - G4ComponentGGNuclNuclXsc: fixed Coulomb barrier computation.
  - G4HadronNucleonXsc: introduced parameterisation for kaons. Restored PDG 2005 parameterisation. Added cross-sections for strange hyperons.
  - G4ComponentGGHadronNucleusXsc: added cross-sections for strange hyperons.
  - G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS, G4BGGPionElasticXS, G4BGGPionInelasticXS: use only Barashenkov cross-section, Glauber-Gribov cross-section for target Z>1 and G4HadronNucleonXscNS for target Z=1. G4BGGPionElasticXS: limit cross-section below `20 MeV`.
  - G4PhotoNuclearCrossSection: added two new methods, `IsIsoApplicable()` and `GetIsoCrossSection()` to allow photo-nuclear reactions on deuterium. Addressing problem report #2092.
  - G4ComponentGGNuclNuclXsc: fixed nuclear radius parameterisation.
  - G4ComponentGGHadronNucleusXsc: choose NS (i.e. by N. Starkov) parameterisation for kaon scattering off Hydrogen.
  - G4BGGPionElasticXS, G4BGGPionInelasticXS, G4BGGNucleonInelasticXS: use SAID cross-section at low energy. Use NS (i.e. by N. Starkov) parameterisation for cross-sections on Hydrogen. G4BGGNucleonElasticXS: limit elastic cross-section off proton at low energy.
  - G4ComponentSAIDTotalXS - make class thread safe
  - G4HadronNucleonXsc: use PDG2016 parameterisation for protons. Smooth kaon cross-section. Kaon cross-section with the same parameterisation as in G4 10.4. Added extra method for kaons fully based on NS (i.e. by N. Starkov) parameterisation.
  - G4NucleonNuclearCrossSection: fixed typo in inelastic cross-section.
  - G4NeutronCaptureXS, G4NeutronElasticXS, G4NeutronInelasticXS G4ParticleInelasticXS: replaced environment variable G4NEUTRONXSDATA with G4PARTICLEXSDATA; use full list of isotopic cross-sections available in G4PARTICLEXS.
  - G4CrossSectionFactoryRegistry: fixed printout typo.
- Management
  - G4HadronicProcess: fixed compilation warnings on gcc-8.1.0 regarding catching polymorphic type by value, instead of by reference. Use const pointers and "nullptr" for G4Material and G4Element; use `ComputeCrossSection()` method; removed creation of new materials at run-time inside GetElementCrossSection(), all materials should be created in the user code. Use correct return type when calling `CheckResult()` from `PostStepDoIt()`: fixes case when the value of pointer 'result' does not get properly reset to NULL in case a non-conservation is detected, thus "bad" interaction does not get re-sampled.
  - Code cleanup in G4HadronicProcess, G4VLeadingParticleBiasing and G4HadLeadBias. G4HadronicProcess, G4HadronInelasticProcess: added keyword `override`; cleanup of cross-section scale factor and weights; G4HadronicProcessStore: use `nullptr` and added flag `buildXSTable` with get/set methods.
  - Added function `GetHadronicModel(modelName)` in G4HadronicProcess, which returns a pointer to G4HadronicInteraction.
  - Removed obsolete class G4HadronicInteractionWrapper.
  - G4HadronicProcess: added check if secondary particle is on the mass shell; if its mass differ from the PDG mass by more than `1.5 MeV` then the mass is forced to the mass shell, keeping total energy conserved but not 3-momentum.
- Processes
  - G4HadronElasticProcess, G4NeutrinoElectronProcess: fixed compilation warnings on gcc 8.1.0, regarding catching polymorphic type by value, instead of by reference. Use const pointers and "nullptr" for G4Material and G4Element.
  - G4NeutrinoElectronProcess: added cross-section biasing. Modified constructor.
  - G4HadronCaptureProcess: revised description; added C++11 keywords.
- Stopping
  - G4HadronStoppingProcess, G4MuonicAtomDecay: fixed compilation warnings on gcc 8.1.0, regarding catching polymorphic type by value, instead of by reference.
  - G4HadronicAbsorptionFritiof: replaced the explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - G4MuonMinusBoundDecay: changed the calculation used in `GetMuonDecayRate()`, based on problem report #2049. Added another GetMuonDecayRate() function using A, muon and nucleus masses in addition to Z to accomodate the more accurate formula.
  - G4MuonMinusBoundDecay: fixed Coverity defect in `GetMuonDecayRate()`; removed forbidden creation of G4Element in any model class.
- Utilities
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - Added new singleton class G4HadronicParameters, keeping global hadronic parameters. For the time being, it has only the high-energy limit of hadronic physics (instead of spreading this value in many different files, as done up to now). The default value is set to `100 TeV`.
  - Models Utilities:
    - First implementation of alpha cluster structure of carbon nuclei in G4Fancy3DNucleus, according to P.Bozek et al., Phys.Rev.C90, 064902 (2014). Fixed issue of event reproducibility; added loop checks and general cleanup. In case of difficulties in the method `ChooseFermiMomenta()`, emit a `JustWarning` exception instead of writing to `cerr`.
    - Minor improvement to code in G4Nucleon and cleanup.
    - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Abla
  - Extended model to hypernuclei.
  - Updated ABLA interfaces.
  - Updated some parameters and code cleanup.
  - Fixed some Coverity defects.
- Bertini Cascade
  - Added strange pair production channels to list of 6, 7, 8 and 9-body final states in classes G4CascadeT31piNChannel and G4CascadeT33piNChannel. Modified template values accordingly.
  - G4CascadeT11pizNChannel: extended strange pair production channels to 6,7,8 and 9 body final states.
  - Fixes in G4ElementaryParticleCollider methods `generateSCMpionAbsorption()` and `generateSCMmuonAbsorption()`, as they did not produce correct nucleon pairs when pion or muon was absorbed. Added quantum number conservation test to method `collide()`.
  - Fixed implementation of nuclear_rad_2par configurable key in G4CascadeParamMessenger.
  - G4GDecay3: fixed problem reported by CMS due to wrong kinematics in the final state by removing loop check; adding protection for low value of mother mass.
  - G4NucleiModel: replace Kossov parameterization of gammaQDxsec with new values coming from smooth line through deuteron photo-disintegration data which include 2004 JLab data up to 3 GeV. Fix in `boundaryTransition()` to prevent glancing incidence at shell boundaries from reflecting too many times.
  - G4CascadeT11pizNChannel, G4CascadeT31piNChannel, G4CascadeT33piNChannel: re-ordered particle types in final state arrays so that pion is first and nucleon is second. Two body final state methods assume this.
  - G4CascadeKminusNChannel, G4CascadeKminusPChannel, G4CascadeKplusNChannel, G4CascadeKplusPChannel, G4CascadeKzeroBarNChannel, G4CascadeKzeroBarPChannel, G4CascadeKzeroNChannel, G4CascadeKzeroPChannel: same as above but re-ordered only for two- and three-body final states.
  - G4CascadeT1GamNChannel: re-ordered final state particle types so that mesons are first in two- and three-body cases.
  - G4CascadeParamMessenger: added description to /process/had/ directory. Addressing problem report #2020.
  - Fix in `G4PreCompoundDeexcitation::deExcite()` to not use const reference as input since G4PreCompound can change the fragment and upset the energy balance. In `G4CollisionOutput::getTotalCharge()`, subtract electron charges in case of internal conversion in G4PreCompound. In `G4CascadeCheckBalance::collide()`, convert fragment momentum given in `MeV` to `GeV` (Bertini units) and remove electrom masses from energy balance when internal conversion occurs. Addesses problem report #2096 for energy non-conservation.
- De-excitation
  - G4ChatterjeeCrossSection, G4KalbachCrossSection: moved implementation to source.
  - G4VEmissionProbability, G4EvaporationProbability: fixed integration of probabilities for neutron emission for OPT=1,2.
  - G4NeutronRadCapture: replaced the explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - G4FermiPhaseSpaceDecay: moved long method from inline to source; added a protection for low mass of initial state.
  - G4LevelReader: attempt to adress problem reports #1986 and #2076 by changing hadling of internal conversion data.
  - G4LevelReader: changed fatal exception by warning for problematic level index.
  - G4LevelReader: changed `fAlphaMax` from 1.e+6 to 1.e+15 for correct IC probability of some isotopes.
  - G4DeexPrecoParameters: fixed checks on parameter values.
  - G4DeexPrecoParameters: set default deexcitation "evaporation+GEM".
  - G4DeexPrecoParameters: set default level density parameter to 0.075.
  - G4DeexPrecoParameters: added extra parameter for the FBU model.
  - G4FermiFragmentsPoolVI: extended number of FBU fragments from 399 to 991 and corresponding number of reaction channels.
  - G4EvaporationProbability, G4CompetitiveFission, G4VEmissionProbability, G4PhotonEvaporation: coherent use of the same parameterisation of level density and pairing correction between all models.
  - G4CompetitiveFission, G4FissionLevelDensityParameter, G4FissionLevelDensityParameterINCLXX, G4FissionProbability: tuned fission parameters.
  - G4EvaporationProbability: added option 4 for de-excitation.
  - G4LevelManager: added shell correction data and its accessor.
  - G4LevelManager, G4NuclearLevelData, G4LevelReader: added intialisation of level density and pairing correction per isotope, added possibility to choose between two parameterisations of level density.
  - G4FissionLevelDensityParameter, G4FissionLevelDensityParameterINCLXX, G4EvaporationLevelDensityParameter, G4CoulombBarrier, G4PairingCorrection: clean up according G4NuclearLevelData.
  - G4UnstableFragmentBreakUp: fixed Coverity defect.
  - G4ExcitationHandler: added protection to verbosity printouts in `SetDeexChannelsType()` and `Initialise()` methods.
  - G4PhotonEvaporation: improved debug printout.
  - Fixed few printout typos.
  - Fixed Coverity defects.
- Elastic scattering
  - Update to G4hhElastic to take into account recent TOTEM data for proton-proton at `13 TeV`.
  - Added new class G4DiffuseElasticV2. The underlying physics model is the same as in G4DiffuseElastic, however, the code has been revised, cleanup and significantly improved in a number of places. The performance has been improved by a factor of ~2 with respect to the original implementation. The approximation of small angles has been dropped (replaced by exact calculation) as it was not bringing any visible benefits.
  - Set to `100 TeV` (instead of `1 TeV`) the upper limit of applicability for the model G4DiffuseElastic and G4DiffuseElasticV2 (the number of equally-sized logarithmic energy bins has been increased from 200 to 250 to keep the same bin size, 0.04). The model has been validated with experimental data up to `300 GeV`, but it should not give meaningless results well above this energy. The number of bins has been further increased from 250 to 300 in order to have no larger bins up to `10 PeV`.
  - Replaced the explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - G4AntiNuclElastic: use cross-section component from G4CrossSectionDataSetRegistry and properly delete it at the end of run.
  - G4NuclNuclDiffuseElastic: replaced the high-energy limit of applicability of the model from `1 TeV` to the value specified in G4HadronicParameters.
  - G4AntiNuclElastic: do not delete component at the end of run.
  - G4HadronElastic: fixed numberical instability when final kinetic energy of projectile is nearly zero.
- INCLXX
  - Updated to INCL++ v6.28.
  - Improved strangeness and few nucleon removal (HFB).
  - Fixed mass of a light hypernucleus (Z=1,A=2). Fixed various bugs.
  - Checked porting with C++17 enabled.
  - Requiring new G4INCL-1.0 data set and corresponnding G4INCLDATA path environment variable.
  - Use G4RandGauss for Gaussian random distribution, to reduce cases of event non-reproducibility.
  - Changed Adapter::operator()() in G4INCLRandom to make direct use of `G4RandFlat::shootInt(n)`. Fixes FPE errors occurring in MT mode optimised.
  - Fixed few printout typos.
- Lend
  - MCGIDI_misc: fixed printout typo.
- Lepto-nuclear
  - G4NeutrinoElectronCcModel: added extra interfaces. Also fixed Coverity defect.
  - G4NeutrinoElectronCcModel: replaced the explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
- Particle High Precision
  - G4ENDFTapeRead, G4FissionProductYieldDist: fixed compilation warnings on gcc 8.1.0, regarding catching polymorphic type by value, instead of by reference.
  - G4ParticleHPElementData: removed unnecessary inheritance from G4HadronicCrossSection.
  - Fixed incorrect sampling of isotropic distribution. Addressing problem report #1745.
  - Fixed gamma level mismatch in G4ParticleHPInelasticCompFS. Not a complete fix because gamma data comes from ENSDF and does not necessarily match excitations in ENDF. Addressing problem report #1789.
  - Fixed memory leaks in `G4ParticleHPContEnergyAngular::Sample()` and `G4ParticleHPContAngularPar::cacheInit()`. Addressing problem report #2026.
  - `G4ParticleHPCaptureFS::ApplyYourself()`: Lorentz boost of neutron into target frame was backwards; reversed it. Also replaced `SetDefinition()` with `SetDefinitionAndUpdateE()`. Addresses problem report #1919.
  - Fixed definition of singletons for G4ParticleHPManager and G4ParticleHPThreadLocalManager and some code cleanup. Made G4ParticleHPThreadLocalManager a G4ThreadlLocalSingleton to avoid memory leaks generated each time a thread creates the instance.
  - Fixed bug for double allocation of G4ParticleHPReactionWhiteBoard in `G4ParticleHPThreadLocalManager::OpenReactionWhiteBoard()`.
  - `G4ParticleHPElasticFS::ApplyYourself()`: use correct reference frames for calculation of projectile and target momenta. Correction made for cases when `cos(Theta)` is given in lab frame and in center of momentum frame. Partial fix of momentum non-conservation for problem report #1918.
  - Fixed potential leaks in G4ParticleHPPhotonDist, G4ParticleHPContAngularPar and G4ParticleHPFinalState for use of pointers cached in G4Cache.
  - Minor code cleanup and formatting.
- Parton-String
  - In the string fragmentation part of the FTF model, first implementation of rotating strings with introduction of Mt distribution of hadrons. Parameters are tuned using NA49 experimental data on pp-interactions. Good results are obtained for Pi+-, K+-. For P and Pbar - xF correlations need still improvement.
  - Major revision of QGS model; implemented Reggeon cascading and associated "Fermi motion". Implemented new algorithm of parton kinematical properties determination and calculation of residual nucleus properties. Adjusted G4GammaParticipants to the revised model. Cut non-vacuum reggeons are interpreted as a creation of a single string, or as a single string creation and one "stable" hadron. Such processes are described by RRR diagram of Reggeon phenomenology.
  - Improved energy-momentum conservation in the QGS model, especially in the case of diffraction interactions.
  - Major improvement of QGS model: Pomeron parameters are set up according to A.Kaidalov and M.Poghosyan (2009-2010). Non-vacuum reggeons: f and omega, are included in the calculations using parameters by A.Kaidalov and M.Poghosyan (2009-2010).
  - New class G4Reggeons for calculations of cross-sections in QGS model.
  - Introduced new class G4QuarkExchange for implementation of quark exchange process in QGS model.
  - G4QGSParticipants: implementation of quark-exchange simulation in the QGS model. Fix for nucleon state counter. Minor fix to avoid FPE observed only in optimized mode.
  - G4VPartonStringModel: throw exception for the case when string fragmentation does not produce hadrons (for both FTF and QGS models).
  - In the QGS model, cleaned and improved G4SingleDiffractiveExcitation and G4QGSDiffractiveExcitation. Correction in G4SingleDiffractiveExcitation to treat h + N and Gamma + N diffraction.
  - In the QGS model, changed G4MesonSplitter probabilities UUbar DDbar from (0.5, 0.5) to (0.8, 0.2) for gamma projectile.
  - G4QGSMSplitableHadron: fixed bug in the case of gamma projectile with P_minus = 0 for the QGS model.
  - G4ExcitedStringDecay: bug-fix in `FragmentStrings()` method (access to the first element of an empty vector: this is for both FTF and QGS string fragmentation). Increased the number of max attempts to fragment strings from 10 to 100.
  - New tuning of FTF model parameters.
  - Introduced various Pt^2 for diffractive and non-diffractive interactions in the FTF model, for NA49 and NA61/SHINE experimental data.
  - Fine tuning in G4DiffractiveExcitation for the FTF model, to describe NA49 experimental data, especially, on Xf.
  - Fix to address the baryon puzzle of NA49 data for the FTF model; of baryons 1/2 at a string fragmentation setting up at `435 MeV/c`, and Pt for baryons 3/2 production at `900 MeV/c`.
  - Fine tuning of G4LundStringFragmentation (for the string fragmentation of the FTF model). Pt of mesons created at quark fragmentation is decreased. Pt of baryons created at quark and di-quark is increased. Corrected fragmentation functions of `qq->B(1/2)` and `B(3/2)`. Re-organized and cleaned up code; the variant is tuned using NA49 experimental data on `pp->p/pi/K +X`.
  - Introduced smearing of delta-isobar mass in the FTF model; delta-isobars are now treated as a kinetic track; improved parameterisation of the quark exchange process with excitation. NA61/SHINE exp. data on Pi+, Pi-, K+, K- and protons in PP interactions at 20, 31, 40, 80 and 158 `GeV/c` are now described. Now reproducing the ratio of <Strane Q>/<Normal Q> in PP interactions. Not describing kink in AA interactions.
  - Improved di-quark fragmentation into baryons in Lund string fragmentation (used in the FTF model). Improved description of NA49 and NA61/SHINE experimental data on `p+p->p+X`. Improvements in the method SetMinimalStringMass(), relevant for Pbar P annihilation.
  - In the FTF model, improved process probability parameterizations for Pi - Nucleon interactions. Good results are obtained for HARP data (`p/Pi+/Pi- + A` at `3, 5, 8, 12 GeV/c`) and for Pi N inclusive reactions.
  - Corrected calculation of nuclear residual excitation energy in the FTF model. Fine tuning of the FTF model parameters.
  - For the FTF model, set to false the switches for the A-dependence in nuclear destruction for baryon projectile in G4FTFParameters. Uncommented checks for these switches in the code. No changes in the random number sequence.
  - Improved versions and tuning of Lund and QGS fragmentations (used, respectively, by FTF and QGS string models).
  - G4LundStringFragmentation: bug fixes related to rotating strings in the FTF model.
  - G4VLongitudinalStringDecay: removed useless caching in the method FragmentationMass() which was causing rare irreproducibilities in gamma-nuclear reactions (i.e. involving QGS).
  - Improved QGS model and fixed issue of event reproducibility in gammma-nuclear.
  - Fixed leak in `G4QGSParticipants::GetList()` for targets not deleted after interaction.
  - G4QGSParticipants: introduced protection in the QGS model against negative squared mass in the method `PutOnMassShell()`, which was causing some rare crashes. If a negative squared mass occurs, a `JustWarning` exception is thrown and the squared mass is set to 0, before calling the square root (which is now computed only once).
  - Moved G4PomeronCrossSection class to 'qgsm' module.
  - G4FTFAnnihilation: fix to get flat `cos(theta)` and `phi` distributions for antiproton annihilation at rest in the FTF model. Added also a protection for the evaluation of the rapidity.
  - G4FTFModel, G4DiffractiveExcitation, G4FTFAnnihilation: code improvements of the FTF model. No changes in physics output, but with possible differences in the random sequence, due to numerical effects caused by re-ordering of operations.
  - G4LundStringFragmentation: tuning of strange - anti-strange probability production, for the FTF model, as a function of energy to describe NA61/SHINE `31 GeV/c p-C` data on `K+ / K-` production. Decreased also the Lambda0 production for NA61/SHINE `158 GeV/c` and `31 GeV/c p-C`: for the former good agreement, while for the latter the simulation underestimates the data.
  - G4QGSMFragmentation: implemented new algorithm for the last string decay a-la Lund. Improved the algorithm to stop the fragmentation of QGS strings. Tuning of parameters with NA49 and NA61/SHINE data was performed.
  - G4Reggeons: improved cross-sections of K-meson - nucleon interactions in the QGS model. Taken into account Pomeron and 2 non-vacuum exchanges. Initial parameters for kaons are taken from Kaidalov's paper (1976). Improved gamma-nucleon cross-sections by tuning of parameters.
  - Fix in `G4FTFModel::GetStrings()` to return a vector with size zero in wrong conditions for FTF.
  - G4VPartonStringModel: in cases of wrong conditions for the QGS model, the initial particle/nucleus is returned, according to a similar fix in FTF model.
  - Fixed handling of wrong conditions for the QGS model when it is unable to generate strings.
  - Fixed few printout typos and minor code cleanup.
  - Fixed Coverity defects.
- Pre-equilibrium
  - G4PreCompoundEmission, G4PreCompoundFragment, G4PreCompoundNucleon: fixed computations for OPT=1,2.
  - G4PreCompoundModel: fixed initialisation.
  - G4PreCompoundFragmentVector: moved inlined methods to source.
  - G4VPreCompoundFragment, G4HETCChargedFragment, G4HETCFragment, G4HETCNeutron, G4PreCompoundFragment, G4PreCompoundIon, G4PreCompoundNucleon, G4PreCompoundModel, G4PreCompoundEmission, G4PreCompoundTransitions, G4GNASHTransitions: updated usage of level density parameterisation according to de-excitation model.
- Quasi-Elastic
  - G4QuasiElRatios: removed unnecessary protection against heavy elements.
- Radioactive Decay
  - G4ECCapture, G4RadioactiveDecay, G4RadioactiveDecayMode: added electron capture channel from the N Shell.
  - G4ECCapture: added tables of PL2/PL1 PM2/PM1 and PN2/PN1 based on bound electrons radial wave amplitudes, taken from Bambynek et al., Rev. Mod. Phys., vol. 49, 1977. Compute partial probabilities of subshells PL1,PL2,PM1,PM2,PN1,PN2 from the tables PL2/PL1, PM2/PM1, and PN2/PN1. Valid for allowed transitions.
  - G4RadioactiveDecay: enable printout of parameters within G4VERBOSE in `BuildPhysicsTable()`.
- RPG
  - G4RPGAntiKZeroInelastic, G4RPGInelastic: fixed compilation warnings on gcc-8.1.0, regarding catching polymorphic type by value, instead of by reference.

### Intercoms

- Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Fixed compilation warnings for not used return parameters.
- G4UIcommand: added comparison of two variables. Addressing problem report #2068.

### Interfaces

- Fixed parse error for empty lines.
- G4Xt: fixed compilation warnings for casts on gcc-8.1.0.
- Fixed compilation warnings for not used return parameters.
- Changed `G4VInteractorManager::SecondaryLoop()` to virtual to cope with OpenInventor Qt visualization driver.

### Materials

- New class G4AtomicShells_XDB_EADL using experimental binding energy data from X-ray Data Book (XDB) where available and theoretical values otherwise. Removed old class G4AtomicShells_EADL.
- New class G4ICRU90StoppingData for ICRU90 data. Added method in G4NistManager to access G4ICRU90StoppingData; removed check forcing instantiation only in the master thread.
- G4ICRU90StoppingData, G4NistManager: fixed destruction of ICRU90 data. Fixed initialisation in G4ICRU90StoppingData.

### Particles

- Removed obsolete `MaxNumberOfProducts` enumerator in G4DecayProducts.
- Removed G4MUTEX_INITIALIZER from constructor in G4VDecayChannel.
- Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Fixed case of energy non-conservation in muon decay, due to wrong calculation of 2-neutrino system in CM frame for muon decay channel with spin. Addressing problem report #2072.
- Fixed proton momentum and direction in G4NeutronBetaDecay. Addressing problem report #2088.
- Changed UI command directory for G4NuclideTable and removed obsolete class G4NucleiPropertiesTableAME03.
- Fix in muon decay channel with spin, for calculation of beta of a 2 neutrino system in CM frame. Addressing problem report #2072.
- Code cleanup.

### Persistency

- GDML:
  - Clear auxiliary map information in `G4GDMLReadStructure::Clear()`. Addressing problem report #2064.
  - Added stripping of invalid characters for names generation in writer classes to prevent invalid NCName strings in exported GDML files. Adopt properly stripped generated strings for exporting names of optical surfaces.

### Physics lists

- Builders:
  - Replaced explicit high-energy limit of hadronic physics with the one from the new class G4HadronicParameters.
  - OrderingParameterTable: added gamma and e- processes.
  - G4FTFBinaryPiKBuilder, G4HyperonFTFPBuilder: improved deletion.
  - In G4QGSBinaryPionBuilder, G4QGSBinaryPiKBuilder, G4QGSPPiKBuilder, G4FTFPPionBuilder, G4BertiniPiKBuilder, G4FTFPPiKBuilder, G4BertiniPionBuilder, G4FTFBinaryPiKBuilder, G4BinaryPiKBuilder, G4INCLXXPionBuilder, G4FTFBinaryPionBuilder, G4BinaryPionBuilder, G4QGSPPionBuilder, use Barashenkov-Glauber-Gribov inelastic cross-section for pions. This allows to avoid to use Gheisha cross-sections for pion inelastic on Hydrogen target.
- Constructors:
  - decay
    - G4RadioactiveDecayPhysics: fixed initialisation ordering of messages to EM physics.
  - electromagnetic:
    - G4EmStandardPhysics, G4EmStandardPhysics_option1/2/4, G4EmLowEPPhysics, G4EmPenelopePhysics, G4EmLivermorePhysics, G4EmStandardPhysicsGS, G4EmLivermorePolarizedPhysics: use new parameter `MscEnergyLimit()` (default is `100 MeV`) allowing to customise transition from low-energy multiple scattering to high energy combination of multiple and single scattering.
    - G4EmStandardPhysics_option1/2: use Livermore photo-effect model.
    - G4EmStandardPhysics_option4, G4EmLivermorePhysics, G4EmPenelopePhysics: set upper energy limit to `100 TeV`.
    - G4EmLowEPPhysics: use new 5D gamma conversion model below `80 GeV`, use new Lindhard-Sorensen ion ionisation model above `20 MeV/u`.
    - Added new class G4GammaSuperProcess, for coherent handling of EM processes on gamma particles. G4EmStandardPhysics_option1: enable gamma super process. G4EmStandardPhysics: added possibility to use gamma super process.
    - G4EmLowEPPhysics: added Bremsstrahlung and pair-production for ions.
    - G4EmStandardPhysics_option4, G4EmLivermorePhysics, G4EmPenelopePhysics, G4EmPolarizedLivermorePhysics: use same Goudsmit-Saunderson multiple scattering model configuration and same configurations for hadrons and ions.
    - G4EmLowEPPhysics: use same configurations for hadrons.
    - Renamed G4GammaSuperProcess to G4GammaGeneralProcess.
    - G4GammaGeneralProcess, G4EmStandardPhysics, G4EmStandardPhysics_option1, G4EmStandardPhysics_option4: updated usage of gamma general process.
    - Added new constructors G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1.
    - G4EmStandardPhysics_option1: disabled general gamma process.
    - G4EmLivermorePhysics, G4EmPenelopePhysics: set stepping function parameters for muons and hadrons to (`0.2,50*um`).
    - G4EmStandardPhysics_option3: set stepping function parameters for muons and hadrons to (`0.2,50*um`) and enable Mott corrections.
    - G4EmStandardPhysics_option4: set stepping function parameters for muons and hadrons to (`0.1,20*um`).
    - Use the most recent version of lateral displacement for the Urban model.
    - G4EmParticles: extended list of particle (Bc+-, OmegaB, XiB, SigmaB).
    - G4OpticalPhysicsMessenger, G4OpticalPhysics: fixed documentation. Addressing problem report #2020.
    - G4EmStandardPhysics_option4, G4EmStandardPhysics_option3: cleaned up definition of nuclear stopping process.
    - G4EmStandardPhysics_option2: use the same models and parameters as in LHCb EM physics constructor.
    - G4EmStandardPhysicsWVI: use Opt3 parameters; use new ATENA ion stopping model.
    - G4EmLowEPPhysics: use Opt3 parameters; use Lindhard-Sorensen ion stopping model; use ICRU90 stopping for protons and alpha.
    - G4EmStandardPhysics_option3: use Alg96 lateral displacement sampling. Addresses issue reported in EM processes HyperNews Forum #1516.
    - G4EmLivermorePhysics: return back 5D gamma conversion model.
    - G4EmDNAPhysics_option7: fix for electron models combination.
    - G4EmDNAChemistry, G4EmDNAChemistry_option1: fixed typo in headers.
  - factory:
    - Moved G4_REFERENCE_PHYSCONSTR_FACTORY macro calls out of G4PhysicsConstructorRegistry., where they cause an implicit circular dependency when building granular libraries; moved into inline source where they can be included as necessary in a higher level compilation unit. REFERENCE macro calls can be made unique.
    - Allow override of exclusion of G4RegisterPhysicsConstructors definitions when using WIN32 by setting USING_STATIC_LIBS.
    - Code cleanup.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics, G4EmMessenger: added extra UI commands and modifiers to define flags for neutrinos and for neutrino-electron interactions.
    - Removed G4MUTEX_INITIALIZER from constructor in G4EmExtraPhysics.
    - G4BertiniElectroNuclearBuilder: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
    - G4EmExtraPhysics, G4BertiniElectroNuclearBuilder: added enabling of G4GammaGeneralProcess.
    - G4EmExtraPhysics, G4EmMessenger: added possibility of cross-section biasing for neutrino-nuclear process.
  - hadron_elastic:
    - G4HadronElasticPhysicsXS: fixed use of data for neutron capture in HP lists. Addressing problem report #2057.
    - G4HadronElasticPhysics: added service methods `GetElasticProcess()`, `GetElasticModel()` and `AddXSection()`. Code cleanup: use C++11 keywords; removed unnecessary statics.
    - G4HadronElasticPhysicsHP, G4HadronElasticPhysicsPHP, G4HadronElasticPhysicsXS, G4HadronElasticPhysicsLEND: use inheritance from G4HadronElasticPhysics; removed most of static members; use of C++11 keywords.
    - G4HadronDElasticPhysics, G4HadronHElasticPhysics: use of C++11 keywords.
    - G4ChargeExchangePhysics, G4IonElasticPhysics, G4ThermalNeutrons: removed static members; use of C++11 keywords.
    - G4HadronHElasticPhysics: for hyperon elastic cross-sections, replaced Chips cross-sections with Glauber-Gribov ones.
    - G4HadronElasticPhysics, G4HadronElasticPhysicsXS: use G4BGGNucleonElasticXS cross-section for protons.
    - Updated README.
  - hadron_inelastic:
    - G4HadronInelasticQBBC: use G4ParticleInelasticXS both for neutrons and protons.
    - Replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
    - In all hadronic builders fixed use of data for neutron capture in HP lists; fixed configuration of capture and fission models and cross-sections. Addressing problem report #2057.
    - G4HadronInelasticQBBC, G4HadronPhysicsFTFP_BERT, G4HadronPhysicsQGSP_BIC: clean-up model and cross-section configurations for neutrons.
    - Fixed possible double deletion of builders objects at the end of a run.
    - G4HadronPhysicsQGSP_BIC_AllHP: rewritten physics constructor for QGSP_BIC_AllHP, consistently with QGSP_BIC_HP (this fixes the problem of two fully overlapping neutron-capture models).
    - G4HadronPhysicsQGSP_BIC, G4HadronPhysicsQGSP_BIC_HP, G4HadronPhysicsQGSP_BIC_AllHP: fixed C++11 keyword.
    - G4HadronInelasticQBBC, G4HadronPhysicsFTFP_BERT, G4HadronPhysicsQGS_BIC, G4HadronPhysicsQGSP_BIC_AllHP: do not fill internal structure for cross-sections.
    - G4VHadronPhysics: added extra method.
    - G4HadronInelasticQBBC: removed more statics variables.
    - G4HadronPhysicsFTFP_BERT_TRV: for hyperon inelastic cross-sections, replaced Chips cross-sections with Glauber-Gribov ones.
    - G4HadronPhysicsFTFQGSP_BERT: use BGG pion cross-section consistently with all other physics lists.
    - G4HadronInelasticQBBC: use BGG proton inelastic; fixed neutron cross-section.
    - G4HadronPhysicsShielding, G4HadronPhysicsShieldingLEND: rewritten to cure memory leaks.
  - ions:
    - Major revision of all ion builders: reduced number of thread-local variables; simplified class constructors; for QMD, INCLXX, XS enabled combined list of de-excitation channels; use max energy from G4HadronicParameters and do not instantiate FTFP model if this energy is below max energy of the cascade; G4IonBinaryCascadePhysics is now identical to G4IonPhysics.
    - G4IonPhysics, G4IonBinaryCascadePhysics, G4IonPhysicsPHP: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
    - G4IonPhysicsXS: new constructor in which ParticleXS cross-sections are used for light ions.
    - G4IonPhysics: clean-up, removed unnecessary statics.
- Lists:
  - Use new G4RegisterPhysicsConstructors inline definitions to ensure that for static builds G4PhysicsConstructorRegistry is populated.
  - No longer register ShieldingLEND as a wrapper, but use explicit one.
  - LBE: replaced the explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - QGSP_BIC_HP and QGSP_BIC_AllHP use EM Opt4 (instead of EM Opt0 as before).
  - QBBC: use G4IonPhysicsXS.
  - PhysListFactory: added extra EM option "EM0", enabling default Opt0 EM physics configuration.
  - Shielding, ShieldingLEND, QGSP_BIC, QGSP_BIC_HP, QGSP_BIC_AllHP: moved implementation to source, removed templates.
  - Added "EM0" option to g4alt::G4PhysListFactory (via G4PhysListRegistry).
  - PhysListFactory: added extra EM options `WVI` and `_EM`.
  - Shielding: replaced use of env variable G4NEUTRONHP_PRODUCE_FISSION_FRAGMENTS with a call to `G4ParticleHPManager::SetProduceFissionFragments()`. Resolving Valgrind memory run-time errors.
- Util:
  - G4PhysListUtil: added methods `GetCaptureProcess()` and `GetFissionProcess()`.
  - G4DataQuestionaire: substituted G4NEUTRONXSDATA with G4PARTICLEXSDATA.

### Run

- Threading
  - Replaced pthread-style `<void*(void*)>` function signatures with `<void(G4WorkerThread*)>` as it is now unnecessary.
  - Removed WIN32 conditional for G4THREADCREATE in G4UserWorkerThreadInitialization, no longer needed.
  - Changed G4Thread to G4NativeThread when setting pin affinity in G4WorkerThread.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Added TiMemory auto-timer macros to some key functions in G4RunManager, G4RunManagerKernel, G4MTRunManager, and G4MTRunManagerKernel.
- Added TiMemory libraries and includes to CMake script for optional use.
- G4WorkerThread: use G4GeometryWorkspace and G4SolidsWorkspace the same way as the other workspaces, through the templated worskspace pool class.
- G4PhysicsListHelper: added two new EM physics process types.
- Minor update to G4Run constructor to invoke G4StatAnalysis::ResetCpuClock(); this enables the calculation of the FOM for G4StatAnalysis without requiring each instance to hold it's own timer.
- Added calls to new G4VScoreNtupleWriter, if activated. The concrete utility class can implement automated storing of hits collections of G4THitsMap type (used by primitive scorers) with Geant4 analysis tools.
- Added clearing of G4AssemblyStore in G4RunManager::ReinitializeGeometry().
- G4PhysicsListHelper: added new methods to set low/high 'looper' thresholds in Transportation classes.
- G4RunMessenger, G4WorkerRunManager: fixed printout typos.

### Track & Tracking

- G4SteppingManager: remove unnecessary checks of process manager for generic ion and muonic atom.
- Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
- Fixed potential memory leaks in assignment operator and copy constructor for G4Step and G4Track.
- G4VSteppingVerbose: reset singleton pointer in destructor. Addressing problem report #2095.
- Added protection for potential null pointer dereferencing in G4Track. Addressing problem report #2097.
- Some code cleanup.

### Visualization

- Fixed compilation warnings on gcc-8.1.0.

- Management
  - Implemented UI command `/vis/viewer/set/colourByDensity`: simple algorithm to allow colouring of detector elements based on materials density.
  - Introduced UI command `/vis/drawLogicalVolume`, synonymous with `/vis/specify`. Both commands create a new scene and invoke `/vis/scene/add/logicalVolume`. Includes overlap checking.
  - Moved time window parameters from G4OpenGLStoredViewer to G4ViewParameters. Now one can interpolate time window parameters (using `/vis/viewer/interpolate`) and make a movie of particles moving through time. To do this, see guidance on `/vis/viewer/set/timeWindow/` commands.
  - G4ViewParameters: fix for `/vis/viewer/save`. Completed `PrintDifferences(), operator<<()` and `operator!=()` for time window parameters. Provide proper Get and Set functions for time parameters.
  - Moved time window commands to `/vis/viewer/set/timeWindow/`. Deprecated the equivalent `/vis/ogl/set/` commands. Copied `/vis/ogl/set` time window commands to `/vis/viewer/set`.
  - G4VSceneHandler: reduced repetitive error messages.
  - Improved some UI commands.
  - `/vis/viewer/colourByDensity`, changed defaults: algorithm 1 is default; `gm/cm3` is the default unit; subsequent parameters are not omitable.
  - Removed G4VViewer::G4Spline.
  - `/vis/viewer/set/timeWindow/displayLightFront`: changed defaults.
  - `/vis/viewer/colourByDensity`: changed defaults.
  - Small bug fix in `G4ViewParameters operator<<()`.
  - `/vis/drawVolume` and `/vis/scene/add/volume` now draw all occurrences of a physical volume.
  - Fixed bug for multiple worlds in `/vis/touchable/dump`.
  - Reinstated G4VViewer::G4Spline.
  - `/vis/scene/add/volume` (and, consequently, `/vis/drawVolume`): improved guidance; describe the use of a regular expression. If physical-volume-name is "world" (the default), the top of the main geometry tree (material world) is added. If "worlds", the top of all worlds - material world and parallel worlds, if any - are added. Otherwise a search of all worlds is made. In the last case (a search of all worlds) all physical volume names are matched against the first argument of this command.
  - G4VisManager: moved creation of top level commands to end so that they may pick up guidance and parameters from invoked commands.
  - `/vis/drawVolume` and `/vis/draw/logicalVolume`: pick up guidance and parameters from `/vis/scene/add/...`.
  - `/vis/scene/add/trajectories`: avoid adding new model if one exists. If no trajectories model exists in the scene create a new one... else it already exists and there is no need to add a new one because G4TrajectoriesModel simply describes trajectories in the trajectories store whatever the type.
  - Added `/vis/touchable/findPath` UI command.
  - Improved several other facilities for accessing touchables.
  - Simplify scene checking and fixed minor bug.
  - In `/vis/scene/add/logicalVolume`, enable overlap checking text-only output and drawing.
  - Minor bug fixes in `/vis/scene/add/userAction` and `/vis/drawLogicalVolume`.
- Modeling:
  - Implemented UI command `/vis/viewer/set/colourByDensity`.
  - G4LogicalVolumeModel: added overlap checking. Fixed Coverity warning for unnecessary check on pointer.
  - Extensive revision of handling of touchables.
  - Added regex search. Match the string with the required match. The latter can be of the form "/regexp/", where regexp is a regular expression or a plain string, in which case there must be an exact match.
  - Improved description of G4TrajectoriesModel.
  - Initialise line width.
  - G4LogicalVolumeModel: enable overlap checking text-only output and drawing.
- OpenGL
  - Implemented `G4OpenGLStoredViewer::AddPrimitiveForASingleFrame()`.
  - Updated G4CONDITIONWAIT(...) to new C++11 requirements.
  - G4OpenGLQtViewer: replaced explicit usage of G4Mutex locking/unlocking with G4AutoLock pointers initialized with `std::defer_lock` as this enables one to avoid any deadlock or non-locked condition_variable waits by using `G4AutoLock::owns_mutex()`.
  - Small bug fixes, including light front.
  - Disable GL_LIGHTING for 3D markers.
  - G4LogicalVolumeModel: added overlap checking (printing only for now). Avoid multiple printing of overlaps. Print only first time for a given instantiation of G4LogicalVolume.
  - Added G4TouchableGlobalTransformScene: returning a pointer to the global transform of a touchable.
  - Added G4TouchableUtils: implementing `FindGlobalTransform()`.
  - Added `setLineWidth()` for trajectory models.
  - Open header files to users. In all header files, changed guards (similarly for OPENGLX, XM, QT, WT and WIN32), so that a user may include the OpenGL headers and use the OpenGL library. This will be useful if a user (or a developer) wishes to write a new vis driver based on the existing OpenGL code.
- OpenInventor
  - Implemented kernel visit for "colour by density".
  - Enable InventorQt driver.
  - Fixes to CMake build script; make OIQT driver installation optional.
- Raytracer
  - Use HyperStep of G4ParallelWorldProcess to draw volumes defined in a parallel world.
  - Updated use of thread-local static variables to function returning a thread-local static reference. New model for allowing support of multi-threading on Windows DLLs.
  - Conform to revision of handling touchables.
  - G4RTMessenger: fixed printout typos.

### Environments

- G4Py:
  - Updated interfaces for release 10.5.
  - Fixed setting of CMAKE_INSTALL_PREFIX; addresses problem report #1924.

### Data sets

- New low-energy data set version, G4EMLOW-7.7:
  - Updated microelec elastic cross-section files.
  - Added new JAEA elastic model data files.
  - Added new sampling table data for the Seltzer-Berger Bremsstrahlung model under brem_SB/SBTables.
  - Added a new directory fluor_XDB_EADL with most recent data on binding energies including rare high Z elements.
- New data files for proton and neutron density profiles G4INCL-1.0:
  - New data set based on Hartree-Fock-Bogoliubov calculations for radius and diffuseness parameter for the proton and neutron density profiles. The data are used for the INCL++ model, as described in the following publications:
    - K.Bennaceur and J.Dobaczewski, Comput. Phys. Commun. 168, 96 (2005).
    - J.L.Rodriguez-Sanchez, J.-C.David, D.Mancusi, A.Boudard, J.Cugnon and S.Leray, Phys. Rev. C 96, 054602 (2017).
- New data set version G4PhotonEvaporation-5.3 for nuclear de-excitation data:
  - Set IC coefficient = 1e20 for E0 gamma/IC transition of 809.907 keV in U234 (z92.a234). Correction needed for Pa234m decay simulation. Addressing problem report #2076.
  - Corrected typo in Te125 (z100.a247).
- New data set version for radioactive-decay processes, G4RadioactiveDecay-5.3:
  - Added capture from N shell for I-125, z53.a125. Data taken from DDEP.
  - Added alpha decay line in z88.a223 (Ra223). Data taken from DDEP.
  - Updated alpha decay in z86.a219 (Rn219). Data taken from DDEP.
  - Correction of energy level in z85.a215 (At215).
  - Slight update for alpha decay in z84.a215 (Po215).
  - Added firstForbidden tag in beta decay channel of z83.a211 (Bi211). Data taken from DDEP.
  - Added firstForbidden tags in beta decay channels of z81.a207 (Tl207). Data taken frpm DDEP.
  - Update data for z37.a82 (Rb82). Data taken from DDEP.
- New data files for evaluated cross-sections G4PARTICLEXS-1.1:
  - New data set replacing G4NEUTRONXS; produced from G4NDL-4.5 for neutrons, G4TENDL-1.3.2 for p, d, t, He3, He4 and LEND1.3 for gamma.
- New data set version for evaluated cross-sections from SAID database, G4SAIDDATA-2.0:
  - Updated data for p,n,pi,k inelastic and elastic.
  - Updated data for piN-->2piN and gamma induced reactions.

### Examples

- Updated reference outputs, macros and scripts.
- Fixes for Doxygen documentation and coding guidelines.
- Updated reference outputs, macros, READMEs and scripts.
- Updated vis/UI setup. Removed no longer needed G4VIS/UI_USE.
- Added inclusion of G4Types.hh in files for self-consistency.
- Fixed compilation warning on gcc-8.1.0.
- advanced
  - air_shower
    - Drop detector configuration through preprocessor directives. Use detector messenger instead. Reorganised and simplified code in UltraDetectorConstruction. Geometry can now be changed in the same interactive session. Allow to remove reflecting surface.
    - Reorganised macros. Added new macros.
    - No default PrimaryGeneratorAction in UserActionInitialization.
  - brachytherapy
    - Included new brachy source (I-125 Oncura 6711).
    - Added directory test_macro and included more analysis files.
  - ChargeExchangeMC
    - CexmcException: fixed typo in printout.
  - composite_calorimeter
    - General clean-up of the example including user actions and SD classes.
  - doiPET
    - New example simulating depth-of-interaction enabled positron emission tomography (PET) scanner.
  - gammaray_telescope
    - Fixed issues reported by Valgrind. Addressing problem report #1981.
    - GammaRayTelHadronPhysics, GammaRayTelIonPhysics: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - hadrontherapy
    - Added function DefineMaterial() in DetectorConstruction to define materials not contained in the NIST database.
    - Added the Phase Space; PrimaryGenerator and DetectorSD modified accordingly.
    - Added HadrontherapyRBE class for RBE calculation.
    - Removed analysis for LET and dose.
    - In HadrontherapyDetectorSD, added histograms for the energy deposited and kinetic energy in the phantom slices.
    - TrentoProtonPassiveBeamLine changed in TIFPAProtonPassiveBeamLine.
    - LET class completely renewed with new calculation approaches.
    - Updated user interface initialisation in main().
    - Code cleanup.
  - iort_therapy
    - Removed readout geometry together with Hit class. Including scoring mesh.
    - Fixed bug in the way to delete the geometry of the disk.
    - Removed analysis class.
    - Removed G4Decay and IORTMatrix as no longer needed.
    - Removed Protontherapy.
    - IORTDetectorConstruction: fixed initialisation setting of inner radius for "DiscoIORT0" and "DiscoIORT1" components. Fixed typos in printout.
  - lAr_calorimeter
    - FCALTBEventAction: fixed typo in printout.
  - medical_linac
    - Simplified PhysicsList; fixing problems on Windows.
    - Do not explicitly delete singletons, added extra initialisation.
    - Do not trigger /run/beamOn during detector construction in ML2AcceleratorConstructionMessenger and ML2PhantomConstructionMessenger.
    - Fixed typos in macros. Set Nloop=10 if the exp data are not provided.
  - microbeam
    - DetectorConstruction: removed user limits per volume; added protection from double initialisation.
    - Use default random engine in `main()`.
    - PhysicsListMessenger: set default step limit to 1 mm.
    - StepMax: use thread safe class from EM extended examples.
    - PhysicsList, PhysicsListMessenger: use StepMax.
  - nanobeam
    - Relaxed EM field settings.
    - Simplified UI session and updated default.mac macro.
  - purging_magnet
    - Removed useless buffer singleton PurgMagAnalysisManager and call directly G4AnalysisManager tools.
    - Clean-up in the SteppingAction.
  - underground_physics
    - DMXPhysicsList: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - xray_fluorescence
    - XrayFluoMercuryDetectorMessenger: fixed typo in printout.
- basic
  - B2
    - Modified default input macro exampleB2.in to reduce the output.
  - B3
    - Replaced explicit printing of Run ID with /run/printProgress.
    - Added StatAnalysis to example B3b to demonstrate statistical computations.
  - B4
    - Replaced deprecated `/vis/ogl/set/` with `/vis/viewer/set/timeWindow` command in visualization macros.
    - Fix to CMake configuration script.
- extended
  - analysis
    - Macro & commands review: removed obsolete /N03 top command directory; added protection against warnings issued from `ReinitializeGeometry()` if called in PreInit phase; added test for all commands defined in this example.
    - Added missing include in DetectorConstruction source.
    - New examples B3aScoreWriter and B4dScoreWriter based on basic example B3a and B4d respectively, demonstrating saving of scorers hits in form of n-tuples in a Root file using Geant4 analysis tools.
  - biasing
    - B03
      - B03PhysicsList: replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
    - GB03
      - Fixed bug in GB03BOptnSplitOrKillOnBoundary in the computation of the killing probability.
  - electromagnetic
    - TestEm2
      - DetectorConstruction: improved method names, do not allow to clear geometry between runs.
      - StepMax: use thread safe instantiation, messenger merged with PhysicsListMessenger.
      - Use MixMax default random number generator.
      - PhysicsList: make Opt0 default, removed local instantiation of G4Decay.
      - PhysListEm5DStandard: experimental PhysList with the new 5D gamma conversion model.
      - Corrected input macros to optimise output.
      - Run: added protection for division by zero.
    - TestEm3
      - DetectorConstruction: improved method names, do not allow to clear geometry between runs.
      - StepMax: use thread safe instantiation, messenger merged with PhysicsListMessenger.
      - Use MixMax default random number generator.
      - Removed radioactive.mac input macro.
      - PhysicsList: make Opt0 default, removed local instantiation of G4Decay.
      - Corrected input macros to optimise output.
    - TestEm5
      - PhysListEm5DStandard: experimental PhysList with the new 5D gamma conversion model.
      - Added test of new ion ionisation model, which is included in the new physics constructor PhysListEm19DStandard; added atima.mac macro file to compare results with known data.
      - StepMax: use thread safe instantiation, messenger merged with PhysicsListMessenger.
      - Use MixMax default random number generator.
      - Removed obsloete class PhysListEmStandardSSM.
      - PhysicsList: make Opt4 default, removed local instantiation of G4Decay.
      - Corrected input macros to optimise output.
    - TestEm7
      - SteppingAction: added edep at end of step for photo-electric.
    - TestEm8
      - Fix for thread safety in PrimaryGeneratorAction.
      - Disabled tracking cuts in input macro TestEm8.in.
      - Corrected input macros to optimise output.
    - TestEm11
      - SteppingAction: added edep at end of step for photo-electric.
    - TestEm12
      - Updated dna.mac input macro.
    - TestEm14
      - Extended with gamma -> e+ e- 5D conversion code.
      - PhysicsList: added G4EmStandardPhysicsWVI, GS, SS.
      - Use G4RotationMatrix to convert to gamma reference system.
      - Use default random number generator.
    - TestEm15
      - SteppingAction: no conversion case protection, use directly `G4ThreeVector::orthogonal()` for coordinate axis definition.
      - DetectorConstruction: use G4NistManager to allow predefined materials.
      - Minor cosmetics in DetectorConstruction and SteppingAction classes.
    - TestEm18
      - Updated PhysListEmStandard, livermore, penelope.
  - error_propagation
    - Use implicit destructor in ExErrorMagneticField.
  - exoticphysics
    - monopole
      - Changed G4MonopoleEquation to use G4MagneticField instead of not use G4ElectroMagneticField, as equations of motion do not use electric field.
      - G4MonopolePhysics: fixed static analyzer warning.
      - G4MonopoleTransportation: removed several static variables; fixed code layout.
      - Define the field setup data in the DetectorConstruction class to be thread-local using G4Cache utility.
      - Macro review and code clean-up.
      - Updated `main()` to make possible passing the monopole setup in both batch and interactive mode. Removed run initialization and added init_vis.mac macro for interactive session.
      - Added warning in G4MonopolePhysics when setting monopole parameters fails.
      - Explicitly define physics lists (FTFP_BERT default).
      - Added the default value of magnetic field to `0.2 tesla` and also setting of this value in monopole.in and init_vis.mac.
      - Fixed updating geometry parameters after initialization by calling G4RunManager::ReinitializeGeometry() instead of GeometryHasBeenModified().
      - Added printing production cuts table in RunAction::EndOfRunAction.
    - phonon
      - Update references for caustic and timing.
  - field
    - Macro review and code clean-up: removed EventAction, RunAction, RunActionMessenger used only for storing random numbers, already available in kernel; added test for commands defined in the example at the end of the main input macro; improved visualization of geometry; added `beamOn 10` button in gui.mac; updated README files.
    - BLineTracer
      - Fixed compilation error for missing header inclusion.
    - field01
    - Added code in `main()` to demonstrate use of G4PhysicsListHelper's `UseLowLooperThresholds()` and `UseHighLooperThresholds()` methods.
    - Added F01RunAction class to demonstrate fine grained control of G4[Coupled]Transportation's parameters for (killing) looping tracks (tracks which take too many iterations to finish integration; typically due to electrons in vacuum, but also can affect other charged particles).
    - Enable use of FSAL stepper and driver (to use it uncomment line in `main()`).
    - Added command `/field/setField Bx By Bz unit`.
  - field02
  - Added command `/field/setField Bx By Bz unit`.
- field03
  - Added commands `/field/setField Bx By Bz unit` and `/field/setLocalField Bx By Bz unit`.
- field05
- field06
  - Macro review and code clean-up; added `beamOn 10` button in gui.mac.

- geometry/transforms
  - `DetectorConstruction::PlaceWithAxialRotations()`: use `rotate(angle, axis)`.
- hadronic
  - envHadronic: added env variables for particleHP.
  - Hadr00
    - DetectorConstruction: cleanup geometry.
  - Hadr01
    - Cleaned up geometry definition.
    - DetectorConstruction: minor improvement of printout.
    - Added test macros.
  - Hadr02
    - Introduced CRMC (Cosmic Ray Monte Carlo) interface and created a physics list which uses this interface for very high energy hadronic interactions, while using FTFP_BERT for the rest.
    - Replaced explicit high-energy limit of hadronic physics with the one from G4HadronicParameters.
  - Hadr03
    - PhysicsList: added G4HadronElasticPhysicsXS.
  - Hadr06
    - PhysicsList: use G4IonPhysicsXS.
  - Hadr07
    - PhysicsList: use G4IonPhysicsXS.
    - SteppingAction: added edep at end of step for photo-electric.
  - NeutronSource
    - PhysicsList: activated use of GetHadronicModel() in `ConstructProcess()`.
    - PhysicsList: use G4IonElasticPhysics and G4IonPhysicsXS.
- medical/DICOM
  - Enabled CMake package configuration. Added DICOM_USE_DCMTK and DICOM_USE_HEAD options backwards compatible with environment variables. Updated CMake scripts to handle DICOM_USE_HEAD setup and installation.
  - DicomHandler implements GetDicomData{Path,File} which provides a fallback path to data libraries directory for DICOM2 and handles DICOM_USE_HEAD situation. Skipping 2 bytes in implicit VR (problem report #2101). Corrected reading for 'fPixelSpacingY' (problem report #2102).
  - Phantom parameterization classes take an argument specifying color file.
  - DicomEventAction doesn't print every event; removed `DicomRun::RecordEvent()` incrementing numberOfEvent (done by `G4Run::RecordEvent()`).
  - Cleaned up output; now just a summary is provided and per-voxel is output to file only.
  - Moved Data.dat to Data.dat.old and CMake copies correct Data.dat.{old,new} to Data.dat in binary directory based on DICOM_USE_DCMTK setting.
  - Use canonical definition for DICOMRunAction; removed wrong singleton specification.
  - DicomPartialDetectorConstruction: fixed shadowing of base class data for 'fMateIDs'. Fixed type conversion.
  - Updated DICOMUtilities.cmake to handle Windows builds; using modern CMake DICOM::target library alias.
- medical/DICOM2
  - New example demonstrating how to specialise and extend functionalities from DICOM example.
- medical/dna
  - Removed use of obsolete RanecuEngine.
  - chem5:
    - New example, variation of chem4, showing how to activate chemistry code and score the radiochemical yield G.
  - dnaphysics:
  - icsd:
    - Activated ntuple merging.
    - Updated plot.C for reading ntuples merged with row-wise mode (now default).
  - mfp:
    - Rewritten physics list and macro mfp.in to avoid factory usage.
  - microyz:
    - Activated ntuple merging.
    - Updated plotting function.
    - Updated plot.C for reading ntuples merged with row-wise mode (now default).
  - neuron:
    - Fixed PhysicsList to allow running on Windows.
  - pdb4dna:
    - Fixed analysis code.
  - slowing:
    - Updated input script and code cleanup.
  - spower:
    - Rewritten physics list and macro spower.in to avoid factory usage.
- medical/fanoCavity
  - ActionInitialization: added printout of Run::EndOfRun().
  - PhysListEmStandard_GS, PhysListEmStandard_SS, PhysListEmStandard, PhysListEmStandard_WVI, PhysListEmStandard_option3: use the same EM parameters as in physics_lists module.
  - Added PhysListEmStandard_option4.
  - Updated physics lists according to settings in main module.
- medical/fanoCavity2
  - Updated physics lists according to settings in main module.
- optical/LXe
  - LXeDetectorConstruction: moved DefineMaterials() to constructor.
  - Replaced local physics configuration with FTFP_BERT + G4OpticalPhysics/
  - Deleted LXeEMPhysics, LXeGeneralPhysics, LXeMuonPhysics and LXePhysicsList.
  - Removed class LXeSteppingVerbose.
  - In input macros, removed `/LXe/detector/update` and added `/run/initialize`. General cleanup.
  - Addressing problem report #2042.
  - Replaced local physics with FTFP_BERT + G4OpticalPhysics; deleted custom lists LXeEMPhysics, LXeGeneralPhysics, LXeMuonPhysics and LXePhysicsList; use G4EmStandard_option4 EM physics.
  - Added LXeRun to record and print results at the end.
  - Removed LXeSteppingVerbose and cleanup of macros.
  - Removed LXeUserEventInformation, use LXeEventAction instead; removed LXeRecorderBase, replaced with LXeHistoManager.
  - Removed unneeded direction named random.
  - Fixed MT issue: random directory should not be set via EventAction, this functionality is moved to DetectorConstruction.
  - LXeDetectorConstruction: removed definition of random number directory from the code, user may define this via UI command.
- optical/OpNovice
  - Macro review: added test for `/OpNovice/phys/cerenkovMaxPhotons` command at the end of OpNovice.in macro; updated README files.
- optical/OpNovice2
  - New example OpNovice2 for investigation of optical properties and parameters. Details of optical photon boundary interactions on a surface are recorded, as well as the details of optical photon generation and transport.
- parallel
  - MPI
    - New example exMPI04 demonstrating merging n-tuples via MPI.
    - Adapted g4mpi to allow to define an extra worker for collecting data from processing workers (needed for merging n-tuples).
    - Added classes for n-tuple merging.
    - In exMPI03: fixed warning from analysis when opening the second output file (dose-merged) within the same run.
  - TBB
    - Updated to work with migration from POSIX threads to C++11 threads.
  - ThreadsafeScorers
    - TSPhysicsLists no longer declares G4VPhysicsConstructors in header.
    - Added TiMemory timing to TSPrimaryGeneratorAction and G4Run.
    - Added TiMemory ASCII output and serialization to `main()`.
    - Fixed shadowing warnings.
    - Removed G4MUTEX_INITIALIZER from constructors of G4TAtomicHits.
    - Added scorers with G4StatAnalysis and G4ConvergenceTester.
    - Improved scheme for using TiMemory to time how long the scoring takes w.r.t. storage container and PS.
    - Included plot generation in main.
- persistency
  - gdml/G02
  - gdml/G03
    - RunAction: removed visualisation command.
  - P02
    - Updated selection.xml file with new members of G4MaterialPropertiesTable.
    - Fixed crash on reading due to duplication of materials in .root file. Addressing problem report #2065.
- physicslist
  - shared
    - Copy script works whether include/src directories exist or not.
- radioactivedecay
  - Activation
    - envHadronic: added env variables for particleHP.
    - PhysicsList: use G4IonElasticPhysics and G4IonPhysicsXS.
  - rdecay01
    - Add timeWindowBiased.mac input macro and data.
  - rdecay02
    - PhysicsList: in constructor, set nuclide table half-life threshold to `0.1 ps` and level tolerance to `1.0 eV`, to not miss short-lived nuclides.
    - HistoManager, TrackingAction: added two histograms to look at `0-0.1 MeV`, and `0-1 MeV` ranges in particle emission spectra.
    - Input macros: updated to latest UserEvapData_z83.a210, UserRadData_z82.a210, UserEvapData_z102.a252 database formats. Removed energy unit (`keV`) from call to `/gun/ion` in u238b.mac, po201m.mac and UserEvapDataBiTest.mac.