Geant4 10.7 Release Notes

December 4th, 2020

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 and VecGeom versions
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.9.3.
  Tested on 64 bit architectures (Intel or AMD) with CERN CentOS Linux 7 (CC7) (based on CentOS Linux 7).
- MacOS 10.15 Catalina with Apple LLVM/Clang-12.0 (llvm/clang-10)
- Windows-10 with Visual C++ 14.28 (Visual Studio 2019)

More verified and tested configurations (64 bits):

- Linux, gcc-5.4/6.3/7.4/8.2/9.3/10.2, clang-8/9/10
- Linux, Intel-icc 19.1
- MacOS 10.14 Mojave with Apple LLVM/Clang-10/11
- MacOS 11 Big Sur with Apple LLVM/Clang-12 (Intel chips only)

## 2. Supported CLHEP and VecGeom version

This release of Geant4 requires and has been verified with CLHEP, release 2.4.4.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.
A configuration option allows a Geant4 installation to use the VecGeom Library primitives, to replace the original Geant4 solids. VecGeom version 1.1.8 is required when using such configuration.

## 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

- Code using the G4MULTITHREADED preprocessor macro must include the `G4Threading.hh` header before using the macro.
- Minimum required version of CMake to build Geant4 is 3.8. Allow specification of C++20 for CMake 3.12 and above.

Geometry, Fields and Transportation

- The default integration method for field propagation in a pure magnetic field is changed to use a templated stepper G4TDormandPrince45. A speedup is expected. Instead a slowdown can occur if a large fraction of 'long' steps propagating in a vacuum or gas volume with a strong-enough magnetic field. To restore the previous method used in Geant4 10.6. set `nullptr` as third argument and the fourth argument `stepperDriverId=4` in the relevant constructor of G4ChordFinder.

Electromagnetic and optical physics

- Moved optical physics parameters to new G4OpticalParameters class.
- Added new threshold for muon/hadron bremsstrahlung and e+e- pair production allowing to stop a track when energy transfer exceeds the defined threshold and makes a new vertex.
- Added two extra sets of StepFunction parameters for light ions and generic ions. Added corresponding UI commands allowing one to customise step limitation for ions separately from step limits for electrons or hadrons.

Hadronic physics

