Geant4 10.6 Release Notes

December 6th, 2019

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).
- MacOSX 10.15 Catalina with llvm/clang-8.0 (Apple LLVM/Clang-11.0)
- Windows-10 with Visual C++ 14.23 (Visual Studio 2019)

More verified and tested configurations (64 bits):

- Linux, gcc-5.4.0/6.3.0/7.3.0/8.2.0/9.2.0, clang-5.0/8.0
- Linux, Intel-icc 19.0
- MacOSX 10.13, 14 with clang-7.0

## 2. Supported CLHEP and VecGeom version

This release of Geant4 requires and has been verified with CLHEP, release 2.4.1.3. 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.5 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

- Minimum required version of CMake to build Geant4 is 3.8.
- Pre-processor flags are promoted to fixed `#define` statements in a generated header. User code relying on these macros should include the `G4Types.hh` header to make them available.
- The preprocessor macros G4UI_USE and G4VIS_USE are removed.
- The Debug build mode no longer enables Floating Point Exceptions. Please use the new Debug_FPE build mode if your application requires FPE.
- Support for Qt4 UI/Vis is deprecated.

Analysis

- The last two optional arguments of the analysis manager function `SetNtupleMerging()` have been removed and these parameters can be changed only via the dedicated functions: `SetNtupleRowWise()`, `SetBasketSize()` and `SetBasketEntries()`.

Geometry, Fields and Transportation

- The default integration method for propagation in magnetic fields is changed, to select between the new interpolation-capable integration scheme, for shorter steps, and a helix-based scheme which is chosen for steps larger than `2*pi` times the curvature radius at the initial location.
- Once integration in field require more than a threshold (default 200) integration substeps within a single physical step, there is a relaxation of the criteria which breaks the curved trajectory into linear segments for intersecting with the setup's geometry. This criteria is governed by the parameter delta chord. Once the threshold is reached, its value is temporarily doubled. So subsequent integration substeps are made so that a chord's sagitta is now less than twice the delta chord.
  - Every time the number of iterations reaches a new multiple of 100 (the increase value), the maximum sagitta distance (delta chord) is again temporarily doubled for the rest of this tracking step.
  - This affects only particles below the 'important' energy threshold when using G4Transportation only, (currently not G4CoupledTransporation) which would otherwise be abandoned after a set maximum number of substeps (default=`1000`).
  - To control the previous behaviour, use the G4PropagatorInField's method `SetIterationsToIncreaseChordDistance()` to set the number of iterations between increase; note that the initial threshold is twice this value. To restore previous behaviour set it to `500`.
  - In a multi-threaded application, each thread must change this threshold, e.g. by calling this method in your G4UserRunAction's `BeginOfRunAction()`.
  - This does not occur if the alternative transportation process G4CoupledTransportation is used, i.e. when one or more parallel geometries are created for scoring, event biasing, parallel mass geometry or other use(s).
- An application which uses an external gravitational field must enable the use of gravity by calling G4Transportation's static method `EnableGravity()`. This change was introduced in order to call the `ConfigureForTrack()` method of G4FieldManager only for charged particles by default. Example field06 in `examples/extended/field` illustrates this.

Electromagnetic and optical physics

- The new data sets `G4EMLOW-7.9` should be used.

Hadronic physics

- The new data sets `G4PhotonEvaporation-5.5`, `G4RadioactiveDecay-5.4`, `G4PARTICLEXS-2.1` and `G4NDL-4.6` should be used.

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.9, G4RadioactiveDecay-5.4, G4PhotonEvaporation-5.5, G4PARTICLEXS-2.1, G4NDL-4.6`.
  - In order to use `ParticleHP` for charged particles (protons, deuterons, tritons, He3 and alphas), an optional data set `G4TENDL-1.3.2` is required, and should be downloaded in addition from the Geant4 web site.

## 4. New Developments and Capabilities

General

- Reviewed G4PhysicsVector adding an additional Value() method option to propagate down the known log-energy value. This helps avoiding log() calls when log-vector is used.
- Added functionality in G4DynamicParticle to provide log-kinetic energy value, computed only on demand if its stored value is not up-to-date with the kinetic energy. Reviewed EM processes to select the target atom by making use of the already known log-energy value in the log-vector access. Providing measurable CPU speedup.
- Enhanced UI commands to now return proper return code when they are not successful.
- Introduced ability to perform leading particle biasing.

Analysis

- Added a new factory function `ManagerInstance()` in G4Analysis, which allows to create the analysis manager of the type selected via a string argument and so to choose the output type at run time.
- Switched the default Root n-tuple merge mode to new column-wise mode with preserving rows and added a second, optional, argument in the `SetNtupleRowWise()` function which can be used to override the defaults.

Digitization & Hits

- Added G4TScoreNtupleWriter and G4TScoreNtupleWriterMessenger which implement storing hits collections of G4THitsMap type vith Geant4 analysis tools, defined in G4VcoreNtupleWriter. Its usage is demonstrated in basic examples B3 and B4d.

Geometry and Field

- Enabled VecGeom wrapper for G4GenericPolycone, G4EllipticalTube, G4EllipticalCone and G4Ellipsoid. Requiring VecGeom version 1.1.5.
- Added support for writing out assemblies envelopes in GDML.
- Added hooks for capability to navigate in external geometry with custom navigation.
- Completed the development of integration driver with 'interpolation' capability. It estimates the position, momentum (and potentially other state, e.g. polarisation) at intermediate values of the integration interval. During the integration, one or more intervals are used to move the track's state. For each interval a different instance of the stepper is used. Subsequent calls for intermediate points (e.g. to locate the intersection of the curved trajectory with a boundary) use the interpolation capability using the existing data (stored in the earlier stepping), instead of re-integration which involves re-evaluating the field and equation of motion. Note: currently this can be used only with G4DormandPrince745 Runge Kutta integration method.
- Completed new multiplexing integration driver G4BFieldIntegrationDriver for magnetic fields, that enables mixing between two methods (drivers) based on the ratio of the proposed step length and the step curvature at the track's initial position. One method is selected for shorter steps, and a different method for steps longer than `2*pi` (estimation for uniform field). The default driver created in G4ChordFinder's constructor and G4FieldManager's `CreateChordFinder()` now creates it; it uses the interpolation driver with the Dormand Prince 5/4th order Runge-Kutta method for short steps, and for longer steps it uses the G4HelixHeum method which can integrate over a large number of helical turns in a sufficiently slowly varying field. Enabled by default stepping using interpolation in field propagation.

Materials

- Added G4DensityEffectCalculator: new class, providing on fly computation of the density effect correction using "exact" formulas.
- Added ICRU90 data for ion ionisation.

Electromagnetic physics

- Optimised step limitation in G4UrbanMscModel and modified lateral displacement sampling.
- New helper class G4NIELCalculator, to compute NIEL in user stepping action or sensitive detector code.
- Added handling of UI thermalization model control in DNA physics lists.

Hadronic physics

- Use Glauber-Gribov cross-sections for hyperons and anti-hyperons for both elastic and inelastic hadron-nucleus interactions.
- Extended hadron-nucleon cross-sections to charmed and bottom hadrons (mesons and baryons). Note: these cross-sections are meant to be used by Glauber-Gribov charmed and bottom hadron nuclear cross-sections, as well as by the FTF string model for dealing with charmed and bottom projectiles; however, the inelastic interactions of charmed and bottom projectiles are not yet included in reference physics lists.
- Removed tracking cut in hadron-elastic and use numerically safer computation for very low-energy projectile.
- Use FTFP also for the annihilation at rest of neutral anti-hadrons.
- Added new gamma-nuclear model based on pre-compound de-excitation.
- Added spontaneous fission channel in radioactive-decay.
- High energy extension of the neutrino-electron cross sections, for both charged-current and neutral-current interactions (M_W and M_Z propagator factors and Glashow resonance), for all neutrino and anti-neutrino flavours.

Physics Lists

- Changed transition region between hadronic string and intra-nuclear cascade models: now it is `[3, 6] GeV` consistently for all particle types (nucleons, pions, kaons, hyperons, ions and gammas; for anti-baryons, instead, FTFP is still used for all energies). Note: this does not affect the physics lists FTFP_BERT_ATL, NuBeam, ShieldingM, and those based on INCLXX. Moreover, for the QGS-based physics lists, the transition between FTFP and QGSP remains unchanged in the region `[12, 25] GeV`.
- Added (consistently) RadioactiveDecay to all physics lists which use NeutronHP. Note: this affects the physics lists FTFP_BERT_HP, QGSP_BERT_HP, FTFP_INCLXX_HP and QGSP_INCLXX_HP, whereas Shielding, LBE, QGSP_BIC_HP and QGSP_BIC_AllHP had it already.
- A new stopping physics constructor (G4StoppingPhysicsFritiofWithBinaryCascade) has been introduced, which uses Fritiof (FTF) coupled with Binary cascade (BIC) for the anti-baryon annihilation at rest. It is used only in the physics lists FTF_BIC and QGS_BIC.

Visualization and Interfaces

- New set of UI commands and improvements in visualization. Added new UI commands for view interpolation and centering.
- Introducing cloud drawing style in visualization, using kernel algorithms for generating points on the surface of volumes, by-passing polyhedral representations; the solid is being visualised by a polymarker of dots.

Examples

- GB07: new example (in extended/biasing) to demonstrate the usage of the leading particle biasing functionality, introduced in the generic biasing package.
- Hadr08: new example (in extended/hadronic) to demonstrate the possibility of emulating hadronic-model-per-region capability (not foreseen by the hadronic framework) via the use of generic biasing with usual, unbiased weights of 1.0.
- Extended GFlash examples set by moving existing gflash example to gflash1 and added: gflash2 with envelope in parallel world; gflash3 with SD in parallel world; gflasha with histogramming of shower profiles.
- dnadamage1: DNA simulation of damage on a chromatin fiber.
- microprox: DNA computation of proximity functions in liquid water.

## 5. Expected effects on physics and computing performance

Electromagnetic physics

- Expected unchanged response for calorimeter simulations.
- General speedup of electro-magnetic physics by 4-8% depending on the software platform. Additional speedup if the general gamma process mode is enabled (disabled by default).

Hadronic physics

- Increased energy response and more compact hadronic showers mostly in the projectile energy range between 5 and 20 GeV, mainly due to the change in transition energy between FTFP and BERT.

## 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
  - Set minimum required CMake version to 3.8 to fully support C++17 on all systems. Addressing problem report #2044.
  - Updated Intel settings to support use of C++17 with Intel 19 when using CMake-3.8-3.10. Versions from 3.11 fully support Intel 19/C++17.
  - Removed obsolete GEANT4_BUILD_MUONIC_ATOMS_IN_USE option and associated configuration/compiler flags.
  - Promoting following pre-processor flags to fixed #defines in a new header generated by CMake using the chosen build options to `#define/#undef` as appropriate: G4USE_STD11, G4MULTITHREADED, G4_STORE_TRAJECTORY, G4VERBOSE, GEANT4_USE_TIMEMORY. Promoted VecGeom pre-processor flags to fixed `#defines` as well. Ensuring the header is included by primary "global" category headers so that all categories will pick up the changes transparently. Removed use of add_definitions of CMAKE_CXX_FLAGS to set these flags in Geant4 and client scripts.
  - Removed G4FPE_DEBUG from build mode "Debug". Added new build mode "Debug_FPE" same as "Debug" mode but appending -DG4FPE_DEBUG.
  - Set OpenGL_GL_PREFERENCE to LEGACY, to prevent warning on CMake >= 3.10, and keeping existing behaviour.
  - Only scope location of test executable when using a generator that supports multi-config; allows tests to be run with Ninja Generator as "ninja test".
  - Do not switch off CMAKE_CXX_EXTENSIONS in Geant4Config; not required for client applications. Addresses problem report #2002.
  - Using target_XXX usage requirements to transport header paths and links. Removed requirement to use complete include_directories chain in Module sources.cmake files. Retain exported "Geant4_INCLUDE_DIR{S}" variables in case clients use Root dictionary generation (which does not understand usage requirements of targets until latest versions). Removed remaining -D flags set via add_definitions, moving to target_compile_definitions.
  - Namespace exported targets with "Geant4::" to enforce use of targets and prevent accidental linkage via `-lG4name` expansion.
  - Migrate use of all external packages to use and refind exported targets, with shim scripts to support CMake versions from 3.8 at build/use time.
  - Store build-time locations of used external packages in an optionally installable CMake script for reuse, if present, by Geant4Config.cmake in refinding packages.
  - Require MSVC 19.20 (Visual Studio 2019) or newer as minimum required version to build Geant4 on Windows. Needed to support use full C++17 Standard. Default C++ Standard with MSVC is now C++17.
  - Removed old genwindef method of generating DLL symbol exports, as minimum cmake version of 3.8 fully supports direct generation via target properties.
  - Removed GEANT4_FORCE_QT4 option, deprecating Qt4 support. Retain fallback to finding Qt4, emitting a CMake warning that use of Qt4 is deprecated.
  - Disabled configuration for Wt UI/Vis driver, as no longer supported.
  - Updated scripts to support the TiMemory find_package COMPONENTS and the INTERFACE library generation.
  - Fixed logic of setting up components in Geant4Config.cmake. Addresses problem report #2139.
  - Fixed issue for path with spaces, reported in Users Forum #451.
  - Added ELLIPSOID, ELLIPTICALCONE and ELLIPTICALTUBE flags to enable wrapping of G4Ellipsoid, G4EllipticalCone and G4EllipticalTube with correspondent VecGeom primitives.
  - Updated data-sets versions.
