# Geant4 11.0 Release Notes

Geant4 11.0 Release Notes

December 10th, 2021

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
10. Appendix

## 1. Supported and Tested Platforms

Platforms:

- Linux, gcc-8.3.1.
  Tested on 64 bit architectures (Intel or AMD) with CERN CentOS Linux 8 (CC8) (based on CentOS Linux 8).
- macOS 12.01 Monterey with Apple LLVM/Clang-13.
  Tested on 64 bit architectures (Intel or Apple Silicon).
- Windows-10 with Visual C++ 14.29 (Visual Studio 2019).

More verified and tested configurations (64 bits):

- Linux, gcc-9.3/10.2/11.2, clang-9/10/11
- Linux, Intel-icc 2021.4
- macOS 10.15 Catalina with Apple LLVM/Clang-12
- macOS 11.6 Big Sur with Apple LLVM/Clang-12

## 2. Supported CLHEP and VecGeom versions

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

- Simplified G4String interfaces and implementation with C++11/17. Removed obsolete/std::string synonym member functions and deprecated non-std::string member functions, replacing with new free functions in G4StrUtil namespace. Might require user code adaptation where G4String functions are explicitly used; for details see Section 10 of this document.
- Major update the G4PhysicsVector and related classes; introduced new public access methods; removed obsolete unused methods; introduced possibility to use different Spline methods.
- Removed deprecated classes G4LPhysicsFreeVector and G4PhysicsLnVector; redirect G4PhysicsOrderedFreeVector to G4PhysicsFreeVector.
- New version of G4PhysicsModelCatalog, the catalog of physics models. Introduced a modelID (a unique integer for each physics model, with close values for similar/related physics models), besides an index (the position in a vector) and the name (string) of the model. The main difference with respect to the previous version is that the three identifiers of each physics model - modelID, index and name - must stay constant and the same for all applications, physics lists and future versions of Geant4.
- C++17 is the minimum ISO C++ Standard required to compile Geant4 and all applications using it.
- Multithreading support is now enabled in the build of Geant4 by default.
- CMake 3.16 is the minimum version required to build Geant4.

Analysis

- Major revision in analysis classes. Migration to G4ThreadLocalSingleton in all specific analysis manager and reader classes. The singleton instances are now deleted by the Geant4 kernel; their explicit deletion in client code has to be removed.
- New G4AnalysisReader.hh header, defining G4AnalysisManager as G4GenericAnalysisManager; G4GenericAnalysisManager can handle all supported file formats, so file names should be provided with an extension (.csv, .hdf5, .root or .xml). To continue using file names without extensions, users can set the default file type using the new function SetDefaultFileType(...). Output specific headers have been removed.
- Also removed g4analysis.hh header with the G4Analysis::MasterInstance() factory method.
- Added new G4VAnalysisReader public function CloseFiles() to be called by user before the end of program and its implementation for all readers.

Geometry, Fields and Transportation

- Removed deprecated accessors in G4Sphere and G4Tubs.
- G4[Partial]PhantomParameterisation: renamed Get/SetNoVoxel*() accessors to Get/SetNoVoxels*() for coherence. Might imply user code migration.

Electromagnetic and optical physics

- G4EmProcessOptions class has been removed. Adaptation of custom user made physics-lists may be required.
- Removed deprecated material properties for G4Scintillation. Now the "enhanced" time constants of version 10.7 are the only way to specify scintillation properties.
- Added protection against typos in material property names. To create a user-defined material property (or material constant property), add the `createNewKey=true` argument to `Add(Const)Property()`.
- Removed redundant optical UI commands.

Hadronic physics configuration

- Constructors for inelastic processes have changed signature, as well as for elastic and inelastic cross-sections.
  This affects the internal configuration in physics-lists. See the details in Section 10 of this document, for the required adaptations in custom physics-lists.
- Deprecated environmental variables used in NeutronHP, ParticleHP and Radioactive Decay have been removed: they have been replaced by equivalent UI commands (already introduced in previous versions).

Visualization and Modeling