- The UI commands for Radioactive Decay are named `/process/had/rdm/...`. The old commands `/grdm/...` are still valid, but deprecated, and will be removed in the next major release, Geant4 11.
- To enable building of ParticleHP as HP, use the new CMake option `-GEANT4_BUILD_PHP_AS_HP=ON` when building Geant4. The old environment variable `PHP_AS_HP` is still valid, but deprecated, and will be removed in the next major release.

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.13, G4RadioactiveDecay-5.6, G4PhotonEvaporation-5.7, G4ENSDFSTATE-2.3, G4PARTICLEXS-3.1, G4RealSurface-2.2`.
  - 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 can be optionally downloaded in addition.

## 4. New Developments and Capabilities

General

- Introducing new optional (Beta) tasking system, based on PTL (Parallel Tasking Library), dedicated run manager (G4TaskRunManager) and factory (G4RunManagerFactory), enabling use of tasks for the event loop. The tasking system is fully compatible with Intel TBB, which can be selected if GEANT4_USE_TBB=ON is specified when configuring CMake. The default behavior for tasking is to submit the tasks to an internal thread-pool and task-queue.
- Introduced general facilities based on GFlash implementation to facilitate multiple hit (energy & position) creation from fast simulation models.
- Updated SI constants, based on May 2019 redefinition of SI units.
- Added G4Backtrace header for printing backtraces from raised signals. Can be enabled by setting GEANT4_BUILD_BUILTIN_BACKTRACE option at configuration.
- New profiling settings for TiMemory which allow per-{run,event,track,step} profiling when GEANT4_USE_TIMEMORY is enabled.
- Extended CMake build system to support G4Py activation through GEANT4_USE_PYTHON flag.
- Simplified CMake builds to enable future modularisation of Geant4 libraries.

Analysis

- Major upgrade of analysis module, including support for multiple files and multiple output types in the same run; defeined new methods and corresponding UI commands. The new functions are available through a new G4GenericAnalysisManager class, and are demonstrated in the basic B5 example.
- Enabled handling of automatic min/max axes values in case of log scale in analysis tools.

Digitization, Hits & Scoring

- Added layered mass geometry option for the new "probe" scoring mesh.
- Introducing G4VPrimitivePlotter allowing the user to extend a primitive scorer; added G4VScoreHistFiller and G4TScoreHistFiller, allowing scorers to fill histograms defined through Geant4 Analysis tools.

Geometry and Field

- Improved speed for detection of volume overlaps either through UI commands or at geometry construction.
- New templated field classes for equation and selected steppers to avoid virtual call for field and equation respectively. Non-virtual calls are expected to provide a direct speedup. In addition key methods are made inline to enable compilers to seek extra speedup by embedding them to avoid any function call.
- New class G4DriverReporter to print progress of field drivers.
- Enabled "check-mode" for G4PropagatorInField and G4VIntersectionLocator.
- Enabled use of whiteboard for logging/debugging in G4MultiLevelLocator, if "check-mode" in navigation is being activated through UI command.

Materials

- Added two new public methods to add elements to a material: AddElementsByNumberOfAtoms(...) and AddElementByMassFraction(...).
- Added a new method ConstPropertyExists() to G4MaterialPropertiesTable. Added new methods to access/add properties with G4String and std::vector.
- Added new properties for scintillation allowing 3 time constants and a second wavelength shifter in the same material in G4MaterialPropertiesTable and G4MaterialPropertiesIndex.

Electromagnetic physics

- Added two extra sets of StepFunction parameters for light ions and generic ions. Added corresponding UI commands allowing one to customise step limitation for ions separately from step limits for electrons or hadrons.
- Introducing thermal model of positronium decay to two gammas. In this model, the positronium acquires a mean kinetic energy on formation, which contributes to a small non-collinearity of the gammas, detectable and significant in PET.
- Added new EM model for polarized gamma elastic scattering.
- New class for handling the numerical Differential Cross-Sections(DCS) for Coulomb scattering of e-/e+, and added new model, implementing single Coulomb scattering for e-/e+.
- Added new classes and models for micro-dosimetry simulation.
- Added new threshold for muon/hadron bremsstrahlung and e+e- pair production allowing to stop a track when energy transfer exceeds the defined threshold and makes a new vertex.
- Added a model for gamma-ray elastic interactions, able to account for molecular interference effects, by using database or user-custom form factors.
- Implemented three time constants for G4Scintillation, and allow multiple time constants to work with scintillation by particle type. Added second wavelength shifting process within the same material.

Hadronic physics

- For charm and bottom hadron-nuclear (elastic and inelastic) cross sections, the Glauber-Gribov approach has been extended to cover heavy hadrons. For final-state elastic nuclear scattering of charm and bottom hadron projectiles, a simple treatment is utilized. For final-state inelastic nuclear scattering of charm and bottom hadron projectiles, both Geant4 string models (FTF and QGS) have been extended to deal with charm and bottom quarks and diquarks carried by the heavy projectile hadron, as well as with the possibility of creating charm-anti_charm and bottom-anti_bottom pairs from the vacuum during the string fragmentation phase. Cascade models are currently not applicable for heavy hadrons and string models cannot handle them properly at very low energies: below 100 MeV a dummy model that returns as final state the initial state unchanged is utilized. The decays of secondary heavy hadrons - charm and bottom hadrons created by inelastic nuclear interactions of primary hadrons - cannot be pre-defined by Monte Carlo event generators, therefore a very simple approach is currently used: one single, fully hadronic decay is defined for each "long"-lived charm and bottom hadron, with a simple multi-body phase-space treatment of the decay kinematics.
- For the evaluation of systematic errors due to uncertainties in the Geant4 hadronic cross sections we recommend to scale up and down the cross sections, independently for elastic and inelastic interactions, and independently for different types of hadrons. Currently, this is possible for the following three categories of hadrons: nucleons (i.e. proton and neutron together), pions (i.e. pion+ and pion- together), all the rest of hadrons (i.e. kaons, hyperons, anti-baryons, light ions, light anti-ions, charm and bottom hadrons all together). New public methods of the singleton class G4HadronicParameters allow to enable the scaling of these cross sections (disabled by default), and to set the scaling factors (by default 1.0). Here are some rough, practical suggestions on the scaling of the cross sections: +/- 10% variation for nucleons and pions; +/- 15-20% variation for kaons; +/- 20-30% variation for other hadrons. Moreover, bigger variations might be considered at low energies to account for the challenge of describing the shapes of cross sections in the threshold and resonance region.
- New utility class to access hadronic processes, allowing to customise hadronic cross-sections per particle type.
- New UI messenger for hadronic physics, currently used for controlling verbosity level: the UI command `/process/had/verbose 0` allows to switch off the print-out at initialization of hadronic processes, models and cross-sections (similar to the existing command `/process/em/verbose 0` to switch off the print-out of electromagnetic physics information).
- New UI command to change the default upper energy limit (default: 100 TeV): `/process/had/maxEnergy ...`
- New G4PARTICLEXS-3.1 dataset provides accurate fusion cross-sections based on data, more accurate inelastic cross-sections for neutrons, protons, light ions, and gamma for the full energy range.
- Replaced where possible the use of environmental variables in hadronic models with appropriate UI commands.
- A new low-energy gamma-nuclear final-state model, `G4LowEGammaNuclearModel`, based on precompound de-excitation and providing isomer production and gamma transitions, is used in `G4EmExtraPhysics`.
- Improved treatment of antibaryon interactions in QGS.
- Added handling of lepto-nuclear interactions for anti_nu_e, nu_e, anti_mu_nu and mu_nu.
- A new coalescence model, useful in particular for Cosmic Ray applications, has been introduced. By considering the list of secondaries produced by a string model, it forms deuterons and antideuterons from, respectively, proton-neutron and antiproton-antineutron pairs with close momenta. By default, the coalescence model is disabled; it can be switched on via the UI command `/process/had/enableCRCoalescence true`.

Physics Lists

- Enabled charm and bottom hadronic physics in nearly all physics lists, in particular those of interest for HEP. (The main exceptions are the following physics lists: `QGSP_BIC, QGSP_BIC_HP, QGSP_BIC_AllHP`.) The QGS-based physics lists use, as for other hadrons, QGSP for charm and bottom inelastic interactions above 12 GeV, whereas FTFP is used below 25 GeV. The other, FTF-based physics lists, use FTFP at all energies, with a simplified approach below 100 MeV.
- New physics-list builder classes have been introduced to allow alternative builders for anti_proton, anti_neutron, hyperons and anti-hyperons nuclear interactions at high energies with QGSP.
- QGS-based physics lists use now QGS for hyperons, anti-hyperons, anti_proton and anti_neutron projectiles at energies above 12 GeV.
- Physics lists that include `G4EmExtraPhysics` use the new low-energy gamma-nuclear model (`G4LowEGammaNuclearModel`) below 200 MeV (while Bertini cascade is used above 199 MeV up to 6 GeV, and QGSP above 3 GeV). The use of this model, its energy threshold and the alternative cross section `G4GammaNuclearXS` can be configured.
- Extended EM physics-list configurator interface allowing application of extra configuration on top of any available DNA constructor.
- Cleanup destruction of physics processes at the end of job. Reviewed ownership/deletion of physics models at the end of the run.

Visualization and Interfaces

- Introduced new alpha-version of a Qt3D visualization driver, based on native Qt rendering.
- Added support for Open Inventor Qt visualisation driver to be built and used in applications. The OpenInventor module can be built with either the OIQt driver, or with the OIX/OIXE drivers, but not with both. Enabled use of OIQt viewer with Qt UI.

Examples

- New extended example showing how to use Geant4 as a generator for simulating inelastic hadron-nuclear interactions.
- New extended example demonstrating how to create multiple energy deposits from the fast simulation model.
- New extended example implementing the typical setup of a Small Angle X-ray Scattering (SAXS) experiment. It is meant to illustrate the usage of molecular interference (MI) of Rayleigh (coherent) scattering of photons inside the matter.
- New extended medical example (dna/chem6) providing scoring of the radiochemical yield G as a function of time and LET.
- New advanced example showing how to efficiently simulate particle transport through aerosols containing billions of randomly-positioned droplets, using an ordinary workstation.
- New advanced example Gorad (Geant4 Open-sourced Radiation Analysis and Design), a turn-key application for radiation analysis and spacecraft design.
- New advanced example HGCal_testbeam based on a Geant4 standalone application for the CMS High Granularity Calorimeter (HGCal) studies, to demonstrate a test beam setup used in HEP experiments, and as a base for the validation studies and comparison with experimental data.
- New advanced example modelling the ICRP110 reference computational human phantoms and calculating the dose in individual voxels and entire organs. The human male phantom is created from a whole-body clinical CT image.

## 5. Expected effects on physics and computing performance

General

- Revision of G4PhysicsVector classes to use similar algorithm for bin selection and adding checks on vectors length.
- Code reorganisation and optimisations in G4Transportation has been measured to provide a persistent reduction of instruction-TLB misses, leading to some measurable CPU speedup.

Electromagnetic physics

- Results are expected to be similar to release 10.6 for EM calorimeters.
- Expected some measurable CPU speedup.
- Expected improved angular distributions for e+e- pairs.

Hadronic physics

- Hadronic showers remain similar to those of the latest patch release 10.6.p03, with the only expected difference of a few percent narrower showers for FTF-based physics lists. Comparing the hadronic showers of the two physics lists FTFP_BERT and QGSP_BERT, the latter show sligthly higher response, larger energy fluctuations, and longer and narrower shapes with respect to the FTFP_BERT showers.
- Expected more accurate cross-sections for light ions including fusion reactions.
- Expected slightly faster computation of hadronic cross-sections.

## 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, particularly on Windows with Visual Studio, where warnings level has been raised when building examples. 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 support for building PTL external module and introduced GEANT4_USE_TBB option, enabling use of TBB as possible alternative to builtin PTL tasking.
  - Added support for Open Inventor Qt visualisation driver to be built and used in applications. The OpenInventor module can be built with either the OIQt driver, or with the OIX/OIXE drivers, but not with both. Added GEANT4_USE_XM to Open Inventor X11 driver code block to correct Xm and Xt link order. Improved consistency of using XQuartz vs System OpenGL on macOS. Removed obsolete FindInventor module.
  - Introduced configuration support for Qt3D visualization driver. Qt3D driver optional based on find of required Qt5 modules.
  - Applied patch to allow compilation on Windows using Clang.
  - Removed requirement on presence of GLU library. No longer save GLU related variables in the package cache.
  - Change shimmed imported target name to VecGeom::vecgeom to match upstream usage and reliably use target when available from VecGeom. Export VecCore_DIR to package cache when set so that Geant4 behaviour is consistent. Co-works with VecGeom-1.1.8.
  - Updated functions to use G4expat{-static} as custom built targets.
  - Added GEANT4_BUILD_BUILTIN_BACKTRACE option to enable automatic use of G4BackTrace signal handling in G4RunManager.
  - Importing new "target" style API for declaring and composing libraries from modules of source code.
  - Propagate value of CMAKE_DISABLE_FIND_PACKAGE_ROOT down to tests that optionally support Root to allow testing Geant4 with Root support disabled. This is necessary when testing Geant4 with a different C++ standard than Root when it's installed. Avoid warnings from propagating the flag down to tests.
  - New GEANT4_BUILD_PHP_AS_HP option to enable ParticleHP as HP in physics processes. Replaces PHP_AS_HP environment variable. Added PHP_AS_HP "feature" in Geant4Config.cmake/geant4-config to allow clients to check availability.
  - Use STRINGS cache property for enum options and CMAKE_BUILD_TYPE to give easier interface in (G)UIs.
  - Use "${FOO:-}" variable expansion and "-z" test to check for undefined variables in Bourne Shell scripts. Prevents errors when shell is in "set -u" mode. Addressing problem report #2221.
  - Handle install of G4clhep{-static} independently of main modules due it being built outside the category system.
  - Renamed remaining internal "Geant4..." modules to "G4" convention. Retain Geant4DefineModule and Geant4LibraryTargets until new modularization scheme is in place.
  - Set CLHEP minimum required version to 2.4.4.0.
  - Set VecGeom-1.1.8 as minimum required version for optional build with VecGeom.
  - Added possibility to download and install optional TENDL data set.
  - Updated data-sets versions.
- GNUMake
  - Added setup for building and configuring new externals/ptl and tasking modules. External installation of PTL can be enabled by defining the installation through the environment variable PTL_BASE_DIR.
  - Added -pthread to all builds in Linux targets.
  - Corrected setup for use of Open Inventor (Coin).
  - Added configuration for Qt3D visualization driver.
  - Added missing settings in G4UI_BUILD.gmk script for OIQt and use of UI.
  - Removed deprecated G4USE_STD11 flag settings.
  - Removed dependency on GLU for all configurations, as no longer necessary.

### Analysis

- Analysis management & plotting
  - Major upgrade including the support for multiple files and multiple output types.
  - New G4GenericAnalysisManager, G4GenericFileManager factory classes.
  - New G4VAnalysisManager functions to set file-names and corresponding UI commands. While it is possible to mix output types for histogram and profiles objects, only one output type is supported for ntuples.
  - Redesigned management classes to separate object file handling from output specific analysis managers.
  - Updated G4PlotManager for use of new fonts.
  - Changes to allow overriding Root classes in g4mpi/analysis.
  - Removed redundant variable in G4RootNtupleFileManager::Reset().
  - Fixed the memory leak reported by Valgrind in deleting files.
  - Fixed text typos in printout. Problem report #2285 and GitHub PR#15.
- Ntuples
  - Implemented writing ntuples in multiple files of the same output type. New G4VAnalysisManager function SetNtupleFileName(..) and UI commands: "/analysis/ntuple/setFileName id fileName" and "/analysis/ntuple/setFileNameToAll fileName"
  - Fix to add a null-pointer check to ntupleDescription->fNtuple in G4RootPNtupleManager::Merge().
- g4tools
  - Updated the g4tools version to g4tools-5.2.1.
    - Corrections to handle automatic min/max axes values in case of log scale. See History_tools in analysis module for all details.
    - Modifications in tools/hdf5 to use H5free_memory() instead free() at some places (needed for HDF5/1.12.0).
    - Modifications in graphics to be in sync with the code in inlib/exlib around Apple/Metal (no impact on offscreen plotting).
    - See History_tools for the complete list of modifications.
- Updated granular dependencies in preparation for modularization.
- Removed uneeded links to externals in factory.

### Digitization & Hits

- Introducing G4VPrimitivePlotter allowing the user to extend a primitive scorer. Use G4VPrimitivePlotter to allow scorers to directly fill histograms. Added "/score/fill1D" command.
- Introducing G4VScoreHistFiller and G4TScoreHistFiller, allowing scorers to fill histograms defined through Geant4 Analysis tools.
- Introducing a new scorer, G4PSVolumeFlux.
- Added two ComputeSolid() method to G4VPrimitiveScorer, to consolidate code.
- Added Mutex lock to G4ScoringProbe::SetMaterial() to avoid race condition.
- Fixed cases of comparison between int and size_t in templated classes and some cleanup.
- Fixed text typos in printout. Problem report #2285 and GitHub PR#15.

### Electromagnetic Processes

- DNA:
  - Added classes for IRT; added features in management classes for IRT (G4ITReaction, G4ITModelProcessor ...).
  - Added features in G4DNAMolecularReactionTable for GFDE.
  - Added molecules (Oxygen, O2, O3, HO2) from: Plante et al.(2017).
  - G4DNAMolecularMaterial: avoid deleting instance of the singleton; removed commented lines. Fixed thread contention on mutable data in G4DNAMolecularMaterial. Some code cleanup.
  - G4MoleculeDefinition: copy constructor and assignment operator are not allowed (as for G4ParticleDefinition). Now deleted.
  - Revised displacement of OH radicals of B1A1 dissociation based on momentum conservation in G4DNAWaterDissociationDisplacer.
- High Energy
  - G4hPairProductionModel: inherit ComputeDMicroscopicCrossSection() from G4MuPairProductionModel to avoid code duplication.
  - G4hPairProductionModel, G4hBremsstrahlungModel, G4hPairProduction, G4hBremsstrahlung: added definition of the energy threshold for creation of a vertex when energy transfer is above the threshold.
- Low Energy
  - Added new model for polarized gamma elastic scattering, provided by the JAEA group. Updated existing process (G4JAEAElasticScattering) and model (G4JAEAElasticScatteringModel) in order to comply with the new data format. Changed initialisation of JAEA models.
  - Added new classes for micro-dosimetry simulation.
  - Added new class G4MicroElecSurface, a new boundary process for e-.
  - Removed obsolete G4MuElec* classes.
  - G4LivermorePhotoElectricModel: allow "Water" as a name of water material for low-energy photo-effect.
  - Added G4LivermoreGammaConversion5DModel class. Reading EPICS2017 data.
  - Change in G4LivermoreGammaConversion to now derive from G4PairProductionRelModel. Added missing method InitialiseForElement().
  - Added G4PenelopeRayleighModelMI model and ancillary class G4MIData.
  - Replaced std::log with G4Log in Penelope and Livermore models.
  - Use GetZasInt() in Penelope models, when applicable.
  - Fixed compilation warnings on clang-10.
- Muons
  - G4MuPairProductionModel: optimised ComputeDMiscroscopicCrossSection() to speedup initialization.
  - G4ModifiedMephi: new angular generator for muon/hadron Bremsstrahlung.
  - G4MuPairProductionModel, G4MuBremmstrahlungModel, G4MuPairProduction, G4MuBremmstrahlung: updated sampling of final state using G4ModifiedMephi; implemented check on energy transfer and if beyond the threshold, kill primary particle and create a new vertex.
- Standard
  - G4eDPWAElasticDCS: new class that handles the numerical Differential Cross-Sections(DCS) for Coulomb scattering of e-/e+, computed by Dirac Partial Wave Analysis(DPWA) using ELSEPA.
  - G4eDPWACoulombScatteringModel: new class that implements single Coulomb scattering model for e-/e+ based on the numerical DCS provided by the above G4eDPWAElasticDCS class.
  - G4eplusAnnihilation: fixed problem seen in the rare case, when initial energy is null; introducing thermal model of positronium decay to two gammas. In this model, the positronium acquires a mean kinetic energy on formation, which contributes to a small non-collinearity of the gammas, detectable and significant in PET. To activate this model: material->GetIonisation()->SetMeanEnergyPerIonPair(meanKE). A mean kinetic energy of 5 eV produces a projected acollinearity of about 0.5 degrees FWHM, as reported in: K.Shibuya et al., IFMBE Proceedings Vol. 14/3 1667 (2007).
  - G4UniversalFluctuation: changed 'nmaxCont' from 16 to 8 for speedup. Set value for 'a0' to 42 after optimisations. Minor C++ improvements.
  - G4UrbanMscModel: tuned 'tlimitmin' computation for e- (for e+ kept unchanged) and changed parameterisation of 'stepmin'; added two private inline methods to reduce code duplication. Removed cache and introduced data struct precomputed at initialisation, added e- range cut to the data structure. Changed parameterisation of backscattering parameter `doverra`; Changed computation of 'tlimit' in the step limitation algorithm UseDistanceToBoundary(); affecting only Opt3 EM physics.
  - G4BetheHeitler5DModel: change "final" keyword by "override" for virtual methods.
  - G4LindhardSorensenData: fixed few numbers in the data table.
  - G4eeToTwoGammaModel: code cleanup; added static flag, which identifies if electron motion is taken into account for sampling of acollinearity, when annihilation happens at rest; ensuring that by default no extra computation is performed; also removed extra printout at initialisation and extra data structure.
  - G4ICRU49NuclearStoppingModel, G4WentzelOKandVIxSection, G4WentzelVIRelModel, G4SeltzerBergerModel, G4LindhardSorensenIonModel: improved usage of locks; defined deletion of copy constructor and assignment operator. Improved usage of locks. Defined standard deletion of copy consructor and assignment operator.
  - G4SauterGavrilaAngularDistribution, G4DeltaAngle: code clean-up.
  - Fixed compilation warnings on clang-10.
  - Requires data-set G4EMLOW-7.13.
- Utils
  - G4EmParameters, G4EmLowEParameters, G4EmLowEParametersMessenger: added a new parameter - name of the sub-directory with data for Livermore models with variants: "livermore" (default), "epics_2017". Comes with G4EMLOW-7.10 data set and higher.
  - G4EmParameters, G4EmParametersMessenger, G4VMultipleScattering: removed displacement-beyond-safety option, as may lead to crashes in some circomstances, and wrong results in others.
  - G4EmParameters, G4EmParametersMessenger, G4EmExtraParametersMessenger, G4VEnergyLossProcess: added two extra sets of StepFunction parameters for light ions and generic ions. Added extra UI commands. Modified interfaces accordingly. Removed old comments.
  - G4EmParameters, G4EmExtraParameters: added new flag defining type of single scattering model.
  - G4EmParameters, G4EmParametersMessenger: added new flag threshold for muon/hadron bremsstrahlung allowing to stop a track when high energy bremsstrahlung is emitted.
  - G4OpticalParameters, G4OpticalParametersMessenger: added new files to control optical parameters, as for G4EmParameters.
  - G4EmLowEParametersMessenger: extended number of DNA PhysicsList options.
  - G4EmModelManager, G4VMscModel, G4VEmModel, G4VMultipleScattering: at initialisation print extra line for all multiple-scattering models instead of the common printout, needed when different models are applied for regions. Minor code clean-up. Addressing problem report #2106.
  - G4VEmProcess: removed old unused methods; DefinedMaterial() method is now protected (needed for AtRest processes). Fixed setting of current particle. Addressing problem report #2277, affecting ion DNA physics.
  - G4LossTableManager: made ResetParameters() method public. Make clean interface for electron and positron general process.
  - G4VAtomicDeexcitation: optimized arrays initialisation.
  - G4VEmAngularDistribution: added flag of polarisation and corrected order of initialisation.
  - G4VEmModel: define flag of polarisation for an angular generator.
  - G4EmProcessSubType: added fSurfaceReflection.
  - Fixed text typos in printout. Problem report #2285 and GitHub PR#15.
- Xrays
  - Implemented three time constants for G4Scintillation, and allow multiple time constants to work with scintillation by particle type. The existing material property names have FAST and SLOW in them, like FASTTIMECONSTANT. This doesn't generalize well. Also YIELDRATIO as a single value doesn't generalize to three time constants. Proposal is to create new names SCINTILLATIONTIMECONSTANT1/2/3 and the same for other parameters. The existing names are kept for backwards compatibility, with the idea to remove them in the next major release. There is a flag in G4Scintillation, with messenger command in the OpticalPhysics list, to use the new method: /process/optical/scintillation/setEnhancedTimeConstants true. Results are unchanged if using same values. Allow specifying SCINTILLATIONYIELD only (not requiring SCINTILLATIONYIELD1) when only one scintillation channel is present. Same for particle specific yields. Set verbosity levels correctly.
  - G4Cerenkov, G4Scintillation: use new G4OpticalParameters to control simulation parameters. Removed BuildThePhysicsTable(). Applied code formatting.
  - G4Cerenkov: make GetAverageNumberOfPhotons() method public.
  - G4VXTRenergyLoss: fixed destructor.
  - Code formatting.

### Error Propagation

- Fixed Coverity defects warnings in G4ErrorPropagator for unreachable code. Implemented move assignment operators in G4ErrorSymMatrix, G4ErrorSymMatrix, G4ErrorFreeTrajParam, G4ErrorTrajState and G4ErrorSurfaceTrajParam.
- Fix to CMake script to support new CMake system.

### Event

- Introducing a new General Particle Source energy distribution option, that generates flat energy distribution with track weights that represent energy spectrum provided by /gps/hist/point commands. This option can enhance, for example, higher energy tracks that are rare but contribute to the scores.
- Corrected logic in G4VPrimaryGenerator::CheckVertexInsideWorld() method.
- G4GeneralParticleSourceMessenger: command structure clean-up.
- Some code cleanup, formatting and C++11 revision.
- Fixed CMake scripts to ensure G4_USESMARTSTACK pre-processor symbol is properly propagated.
- Added support for event profiler with TiMemory.
- Removed obsolete and unused headers.
- Fixed Coverity defect in G4GeneralParticleSourceMessenger.
- Fixed text typos in printout. Problem report #2285.

### Externals

- CLHEP:
  - Updated to CLHEP version 2.4.4.0.
  - Updated values in SystemOfUnits.h and PhysicalConstants.h for: e_SI (electron charge), h_Planck (Planck constant), Avogadro (Avogadro constant), k_Boltzmann (Boltzmann constant), based on May 2019 redefinition of SI units, References - [wikipedia.org], [britannica.com].
  - Use 32-bit internal seeds types coherently in MixMaxRng. Addressing CLHEP JIRA ticket #156.
  - Removed obsolete #pragma interface/implementation in Vector classes.
  - Get rid of switch statement in operator()/operator[] of Hep3Vector Replaced dx/dy/dz with operator[] in Hep3Vector. Replaced private dx/dy/dz with public x()/y()/z() in Hep3Vector.
  - Added missing includes in Vector and Random classes for translation unit encapsulation.
- Expat:
  - Migrated build of G4expat to locally defined targets, allowing cleaner specification of usage requirements.
- PTL:
  - New module for PTL (Parallel Tasking Library), implementing a lightweight C++11 multi-threading tasking system featuring thread-pool, task-groups, and lock-free task queue.
- ZLIB:
  - Added needed include directories to CMake script when using new CMake system. Cleanup.

### G3toG4

- Cleanup CMake build, removing obsolete granular library options and explicit include_directories.

### General Processes

- Biasing
  - G4ImportanceProcess: added process type as fParallel.
  - Fixed Coverity defect warnings for data initialisation.
- Cuts
  - Revision for use of c++11 constructs. Code cleanup and formatting.
- Management
  - G4ProcessManagerMessenger: use cache pointer of selected particle in the G4ParticleTable class.
  - G4ProcessTable: enabled deletion of all processes except G4Transportation at the end of run.
  - Fixed Coverity warning for uninitialised data in G4VProcess.
  - C++11 revision and code cleanup/formatting.
- Optical
  - Added second wavelength shifting process, G4OpWLS2, within the same material.
  - Use new ConstPropertyExists(int) method rather than passing strings.
  - G4OpRayleigh, G4OpAbsorption, G4OpMieHG, G4OpWLS, G4OpWLS2: moved to new G4OpticalParameters class to control simulation parameters.
  - G4OpRayleigh: avoid double deletion of property vectors.
  - G4OpBoundaryProcess: increase geometry tolerance to kCarTolerance.
  - Fixed reading of Davis LUT data out of bounds. Addressing problem report #2287.
  - Code cleanup/formatting and improved readability.
- Parameterisation
  - Introduced general facilities based on GFlash implementation to facilitate multiple hit (energy & position) creation from fast simulation models.
  - G4FastSimulationHelper: merged ActivateFastSimulation() calls for mass and parallel geometry cases.
  - G4FastSimulationManager, G4VFastSimulationModel: removed redefinition of G4Envelope type.
  - Added sanity check for root logical volumes in regions for G4GlobalFastSimulationManager. UI command /param/showSetup works also if no parallel world is present.
  - Fixed minor Coverity defect for uninitialised data in G4FastStep.
- Scoring
  - G4ParallelWorldProcess, G4ParallelWorldScoringProcess: use new PDG code for optical photon, "-22".
  - G4ParallelWorldProcess: make some private methods and data members protected so that this class can be extendable.
- Transportation
  - Substantial reorganisation of G4Transportation::AlongStepGPIL() to use values already in cache, to reduce the number of branches, and to use extra local variables for track properties to avoid indirections. Resulting in a persistent reduction of instruction-TLB misses.

### Geometry

- Magnetic field
  - New class G4DriverReporter to print progress of drivers.
  - New templated classes to avoid virtual calls for field, equation, steppers (from Google Summer of Code 2014 project): equation of motion is now templated on the field type; steppers are templated on the type of equation and the number of integration variables. These classes can be combined also with the templated drivers to avoid virtual calls in all the levels up to the chord finder's call to the integration driver.
  - The default integration method for field propagation in a pure magnetic field is changed. The constructor of G4ChordFinder by default uses the new templated stepper G4TDormandPrince45 in place of G4DormandPrince745.
  - The types of templated steppers currently available include the efficient, embedded Runge-Kutta intermediate order steppers:
    - G4TDormandPrince45: based on G4DormandPrince745, embedded 5th order; the default.
    - G4TCashKarpRKF45: based on G4CashKarpRKF45, 5th order; first embedded RK.
    These are the most advanced templated steppers. G4TDormandPrince45 provides an endpoint derivative (FSAL) and can be used with interpolation.
  - The second type of templated steppers are non-embedded of 4th and 3rd order:
    - G4TClassicalRK4: based on G4ClassicalRK4, 4th order; robust and the old default;
    - G4TSimpleHeum: based on G4SimpleHeum, 3rd order; a lower order alternative;
    which break up a step into half steps to estimate error, meaning they need several additional field evaluation calls than embedded steppers of the same order. The reliability of their error estimation has different properties; so it may be more robust in some cases. Primarily for comparison and cross-checking of results.
  - The final available type of low order templated steppers are very low order:
    - G4TSimpleRunge: based on G4SimpleRunge, 2nd order;
    - G4TExplicitEuler: based on G4ExplicitEuler, 1st order, lowest order (the simplest checks only).
    only for tests or specialised uses.
  - Additional intermediate and higher-order steppers are not yet available in templated form.
  - Adapted templated G4TDormandPrince45 for use with G4InterpolationDriver. For a stepper to be used with this, it must implement the method GetSpecificEquation(). Templated steppers must provide a return type which is the exact equation type of the template.
  - Experimental versions of fields with inline methods (G4TUniformMagField and G4TQuadrupoleMagField) demonstrate how the field evaluation GetFieldValue() can also be inlined. Meant for use if the evaluation is simple -- and to be avoided if it is complex when inlining it could increase the code size significantly.
  - Configured G4ChordFinder to use templated G4TDormandPrince45 as the default stepper for magnetic fields (when one is not chosen explicitly by the application). Speed improvement is observed in benchmarks. Note: currently it uses the simpler G4InterpolationDriver in place of a customised G4BFieldIntegrationDriver which multiplexed an interpolation driver for short steps with a helix-based driver for long steps. Applications with many `large-angle` steps in magnetic field may perform more reliably and faster by restoring the use of the customised driver - e.g. by using the G4ChordFinder constructor with `nullptr` as third argument and fourth argument `stepperDriverId=4`.
  - G4VIntegrationDriver and dependent driver classes: added new virtual method StreamInfo(), and used it to implement their operator<<().
  - G4MagInt_Driver: fixed max iterations & clarified that its method ComputeNewStepSize() does not (yet) respect maximum reduction factor (0.1); this is to enable comparisons with new G4IntegrationDriver<> implementation.
  - G4OldMagIntDriver maintains all old behaviour of G4MagInt_Driver.
  - In G4MultiLevelLocator, added ability to record in a 'whiteboard', the start/end steps of integration intervals, to allow one to diagnose issues like negative or zero steps occurrences. Includes new classes G4LocatorChangeLogger and G4LocatorChangeRecord.
  - G4PropagationInField: improved ClearPropagatorState() method.
  - Implemented move constructor and operator for G4FieldTrack.
- Management
  - Added deleted declarations for copy constructor and assignment operators on store singletons. Based on GitHub PR#12 report.
  - Reduced size of G4LogicalVolume objects by reordering class members.
  - Fix in the calculation of normal in G4UAdapter::DistanceToOut().
  - Adopt new convention for location of headers in VecGeom for wrappers.
- Navigation
  - Enabled "check-mode" for G4PropagatorInField and G4VIntersectionLocator. Enable use of whiteboard for logging/debugging in G4MultiLevelLocator, if "check-mode" in navigation is being activated through UI command.
  - Reordered data members in G4Navigator, to reduce object size.
  - G4ReplicaNavigation: relaxed condition for step correction in ComputeStep(), to reduce cases of zero steps in combined rho/phi replications.
  - Fixed Coverity defects in G4RegularNavigation for uninitialised data.
  - Added G4GeomTestVolume::TestOverlapInTree(), alternative method for testing overlaps on a tree of volumes, avoiding to check hierarchies from copies of the same volume in the tree. Considerably speeding up recursive overlaps check through UI commands.
- Solids (CSG)
  - G4Box: migration to use G4QuickRand in GetPointOnSurface().
  - G4CutTubs: implemented specific GetCubicVolume() and GetSurfaceArea(); revised implementation in GetPointOnSurface(), now faster and uniform; reimplemented IsCrossingCutPlanes(), to now reports a problem only in case cut planes are crossing inside the lateral surface; removed obsolete internal method GetMaxMinZ().
  - G4Trd: added two pre-calculated values for fast calculation of lateral areas; revised implementation in GetPointOnSurface().
  - G4Trap: fixed calculation of normal for points on edge in SurfaceNormal(). Improved code for Inside(). Added array with precalculated face areas; added SetCachedValues() method and revised implementation in GetPointOnSurface().
  - G4Tubs: revised implementation in GetPointOnSurface().
  - G4Sphere: optimised implementation of InitializeThetaTrigonometry(), replacing call to std::tan() with pre-calculated quantities. Addressing problem report #2289.
  - G4CSGSolid: explicit implementation of G4RandomRadiusInRing(rmin,rmax) based on G4QuickRand.
  - Adopt new convention for location of headers in VecGeom for all wrappers.
- Solids (Specific)
  - G4Polycone, G4GenericPolycone, G4Polyhedra: implemented specific GetSurfaceArea(), GetCubicVolume(); no longer relying on MC method.
  - G4Polycone: Revised GetPointOnSurface(); added protected auxiliary method SetSurfaceElements(); removed GetPointOnCone(), GetPointOnTubs(), GetPointOnCut() and GetPointOnRing().
  - G4GenericPolycone: revised GetPointOnSurface(); added protected auxiliary method SetSurfaceElements().
  - G4Polyhedra: revised GetPointOnSurface(); added protected auxiliary method SetSurfaceElements(); removed GetPointOnPlane() and GetPointOnTriangle().
  - Added GetTwistedFaceSurfaceArea() in G4GenericTrap and fixed calculation of surface area in unit tests.
  - Adopt new convention for location of headers in VecGeom for all wrappers.
- Volumes
  - Use std::map instead of std::vector to define G4LogicalBorderSurfaceTable, to speedup search of surfaces in large tables. Addressing GitHub PR#6.
  - G4PVPlacement: in CheckOverlaps(), added keeping of bounding box from previous solid and complementary comparison of bounding spheres.

### Global

- G4Physics2DVector: extended number of characters in the table dump from 5 to 8; use similar algorithm for bin selection as in 1D vector; if any dimension is less than 2 throw a G4Exception.
- G4PhysicsVector: use same code for interpolation for all types of PhysicsVector; removed obsolete unused methods; maximally use const variables; preserve precision of printout.
- G4PhysicsLinearVector: added checks on vector length: if it is less than 2 throw a G4Exception.
- G4PhysicsLogVector: added checks on vector length: if it is less than 3 throw a G4Exception.
- G4PhysicsLinearVector, G4PhysicsLogVector: fixed scale of energy; this problem does not affect results in general, it fixes data table scale and may change dEdx and cross-sections numerically on small level. More accurate checks in class constructors. Fixed Coverity warnings.
- Added new constructor for G4PhysicsOrderedFreeVector.
- Added G4Backtrace header for printing backtraces from raised signals. A more generic implementation of G4FPEDetection that can catch FPE issues but, by default, does not interfere with it. The default backtraced signals are: SIGQUIT, SIGILL, SIGABRT, SIGKILL, SIGBUS, SIGSEGV. The default signals can be overridden within user-code before and after the creation of the run-manager (See "Usage" section in G4Backtrace description). The default signals can be overridden via environment variable G4BACKTRACE. Can be enabled by setting GEANT4_BUILD_BUILTIN_BACKTRACE option at configuration.
- Added new G4Profiler header; implemented new profiling routines for TiMemory which allow per-{run,event,track,step} configuration w.r.t. when to profile, what to collect in the profiler, and how to label the entries. Also, includes user-profiling config and macros. Use of TIMEMORY_AUTO_TIMER is now deprecated.
- Removed condition restricting to `__x86_64__` architectures for macOS configuration in `tls.hh`.
- C++11 revision in 'management' and 'HEPNumerics' modules; general code cleanup/formatting.
- Updated e_SI value for electron charge in G4SIunits.h, based on May 2019 redefinition of SI units.
- Removed use of deprecated G4USE_STD11 flag.
- Fix to CMake script to support new CMake system.
- Updated date of release for 10.7.

### Graphical Representations

- HepPolyhedron, G4Polyhedron: added HepPolyhedronTet.
- G4VisAttributes: clarify that if number of cloud points (for cloud style drawing) is <= 0, this is to be interpreted as under control of the viewer, i.e., to be decided by the viewer. Otherwise this number is to be drawn. Zero is the default value, which may be changed by invoking the method SetForceNumberOfCloudPoints(); also possible to force cloud drawing with SetForceCloud().
- Fixed graphical representation for G4Hype shape. Addressing problem report #2295.
- Fixed minor Coverity defect in BooleanProcessor::assembleFace().
- Improved deprecation message for G4AttDefs::operator<<().

### Hadronic Processes

- Fixed text typos in printout. Problem report #2285 and GitHub PR#15.
- Cross sections
  - G4ElNeutrinoNucleusTotXsc: new class for (nu_e,anti_nu_e)-nucleus cross-sections.
  - G4PhotoNuclearCrossSection: corrected threshold for gamma + p -> pi0 + p, extended for use on 3H and 3He targets.
  - G4HadronNucleonXsc: general clean-up of the code; use PDG number instead of particle pointer; removed instantiation of most of hadrons; optimisation of parameters.
  - G4IonProtonCrossSection: added cross-sections for light ions.
  - G4ParticleInelasticXS, G4NeutronCaptureXS, G4NeutronElasticXS, G4NeutronInelasticXS: updates in support for G4PARTICLEXS-3.x data structure - for capture and elastic applied low-energy parameterisation starting from second energy point of the data set (better agreement with HP cross-sections); exclude special treatments for Hydrogen and Helium isotopes, because data for fission reactions are available in the new data set; extended list of isotopes. Fixed fusion cross-sections. Moved run-time method GetPhysicsVector() to be inlined; added G4VERBOSE compilation flag and general clean-up of classes (reuse existing high energy Glauber-Gribov cross-section instances).
  - G4EMDissociationCrossSection: fixes to avoid numerical crashes for ions at low energies (now setting to zero the cross-section for ion kinetic energies below 2 MeV) and to avoid to create unphysical clusters of neutrons (now forbidding to remove one proton from any hydrogen ions). Addressing problem report #2254.
  - Added new cross-section class G4GammaNuclearXS.
  - In G4ParticleInelasticXS, added gamma cross-section.
  - Removed unused class G4ProjectileFragmentCrossSection.
  - Fixed compilation warnings on clang-10.
- Management
  - G4HadronicProcess: fixed Coverity defect warning in EP check method for the case when primary particle remains in the interaction. Fixed warnings when environmental variables G4Hadronic_*Level are used. Removed unused flag.
  - G4HadronicProcessStore: in the method Dump(), check the internal verbosity level as well as the newly introduced global hadronic verbosity level, returning immediately (without printing anything) if one of these is 0. Extended default initialisation printout to sigma-, D-, B-. Removed check for G4HadronicException where it cannot be; limit printout on kaon0 in final state. Extended default initialisation printout to anti_lambda. Use verbosity level from the G4HadronicParameters class, added printout of cross-section factor.
  - G4HadronicEPTestMessenger, G4HadronicProcess: recommended for users the new UI commands `/process/had/heptst/*Level`, while the old ones `/heptst/*Level*` are deprecated, but still valid, and will be removed in the next major release, Geant4 11; kept the environmental variables `G4Hadronic_*Level` for system testing, but not recommended for users.
  - Removed use of deprecated G4USE_STD11 flag.
  - G4HadLeadBias: replaced 'G4int' with 'size_t' to fix warnings on Windows.
  - Models Management:
    - G4HadronicInteractionRegistry: delete HP and PHP at the end of run.
    - G4HadronicInteraction: provide default implementation for all virtual methods.
    - G4VHighEnergyGenerator, G4VIntraNuclearTransportModel, G4VPreCompoundModel: cleaned up: removed old commented lines, code format, C++11 keywords.
- Processes
  - G4MuNeutrinoNucleusProcess, G4ElNeutrinoNucleusProcess: extended to nu_mu, anti_nu_mu, nu_e and anti_nu_e.
  - Removed the inelastic processes for heavy hadron - nucleus interactions, no longer necessary because similar inelastic processes are created by G4HadronicBuilder.
- Stopping
  - G4HadronicAbsorptionFritiof, G4HadronicAbsorptionFritiofWithWithBinaryCascade: simplified instantiation of the FTF model, and avoid to destruct its components.
  - G4MuonicAtomDecay: fixed Coverity defect warning.
- Utilities
  - G4HadronicParameters: added modifiers for Cascade-FTF transition. Created the new messenger. Added Get/Set methods for cross-section scaling factors separately for nucleons, pions, other hadrons, and leptons. Here is an example on how to use them:
    - First enable the scaling of cross section (by default disabled): `G4HadronicParameters::Instance()->SetApplyFactorXS( true );`
    - Scaling up the nucleon inelastic cross sections by 10% : `G4HadronicParameters::Instance()->SetXSFactorNucleonInelastic( 1.10 );`
    - Scaling down the pion elastic cross sections by 12% : `G4HadronicParameters::Instance()->SetXSFactorPionElastic( 0.88 );`
    - Scaling up all the other hadrons inelastic cross sections by 20% : `G4HadronicParameters::Instance()->SetXSFactorHadronInelastic( 1.20 );`
    Added high energy limit for low-energy physics. Disabled charm and bottom hadrons by default.
  - G4HadronicParametersMessenger: created new messenger class for G4HadronicParameters. Added the global verbosity level for hadronics: with the UI command `/process/had/verbose 0` the print-out of hadronic physics is completely switched off.
  - G4HadronicParameters, G4HadronicParametersMessenger: added parameter for the upper energy limit (default 100 TeV); for instance, to set it to 1 PeV, `/process/had/maxEnergy 1000.0 TeV`. Added Boolean switch that allows to apply the Cosmic Ray (CR) coalescence algorithm to the secondaries produced by a string model (which can be useful in particular for Cosmic Ray applications); by default it is disabled, and to switch it on: `/process/had/enableCRCoalescence true`
  - G4HadFinalState: fixed warning on Windows for implicit conversions from 'size_t' to 'G4int'.
  - Completely disable G4HadSignalHandler.
  - Models Utilities:
    - G4Fragment: introduced an optional parameter to switch off some warnings. By default, nothing is changed (i.e. the warnings are printed out as usual); only for electromagnetic dissociation, the parameter is set to switch off otherwise too frequent warning messages. Addressing problem report #2254.
    - G4KineticTrack: added initialization of an array as suggested by Coverity. Used consistently pre-increment and pre-decrement instead of post-increment and post-decrement, respectively.
    - Fixed compilation warnings on clang-10.
- Abla
  - Fixed reported Coverity defects.
- Bertini Cascade
  - Fixed non-conservation warnings coming from G4HadronicProcess due to sub-threshold reactions in Bertini. Sub-threshold reactions are now treated as having a "non-interaction" final state, that is, the initial particles are simply copied to the final state.
  - Fixed compilation warnings on clang-10.
- Binary Cascade
  - G4BinaryCascade: fixed memory leak at exit.
- De-excitation
  - G4PhotonEvaporation, G4DeexPrecoParameters, G4DeexParametersMessenger: added extra flag 'IsomerProduction'; if enabled, photon evaporation samples the time of gamma transition; added C++ interface and UI command allowing to set this flag; radioactive decay constructor should enable this parameter. Addressing problem report #2226.
  - G4DeexPrecoParameters: in method Dump(), check the global verbosity level of hadronics (if zero, do not print anything). Verbose level is defined by G4HadronicParameters class or by the local verbose level.
  - G4DeexParametersMessenger: removed obsolete UI command.
  - G4NuclearLevelData: use 'Zmax' for initialisation before the run. Reduced usage of mutex locks; read all level data at beginning of the run.
  - G4ExcitationHandler: verbose level is defined by G4HadronicParameters class or by the hardcoded local verbose level defined only for debugging. Use 'Zmax+1' instead of 'Zmax' for nuclear level initialisation.
  - Fixed compilation warnings on clang-10.
- Elastic scattering
  - G4HadronElastic: added numerical protection against precision loss. Addressing problem report #2253.
  - G4QuasiElRatios: extended to charmed and bottom hadrons. The simplified treatment adopted is the following: to treat all heavy mesons having constituent charm or bottom quark as a meson with strange quark, like K-, and all heavy mesons having constituent anti-charm or anti-bottom anti-quark as a meson with anti-strange quark, like K+; for baryons, all heavy baryons are treated as Lambda and all heavy anti-baryons are treated as anti-proton/anti-neutron. Fixed memory leak at exit.
- Electromagnetic Dissociation
  - G4EMDissociation: fix Lorentz kinematics, responsible for causing energy-momentum violations. Switched off too frequent warning messages by G4Fragment. Addressing problem report #2254.
- INCLXX
  - G4INCLXXInterfaceStore: in method EmitBigWarning(), check the global verbosity level of hadronics (if zero, do not print anything).
  - Fixed compilation warnings on clang-10.
- Lepto-nuclear
  - G4NuMuNucleusCcModel, G4NeutrinoNucleusModel: new access methods and minor fixes in in nu-mu nucleus model.
  - Added classes G4ANuElNucleusCcModel and G4ANuElNucleusNcModel for anti_nu_e. Initialization from G4PARTICLEXS (neutrino/anti_nu_e).
  - Added classes G4NuElNucleusCcModel and G4NuElNucleusNcModel for nu_e. Initialization from G4PARTICLEXS (neutrino/nu_e).
  - Added classes G4ANuMuNucleusCcModel and G4ANuMuNucleusNcModel for anti_mu_nu. Initialization from G4PARTICLEXS (neutrino/anti_nu_mu).
  - G4NuMuNucleusCcModel, G4NuMuNucleusNcModel, G4NeutrinoNucleusModel: rearrangement of initialisation methods and arrays. Fixes in CoherentPion() method, cleanup of Cc and Nc.
  - G4NeutrinoNucleusModel: added K+, K- in final state.
  - Fixed Coverity warnings for defects.
- Particle High Precision
  - Allow printout only if the global hadronic verbosity level is not zero.
  - G4ParticleHPHash, G4ParticleHPCaptureFS: fixes for implicit conversion between 'size_t' and 'G4int', to avoid warnings on Windows.
  - G4FissionProductYieldDist: fixed thread competition in method G4GetFission(), by placing an auto lock. Addressing problem report #2234.
  - Fix in constructor of G4ParticleHPChannel so that two fission fragment models can be active at the same time, if Wendt model is active; turn off standard fragment production model. Addressing problem report #2233.
  - Use `GEANT4_BUILD_PHP_AS_HP` CMake option to enable `PHP_AS_HP`, retiring the use of `PHP_AS_HP` environment variable (i.e. still valid, but deprecated, to be removed at the next major release, Geant4 11).
  - G4ParticleHPMessenger: added new UI macro command `use_Wendt_fission_model` related to the use of the Wendt fission model; make sure that no more than one fission fragment model is active.
  - G4ParticleHPManager: added a new variable related to the use of the Wendt fission model; throw a `JustWarning` exception when the environmental variables are used (to remind that they are still valid but deprecated, and will be removed in future version; added new method DumpSetting() can be called somewhere to printout once the values of its parameters. For completeness, here is the complete list of ParticleHP UI commands:
    - Force use of the Photon Evaporation model, instead of the neutron capture final state (default: false) `/process/had/particle_hp/use_photo_evaporation true`
    - Use only exact isotope data files, instead of allowing nearby isotope files to be used, if the exact file is not available, the cross section will be set to zero (default: false): `/process/had/particle_hp/skip_missing_isotopes true`
    - Switch off the Doppler broadening due to the thermal motion of the target nucleus, with a significant CPU performance advantage (default: false): `/process/had/particle_hp/neglect_Doppler_broadening true`
    - Disable the adjustment of final state for getting better conservation (default: false): `/process/had/particle_hp/do_not_adjust_final_state true`
    - Enable the generation of fission fragments (default: false): `/process/had/particle_hp/produce_fission_fragment true`
    - Enable Wendt fission model (default: false): `/process/had/particle_hp/use_Wendt_fission_model true`
    - Enable the use of NRESP71 model for neutron on Carbon reaction (default: false): `/process/had/particle_hp/use_NRESP71_model true`
    - Set verbose level of the ParticleHP package (default: 1): `/process/had/particle_hp/verbose ...`
- G4ParticleHPInelastic, G4ParticleHPManager: enabled printout of the physics parameters (only once and with a format similar to Precompound/de-excitation and RadioativeDecay).
- G4ParticleHPChannel: moved environmental variable related to the use of the Wendt fission model from this class to G4ParticleHPManager.
- G4ParticleHPContAngularPar, G4ParticleHPInelasticBaseFS, G4ParticleHPEnAngCorrelation, G4ParticleHPFinalState: replaced use of the environmental variable `G4PHP_DO_NOT_ADJUST_FINAL_STATE` with the equivalent in G4ParticleHPManager, GetDoNotAdjustFinalState().

- Parton-String
  - Improved treatment of antibaryon interactions in QGS. In G4QGSMFragmentation, corrected the treatment of low-mass diquark-antidiquark strings. In addition to this, introduced the Mt distribution of produced hadrons. In G4VLongitudinalStringDecay, introduced in SetMinimalStringMass() a check that the strings are of allowed type: quark-antiquark, diquark-antidiquark, quark-diquark and antiquark-antidiquark. Introduced also for diquark-antidiquark strings a special algorithm (already present for the other types of allowed strings) for treating low-mass strings with masses below known hadrons.
  - Improved agreement of FTF simulations with NA49 experimental data (on Pt-Xf correlations for various particles produced in pp interactions at 158 GeV/c).
  - In G4QuarkExchange, the reggeon exchanges are now treated as annihilation and creation of quark-antiquark pairs (to reflect in inelastic processes the non-vacuum reggeon exchanges present in antiparticle-particle elastic scattering amplitudes).
  - G4VLongitudinalStringDecay, G4LundStringFragmentation, G4ExcitedStringDecay: inherit from G4HadronicInteraction; destruction of these models at the end of run is now done by the hadron model store; removed implementations of private operators.
  - G4VLongitudinalStringDecay: in the method SetMinMasses(), set the constituent masses of charm and bottom quarks; introduced also a new pre-processor option for debugging heavy hadrons, switched off by default; made the logic clearer for Coverity. Code cleanup. Improved comments.
  - G4VStringFragmentation: use inheritance from G4HadronicInteraction; removed implementations of private operators.
  - G4SPBaryonTable: changed return type of the method 'length()' from 'double' to 'size_t', to fix warnings on Windows.
  - G4FTFModel: attempt to fix a crash rarely observed in pion+proton reaction: added tolerance of 1.e-10 for numerical computation; cleaned-up sampling of Pt for residual nucleons (limit argument for G4Exp to 200 instead of 1e+9). Extended debug printout; use pre-increment instead of post-increment in loops; removed commented lines and unused variables.
  - G4FTFModel, G4FTFParticipants: clean-up: removed unused methods, delete operators, use of C++11 keywords.
  - G4VParticipants, G4VPartonStringModel, G4VStringFragmentation, G4StringModel: clean-up; removed unused methods, delete operators, use of C++11 keywords.
  - G4VPartonStringModel: introduced a new pre-processor option for debugging heavy hadrons, switched off by default.
  - G4QGSModel: clean-up; removed unused methods, delete operators, use of C++11 keywords, moved inline implementation to source.
  - G4QGSParticipants: added protection for G4Exp, fixing outstanding precision loss in gamma+proton interactions.
  - G4DiffractiveExcitation: extended to handle heavy (charm and bottom) hadrons; introduced also a new pre-processor option for debugging heavy hadrons, switched off by default. Added protection against inexisting excited hyperon states (Sigma* and Xi*). Implemented new splitting of excited hadrons into quark-antiquark or quark-diquark in the method CreateStrings(). Additional code improvements.
  - G4FTFAnnihilation: removed useless check against inexisting excited hyperon states. Added initialization of 2-dimensional arrays as suggested by Coverity. Used consistently pre-increment instead of post-increment.
  - G4FTFParameters: extended FTF configuration interface to include parameters of quark exchange with and without excitation, for baryon and pion projectiles.
  - G4LundStringFragmentation, G4QGSMFragmentation: if the flag for heavy (charmed and bottom) hadrons is enabled, then non-zero probabilities for c-cbar and b-bbar creation from the vacuum are set, allowing charmed and bottom hadrons to be created during the string fragmentation of ordinary (i.e. not heavy) projectile hadron nuclear reactions.
  - G4LundStringFragmentation: extension to charm and bottom quarks of the methods Quark_AntiQuark_lastSplitting() and Quark_Diquark_lastSplitting(); added protections in the method FragmentString() to avoid rare crashes seen with heavy hadrons. Introduced a new parameter (as a class data member), a kind of "temperature" for sampling the Pt of produced hadrons; this parameter has been tuned for different fragmentation processes. The string direction (one of string's properties, whose value can be either +1 for projectile-like strings or -1 for target-like strings) is now treated correctly and used to invert the results of the string fragmentation (in the string rest frame) when the string direction is -1.
  - G4HadronBuilder: fixed condition in the method Barion() to take into account the extension to charm and bottom quarks; moreover, for both Meson() and Barion() methods, we have to force by hand that the heavy hadron produced by the string fragmentation is one of the few available in Geant4 (in particular, all heavy hadron resonances are transformed into close heavy hadron ground states). Introduced also a new pre-processor option for debugging heavy hadrons, switched off by default.
  - G4ExcitedStringDecay: added protection in the FragmentStrings() method to avoid rare crashes seen with heavy hadrons.
  - G4BaryonSplitter, G4SPBaryon: extension to charmed and bottom baryons and anti-baryons.
  - G4SingleDiffractiveExcitation, G4QGSDiffractiveExcitation, G4QuarkExchange: in ExciteParticipants() method of these classes, extension to charmed and bottom hadrons by assuming a minimum projectile diffractive mass equal to the PDG mass plus 250 MeV; in G4QuarkExchange, assumed also 50% for the probability of projectile diffraction.
  - G4Reggeons: in the constructor, replaced Omega_cc (PDG code #4432) with Omega_c (PDG code #4332); added comments.
  - G4FragmentingString: erased some inconsistencies.
- QMD
  - G4QMDReaction: added code in ApplyYourself() to get the cross section when the projectile is a pion. Replaced data member G4PiNuclearCrossSection with G4BGGPionElasticXS and G4BGGPionInelasticXS. In G4QMDGroundStateNucleus constructor, move the check for proton or neutron projectile earlier in the code so that the baryon number can be conserved. Addressing problem report #2236.
- Radioactive Decay
  - G4RadioactiveDecayBase, G4RadioactiveDecay: in BuildPhysicsTable(), check the global hadronic verbosity level before printing out information.
  - G4RadioactiveDecayBaseMessenger, G4RadioactiveDecaymessenger, G4RadioactivationMessenger: deprecated old UI commands `/grdm/...` and introduced new corresponding ones, `/process/had/rdm/...`.
- RPG
  - Fixed Coverity warnings for unused variables.
- Theo_High_Energy
  - G4CRCoalescence: new class for applying coalescence to the secondaries produced by string model to form deuterons and antideuterons from, respectively, proton-neutron and antiproton-antineutron pairs with close momenta; useful in particular for Cosmic Ray applications.
  - G4TheoFSGenerator: introduced temporarily dummy treatment of heavy (charm and bottom) projectile hadrons at low energies (below 100 MeV). Cascade models are currently not applicable for heavy hadrons and string models cannot handle them properly at very low energies, so we return as final state the initial state unchanged. Note that, for most applications, this is a safe simplification, giving that the nearly all slowly moving charm and bottom hadrons decay before any hadronic interaction can occur. In method ApplyYourself(), apply G4CRCoalescence to the candidate secondaries produced by the string model, if the corresponding switch is enabled (by default it is disabled).
  - G4QuasiElasticChannel: use inheritance from G4HadronicInteraction. In G4TheoFSGenerator, do not destruct G4QuasiElasticChannel.
  - G4QuasiElasticChannel, G4TheoFSGenerator: clean-up; use of C++11 keywords and loops, removed unused methods, formatting.

### Intercoms

- Added new parameter type 'L' for long int type; added parameter range check for long int and introducing G4UIcmdWithALongInt command type.
- Added G4ProfilerMessenger class.
- Revision for c++11 constructs, code cleanup and formatting.
- Fixed Coverity defect for uninitialised data in G4UImanager.
- Removed unnecessary use of deprecated G4USE_STD11 flag in G4AnyMethod.

### Interfaces

- G4UIQt: replaced use of setTextColor() with adoption of rich text html tags (improving visibility in macOS Dark Mode). Send G4cout/G4cerr also to std::cout/cerr if in master thread, as workaround to the problem of loss of output in the case of a crash or G4Exception.
- Fixed deprecation warnings being triggered when using Qt-5.15.
- Make such that GEANT4_USE_INVENTOR for SoXt activates use of Xm, so there's no need to check for use of Inventor in setting up Xt, only GEANT4_USE_XM.
- Use CMake AUTOMOC to automatically generate and compile Moc sources and fixed CMake script to support new CMake system.
- Fixed text typos in printout. Problem report #2285.

### Materials

- G4Material: added two new public methods to add elements to a material with new signature.
- G4MaterialPropertiesTable: added ConstPropertyExists() method. Added new methods to access/add properties with G4String and std::vector.
- G4MaterialPropertiesTable, G4MaterialPropertiesIndex: added new properties for scintillation allowing 3 time constants and a second wavelength shifter in the same material.
- G4OpticalSurface: handle REALSURFACE optical data files zlib-compressed. Requires new data-set G4RealSurface-2.2.
- G4SurfaceProperty, G4OpticalSurface: some c++11 revision and code formatting; added method to select file to read; replaced long if/else construct with switch/case.
- Added G4MicroElecMaterialStructure, G4MicroElecSiStructure classes for micro-dosimetry simulation.
- G4OpticalSurface: added protection against access to optical LUT out of array bounds. Addressing problem report #2287.
- G4Element, G4NistManager, G4NistMaterialBuilder: fixed spelling in printouts.
- Fixed text typos in printout. Problem report #2285.

### Parameterisations

- GFLASH:
  - Substituting Gamma calculation with corresponding STL functions, as suggested in GitHub PR#3. Makes LnGamma calculation 1.4 times faster, and Gamma 1.9 times faster.
  - GFlashSamplingShowerParameterisation: added X0eff calculation.
  - Delete local tuning data in GFlashXXXShowerParameterisation class destructors.

### Particles

- G4ParticleTable: create/destruct only one instance of G4IonTable and associated messenger; define assignment operator and copy constructor as deleted; added cache with pointer to selected particle and get/set methods.
- G4ShortLivedConstructor: improved constitutent masses of heavy diquarks.
- G4DynamicParticle: added GetBeta() method.
- G4OpticalPhoton: define PDG code as "-22".
- G4NuclideTable: added destruction of messenger.
- Added move operators to G4DynamicParticle. Code revision for c++11 and cleanup in 'management' module.

### Persistency

- Minor c++11 review. Code cleanup and formatting.
- ASCII:
  - Fixed Coverity defects warnings.
- GDML:
  - Fixed reading and writing of const properties of materials. Matrices of size 1x1 are now used both for writing out and reading in of const material. This fixes the inconsistency (using constants by the writer) found in the code. Const material properties with the same name (in different materials) are now written out with the properties table address appended.
  - Added new method SetOutputFileOverwrite(G4bool) to the G4GDMLParser, allowing to set the flag to enable overwriting of the output GDML file. Addressing problem report #2288.

### Physics lists

- Builders:
  - Revised all classes to remove unnecessary members, not destruct models and cross-sections and use updated instantiation of string models. This should help to achieve full deletion of hadronic physics objects at the end of run.
  - G4QGSPAntiBarionBuilder: created new class to handle anti_proton and anti_neutron at high energies with QGSP. For the light anti-ions (anti_deuteron, anti_triton, anti_He3, and anti_alpha), currently QGSP cannot handle them, therefore FTFP is used.
  - G4VHyperonBuilder, G4HyperonBuilder, G4HyperonQGSPBuilder: new classes to allow alternative builders for hyperons (and anti-hyperons). The class G4HyperonQGSPBuilder uses QGSP model to handle hyperons (and anti-hyperons) at high energies.
  - G4HyperonFTFPBuilder: now it derives from G4VHyperonBuilder (physics behind remains unchanged, i.e. it is still based on BERT and FTFP models).
  - G4HadronicBuilder: new utility class to build kaons, hyperons, and charm and bottom hadrons.
  - Added second wavelength shifter optical process to the OrderingParameterTable.
- Constructors:
  - decay
    - G4RadioactiveDecayPhysics: enabled flag for isomer production, required after fix to problem report #2226. Updated initialisation to be coherent with recent updates in initialisation of atomic de-excitation. Added EM parameters definition in ConstructProcess(...); if atomic de-excitation is not defined add it in each thread but not change EM parameters in a thread; should address several problems observed in tests.
    - G4DecayPhysics, G4RadioactiveDecayPhysics, G4SpinDecayPhysics, G4UnknownDecayPhysics: general cleanup. Removed thread local pointers, avoid deleting objects; use C++11 keywords; use standard signatures for constructors; define builder type for the main constructor G4DecayPhysics (bDecay, for others bUnknown).
  - electromagnetic:
    - G4GammaGeneralProcess: fixed problem of a concrete process assigning a step to post step point. Improved printouts and made some methods protected.
    - G4OpticalPhysics, G4OpticalPhysicsMessenger: added settings for G4Scintillation to use 3 time constants. Added second wavelength shifter optical process to constructors.
    - G4EmBuilder: new utility class to allow reducing code duplication for standard and low-energy EM physics constructors. Includes flag for allowing choice of multiple-scattering model.
    - G4OpticalPhysics, G4OpticalPhysicsMessenger, G4OpticalProcessIndex: moved optical physics parameters to new G4OpticalParameters class. Removed G4OpticalPhysicsMessenger class and replaced by G4OpticalParametersMessenger. Removed G4OpticalProcessIndex class, with code now in G4OpticalParameters.
    - G4EmStandardPhysics_option1: switch to use new G4EmBuilder utility; fixed StepFunction definition.
    - G4EmStandardPhysics_option3: switch to use new G4EmBuilder utility; use ICRU90 stopping power data for water and air.
    - G4EmStandardPhysics_option4: use ICRU90 data.
    - G4EmStandardPhysicsSS: use the new G4eDPWACoulombScatteringModel for e-/e+ below 100 [MeV] (for testing this new model).
    - Removed duplicate code by using G4EmBuilder in several constructors, fixed definition of StepFunction, use the same flag as hadronic physics to enable EM interaction of b- and c- mesons and baryons.
    - G4EmModelActivator: use same options for physics per region as used in EM constructors recently updated.
    - G4LivermorePolarizedPhysics: use inheritance from G4LivermorePhysics.
    - G4EmModelActivator: updated multiple-scattering and PAI configurations to address problem reports #2052 and #2106.
    - G4EmDNAModelActivator: extended to extra available DNA options (DNA_Opt2, DNA_Opt4, DNA_Opt4a, DNA_Opt6, DNA_Opt6a, DNA_Opt7).
    - Optimisation in initialisation of G4EmDNAChemistry_option3.
    - Use C++11 features in several constructors.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics, G4EmMessenger: added low-energy limit, set method, and UI command defining low-energy gamma-nuclear model, which is using de-excitation module and providing isomer production and gamma transitions. Added a flag to enable G4GammaNuclearXS cross-section and possibility to use general process for electron and positron; fixed several UI commands.
    - G4EmExtraPhysics: extension to anti_nu_mu, nu_e and anti_nu_e processes-models.
  - hadron_elastic:
    - G4HadronElasticPhysics: use coherently with inelastic physics builder the new utilities G4HadParticles and G4HadronicBuilder. Instantiate anti-hyperons. Added optional cross-section scaling factors for systematics studies. Use G4HadProcesses and G4PhysListUtil.
    - G4HadronHElasticPhysics: added elastic scattering for charm and bottom hadrons (needed for FTFP_BERT_TRV).
    - G4ThermalNeutrons: use G4PhysListUtils to access neutron elastic process.
  - hadron_inelastic:
    - Use the new builder class G4QGSPAntiBarionBuilder to handle anti_proton and anti_neutron at high energies with QGSP. For the light anti-ions - anti_deuteron, anti_triton, anti_He3 and anti_alpha - currently QGSP cannot handle them, therefore FTFP is used.
    - In all the inelastic physics constructors which are using the builder G4HyperonFTFPBuilder, introduced the new builder G4HyperonBuilder; moreover, the new builder G4HyperonQGSPBuilder is used now in all QGS-based inelastic physics constructor for hyperons (and anti-hyperons) at high energies, while keeping using G4HyperonFTFPBuilder at lower energies.
    - G4HadronPhysicsFTFP_BERT, G4HadronPhysicsQGSP_BERT, G4HadronInelasticQBBC: added charm and bottom hadrons. Enabled charm and bottom hadronic physics - now available in nearly all physics lists, in particular those of interest for HEP; the main exception is QGSP_BIC and its derived physics lists, which are typically used for low-energy applications.
    - G4HadronPhysicsQGSP_BIC_HP, G4HadronPhysicsQGSP_BIC_AllHP: refactoring consistently with all others. For G4HadronPhysicsQGSP_BIC_HP, the physics remains unchanged; for G4HadronPhysicsQGSP_BIC_AllHP, the physics remains unchanged except for the transition region between Binary and ProtonHP which is now 190-200 MeV (instead than 199-200), as for light ions.
    - G4HadronInelasticQBBC: utilities G4HadParticle and G4HadronicBuilder. Fixed neutron and anti-baryon configurations. Added optional cross-section scaling factors for systematics studies. Applied the Binary cascade to pions below 1.5 GeV.
    - G4HadronInelasticQGSP_BIC, G4HadronInelasticQGSP_BIC_HP, G4HadronInelasticQGSP_BIC_AllHP: added optional cross-section scaling factors for systematics studies; added charm and bottom hadron physics.
    - G4HadronInelasticQGSP_BERT, G4HadronInelasticQGSP_BERT_HP, G4HadronInelasticQGSP_FTFP_BERT: added optional cross-section scaling factors for systematics studies; added charm and bottom hadron physics; implemented DumpBanner() method; added more c++11 keywords.
    - G4HadronInelasticFTFP_BERT, G4HadronInelasticFTFP_BERT_HP, G4HadronInelasticFTFP_BERT_ATL, G4HadronInelasticFTFP_BERT_TRV: added optional cross-section scaling factors for systematics studies; added charm and bottom hadron physics; c++11 code revision; removed unused headers.
    - G4HadronInelasticQGSP_BERT and G4HadronInelasticQGSP_BIC: replaced BuildAntiLightIonsQGSP_FTFP() with BuildAntiLightIonsFTFP(); currently QGSP cannot be applied to any ion or anti-ion. Allow modification of parameters at 'PreInit' state.
    - G4HadronInelasticQGSP_FTFP_BERT: enabled charm and bottom hadron physics.
    - G4HadronPhysicsINCLXX: use inheritance from the base class G4HadronPhysicsFTFP_BERT; removed duplicated code; code clean-up. List of models and applicability intervals are the same; implemented charm and bottom hadron physics and cross-section scaling factors.
    - In G4HadronPhysicsNuBeam, G4HadronPhysicsShielding, G4HadronPhysicsShieldingLEND, G4HadronPhysicsFTF_BIC, G4HadronPhysicsQGS_BIC and G4HadronPhysicsFTFQGSP_BERT: use inheritence from the base class G4HadronPhysicsFTFP_BERT and removed duplicated code; ensure list of models and applicability intervals are the same; implemented charm and bottom hadron physics and cross-section scaling factors.
    - G4VHadronPhysics: removed unused and obsolete methods and thread_local methods.
    - Improved comments and info printout in other physics classes.
    - Updated README.
  - ions:
    - Cleanup of constructors: fixed names; made all constructor signatures universal, removed thread local members, added c++11 keywords.
    - Updated README.
  - stopping:
    - Cleanup of constructors: fixed names; made all constructor signatures universal, removed thread local members, added c++11 keywords.
- Lists:
  - LBE: added G4ShortLivedConstructor, to prevent issues, e.g. when rho0 is produced by the decay of eta_prime.
- Util:
  - G4HadParticles: new utility providing several lists of PDG codes for kaons, hyperons, charm and bottom hadrons in order to be used for construction of hadronic physics. Updated list of heavy EM particles. Subdivided in different methods hyperons and anti-hyperons. Separated light anti-particles to the extra vector and added extra access method.
  - G4HadProcesses: new utility class providing access to hadronic processes and the possibility to add a cross-section per particle type and per hadronic process; by using this class it is possible to customise hadronic cross-sections.
  - G4PhysListUtil: added method to access elastic cross-section. Added utility method InitialiseParameters(). Updated dependencies on internal modules.

### Run

- G4RunManager, G4WorkerRunManager: added layered mass geometry option for the new "probe" scoring mesh.
- G4RunManager: do not call G4ParticleTable for Messenger deletion. Added dummy virtual methods Get/SetNumberOfThreads() to allow for dispatching in MT/Tasking classes inheritance.
- Modified G4MTRunManager to enable inheritance for new G4TaskRunManager. Added banner similar to G4TaskRunManager at method CreateAndStartWorkers(); moved master scoring-manager, master worlds, 'fMasterRM' from private to protected sections.
- G4MTRunManager, G4RunManager: fixes for windows, to avoid inline static methods and use export flag G4RUN_DLL for static data.
- Added activation of G4Backtrace to G4RunManagerKernel.
- Run-managers are now friends of G4RunManagerFactory.
- Added second wavelength shifter process to G4PhysicsListHelper.
- G4VPhysicsConstructor: added harmless call to G4HadronicParameters in constructors, setting a default parameter; needed to create the instance of the G4HadronicParameters singleton before run initialization.
- G4VModularPhysicsList: fixed typos in printouts.
- Added G4Profiler support for TiMemory; removed TIMEMORY_AUTO_TIMER.
- Fixed text typos in printout. Problem report #2285 and GitHub PR#15.
- General code formatting.

### Tasking

- New module implementing a new Geant4 run manager, G4TaskRunManager, enabling use of the PTL tasking system for the event loop. The tasking system is fully compatible with Intel TBB, which can be selected if GEANT4_USE_TBB=ON is specified when configuring CMake. The default behavior for tasking, however, is to submit the tasks to an internal thread-pool and task-queue.

### Track & Tracking

- G4Track: use new G4OpticalPhoton PDG code; removed static thread local variables; slightly simplified velocity computation; fixed Coverity warnings connected with unnecessary checks for valid pointers to G4Step and G4DynamicParticle; removed commented code. Avoid using velocity table, use GetBeta() method from G4DynamicParticle instead; expected minor speedup.
- Minor c++11 revision; code cleanup and formatting.
- Fixed minor Coverity defects in G4Step and G4SteppingManager.

### Visualization

- Use CMake AUTOMOC to automatically generate and compile Moc sources and fixed CMake script to support new CMake system.
- Fixed text typos in printout. Problem report #2285 and GitHub PR#15.

- Management
  - Fixed case where models with no extent do not contribute to scene's extent.
  - Trap infinite loop when looking for a fallback graphics system when issuing "/vis/sceneHandler/create".
  - G4VisExecutive: added support for OIQt driver, via "OIQt" or "OI" keywords, provided the G4OpenInventor library has been built with the OIQt driver included.
  - Added new command "/vis/geometry/set/forceCloud".
  - G4VVisCommand: added CheckView for future utility.
  - G4VisCommandsScene: improved output layout for "/vis/scene/showExtents". Removed superfluous/unnecessary SetView() in G4VisCommandSceneNotifyHandlers.
  - G4VisManager: protected algorithm in NotifyHandlers() with 'IsValidView'.
  - Removed obsolete G4VIS_USE_STD11 and references to obsolete G4VIS_USE.
  - Bug fix: rebuild graphics databases after "/vis/filtering/*/mode".
  - Improved printing of available systems and models.
  - Improved logic in G4VisManager for automatic event keeping.
  - In MT mode, now keeping one (random) event when end-of-event action is "refresh" and keeping events (up to a user-adjustable maximum number). These may be in addition to events kept by a user in his/her user actions.
  - Improved messaging.
  - Use command->CommandFailed(); remove internal 'fErrorCode'.
  - Implemented G4RunManagerFactory::GetMasterRunManager().