- GNUMake
  - Hard-code Qt version through QT_VERSION flag. Corrected Qt5 setup for Linux-g++ and Linux-clang.
  - architecture.gmk: added -DG4GMAKE to CPPFLAGS to identify enabling of GNUmake builds.
  - Fixed default paths for Linux architectures.
  - geomconf.gmk: added VecGeom wrappers flags for G4EllipticalTube, G4EllipticalCone and G4Ellipsoid.
  - Fixed compilation warning on gcc-9.2 for liblist.c.
  - Added new analysis/factory subdirectory in includes in binmake.gmk; removed analysis/parameters which does not exist anymore.
  - Corrected default path for XM in Darwin targets.
  - Force use of C++17 in WIN32 targets.
  - interactivity.gmk: added -DQT_NO_DEPRECATED_WARNINGS to Qt compilation settings, to silence warnings from Qt for use of deprecated features.

### Analysis

- Ntuples
  - Fixed CSV, XML ntuple file names.
  - Added methods for setting ntuple merge mode in G4VAnalysisManager with a default implementation (issuing a warning if merging is not available).
  - Added fRowWise data member in G4RootNtupleManager to make the parameter available in MPI.
- Analysis management & plotting
  - Enhanced the G4VAnalysisManager interface: added new option for ntuple merging and updated/added functions for merging: SetNtupleMerging() - removed rowWise and basketSize optional paremeters; SetNtupleRowWise() - added parameter 'rowMode' with a default value; SetBasketSize(), SetBasketEntries() - new methods. Added functions and UI commands for setting axis log scale for plotting: `Set[H,P][1,2,3][X,Y.Z]AxisIsLog()` and analogous getters New UI commands `/analysis/[h,p][1,2,3]/set[X,Y,Z]axisLog true|false`.
  - Added new factory function ManagerInstance() in G4Analysis, which allows to create the analysis manager of the type selected via a string argument.
  - Added new analysis sub-category "factory".
  - Cleaned-up analysis type definitions: G4Hn*, G4Pn* types moved out of type specific namespace.
  - In G4PlotManager: disabled Paw encoding; this fixes a problem with unwanted axis labels in Greek.
  - Fixed cases of implicit type conversions from size_t to G4int.
  - Link directly to FreeType and HDF5 imported targets.
- g4tools
  - Updated the g4tools version to g4tools-5.0.5.
    - Handle axis label in case of freetype font.
    - Root format: restore a "per event/row view" for the ntuple column-wise in MT and MPI.
    - Batch plotting: fixes to avoid labels overlap when having a grid of plotters.
    - MPI: fixed a memory leak.
    - Fix for axis labels with log scale.
    - Scene graph: have material for interactive plotting.
    - Include modifications coming from other usage of inlib/exlib, for example, in Root, to be able to read TClonesArray.
    - Fixed compilation warning from gl2ps showing up on gcc-9.2.
    - sg/plotter: added functions set_encoding() and set_encoding_none() which allow to disable (unwanted) Paw specific encoding.
    - Fixed memory leak in mpi_create_basket().
    - Fixed Coverity warnings.
    - See History_tools for the complete list of modifications.

### Digitization & Hits

- Introducing G4ScoringRealWorld, allowing to define command-based scorers to a logical volume in the mass world.
- Revised G4ScoringQuantiryMessenger and G4ScoringMessenger to better handle the error cases.
- Added "ntuple" subdirectory for score ntuple writer UI commands.
- Added G4TScoreNtupleWriter and G4TScoreNtupleWriterMessenger which implements storing hits collections of G4THitsMap type vith Geant4 analysis tools, define them in G4VcoreNtupleWriter. The dependency on the analysis category is avoided via template.
- Fixed implicit type conversions from size_t to G4int in digits and hits classes (collections, vectors, maps).
- Pass G4String by const reference in G4SDStructure and digits/hist collections base classes.
- G4PSSphereSurfaceFlux: fixed track weight.

### Electromagnetic Processes

- DNA:
  - Added G4DNAMolecule class.
  - Added Kreipl and Meesungnoen amorphous ice models.
  - Added new model G4DNAELSEPAElasticModel.
  - Updated G4DNAWaterDissociationDisplacer* classes.
  - Moved checking of position of track status in G4ITStepProcessor::SetInitialStep().
  - Chemistry: clarified pointer ownership in G4DNAChemistryManager.
  - Fixed reaction site issue.
  - Fixed case of division by zero of diffusionCoefficient in `G4DNABrownianTransportation::AlongStepGetPhysicalInteractionLength()` for the case of static molecules.
  - Enabled G4ItNavigator{1,2} to flag if it encounters new type of external physical volume (meant for adapting external navigators).
  - Fixed cases of implicit type conversions from size_t to G4int.
  - Fixed compilation warnings on gcc-9.1. Code cleanup.
- High Energy
  - G4GammaConversionToMuons, G4AnnihiToMuPair: added registration/de-registration mechanism.
  - G4GammaConversionToMuons: added initialisation and optional possibility to use 5D model for the sampling of the final state.
  - G4mplIonisationWithDeltaModel, G4mplIonisationModel: fixed dEdx for electron gas model (beta<0.01). Addressing problem report #2169.
- Low Energy
  - G4LivermorePhotoElectricModel: use std::getenv; slightly speed-up.
  - G4IonParametrisedLossModel: use std::getenv; allowed ICRU90 option.
  - Use `std::getenv()` for thread safety.
- Muons
  - G4TablesForExtrapolator: create G4LossTableBuilder and destruct at end of run.
- Standard
  - In most models, make use of the new target atom selector that can reuse the already known log-energy value.
  - G4UrbanMscModel, G4WentzelVIModel, G4GoudsmitSaundersonMscModel: make use of the new base class methods in utils module, utilising the already known log-energy value, in case of dEdx, range and transport mean free path log-vector table accesses.
  - G4UrbanMscModel: optimised step limitation for 'UseSafetyPlus' and 'UseDistanceToBoundary'. Minor clean-up of step limit method. Modified lateral displacement sampling.
  - G4ScreeningMottCrossSection, G4KleinNishinaModel, G4SeltzerBergerModel, G4eSingleCoulombScatteringModel: use element->GetZasInt() interface in order to reduce number of double->int conversions at run time.
  - G4BetheHeitler5DModel: set x,y components in BoostG4LorentzVector function. Replaced local boost and rotation functions with CLHEP boost, boostZ, transform. One random generator flatArray() call in sampling loop. New parameters set for muon (30% speed up), nuclear threshold calculation. Added gamma conversion to mu+ mu- mode.
  - G4eCoulombScatteringModel, G4WentzelOKandVIxSection: cleanup debug cout and initialisation.
  - G4UrbanMscModel, G4GoudsmitSaundersonMscModel, G4WentzelVIModel: use `lambdalimit` and `facsafety` parameters from the base class G4VMscModel.
  - G4SeltzerBergerModel: during initialisation data files upload only data for elements used in geometry, lazy initialisation of the data is also available for testing.
  - G4SeltzerBergerModel, G4ICRU49NuclearStoppingModel: safer initialisation in MT mode.
  - G4ScreeningMottCrossSection, G4eSingleCoulombScatteringModel: optimized code and data structure; fixed floating point exception for low energy; use C++11 patterns.
  - G4hCoulombScatteringModel, G4hCoulombScatteringModel: removed unused headers.
  - G4PairProductionRelModel, G4GammaConversion: the high energy model for e-/e+ pair production has been extended down to threshold (`2mc^2`) such that it gives results (both cross-section and final state) identical to those produced by the low energy (G4BetheHeitlerModel). Since this new version of the high energy model can describe e-/e+ pair production from threshold up to PeV (LPM effects are included) the G4BetheHeitlerModel is now removed from the G4GammaConversion process.
  - G4eplusAnnihilation: set secondary weight correctly using bias manager.
  - G4ESTARStopping, G4GSMottCorrection, G4GSPWACorrections, G4GoudsmitSaundersonTable, G4SBBremTable, G4SeltzerBergerModel: minor cleanup; use of `std::getenv()` and use of `G4Element::GetZasInt()`.
  - Requires data-set G4EMLOW-7.9.