- As of this release, the recommended and supported Open Inventor driver will be the Qt-based one (OIQt viewer option). The Xt/Xm drivers (OIX, OIXE) are still available but are deprecated and will be removed in the next release.
- Qt drivers require the Qt-5 platform. Qt-6 is not yet supported.
- The G4VModel interface has been simplified. Responsibility for transformation and extent has been delegated to individual models. For example, there is no longer a method G4VModel::GetTransformedExtent(), the concrete model is required to maintain the extent depending on the transformation (if any) and a simple GetExtent() returns the current extent.

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-8.0, G4PARTICLEXS-4.0`.
  - In order to use `ParticleHP` for charged particles (protons, deuterons, tritons, He3 and alphas), an optional data set `G4TENDL-1.4` is required, and can be optionally downloaded in addition.

## 4. New Developments and Capabilities

General

- Tasking system, based on PTL (Parallel Tasking Library) v2.0.0, is set as default parallelism scheme for multi-threading. A dedicated run manager (G4TaskRunManager) and factory (G4RunManagerFactory) are provided, enabling use of tasks for the event loop. The tasking system is fully compatible with Intel TBB, which can be selected if GEANT4_USE_TBB=ON is specified when configuring CMake. The default behavior for tasking is to submit the tasks to an internal thread-pool and task-queue.
- New G4SteppingVerboseWithUnits class, an alternative to G4SteppingVerbose with printout of proper units. Simplified way of defining a user-specific stepping verbose, that is now common to all sequential, MT and tasking modes.
- Introducing G4VTrackingManager, an interface for custom tracking managers specialized for one or a small number of particle types. Custom tracking manager is used in G4VUserPhysicsList, if registered. G4EventManager hands over tracks to custom tracking manager, if registered for the particle.
- Added new Ranlux++ engine to the list of supported random engines.
- G4String provides a new `G4StrUtil` namespace with functions for simple string manipulation, including left/right stripping, case conversion, and searching.

Analysis

- New public functions G4VAnalysisManager::Reset() and Clear() allowing resetting and deleting all allocated analysis objects and clearing their collections.
- Added support for n-tuple columns of string vectors via new public functions in G4VAnalysisManager and G4VAnalysisReader
- Implemented support for file system directories with Csv output. The histogram and n-tuple files are saved in directories, if their names are set and if the directories exist in the file system.

Digitization, Hits & Scoring

- Extended cylindrical scoring mesh to tube and tube segment.

Geometry and Field

- Added maps for faster search based on name in solids, regions and volumes stores.
- Enabled use of alternative G4VoxelNavigation class, allowing the possibility to use alternative navigation algorithms for voxelised/optimised geometries.
- Added new example demonstrating interface with VecGeom navigator (Beta).

Materials

- Revised and updated G4Exceptions in G4Material, now providing more complete information and better diagnostics.
- Updated G4Material: use const pointers to G4Elements where needed.
- New class G4OpticalMaterialProperties, a store for optical material properties and allow use of predefined optical material properties.
- In G4MaterialPropertiesTable, the use of `std::vector` for material properties and material const properties, rather than `std::map`, eliminates the need to find the map entry.

Electromagnetic physics

- General code cleanup in EM modules; removed obsolete models and processes, removed G4EmProcessOptions class.
- Updates to G4GammaGeneralProcess: exclude gamma-nuclear from the 2nd energy area.
- Fixed model per region definition for all base processes G4VEmProcess, G4VMultipleScattering, G4VEnergyLossProcess; removed sub-cut facility for energy loss processes but left G4VSubCutProducer interface.
- Updated EM integral approach by introduction of a cross-section shape type including cross-section shape with 2 maxima.
- Reviewed EM part of G4PhysicsModelCatalog to adopt new numbering convention. Created new enum for low-energy electromagnetic process sub-types.
- Updated G4UrbanMscModel to not apply energy correction at small steps below 1% of a particle range.
- G4VEmFluctuationModel: changed interface; both cut value and max energy transfer are parameters of main methods.
- In G4UniversalFluctuation, substantially simplified sampling algorithm for faster computation.
- Updated Livermore models to use EPICS2017 data.
- Included new PIXE data libraries following ANSTO recommendations.
- New data structure for ICRU73 and ICRU90 ion stopping power data shared between threads and used in G4LinhardSorensenIonModel.
- Implement and use base material approach only if base materials are defined, this should bring a minor speedup of the code and little reduction of memory.
- Enable synchrotron radiation only for electrons, positrons, muons, protons, and anti-protons.
- Introducing quantum entanglement of e+ annihilation. Currently implemented only in G4eplusAnnihilation and G4LivermorePolarizedComptonModel.
- New class G4OpticalMaterialProperties, a store for optical material properties and allow use of predefined optical material properties.
- Added new IRT-syn model for DNA.

Hadronic physics

- General code clean-up in hadronic processes and models; removed obsolete and deprecated classes; removed obsolete "rpg" model.
- Introduced a new threshold parameter in radioactive-decay for analogue mode to kill very long radioactive decays at rest of nuclides happening later than such threshold.
- Introduced six light hypernuclei and their corresponding antiparticles (for the time being, only electromagnetic interactions of these particles are available, but switched off by default).
- Extended the interface of hadronic models for projectile hypernuclei and anti-hypernuclei (but not yet hadronic physics for these particles).
- Added implementation of hypercluster emission in INCLXX.
- Extended interface of the Fritiof (FTF) string model to get the number of projectile/target spectator nucleons, number of nucleon-nucleon collisions and impact parameter (see example `Hadr09`).

Physics Lists

- Updated physics lists to use a uniform approach for verbosity.
- Electromagnetic physics for light hypernuclei (switched off by default) can be enabled on top of any Physics Lists via C++ interface (`G4HadronicParameters::Instance()->SetEnableHyperNuclei(true)`).
- ANSTO data option for atomic de-excitation can be enabled on top of any physics lists using C++ interface or better via UI command.
- EPICS2017 parameterisations for Livermore gamma processes can be enabled.
- Positron anihilation to the tau pair can be enabled.
- LinhardSorensenIonModel is available with G4EmStandardPhysicsWVI constructor.

Visualization and Interfaces

- New ToolsSG (TSG) visualisation package based on g4tools, providing four new (mutually exclusive) visualisation drivers: TOOLSSG_X11_GLES, TOOLSSG_WINDOWS_GLES, TOOLSSG_XT_GLES and TOOLSSG_QT_GLE.
- New VtkQt and VtkNative visualisation drivers.
- Introducing in-app plotting with visualization and related UI command.
- Introducing G4Mesh, a light class that encapsulates and validates visualisation of a nested parameterisation.
- Extended G4UIWin32 driver with new features.
- Revised all visualisation models, to have G4PhysicalVolumeModel taking care of the transformation of any primitives that it generates.
- Removed obsolete network visualisation options for VRML driver and FukuiRenderer driver.
- Removed obsolete GAG/Gain/MOMO and HepRep(WIRED) modules/driver.
- Removed deprecated functions in visualization.

Examples

- CaTS - New application implementing a flexible and extendable framework for the simulation of calorimeter and tracking detectors. It also demonstrates how to use Opticks for the creation and propagation of optical photons.
- pythia/py8decayer - New example demonstrating how to outfit Pythia8-based decay features to those resonances in Geant4 where decay tables are not implemented by default. In addition, it shows how to replace existing Geant4 decay tables to such resonances as `tau+/-` or `B+/-` with the Pythia8-based ones.
- geometry/VecGeomNavigation - New example demonstrating integration of VecGeom navigation, based on the prototype package G4VecGeomNav, being integrated in the example at build time.
- hadronic/Hadr05 - New example demonstrating how to collect energy deposition in a sampling calorimeter and how to survey energy flow.
- hadronic/Hadr10 - New hadronic example aimed to exercise the decay of tau leptons, as well as charmed and bottom hadrons.
- parameterisations/Par04 - New example demonstrating how to use the Machine Learning (ML) inference to create energy deposits as a fast simulation model using ONNX runtime and LWTNN libraries.
- runAndEvent/RE07 - New example demonstrating how to register specialized tracking managers for a particle or a set of particles.
- dna/AuNP - New example simulating the track-structure of electrons in microscopic gold volume. Also simulating that in liquid water medium surrounding the gold volume.
- dna/scavenger - New example showing how to activate the scavenging process in chemistry using the deterministic treatment of the IRT model.
- visualization/movies - New example illustrating how to make a movie with `/vis/viewer/save` and `/vis/viewer/interpolate` UI commands.

## 5. Expected effects on physics and computing performance

Geometry

- Use G4Allocator to dynamically allocate nodes and proxies for the voxels optimisation structure. Should help reducing memory fragmentation.

Electromagnetic physics

- Expected few % speed-up for EM simulations. Stable results for calorimeters compared with the previous versions 10.6 or 10.7.

Hadronic physics

- Stable results with respect to version 10.7 are expected in general for all hadronic physics observables, in particular for hadronic showers in calorimeters.

## 6. Known Run-Time Problems and Limitations

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

## 7. Compilation Warnings

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

## 8. Geant4 Software License

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

## 9. Detailed list of changes and fixes

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

### Configuration

- CMake
  - Updated minimum required CMake version to 3.16, with 3.16 to 3.21 as confirmed working range.
  - Updated default build settings, GEANT4_BUILD_MULTITHREADED is now set ON by default.
  - Updated default build settings, GEANT4_BUILD_BUILTIN_BACKTRACE is now set ON by default.
  - Deprecated use of GEANT4_BUILD_CXXSTD in favour of CMAKE_CXX_STANDARD to choose C++ Standard to compile against.
  - Requiring C++17 as minimum standard to compile Geant4.
  - Added support for compilation against C++23 with CMake 3.20 and newer (note that Geant4 is not yet tested or supported using C++23).
  - Removed obsolete -stdlib flag for AppleClang.
  - Added preliminary support for sanitizer builds with advanced option GEANT4_BUILD_SANITIZER to allow selection of one of address, thread, or undefined sanitizer. The default is no sanitization. Adds appropriate flags to CMAKE_CXX_FLAGS.
  - Removed settings of deprecated PHP_AS_HP environmental variable.
  - Removed obsolete GEANT4_USE_SYSTEM_CLHEP_GRANULAR option.
  - Updated CLHEP minimum required version to 2.4.5.1.
  - Updated VecGeom minimum required version to 1.1.18 for optional build with VecGeom solids.
  - Updated builtin PTL module to version v2.0.0.
  - Added GEANT4_USE_PTL_LOCKS option to configure builtin PTL with mutex locking in task subqueues.
  - Added GEANT4_USE_TOOLSSG option for enabling new ToolsSG visualisation driver and selecting the backend (X11, Motif, Qt, or Windows).
  - Added GEANT4_USE_VTK advanced option for enabling new experimental VTK based visualisation driver.
  - Removed all references to obsolete Wt visualisation driver and dependencies.
  - Removed obsolete options for VRML and FukuiRenderer network/sockets visualisation drivers.
  - Added FindPythia8.cmake script for use in examples.
  - Removed obsolete FindAIDA.cmake module, no longer used in examples.
  - Added geant4.bat, geant4-config.cmd prototypes for setting up environment variables and querying a Geant4 install on Windows.
  - Added XercesC library directory to Linux LD_LIBRARY_PATH for GNUmake.
  - Updated CPack source packaging, including standardisation of naming following open source conventions and use XZ compression instead of BZIP.
  - Updated data-sets versions.
- GNUMake
  - Moved default to C++17 Standard.
  - Updated compiler/link flags for migration of g4tools to externals category.
  - Added comctl32.lib to UI32LIBS for WIN32-VC configuration.
  - Updated default Qt5 include paths for Linux targets.
  - binmake.gmk: removed include path to "rpg" hadronic model, now retired. Removed include paths to `hadronic/models/management` and `hadronic/models/util` modules, now retired.
  - Removed obsolete network visualisation options for VRML driver and FukuiRenderer driver.
  - Removed obsolete GAG/Gain configuration.
  - Removed no longer needed link to libXi in all configurations.
  - Check for existence of lib64 directory for Xerces-C on Linux.
  - Add 'c' flag to ar to suppress diagnostics going to stderr.

### Analysis

- Migration to G4ThreadLocalSingleton in all specific analysis manager and reader classes. The singleton instances are now deleted by the Geant4 kernel; their explicit deletion in client code has to be removed.
- Added public function G4VAnalysisManager::Clear() that deletes all allocated analysis objects and clears their collections. This function should be used as a replacement for deleting the analysis manager in the applications that allocate the analysis data in begin of run and deleted the analysis manager in end of run.
- Added public function G4VAnalysisManager::Reset(), needed when calling files are closed without reset by calling CloseFile(false) from the analysis manager, see `basic/exampleB5` with interactive plotting.
- Added support for n-tuple columns of string vectors via new public functions in G4VAnalysisManager and G4VAnalysisReader. Added support for Xml, Hdf5 output types: added helper code for Xml reader, no update needed for Hdf5.
- Implemented support for file system directories with Csv output as proposed in GitHub PR #32.
- Fixed reading objects from files with directories (Root, Hdf5).
- Implemented missing WriteOnAscii() for h2,h3,p1,p2.
- Added new G4ToolsAnalysisManager::IsEmpty() function.
- Added new G4VAnalysisReader public function CloseFiles() to be called by user before the end of program and its implementation for all readers.
- Replaced the explicit Write[Hn|Pn] functions in the analysis managers by a common implementation in G4ToolsAnalysisManager::WriteImpl() and Merge() using the new Hn file manager classes introduced for the generic file manager. The same code is now used for writing histograms/profiles by specific analysis managers and the generic analysis manager.
- Replaced the explicit Read[Hn|Pn] functions in the analysis readers by a common implementation in G4ToolsAnalysisReader using the newly introduced Hn file manager classes for reading.
- Separated Hn/Pn object file handling from output specific analysis readers in Hn file manager classes for reading (G4XHnRFileManager).
- Separated ReadNtuple functions from the analysis readers in the RNtuple manager classes.
- Added G4ToolsAnalysisMessenger that implements "get" commands `/analysis/hn|pn/get id`.
- Reimplemented utility functions GetBaseName(), GetExtension() using `filesystem` library.
- Removed 'isMaster' argument from managers/reders constructors, and retrieve this info from G4Threading where needed.
- Simplified calls to G4Exceptions: added G4Analysis::Warn() and changed the calls to G4Exception in all analysis classes (except accumulables); reduced exception classification to: Analysis_F001 (Fatal exceptions) and Analysis_W001 (Warnings).
- Simplified verbosity messages, plus more simplifications in warning calls.
- Use fonts from tools in G4PlotManager.
- Use G4StrUtil functions replacing deprecated G4String member functions.
- Removed CMake -DTOOLS_USE_EXPAT definition, no longer needed.
- Removed `default` in switch for GetMergeFunction() to prevent accidental fall through on Windows.
- Code clean-up: review of static data members; changed `static const` to `static constexpr` where possible or `inline static const` otherwise (for G4String); declare static data members inline and moved their initialization in header file. Removed redundant includes and consistency fixes. Moved data members initialization in header files; added deleted default constructor where appropriate; added `explicit` keyword to one argument constructors where missing and removed from constructors with more than 1 parameters; use brace data members initialization everywhere. Replaced some constants with `constexpr`. Replaced G4Analysis::make_unique with `std::make_unique`. Using more shared pointers. Using `[[maybe_unused]]` where appropriate. Fixed Coverity issues.
- Applied clang-tidy performance fixes: use of `const auto&`, `std::move` where appropriate; revisited passing by `std::shared_ptr`. Use `make_unique, nullptr, auto, emplace_back, using`; use of `default` for disabled constructors and destructors and `delete` for private member functions not implemented.
- Removed deprecated g4csv.hh, g4hdf5.hh, g4root.hh, g4xml.hh headers.
- Reduced output specific type definitions in g4xyz_defs.hh to ntuple end rntuple types.
- Removed g4analysis.hh with the G4Analysis::MasterInstance() factory method.
- Removed the default value ("root") for the default file type in G4GenericAnalysisManager; the default must be set by user if using fileNames without extensions.
- Moved g4tools to externals category. Moved "fonts" directory and install logic to g4tools package in externals, as prime interface to Freetype.
- Fix in G4MPIToolsManager: do not call Receive() twice.
- Fixed compilation errors in G4CsvAnalysisReader and G4XmlAnalysisReader occurring with C++20 enabled.
- Fixed evaluation of result of deleting empty file in G4RootAnalysisManager, causing wrong warnings.
- Minor fixes: do not issue same log messages from generic analysis manager and generic file manager; do not call SetIsEmpty() twice in Hdf5.
- Fixed G4*RFileManager destructors.
- Implemented handling directories in Generic analysis manager.

### Digitization & Hits

- Extending cylindrical scoring mesh to tube and tube segment. Fixed indexing of cylindrical scoring mesh commands; addressing problem report #2418.
- Make sure probe commands are not unnecessarily broadcasted to the worker threads.
- Updated G4TScoreHistFiller according to changes in the analysis category; removed deletion of the analysis manager, now done by the Geant4 kernel.
- G4VScoringMesh: corrected warning messages when the size or number of bins have already been set but tried to change.
- Updated G4TScoreNtupleWriter according to changes in the analysis category; removed deletion of the analysis manager, now done by the Geant4 kernel. Added default type and its setter.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- Code formatting.

### Electromagnetic Processes

- Adjoint:
  - General code cleanup: applied clang-format style guidelines; applied C++11 codewords to method declarations (virtual, override, explicit); deleted unused variables and methods; started naming class member variables with `f`; use `nullptr` instead of `0`; removed unused headers; use constexpr for numbers. Use `virtual` and `override` methods consistently; member variables start with `f`; shorten long names; removed unused variables; make class variables local where appropriate; order declarations of class variables; define class variables; removed unused functions; marked copy/assignment operators as `delete`; added ProcessDescriptions; removed ChangeHistory from top of code; use `CLHEP::twopi` instead of hardcoded value; removed more unused headers.
  - G4AdjointForcedInteractionForGamma: improved forced interaction for gamma reverse tracking in thick shielding.
  - G4AdjointhIonisationModel: updated weight correction to limit dependence of proton dose results on cut in range.
  - G4ContinuousGainOfEnergy: use updated signature for ion ionisation.
  - G4AdjointCSManager: updated interfaces to G4PhysicsVector.
  - Fixed coverity warnings in G4AdjointCSManager and G4VEMAdjointModel.
  - Free resources in destructors.
- DNA:
  - Added IRT-syn model.
  - Added new models: G4DNADiracRMatrixExcitationModel, G4DNAQuinnPlasmonExcitationModel, G4DNARelativisticIonisationModel and G4DNAPlasmonExcitation.
  - Added G4VDNAMolecularGeometry, a virtual class for DNA geometry.
  - Added new mesoscopic model for DNA chemistry.
  - Updates in G4DNAIRT, G4DNAIRTMoleculeEncounterStepper, G4ITModelProcessor, G4Scheduler and G4DNAMolecularReactionTable classes, and fixed sub-modules dependencies.
  - Modified G4DNAELSEPAElasticModel for gold material.
  - G4DNAElectronHoleRecombination: dissociation channel of electron-hole recombination moved to G4EmDNAChemistry, _option1, _option2, _option3.
  - G4DNAWaterDissociationDisplacer: added the fragment displacement for new dissociation channel.
  - Replaced hardwired process-sub-types with enum values introduced in the new class G4LowEnergyEmProcessSubType.
  - Updated PrintGeneratorInformation() method signature in G4DNABornAngle and G4DNARuddAngle.
  - G4DNABohrExcitationModel2, G4DNABohrIonisationModel2, G4VLEPSModel: updated interfaces to G4PhysicsVector.
  - Fixed initialization error in G4DNAELSEPAElasticModel.
  - Fixed compilation error in G4ITMultiNavigator when compiling with C++20 enabled.
  - Fixed dependency on g4tools, now moved to externals module.
- High Energy
  - G4eeToHadrons: updated integral type.
  - Code clenup: clean-up of interfaces; removed unused headers; improved initialisation.
  - G4hBremsstrahlungModel: added header.
  - G4hhIonisation: removed G4BohrFluctuations.
  - G4AnnihiToMuPair: return DBL_MAX if below threshold energy; keep pointer to G4LossTableManager for correct de-registration in the MT mode; added option of tau+tau- pair production; optimized computation of cross-sections in compounds; added process sub-type via enumerator.
  - G4mplIonisationModel, G4mplIonisationWithDeltaModel: updated according to change of G4VEmFluctuationModel signature.
- Low Energy
  - Updated Livermore models to use EPICS2017 data.
  - Included new PIXE data libraries following ANSTO recommendations. Added new classes to model the ANSTO ECPSSR cross-sections for protons and alpha particles. Added option to activate the ANSTO fluorescence radiation yield (`Z < 93`).
  - G4LivermorePolarizedComptonModel: added quantum entanglement of e+ annihilation. If the photons have been "tagged" as "quantum-entangled", for example by G4eplusAnnihilation for annihilation into 2 photons, they are "analysed" if and only if both photons suffer Compton scattering. Theoretical predictions from: Pryce and Ward, Nature N.4065 (1947) p.435, and Snyder et al, Physical Review 73 (1948) p.440. Experimental validation in: "Photon quantum entanglement in the MeV regime and its application in PET imaging", D. Watts, J. Allison et al., Nature Communications (2021)12:2646. The implementation of entanglement is described in extensive comments in G4LivermorePolarizedComptonModel source.
  - Migrated Spline treatment for all physics vectors.
  - G4LivermorePolarizedRayleighModel: read data from $G4LEDATA/livermore directory. Code clean-up.
  - Removed unused classes G4LivermoreGammaConversionModelRC and G4LivermoreComptonModifiedModel.
  - Convert G4LPhysicsFreeVector into G4PhysicsFreeVector.
  - Removed obsolete unused classes G4BremsstrahlungCrossSectionHandler, G4BremsstrahlungParameters, G4eBremsstrahlungSpectrum, G4hSRIM2000p, G4PhotoElectricAngularGeneratorSimple, G4MicroElecInelastic_new, G4LivermorePolarizedPhotoElectricModel and G4LivermorePolarizedPhotoElectricGDModel.
  - G4MicroElecLOPhononModel: removed debug printout; rename member of class.
  - G4MicroElecSurface: replaced hardwired process-sub-type 25 with (already existing) `fSurfaceReflection`.
  - G4MicroElecElastic, G4MicroElecLOPhononScattering, G4MicroElecInelastic: replaced hardwired process-sub-types 51 and 53 with new enum values `fLowEnergyElastic` and `fLowEnergyIonisation`.
  - Improved management of array in G4PenelopeGammaConversionModel.
  - Replaced std::map with static arrays in the G4Penelope models for performance improvements.
  - Removed obsolete PrintInfo() methods and self defined process SubType.
  - G4IonParametrisedLossModel: use updated signature for ion ionisation.
  - Updated PrintGeneratorInformation() method signature for few angular generators.
  - G4PenelopeBremsstrahlungAngular, G4PenelopeBremsstrahlungFS, G4PenelopeCrossSection, G4JAEAElasticScatteringModel, G4JAEAPolarizedElasticScatteringModel: use optimal methods of G4PhysicsVector.
  - G4LivermorePolarizedComptonModel: migrated to the new version of G4PhysicsModelCatalog.
  - G4AugerData: removed dead code.
  - G4VCrossSectionHandler, G4eIonisationParameters: use const pointers to G4Element.
  - General code cleanup: use G4 types; cleanup of headers and Penelope models.
- Muons
  - General code clean-up: use C++11 keywords, improved comments, format files.
  - G4EnergyLossForExtrapolator, G4ErrorEnergyLoss, G4TablesForExtrapolator: provide thread-safe initialisation of internal tables; guarantee initialisation only once; size of tables depend only on number of materials.
  - G4MuIonisation: removed obsolete G4BohrFluctuations header.
  - G4MuPairProduction, G4ePairProduction, G4MuBremsstrahlung: disabled Spline interpolation by default.
  - G4MuPairProduction, G4MuBremsstrahlung, G4MuBremsstrahlungModel: improved initialisation.
  - Updated PrintGeneratorInformation() method signature in G4ModifiedMephi.
- Pii
  - Use const pointer to G4Element according to recent changes in materials.
- Polarisation
  - General code cleanup: name classes in logical manner; improved comments; added ProcessDescription; ordered #includes and removed unused; disabled copy and assignment operators with `delete`; increased C++11 keyword usage, especially `override`, `explicit`; renamed (most) class variables to start with `f`; make SCRN arrays the correct size; use `constexpr` for numbers; applied clang-format style; use G4ExceptionDescription; avoid implicit conversions between G4StokesVector and G4ThreeVector.
  - G4PolarizedIonisationBhabhaXS: removed incorrect G4Exception.
  - G4PolarizedAnnihilation, G4ePolarizedIonisation: improved initialisation of assymetry tables.
  - G4PolarizedAnnihilation, G4PolarizedCompton: updated use of the Spline flag.
- Standard
  - G4eplusAnnihilation: introducing Quantum Entanglement. This is activated by UI command `/process/em/QuantumEntanglement`. For e+e- -> gamma gamma, the gammas are "tagged" here and must be "analysed" in a Compton scattering process - see, for example, G4LivermorePolarizedComptonModel. Otherwise entanglement has no effect even if activated. Instantiate clipboard only if Quantum Entanglement is requested.
  - G4PAIModelData, G4eplusTo2GammaOKVIModel: corrected initialisation of physics vectors.
  - G4LindhardSorensenData: updated definition of Spline flag.
  - G4CoulombScattering, G4eBremsstrahlung, G4eplusAnnihilation: updated set of flags for Spline and the integral approach.
  - Removed obsolete classes G4BohrFluctuations and G4HeatedKleinNishinaCompton.
  - G4BetheBlochModel, G4BraggIonModel, G4LindhardSorensenIonModel, G4ICRU73QOModel, G4AtimaIonIonisationModel: changed interface to ion ionisation corrections.
  - G4BraggModel, G4BraggIonModel: set lowest energy to `0.25 keV`; added protection to limit cut value by the lowest energy.
  - G4BraggIonModel, G4BetheBlochModel, G4ionIonisation clean-up. Improved implementation of corrections to ion stopping powers: do not apply corrections at the last step of an ion; do not apply corrections to alpha.Addressing problem report #2440.
  - G4PairProductionRelModel: reduced upper limit of parameterisation cross-section from 80 to 30 `GeV`.
  - G4LindhardSorensenIonModel: use G4BraggIonModel, G4BetheBlochModel and G4IonICRU73Data, do not apply corrections at the last step of an ion.
  - G4IonICRU73Data: new data structure for ion ionisation data.
  - G4LinhardSorensenIonModel, G4ICRU73QOModel: added protection to limit cut value by the lowest energy.
  - G4eplusAnnihilation: migrated to the new version of G4PhysicsModelCatalog.
  - G4PAIModelData: use optimal methods to access G4PhysicsVector.
  - G4UniversalFluctuation, G4IonFluctuations, G4AtimaFluctuations, G4PAIModel, G4PAIPhotModel: updated according to new G4VEmFluctuationModel signature. Minor optimisation and code clean-up in G4UniversalFluctuation.
  - G4UrbanMscModel: do not apply energy correction at small steps below 1% of a particle range. Use random arrays instead of flat() method to speedup the code; use more const variables.
  - G4UniversalFluctuation: substantially simplified sampling algorithm, smaller number of parameters, faster computations; results are in statistical agreement with the previous version of the code.
  - G4PEEffectFluoModel: optimised cross-section computation with reciprocals and Horners scheme.
  - G4BraggIonModel: fixed computation of dedx for alpha if ICRU90 data are used. Improved method signatures and code cleanup.
  - G4hIonisation, G4ionIonisation: He3 dedx derived from alpha dedx; pi, K, proton, pbar, GenericIon have their own dedx and other tables; other hadrons derived from K, protons, pbar; ions derived from GenericIon.
  - G4ionIonisation: use G4WaterStopping with Spline enabled. Minor code clean-up.
  - G4ASTARStopping: improved method signatures.
  - G4BetheBlochModel, G4ESTARStopping, G4AtimaEnergyLossModel, G4LindhardSorensenIonModel: fixed Coverity warnings by initialising all variables in class constructors.
  - Removed obsolete G4alphaIonisation class.
  - Code clean-up of ionisation, energy loss processes and models.
  - Clean-up of gamma processes.
  - Requires data-set G4EMLOW-8.0.
- Utils
  - G4VEmProcess, G4VEnergyLossProcess, G4EmTableType, G4EmBiasingManager, G4LossTableManager: updated integral approach by introduction of a cross-section shape type and different actions depending on the type; added cache for cross-section and range; removed unused methods; attempt to reduce number of `if` operators at run time; integral and Spline flags are set to each process individually and not via G4EmParameters class.
  - G4VEmProcess, G4VEnergyLossProcess, G4VMultipleScattering, G4LossTableBuilder, G4VEmModel, G4VMscModel, G4LossTableManager: implement and use base material approach only if base materials are defined, this should bring a minor speedup of the code and little reduction of memory; fixed problems for the case when materials are changed between runs.
  - G4VEmProcess, G4VEnergyLossProcess, G4VAtomDeexcitation, G4LossTableBuilder: implemented updated numbering scheme for secondary particle production; deprecated duplicate printout of processes and models; moved list of EM parameters printout before printout on processes; improved code format.
  - G4VMultipleScattering: fixed problem observed by CMS for specific physics list.
  - G4EmCorrections, G4VEmProcess: updated use of the Spline flag.
  - G4EmCorrections: do not use Spline in various internal vectors, as correction values are small and smooth. Cleanup of ion correction computations.
  - G4EmCorrections, G4LossTableBuilder: substitute use of deprecated G4LPhysicsFreeVector by G4PhysicsFreeVector.
  - G4VEmProcess, G4VEnergyLossProcess, G4EmDataHandler: updated method RetrievePhysicsTable().
  - G4TableType: added extra enumerator for type of cross-section shape.
  - G4EmProcessSubType: added new type for annihilation to tau pair.
  - G4LowEnergyEmProcessSubType: added new enum values, corresponding to numerical values used in G4PhysicsListHelper.
  - G4LowEnergyEmProcessSubType: created new enum for low-energy electromagnetic process sub-types.
  - G4EmElementSelector: change computation for upper energy limit, fixing occasional crashes in some applications.
  - G4EmParameters: added ANSTO options for the atomic de-excitation; removed obsolete AugerCascade() method.
  - G4EmParameters, G4EmParametersMessenger: removed obsolete methods; added protection agains duplicate printout.
  - G4EmLowEParameters, G4EmLowEParametersMessenger: added ANSTO flag and UI commands.
  - G4OpticalParameters: removed deprecated function declarations.
  - G4OpticalParameters, G4OpticalParametersMessenger: removed deprecated optical commands and parameters. Replaced CreateDir() with new G4UIdirectory(). Apply clang-format style guidelines.
  - G4VMultipleScattering: removed obsolete unused methods; reduced number of operations at run time, use `isIon` flag for scaling of energy limits for all particles with mass `>1 GeV`.
  - G4VEmModel removed "virtual" keyword for ComputeDEDX() method.
  - G4EmCalculator: fixed computation of dedx for He3 and alpha. In G4VEnergyLossProcess, exclude ion corrections only from d, t, alpha. Addressing problem report #2440.
  - G4ionEffectiveCharge: return back limit on effective charge from 0.5 to 1 as used in previous releases.
  - G4VEmAngularDistribution: added virtual method PrintGeneratorInformation().
  - Fixed model per region definition for all base processes G4VEmProcess, G4VMultipleScattering, G4VEnergyLossProcess; removed sub-cut facility for energy loss processes; clean-up of parameters classes.
  - G4VEmModel, G4VEnergyLossProcess, G4EmCalculator: optimised signature of the CorrectionsAlongStep() method; use more constant variables; minor code optimisation.
  - G4VEmProcess, G4VEnergyLossProcess: fixed computation of cross-section and range if base material approach is used.
  - G4VEmFluctuationModel: changed interface; both cut value and max energy transfer are parameters of main methods. Addressing problem report #2390.
  - G4VEnergyLossProcess, G4EmModelManager: adopted above interface change.
  - G4VEmProcess, G4VEnergyLossProcess, G4VAtomDeexcitation: migrated to the new version of G4PhysicsModelCatalog.
  - G4LossTableBuilder: base material flag may be disabled. Use updated interface to G4PhysicsVector.
  - G4EmElementSelector: change computation for corner cases.
  - G4EmParametersMessenger: correct default value for 'GeomFactor'.
  - Changed ANSTO parameters in UI interface commands.
  - Removed obsolete G4EmProcessOptions class.
  - G4LossTableBuilder: fixed debug printout.
  - G4VMscModel: improved printout.
  - G4VEnergyLossProcess: code cleanup for ions.
  - General code cleanup; removed obsolete methods and members; reorganized class members.
- Xrays
  - General code cleanup: removed commented out code; added ProcessDescription() and DumpInfo(); organized order of headers, removed and added as needed; use `constexpr` for numbers; replaced G4PhysicsOrderedFreeVector with G4PhysicsFreeVector.
  - G4Cerenkov, G4Scintillation, G4SynchrotronRadiation, G4ForwardXrayTR, G4SynchrotronRadiationInMat, G4VXTRenergyLoss: set the creator model ID for the secondaries, using the new version of G4PhysicsModelCatalog.
  - G4Cerenkov, G4Scintillation: update G4OpticalParameters when process parameters updated directly. Addresses problem report #2425.
  - G4Cerenkov: do not use obsolete methods to access G4PhysicsVector data.
  - G4Scintillation: removed deprecated optical commands.

### Error Propagation

- Code formatting.

### Event

- G4EventManager: hand over track to custom tracking manager, if registered for the particle; moved StackTracks() to be public.
- Use existing facility to find physical volume in store, rather than looping through in G4SPSPosDistribution::ConfineSourceToVolume().
- Use G4PhysicsFreeVector instead of deprecated G4PhysicsOrderedFreeVector in G4AdjointPrimaryGenerator, G4SPSAngDistribution, G4SPSEneDistribution, and G4SPSRandomGenerator.
- G4SPSEneDistribution: use more efficient access to G4PhysicsVector.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.

### Externals

- CLHEP:
  - Updated to CLHEP version 2.4.5.1.
  - Added units: `minute`, `hour`, `day`, `year` and `millielectronvolt`. Added constants: `Bohr_magneton` and `nuclear_magneton`.
  - Added new random engine RANLUX++ and related helper classes. RANLUX++ is an extension of RANLUX and uses the equivalent LCG to offer a much higher luxury level at better performance. It inherits the excellent statistical properties and passes the full BigCrush.
  - Fixed seeding in Ranlux64Engine.
  - Fixed trivial compilation warnings on gcc-11 in Random headers.
- G4tools:
  - Moved from analysis module and updated to version 5.6.0:
    - Added "Windowing" code needed for G4/vis/tools_sg.
    - Added code to write/read a column of vectors of strings for n-tuple.
    - Handling of embedded fonts.
    - Fixed compilation warnings on gcc-11.
    - See History_tools for the complete list of modifications.
- PTL:
  - Updated PTL to version v2.0.0.
  - Replaced raw pointers to tasks with shared_ptrs for memory management improvements.
  - Removed PTL custom task allocator classes.
  - Fixed warnings about TBB task scheduler init.
  - Fixed compilation warnings when C++20 Standard enabled.
  - Improved thread safety.
  - Fixed some memory issues.
  - Fix to TaskRunManager::Terminate() + `nullptr` to m_thread_pool responsible for segmentation-fault when ui/vis initialised, but not run manager.
  - Make PTL cmake options available in configuration, including: PTL_USE_SANITIZER and PTL_USE_LOCKS, but hidden from clients building Geant4; relevant Geant4 options forwarded to PTL: TBB, sanitizer, locks.
  - Use CMAKE_CXX_STANDARD in place of GEANT4_BUILD_CXXSTD in CMake configuration. Also, updated minimum CMake version requirements.
- ZLIB:
  - Removed formatting options from build.

### G3toG4

- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- Fixed compilation error in G3EleTable when C++20 is enabled.

### General Processes

- Biasing
  - G4BOptrForceCollision: migrated to the new version of G4PhysicsModelCatalog.
- Cuts
  - G4VRangeToEnergyConverter, G4RToEConvForPositron, G4RToEConvForElectron, G4RToEConvForGamma, G4RToEConvForProton: simplified the design; do not use G4PhysicsTable and G4PhysicsVector but convert range cut to production threshold directly; expected memory reduction for big detectors and some speed-up of initialisation.
  - G4PhysicsTableHelper: updated interface to Retrieve() method. Fixed minor Coverity report. Fixed Coverity warning due to index type; removed G4ThreadLocal variable; substituted old cerr with G4Exception (old printouts are kept); removed inclusion of unused headers.
  - G4MCCIndexConversionTable: changed inline functions, only one return is left instead of two.
- Management
  - Introducing classes for implementation of quantum entanglement: G4EntanglementAuxInfo, G4VEntanglementClipBoard and G4eplusAnnihilationEntanglementClipBoard. Currently, entanglement is implemented only in G4eplusAnnihilation and G4LivermorePolarizedComptonModel.
  - New class G4NoProcess, representing an empty process not assigned to any particle, and used only in G4SteppingManager::InvokeAtRestDoItProcs() for stable ions at rest, in order to avoid that radioactive decay appears as process defining their last step. Note that the method IsApplicable(), retunrs false, as this process should not be set to any particle.
- Optical
  - G4OpBoundaryProcess: fixed initialisation of some local variables. Addressing problem report #2364.
  - G4OpBoundaryProcess: renamed internal variables; make comparison to `nullptr` explicit; removed unneeded intermediate variable; refactored Davis LUT calculation. On StepTooSmall, propose velocity corresponding to material of post-step point. Addresses problem report #2438.
  - In all process classes, update G4OpticalParameters when process parameters updated directly. Addresses problem report #2425.
  - G4OpRayleigh, G4OpWLS, G4OpWLS2: use G4PhysicsFreeVector instead of deprecated G4PhysicsOrderedFreeVector.
- Solid state
  - G4Channeling, G4ChannelingOptrChangeCrossSection: migrated to the new version of G4PhysicsModelCatalog.
- Transportation
  - Enable setting of smooth curved trajectories to particle-change in G4CoupledTransportation::AlongStepDoIt(), which was commented out by mistake. Based on discussion in Geant4 Forum thread #4271.

### Geometry

- Biasing
  - Added missing include of G4Threading header for G4Mutex for self-consistency in G4ImportanceAlgorithm header.
- Management
  - Added map for faster search based on name in G4SolidStore, G4RegionStore, G4logicalVolumeStore and G4PhysicalVolumeStore. Pointers to elements are stored in the map as buckets, grouping elements with same name.
  - Use G4Allocator to dynamically allocate nodes and proxies for the voxels optimisation structure. Should help reducing memory fragmentation.
  - G4UAdapter: added operator<<() to fix clash between similar methods for G4VSolid and VecGeom UnplacedVolume.
  - Make operator<<() for G4VSolid a free function.
  - Basic clang-tidy review of code.
- Navigation
  - G4Navigator: enabled use of alternative G4VoxelNavigation class. Adds call to virtual method in ComputeStep(), LocateGlobalPointAndSetup() for voxelised volumes. Controlled by ALTERNATIVE_VOXEL_NAV flag, turned on by default. Deleted experimental obsolete method RecheckDistanceToCurrentBoundary(), also removed in G4SafetyHelper and G4PathFinder. Cleaned up ComputeSafety().
  - G4VoxelNavigation: simplify code of `check` mode tests to avoid 2nd code path. Added comments about method arguments.
  - G4NavigationLogger: soften check of step vs distance (using tolerance).
  - G4[Partial]PhantomParameterisation: renamed Get/SetNoVoxel*() accessors to Get/SetNoVoxels*() for coherence. Migrated code in G4RegularNavigation accordingly. NOTE: might imply user code migration.
- Solids (Boolean)
  - In G4UnionSolid and G4SubtractionSolid, revised GetCubicVolume() method to use cubic volume of constituent volume(s) and an intersection solid, for more accurate measurement.
- Solids (CSG)
  - G4Trap, G4Para and wrappers: added accessors to retrieve/calculate original values for alpha, theta, phi.
  - Revision of G4UTrap wrapper: list of accessors and modifiers made consistent with G4Trap; implemented check of parameters similar to G4Trap.
  - Corrected typo in G4UPara::GetXHalfLength(). Addressing problem report #2446.
  - Removed deprecated accessors in G4Sphere and G4Tubs.
- Solids (Specific)
  - Simplified implementation of CreatePolyhedron() in G4Polyhedra, G4Polycone, G4GenericPolycone and related wrappers.
  - In G4TesselatedSolid, implemented GetFacetIndex(p) and CheckStructure(). Optimised code in SetExtremeFacets(): shuffle of vertices and checking of six extreme vertices.
  - In G4Tet, added `degeneracyFlag` to the list of parameters in SetVertices(). Addressing problem report #2427.
  - G4Tet: improved calculation of bounding box. Added SetBoundingLimits()
  - Added missing accessor in G4UTet. Added CheckDegeneracy(), SetVertices() and SetBoundingLimits()
  - G4TwistedTubs: more accurate calculation of the bounding box in BoundingLimits() and GetExtent(), fixing measured performance penalty. Addressing problem report #2450.
  - G4TwistedTubs, G4VTwistedFaceted: fixed GetCubicVolume().
- Volumes
  - G4PVPlacement::CheckOverlaps(): more precise estimation of overlap size, improved check for encapsulation of volume by another volume.
  - G4ReflectionFactory: added Clean() method for clearing the internal maps on user request and removed problematic Reset() function.

### Global

- Removed deprecated classes G4LPhysicsFreeVector and G4PhysicsLnVector. Redirect G4PhysicsOrderedFreeVector to G4PhysicsFreeVector.
- G4PhysicsVector, G4PhysicsFreeVector, G4PhysicsLogVector, G4PhysicsLinearVector: major update: introduced new public access methods; removed obsolete unused methods; introduced possibility to use different Spline methods; do not fill second derivative vector if Spline not enabled; improved control on input data; reduced number of calls to min/max; attempt to optimise run time code G4PhysicsTable, improved use of the vector type.
- G4PhysicsVector, G4PhysicsTable, G4PhysicsFreeVector: removed obsolete methods SetSpline(); T_G4PhysicsFreeVector type set to be default; improved comments and printouts.
- G4PhysicsVector: optimisation in G4PhysicsVector::Interpolation(). Fix in G4PhysicsVector::GetMinEnergy(). Minor code formatting.
- G4PhysicsVectorType: added enumeration of Spline type; use namespace.
- G4PhysicsFreeVector, G4PhysicsLogVector, G4PhysicsLinearFreeVector: in each constructor added extra Boolean parameter for enabling Spline; needed for later removal of the SetSpline() method, required for re-organisation of the code using templates.
- G4PhysicsFreeVector: added to all constructors control on continuous increase energy in the energy vector. Added accessor to allow user query for use or not of Spline interpolation.
- G4PhysicsModelCatalog: new version of the catalog of physics models. Introduced a modelID (a unique integer for each physics model, with close values for similar/related physics models), besides an index (the position in a vector) and the name (string) of the model. The main difference with respect to the previous version is that the three identifiers of each physics model - modelID, index and name - must stay constant and the same for all applications, physics lists and future versions of Geant4.
- Simplified G4String interfaces and implementation with C++11/17. Removed obsolete/`std::string` synonym member functions from G4String: hash()/stlhash(), data(), replace(), index(), isNull(), first()/last(), append()/prepend() and call operators. Deprecated non-`std::string` member functions, replacing with new free functions in G4StrUtil namespace.
- G4ConvergenceTester: fixed potential thread contention likely responsible for crashes in ThreadSafe-Scorers example, observed in system testing. Some code cleanup.
- Updated G4SIUnits and G4PhysicalConstants to include new symbols (`minute, hour, day, year` and `millielectronvolt`) and new constants (`Bohr_magneton` and `nuclear_magneton`), based on CLHEP-2.4.4.2.
- G4UnitsTable: added unit definitions for Velocity and Momentum.
- G4BestUnit: print `eV` instead of `meV` for zero energy.
- G4BackTrace: move from deprecated sigignore() to signal().
- New G4Filesystem header to support transparent use of C++ filesystem whether it is in `std::` or `std::experimental` namespaces.
- G4ThreadLocalSingleton: added way to explicitly call Clear() for all TLS singletons.
- Reworked G4Backtrace to use fewer dynamic memory allocations when printing backtrace in order to avoid overflowing the signal stack.
- Modernised CMake script.
- Updated date of release for 11.0.

### Graphical Representations

- Added G4Plotter class, a kind of "high level" primitive to capture plots (tools::histo:h1d, h2d for the moment) and the style of a plotter. Style description is done by handling named lists of (parameter,value). It is sufficently generic to be usable by various implementations of a plotter. It is assumed that a plotter manages a grid of "regions" to visualize various histograms in a same representation/view/viewport. Updated G4VGraphicsScene accordingly.
- Reviewed HepPolyhedronPgon, HepPolyhedronPcon classes given by rz-contour.
- HepPolyhedron: added TriangulatePolygon() and RotateContourAroundZ(). Fixed calculation of number of faces in a polyhedron object in method RotateContourAroundZ(). In some cases, 'Nfaces' was computed incorrectly, resulting in more memory being allocated than required; this did not create problems for rendering, but used to generate warning messages in some cases.
- BooleanProcessor: redundant std::move(polyhedron) replaced with HepPolyhedron(polyhedron), it fixes complation warnings with C++20.
- Removed deprecated G4VisAttributes::Invisible.
- Added G4Colour::operator<(), useful for making a set or map based on G4colour as a key.
- G4VGraphicsScene: introduced new pure virtual function AddCompound(const G4Mesh&).
- G4VisAttributes: improved message in SetForceNumberOfCloudPoints().
- Revised visualisation models according to `visualization/modeling` module. Adapted code according to visualisation models revision.
- Removed G4Scale; `/vis/scene/add/scale` is reimplemented with G4CallBackModel.
- Add G4VMarker::operator==().
- Use G4StrUtil functions replacing deprecated G4String member functions.
- Modernised CMake script.

### Hadronic Processes

- Removed deprecated 'rpg' model.
- Merged 'models/management' module in 'management'.
- Merged 'models/util' module in 'util'.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- Cross Sections
  - G4MuNeutrinoNucleusTotXsc: new arrays for XS_eq and XS_in, now XS_tot is a sum of XS_qe and XS_in with A, Z and A-Z factors.
  - G4NeutronInelasticXS, G4NeutronElasticXS, G4NeutronCaptureXS, G4ParticleInelasticXS, GammaNuclearXS : in the method BuildPhysicsTable(), replaced loop over material-cut-couple with a direct loop over all elements; partially move initialisation of local variables to headers.
  - G4MuNeutrinoNucleusTotXsc: access and calculation of fQEratio(Z,A) = XS_qe/XS_tot.
  - Removed the following obsolete classes: G4IonsKoxCrossSection, G4IonsSihverCrossSection, G4TripathiCrossSection, G4TripathiLightCrossSection, G4IonProtonCrossSection, G4GeneralSpaceNNCrossSection, G4ProtonInelasticCrossSection G4NeutronInelasticCrossSection, G4PiNuclearCrossSection, G4CrossSectionPairGG, G4FastPathHadronicCrossSection, G4HadronCaptureDataSet, G4HadronFissionDataSet, G4HadronElasticDataSet, G4HadronInelasticDataSet, G4HadronCrossSections, G4TripathiCrossSection, G4TripathiLightCrossSection.
  - G4HadronXSDataTable, G4ComponentSAIDTotalXS: updated creation and handling of G4PhysicsVector.
  - G4UPiNuclearCrossSection, G4ComponentSAIDTotalXS: substituted use of deprecated G4LPhysicsFreeVector by G4PhysicsFreeVector.
  - G4UPiNuclearCrossSection: disabled Spline interpolation.
  - G4IsotopeList: extended list of isotopes to cover all data for neutrons, protons, and gamma.
  - G4GammaNuclearXS: new version of the code, based on IAEA/PD-2019. Improved isotope cross-section. Co-working with new data set G4PARTICLEXS-4.0.
  - G4IsotopeList: extended from Zmax=92 to Zmax=94; do not use zero values for 'amin' and 'amax' for all Z; this is needed for migration to the new dataset G4PARTICLEXS4.0.
  - G4NeutronInelasticXS, G4NeutronElasticXS, G4NeutronCaptureXS, G4ParticleInelasticXS, GammaNuclearXS: instead of check (amin[Z]==0) use the check (amin[Z]==amax[Z]).
  - G4ElNuclearSFcs: e-A cross-section according to structure function approach by corrections of CHIPS cross-sections.
  - G4CrossSectionDataSetRegistry: improved debug printout and not use CrossSectionFactory for XS.
  - Clean-up access to data.
  - Code cleanup.
- Management
  - G4HadronicProcess: made public the method GetHadronicInteraction(). This can be useful for users to access at run-time some information available from a hadronic final-state model. Removed unused private member variable; updated the call to G4Track for setting the model creator ID.
  - G4HadronInelasticProcess: added a new method to return the particle definition (useful in practice to distinguish between baryons and antibaryons, or between hadrons and ions). Removed old and unused header file corresponding to the Gheisha inelastic cross-section (that has been deleted).
  - G4HadronicProcessType: added a new enum value (fEMDissociation = 310) for EM dissociation process.
  - G4HadronicProcessStore: fixed TLS usage. Fixed loops in Clean(). Fixed memory leak at exit.
  - G4HadronicEPTestMessenger: removed deprecated commands.
  - Removed unused class G4VCrossSectionBase.
- Processes
  - Added G4HadronInelasticProcess class from hadronic/management module.
  - Renamed G4HadronCaptureProcess as G4NeutronCaptureProcess, as it is applied only for neutron projectile.
  - Removed use of deleted header file G4HadronicDeprecate.
  - G4HadronCaptureProcess: removed old and unused header file corresponding to the Gheisha capture cross-section (that has been deleted).
  - G4HadronFissionProcess: replaced Gheisha fission cross-section (that has been deleted) with G4ZeroXS (which is a zero cross-section everywhere).
  - Set creator model ID for the secondaries, using the new version of G4PhysicsModelCatalog.
  - G4HadronElasticProcess, G4NeutrinoElectronProcess, G4ElNeutrinoNucleusProcess, G4MuNeutrinoNucleusProcess: removed old and unused header file corresponding to the Gheisha elastic cross-section (that has been deleted).
  - Removed the following deprecated inelastic processes: G4AlphaInelasticProcess, G4AntiAlphaInelasticProcess G4AntiDeuteronInelasticProcess, G4DeuteronInelasticProcess, G4AntiHe3InelasticProcess, G4He3InelasticProcess, G4AntiLambdaInelasticProcess, G4LambdaInelasticProcess, G4AntiNeutronInelasticProcess, G4NeutronInelasticProcess, G4AntiOmegaMinusInelasticProcess, G4OmegaMinusInelasticProcess, G4AntiProtonInelasticProcess, G4ProtonInelasticProcess, G4AntiSigmaMinusInelasticProcess, G4SigmaMinusInelasticProcess, G4AntiSigmaPlusInelasticProcess, G4SigmaPlusInelasticProcess, G4AntiTritonInelasticProcess, G4TritonInelasticProcess, G4AntiXiMinusInelasticProcess, G4XiMinusInelasticProcess, G4AntiXiZeroInelasticProcess, G4XiZeroInelasticProcess, G4IonInelasticProcess, G4KaonMinusInelasticProcess, G4KaonPlusInelasticProcess, G4KaonZeroLInelasticProcess, G4KaonZeroSInelasticProcess, G4PionMinusInelasticProcess, G4PionPlusInelasticProcess, G4PhotoCaptureProcess, G4PhotoFissionProcess, G4PhotoNuclearProcess.
- Stopping
  - G4MuonicAtomDecay, G4HadronStoppingProcess: migrated to the new version of G4PhysicsModelCatalog.
  - G4ElementSelector, G4HadronStoppingProcess: use const pointer to G4Element.
  - Removed obsolete classes: G4AntiNeutronAnnihilationAtRest, G4AntiSigmaPlusAbsorptionFritiof, G4SigmaMinusAbsorptionBertini, G4AntiProtonAbsorptionFritiof, G4KaonMinusAbsorptionBertini, G4PiMinusAbsorptionBertini.
- Utilities
  - G4Fragment, G4KineticTrack, G4HadSecondary, G4ReactionProduct: introduced consistent naming of the Set/Get methods for the creator model ID.
  - G4DecayKineticTracks, G4KineticTrack, G4DecayStrongResonances: propagate correctly the information regarding the creator model ID.
  - G4Nucleus: rewritten method GetBiasedThermalNucleus() according to the sampling of the Velocity of the Target nucleus (SVT) algorithm. Use const pointer to G4Element
  - G4Nucleon, G4Nucleus, G4V3DNucleus, G4Fancy3DNucleus, G4Fragment: extended for hypernuclei and anti-hypernuclei.
  - Removed unused classes: G4LightMedia, G4IsoResult, G4HadronicDeprecate, G4GHEKinematicsVector, G4HadReentrentException, G4HadSignalHandler, DumpFrame.
  - G4HadronicParameters: added hyper-nuclei flag.
- Abla
  - G4AblaInterface: set the model creator ID using the new version of G4PhysicsModelCatalog.
  - G4Abla: updated for hypernuclei. Delete array variables with array delete, as suggested by Coverity.
- Abrasion
  - G4WilsonAbrasionModel: migrated to the new version of G4PhysicsModelCatalog.
- Bertini Cascade
  - Fixed TLS usage in G4CascadeChannelTables and G4CascadeParameters.
  - G4CascadeInterface: set the creator model ID for the secondaries produced by Bertini model using the new version of G4PhysicsModelCatalog.
- Binary Cascade
  - G4BinaryCascade, G4BinaryLightIonReaction: migrated to the new version of G4PhysicsModelCatalog.
  - G4GeneratorPrecompoundInterface: extended the method PropagateNuclNucl() to deal with projectile hypernuclei and anti-hypernuclei. Propagated the creator model ID information.
- De-excitation
  - G4DeexPrecoParameters, G4ExcitationHandler: migrated to the new version of G4PhysicsModelCatalog.
  - Set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
  - G4DeexPrecoParameters: fixed propagation of verbosity level between components of the de-excitation module.
  - Removed obsolete and not used model G4ParaFissionModel, this fixes also circular dependences inside the de-excitation module.
  - G4PhotonEvaporation: fixed Coverity defect warning.
- Elastic scattering
  - G4ChargeExchangeProcess: replaced Gheisha elastic cross-section (that has been deleted) with G4ComponentGGHadronNucleusXsc.
  - G4LEHadronProtonElastic, G4ChargeExchangeProcess: removed unused headers.
  - Set the creator model ID for the secondaries created, using the new version of G4PhysicsModelCatalog.
  - G4QuasiElRatios: initialize the logarithmic table 'lastLRatio', as suggested by Coverity.
- Electromagnetic Dissociation
  - G4EMDissociation: set the creator model ID for secondaries created by projectile and target diffraction, using the new version of G4PhysicsModelCatalog.
- Fission
  - G4LFission, G4FissionLibrary : set creator model ID for the secondaries, using the new version of G4PhysicsModelCatalog.
  - G4LFission: removed unused headers.
- Gamma-nuclear
  - G4LENDorBERTModel: set creator model ID for the secondaries, using the new version of G4PhysicsModelCatalog.
- im_r_matrix
  - G4XnpElasticLowE, G4XNNElasticLowE, G4XnpTotalLowE: substituted use of deprecated G4PhysicsLnVector with G4PhysicsLogVector; no functional changes.
- INCLXX
  - Added implementation of hypercluster emission.
  - G4INCLXXInterface: extended to projectile hypernuclei.
  - G4INCLNuclearPotentialIsospin: improved nuclear potential for Lambda particles.
  - G4INCLXXInterface: set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
- Lend
  - Set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
- Lepto-nuclear
  - G4NeutrinoNucleusModel: calculation of fQEratioA(Z,A,Enu) depending of QE ratios for nucleons. Added accessors for XS_qe/XS_tot(A), fQEratioA class member.
  - Bug fixed in G4NeutrinoNucleusModel, updated calls for QE ratio of muon/electron (anti-)neutrino.
  - Set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
- Particle High Precision
  - G4ParticleHPElementData, G4ParticleHPBGGNucleonInelasticXS: removed old and unused header files corresponding to Gheisha cross-sections (that have been deleted). Code cleanup.
  - G4ParticleHPManager: removed deprecated environmental variables.
  - G4ParticleHPData, G4ParticleHPJENDLHEData: replaced use of deprecated G4LPhysicsFreeVector with G4PhysicsFreeVector.
  - G4ParticleHPThermalScattering, G4ParticleHPElastic: corrected the original treatment of the temperature interpolation when computing the neutron final state, with the temperature interpolation performed stochastically now.
  - G4ParticleHPThermalScatteringNames: extended the list of materials which can have thermal data libraries.
  - Set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
  - Updated build scripts according to new dependencies. Clean-up of old directories no longer present.
- Parton-String
  - Interface extension in G4FTFModel and G4FTFParticipants to provide the following information: number of projectile spectator nucleons, number of target spectator nucleons, number of nucleon-nucleon collisions and impact parameter. In the latter case, there is also the possibility, switched off by default, to set the range from which to sample the square of the impact parameter.
  - Extended G4FTFModel for projectile hypernuclei and anti-hypernuclei.
  - G4VParticipants, G4VPartonStringModel: extended for projectile hypernuclei and anti-hypernuclei.
  - G4FTFParameters, G4QGSParticipants: improved initialization in constructors, as suggested by Coverity.
- Pre-equilibrium
  - G4PreCompoundModel, G4LowEGammaNuclearModel: migrated to the new version of G4PhysicsModelCatalog.
  - G4PreCompoundEmission, G4LowEIonFragmentation: set creator model ID for secondaries, using the new version of G4PhysicsModelCatalog.
  - G4LowEIonFragmentation: fixed minor memory leak at exit.
  - G4PreCompoundModel: removed obsolete methods; improved code format; fixed minor memory leak at exit.
  - G4PreCompound* classes: improved formats and added C++11 keywords.
  - G4LowEIonFragmentation: fixed Coverity defect warning for memory leak and code cleanup.
- QMD
  - G4QMDReaction: replaced G4IonsShenCrossSection (that has been deleted) with G4ComponentGGNuclNuclXsc. Replaced GetIsoCrossSection() with GetElementCrossSection(). Migrated to the new version of G4PhysicsModelCatalog.
  - G4QMDNucleus::CalEnergyAndAngularMomentumInCM(): fix to move constant 'hbc' outside of sqrt() in angular momentum calculation.
- Radioactive Decay
  - G4RadioactiveDecay, G4RadioactiveDecayMessenger: introduced a new parameter for analogue mode to kill very long radioactive decays at rest of nuclides happening later than this threshold parameter. Its default value (10^27 ns) corresponds to more than twice the age of the universe. The value of the threshold can be changed via a new UI command, e.g. to set it to 1000 years: `/process/had/rdm/thresholdForVeryLongDecayTime 3.1536e+10 second`. This kind of cut has been introduced in order to avoid to account energy depositions happening after many billions of years in ordinary materials used in calorimetry, in particular Tungsten and Lead - via their natural unstable, but very long lived, isotopes, such as W183, W180 and Pb204. Note that the cut is not on the average, mean lifetime, but on the actual sampled global decay time.
  - G4RadioactiveDecay: updated printout of parameters according to recent modifications in atomic de-excitation module.
  - Use existing facility to find logical volume in store, rather than looping through in G4RadioactiveDecayBase::Select/DeselectAVolume().
  - Migrated to the new approach of creator model ID, using the new version of G4PhysicsModelCatalog.
  - Improved branching ratio consistency in radioactive decays, by replacing hardwired radioactive-decay-mode numbers with corresponding enum values. Based on Github PR #26.
  - Use proper enum interface for G4String::strip().
  - Removed obsolete classes G4RadioactiveDecayBase and G4RadioactiveDecayBaseMessenger.
  - Removed deprecated UI commands in messengers.
  - Updated build scripts and header includes.
- Theo_High_Energy
  - G4TheoFSGenerator: added accessors for the corresponding modifier methods already existing. This can be useful for users to access at run-time some information available from a hadronic final-state model.
  - Set creator model ID for the secondaries, using the new version of G4PhysicsModelCatalog.

### Intercoms

- G4UImanager: set `LastCommandOutputTreated=false` only for master thread. Avoids inadvertent "highlighting" in G4UIQt on worker threads. Added access methods to individual UI command.
- G4UIparameter: in CandidateCheck(), when candidate not found, print list of candidates.
- G4UIcommand: added command-type identifier. Added option to sort command/directory names in alphabetic order.
- G4UIcommandTree, G4UIdirectory, G4GenericMessenger: improved output HTML file layout.
- Fixed leak in G4ProfilerMessenger.
- G4GenericMessenger: added G4ThreeVector type without unit to function DeclareProperty(). Removed unnecessary duplication of G4UIdirectory objects.
- G4UIcontrolMessenger: protected some control commands not to be broadcasted to worker threads.
- Use `std::string` member functions from G4String in place of synonyms. Use new `std::string` compliant G4String interfaces. Use G4StrUtil functions replacing deprecated G4String member functions.
- Modernised CMake script.

### Interfaces

- Modified G4UIExecutive::SelectSessionByFile() to ensure that in Windows the Win32 OpenGL driver is selected as the second choice by default. Based on GitHub PR #20.
- Extended G4UIWin32 driver with new features, based on contribution proposed in GitHub PR #23.
- Added verbose setting in G4UIExecutive. Addressing problem report #2402.
- Fixed HTML links in Qt UI Start page.
- G4UIQt: deal properly with creation and deletion of viewer properties. Added "exit" icon and extension selection. Fixed "Viewer Properties" window opened at Startup; "viewer" window must be constructed with setVisible(false).
- G4InteractorMessenger: allow use of exit icon by user.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- Use proper enum interface for G4String::strip() and don't discard its return value.
- Added context for VtkQt visualisation driver.
- Retired G4UI/G4INTY_... preprocessor symbols in toolkit build, only required by obsolete GNUmake system.
- Removed obsolete Wt code from source and use in G4UIexecutive.
- Removed no longer supported GAG/Gain UI classes and settings.
- Fixed compilation warnings when C++20 Standard enabled.

### Materials

- G4Material: revised and updated G4Exceptions, now providing complete information and more precise diagnostics.
- G4MaterialPropertiesTable: removed deprecated optical material properties. Recalculate GROUPVEL if RINDEX is modified. Addressing problem report #2313.
- In G4MaterialPropertiesTable, added new AddProperty() method to allow use of predefined optical material properties. Added `spline` argument to method, which creates G4MaterialPropertyVector. Use `std::vector` for material properties and material const properties, rather than `std::map`. Use Boolean flag with material const property to indicate whether it is defined; renaming of variables: first letter lower case, class variables start with `f`; removed iterators to material property vectors (use C++11 iteration). Fix AddConstProperty() with new key; fix RemoveConstProperty; make exception codes unique. Return nullptr when GetProperty() called for non-existent property; fixed error in GetMatConstPropNames(). Return const refs to vectors for material[const]props and names. Renamed Get[Const]PropertyMap() to Get[Const]Properties(). Fixed error with ConstPropertyExists(). Throw FatalException if asked for index of non-existent property (addressing Coverity defect).
- G4ExtDEDXTable, G4IonStoppingData: corrected initialisation of spline flag.
- G4NistMaterialBuilder: removed unused argument `isotopes` from all methods where NIST materials are built.
- G4NistManager: adopt modifications in method signatures of G4NistMaterialBuilder but keep own method signatures unchanged.
- New class G4OpticalMaterialProperties, a store for optical material properties.
- G4MaterialPropertiesTable: added 'createNewKey' to AddProperty(); merged .icc into .cc; removed deprecated methods; applied clang-format.
- G4MaterialPropertyVector: use G4PhysicsFreeVector instead of obsolete G4PhysicsOrderedFreeVector.
- G4IonStoppingData, G4ICRU90StoppingData, G4ExtDEDXTable, G4VIonDEDXTable: substituted G4LPhysicsFreeVector by G4PhysicsFreeVector.
- G4Material, G4Element, G4Isotope, G4IonisParamElm, G4IonisParamMat, G4NistMaterialBuilder, G4NistMessenger, G4SandiaTable: minor clean-up.
- G4ElementVector: use const pointer to G4Element. Define operator<<(); take const references to avoid needless copy construction.
- G4ElementData: reduced length of internal arrays from 108 to 99, max number 99 is used by G4LivermorePhotoElectricModel, hadronic models use 93. Use G4int in method signature instead of size_t; improved initialisation. Provide more safe destruction at the end of run.
- G4Material: fixed Coverity report on non-initialized arrays; use const pointers to G4Elements where needed; added warnings if there is a mixture of definition of elements by number of atoms and mass fraction; reduced code duplication and reduced number of new/delete for the case when materials are added to a material.
- G4ExtendedMaterial: removed useless dependence on G4PhysicsModelCatalog, and improved comment.
- G4DensityEffectData: minor clean-up.
- Use `std::string` member functions from G4String in place of synonyms.
- Modernised CMake script.

### Parameterisations

- GFLASH:
  - Use G4StrUtil functions replacing deprecated G4String member functions.

### Particles

- Introduced six light hypernuclei and their corresponding antiparticles: G4HyperTriton, G4AntiHyperTriton, G4HyperAlpha, G4AntiHyperAlpha, G4HyperH4, G4AntiHyperH4, G4DoubleHyperH4, G4AntiDoubleHyperH4, G4HyperHe5, G4AntiHyperHe5, G4DoubleHyperDoubleNeutron, G4AntiDoubleHyperDoubleNeutron. The following simplifying assumptions have been made: (a) No hyper-deuteron, no hyper-He3; (b) the masses of these hyperons have been computed using the existing method G4HyperNucleiProperties::GetNuclearMass(); (c) the lifetimes are all assumed to be the same as the Lambda's lifetime; (d) the decays are obtained from the two decays of the (anti-)Lambda (with the same branching ratios as for a free Lambda), assuming, whenever possible, that 50% of the emitted (anti-)nucleon will be captured by the (anti-)nucleus where the decay of the (anti-)Lambda occurs. In the case of double-hyperon, only one of the two Lambdas is assumed to decay.
- G4IonConstructor: added hyper-nuclei.
- Added a few methods in G4ParticleDefinition, useful for dealing with hypernuclei and anti-hypernuclei.
- Extended the max number of decay secondaries, from 4 to 5, in the classes G4VDecayChannel and G4PhaseSpaceDecayChannel, needed for a decay channel of G4DoubleHyperDoubleNeutron.
- Store custom tracking manager per particle definition.
- Fixed retrieval of selected particle in G4ParticlePropertyMessenger, which was failing.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- G4ParticleTable: fixed case for potential null pointer dereferencing in FindParticle(). Based on GitHub PR #30.
- Fixed compilation error in G4IonTable occurring if C++20 enabled.
- Fixed shadowing compilation warning in G4Triton.

### Persistency

- Use G4StrUtil functions replacing deprecated G4String member functions.
- ASCII:
  - Added support for G4MultiUnion and G4ScaledSolid. Based on GitHub PR #28.
  - G4tgbVolume: corrected missing conversion degree-radian for Polycone.
  - G4tgbMaterialSimple,G4tgrMaterial: changed STP_Temperature to NTP_Temperature to be consistent with NIST materials.
  - G4tgbGeometryDumper: fixed access to G4Elements according to changes done in materials.
- GDML:
  - G4GDMLParser: scan for all possible logical volumes with same name in ImportRegions() and set them as root logical volumes. Issue notification warning in case more than one logical volume with same name is found, to be set a root logical volume for a region.
  - G4GDMLRead: added missing update to internal maps for solids and volumes stores, after stripping of names execution. Addressing problem report #2403.
  - G4GDMLWriteMaterials, G4GDMLWriteSolids: G4MaterialProperties table now returns references to vectors, rather than maps that had to be allocated on the heap. Adjust code to iterate over the vectors.
  - G4GDMLWriteMaterials: use G4PhysicsFreeVector instead of deprecated G4PhysicsOrderedFreeVector.
  - G4GDMLReadMaterials, G4GDMLReadSolids: added parameter `createNewKey=true` to call to G4Material[Const]PropertiesTable::AddProperty().

### Physics lists

- Removed dependencies on `hadronic/model/util` and `hadronic/model/management` modules now retired.
- Builders:
  - Replaced G4HadronCaptureProcess with G4NeutronCaptureProcess and G4HadronFissionProcess with G4NeutronFissionProcess in builders.
  - Replaced particle-specific hadronic inelastic processes (that have been deleted) with G4HadronInelasticProcess.
  - G4PrecoNeutronBuilder, G4PrecoProtonBuilder, G4INCLXXNeutronBuilder, G4QGSBinaryKaonBuilder: replaced obsoleted cross-sections (that have been deleted) with better ones.
  - G4BinaryDeuteronBuilder, G4BinaryTritonBuilder, G4BinaryHe3Builder, G4BinaryAlphaBuilder: removed unused header files.
  - G4QGSPNeutronBuilder: use G4NeutronInelasticXS cross-section.
  - G4HadronicBuilder: properly initialise the vector mode, as suggested by Coverity.
- Constructors:
  - decay
    - G4RadioactiveDecayPhysics: use SetAuger() method instead of the obsolete SetAugerCascade().
  - electromagnetic:
    - Updated all standard EM physics lists: removed local member `verbose` and use uniform approach for verbosity via G4EmParameters; instantiate NIEL process only if parameter MaxNIELEnergy is above zero; include gamma linear polarization model to Opt0, Opt3, Opt4, SS, and Livermore physics constructors if the parameter EnablePolarisation is "true"; G4EmLivermorePolarizedPhysics fully inheriting from G4EmLivermorePhysics.
    - G4GammaGeneralProcess: updated interface in the Retrieve() method. Use base material approach.
    - G4EmDNAPhysics: updated configuration of standard physics for gamma and positrons according to Opt3; updated particle list by addition of G4Alpha; simplified ConstructProcess() method using G4PhysicsListHelper.
    - Updated G4EmLowEPPhysics physics model configuration See https://arxiv.org/abs/2102.02721 for details.
    - G4GammaGeneralProcess: exclude gamma-nuclear from the 2nd energy area, because cross-section is zero; in the 4th energy interval include in the vector value of 1 - p instead of p, where p is the cumulative probability of a sub-process. Make some methods/fields visible for derived classes.
    - G4EmStandardPhysicsWVI: making this experimantal configuration compatible for CPU performance with Opt3 (it was similar to SS). Use similar options as in Opt3, for ions use G4LinhardSorensenIonModel.
    - G4EmModelActivator: updated according to the current Opt3 and Opt4 configurations.
    - G4EmDNAChemistry, _option1, _option2, _option3 added dissociation channel for electron-hole recombination.
    - G4EmDNAChemistry_option3: changed pre-chemical model.
    - DNA PhysicsLists: use SeEmModel() with correct signature.
    - G4OpticalPhysicsList: removed deprecated optical commands.
    - G4EmLivermorePolarizedPhysics: removed unused header.
    - G4EmLivermorePhysics: use G4LivermorePolarizedComptonModel if polarisation is enabled.
    - Removed obsolete G4EmLEPTSPhysics, and code cleanup in G4EmDNAPhysics and G4EmDNAPhysics_stationary.
    - G4EmLivermorePhysics, G4EmPenelopePhysics_option1, G4EmStandardPhysics_option3, G4EmStandardPhysics_option4, G4EmLowEPhysics, G4EmStandardPhysicsSS: instantiate G4ePairProduction process after ionisation and bremsstrahlung; does not change physics but helps to have clearer debug printouts.
    - G4EmBuilder: use more optimal order of instantiation of processes; not affecting any result but useful for debugging. Added hyper-nuclei EM physics; in all DNA physics-lists, use SetAuger() instead of SetAugerCascade().
    - G4OpticalPhysics: applied clang-format style guidelines.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics, G4BertiniElectroNuclearBuilder, G4LENDBertiniGammaElectroNuclearBuilder: replaced G4PhotoNuclearProcess (now deleted) with G4HadronInelasticProcess.
    - G4EmExtraPhysics: added option for positron annihilation to tau pair.
    - Enable updated G4GammaNuclearXS by default in G4EmExtraPhysics for more detailed tests.
  - hadron_elastic:
    - G4HadronDElasticPhysics, G4HadronHElasticPhysics: use inheritance from G4HadronElasticPhysics; use G4HadProcesses, G4PhysListUtil and G4HadParticles; implement cross-section factor.
    - G4HadronHElasticPhysics: fixed problem of fully overlapping energy transition between G4HadronElastic and G4ChipsElasticModel, using now G4ChipsElasticModel only for Hydrogen element above `10 MeV`.
    - G4ChargeExchangePhysics: set explicitly the elastic cross-sections according to the hadron type, given that the universal Gheisha elastic cross-section has been now deleted.
    - In all constructors, use verbosity level from G4HadronicParameters.
  - hadron_inelastic:
    - In all constructors: printouts are controlled by verbosity level of G4HadronicParameters class; 'verboseLevel' member in base class is not used; G4HadronicParameters singleton is initialized in all class constructors; if the verbosity level is defined in class constructor, it is propagated to G4HadronicParameters (user may change this level using UI command before physics is initialized); check versus nullptr is added in several places.
    - Removed unused header files, and replaced when needed G4HadronCaptureProcess with G4NeutronCaptureProcess.
- Lists:
  - Replaced particle-specific hadronic inelastic processes (that have been deleted) with G4HadronInelasticProcess in LBE. Renamed G4HadronCaptureProcess as G4NeutronCaptureProcess.
  - In all physics-lists, protected banners by verbosity level.
  - G4PhysListFactory: added verbosity level to constructor and propagated to constructed lists.
  - Mirror changes to G4PhysListFactory constructor signature (taking a default verbosity argument) in the G4PhysListFactoryAlt constructor.
  - Use G4StrUtil functions replacing deprecated G4String member functions.
- Util:
  - G4HadParticles: added hyper-nuclei.

### Readout

- Use `std::string` member functions from G4String in place of synonyms.

### Run

- Optimised access to volumes and regions stores.
- Minor C++11 review in use of iterators, initialisers, etc...
- Removed obsolete ResetCuts() method in G4VUserPhysicsList.
- Added new Ranlux++ engine to the list of supported random engines in G4UserWorkerThreadInitialization. Requires CLHEP-2.4.5.1.
- Added new G4DNAStaticMoleculeReactionProcess in PhysicsListHelper for DNA processes.
- Removed call to physicsList->TerminateWorker() in G4WorkerRunManager as this appears to cause errors at termination.
- G4VUserPhysicsList: invoke new static initialization of G4PhysicsModelCatalog in Construct(). Use custom tracking manager if registered.
- G4PhysicsListHelper: replaced hardwired numerical process types and sub-types with corresponding enum values.
- G4VPhysicsConstructor: fixed initialisation of hadronic parameters avoiding uncontrolled override of verbosityLevel.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- General code cleanup and formatting.

### Tasking

- Updated to PTL v2.0.0 with shared_ptr usage. Included some minor API changes to direct async usage.
- Fixes to TBB task-group usage.
- Fix for G4FORCENUMBEROFTHREADS flag lookup.
- G4RunManagerFactory: set default run manager type to be Tasking.
- Added new Ranlux++ engine to the list of supported random engines in G4UserTaskThreadInitialization. Requires CLHEP-2.4.5.1.
- G4TaskRunManager: check for valid threadPool pointer in method RequestWorkersProcessCommandsStack() to fix occasional segmentation fault at exit.

### Track & Tracking

- Introducing G4VTrackingManager, an interface for custom tracking managers specialized for one or a small number of particle types.
- G4SteppingManager: added a pointer to a G4NoProcess instance, and used it in InvokeAtRestDoItProcs() to flag a stable ion at rest. This avoids the otherwise confusing information that radioactive decay is the process defining the last step of a stable ion at rest.
- Correction to G4Track::operator=() to copy also touchable-handles. This fixes a crash originated when running importance sampling in the G4EventManager when the track got assigned the origin touchable handler from its own touchable handle; the touchable handler was sometimes not set.
- G4Track: migrated to the new version of G4PhysicsModelCatalog. Get material property using index rather than string.
- G4Step: avoid accessing G4Track data via long pointer chains.
- Adjusted printout format in DumpInfo() for G4VParticleChange and G4ParticleChange.
- Introducing G4SteppingVerboseWithUnits, an alternative to G4SteppingVerbose with printout of proper units and extended features. Added explicit virtual keyword for virtual methods and destructor in G4SteppingVerbose.
- G4SteppingVerbose: fixed bug that wrongly put the `Forced` label in the print-out information of non-forced processes, and vice-versa, omitting it for real forced processes. Issue which was causing confusing and misleading print-out.
- G4ParticleChangeForMSC, G4ParticleChangeForTransport: disable `debugFlag` which was left enabled by mistake.
- G4RichTrajectory: migrated to the new version of G4PhysicsModelCatalog.
- Export protected static symbols in G4VSteppingVerbose for DLL builds on Windows.
- G4SteppingVerbose, G4SteppingManager: added a switch to instantiate G4SteppingVerboseWithUnits.
- Simplified way of defining a user-specific stepping verbose, that is now common to all sequential, MT and tasking modes.
- Avoid unnecessary indirections when checking for regional stepping action by reusing the value of current volume in stepping manager.
- Use existing facility to find logical volume in store, rather than looping through in G4AdjointCrossSurfChecker.
- Use G4StrUtil functions replacing deprecated G4String member functions.

### Visualization

- General
  - Revised vis models. See notes for "modeling" above for more details. Consequent changes: AddPrimitive(const G4Scale&) has been removed from all scene handlers.
  - Introduced a Vtk driver.
  - Introduced ToolsSG drivers.
  - Introduced in-app plotting; available only with ToolsSG drivers at present.
  - Introduced "special mesh rendering" for G4VNestedParameterisation for fast rendering of meshes typically used for medical phantoms.
  - Use G4StrUtil functions replacing deprecated G4String member functions.
  - Retired G4VIS_*, G4UI/G4INTY_* preprocessor symbols in toolkit build, only required by obsolete GNUmake system.
  - Removed unused XXX module.
- Management
  - Added UI commands for "Special Mesh Rendering": `/vis/viewer/set/specialMeshRendering` and `/vis/viewer/set/specialMeshVolumes` Only available with OpenGL drivers at present.
  - Implemented a default AddCompound(const G4Mesh&) method: just draws the "container" volume and prints a G4Exception with guidance.
  - Added AddPrimitive(const G4Plotter&) and `/vis/plotter/` UI command.
  - Draw(const G4Scale&) has been removed from G4VisManager; `/vis/scene/add/scale` reimplemented with G4CallBackModel; all commands using G4CallBackModel follow interface change.
  - Added new data members to view parameters.
  - Exploit C++17 to parse saved files in `/vis/viewer/interpolate`.
  - Introducing `/vis/scene/add/localAxes` and `/vis/touchable/localAxes` UI commands.
  - G4Scene: removed misleading warning message. Allow multiple models for the same name, but different parameters, to be added without warning.
  - G4VSceneHandler: use C++17 `[[fallthrough]]` instead in switch statement. Added code for drawing the extents of models in a scene for debugging.
  - Removed deprecated G4VisManager::SetUserAction(). Use RegisterRunDurationUserVisAction or similar instead. These functions represent quite an advanced use of visualisation and are rarely used.
  - Sort `/vis/*` UI commands in alphabetical order.
  - `/vis/set/extentForField`, `/vis/scene/add/electricField` and `magneticField`: improved guidance to take note of change to G4VFieldModel, namely that the number of data points is now calculated on the basis of the extent, which can be set as above.
  - Interrupt macro (`vis.mac`) if graphics system invalid/unavailable. Issues "Batch is interrupted" and avoids long litany of further errors.
  - G4VViewer: trap request to set touchable of a physical volume no longer in the physical volume store and issue message.
  - `/vis/scene/add/volume` (and `/vis/drawVolume`): exploit G4PhysicalVolumesSearchScene to streamline geometry tree searches. Avoid calculating extent of a temporary physical volume when not necessary. The above does introduce a change of behaviour for the case that a user names the volume(s) requested, e.g., `/vis/drawVolume Shape1`. The user will not normally see any difference - but it does avoid extravagant computation in some circumstances.
  - G4VVisCommand, G4VisCommandsSceneHandler and G4VisCommandsViewer: preserve view parameters of any existing viewer and use them in the creation of a new viewer. So, if the user requests a new viewer of the same or a new graphics system, the upcoming view will inherit the view parameters of the previously existing viewer. The idea is that it makes the response a UI command `/vis/viewer/open` (or `/vis/viewer/create`) more natural. The first `/vis/open` is not affected.
  - In G4VisCommansCompound, with `/vis/drawTree`, invoke `/vis/viewer/reset` to ensure culling is off, so that all volumes are printed.
  - G4VisCommandsCompound, G4VisCommandOpen, G4VisCommandSceneHandlerCreate: improved reporting of unrecognised graphics system.
  - G4VisCommandsTouchable: modified according to changes in G4PhysicalVolumeModel.
  - G4VisCommandsSet, G4VisCommandsTouchable and G4VisCommandsViewer: added comment of explanation where using G4PhysicalVolumesSearchScene.
  - Use existing facility to find logical volume in store, rather than looping through in G4VisCommandSceneAddLogicalVolume::SetNewValue().
  - G4VisCommands: replaced `/vis/ogl/printEPS` with `/vis/ogl/export` in guidance.
  - G4VisCommandsScene: implemented `/vis/scene/removeModel`.
  - G4ViewParameters: added Special Mesh Rendering parameters to `/vis/viewer/save`.
  - G4VVisCommandGeometrySet: recalculate extent of any physical volume model in run duration lists after any `/vis/geometry` command (the scene's extent might have been changed by the command).
  - Introducing GetColour(const G4Visible&).
  - Protect pointers in G4VisManager::GeometryHasChanged().
  - Fixed Windows static issue in G4VVisCommand.
  - G4VisManager: fixed cout destination for UI manager during deletion.
  - G4VisExecutive: removed obsolete VRML1 and network VRML2 drivers Removed obsolete network FukuiRenderer driver. Removed deprecated Wt driver.
  - G4ViewParameters: fixed Coverity warning.
  - Improved warning messages.
- Modeling:
  - Revised vis models: over time, models have sprouted some inconsistencies. This is an attempt to rationalise them. The most significant model, used in all applications to draw the detector, is G4PhysicaVolumeModel. To handle all the options, G4PhysicalVolumeModel takes care of the transformation of any primitives that it generates. It ignores the transformation available in the base class, G4VModel. This revision brings all models in line with this policy. At the same time, we remove G4Scale and G4ScaleModel. G4Scale is an anomaly. It is not a "primitive" (obviously), but somehow, from the long distant past, it was implemented as though it was. These classes have been removed and `/vis/scene/add/scale` reimplemented with G4CallBackModel.
  - Introducing new primitive G4Plotter.
  - G4PhysicalVolumeModel: make CalculateExtent() a public function. Fixed bug in calculation of extent. In Validate(), avoid crash if volume no longer in physical volume store; improved warning message.
  - Introducing G4Mesh, a light class that encapsulates and validates a nested parameterisation, called a "mesh". If a valid mesh cannot be created out of a G4VPhysicalVolume, it will have a type "invalid". The overhead of an invalid attempt is expected to be small, all the same it should only be invoked if the user specifies mesh rendering.
  - G4ModelingParameters: added new data members and access functions.
  - G4PhysicalVolumeModel: added code for special mesh rendering, under control of user flag. If flag is set by the above commands, and if a volume is a "mesh" (a container for a nested parameterisation), invoke new method AddCompound(const G4Mesh&).
  - G4PhysicalVolumeModel: moved fFullPVPath.push_back earlier, addressing a bug in visualisation of touchables.
  - Improved G4VModel; make SetTransform() virtual.
  - G4ArrowModel, G4AxesModel and G4TextModel: implement SetTransform().
  - Take care to apply to original model. For example, if SetTransform() is called more than once it must apply to the original.
  - G4PhysicalVolumeModel: for the resultant of clipping, set the visualisation attributes of the original.
  - G4VFieldModel: Change concept of choice of data points: this model simply checked that a data point was within the extent. Now it uses the extent to determine the datapoint spacing. Note: if `fExtentForField` is null, the used extent is that of the current scene; otherwise it uses that supplied by the user.
  - G4PhysicalVolumesSearchScene: allow user to limit the depth of descent during a geometry tree search.
  - G4PhysicalVolumeModel: if opacity (alpha) == 0 (completely transparent), treat same as pVisAttribs->IsVisible(). G4PhysicalVolumeModel: simplified validation.
  - As a result of Coverity warnings, improved G4PhysicalVolumeModel: clean up in case of found G4Mesh; hold current transform as object, not as a pointer.
  - G4TouchablePropertiesScene: modified according to changes in G4PhysicalVolumeModel.
  - Added G4Exception in default implementation of G4PseudoScene::ProcessVolume().
- FukuiRenderer
  - Removed obsolete network FukuiRenderer driver.
- gMocren
  - Use updated renamed method GetNoVoxels() in G4PhantomParameterisation instead of GetNoVoxel(), now removed.
- HepRep
  - Fixed compilation error in G4HepRepSceneHandler when C++20 is enabled.
  - Removed obsolete HepRep(WIRED) driver and associated files.
- OpenGL
  - G4OpenGLImmediateQtViewer and G4OpenGLStoredQtViewer: set jpg as default export format for Qt viewers, for use with `/vis/ogl/export`; jpg is only available for Qt viewers, pdf is the default for other OpenGL viewers.
  - Make better use of G4VSceneHandler::AddPrimitive().
  - Fix in G4OpenGLViewer for C++20 warnings.
  - Fixed text alignment issue with a fudge factor in G4OpenGLQtViewer::DrawText().
  - Fix in G4OpenGLViewer for C++20 warnings.
  - Specialise fudge factor for __APPLE__. It seems only Mac has this problem. Maybe it's to do with the retina display. Maybe Qt keeps it's own pixel size.
  - G4OpenGLViewerMessenger: removed `/vis/ogl/printEPS` command, now covered by the more versatile `/vis/ogl/export`. Rationalised image exporting.
  - G4OpenGLSceneHandler: use C++17 `[[fallthrough]]` in switch statements.
  - G4OpenGLViewer: subsume the code in printEPS into exportImage.
  - G4OpenGLXmViewer::print_callback: call exportImage instead of printEPS.
  - G4OpenGLStoredSceneHandler, G4OpenGLViewerMessenger: increase the default display list limit to 10 million. The default OpenGL display list limit was 50,000, an archaic value from the days when memory was much more limited than is typical today. The number can be changed with `/vis/ogl/displayListLimit`, either to increase it further or lower it, subject to a lower limit of 10000.
  - In FinishView() and ShowView() of X/Xm viewers, comment out glXWaitGL(). Wait for effects of all previous OpenGL commands to be propagated before progressing.
  - G4OpenGLSceneHandler: disable backface culling.
  - G4OpenGLStoredViewer and G4OpenGLStoredQtViewer: suppress kernel visit (no longer needed) for cutaway drawing. Note 1: Section and Cutaway can reveal back-facing faces. If backface culling is implemented, the image can look strange because the back-facing faces are not there. As described above, we have disabled (commented out) backface culling. It seems not to affect performance. Note 2: In G4OpenGLStored(Qt)Viewer::CompareForKernelVisit() we decide if a "kernel visit" (which involves a reconstruction of the graphical database from the kernel) is required on a change of view parameters. Simple rotating and zooming does not require a kernel visit, but more sophisticated parameters may. In G4OpenGLSceneHandler we implement cutaways using OpenGL cut planes, so now we have disabled backface culling, we do NOT need to visit the kernel. This is the change that makes a huge speed up when a user requests cutaways.
  - G4OpenGLQtViewer: use 'modelShortName' instead of 'modelDescription'.
  - Fixed compilation error in G4OpenGLXmConvenienceRoutines when C++20 is enabled.
  - Implemented WindowProc() function in G4OpenGLWin32Viewer for the Win32 OpenGL driver (function that was commented out). It is now possible to change the Zoom and the orientation using the mouse (like in the Qt driver). Based on contribution in GitHub PR #20.
  - Implemented AddCompound(const G4Mesh&) method: turns nested parameterisations into polymarkers of dots - much improved speed.
  - Enable extended WIN32 window in G4OpenGLWin32Viewer. Based on contribution in GitHub PR #23.
  - G4OpenGLQtViewer::addNonPVSceneTreeElement(): special case for markers, use Info() if non-empty name appearing in Qt's scene tree. This allows the user to design markers, e.g., a list of points, and give them a name that relates to the providence of the points, e.g., a particular material or geometry component.
  - Removed deprecated Wt driver.
  - G4OpenGLStoredQtViewer: moved `fViewId<0` check to top of constructor to pick up errors in base class construction.
  - Removed deprecated `/vis/ogl/set/` commands.
  - All commands connected with a time window. Use equivalent `/vis/viewer/set/timeWindow` commands.
  - `/vis/ogl/set/eventsDrawInterval [N]` is replaced by `/vis/ogl/flushAt NthPrimitive [N]`.
  - Fix in G4OpenGLStoredXmViewer destructor.
  - G4OpenGLWin32Viewer: fixed occasional crash with G4UIWin32 when creating viewer from UI command: avoid indirect call to DrawView() while still within CreateMainWindow().
  - Comment out makeCurrent() in G4OpenGLImmediate/StoredQtViewer to prevent red-button crash.
- OpenInventor
  - G4OpenInventorQtExaminerViewer: for tabbed viewer in UIQt, added a Detach button to move the viewer to its own dedicated and resizable window on the desktop. Added event handler for mouse wheel to fix the non-intuitive behavior. Mouse-wheel-forward now zooms/dollys in. Added viewer button to enable the "axis cross" (3d axes) feedback mechanism.
  - G4OpenInventorViewer: upgraded the group node sensor to process camera movements, thus eliminating the need for the camera sensor. The node sensor receives all camera notifications and is immune to changes in the camera type.
  - Force kernel visit if special mesh rendering parameters change.
  - Code cleanup of OpenInventorQt classes.
- Qt3D
  - Improve overall protection of debug output with debug flags. Moved debug code to G4Qt3DUtils header.
  - Force kernel visit if special mesh rendering parameters change.
  - Include some trial code (commented out) for text output.
  - Fixed problem of drawing from the vis sub-thread. Added G4Qt3DViewer::MovingToVisSubThread() and MovingToMasterThread().
  - G4Qt3DSceneHandler: raise G4Exception if no available node. Introduced AddCompound(const G4Mesh&) method.
  - G4Qt3DViewer: protect against illegal call to show(); it may only be called from the master thread.
  - Revert to black background.
- Raytracer
  - Make RayTracerX viewers "auto refresh". This means the ray tracer will start tracing immediately on opening (`/vis/open RayTracerX`) and on any change of view parameters. Only affecting RayTracerX; plain RayTracer is not affected. It is possible to switch this feature off with `/vis/viewer/set/auto-refresh false`.
  - Removed instantiation of G4The(MT)RayTracer from G4RayTracer. G4RayTracer is/should be a "pure factory". Its job is to instantiate a scene handler or viewer on request. G4The(MT)RayTracer should/need only be instantiated when the viewer is instantiated.
  - Make better use of G4VSceneHandler::AddPrimitive().
- ToolsSG
  - Introducing ToolsSG (TSG) drivers based on externals/g4tools. Supports in-app plotting.
  - Providing four new (mutually exclusive) vis drivers: TOOLSSG_X11_GLES, TOOLSSG_WINDOWS_GLES, TOOLSSG_XT_GLES and TOOLSSG_QT_GLE.
- Tree
  - Updated according to changes in G4PhysicalVolumeModel.
  - Make better use of G4VSceneHandler::AddPrimitive().
- VRML
  - Removed obsolete VRML1 and network VRML2 drivers.
  - VRML*FILE drivers: introduced environment variables G4VRMLFILE_HEADER and G4VRMLFILE_FILE_NAME to allow the user to change the defaults. Also improve messaging to inform the user of this possibility.
- Vtk
  - New VtkQt and VtkNative visualisation drivers.
- Externals
  - Migrated gl2ps to version 1.4.2. Allow use of non-APPLE OpenGL on APPLE. To use this, build with macro GL2PS_USE_GL_GL_H.
  - Fixed issues with GL when building X11 and Qt. GL libs should be included only once.

### Environments

- G4Py:
  - Use exact version of Python for boost.python module. Based on GitHub PR #31.
  - Export binding for G4ElementVector, according to updates to G4ElementTable.
  - Removed obsolete VRML1 driver settings.
  - Removed setup for obsolete HepRep(WIRED) driver.
  - In TestEm0, use default EM physics in place of obsolete G4EmProcessOptions.
- zmq:
  - Use G4StrUtil functions replacing deprecated G4String member functions.
- Removed obsolete MOMO module.

### Data sets

- New low-energy data set version, G4EMLOW-8.0:
  - Removed tabs in option4 cross-section files.
  - Added new cross sections for electron transportation in gold within Geant4-DNA.
  - Added directories `Elastic`, `Inelastic` and `Structure` for microelec models.
  - Fixed problem in file sigmadiff_cumulated_ionisation_e_RBEBV_Z79.dat.
  - Added ANSTO atomic de-excitation data.
  - Added updated epics2017 data.
  - Removed some unused data.
- New data files for evaluated cross-sections G4PARTICLEXS-4.0:
  - Extended data for all isotopes for neutron, proton and light ion cross-sections. New dataset for gamma incident based on IAEA/PD-2019 both for elements and isotopes.
- New optional data set version for incident protons, G4TENDL-1.4:
  - New version based mainly on TENDL-2019 (previous one was from TENDL-2014).
  - Isotopes not coming from TENDL-2019:
    - Files in ENDF/B-VIII.0 (check the complete list in the README files of each subdirectory: Proton, Deuteron ...).
    - The 5 isotopes in the JENDL/DEU-2020 data library, for incident deuterons on Li-6, Li-7, Be-9, C-12 and C-13.
    - p+C-13, which is based on TENDL-2014, because ENDF/B-VII.1 proton file (adopted by TENDL-2019) only provides radiative capture final state.
  - File corresponding to p+Be9, coming from ENDF/B-VIII.0 has been modified to avoid case of G4Exception in Geant4.
  - Update README files in Proton, Deuteron, Triton, He3 and Alpha directories.

### Examples

- Updated reference outputs, macros, READMEs and scripts.
- Fixes for Doxygen documentation and coding guidelines.
- Replaced deprecated G4VisAttributes::Invisible by G4VisAttributes::GetInvisible().
- Migration to new G4AnalysisManager.hh header and define the default output file type for analysis.
- Use `std::string` member functions from G4String in place of synonyms. Use G4StrUtil functions replacing deprecated G4String member functions.
- Bump required CMake version range to `3.16...3.21`.
- advanced
  - air_shower
    - Removed UltraAnalysisManager class, using default commands.
    - Updated code to use C++11 features.
  - amsEcal
    - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits.
  - brachytherapy
    - Code cleanup: use C++11 keywords and patterns.
    - Removed BrachyMaterial class; materials implemented now using NIST material manager.
    - Removed SetCuts() from the local PhysicsList.
  - CaTS
    - New application implementing a flexible and extendable framework for the simulation of calorimeter and tracking detectors. It also demonstrates how to use Opticks for the creation and propagation of optical photons.
  - composite_calorimeter
    - Migrated to multi-threading, using G4RunManagerFactory.
    - Introduced the action initializer.
    - Split the definition of the sensitive part of the detector from the detector construction itself. A new method, sensitiveHandling(), has been introduced in the base class CCalG4Able.
    - Made the following three classes thread-local singletons: CCalSDList, CCalSensAssign and CCalSensitiveDetectors.
    - Multi-threaded use of the G4AnalysisManager in the run action with the merging of histograms and ntuple of all working threads at the end of the run.
  - doiPET
    - Migrated to use G4RunManagerFactory.
    - Analysis now done with G4Analysis.
    - Link to reference data and analysis scripts provided to let users compare simulation results to reference data.
    - Added some controls to prepare DOI-look-up table.
    If DOI look-up table is provided as a file, then it will use it. If look-up table is not provided, the program will prepare the look-up table based on the information provided by the user (no. of crystals, etc).
  - In performing Anger Logic calculation, the interaction position is mapped to the center of the crystal before 2D position error is added to model photomultiplier tube (PMT) error.
  - A C++ analysis program is provided to calculate the sensitivity of the scanner for a line source.
  - Fixed compilation warnings for unused private variables in doiPETDetectorConstruction and doiPETEventAction. Removed tabs.
  - Removed unused header.
- eRosita
  - Migration of code to multithreading.
- gammaknife
  - Delete runManager at the end of the run.
- gammaray_telescope
  - Fixed interactive mode.
  - GammaRayTelHadronPhysics: replaced G4HadronCaptureProcess with G4NeutronCaptureProcess, and G4HadronFissionProcess with G4NeutronFissionProcess. Replaced stopping processes that have been deleted. Replaced old pion inelastic cross-sections (that have been deleted) with G4BGGPionInelasticXS.
  - GammaRayTelHadronPhysics, GammaRayTelIonPhysics: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
  - Minor change in the GammaRayTelRunAction::OpenFile() method to allow filenames longer than the hardcoded 25 character limit.
  - Removed dependency on G4EmProcessOptions.
  - Removed SetCuts() from the local PhysicsList.
  - Removed obsolete input macros and use EM option-4 in physics_opt4.mac.
  - Removed obsolete classes.
- gorad
  - Protect explicit inclusion of G4UIQt header.
  - Fixed potential shadowing compilation warnings in GRInitialization.
- hadrontherapy
  - Modified HadrontherapyLet for file generation.
  - Removed dependency on G4EmProcessOptions.
  - Geometry modification in CarbonBeamLine.
  - Removed unncessary G4AutoDelete of StepProcessMax in physics list.
  - Minor changes in macro files.
- HGCal_testbeam
  - SiliconPixelHit, SiPMHit: fixed problem in handling of NIEL energy deposition.
  - CMSHadronPhysicsFTFP_BERT: added class from CMS.
  - Removed obsolete class CMSEmStandardPhysicsHcal.
  - FTFPCMS_BERT_EMM: use correct combination of physics constructors.
  - Removed use of obsolete RanecuEngine. Updated CMS EM physics.
  - Fixed compilation warning for unused private member in PrimaryGeneratorAction.
- ICRP110_HumanPhantoms
  - Introduced ICRP110PhantomVisAction. Updated vis.mac which shows how to activate it.
  - Revised implementation of bone material.
  - Fix in UserScorerWriter to avoid potential division by zero.
  - Updated OrganMasses.dat; the Dose is now calculated averaged over the entire mass of the organ, and not only in the voxels of the organ where there is edep recorded.
  - Use `/vis/viewer/set/specialMeshRendering`. Draw the full phantom. In ColourMap.dat, all materials (except air) are now opaque.
  - General code cleanup.
- iort_therapy
  - Removed dependency on G4EmProcessOptions.
  - Removed SetCuts() from the local PhysicsList.
  - Set cuts per region in ConstructProcess(). RegionStore is not available when accessed from the constructor of the Physics List.
- lAr_calorimenter
  - Migrated to use G4RunManagerFactory.
- microbeam
  - Added initialisation of data in the constructor of the RunAction class.
  - Use explicit constructors and `override` instead of `virtual` in derived classes. Use G4 types in DetectorConstruction.
  - In main() do not initialize run and number of threads, let these be done in macro microbeam.mac.
  - DetectorConstruction: use `CLHEP::twopi`. Avoid having `fField` pointer as class member, use G4AutoDelete registration instead.
  - CellParameterisation: initilize all data members.
- microelectronics
  - Updated PhysicsList to new EM settings.
  - Updated analysis script plot.C.
- purging_magnet
  - Migrated to use G4RunManagerFactory.
  - Updated physics list to use Modular physics list, with G4EmStandardPhysics_option4.
- radioprotection
  - Added the Bridge silicon microdosimeter and a macro to perform microdosimetric calculations. Analysis macros run with Root6.
- STCyclotron
  - STCyclotronSensitiveTarget: remove deprecated include.
  - Use new CLHEP units for `minute, hour, day, year` in STCyclotronPhysicsList.
- underground_physics
  - In DMXParticleSource::ConfineSourceToVolume(), use existing facility to faster find physical volme in store, rather than looping through. Some code cleanup.
  - DMXPhysicsList: replaced G4HadronCaptureProcess with G4NeutronCaptureProcess. Replaced stopping processes that have been deleted. Removed header files of old and unused pion inelastic cross-sections (that have been deleted). Replaced particle-specific inelastic processes (that have been deleted) with G4HadronInelasticProcess.
  - Replaced deprecated optical commands & parameters with new ones.
- xray_fluorescence
  - Migrated to use G4RunManagerFactory.
  - Removed dependency on G4EmProcessOptions.
  - Removed SetCuts() from the local PhysicsList.
  - Updated for changes in the analysis category.

- basic
  - Migrated to use G4SteppingVerboseWithUnits.
  - Use `nullptr` instead of `0`.
  - Cleaned trailing whitespaces from all files.
  - Introduced namespace instead of a class names prefix.
  - Declare overriding functions `override` (and removed `virtual` keyword).
  - B4
    - Removed macros/visTutor. A movies tutorial is now in extended example visualization/movies. Remove visTutor menu in all gui.mac files.
  - B5
    - Added input script plotter.mac to use new plotter commands.
    - Added analysisManager->Reset() in begin of run, as resetting was disabled for plotting in end of run.
- extended
  - analysis
    - Removed AnaEx03 with the AIDA implementation.
    - AnaEx01
      - Define analysis manager configuration and create histograms only once.
      - Always close analysis files in EndOfRunAction.
  - biasing
    - B03
      - B03PhysicsList: replaced G4HadronCaptureProcess with G4NeutronCaptureProcess, and G4HadronFissionProcess with G4NeutronFissionProcess. Replaced old ion cross-sections (that have been deleted) with better ones. Use G4HadronInelasticProcess for inelastic processes (the particle-specific inelastic processes have been deleted).
  - electromagnetic
    - TestEm0
      - Updated PhysListEmStandard.
      - DetectorConstruction: print only used material.
      - RunAction: improved output format.
    - TestEm1
      - Migrated main() to use G4RunManagerFactory and G4SteppingVerboseWithUnits.
      - Updated PhysListEmStandard.
      - DetectorConstruction: do not print materials table.
      - StepMax: code formatting.
      - Added macro stepMax.mac.
    - TestEm2
      - Migrated to use G4SteppingVerboseWithUnits.
      - Removed obsolete PhysList5DEmStandard. 5D model is a part of Opt4 and other physics configurations.
      - Updated PhysListEmStandard.
      - DetectorConstruction: do not print materials table.
      - StepMax, StepMaxMessenger, PhysicsList, PhysicsListMessenger: revert, to make command `/testem/stepMax` working in interactive mode.
      - SteppingVerbose: set precision via data member; modified process name.
      - Use G4RunManagerFactory in main().
      - Added macro stepMax.mac.
    - TestEm3
      - Updated PhysListEmStandard.
      - StepMax, StepMaxMessenger, PhysicsList, PhysicsListMessenger: revert, to make command `/testem/stepMax` working in interactive mode.
      - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
      - Added macro stepMax.mac.
    - TestEm4
      - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
    - TestEm5
      - Updated PhysListEmStandard.
      - Migrated to G4SteppingVerboseWithUnits.
      - TrackingAction: fixed bug for filling histos 6 and 7. Fixed bug for histo of vertex position.
      - StackingAction: migrated to the new version of G4PhysicsModelCatalog.
      - StepMax, StepMaxMessenger, PhysicsList, PhysicsListMessenger: revert, to make command `/testem/stepMax` working in interactive mode.
      - Use G4RunManagerFactory in main().
      - Fixed inconsistency of target/world size defined by a user Addressing problem report #2379.
      - DetectorConstruction: if any geometry size is changed then recompute all geometry parameters.
      - PrimaryGeneratorAction: reinitialise beam position for each new run.
      - Included new macro pixe_ANSTO.mac to show how to activate the ANSTO PIXE data libraries. Use ANSTO radiation yields instead of EADL.
      - StackingAction: use new modelID scheme.
      - Removed obsolete PhysListEm5DPhysics and PhysListEm19DPhysics, as these models are now part of regular physics constructors.
      - Added macros stepMax.mac and subcut.mac.
    - TestEm6
      - Migrated to use G4RunManagerFactory.
      - Migrated to G4SteppingVerboseWithUnits.
    - TestEm7
      - Migrated to G4SteppingVerboseWithUnits.
      - Removed use of obsolete RanecuEngine. Updated PhysListEmPhysicsNR.
      - Migrated to use G4RunManagerFactory in main().
      - Improved macro files for ion ionisation.
      - Fix to build with C++20 Standard enabled.
      - c2_function.hh: fixed compilation warning.
    - TestEm8
      - Added printout of random numbers.
    - TestEm9
      - Replaced local Physics List by clone of the default EM standard; recover analysis of process calls for the case of gamma general process; improved macro files. Removed unused header.
    - TestEm11
      - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
      - Updated PhysListEmStandard.
      - DetectorConstruction: print only used material.
      - RunAction: dump G4EmParameters.
    - TestEm12, 13, 14
      - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
      - Updated PhysListEmStandard.
    - TestEm15
      - Migrated to G4SteppingVerboseWithUnits.
      - PhysicsList: removed PhysList5DStandard, as 5D model is now part of Opt4 EM physics in standard constructors.
    - TestEm16
      - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
    - TestEm17, 18
      - Migrated to G4SteppingVerboseWithUnits.
  - eventgenerator
    - exgps
      - Tidy up CTests definition file and build configuration.
    - particleGun
      - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
    - pythia/py8decayer
      - New example demonstrating how to outfit Pythia8-based decay features to those resonances in Geant4 where decay tables are not implemented by default. In addition, it shows how to replace existing Geant4 decay tables to such resonances as tau+/- or B+/- with the Pythia8-based ones.
    - userPrimaryGenerator
      - Migrated to use G4SteppingVerboseWithUnits.
  - exoticphysics
    - channeling
      - Removed local option4 physics configuration.
    - phonon
      - Download CrystalMap files and fixed build issues.
    - saxs
      - Fixed using G4Analysis: add call to CloseFile().
      - Cleanup of PhysicsList.
  - geometry
    - transforms
      - Migrated to use G4SteppingVerboseWithUnits.
      - Added cleaning of the reflection factory.
    - VecGeomNavigation
      - New example demonstrating integration of VecGeom navigation, based on the prototype package G4VecGeomNav, being integrated in the example at build time.
  - hadronic
    - FissionFragment
      - Fixed CMake build script to define target properly.
    - Hadr01
      - PhysicsList: removed unused header file.
    - Hadr02
      - CRMCNeutronBuilder, HIJINGNeutronBuilder, UrQMDNeutronBuilder: replaced G4HadronCaptureProcess with G4NeutronCaptureProcess, and G4HadronFissionProcess with G4NeutronFissionProcess.
      - IonUrQMDPhysics: replaced old ion cross-sections (that have been deleted) with G4ComponentGGNuclNuclXsc.
      - Replaced particle-specific inelastic processes (that have been deleted) with G4HadronInelasticProcess.
    - Hadr03
      - PhysicsList: added GammaNuclearPhysicsLEND.
      - GammaNuclearPhysics, GammaNuclearPhysicsLEND: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
      - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
    - Hadr04
      - NeutronHPphysics: replaced G4HadronCaptureProcess with G4NeutronCaptureProcess, and G4HadronFissionProcess with G4NeutronFissionProcess. Replaced G4NeutronInelasticProcess (that has been deleted) with G4HadronInelasticProcess. Use G4GenericMessenger instead of NeutronHPMessenger.
      - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
      - Added protection in RunAction::CountProcesses().
    - Hadr05
      - New example demonstrating how to collect energy deposition in a sampling calorimeter and how to survey energy flow.
    - Hadr06
      - TrackingAction: count secondary particles with meanLife > 0. Print meanLife. Added TrackingMessenger with 2 commands.
      - PhysicsList: added GammaNuclearPhysicsLEND. Use new CLHEP units for `minute, hour, day, year` and `millielectronvolt`.
      - Updated ElectromagneticPhysics.
      - Suppressed command `/process/list` in several macros.
      - GammaNuclearPhysics, GammaNuclearPhysicsLEND: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
      - DetectorConstruction: updated `fWorldSize` for SetRadius().
      - Migrated main() to G4RunManagerFactory and G4SteppingVerboseWithUnits.
      - Enable ParticleHP settings in main().
      - Stepping verbose initialisation.
    - Hadr07
      - TrackingAction: count secondary particles with meanLife > 0. Print meanLife.
      - PhysicsList: added GammaNuclearPhysicsLEND. Use new CLHEP units for `minute, hour, day, year` and `millielectronvolt`.
      - Updated ElectromagneticPhysics.
      - GammaNuclearPhysics, GammaNuclearPhysicsLEND: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
      - Migrated main() to G4RunManagerFactory and G4SteppingVerboseWithUnits. Enable ParticleHP settings in main().
      - HadronElasticPhysicsHP: use G4GenericMessenger.
      - RadioactiveDecayPhysics: do not change 'ThresholdOfHalfLife'.
    - Hadr08
      - BiasingOperation: replaced Gheisha inelastic cross-section (that has been deleted) with better cross-sections. Replaced particle-specific inelastic processes (that have been deleted) with G4HadronInelasticProcess.
    - Hadr09
      - HadronicGenerator: migrated per-particle inelastic processes (that have been deleted) to G4HadronInelasticProcess. Extended interface and functionality; used new methods available in the FTF model.
    - Hadr10
      - New hadronic example aimed to exercise the decay of tau leptons, as well as charmed and bottom hadrons.
    - NeutronSource
      - TrackingAction: count secondary particles with meanLife > 0. Print meanLife.
      - PhysicsList: added GammaNuclearPhysicsLEND. Use new CLHEP units for `minute, hour, day, year` and `millielectronvolt`.
      - Updated ElectromagneticPhysics.
      - GammaNuclearPhysics, GammaNuclearPhysicsLEND: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
      - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
      - RadioactiveDecayPhysics: new constructor, include G4Radioactivation process, inactivate atomic de-excitation.
      - Added protection in RunAction::CountProcesses().
      - TrackingAction, RunAction: added a comment for excited states.
      - HadronElasticPhysicsHP: use G4GenericMessenger.
      - RadioactiveDecayPhysics: do not change 'ThresholdOfHalfLife'.
  - medical/DICOM
    - Use updated renamed method GetNoVoxels() in G4PhantomParameterisation instead of GetNoVoxel(), now removed.
    - In vis.mac, changed `/vis/ogl/set/eventsDrawInterval` to `/vis/ogl/flushAt NthPrimitive`.
  - medical/dna
    - AuNP:
      - New example simulating the track-structure of electrons in microscopic gold volume. Also simulating that in liquid water medium surrounding the gold volume.
    - chem2:
      - In vis.mac, changed `/vis/ogl/set/eventsDrawInterval` to `/vis/ogl/flushAt NthPrimitive`.
    - chem3:
      - In vis.mac, changed `/vis/ogl/set/` to `/vis/viewer/set/timeWindow/`.
      - Replaced '/vis/ogl/printEPS' with `/vis/ogl/export` in relevant macros.
    - chem6:
      - Deleted limit time step.
      - Reduced number of incident particles.
    - dnadamage1:
      - Fixes in analysis macros.
      - Fixed SSD file typos.
    - neuron:
      - In vis.mac, changed `/vis/ogl/set/` to `/vis/viewer/set/timeWindow/`.
    - microdosimetry:
      - Updated PhysicsList to use updated SetEmModel() method. Removed thread unsafe SetCuts() method; use SetEmModel(..) for multiple scattering.
    - scavenger:
      - New example showing how to activate the scavenging process in chemistry using the deterministic treatment of the IRT model.
    - splitting:
      - Updated PhysicsList to recent EM settings.
    - svalue:
      - PhysicsList: removed unused header. Radioactive decay is defined via standard radioactive physics builder.
      - Do not allow change of geometry between runs, only materials may be changed.
      - Removed all warning in test run.
  - medical/electroscattering
    - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
    - Removed obsolete random number generator.
    - PhysicsList: use physics constructors from physics_list library; added G4EmStandardPhysics_option4; removed local EM physics constructors.
  - medical/electroscattering2
    - Removed warning. Cosmetic modifications in PhysicsList.
  - medical/fanoCavity, 2
    - Updated PhysicsList to recent EM settings.
    - Migrated to G4RunManagerFactory and G4SteppingVerboseWithUnits.
  - optical
    - LXe
      - Get some refractive indices from new G4OpticalMaterialParameters file.
      - Excercise creating material property table element by element.
      - Replaced deprecated optical commands and parameters with new ones.
    - OpNovice
      - Excercise creating material property table element by element.
      - Replaced deprecated optical commands and parameters with new ones.
      - Fixed incorrect material property name.
      - Added option to define detector via a GDML file.
      - Added outer world volume to avoid surfaces including world volume.
      Addressing problem report #2373.
    - DetectorConstruction: use modified interface to G4MaterialPropertiesTable with Spline flag.
    - Code cleanup; renamed class variables to start with `f`.
    - OpNoviceDetectorConstruction: added tests of user-defined material properties; add one material property using C-style arrays (as a test).
  - OpNovice2
    - DetectorConstruction: use modified interface to G4MaterialPropertiesTable with Spline flag.
    - Replaced deprecated optical commands and parameters with new ones.
  - wls
    - WLSMaterials: use correct material property names.
    - WLSPrimaryGeneratorAction: use G4PhysicsFreeVector instead of deprecated G4PhysicsOrderedFreeVector.
    - Added visualisation attributes.
    - Fixed bug preventing cladding being built.
    - Fixed counting of detector hits.
    - Added histograms.
    - Use G4OpBoundaryProcess::invokeSD() rather than ProcessHits_boundary() call in SteppingAction.
    - Remove StringToRotation; removed Sr90.mac; added electron.mac.
- parallel
  - MPI
    - Updated analysis classes for recent changes in analysis.
    - More updates in g4mpi for changes in G4String.
  - ThreadsafeScorers
    - TSPhysicsList: removed obsolete header G4EmProcessOptions; removed method SetCuts() to avoid data race, use the one from the base class; removed singleton pattern from this class as not needed.
- parameterisations
  - gflash
    - clang-tidy and clang-format on code.
    - test.mac run twice with and without gflash.
  - Par04
    - New example demonstrating how to use the Machine Learning (ML) inference to create energy deposits as a fast simulation model using ONNX runtime and LWTNN libraries.
- polarisation
  - Pol01
    - Cleanup of Physics List; use renamed polarized processes.
- radioactivedecay
  - Activation
    - TrackingAction: count secondary particles with meanLife > 0. Take weight into account.
    - PhysicsList: added GammaNuclearPhysicsLEND. Use new CLHEP units for `minute, hour, day, year` and `millielectronvolt`.
    - Updated ElectromagneticPhysics.
    - GammaNuclearPhysics, GammaNuclearPhysicsLEND: replaced G4PhotoNuclearProcess (that has been deleted) with G4HadronInelasticProcess.
    - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
    - ElectromagneticPhysics: updated EM parameters.
    - RadioactiveDecayPhysics: new constructor, include G4Radioactivation process, inactivate atomic de-excitation.
    - Added protection in RunAction::CountProcesses().
    - TrackingAction, RunAction: added a comment for excited states.
    - HadronElasticPhysicsHP: use G4GenericMessenger.
    - RadioactiveDecayPhysics: do not change 'ThresholdOfHalfLife'.
  - rdecay01, 02
    - Migrated to use G4RunManagerFactory and G4SteppingVerboseWithUnits. Removed SteppingVerbose class.
    - Use new CLHEP units for `minute, hour, day, year` and `millielectronvolt` in PhysicsList.
    - Added protection in RunAction::CountProcesses().
- runAndEvent
  - RE05, 06
    - Migration to the new SteppingVerbose.
  - RE07
    - New example demonstrating how to register specialized tracking managers for a particle or a set of particles.
- visualization
  - movies
    - New example illustrating how to make a movie with `/vis/viewer/save` and `/vis/viewer/interpolate`. It also includes the "visTutor" macros previously included in example "basic" B4. See README for further information.

## 10. Appendix

### A1 - Changes required for advanced use of G4String

- G4String now has identical constructors to `std::string`. Replace use of the single `char` argument constructor (explicitly or implicitly):

          // G4String x('a');
          G4String x(1, 'a');

- G4String no longer provides call operators for element or substring access. The subscript operator or `substr` member functions should be used instead:

          // char x = aG4String(42);
          char x = aG4String[42];

          // G4String s = aG4String(3,14);
          G4String s = aG4String.substr(3, 14);

- Replace use of `G4String::index` with `G4String::find` (interface as `std::string::find`):

          // auto i = aG4String.index("arg");
          auto i = aG4String.find("arg");

- Replace use of `G4String::isNull` with `G4String::empty` (interface as `std::string::empty`):

          // bool c = aG4String.isNull();
          bool c = aG4String.empty();

- Replace use of `G4String::first` with `G4String::find`, `G4String::last` with `G4String::rfind` (as ``std::string::find`, `std::string::rfind` interfaces):

          // auto f = aG4String.first('x');
          auto f = aG4String.find('x');

          // auto l = aG4String.last('y');
          auto l = aG4String.rfind('y');

- Replace use of `G4String::prepend` with `G4String::insert` (as `std::string::insert` interface):

          // aG4String.prepend("foo");
          aG4String.insert(0, "foo");

- G4String still allows implicit conversion to `const char*>` but this behaviour should be regarded as deprecated. User code should prefer to use explicit conversion via the `c_str` member function when passing to functions expecting `const char*`, or to take string arguments by `G4String` or `std::string_view` as appropriate.

- The following members functions are retained but marked as deprecated, and with the recommended member or free function replacements in the `G4StrUtil` namespace:

          // G4int i = aG4String.compareTo(anotherString);
          G4int i = aG4String.compare(...); // replacement: std::string::compare

          // G4int i = aG4String.compareTo(anotherString, G4String::ignoreCase);
          G4int i = G4StrUtil::icompare(aG4String, anotherString);

          // aG4String.readLine(anIStream);
          std::getline(anIStream, aG4String);

          // aG4String.remove(42);
          aG4String.erase(42); // interface as std::string::erase

          // aG4String.contains("char or string");
          G4StrUtil::contains(aG4String, "char or string"); // interface as C++23 std::string::contains

          //G4String c = aG4String.strip(...);
          G4String c = G4StrUtil::rstrip_copy(aG4String); // see also G4StrUtil::{rstrip,lstrip,lstrip_copy,strip,strip_copy}

          // aG4String.toLower();
          G4StrUtil::to_lower(aG4String); // see also G4StrUtil::to_lower_copy

          // aG4String.toUpper();
          G4StrUtil::to_upper(aG4String); // see also G4StrUtil::to_upper_copy

### A2 - Hadronic changes required by user-made physics lists

- For hadronic processes
  - Replace G4XxxInelasticProcess with:

                G4HadronInelasticProcess* xxxInelasticProcess = new G4HadronInelasticProcess( "xxxInelastic", G4Xxx::Definition() );

    where `xxx` can be either:

                "PionPlus", "PionMinus", "KaonPlus", "KaonMinus",
                "KaonZeroS", "KaonZeroL", "Proton", "AntiProton",
                "Neutron", "AntiNeutron", "Deuteron", "Triton", "Alpha"

    for example:

                G4KaonZeroLInelasticProcess* theInelasticProcess = new G4KaonZeroLInelasticProcess( "inelastic" );

    has been replaced by:

                G4HadronInelasticProcess* theInelasticProcess = new G4HadronInelasticProcess( "inelastic", G4KaonZeroLong::Definition() );

  - For photon inelastic processes, use:

                G4HadronInelasticProcess* photonNuclear = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Definition() );

                photonNuclear->AddDataSet( new G4PhotoNuclearCrossSection );

                G4HadronicProcess* photonCapture = new G4HadronicProcess( "photonNuclear", fCapture );
                G4HadronicProcess* photonFission = new G4HadronicProcess( "photonFission", fFission );

- For hadronic cross-sections
  - For INELASTIC, the following cross-sections should be used:

                G4VCrossSectionDataSet* protonInelasticXS = new G4BGGNucleonInelasticXS( G4Proton::Definition() );

                G4VCrossSectionDataSet* neutronInelasticXS = new G4NeutronInelasticXS;
                // a valid alternative could be:
                // G4VCrossSectionDataSet* neutronInelasticXS = new G4BGGNucleonInelasticXS( G4Neutron::Definition() );

                G4VCrossSectionDataSet* pionPlusInelasticXS = new G4BGGPionInelasticXS( G4PionPlus::Definition() );
                G4VCrossSectionDataSet* pionMinusInelasticXS = new G4BGGPionInelasticXS( G4PionMinus::Definition() );

                // For kaons, hyperons and anti-hyperons
                G4VCrossSectionDataSet* ggHadInelasticXS = new G4CrossSectionInelastic( new G4ComponentGGHadronNucleusXsc );

                // For deuteron, triton, He3, alpha and generic ions
                G4VCrossSectionDataSet* ionInelasticXS = new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc );

                // For anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3 and anti_alpha
                G4VCrossSectionDataSet* antibaryonInelasticXS = new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS );

  - For ELASTIC:

                G4VCrossSectionDataSet* protonElasticXS = new G4BGGNucleonElasticXS( G4Proton::Definition() );

                G4VCrossSectionDataSet* neutronElasticXS = new G4NeutronElasticXS;
                // a valid alternative could be:
                // G4VCrossSectionDataSet* neutronElasticXS = new G4BGGNucleonElasticXS( G4Neutron::Definition() );

                G4VCrossSectionDataSet* pionPlusElasticXS = new G4BGGPionElasticXS( G4PionPlus::Definition() );
                G4VCrossSectionDataSet* pionMinusElasticXS = new G4BGGPionElasticXS( G4PionMinus::Definition() );

                // For kaons, hyperons and anti-hyperons
                G4VCrossSectionDataSet* ggHadElasticXS = new G4CrossSectionElastic( new G4ComponentGGHadronNucleusXsc );

                // For deuteron, triton, He3, alpha and generic ions
                G4VCrossSectionDataSet* ggIonElasticXS = new G4CrossSectionElastic( new G4ComponentGGNuclNuclXsc );

                // For anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3 and anti_alpha
                G4VCrossSectionDataSet* antibaryonElasticXS = new G4CrossSectionElastic( new G4ComponentAntiNuclNuclearXS );

  - For (neutron) CAPTURE:

                G4VCrossSectionDataSet* neutronCaptureXS = new G4NeutronCaptureXS;

  - For FISSION, use HP. Elsewhere:

                G4VCrossSectionDataSet* neutronFissionXS = new G4ZeroXS;
                G4VCrossSectionDataSet* photoFissionXS = new G4ZeroXS;

- For stopping (at rest inelastic processes)
  - For pi-, replace G4PiMinusAbsorptionBertini with:

                G4HadronStoppingProcess* piMinusAbsorption = new G4HadronicAbsorptionBertini( G4PionMinus::Definition() );

  - For K-, replace G4KaonMinusAbsorptionBertini with:

                G4HadronStoppingProcess* kMinusAbsorption = new G4HadronicAbsorptionBertini( G4KaonMinus::Definition() );

  - For anti_proton, replace G4AntiProtonAbsorptionFritiof with:

                G4HadronStoppingProcess* antiProtonAbsorption = new G4HadronicAbsorptionFritiof( G4AntiProton::Definition() );

    No replacement for G4AntiNeutronAnnihilationAtRest, just remove it.
  - For Sigma-, replace G4SigmaMinusAbsorptionBertini with:

                G4HadronStoppingProcess* sigmaMinusAbsorption = new G4HadronicAbsorptionBertini( G4SigmaMinus::Definition() );

  - For anti-Sigma+, replace G4AntiSigmaPlusAbsorptionFritiof with:

                G4HadronStoppingProcess* antiSigmaPlusAbsorption = new G4HadronicAbsorptionFritiof( G4AntiSigmaPlus::Definition() );