- Modeling:
  - Rationalised defaults for PVPaths; make sure all nodes are marked as "not drawn" unless actually chosen for drawing.
  - Suppress warnings while filter not fully established.
  - Pick up default vis attributes.
  - Implemented G4RunManagerFactory::GetMasterRunManager().
  - Improved printing. Minor code tidy.
- FukuiRenderer
  - G4DAWNFILEViewer: fixed Unbuntu 20 compiler warning about ignoring system function return value.
  - G4FukuiRendererViewer: fixed compilation warning for overlapping comparisons always evaluating to true.
- OpenGL
  - Improved guidance and tidy "/vis/ogl/" commands.
  - Removed no longer required dependence on GLU.
  - Removed support for Qt4.
  - Fixed bug in "/vis/ogl/export" when dot '.' is included in name.
  - CompareForKernelVisit(), force kernel visit if global parameters change. Avoid unnecessary redraw at start.
  - Implemented G4RunManagerFactory::GetMasterRunManager().
- OpenInventor
  - Added Open Inventor Qt visualisation driver. The Open Inventor module can be built with either the OIQt driver, or with the OIX/OIXE drivers, but not with both. Enabled use of OIQt viewer with Qt UI.
  - Enable configuration for OIQt driver, as orthogonal to OIX and OIXE.
  - CompareForKernelVisit(), force kernel visit if global parameters change. Avoid unnecessary redraw at start.