- Utils
  - G4EmElementSelector, G4VEmModel: added extra method to select the target atom by making use of the already known log-energy value in the log-vector access.
  - G4VEmProcess, G4VEnergyLossProcess and G4VMscModel: added extra methods to access log-vector tables by propagating the already known log-energy value.
  - G4VMscModel, G4VMultipleScattering: added new method `InitialiseParameters()`, make multiple-scattering specific methods pure virtual.
  - G4LossTableManager: added `Register/DeRegister()` methods and vector of pointers for G4VProcess classes for X-ray and optical processes.
  - G4EmParameters: added polarisation flag; moved implementation of splitting parameters to source and added check on lock; added `9.99 MeV` low limit in the `SetMaxEnergy()` method, added thread lock to `Dump()` method.
  - G4EmParameters, G4EmParametersMessenger: splitted classes keeping the user interface unchanged. Added new classes for complex EM parameters (G4EmExtraParameters G4EmExtraParametersMessenger) and new classes for low-energy and DNA parameters (G4EmLowEParameters, G4EmLowEParametersMessenger). Added new parameters for multiple-scattering `FactorSafety` and `LambdaLimit`; now users can customise these values, default values used are the same as in release 10.5.
  - G4EmSaturation: do not apply saturation for zero step length, as this is possible only if a tracking cut is applied.
  - G4EmBiasingManager: delete non-tracked particles.
  - New helper class G4NIELCalculator, to compute NIEL in user stepping action or sensitive detector code. User should provide G4VEmModel objects, which has NIEL model.
  - G4LossTableManager: added access and initialisation of G4NIELCalculator. Use std::getenv() for thread safety.
  - G4VEmProcess, G4VEnergyLossProcess, G4VMscModel, G4EmElementSelector: utilise new optimised LogVectorValue() function from G4PhysicsVector (for log-vector).
  - G4EmElementSelector: new optimised version; adopting linear interpolation to avoid redundant energy grid related computations; branches used to handle rare corner cases are eliminated by increased robustness of the algorithm.
  - Removed no longer used members in G4EmElementSelector and G4VEmModel.
  - G4LossTableBuilder, G4LossTableManager, G4VEmModel, G4VMscModel, G4VEmProcess, G4VEnergyLossProcess, G4EmCalculator: allow both approaches, "General Process" and "Base Materials", work together.
  - G4DNAModelSubType: added Kreipl and Meesungnoen amorphous ice models. G4EmLowEParametersMessenger: added corresponding commands.
  - DummyModel: added methods to be consistent with above modifications.
  - Fixed Coverity defects.
- Xrays
  - G4Cerenkov, G4Scintillation, G4SynchrotronRadiation, G4VTransitionRadiation: added registration/de-registration mechanism.

### Event

- G4SPSEneDistribution: added protection for potential infinite loop. Addressing problem report #2177.
- G4SPSPosDistribution: added accessor methods for volume confinement Addressing GitHub PR #7.
- Fixed implicit type conversions from size_t to G4int in G4TrackStack and G4TrajectoryContainer. Fixed typos and some code cleanup.
- Make -DG4_USESMARTSTACK a public compile definition of G4event to propagate it directly to CMake clients.

### Externals

- CLHEP:
  - Updated to CLHEP version 2.4.1.3.
  - MixMaxRng: throw if seed is zero. Use throw instead of exit() elsewhere.
  - Defaulted operator=() also for BasicVector3D andPlan3D; fixing deprecation warnings on gcc-9.1. Fixed shadowing compilation warnings in Transform3D as reported on gcc-9.1.
  - Added move constructor and move assignment operators in Vector and Geometry classes.
  - Fixed compilation warnings for cases of implicit type conversions in Ziggurat classes.

### General Processes

- Biasing
  - Introducing leading particle biasing.
  - G4BOptnChangeCrossSection: added argument to `SetBiasedCrossSection()` method, as option to update the interaction length when setting a new cross-section value.
  - Fixed cases of implicit type conversions from size_t to G4int.
- Cuts
  - Added protection against premature call to G4ProductionCutsTable.
  - Fixed cases of implicit type conversions from size_t to G4int.
- Decay
  - G4Decay: extended printout for G4Exception DECAY101 and DECAY102.
- Management
  - Made G4ProcessTable a thread-local singleton.
  - Fixed cases of implicit type conversions from size_t to G4int.
  - Some code cleanup in G4ProcessManager.
- Optical
  - G4OpWLS: call `SetNumberOfSecondaries()` from G4VParticleChange only once. Addressing problem report #2200.
  - Improved diagnostics printout.
  - Code cleanup and formatting, added C++11 keywords.
- Parameterisation
  - Register G4FastSimulationManagerProcess with highest ordering in G4FastSimulationManagerHelper to ensure it is the only process invoked for a given step (ExclusivelyForced) and no other StronglyForced processes will be considered.