- Qt3D
  - New driver based on Qt3D for native Qt rendering.
- Raytracer
  - Suppressed printing during RayTracer run.
  - Implemented G4RunManagerFactory::GetMasterRunManager().
- VRML
  - G4VRML1/2FileSceneHandler: fixed Unbuntu 20 compiler warning about ignoring system function return value.
- XXX
  - CompareForKernelVisit(), force kernel visit if global parameters change. Avoid unnecessary redraw at start.
- Externals
  - Fixed Coverity defect warning.

### Environments

- G4Py:
  - Removed obsolete boost.python indexing suite (which was only required on very old Boost versions <= 1.33). Replace use in client modules by direct inclusion of the needed Boost header.
  - Modified use of Boost 1.73 binding and placeholder functionality, resulting in Boost.Python spamming pragma messages about deprecation of this. Added BOOST_BIND_GLOBAL_PLACEHOLDERS as a private compile definition to geant4py targets to suppress these.
  - Made CMAKE_INSTALL_PYTHONDIR a user-configurable cache variable. RPATH issue is addressed by use of CMAKE_SKIP_INSTALL_RPATH variable by client. Addressing problem report #2283.
  - Updated signatures to support const addresses as return values in G4UIcommand.
  - Added binding to G4PhysListFactory and a simple test. Addressing GitHub PR#14.

### Data sets

- New low-energy data set version, G4EMLOW-7.13:
  - Added new cross-section files for protons (HT).
  - Added EPICS2017 data for gamma conversion (ZL).
  - Added new JAEA elastic polarized gamma scattering data files in compressed format.
  - Added a new numerical DCS set for e-/e+ elastic scattering obtained by numerical Dirac Partial Wave Analysis (DPWA). More information can be found in the 'dpwa/Readme.txt' file.
  - Added new Molecular Interference form factors (penelope/rayleigh/MIFF), to be used by G4PenelopeRayleighMI model.
- New data files for nuclides properties G4ENSDFSTATE-2.3:
  - Corrected GD158 data to be compliant with new PhotonEvaporation database.
- New data files for evaluated cross-sections G4PARTICLEXS-3.1:
  - Regenerated n, p, d, t, He3, He4, gamma data based on G4NDL4.6 and LEND; provided smooth cross-section shape and fixed fusion cross-sections.
- New data set version G4PhotonEvaporation-5.7 for nuclear de-excitation data:
  - Updated file z66.a161 (Dy161) for the decay of Tb161.
  - New file for z64.a158 (Gd158).
  - Updated and corrected file z64.156 (Gd156).
- New data set version for radioactive-decay processes, G4RadioactiveDecay-5.6:
  - Updated file z82.a211 (Pb211) according to DDEP plus adding of firstForbidden tag.
  - Slight update of z83.a211 (Bi211) and z84.a211 (Po211) according to DDEP.
  - Correction of file z2.a8; addressing problem report #2243.
  - Update of file z63.a158 (EU158 beta- decay to Gd158).
  - Removed empty lines in files z3.a8, z7.a16, z10.a18.