- Transportation
  - The following fixes and improvements affect both G4Transportation and G4CoupledTransportation:
    - Fixed issues related to resetting of looper flag and other state for field propagation. Involved replacing check for 'Global' field with check for any field; this is needed to ensure that propagator-in-field state is reset when the setup inludes only local fields. Ensure that looping flag is reset (false) when a force is not exerted in `G4CoupledTransportation::AlongStepGetPhysicalInteractionLength()`; before it was overwritten afterwards. Addressing problem report #2144.
    - Optimisation to avoid calling user field manager's `ConfigureForTrack()` method, except if particle is charged, or forces from magnetic moment or gravity are enabled.
    - The change above introduces a new 'flag' to enable gravity fields. The static method `EnableGravity()` in G4Transportation must be called if the application uses gravity fields (calling this method will enable both types of transportation to consider gravity.
    - Added flag to optionally silence warning about looping tracks. The method `SetSilenceLooperWarnings()` controls it.

### Geometry

- Implemented minor C++11 revision and code cleanup. Use pre-increment wherever possible.
- Fixed minor Coverity defects.
- Divisions
  - Return correct value for multiplicity in G4PVDivision and G4ReplicatedSlice. Addressing problem report #2168.
  - G4PVDivision: added missing implementation of alternative constructor.
  - Added new virtual `VolumeType()` method in Physical Volume types.
- Magnetic field
  - G4ChordFinder: changed to use concrete type of Stepper as template parameter.
  - G4InterpolationDriver: revision that uses an instance of the stepper for each substep. Fixed memory churn; use FSAL property of stepper (G4DormandPrince745) to avoid one RHS evaluation per integration substep beyond the first. Changed from G4VERBOSE to G4FIELD_DEBUG for debug checks. Now set by default.
  - Removed division in `G4DormandPrince745::Interpolate4thOrder()`. Fix in 5th order interpolation method.
  - Reset step estimate in G4MagInt_Driver only at the beginning of a track.
  - Added G4SextupoleMagField, an implementation of a sextupole magnetic field.
  - Completed implementation G4BFieldIntegrationDriver, and fixed issues. It is now used as the default driver for magnetic fields: it instantiated in G4FieldManager's `CreateChordFinder()` method. Fixed case of floating point exception in and removed statistics printouts from destructor.
  - Added method and attribute to G4VIntegrationDriver `DoesReIntegrate()` to inform whether the driver recomputes segment when `AccurateAdvance()` is called.
- Management
  - G4GeomSplitter: re-enabled use or `realloc()/free()` and `memcpy()`, after adapting G4VPhysicalVolume MT splitted data to adopt only trivial types for allocation. Re-establishing original performance in initialisation of the geometry in MT mode.
  - Properly initialise splitted data in G4VPhysicalVolume to zero.
  - Replaced deprecated std::binary_function calls with lambdas in G4SmartVoxelStat and G4GeometryManager. Addressing GitHub PR#8.
  - Defined move constructor and move assignment operator for G4AffineTransform.
  - G4VSolid: use `G4QuickRand()` in `EstimateCubicVolume()` and `EstimateSurfaceArea()`.
  - Changed `G4VPhysicalVolume::VolumeType()` to be virtual. Required for addition of External Navigation, which adds an 'external' physical volume type (for use with an External sub-Navigator).
  - Revised G4LogicalVolume to cope with 'external' type of physical volumes. Use stored volume type in `CharacteriseDaughters()`. These revisions are independent and backward compatible.
  - G4LogicalVolume: added method `ChangeDaughtersType()` to change the volume type for `CharacterisedDaughters()`. It enables the user to turn over responsibility for navigation in that volume to an external navigator. This is for use when one or more daughter volumes are created as an existing physical volume type (typically `G4PVPlacement`). It can also be used to enable to create a (logical) volume which containts a mixture of existing Geant4 physical volume types and user-created 'external' physical volume type (with type code `kExternal`): Geant4 types must be created first, and then `ChangeDaughtersType()` must be called to change the mother's attribute to `kExternal`. Note: only one type of sub-navigator will be called to find a track's intersection (or the location of a point) in all daughters of one mother volume. The sub-navigator chosen will correspond to the volume type assigned.
  - Fixed cases of implicit type conversions from size_t to G4int.
  - Use header-based `#define/undef` symbols to configure VecGeom replacements; added new configuration headers G4GeomConfig.hh and G4GeomTypes.hh.
- Navigation
  - Improved information in G4Exceptions for particles stuck due to multiple zero steps in G4Navigator.
  - Added hooks for capability to navigate in 'external' geometry: new base class G4VExternalNavigation for external 'sub'-navigator; new type of 'External' physical volume, to flag volumes for external sub-navigator; revisions to G4Navigator to dispatch logical volumes with daughters which are of 'external' physical-volume type. An 'external' sub-navigator can be registered with G4Navigator; 'placement' and 'external' physical volumes cannot be currently mixed inside the same logical volume.
  - Added `Clone()` method in G4Navigator, to allow for 'cloning' the navigator for G4VIntersectionLocator's 'helper', and potentially for worker threads.
  - G4TransportationManager: enable worker threads to clone G4Navigator if needed. Keep first navigator created; by convention that will be the navigator object of the master thread (or the only thread). Other (worker) threads will clone the first navigator, if it has an external sub-navigator registered. This ensures that they clone the ability to navigate in 'external' volume descriptions.
  - G4MultiLevelLocator: avoid re-estimating endpoint if driver does not re-integrate when `AccurateAdvance()` is called.
  - Introduced temporary 'relaxation' (increase) of the value of delta-chord, in G4PropagatorInField, to enable larger steps, after a threshold number of iterations (parameter). Added methods to get/set the parameter that controls after how many integration substeps (in one physics step) the increase of the chord distance is trigerred.
  - Made G4RegularNavigationHelper a G4ThreadLocalSingleton.
  - G4PhantomParameterisation: reverted precision checks as in version `10.2.p02`. Addressing problem report #2192.
  - Enable UI command `/geometry/navigator/push_notify` which was not setup properly. Addressing problem report #2173.
  - Fixed cases of implicit type conversions from size_t to G4int.
- Solids (Boolean)
  - G4BooleanSolid: use `G4QuickRand()` in `GetPointOnSurface()`; reduced max number of tries to generate a point to 100k.
  - Fixed cases of implicit type conversions from size_t to G4int.
- Solids (CSG)
  - G4Tubs: Fixed normal from `DistanceToOut()` to be unit vector, for abnormal exit points. Added `inverse-Rmax` and `-Rmin` as data members.
  - Re-use pre-calculated values instead of using std::cos(), std::sin() in G4Tubs, G4Cons, G4CutTubs and G4Sphere.
  - G4CutTubs: fixed minor Coverity defects for non initialised data in constructors.
  - Added inclusion of new G4GeomTypes.hh header to those headers allowing VecGeom replacement.
- Solids (Specific)
  - Enabled VecGeom wrapper for G4GenericPolycone, G4EllipticalTube, G4EllipticalCone and G4Ellipsoid. Requiring VecGeom version 1.1.5.
  - G4ExtrudedSolid: fixed a bug in DistanceToOut(), affecting extruded solids defined off-center along the z-axis.
  - Fixed generation of polyhedron in `G4UExtrudedSolid::CreatePolyhedron()`. Addressing visualization part of the problem report #2171.
  - Avoid defining kCarTolerance as 'static const' in G4VFacet. Addressing problem report #2172.
  - Modified G4PolyconeSide and G4PolyhedraSide to use only trivial types for MT splitted data in G4PlSideData and G4PhSideData respectively.
  - Protected check in `G4TwistedTubsSide::DistanceToPlane()` within debug flag.
  - Defined move constructor and move assignment operator for G4TriangularFacet.
  - Use `GetVertices()` instead of `GetParametersList()` in the wrapper G4UTet.
  - G4TesselatedSolid: fixed case of potentially uninitialized array.
  - G4GenericTrap: fixed compilation warnings for variable shadowing on clang-8.
  - Rationalise header inclusions for faceted solids.
  - Removed unnecessary forward declaration in G4VFacet header.
  - Added inclusion of new G4GeomTypes.hh header to those headers allowing VecGeom replacement.
- Volumes
  - Revised `G4PVPlacement::CheckOverlaps()` for speed up; improved diagnostics.
  - Added enablers for external navigation capability. Added new virtual base class G4VExternalPhysicalVolume.
  - Added new virtual `VolumeType()` method in Physical Volume types.
  - Fixed registration of G4PVParameterised daughter in mother volume to enable its true volume type (kParameterised) to be recognised and registered in mother logical volume.
  - Fixed cases of implicit type conversions from size_t to G4int.

### Global

- G4PhysicsVector: added additional `Value()` method option to propagate down the known log-energy value (can avoid the log call in case of log-vector). Added optimised `LogVectorValue()` method, implementing optimised algorithm for use with log-vectors only. All conditional branches are eliminated by increased robustness of the algorithm.
- Added protection against idx > entries() in `G4PhysicsVector::insertAt()` function. Addressing problem report #2182.
- G4PhysicsVector, G4PhysicsLogVector, G4PhysicsLinearVector and G4PhysicsLnVector: changed `dBin` member to `invdBin(=1/dBin)` to get rid of run-time divisions.
- Added G4QuickRand header in HEPRandom sub-module.
- Added 'External' (physical) volume type to geomdefs.hh.
- Added new LOG_EKIN_MIN constant as value taken in case of zero kin-energy in templates.hh.
- Defined default move constructor and move assignment operator for G4String and G4DataVector.
- G4SimplexDownhill: fixed minor Coverity defect.
- Fixed implicit type conversions in G4String internal methods.
- Updated settings for TiMemory.
- Use move semantics in G4ConsumeParameters, eliminating warning about unnecessary copy for some compilers.
- Added G4GlobalConfig.hh generated header to hold global, always required, pre-processor symbols instead of relying on -D flags for: G4USE_STD11, G4MULTITHREADED, G4_STORE_TRAJECTORY, G4VERBOSE and GEANT4_USE_TIMEMORY. Added inclusion of G4GlobalConfig.hh in G4Types.hh, tls.hh and G4TiMemory.hh so that global and other categories pick up the definitions transparently. Updated other headers/sources to include G4Types/G4Threading if they use G4MULTITHREADED.
- Updated date of release for 10.6.

### Graphical Representations

- G4VisAttributes: added 'cloud' and methods to force, `SetForceCloud()`, and `SetForceNumberOfCloudPoints()`.
- G4VisExtent: added method Transform(const G4Transform3D&).
- Added G4TessellatedSolid to list of solids that may be specially treated; solids that may access the graphics scene directly through G4VGraphicsScene.
- Removed `Get/SetDrawOverlapsFlag()` from G4VVisManager.
- HepPolyhedron: fixed defect reported by Coverity. Added move constructor and move assignment operator.
- `BooleanProcessor::createPolyhedron()`: Use return `std::move()`.

### Hadronic Processes

- Improved G4HadronicException: aligned behavior with std::exception: what() returns the exception explanation; moved the member definition to source file. Added some consts qualifiers.
- Cross sections
  - G4NeutronElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS: utilise the new `Value()` method from G4PhysicsVector that can make use of the already known value of the log-kinetic energy in the table of cross-sections.
  - G4NeutronCaptureXS, G4NeutronElasticXS, G4NeutronInelasticXS G4ParticleInelasticXS: code clean-up, assuming usage of the new data-set G4PARTICLEXSDATA-2.1; removed unused variables and methods; used only methods with logarithm of energy.
  - G4NeutronCaptureXS: restored computation of isotope cross-section as it was in release 10.5, responsible for degradation of observables on Tungsten. Upload data only for elements used in geometry. Code clean-up, use C++11.
  - G4ParticleInelasticXS: set verbosity to 0.
  - Corrections in G4MuNeutrinoNucleusTotXsc.cc: new name, default `fCcTotRatio` and high energy parameter 'bb'.
  - G4ComponentAntiNuclNuclearXS: code clean-up and corrected the description.
  - G4ComponentGGHadronNucleusXsc, G4ComponentGGNuclNuclXsc: removed remaining unused obsolete methods and members; use G4NuclearRadii utility to compute nuclear radius.
  - G4ComponentGGHadronNucleusXsc: fixed correction factor for kaons.
  - G4BGGPionElasticXS, G4BGGPionInelasticXS: fixed initialisation for pi+ and pi- by usage of separate vectors of correction factors; fixed computation for Hydrogen target. Clean-up pi+ cross-section below `20 MeV`.
  - G4BGGPionInelasticXS: fixed low-energy parameterisation (restore one from Geant4 10.5, where low-energy limits were different for pi+ and pi-).
  - G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS: fixed computation for Hydrogen target. Fixed initialisation for protons and neutrons by usage of separate vectors of correction coefficients.
  - G4HadronNucleonXsc: added extra method for hyperon cross sections. Extended to charmed and bottom hadrons (mesons and baryons). Improved K+p parameterisations (NS and VG); removed obsolete methods.
  - G4ParticleInelasticXS, G4BGGPionElasticXS, G4BGGPionInelasticXS, G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS, G4NucleonNuclearCrossSection, G4ComponentBarNucleonNucleusXsc, G4UPiNuclearCrossSection: shared internal data vectors between threads; initialise data once; removed unused parameters; code clean-up; use C++11 keywords.
  - G4VCrossSectionDataSet, G4CrossSectionDataStore, G4IonProtonCrossSection: use only methods with logarithm of energy.
  - G4HadronicException is replaced by G4Exception in all classes with exceptions.
  - G4ParticleInelasticXS, G4NeutronElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS: adopted the new G4PhysicsVector::LogVectorValue() optimised method for log-vectors.
  - G4BGGNucleonInelasticXS, G4BGGNucleonElasticXS: use coherent low-energy threshold of `14 MeV`; code clean-up.
  - G4BGGPionInelasticXS, G4BGGPionElasticXS: use coherent low-energy limit of `1 MeV`.
  - G4HadronNucleonXsc: fixed K+p and K+n parameterisations.
  - G4NeutronElasticXS: implemented isotope cross-section.
  - G4UPiNuclearCrossSection: optimised interpolation method; moved two run-time methods to inline; improved low-energy parameterisation. Below `20 MeV` the cross-section is now constant, with BGGPion cross-section implementing the low-energy part. Code clean-up.
  - G4NeutronInelasticXS, G4ParticleInelasticXS, G4NeutronElasticXS: added special method for tritium and He3 targets (addressing problem report #2162); upload data only for elements used in geometry. Code clean-up and use of C++11 features.
  - G4HadronNucleonXsc: new interface to G4ComponentGGHadronNucleonXsc including s-,c-,b-, particles. Set protection against division by zero by introducing a minimum energy cutoff (`100 keV`), below which the cross-section is considered constant.
  - G4BGGNucleonInelasticXS, G4BGGNucleonElasticXS, G4BGGPionInelasticXS, G4BGGPionElasticXS: clean-up low-energy behaviour.
  - G4NeutrinoElectronNcXsc, G4NeutrinoElectronTotXsc: high energy extension of neutrino-electron cross sections, for both charged-current and neutral-current interactions (M_W and M_Z propagator factors and Glashow resonance), for all neutrino and anti-neutrino flavours.
  - G4MuNeutrinoNucleusTotXsc: high energy extension of cc/nc xsc (M_W and M_Z propagator factors) cc/tot ratio.
  - G4MuNeutrinoNucleusTotXsc: added new method `GetElementCrossSection()`.
  - Removed `using namespace std` and `using namespace CLHEP` from G4NeutronElectronElXsc header.
  - Use `std::getenv()` for thread safety.
- Management
  - G4HadronicInelasticProcess: removed default GHEISHA cross-sections.
  - G4EnergyRangeManager: fixed bug regarding the kinetic energy per nucleon in the case of anti-nuclei (the bug was of little harm as one single model, FTFP, is used for all energies in the case of anti-nuclei projectiles). Streamlined algorithm in the case that only one model is registered for a process. Implemented C++11 patterns. Moved operators to be private, removed obsolete method, removed G4HadronicException; in case of problem return `nullptr`.
  - G4HadronicProcess: removed try/catch pattern from computation of mean free path; removed final-state random rotation. Do not use try/catch pattern to choose hadronic interaction; decreased limit on check of offshell mass from `1.5 MeV` to `10 keV`. Removed unused headers. Addressing problem report #2175. For particles out of mass shell, the kinetic energy is corrected in such a way that it is always above `10 keV`. Used `std::getenv()`, which is recommended for concurrency. In the method `CheckResult()`, a short-lived secondary particle is allowed to have a dynamic mass which differs from the PDG mass by less than three times the particle's width.
  - Models Management:
    - G4HadronicInteractionRegistry: fixed typo in comments; removed unused Boolean flag. Use of C++11 patterns.
    - G4HadronicInteraction: fixed definition of model per element and material. Use of C++11 patterns.
    - G4VHighEnergyGenerator: used inheritance from G4HadronicInteraction, which reduces memory leaks at exit.
- Processes
  - G4HadronElasticProcess: removed tracking cut for all particles (charged particles may be stopped by the tracking cut of ionisation process; neutrons should be stopped by G4NeutronKiller). Added protection for zero energy of the projectile particle. Removed final-state rotation. Removed default GHEISHA cross-sections. Clean up the sampling of the final state; improved description and comments; added C++11 keywords; removed unused local members.
  - G4MuNeutrinoNucleusProcess: new process which handles the G4NuMuNucleusCc(Nc)Model models.
  - Created new inelastic processes for heavy hadron-nucleus interactions. Notes: there is no need to create similar processes for elastic heavy hadron-nucleus interactions; only hadrons (mesons and baryons) that can fly macroscopic distances are considered; for the time being, none of these processes is used in any physics list.
- Stopping
  - G4HadronicAbsorptionFritof: extended to neutral anti-hadrons (anti-neutron, anti-lambda, anti-sigma0 and anti-xi0). This extension is for completeness and practical convenience, although physically neutral hadrons should never be completely at rest.
  - G4HadronicAbsorptionFritofWithBinaryCascade: new class for handling anti-proton and anti-neutron annihilation at rest using Fritiof coupled with Binary cascade, instead of directly with pre-compound (as in the class G4HadronicAbsorptionFritiof).
  - Fixed Coverity defect in G4MuonMinusAtomicCapture.
- Utilities
  - G4HadProjectile: clean-up for small kinetic energy of the projectile.
  - G4HadFinalState, G4Bessel, G4ReactionProduct, G4GHEKinematicsVector: replaced `fabs()` with `abs()`.
  - G4HadronicParameters: extended to the recommended (default) energy transition regions between FTF and cascade models (BERT and/or BIC) and between strings models (QGS and FTF).
  - Models Utilities:
    - G4NuclearRadii: new utility class with several parameterisations of nuclear radius. Added extra utility methods.
    - G4GeneralPhaseSpaceDecay: corrected message when throwing an exception due to center-of-mass energy below threshold.
- Bertini Cascade
  - Fixed case for potential FPEs due to un-protected sqrt() in `G4NucleiModel::boundaryTransition()`
  - G4LightTargetCollider: fixed crash when the gamma energy is below the deuteron disintegration threshold and improved the exception handling.
- Binary Cascade
  - G4GeneratorPrecompoundInterface: extended to include a simple coalescence model for nucleus-nucleus interactions in the interface between string and precompound models. This allows to improve the nucleon spectra and fast deuterons in ion-ion collisions.
  - G4GeneratorPrecompoundInterface: minor fix.
- De-excitation
  - G4VEmissionProbability: using simple rejection. Implemented option to force a residual nucleus to be among known discrete levels.
  - Replaced deprecated std::binary_function calls with lambdas in G4StatMFMicroCanonical and G4StatMFChannel. Addressing GitHub PR#8.
  - G4Evaporation, G4ExcitationHandler, G4LevelReader, G4GammaTransition, G4VEmissionProbability, G4PhotonEvaporation, G4PolarizationTransition: changed scheme of verbosity: 0- silence, 1- dump of parameters at initialisation, 2- debug printout, 3- very detailed debug printout. Addressing problem report #2098.
  - G4CoulombBarrier: use G4NuclearRadii utility to compute nuclear radius.
  - G4EvaporationChannel, G4EvaporationProbability, G4VEmissionProbability, G4FermiDecayProbability: simplified algorithm to sample kinetic energy of a fragment; minor code clean-up; removed commented lines.
  - G4EvaporationChannel, G4EvaporationProbability, G4VEmissionProbability, G4NeutronEvaporationProbability, G4VEvaporationChannel: preparation for development of the new GEM model; for evaporation, improved selection of final excitation level for residual fragments.
  - G4Evaporation: made coherent use of IsApplicable() from G4FermiBreakUp and forced simplified decay of exotic fragments with G4UnstableFragmentBreakUp.
  - G4FermiFragmentsPoolVI: implemented new method HasChannels(). Removed unphysical fragments and corresponding data structures.
  - G4FermiBreakUpVI: used new method HasChannels() inside IsApplicable(). Cleanup internal data after decay loop and not before. Use consistently verbosity from de-excitation module; simplified decay kinematics.
  - G4FermiFragment: fixed Coulomb barrier correction computation. Removed unused Boolean members.
  - G4UnstableFragmentBreakUp: changed logic, allowing decay of an exotic fragment (i.e. a fragment unknown in gamma-level database) and never release it. Allowed only residual fragments, which are present in the nuclear level database; those fragments which are not in the database are forced to decay to fragments from the database. Improved debug printout.
  - G4VEmissionProbability, G4Evaporation, G4UnstableFragmentBreakUp: consistently use decay channels in all components of the de-excitation module.
  - G4LevelReader: small reduction of memory churn at initialisation.
  - G4NuclearLevelData, G4LevelManager, G4GEMChannel, G4GEMProbability, G4GEMProbabilityVI, G4EvaporationChannel, G4EvaporationProbability: use consistently pairing correction from G4NuclearLevelData and verbosity level for debugging.
  - G4GEMChannelVI, G4GEMProbabilityVI: new GEM model.
  - G4ExcitationHandler: added check on upper limit of excitations; fixed initialisation sequence, reduced memory churn. Removed second photon evaporation loop, as all gamma decays are already happening in the first loop. Use more C++11 constructs. Added a limit on the number of warnings on high excitation energy of the input fragment. Fixed problem seen in medical test of fragmentation; provided full de-excitation of excited light fragments.
  - G4DeexPrecoParameters: added upper limit of `30 MeV` on the excitation per nucleon. Added two new parameters.
  - G4DeexParametersMessenger: added UI command.
  - G4FermiFragmentsPoolVI, G4NuclearLevelData: reduced number of locks at initialisation.
  - Modified internal interfaces to reuse some code for evaporation in the new GEM evaporation model; used more C++11 patterns.
  - G4ExcitationHandler: removed warning on high excitation energy.
  - G4ExcitationHandler, G4Evaporation: minor speedup improvement.
  - G4NuclearLevelData: added new public interface to enable upload of nuclear level data before the first event.
  - G4PhotonEvaporation: access G4NuclearPolarizationStore only if correlated gamma decay is enabled. Fixed gamma de-excitation when initial excitation energy is between ground state and 1st level.
  - G4CompetitiveFission, G4FissionBarrier, G4FissionParameters: added numerical protections; clean-up C++11 keywords; moved headers to source code.
  - Code clean-up and fixed Coverity defects.
- Elastic scattering
  - G4HadronElastic: removed tracking cut and use numerically safer computation for very low-energy projectile. Improved description and comments; added C++11 keywords. Make resampling of scattering angle using algorithm from this class in the case that `abs(cos(theta))` > `1 m`. Added protected variable `pLocalTmax`; added protection for projectile of zero kinetic energy. Added new parameterisations for protons and pions. Added a new method for s-,c-,b- particles.
  - G4ChargeExchange: updated interfaces; added protection for projectile of zero kinetic energy.
  - G4AntiNuclElastic: do not compute trigonometric functions, which are not used.
  - G4ElasticHadrNucleusHE, G4LEpp, G4LEnp: code clean-up.
  - G4ElasticHadrNucleusHE: reduced size of data structure and time for initialisation by about a factor of 2; general code clean-up; added further protections. Made all data shared between threads. General code clean-up.
  - Removed "using namespace std" and "using namespace CLHEP" from G4NeutronElectronElModel header.
  - G4HadronElastic: changed warning printout for resampling, by protecting it by G4VERBOSE. Added limit on number of warning printouts. Addressing problem report #2204.
- Lend
  - `G4LENDCapture::ApplyYourself()`: fixed memory leak reported by Coverity.
  - Fixed compilation warnings on gcc-9.1 for missing assignment operator.
- Lepto-nuclear
  - Neutrino-nucleus models and precalculated distribuitons as from new data-set G4PARTICLEXS-2.0.
  - Fixed bug in G4NuMuNucelusCc(Nc)Model for kinematics of quasi-elastic neutrino scattering. Fix for m->e in nucleon 4-vectors, when nucleon move, iTeMax->100. Fixed cases of arrays out of boundaries for indices of x-.
  - G4NuMuNucleusCcModel: 1p1h momentum sampling according to AS model; added precompound interface. Implemented off-shell kinematics; fixes in ApplyYourself(), SampleLVkr() and CoherenPion(); new method RecoilDeexcitation() to de-excite recoiled nucleus.
  - G4NeutrinoNucleusModel: added two methods for excitation energy and nucleon momentum sampling.
  - G4NuMuNucleusCcModel, G4NuMuNucleusNcModel, G4NeutrinoNucleusModel, G4NeutrinoElectronCcModel: implemented s-channel in nu-e-cc model.
  - Removed `using namespace std` and `using namespace CLHEP` statements from headers.
  - Fixes for Coverity warnings and clean-up.
- Particle High Precision
  - Fix to deal with incorrect excitation energy when charged particles are emitted during a neutron reaction. In G4ParticleHPInelasticCompFS, changed method CompositeApply(), for very small excitation energies, changed level index from -1 to 0 only if incident and outgoing particles are the same. Addressing problem report #1838.
  - Fix to deal with un-incremented index of photons in `G4ParticleHPPhotonDist::GetPhotons()`. Also cleaned up dead code in that class. Addressing problem report #2167.
  - G4ParticleHPChannelList: fixed bug in the momentum change (it has to be a normalized 3-vector, but it was not) in the case where NeutronHP could not find a proper reaction channel.
  - G4ParticleHPInelasticCompFS: fix to avoid arbitrary number of target nuclei being generated and slowing down multi-threaded operation. Addressing problem report #2166.
  - G4ParticleHPChannel, G4ParticleHPNames: allowed using of an incomplete data library name if the environment variable G4NEUTRONHP_SKIP_MISSING_ISOTOPES is set. The missing cross-sections are then set to 0.
  - G4ParticleHPContAngularPar: redefined residual mass to consider incident particles other than neutrons.
  - G4ParticleHPInelasticBaseFS: added protection against residual with Z<0 or A<Z, do not apply adjust_final_state when data is in MF=6 format (no correlated particle emission).
  - Correction to add Q value info to G4ParticleHPNBodyPhaseSpace.
  - G4ParticleHPInelasticCompFS: re-build method two_body_reaction() to be used by incident charged particles (now isotropic emission in the CMS). Also restrict 'nresp' use below `20 MeV`. Added photon emission when no data are available.
  - G4ParticleHPEnAngCorrelation: deleted part of code trying to preserve baryon number; one has to assume that it is not preserved when using ENDF-6 data.
  - Fixes for crashes detected only when using QGSP_BIC_AllHP physics-list: in method `Sample()` of G4ParticleHPContAngularPar, set protection against unphysical interpolation result; in G4ParticleHPKallbachMannSyst, added in `A()` the possibility of tritium and He3 projectiles, taking in this case (arbitrarily) an intermediate value between the two already considered cases, proton-neutron-deuteron and alpha.
  - Fixes in G4ParticleHPKallbachMannSyst.
  - G4ParticleHPInelasticBaseFS: re-calculate Q value in `BaseApply()` in case of no data in library.
  - Added protection against maxE<0 in G4ParticleHPNBodyPhaseSpace::Sample().
  - G4ParticleHPNames: removed restriction of using isotopes with Z>92, therefore removing the environmental variable `AllowForHeavyElements`.
- Parton-String
  - Extended both Lund and QGS string fragmentation to allow the possibility to have charm and/or bottom quarks and diquarks in the strings. As a result of the hadronization of strings having heavy (c, b) quarks, charmed and bottom hadrons can be produced: only heavy mesons and baryons that can fly macroscopic distances are considered as candidate final states. Note: this extension has required also to extend the list of diquarks available in Geant4, to add those made with charm and bottom quarks.
  - G4FTFParameters: extended FTF configuration interface to include parameters for pion projectile. Diffraction minimal mass is now correctly set in GeV (instead of MeV), for hadron projectiles different from pions, kaons, nucleons and anti-nucleons, in the method `InitForInteraction()`. In `GetMinMass()`, fixed a bug in the computation of the quark type (which affects the estimated minimal string mass produced in diffraction); added also protections to make sure that the quark type is always one of the five considered (u, d, s, c, b). Absolute (rather than signed) charge for antibaryon is now correctly taken in the method `InitForInteraction()`. Fixed creation/destruction/use of Glauber-Gribov cross-section and fixed a memory leak. Added protection for possible division by zero due to zero elastic cross-section. Replaced Chips hadron-nucleon (total and elastic) cross-sections with the Barashenkov-Glauber-Gribov (BGG) cross-sections for ordinary (i.e. non-heavy) hadrons (for heavy hadrons, only BGG cross-section are available and used). Set parameters of a string kink in the constructor (instead of setting it at each interaction, causing memory leaks). Notice that string kinks are currently switched off, so this fix does not affect any physics result.
  - G4FTFModel: minor improvement in the annihilation at rest of light anti-ions, to avoid the possibility of unphysical production of target and projectile fragments at rest. Improvement of the algorithm for string creation.
  - Improvements to FTF model for nucleus-nucleus interactions (with negligible effects for hadron-nucleus).
  - G4DiffractiveExcitation: extended range of excited hadron masses, starting from ground-state values (before, these were starting from current hadron masses).
  - G4ElasticHNScattering: improvement and simplification of the algorithm of elastic scattering (before the masses of resonances were sampled, now this is no longer needed). Added a few protections to avoid rare cases of floating point exceptions.
  - Correction in the Lund string fragmentation regarding the search for final-state in the last string decay. Some code cleanup.
  - Switch off the probability of charm and bottom hadron production in both Lund and QGS string fragmentations (temporary protection, to be removed after release 10.6).
  - Implemented fragmentation functions of heavy (charm and bottom) quarks and diquarks for the QGS string fragmentation, based on a review of the available theoretical papers.
  - G4LundStringFragmentation, G4QGSMFragmentation: in `SplitEandP()`, added a check that the string can be converted to an existing hadron (else a null momentum is returned).
  - The same set of mixing meson parameters (for both scalar and vector mesons), as defined in the base class G4VLongitudinalStringDecay, are now used on both FTF and QGS.
  - G4VLongitudinalStringDecay: added forgotten initialization of c-cbar and b-bbar pair production for kinks or gluons.
  - G4ExcitedStringDecay: added protection in the sampling of resonance masses against values below threshold.
  - G4VPartonStringModel: re-sample the string formation in the case that the (either target or projectile) nuclear residual is an unphysical combination of nucleons (i.e. more than three protons with no neutron, or more than one neutron with no proton).
  - G4Reggeons: added extension for charmed and bottom hadrons following the ideas introduced to deal with Glauber-Gribov heavy hadron - nucleon cross-sections.
  - Deleted unused classes G4VAnnihilationCrossSection, G4QGSMParameters, G4AnnihilationCrossSection, G4GammaAnnCrossSection, G4ASCCrossSection, G4DiffractiveHHScatterer, G4VKinkyStringDecay, G4EventGenerator, G4InteractionCode and G4VertexCode.
  - Fixed Coverity defects.
- Pre-equilibrium
  - Added new model based on pre-compound de-excitation G4LowEGammaNuclearModel.
  - G4PreCompoundEmission, G4PreCompoundFragment, G4VPreCompoundFragment: setup minimum number of points for probability integration to 4; minor code clean-up.
  - G4PreCompoundModel: added check on excitation energy per nucleon for the initial fragment (`30 MeV`) and send highly excited fragment to the de-excitation module. Code clean-up.
- Radioactive Decay
  - Added spontaneous fission channel: added new class G4SFDecay to handle neutron and gamma generation using LLNL model. Read spontaneous fission data from database, insert it into decay tables and instantiate G4SFDecay.
  - Fixed incorrect branching ratio sum for biased mode, to account for the addition of N shell EC capture and spontaneous fission.
  - G4RadioactiveDecayBase: added StreamInfo() method; updated to new N shell EC; enable printout of parameters with G4VERBOSE in `BuildPhysicsTable()`.
  - G4RadioactivationMessenger: removed obsolete "fast beta" option, internal conversion option (not part of biasing) and atomic relaxation option (not part of biasing). Added `analogueMC` option which was forgotten when class was developed.
  - G4RadioactiveDecayBaseMessenger: removed obsolete `fast beta` option.
  - Replaced G4ExceptionDescription in loop with simple string at exception time inG4RadioactiveDecay, G4RadioactiveDecayBase and G4Radioactivation.
  - In `G4RadioactiveDecay::CalculateChainsFromParent()` and `G4Radioactivation::CalculateChainsFromParent()`, fixed memory leak reported by Coverity.
  - G4RadioactiveDecay, G4RadioactiveDecayBase: make sure decay table maps are cleanly deleted at the end of program. Added passing of type of sub-models to secondary particles generated.
  - G4RadioactiveDecayBase: in `LoadDecayTable()` added correction for code which was accidentally deleted when class was created from G4RadioactiveDecay. Now giving correct decay branching ratios. Split off unbiased decay part of DecayIt() and make it protected method called `DecayAnalog()`. Move `dkmap` to protected.
  - G4Radioactivation: corrected bug in which `AtRestDoIt()` and PostStepDoIt() both incorrectly were calling base class method `DecayIt()`. Removed control of verbosity as already in the base class. Removed G4cerr printouts from G4Radioactivation and G4RadioactiveDecayBase; replaced with G4cout.
  - Added radioactive decay mode with emission of Triton, in G4RadioctiveDecay, G4RadioctiveDecayBase, and G4Radioactivation.

### Intercoms

- The following UI commands now return proper return code when they are not successful:
  `/control/execute, loop, foreach, shell, getEnv`.
  Addressing problem report #2159.
- Eliminated global-scope enum in G4UItokenNum.
- Fixed cases of implicit type conversions from size_t to G4int.

### Interfaces

- Fixed square backets around optional parameters. Addressing problem report #2132.
- Declared Win32 a GUI, i.e., it's clickable and can have buttons.
- Fixed deprecation compilation warning on Visual Studio 2019 in G4UIWin32.
- Fixed compilation warnings for use of deprecated features reported when using Qt versions greater than 5.13.
- Only use imported targets for X11, Xm and Wt.
- Removed inclusion of QT_USE_FILE from CMake scripts. All usage is now through the qtX_ macros and imported targets.
- Added TiMemory support; G4UIExective will grab `argc, argv` and customize the output directory for TiMemory.

### Materials

- G4DensityEffectCalculator: new class, proposing alternative computation of the density effect. Added possibility to enable on-the-fly computation of the density effect correction using "exact" formulas (added `ComputeDensityEffectOnFly()` method); as default the old approach is used. Added to G4IonisParamMat logic for selection of density effect parameterisation; if > 70% of mass of a compound corresponds to a particular element, then density effect parameterisation for this element is used with mass correction. Addressing problem report #2121.
- G4Material: added free electron density; use G4NistManager to instantiate element in constructor with effective Z and A. Reordered class members.
- G4SandiaTable, G4IonisParamMat: use const material pointer.
- G4AtomicShells, G4AtomicShells_XDB_EADL: added new method GetNumberOfFreeElectrons().
- G4NistManager: fixed potential thread safety issue.
- G4IonisParamMat: set mass limit of a single element to 90%.
- G4IonStoppingData: fixed typo in ICRU90 material names.
- G4UCNMicroRoughnessHelper: corrected out-of-date URL for thesis and paper reference.
- Fixed cases of implicit type conversions from size_t to G4int.

### Parameterisations

- GFLASH:
  - Added possibility to use sensitive detector from parallel world.

### Particles

- G4DynamicParticle: added functionality to provide log-kinetic energy value, computed only on demand if its stored value is not up-to-date with the kinetic energy. Changed `SetMass()` method, now inlined and allowing setting mass of a particle to PDG value, which is needed in order to recover secondary hadrons to the mass shell. Code cleanup: moved data members to be private; aligned class members 3-vectors, doubles, integer; added method `SetPolarisation()`; removed unused forward declarations and headers; keep formatting of the class in one style, removed extra empty lines.
- G4ShortLivedConstructor: extended method `ConstructQuarks()` to include diquarks made of charm and/or bottom quarks. The new, heavy diquarks and anti-diquarks have been defined with basic, rough properties (just those currently needed by the hadronic string models): future refinements are expected.
- G4NucleiProperties: added a simplified parameterisation variant with not too high mass values, to allow decaying fragments produced by some hadronic models and consisting of only neutrons or protons; also light ion masses computation is more thread safe after change of the order of mass computation.

### Persistency

- ASCII:
  - Fixed printout syntax in `G4tgrUtils::GetDouble()`.
- GDML:
  - Added support for writing out assemblies envelopes.
  - Improved reading of optical properties reader, by allowing reuse of the same G4MaterialPropertyVector object for identical properties.
  - G4GDMLMessenger: fix to avoid UI commands from being broadcasted to worker threads.
  - G4GDMLRead: fix to avoid double-definition of system units.

### Physics lists

- Builders:
  - Replaced explicit values for the energy transition region with values from G4HadronicParameters, for nearly all builders. Note: kept unchanged the transition region between FTFP and BERT only in four cases: G4HadronPhysicsFTFP_BERT_ATL, G4HadronPhysicsINCLXX, G4HadronPhysicsNuBeam and "ShieldingM".
  - Modified G4NeutronCrossSectionXS as consequence of code cleanup in lists and removal of G4Dataquestionaire.
  - G4HyperonFTFPBuilder: replaced Chips inelastic cross-sections for hyperons and anti-hyperons with Glauber-Gribov ones; in this way, elastic and inelastic cross-sections follow consistently the same approach.
  - G4BertiniKaonBuilder, G4BertiniPiKBuilder: replaced Chips inelastic cross-sections with Glauber-Gribov ones as default kaon cross-sections.
  - G4FTFBinaryKaonBuilder, G4QGSBinaryKaonBuilder, G4QGSBinaryPiKBuilder, G4QGSPPiKBuilder, G4QGSPKaonBuilder: removed kaon cross-sections, already set by the Bertini's builder, which is always needed.
- Constructors:
  - decay
    - G4RadioactiveDecayPhysics: replaced G4RadioactiveDecay with G4RadioactiveDecayBase. This removes the biasing functionality which is generally not used in the physics lists.
  - electromagnetic:
    - Added handling of UI thermalization model control in G4EmDNAPhysics_option1,2,3,4,5,6,7,8.
    - G4EmDNAChemistry constructors: updated to follow emdna changes.
    - Added sub-excitation processes in G4EmDNAPhysics_option8.
    - G4EmLivermorePhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option4, G4EmStandardPhysics_option3: define upper energy limit for nuclear stopping via EM parameters. In all DNA constructors, added `ActivateDNA()` flag to EM parameters.
    - G4EmLivermorePhysics, G4EmLowEPPhysics, G4EmStandardPhysics_option4: use `SetEmModel()` instead of `AddEmModel()` for gamma conversion. Updated settings of the gamma conversion process to provide the original model combinations when the low energy G4BetheHeitlerModel model was replaced by the G4BetheHeitler5DModel.
    - G4GammaGeneralProcess: fixed "Base Material" use case. Use the new, optimised log-vector access method.
    - G4EmStandardPhysics_option2, G4EmStandardPhysics_option3: implemented "General Process" option for gamma.
    - G4EmStandardPhysics_option4: use 5D model for gamma conversion.
    - G4EmStandardPhysicsSS: in the case if Mott correction flag is TRUE, apply G4eSingleCoulombScatteringModel both for e+ and e-.
    - Added G4EmDNAChemistry_option2 constructor. Added new ELSEPA elastic model for Geant4-DNA in G4EmDNAPhysics_option2.
    - G4OpticalPhysics: set boundary process to last. Addressing problem report #2113.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics: changed transition region from the cascade to string model `3 - 6 GeV`, according to values in G4HadronicParameters class (before the transition was `3 - 3.5 GeV`); added muon-neutrino nucleus interactions; simplified and clean-up model creation; reduced memory leak at destruction; removed extra static members and do not use extra builder classes; use `std::getenv()`.
    - G4BertiniElectroNuclearBuilder: use `std::getenv()` for thread safety.
  - hadron_elastic:
    - G4HadronElasticPhysics: use HE elastic model for the full energy range; use Glauber-Gribov cross-section for hyperons.
    - G4HadronHElasticPhysics: use Glauber-Gribov elastic cross-section for anti-hyperons (instead of Chips).
    - G4HadronDElasticPhysics: use Glauber-Gribov cross-section for hyperons, d, t, He3, and He4.
    - G4HadronElasticPhysicsXS, G4IonElasticPhysics: removed commented code.
  - hadron_inelastic:
    - Changed the energy transition region between hadronic string and intranuclear cascade models to `3 - 6 GeV` (it was `3 - 12 GeV` for pions, kaons and nucleons; it was `2 - 6 GeV` for hyperons; left unchanged for anti-baryons where FTFP is used for all energies), replacing explicit values with those from G4HadronicParameters, in nearly all constructors. Note: kept unchanged the transition region between FTFP and BERT only in four cases: G4HadronPhysicsFTFP_BERT_ATL, G4HadronPhysicsINCLXX, G4HadronPhysicsNuBeam and "ShieldingM".)
    - G4HadronInelasticQBBC: use XS proton inelastic.
    - G4HadronPhysicsFTFP_BERT_TRV: removed special treatment of hadronic inelastic cross-sections of hyperons and anti-hyperons; now it is the default in G4HyperonFTFPBuilder.
    - G4HadronInelasticFTFQGSP_BERT, G4HadronInelasticQBBC: use Glauber-Gribov inelastic cross-sections instead of Chips ones, for hyperons and anti-hyperons.
    - G4HadronPhysicsFTF_BIC, G4HadronPhysicsFTFP_BERT_HP, G4HadronPhysicsFTFP_BERT_TRV, G4HadronPhysicsFTFQGSP_BERT, G4HadronPhysicsQGS_BIC, G4HadronPhysicsQGSP_BERT, G4HadronPhysicsQGSP_BERT_HP, G4HadronPhysicsQGSP_BIC, G4HadronPhysicsQGSP_BIC_HP, G4HadronPhysicsQGSP_BIC_AllHP, G4HadronInelasticQBBC, G4HadronPhysicsINCLXX: removed special treatment of hadronic inelastic cross-sections of kaons (now default).
  - ions:
    - G4IonPhysics, G4IonPhysicsPHP, G4IonQMDPhysics: changed the transition energy region between FTFP and BIC to `3 - 6 GeV` (it was `2 - 4 GeV`), replacing explicit values with those from G4HadronicParameters.
  - limiters:
    - Fixed cases of implicit type conversions from size_t to G4int.
  - stopping:
    - Use FTFP also for the annihilation at rest of neutral anti-hadrons: anti-neutron, anti-lambda, anti-sigma0 and anti-xi0. This extension is is for completeness and practical convenience, although physically neutral hadrons should never be completely at rest.
    - G4StoppingPhysicsFritiofWithBinaryCascade: new class to handle the nuclear capture at rest of negatively charged particles. It is similar to G4StoppingPhysics, with the only difference that Fritiof coupled with Binary Cascade is used instead of FTFP, for anti-proton and anti-neutron annihilation at rest.
- Lists:
  - Replaced G4RadioactiveDecay with G4RadioactiveDecayBase in LBE list.
  - FTF_BIC, QGS_BIC: use the newly introduced stopping physics constructor G4StoppingPhysicsFritiofWithBinaryCascade (instead of the default G4StoppingPhysics).
  - Shielding: replacing explicit values for the energy transition region with values from G4HadronicParameters.
  - Code clean-up: removed template mechanism (except for G4GenericPhysicsList, G4PhysListStamper and INCLXXPhysicsListHelper); deleted copy-constructor and assignment operator; for empty destructors, use `=default`; moved include/x.icc to src/x.cc for lists without template; removed `SetCuts()` implementation where not specialised; removed version number from lists; removed G4DataQuestionaire.
  - FTFP_BERT_HP, QGSP_BERT_HP, INCLXXPhysicsListHelper: consistently added RadioactiveDecay to all physics lists which use NeutronHP; the rationale is that precision is more valuable than speed for these physics lists. Note: the other physics lists which use NeutronHP - such as Shielding, QGSP_BIC_HP, QGSP_BIC_AllHP, and LBE - had already RadioactiveDecay activated.
- Util:
  - Removed G4DataQuestionaire class.

### Run

- Introduced use of G4ScoringRealWorld to allow to define command-based scorers to a logical volume in the mass world.
- G4RunManager, G4RunManagerKernel: addressing cases in which the GDML parser directly replaces the world volume without changing the user detector construction.
- Properly initialise luxury level for Ranlux* engines in MT mode. Addressing problem report #2184.
- G4RunMessenger: properly enable `/run/storeRndmStatToEvent 3` UI command. Addressing problem report #2198.
- Made G4PhysicsListHelper a thread local singleton. Fixed typo.
- Fixed cases of implicit type conversions from size_t to G4int.
- Updated scripts for TiMemory. Removed `InitializeTiMemory()` from G4RunManager.

### Track & Tracking

- G4Track: added forward declaration for G4VProcess.
- Fixed implicit type conversions from size_t to G4int.

### Visualization

- Fixed compilation warnings on gcc-9.1.0.

- Management
  - Introducing cloud drawing style. New parameter candidate 'cloud' in `/vis/viewer/set/style`. Cloud drawing uses `solid->GetPointOnSurface()`, i.e., uses kernel algorithms and by-passes polyhedral representations. The solid is represented by a polymarker of dots. The default number of points is 1000. This can be changed with the command `/vis/viewer/set/numberOfCloudPoints`; the minimum number is 100. Note that OpenGL has a fast algorithm for polymarker. This allows us to use cloud style both as a choice or as fallback when the polyhedral representation fails, for example, when BooleanProcessor fails.
  - New and improved commands:
    `/vis/viewer/centreOn`: improved - it does not zoom.
    `/vis/viewer/centreAndZoomInOn`: new.
    `/vis/touchable/centreOn`: improved - it does not zoom.
    `/vis/touchable/centreAndZoomInOn`: new.
    `/vis/touchable/extentForField` and `volumeForField`: new.
    `/vis/scene/showExtents`: new.
    `/vis/set/volumeForField`: new.
    `/vis/touchable/showExtent`: new.
  - Reworked `/vis/scene/add/eventID` command: just writes a summary at end of run; except when reviewing, kept events one by one, in which case it writes run and event no for each event.
  - Ensure `/vis/drawTree` works even if vis is disabled.
  - Added copy number parameter to `/vis/touchable/findPath`.
  - Implemented `/vis/set/extentForField` command: the default is a null extent, which is to be interpreted by the field model as the whole extent of the current scene. Otherwise, with this command, one can limit the extent over which the field is drawn. This would help, for example, if drawing over the whole scene produced so many arrows or lines that it clutters the scene. Changed the default spacing: the parameter `nDataPointsPerHalfExtent` is changed from 10 to 3, so as not to clutter the scene. See guidance of `/vis/scene/add/*Field` commands for further explanation.
  - Provide ability to draw electric fields, and eventually any other field. Added `/vis/scene/add/electricField` by analogy to existing `.../magneticField`.
  - Refactor MagneticFieldModel class with new base to handle all kinds of vector fields; existing, and new ElectricFieldModel only have to implement a simple function to get the field vector at a location.
  - Include parameterised volumes in overlap checking and visualisation in G4LogicalVolumeModel (in addition to ordinary placements).
  - Add G4TessellatedSolid to list of solids that may be specially treated.
  - Introduced `/vis/viewer/centreOn` and `/vis/touchable/centreOn` UI commands. This allows one to centre the view (zoom in) on a volume. Reset with `/vis/viewer/reset`.
  - Rationalised view interpolation; encapsulate algorithm into base class G4VVisCommand, so that commands `/vis/viewer/interpolate`, `/vis/viewer/centreOn` and `/vis/touchable/centerOn` now use this. Might consider use by all view changing commands.
  - Clear if scene contains no run duration models (e.g., after geometry has changed).
  - Augment G4VUserVisAction.
  - G4VSceneHandler: added namespace scope to MeshScoreMap.
  - Fixed bug in `/vis/viewer/set/sectionPlane`.
  - Corrected few typos in printout/comments.
  - Improved guidance for `/vis/scene/add/volume`.
  - Minor improvements to visualization manager.
  - Fixed Boolean operators to return G4bool.
  - Several small improvements and fixes.
  - Replaced use of `std::experimental::filesystem` with `std::filesystem` for WIN32 target in G4VisCommandsViewer. Forcing C++17 default builds on Windows and allow for porting on Visual Studio 2019.
  - Fixed Coverity defects.
- Modeling:
  - Introduced G4BoundingExtentScene. This allows one to accumulate extents using the newly introduced `G4VisExtent::Transform()` and is a better way of determining the overall extent of a scene (or of any set of extents) than by the bounding sphere approach.
  - G4VFieldModel, G4ElectricFieldModel, G4MagneticFieldModel: new abstraction for field models.
  - Arrows and field models: introduced further protection.
  - G4VModel: introduced `GetTransformedExtent()` method.
  - G4PhysicalVolumeModel: use G4BoundingExtentScene instead of G4BoundingSphereScene. Fixed bug whereby the local extent was incorrectly calculated.
  - G4CallbackModel: include modeling parameters in passed arguments.
  - Fixed bug in `/vis/viewer/set/sectionPlane`.
  - Fixed `setLineVisible()` in `/vis/modeling`.
  - Added volume count (but commented out printing).
  - Fixed cases of implicit type conversions from size_t to G4int.
- OpenGL
  - Improved X window opening.
  - Removed default font size.
  - Force double buffer context for OGLIX.
  - Force kernel visit on change of number of cloud points.
  - Avoid re-using display lists for markers. They may have their own position relative to the overall object transformation.
  - Extended glFlush scaling to all circumstances.
  - Refine DisplayListLimit command guidance and output.
  - Rationalise headers inclusion in G4OpenGLQtViewer.
  - Fixed compilation warnings for use of deprecated features reported when using Qt versions greater than 5.13.
  - Only link to imported targets for Motif and X11 Removed inclusion of QT_USE_FILE from CMake scripts. All usage is now through the qtX_ macros and imported targets.
- OpenInventor
  - Test number of cloud points for kernel visit.
  - Added missing protection on G4VIS_BUILD_OIX_DRIVER.
  - Fixed compilation warning from gcc-9.1 in SoCounterAction for setting of name, apparently not allowed in OpenInventor.
  - Corrected few typos in printout/comments.
  - Removed inclusion of QT_USE_FILE from CMake scripts. All usage is now through the qtX_ macros and imported targets.
- Raytracer
  - Fixed cases of implicit type conversions from size_t to G4int.
  - Link to X11 imported targets when building X11 driver.
- Tree
  - Fixed typo in output message.
- XXX
  - Force kernel visit on change of number of cloud points.
- Externals
  - Updated gl2ps sub-module to version 1.4.0.
  - Only link to imported targets for OpenGL; explicitly link to global modules to use/propagate usage requirements.

### Environments

- G4Py:
  - Updated interfaces for release 10.6.
  - g4pym boost_python library name can be specified in cmake. Addressing problem report #2059.

### Data sets

- New low-energy data set version, G4EMLOW-7.9:
  - Added ELSEPA elastic model for Geant4-DNA.
- New data set version G4PhotonEvaporation-5.5 for nuclear de-excitation data:
  - Fixed z85.a217 file (217At).
- New data set version for radioactive-decay processes, G4RadioactiveDecay-5.4:
  - Updated z2.a8, z3.a8, and z4.a8 and add z4.a9 for 9Li and 8He decays.
  - Corrected capture data for I-1125.
  - Updated Er-169(z68.a169) according to DDEP.
  - Added firstForbidden flags to Tb-161 (z65.a161).
  - Added M-shell and N-shell capture to Sc-44 (z21.a44).
- New data files for evaluated cross-sections G4PARTICLEXS-2.1:
  - Added data for neutrino.
  - Updated cross-sections for low Z targets at low energy.
  - Regenerated n, p, d, t, He3, He4, gamma data, providing smoother cross-section shape.
- New data set version for high-precision neutrons, G4NDL-4.6:
  - New neutron cross-sections and final states obtained from JEFF-3.3 (previous were based mainly on ENDF/B-VII.1). Files not coming from JEFF-3.3 and corresponding to previous G4NDL version are: JENDL_HE, IsotopeProduction, ThermalScattering, Inelastic/Gammas, Fission/FF. Information concerning the conversion process of JEFF-3.3 to the G4NDL format can be found in: E.Mendoza and D.Cano-Ott, IAEA technical report INDC(NDS)-0758, Vienna, 2018.

### Examples

- Updated reference outputs, macros, READMEs and scripts.
- Fixes for Doxygen documentation and coding guidelines.
- Removed presence of G4VIS_USE and G4_UI_USE flags.
- Avoid "using namespace std" in headers.
- advanced
  - air_shower
    - Minor code cleanup.
  - brachytherapy
    - Added G4VScoringMesh:: scope identifier to BrachyUserScoreWriter.
  - composite_calorimeter
    - Fixed cases of type conversions from size_t to G4int.
    - Some code cleanup.
  - gammaknife
    - Added G4VScoringMesh:: scope identifier to GammaKnifeController.
  - hadrontherapy
    - Make use of endl consistent with `g4cout` or `std::cout`.
  - human_phantom
    - Fix in geometry of the MIRD phantom.
  - nanobeam
    - Include G4Types.hh header in `main()`, before use of G4MULTITHREADED.
  - STCyclotron
    - New example modelling a solid target of a cyclotron to study the production of the radioisotope of interest for proton irradiation.
  - underground_physics
    - DMXPhysicsList: added Glauber-Gribov cross-section for all elastic processes. Clean-up both EM, hadronic and radioactive decay.
- basic
  - B1
    - Use default MixMax random engine.
  - B2
    - Use default MixMax random engine.
  - B3
    - Added score ntuple writer.
    - Use default MixMax random engine.
  - B4
    - Added score ntuple writer in B4d.
    - Use default MixMax random engine.
    - Updated B4d/run2.mac for modified score n-tuple writer UI commands.
  - B5
    - Use new factory method to create G4AnalysisManager.
    - Removed B5Analysis header, no longer needed.
    - Fixed cases of type conversions from size_t to G4int in B5HodoscopeSD.
- extended
  - analysis
    - Removed B3aScoreWriter, B4dScoreWriter examples. The score ntuple writer is now provided with Geant4 source and demonstrated in basic B3 abd B4d examples.
  - biasing
    - B03
      - B03PhysicsList: explicitly define hadronic cross-sections. Use G4NeutronInelasticXS cross-section.
    - GB07
      - New example illustrating how to use the leading particle biasing option.
    - ReverseMC01
      - Updated for clean-up in analysis typedefs: G4AnaHn types replaced with G4Hn.
      - Fixed cases of type conversions from size_t to G4int.
  - electromagnetic
    - TestEm0
      - PhysicsList: define options, specific for this example after new EM physics is selected; cleaned-up constructor; Opt0 is the default; set BuildCSDARange to true.
    - TestEm1
      - Added G4NIELCalculator and corresponding histograms and printouts; general clean-up of the code; use default random number generator.
      - PhysicsList: disabled GeneralProcess for EM physics. Added `BuildCSDARange()` and set option3 as default. Cleanup in initialisation.
    - TestEm5
      - StackinAction: fixed log histograms, which where filled in a wrong way.
      - PhysListEm19DStandard: use 3-gamma annihilation model.
    - TestEm7
      - Fixed compilation on Windows for unused exception object in `G4NativeScreenedCoulombCrossSection::LoadData()`.
    - TestEm13, TestEm14
      - Updated PhysListEmStandard, Livermore and Penelope to return back to register only post step part of the processes.
    - TestEm15
      - SteppingAction: do not fill hist #11,#12 when no recoil returned.
      - SteppingAction, PhysList5DStandard: added G4GammaConversionToMuons process.
    - TestEm16
      - PhysicsList: use G4DecayPhysics and drop G4AutoDelete.
      - Migrated to use default MixMax generator.
    - TestEm17
      - Updated for clean-up in analysis typedefs: G4AnaHn types replaced with G4Hn.
      - HistoManager: fixed histo title and index; fixed macro files.
      - Code clean-up; switch to MixMax random generator.
  - eventgenerator
    - Removed GunGPS example as obsolete.
  - exoticphysics
    - monopole
      - Use G4Threading::IsMultithreadedApplication() instead of G4MULTITHREADED flag; this fixes compilation of code when used in sequential application built against Geant4 libraries built with MT.
    - ucn
      - Enabled use of Gravity in physics list.
  - field
    - field04
      - Removed useless double-definition of copy-ctr for F04StepMax and deleted.
    - field06
      - Adjusted to changes in G4Transportation (need to inform of use of gravity) and corrected creation of G4ChordFinder.
  - hadronic
    - Hadr00
      - Cleaned-up macro files.
    - Hadr01
      - HistoManager: added linear histogram for pion energy at production.
      - DetectorConstruction: added "Battery" material and new macro test_battery.in. Addressing problem report #2175.
    - Hadr02
      - G4CRMCModel: some improvements (e.g. considered the energy-per-nucleon, instead of the whole projectile, in the case of nucleus projectile) and better documentation (in the form of comments in the class).
      - HadronPhysicsCRMC_FTFP_BERT: use G4HadronicParameters for the energy transition region between FTF and BERT models.
    - Hadr08
      - New example showing how to use the "generic biasing" feature for setting different hadronic physics models according to detector regions.
  - medical/DICOM
    - Defaulted copy-ctr in DicomPhantomZSliceHeader, to fix deprecation compilation warnings on gcc-9.1.
    - Correct DicomHandler singleton for use on Windows.
    - Fixed cases of implicit type conversions from size_t to G4int.
    - Some minor code cleanup.
  - medical/DICOM2
    - Use updated DicomHandler singleton to fix crash on Windows.
    - Fixed cases of implicit type conversions from size_t to G4int.
    - Include G4Types.hh header in main(), before use of G4MULTITHREADED.
  - medical/dna
    - chem2, chem3:
      - Clean-up of TimeStepAction.
    - chem4:
      - Added UI commands for one step thermalization model selection in macro beam.in.
      - Make Species alias of const G4MolecularConfiguration.
      - Create the analysis manager via the new factory function.
    - chem5:
      - Make Species alias of const G4MolecularConfiguration.
      - Removed unused inclusion of g4analysis_defs header from ScoreSpecies.
    - dnadamage1:
      - New example showing a simple way to simulate dna direct and indirect damages using Geant4-DNA physics and chemical processes in a molecular DNA geometry.
    - icsd:
      - Reduced event statistics in icsd.mac input macro, in order to reduce run-time in testing.
    - microdosimetry:
      - Updated plot.C.
    - microprox:
      - New example showing how to compute proximity functions in liquid water using exclusively Geant4-DNA physics processes and models.
    - microyz:
      - Added condensed history models including step size control.
      - Added EM UI commands in microyz.in.
      - Fixed Boolean operators to return G4bool.
  - medical/electronScattering2
    - Fixed warning about attempting to add multiple times the same sensitive detector.
    - Fixed compilation warning on Windows for unused out_of_range exception object in `Run::Merge()`.
  - medical/fanoCavity, fanoCavity2
    - DetectorConstruction: simplification of DefineMaterial().
    - DetectorConstruction, DetectorMessenger: fixed usage of base materials and cleanup (should fix ~1% error for Opt4 EM physics).
    - PhysListEmStandard_option4: set RangeFactor to 0.08 (as in the physics_list library). PhysListEmStandard_option3: set parameters as in the physics_list library.
  - optical/LXe
    - LXeDetectorConstruction: removed protection against rebuilding detector.
    - LXeEventAction: commented out randomSaveEvent.
    - Update PMT positions when changing number of PMTs.
    - Set fewer particles in wls.mac and cerenkov.mac input macros.
    - Use unique analysis filenames.
  - optical/OpNovice
    - Use G4OpticalPhysics and G4SteppingVerbose.
    - Removed unused surface parameters.
  - optical/OpNovice2
    - Added surface roughness and polish commands.
    - Recording scintillation photon creation time.
    - Use unique analysis filenames.
    - Updated macros.
  - optical/wls
    - Avoid storing random number seeds.
    - Use G4OpticalPhysics and G4SteppingVerbose.
  - parallel
    - MPI
      - Fixed compilation error in G4MPIextraWorker. Addressing problem report #2163.
      - Fixed exMPI03, exMPI04; compilation of G4MPIscorerMerger was broken after changes in scorers.
      - Added new option `rowMode` for ntuple merging; changed the default merging mode to the new one (column-wise with preserved rows) and updated the analysis code.
    - ThreadsafeScorers
      - Fixed compilation warning on Windows for calling TIMEMORY_AUTO_TIMER with no arguments in `TSPrimaryGeneratorAction::GeneratePrimaries()`.
    - TopC
      - Added info/HowToTest.txt with a short summary of the build instructions.
  - parameterisation
    - gflash
      - Extend GFlash examples set by moving existing 'gflash' example to gflash1.
      - Added example gflash2 with envelope in parallel world.
      - Added example gflash3 with SD in parallel world.
      - Added example gflasha with histogramming of shower profiles. Allows comparing shower profiles from fast simulation with full simulation.
  - persistency
    - gdml/G01
      - Added `BeamOn(0)` to initialize range to energy converters needed when exporting cuts per volume.
      - Enabled overlaps checking in example.
      - Corrected overlap in assembly.gdml sample.
      - Corrected CMake script to install otherwise missing GDML sample file.
    - P01
      - Fixed definition of allocator in ExP01TrackerHit.
  - radioactivedecay
    - rdecay01
      - PhysicsList: replaced G4RadioactiveDecay with refactored class G4Radioactivation.
      - TrackingAction: if 'fFullChain' set kinetic energy to zero.
      - In `timeWindow` command, allow t1 = 0.
      - Documented timeWindowBiased.mac input macro.
    - rdecay02
      - New class BiasedRDPhysics using new G4Radioactivation process with all biasing available.
      - In PhysicsList, replaced G4RadioactiveDecayPhysics with BiasedRDPhysics, also removed HP option physics lists.
      - In Run, replaced G4RadioactiveDecay with G4Radioactivation.
  - runandevent
    - RE03
      - Added G4VScoringMesh:: scope identifier to RE03UserScoreWriter.