- New data set version for measured optical surface reflectance, G4RealSurface-2.2:
  - Compressed data with zlib.

### Examples

- Updated reference outputs, macros, READMEs and scripts.
- Fixes for Doxygen documentation and coding guidelines.
- Migrated most examples to use G4RunManagerFactory, therefore allowing for enabling optional tasking in MT builds.
- advanced
  - air_shower
    - Output results histograms to file. Added macro file to plot histograms.
    - Create material properties using std::vectors.
    - Added missing include statement in UltraDetectorConstruction.
  - brachytherapy
    - Analysis now fully compliant with g4tools; removed dependency on Root. General cleanup of the code. Implemented RunAction.
  - fastAerosol
    - New example showing use of FastAerosol geometry classes, allowing to efficiently and accurately simulate particle transport through aerosols containing billions of randomly-positioned droplets, using an ordinary workstation. See: MacFadden, N., Knaian, A., "Efficient Modeling of Particle Transport through Aerosols in Geant4", manuscript in preparation, 2020.
  - gammaray_telescope
    - GammaRayTelHadronPhysics, GammaRayTelIonPhysics: fixed compilation problems due to incorrect FTFP instantiation.
    - Added option to use G4EmStandard_Option4 with BetheHeitler5D model by using macro file physics_polarized_new.mac to select the EM physics processes and models.
    - Added new macro gammaray_polarized.in.
  - gorad
    - New example Gorad (Geant4 Open-sourced Radiation Analysis and Design), a turn-key application for radiation analysis and spacecraft design.
  - hadrontherapy
    - Added BEST beamline.
    - Fixed occasional segmentation faults in MT mode with max number of threads.
    - Fixes in using analysis: added test for open file before calling write & close; uncommented delete of analysis manager in RunAction.
    - Added protections against FPEs in RBE module.
    - Fixed compilation warnings on Windows related type conversions.
    - Deleted many obsolete macro files.
    - Code cleaup; removed Root script folder and other cosmetics.
  - HGCal_testbeam
    - New example based on the Geant4 standalone application developed by Thorben Quast for the CMS High Granularity Calorimeter (HGCal) studies. The example demonstrates a test beam setup used in HEP experiments, and as a base for the validation studies and comparison with experiment data. Details on the High Granularity Calorimeter (HGCal) can be found in the Technical Design Report..
  - ICRP110_HumanPhantoms
    - New example modelling the ICRP110 reference computational human phantoms and calculating the dose in individual voxels and entire organs. The human male phantom is created from a whole-body clinical CT image.
  - iort_therapy
    - Fixed CMake script, removing direct dependency on Root.
  - radioprotection
    - Added new parameter to DetectorConstruction constructor; added instance of DetectorManager in main().
    - DetectorConstruction: defined private methods to construct a specific type of detector ("Silicon", "Diamond", and "MicroDiamond"); added detectorType private string to store the name of the one in use; rewrote Construct() so that it calls the specific method of the selected detector type; moved the previous diamond detector geometry to ConstructDiamondDetector() and added new possible geometries (silicon and microdiamond).
    - DetectorMessenger: created file in order to switch detector type.
    - New macro geometry.mac, to select a specific detector at runtime (by default, all options are commented out). Added a line in vis.mac to execute geometry.mac before launching the GUI (at which point it wouldn't be possible to change the geometry anymore). Added a line in run.mac to execute geometry.mac.
  - underground_physics
    - Migrated UI commands from "/grdm/..." to "/process/had/rdm/..." in input macros.
    - Removed unnecessary command in neutron.mac and ambe_spectrum.mac macros.
    - Build material property tables using std::vectors.
- basic
  - B4
    - Updated B4Analysis header with commented lines for using new generic analysis manager.
    - Added commented command "ignoreThreadsExcept 0" setting in run2.mac.
  - B5
    - Replaced use of G4Analysis::ManagerInstance() with new generic analysis manager. Storing ntuple in a separate file.
- extended
  - electromagnetic
    - TestEm1
      - PhysicsList: use G4RadioactiveDecayBase instead of deprecated G4RadioactiveDecay. Minor code cleanup.
      - Migrated UI command from "/grdm/nucleusLimits" to "/process/had/rdm/nucleusLimits" in radioactive.mac macro.
      - Reviewed macros and added macro description in README.
    - TestEm2
      - Macro & commands review: removed implementation of command "/testem/histo/setFileName" and replaced its usage with "/analysis/setFileName"; fixed file name in egs4.mac; extended TestEm2.in with a command: "/testem/run/verbose 1".
    - TestEm3
      - Macro & commands review: added macro descriptions in README; added geom.mac with commands not used in TestEm3.in; fixed not working macros: ionC12.mac, lockwood.mac, storeTables.mac; removed obsolete macro retrieveTables.mac.
    - TestEm4
      - Do not call vis.mac automatically in interactive mode.
    - TestEm5
      - TrackingAction: corrected weight for solid angle histograms Updated berger.mac, berger/berger.C, hanson.mac and hanson/hanson.C. Added hanson/19um-wwols.ascii and 9um too. Based on proposal by Weronika Wolszczak (TU Delft Univ.).
      - Macro & commands review: added macro descriptions in README; added geom.mac for testing remaining commands. Removed obsolete fluo.mac macro.
      - StackingAction: log histograms, revert to previous version.
    - TestEm7
      - Do not call vis.mac automatically in interactive mode.
    - TestEm11
      - PhysicsList: use G4RadioactiveDecayBase instead of deprecated G4RadioactiveDecay. Minor code cleanup.
      - Added macros description.
    - TestEm12
      - Added macros description.
    - TestEm14
      - Added atomicDeexcitation.mac macro.
      - Added macros description.
    - TestEm18
      - Cleanup of macros.
  - exoticphysics
    - saxs
      - New example implementing the typical setup of a Small Angle X-ray Scattering (SAXS) experiment. It is meant to illustrate the usage of molecular interference (MI) of Rayleigh (coherent) scattering of photons inside the matter, which is implemented in the G4PenelopeRayleighModelMI model.
  - hadronic
    - FissionFragment
      - Replaced deprecated HP environmental variables with corresponding UI commands.
    - Hadr00
      - HistoManagerMessenger: fixed destructor.
    - Hadr01
      - PhysicsList: make it coherent with current reference physics lists.
      - RunAction: improved printouts.
      - Switched from Al to W in hadr01.in macro.
    - Hadr02
      - HadronPhysicsCRMC_FTFP_BERT, HadronPhysicsHIJING, HadronPhysicsUrQMD: introduced the new class G4HyperonBuilder which is now needed when using G4HyperonFTFPBuilder.
    - Hadr03
      - PhysicsList: added G4HadronPhysicsQGSP_BIC, Shielding, RadioactiveDecay.
      - GammaNuclearPhysics: added G4LowEGammaNuclearModel.
      - Added GammaNuclearPhysicsLEND.
      - HistoManager, SteppingAction: added plot of e-.
      - Modified gamma.mac script; added Au196.mac.
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main(), and UI commands in the macros.
      - Added fusion.mac macro.
      - Added macros description.
    - Hadr04
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main().
      - Added macros description.
    - Hadr06
      - HistoManager, TrackingAction: plot particle energy at creation.
      - GammaNuclearPhysics: added G4LowEGammaNuclearModel.
      - TrackingAction: added commented code for singleFission.
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main(), and UI commands in the macros.
      - Added singleFission.mac macro.
    - Hadr07
      - GammaNuclearPhysics: added G4LowEGammaNuclearModel.
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main().
      - Added macros description.
    - Hadr09
      - New example showing how to use Geant4 as a generator for simulating inelastic hadron-nuclear interactions.
    - NeutronSource
      - GammaNuclearPhysics: added G4LowEGammaNuclearModel.
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main().
      - Added macros description.
  - medical/DICOM
    - Distinguish output names of archive lib from DLL and application to fix Windows linking errors for static libraries.
  - medical/DICOM2
    - Fixed compiler warning on Windows.
  - medical/dna
    - chem4:
      - Fixed setup for Root in CMake script.
    - chem6:
      - New example providing scoring of the radiochemical yield G defined as (Number of species X) / (100 eV of deposited energy), as a function of time and LET. The details are described in the following paper: J. Appl. Phys. 125 (2019) 104301.
  - optical
    - LXe
      - Set optical parameters in G4OpticalParameters class.
      - Use new scintillation material property names.
      - Use std::vector to specify material property names.
      - Fixed valgrind errors: added 'delete's and fix initialization of hits counters.
      - Renamed LXe.in macro to LXe.mac; store random seed in LXe.mac and set optical verbosity to 1.
      - Applied clang-format style and updated macros.
      - Renamed ProcessHits_constStep() to ProcessHits_boundary().
      - Removed unused #includes and empty methods.
    - OpNovice
      - Added material properties using new interface with std::vectors.
      - Print out process statistics at end of run. Added EventAction and Run classes for this.
      - Updated macros, especially to run more particles. Updated gui.mac.
      - Remove use of G4Timer.
      - Use default random number generator.
      - Applied clang-format style.
    - OpNovice2
      - Use new scintillation time constant parameter.
      - Added code to generate statistics for wavelength shifting.
      - Added material properties using new interface with std::vectors.
      - Calculate reflection/transmission probabilities vs. angle; new macro fresnel.mac.
      - Histos: added axis labels, id's; refer to them by id in some places.
      - Added wls.mac to test WLS and new process WLS2.
      - Removed string comparisons and redundant calls in SteppingAction.
      - Removed redundant G4AnalysisManager::Instance() calls.
      - New macro boundary.mac, exercising all 4 boundary models.
      - Removed glisur.mac and unified.mac macros.
      - Renamed OpNovice2.in macro to OpNovice2.mac.
      - Print histogram statistics at end of run.
      - Removed use of G4Timer; don't set number of threads in main().
      - Updated macro verbosity, ignore threads except 0.
      - Applied clang-format style.
    - wls
      - Added material properties using new interface with std::vectors.
      - Large cleaning including clang-format style guidelines.
      - Added counters to record run and event statistics. Update macros.
      - Added remaining material properties using new interface with std::vectors.
  - parallel
    - MPI
      - Updated analysis classes for the design changes in analysis module.
    - TBB
      - Updated to use new tasking system which is fully compatible with TBB.
    - ThreadsafeScorers
      - Updated to use new tasking system; forcing use of G4TaskRunManager.
      - Added example of user code leveraging tasking in TSRunAction; it leverages tasks on the master thread at the end of the run to generate some strings of output via a nested hierarchy of tasks and uses the features of the G4TaskGroup to combine the strings in the order that they were submitted to the task-group (thus producing the same output result as the serial version).
      - Replaced TIMEMORY_AUTO_TIMER usage with G4USER_SCOPED_PROFILE usage.
    - TopC
      - Fixed README.html. Addressing problem report #2284.
  - parameterisations
    - Par03
      - New example demonstrating how to use G4FastSimHitMaker helper class to create multiple energy deposits from the fast simulation model.
  - persistency
    - gdml/G01
      - Use [] brackets in loop.gdml sample to show how to index names and dimensions in loops.
      - Added a line (commented out) indicating how to overwrite output files.
    - P01
      - Fixed CMake script for search or Root macros.
  - radioactivedecay
    - Activation
      - GammaNuclearPhysics: added G4LowEGammaNuclearModel.
      - In Run, corrected a protection on maximum number of histograms.
      - Removed deprecated HP environmental variables and replaced them with corresponding C++ calls in the main().
      - Added macros description.
    - rdecay01
      - Migrated UI commands from "/grdm/..." to "/process/had/rdm/..." in input macros.
      - Added atomicDeexcitation.mac macro.
      - PhysicsList: added SetDeexcitationIgnoreCut(ARMflag).
      - Added macros description.
    - rdecay02
      - Migrated UI commands from "/grdm/..." to "/process/had/rdm/..." in input macros.