Geant4 11.1 Release Notes

December 9th, 2022

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, VecGeom and PTL 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 13.0.1 Ventura with Apple LLVM/Clang-14.
  Tested on 64 bit architectures (Intel or Apple Silicon).
- Windows-10 with Visual C++ 14.33 (Visual Studio 2022).

More verified and tested configurations (64 bits):

- Linux, gcc-9.3/10.3/11.3/12.2, clang-10/11/13/14
- Linux, Intel-icc 2021.7, Intel-icx 2022.2
- macOS 12.6 Monterey with Apple LLVM/clang-14
- macOS 11.7 Big Sur with Apple LLVM/Clang-12
- Windows/10 with Visual C++ 14.29 (Visual Studio 2019)

## 2. Supported CLHEP, VecGeom and PTL versions

This release of Geant4 has been verified with CLHEP, release 2.4.6.2. 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.2.1 has been tested when using such configuration.
PTL version 2.3.3 is required for external installation of the PTL tasking library.
CMake 3.16 is the minimum version required to build Geant4.

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

- Using standard install location for CMake `find_package` configuration files under $CMAKE_INSTALL_PREFIX/lib/cmake/Geant4.
  Application builds using CMake will need to set `Geant4_DIR` to this new location, or use CMAKE_PREFIX_PATH, to find Geant4.
- Added required configuration to be able to generate DEB/RPM packages with CPack.
- Added new scheme to locate required datasets, making use of environment variables optional. See Appendix for details on potential configuration and C++ changes required.
- Removed Geant4Py from toolkit build with distribution and support moved to upstream repository.
  All support and feature requests should be directed to the related GitHub Issue Tracker.
- Retired `tasking` module and merged contents in `global` and `run` categories.

Geometry, Fields and Transportation

- Client code that uses the methods SetLowLooperThresholds() and/or SetHighLooperThresholds() introduced in release 11.0 for G4Transportation and G4CoupledTransportation, may need revision as now G4CoupledTransportation inherits from G4Transportation.

Electromagnetic and optical physics

- New dataset G4EMLOW-8.2 is required and should be used.

Visualization and Modeling

- Qt drivers require the Qt-5 platform. Qt-6 is not yet supported.
- The GEANT4_USE_TOOLSSG CMake option for the ToolsSG visualisation driver has been removed, the driver now being automatically enabled.

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.2, G4NDL-4.7`. Notice that the latter extends the number of materials for which thermal scattering data is available.
  - 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

- Improved diagnostic for problems with primary track parameters or with secondary tracks in particle-change classes.
- Introduced methods in the G4Track class that provide information on eventual short-lived parent hadronic resonances.

Analysis

- Implemented support for writing analysis objects (histograms, profiles, n-tuples) in a file multiple times.
- Added new UI commands for analysis file management: `/analysis/openFile, write, closeFile` and `reset`.
- Added new analysis manager List functions and associated commands: `/analysis/list [onlyIfActive]`, `/analysis/xy/list [onlyIfActive]` where `xy = h1, h2, h3, p1, p2, ntuple`.

Geometry & Field

- Added ability to optionally check for overlaps in parallel geometries through the `/geometry/run/test` UI command.
- A new class G4TransportationParameters enables fine grain control of parameters for killing charged particles looping in a field. It is optional, but if created it applies to all stable charged particles. It must be instantiated in the master thread and all its parameters need to be assigned values.
- Improved computation of surface area and cubic volume in specific solids.
- Revised implementation of G4CoupledTransportation: now it inherits from G4Transportation and consolidates common variables and methods.
- Revised G4FieldManager to ensure that `epsilon_min/_max` parameters are between 'minimum and maximum accepted' accuracy values to ensure robust behaviour of the integration.
- Introduced a 2nd order symplectic integration method G4BorisDriver, targetting better control of energy conservation and conservation of phase space volume.

Materials

- In the NIST material data-base, the material descriptions for G4_ADENINE, G4_GUANINE, G4_CYTOSINE, G4_THYMINE and G4_DEOXYRIBOSE have been updated and G4_PHOSPHORIC_ACID has been added.
- Fixed density effect data for 8 materials, the most significant fixes are for `G4_Tm`, less relevant for `G4_Be`, `G4_Mg`, `G4_Fe`, and `G4_Y`.

Electromagnetic physics

- Possibility to choose the model of fluctuations, using either the default G4UrbanFluctuation, or the alternative G4UniversalFluctuation (more accurate for thin targets), or G4LossFluctuationDummy (no fluctuations); new UI command defines model of fluctuations for the full setup; inside user physics lists it is possible to configure different fluctuation models per G4Region.
- In G4UrbanMscModel, moving the safety computation before the algoritm of step limitation in order to save few instructions; should not affect results. Also, removed the computation and use of rangecut for step limitation, providing some CPU speedup.
- New G4TransportationWithMsc specialised tranportation process combined with multiple-scattering, enabled by default with G4EmStandardPhysics_option1. May be enabled for any EM physics via the new UI command. Added also possibility to enable internal stepping.
- New model and process for muon pair production by muon.
- Use G4LinhardSorensenIonModel for GenericIon in physics-lists for G4EmStandardPhysics_option3, G4EmStandardPhysics_option4, G4EmPenelopePhysics and G4EmLivermorePhysics.
- Set EPICS2017 cross sections to be the default for Livermore gamma processes.
- G4EmFluoDirectory: added new enumerator and introduced directory for the fluorescence data as a parameter, allowing to use alternative sets of atomic levels.
- In optical physics, addded ability to calculate reflection/refraction from thin film coating.
- New utility class G4EmDNABuilder, providing instantiation of standard and DNA processes/models in physics lists. Made G4EmDNAPhysics the base class for DNA physics constructors. Optimised IRT-syn DNA model.
- Added parameters in DNA including the chemical molecules and reaction list involved in the radiolysis.
- In G4DNA, incorporated model based on RPWBA to transport protons at `100-300 MeV`. Updated data structure to improve performance of the mesoscopic model. Also added nitrogen models from PTra code.

Hadronic physics

- New integral method for hadronic processes (to take into account the change of hadronic cross-sections along a step for charged hadrons due to the decrease of hadron's kinetic energy by ionization loss.
- Extended cross-sections for the computation of light anti-nuclei on hydrogen. Extended nuclear cross-sections also for light hypernuclei and anti-hypernuclei projectiles.
- In coherent elastic hadronic model, added extensions for the simulation of a light anti-hypernucleus projectile elastic scattering on a target nucleus.
- Extended nuclear elastic and inelastic physics to support light hypernuclei and anti-hypernuclei projectiles. Implemented extension of the FTF model to deal with the annihilation of light anti-hypernuclei, for all energies; general improvement of the algorithm used to sample kinematical variables. In coherent elastic hadronic model, added extension for the simulation of light hypernuclei and anti-hypernuclei projectile elastic scattering on target nuclei.
- In hadronic de_excitation, added limitation (A < 30) on decay of unphysical fragment, allowing for removal of light unphysical states and providing improved isotope production for the spallation fragments.
- Improved FTF fragmentation to better describe the production of strange mesons and baryons in proton-proton interactions, as measured by the NA61/SHINE Collaboration. Also improved description of leading particle spectra in meson-nucleon interactions.
- Revised the mixing probability between vector mesons (`rho0` and `omega`), as well as the probabilities for the ratios between pseudo-scalar and vector meson production for both FTF and QGS string fragmentations, to improve the description of NA61/SHINE experimental data.
- New singleton class G4FTFTunings to allow to specify alternative sets of FTF parameters, called "tunes"; added also specific UI messenger. Currently, the feature is mostly meant for use in internal tests, further study and development; in the future, such tunes may be offered to users for specific studies.
- Added option to G4HadronicParameters to control the diffraction dissociation for nucleon projectile on target nucleus with baryon number greater than 10: by default, both projectile and target diffraction are switched off (but they are both active in the case of target nucleus with baryon number below or equal to 10; if instead the flag is set to "true", then both projectile and target diffraction are activated regardless of the target nucleus).
- Introduced de-excitation of fragments with lambda inside; extended upper limit of atomic de-excitation from `Z=100` to `Z=104`.
- Implemented new process for tau-neutrino hadronic inelastic physics.

Processes - General

- Added flush() method to the fast simulation models, allowing to process the input buffer of the fast simulation model before the end of an event; triggered inside the event loop of G4EventManager, when the stack is empty.
- Added a new utility method to access a process via sub-type.
- Added extra virtual methods to G4VProcess base class, GetCreatorProcess() and MinPrimaryEnergy() needed for treating new combined processes.
- Added new virtual method G4VDiscreteProcess::GetCrossSection() required in the implementation of integral approach.

Physics Lists

- New G4NeutronGeneralProcess combined process; enabled in QBBC physics-list.
- In G4EmStandardPhysics_option3, use options providing more accurate simulation without loss of CPU performance; significantly improving fanoCavity results.
- In G4EmStandardPhysics_option4, for low-energy electron ionisation the Penelope model is used instead of the Livermore model.
- For FTFP_BERT and FTFP_INCLXX physics lists, it is possible to enable the transport of light hypernuclei and anti-hypernuclei, switched off by default. When enabled, the following interactions are included: a simplified treatment of weak decay; ionization and multiple scattering for the charged particles; nuclear elastic scattering; nuclear inelastic scattering, handled by either the FTF string model or by the INCL intranuclear cascade model, with a very simplified treatment of nuclear de-excitation.
- In G4RadioactiveDecayPhysics time limit for radioactive decay is now coherent with the limit used in the nuclear de-excitation. The default limit of `1 ns` may be changed via UI command.
- All DNA physics lists are now combined with standard EM models. The default upper energy limit of `300 MeV` may be increased or decreased. DNA physics may now work with radioactive decay.

Visualization and Interfaces

- ToolsSG drivers for X11, Xt and Qt (short name TSG): now fully functional and supporting histogram plotting.
- Fast rendering of complex meshes (special mesh rendering) for most drivers (see advanced examples ICRP110 and 145).
- "Twinkling" of volumes when centring (`/vis/viewer/centreOn`, etc.).
- Cutaway (`/vis/viewer/addCutawayPlane`) now available for all visualization drivers.

Examples

- New set of extended examples, implementing different setups showing how to score particle fluences.
- New example `analysis/AnaEx03`, showing usage of new analysis commands for file management, writing histograms and n-tuples in a file multiple times
- In `medical/dna`, new example `jetcounter`, simulation of a typical experiment with the Jet Counter nanodosemeter; new example `moleculardna`, simulation of physics, physico-chemistry and chemistry processes in DNA geometries.
- The example `field/field01` now demonstrates how to use the new G4TransporationParameters class, and shows a full set of ways to control the parameters for killing looping stable charged particles.
- eFLASH_radiotherapy: new application simulating the beamline and energy spectra based on the Triode Electron Gun Equipped ElectronFlash Manufactured by Sordina Iort Technologies S.p.A. available at the Centro Pisano Flash Radiotherapy (CPFR) in Pisa.
- New advanced example implementing a ICRP145 human phantom.

## 5. Expected effects on physics and computing performance

Geometry & Field

- A potential CPU time increase could be experienced due to the new maximum value for relative accuracy of integration of charged particle tracks in field (`epsilon_max`). This can be due to extra steps for low energy electrons or muons moving in (near) vaccuum. Potential remedies: either use (the more efficient) templated equation of motion, stepper and driver, or investigate using an alternative driver which treats long steps (those with a large angle arc of the helix) using a separate helical method. To obtain it, use the four argument G4ChordFinder constructor, with a 4th argument `stepperId=4`.

Electromagnetic physics

- A new process of muon pair production by muons is available and can be enabled via UI command or C++ interface through the G4EmExtraPhysics constructor.
- G4GammaGeneralProcess is used for gamma physics by default. It brings few percent speedup depending on geometry setup and type of simulation.
- Implemented usage of PhotoeffectBelowKShell flag, allowing to enable/disable photo-electron production below K-shell of an atom; by default this is enabled.

Hadronic physics

- FTFP_BERT pion showers have slightly (~0.5%) higher energy response and (~2%) narrower lateral shapes with respect to release 11.0.3. QGSP_BERT pion showers have slightly (~0.5%) lower energy response and (~2%) wider lateral shapes. Comparing QGSP_BERT pion showers with those of FTFP_BERT, they become closer to each other with respect previous versions, with the QGSP_BERT pion showers still having slightly higher energy response, significantly wider energy resolution, and longer and narrower shower shapes with respect to those of FTFP_BERT.

## 6. Known Run-Time Problems and Limitations

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

## 7. Compilation Warnings

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

## 8. Geant4 Software License

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

## 9. Detailed list of changes and fixes

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

### Configuration

- CMake
  - Added support for Intel-icpx/icx compiler and updated compilation flags for all Intel compilers.
  - Enable ToolsSG and backends based on use of external libraries (Qt, X11, Xm, Win32). Backends made non-mutally exclusive; removed GEANT4_USE_TOOLSSG public CMake option and flag, since ToolsSG is now built by default.
  - Fixed bug in Qt3D viasualisation driver activation, based on report in Users Forum.
  - Avoid setting LD_LIBRARY_PATH configuration on MacOS; adding paths to DLL into PATH on Windows.
  - Corrected logic error in checking whether module is already composed.
  - Deprecated tags `geant4_define_module`, `geant4_global_library_target`; decouples the source code organisation and the module/library composition commands; implementation reduced to emitting a CMake warning message on what to replace with.
  - Updated CMake build scripts in all modules, by replacing `geant4_global_library_target` with direct file inclusion and call to `geant4_add_category` to define library build from source modules.
  - Reorganised DLL import/export flags for single-module categories.
  - Set default value of GEANT4_BUILD_BUILTIN_BACKTRACE to OFF.
  - Do not use CMAKE_VERBOSE_MAKEFILE when building tests.
  - Rationalized declaration and use of internal builds of required externals CLHEP, zlib, expat, PTL and tools libraries.
  - Support declaration and composition of header-only modules and libraries.
  - New geant4_module_check.py script to provide convenient interface for developers and testing to check module/library cycles and dependency inconsistencies. Filter out visualization driver modules from consistency check for visualization/management module. Filter out C++ filesystem library from checks.
  - Adding geant4_module_sources command to enable appending of headers/sources to a module after creation.
  - Providing GEANT4_BUILD_ENABLE_ASSERTIONS option to enable assert() in all release build modes (Release, RelWithDebInfo, MinSizeRel).
  - Forward `CMAKE__FLAGS[_]` flags to `geant4_add_test` so that a consistent set is used through the project.
  - Promote INTERFACE module properties to PUBLIC when merging them into a non-INTERFACE final target.
  - Removed retired `tasking` module and library from configuration files.
  - Removed deprecated functions in G4DeveloperAPI and fixed typo that prevented installation of headers.
  - Removed obsolete and now longer built G4gl2ps target.
  - Allow library composition to be overriden in developer builds.
  - Do not use `readlink -f` to support pre-Monterey macOS systems.
  - Adding -Og to GNU/Clang default debug flags.
  - Copy .clang-tidy file to build directory to assist run-clang-tidy reporting.
  - In G4ConfigurePkgConfigHelpers.cmake, geant4-config.in for geant4-config generation: adding new flag `--features` (add vtk and qt3d features); allow use of md5sun if openssl missing; canonicalise prefix path.
  - Added options --sh and --csh to geant4-config script.
  - In G4ConfigureGNUMakeHelpers.cmake for geant4.[c]sh, geant4.bat generation: allow full path source in zsh, sh; unset local variables at the end; introducing GEANT4_DATA_DIR, with all data-set paths relative to this.
  - Added commands for working with categories analagous to module commands.
  - Added required configuration to be able to generate DEB/RPM packages with CPack.
  - Use more standard install location for CMake files.
  - Remove version from default installation directories.
  - Rationalised interlinked PTL/TBB build options.
  - G4ConfigureGNUMakeHelpers.cmake (geant4.[c]sh, geant4.bat generation): use the environment variable GEANT4_DATA_DIR as top data directory; the environment variables for individual dataset commented in scripts.
  - Added source validation exception for G4FindDataDir generated header.
  - Added `-diag-disable=10441` CXX option to Intel compilers, to disable icc compiler deprecation message.
  - Removed Geant4Py from toolkit build, pointing users to upstream repository when setting GEANT4_USE_PYTHON in CMake configuration.
  - Keep file timestamps from unpacked data libraries in CMake 3.24 and newer.
  - Fix issue in Qt3D activation as reported on the Users Forum.
  - Set CLHEP minimum version to 2.4.6.0 and VecGeom 1.2.0.
  - New data sets G4EMLOW-8.2 and G4NDL-4.7 with new ThermalScattering data.
  - Updated tag-IDs for 11.1.
- GNUMake
  - Added Linux-icx.gmk configuration for Intel OneAPI DPC++ compiler.
  Updated compilation flags for Intel icc/icx compilers.
- Enable `-pthread` only for MT builds in other configurations.
- Retired `tasking` category and library from build.
- Removed obsolete G4gl2ps module and library from build.
- Added `--gcc-toolchain` option for CXX and CC in Linux-clang.
- Added `-diag-disable=10441` option to Linux-icc, to disable Intel/icc compiler deprecation message.
- Silence ld warnings in Darwin setups.
- G4VIS_BUILD.gmk, G4VIS_USE.gmk: handle vis/ToolsSG by default.
- Replaced use of deprecated sprintf() with snprintf() in liblist.c tool. Fixed gcc compilation warnings.

### Analysis

- Implemented support for writing analysis objects (histograms, profiles, n-tuples) in a file multiple times: with Root output type, the object cycle number is attributed automatically; with other output types that do not support object cycles, the object name is appended with `_vN`, where `N` is the number of the write cycle, when the object is written more than once; no extension is added when the object is written for the first time (cycle 0).
- Added new UI commands for analysis file management, supporting also multiple write with/without calling write and/or reset in between two runs: `/analysis/openFile, write, closeFile` and `reset` `/analysis/setDefaultFileType`.
- Implemented new analysis manager List functions and associated commands: `/analysis/list [onlyIfActive]`, `/analysis/xy/list [onlyIfActive]` where `xy = h1, h2, h3, p1, p2, ntuple`.
- Added UI commands for visualization: `/analysis/hn|pn/getVector`.
- Internal changes:
  - Replaced G4TNtupleDescription, G4RootPNtupleDescription structures with classes more suitable for adding members for handling n-tuple cycles.
  - Changed namespace for g4tools code from `tools` to `toolx` for externals.
  - Added G4RootRFile type = a tuple for the Root read file including its directories, analogue to G4RootRFile for Root output, used now in the G4RootRfileManager::fRFiles map instead of tools::rroot::file. This allows deleting file directories in the class destructor, and should fix a reported Coverity defect.
  - Refactored analysis manager methods for file handling from the output specific managers in the common implementation in G4ToolsAnalysisManger. Besides code simplification, this guaranties identical behaviour with generic analysis manager.
  - Introduced a common implementation for histogram/profiles manager.
    New classes:
    - G4VTBaseHnManager - replaces G4VHn|PnManager.
    - G4THnToolsManager - replaces G4H*|P*Manager classes.
    - G4THnMessenger - replaces G4H*|P*Messenger class.
    - G4HnDimension - helper type to manipulate ndim, xmin, xmake parameters.
    Updated classes:
    - G4THnManager: added a vector of pairs of histogram and information as a data member to simplify the access when both objects are used.
    - Updated HnInformation structures functions to use compacted parameters.
    - Updated functions in G4AnalysisUtilities.
    - In all messenger classes, replaced the usage of the analysis messenger helper with private helper functions.
    - G4Plot* classes moved from `management` in `hntools`.
    Removed classes:
    - G4VH1Manager, etc. for H2, H3, P1, P2.
    - G4H1Manager, etc. for H2, H3, P1, P2.
    - G4H1Messenger, etc. for H2, H3, P1, P2.
    - G4ToolsAnalysisMassenger, G4FileMessenger.
    - G4BaseHistoUtilities.
  - Use geant4_category_modules in CMake script to optionally add G4hdf5 module to category.
- Fixes:
  - Fix in applying units in `create` and `set` UI commands.
  - Fixes in deleting files: do not delete (not empty) main n-tuple files with generic analysis manager, delete empty n-tuple csv and xml files created on the main thread. Fix in deleting files (root): do not delete the final (merged) file when only n-tuples are present.
  - Added a protection against nullptr in G4VAnalysisManager::GetNofNtuples(). Addressing problem report #2518.
  - Applied clang-tidy fixes.
  - Fixed compilation warnings on gcc-12.
  - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
  - Fixed reported Coverity defects.

### Digitization & Hits

- Added support for ntuple merging in G4TScoreNtupleWriter; it can be activated with G4TScoreNtupleWriter::SetNtupleMerging().
- Canonicalise implementations of custom new() and delete() operators that use G4Allocator. Removed un-needed/duplicated checks on static allocator creation in member functions.
- Applying standard clang-tidy plus range-based for and Boolean simplification fixes in scoring classes. General code tidy and modernization: use consistent, grouped ordering of public-protected-private members; do not override virtual members when no difference to base class implementation; use delegating constructors to remove duplicated code; use C++ Boolean true/false keywords.
- G4VScoringMesh: fixed reported Coverity defects for use of `auto&`. Some minor code cleanup.
- Removed large commented-out blocks of dead codein `utils` module.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Electromagnetic Processes

- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Resolved internal sub-modules dependency inconsistencies.
- Adjoint:
  - G4AdjointComptonModel, G4AdjointCSManager: use updated interface to cross-section from G4VEmProcess.
  - G4AdjointBremsstrahlungModel: use updated interface to G4EmModelManager.
  - Fixed defects reported by Coverity in G4AdjointCSManager, to use `auto&`.
- DNA:
  - Added G4DNAPolyNucleotideReactionProcess and G4VDNAHitModel classes for DNA damage applications.
  - Added nitrogen models from PTra code.
  - Prefer pointer to `const G4Material` where possible. Removed useless `const_cast` of G4VSensitiveDetector.
  - Optimised IRT-syn model, use reaction radius and reaction type from the reaction table.
  - Fixed issue in IRT model: if the first IRTSampling won't give any reactions, stop the simulation; no StepProcessor set. Minor correction of IRT-syn model (chemistry): contact reactions should not happen after `1 ps`.
  - Deleted G4VReactionType, G4DNAReactionTypeManager, G4DNAIRT_geometries, G4DNATotallyDiffusionControlled and G4DNAPartiallyDiffusionControlled.
  - G4ITTransportation: Make PrepareState() more function-like, expect semicolon.
  - G4DNAPolyNucleotideReactionProcess: some code restructuring.
  - Added condition of water material for the OUTSIDE_OF_MOTHER_VOLUME warning in G4DNAMolecularDissociation::DecayIt().
  - Added protection in G4DNACPA100IonisationModel for cumulative cross-section interpolation.
  - Added protection for HighEnergyLimit/LowEnergyLimit in G4DNARPWBAIonisationModel and G4DNARPWBAExcitationModel.
  - Added flag `OctreeFinder` in IRT_syn's Initialize() method.
  - Added parameters including the chemical molecules and reaction list involved in the radiolysis.
  - Modified the macro in G4Molecule and G4ITType for linker problems on Windows.
  - Save local instances for recurrent access to particle definition in G4DNAMillerGreenExcitationModel, G4DNARuddIonisationExtendedModel and G4DNARuddIonisationModel.
  - Revised code to use G4Pow and G4Log consistently.
  - In G4DNARuddIonisationExtendedModel, do not include ions that are not defined in G4DNAGenericIonsManager; corrected DNA ion definitions.
    Fixed common work between DNA physics and radioactive decay module; modification of the model scaling. Relation to the carbon ion is used for any ion, which has no data; low-energy limit is used now more correctly; all ions are stopped but not killed, as they may have radioactive decay at rest.
  - Fix in G4KDTree algorithm. Addressing problem report #2235. Minor code cleanup.
  - Added G4VUserBrownianAction class, used in G4DNABrownianTransportation and in G4DNAMolecularDissociation.
  - Use `int64_t` for molecules width integer types.
  - Added `fResetScavenger` data member in G4SchedulerMessenger.
  - Incorporation of model based on RPWBA to transport protons at `100-300 MeV`.
  - Added G4DNARPWBAExcitationModel and G4DNARPWBAIonisationModel.
  - Updated data structure to improve performance of the mesoscopic model.
  - Change scavenging filter of the IRT beyond `1 us`.
  - Incorporation of models based on RPWBA (G4DNARPWBAExcitationModel and G4DNARPWBAIonisationModel) to transport protons at `100-300 MeV`.
  - Updated data structure to improve performance of the mesoscopic model.
  - Use `thread-local` flag in G4VMoleculeCounter.
  - Replaced `std::getenv()` calls for data variables with G4FindDataDir() in data readers.
  - G4DNAUeharaScreenedRutherfordElasticModel: code cleanup; introduced low and high energy limit for the model; removed misleading G4Exception.
  - G4DNAExcitation, G4DNAVibExcitation, G4DNARotExcitation: class cleanup according to the recent G4VEmProcess base class; model headers are moved to source; introduced C++11 features.
  - Defining G4CT_MAX_COUNT for changing "compile time counter" depth to fix build errors on NVHPC compiler.
  - Added missing headers inclusions for self-consistency.
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used in G4ITNavigator2.
  - Fixed Coverity reported defects.
- High Energy
  - G4hPairProduction, G4hPairProductionModel: removed not needed methods.
- Low Energy
  - G4LivermoreGammaConversionModel, G4LivermorePhotoElectricModel and G4LivermoreGammaConversion5DModel: set Spline interpolation for EPDL97.
  - G4Rayleigh scattering moved boundary between low and high energy table from `100 keV` to `150 keV` to be coherent with G4GammaGeneralProcess.
  - G4UAtomicDeexcitation, G4AtomicTransitionManager, G4ShellData, G4AugerData: added de-excitation for heavy elements `Z=101-104`; removed commented lines; improved comments; improved code format; use pre-increment.
  - G4AtomicTransitionManager: read fluorescence data using new interface G4EmParameters::FluoDirectory().
  - G4PhotoEffectAngularGeneratorPolarized: include factor of 1/8 for L-shell differential cross-section. Addressing problem report #2293.
  - G4LivermoreComptonModel: minor clean-up.
  - Fixed use of potential uninitialised pointer in G4AtomicDeexcitation::GenerateParticles(..).
  - Replaced `getenv()` calls for data variables with G4FindDataDir() in data readers.
  - Fixed exception printout in Livermore models.
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used in G4BoldyshevTripletModel::SampleSecondaries() and in G4Generator2BN::SampleDirection().
  - Fixed Coverity warnings.
  - Removed Latin-1 characters from description in banners.
- Muons
  - G4MuonToMuonPairProductionModel, G4MuonToMuonPairProduction: new model and process for muon pair production by muon.
  - G4MuIonisation: added selection of the model for energy loss fluctuations. Use G4MuBetheBloch model above `0.2 MeV`.
  - G4MuBremsstrahlungModel: moved low energy limit from `1 GeV` to `100 MeV`.
  - G4MuPairProductionModel: moved low energy limit from `1 GeV` to `850 MeV`.
  Some code cleanup: formatting, removed extra space lines.
- G4MuPairProductionModel, G4MuPairProduction: reorganised methods; use G4lrint.

- Standard
  - G4UrbanMscModel: moving safety computation before step limitation algorithms in order to save few instructions; should not affect results. Optimised some code. Added two extra class members. Improved code comments. Extended cache data with 5 variables for positrons; removed unused headers; minor saving of instructions.
    Removed computation and use of rangecut for step limitation: this change affects only EM option3 physics, making results closer to option4 and providing some CPU speedup.
  - Fixed stopping power parameterisation below lowest energy point; apply unit factor to material vector and not to data inside each element vector. Implemented data tables for materials and not material-cut-couples; provided non-zero dEdx for ions with `Z > 80`. Included debug printouts protected by verbosity.
  - G4eIonisation, G4hIonisation, G4ionIonisation: added selection of the model for energy loss fluctuations.
  - G4hIonisation, G4ionIonisation: updated initialisation to be coherent with possible creation of combined DNA/standard physics-list: do not modify low energy limit for a model; define high energy limit considering high energy limit set in the physics-list and the mass of the particle.
  - G4BetheBlochModel, G4BraggIonModel, G4LindhardSorensenIonModel: use the same computation of effective charge and energy at a step inside method CorrectionAlongStep(..); improved range of ions in the default EM physics configuration.
  - G4AtimaEnergyLossModel, G4BetheBlochModel, G4BraggIonModel, G4LindhardSorensenIonModel: do not set effective charge to the model of energy loss fluctuation inside CorrectionAlongStep(..) method, it is done by G4VEnergyLossProcess. Addressing problem report #2495.
  - G4LindhardSorensenIonModel: fixed CorrectionAlongStep() computations at low energy.
  - G4PairProductionRelModel, G4eBremsstrahlungRelModel, G4PairProductionRelModel and G4eBremsstrahlungRelModel: added inclusion of headers of G4Exp, G4Pow to to make translation unit self-consistent.
  - In G4WentzelVIRelModel, G4WentzelOKandVIxSection, G4LindhardSorensenIonModel and G4ICRU49NuclearStoppingModel, use G4AutoLock.
  - G4PEEffectFluoModel: implemented usage of `PhotoeffectBelowKShell` flag, allowing to enable/disable photo-electron production below K-shell of an atom; by default this is enabled, so it affects the results; if disabled, some CPU improvement may be expected.
  - G4BetheHeitler5DModel: do not instantiate G4MuonPlus, G4MuonMinus inside the model to allow usage of this class in physics lists without muons.
  - G4eBremsstrahlung, G4hIonisation: improved initialisation.
  - G4eBremsstrahlungRelModel, G4eBremParametrizedModel: code cosmetics.
  - Run clang-tidy, use `nullptr`, default and auto keywords; removed unneeded `nullptr` checks when deleting.
  - Replaced `getenv()` calls for data variables with G4FindDataDir() in data readers.
  - Requires data-set G4EMLOW-8.2.
- Utils
  - New G4TransportationWithMsc specialised transportation process; added related flag to G4EmParameters.
  - G4EmConfigurator implemented model per region for G4TransportationWithMsc. Updated interfaces.
  - G4EmTableType: added third peak energy in the data structure needed for Bremsstrahlung.
  - G4VEnergyLossProcess: fill data structure for Bremsstrahlung type of cross-section only in the master thread; do not repeat it in each thread; removed ineffective cache from run time computation of cross-section.
  - G4EmParameters, G4EmParametersMessenger: added extra Boolean flag for sampling of photoeffect below K-shell, which was introduced in ATLAS.
  - G4EmParametersMessenger: improved instantiation order of UI directories; directories are created only in the master thread. Restored forgotten UI command to set number of bins per decade.
  - G4EmModelManager: updated interface to Initialise() method; removed obsolete method Update().
  - G4VEmProcess, G4VEnergyLossProcess, G4VMultipleScattering: use updated method of G4EmModelManager.
  - G4EmParametersMessenger: restored UI command `/process/em/integral`.
  - G4VEmProcess: updated methods to access cross-section at run time; implemented new virtual method GetCrossSection(); removed unused methods.
  - G4EmProcessSubType: added extra types for muon pair production by muons and dark particles Bremsstrahlung.
  - G4EmCalculator: use updated method from G4VEmProcess.
    Updated computation of ion dEdx. Addressing problem report #2495.
    Added extra flag `applySmoothing` to enable/disable smoothing algorithms to connect low-energy and high energy models; code clean-up. Fixed variable shadowing.
  - G4LossTableManager: fixed selection of energy loss process used by G4EmCalculator.
  - G4EmUtility: a new utility class.
  - G4VMultipleScattering: updated arguments for AddEmModel(..), SetEmModel(..), and EmModel(..) methods from G4VEmModel* to G4VMscModel*. Removed two virtual calls.
  - G4VMscModel: added Boolean flag `useSpline` and setter to allow choosing Spline for transport cross-section.
  - G4LowEnergyEmProcessSubType: added sub-type ID (66) for DNAScavenger process.
  - G4EmTableUtil: new utility to perform common computations at initialisation.
  - G4VEmModel, G4EmCalculator, G4EmConfigurator: use G4EmUtility.
  - G4VEmModel, G4VEmProcess, G4VEnergyLossProcess, G4VMultipleScattering and G4LossTableManager: use new utiity methods; updated sampling of random elements in compounds and random isotopes; code cleanup.
  - G4EmLowEParameters: change default photon database to EPICS2017.
  - G4VEmProcess, G4VEnergyLossProcess: for integral method, use master thread cross-section type and pointers directly; simplifying initialisation.
  - G4EmParameters: update flag to tri-state for enabling it. Added extra parameter: type of fluctuation model.
  - G4EmFluoDirectory: added new enumerator.
  - G4EmParameters, G4EmLowEParameters, G4EmLowEParametersMessenger: introduced directory for the fluorescence data as a parameter, added new UI command, improved information printout.
  - G4EmFluoDirectory: added new enumerator.
  - G4EmParameters, G4EmLowEParameters, G4EmLowEParametersMessenger: introduced directory for the fluorescence data as a parameter; added new UI command; improved information printout.
  - G4EmParametersMessenger: added extra UI command to define fluctuations model.
  - G4VEnergyLossProcess: moved out common computations to G4EmTableUtil; use G4EmDataHandler and removed unused headers/methods. Fixed trivial Coverity warnings. For ions, compute effective charge pre-step and set this value to the model of energy loss fluctuations.
  - G4VEnergyLossProcess, G4EmDataHandler: improved StorePhysicsTable(..) method and debug printouts.
  - Code cleanup with clang-tidy: use default constructors; `nullptr`, `auto` and `using` keywords.
- Xrays
  - G4VXTRenergyLoss: fixed bug in the angle range for fMaxThetaTR.
  - Code cleanup with clang-tidy: use default constructors; `nullptr` and `auto` keywords.

### Error Propagation

- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Event

- Added call to G4GlobalFastSimulationManager::Flush() method in the event loop.
- Canonicalise implementations of custom new() and delete() operators that use G4Allocator.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Externals

- Rationalising externals builds to decouple them from the core module/category definitions.
- CLHEP:
  - Updated to CLHEP version 2.4.6.2.
  - Resolved gcc-12 warnings in Evaluator source.
  - Fixed inconsistencies in Evaluator internal set of units.
  - Add `cstdint` header where `uint32_t` and `uint64_t` are used.
  - Applied patch for building on MinGW. Based on GitHub PR#51.
- Expat:
  - Updated source and build scripts to expat-2.4.9 sources from upstream.
- G4tools:
  - Updated to version 6.1.0
  - Fixed compilation warnings on Intel compiler and Coverity defects.
  - Use thread-safe version of gl2ps-1.4.2. In gl2psPrintPostScriptPixmap(): pass greyscale, nbit in arguments to avoid a dead code issue; in gl2psPDFgroupListInit(), fixed issue for uninitialized pointer read; removed commented out code.
  - sg/text: corrections in update_sg() due to copy-paste error.
  - Moved g4tools code externals from `tools` to `toolx` module. Concerns code related to Qt, Windows, X11, Xt, OpenGL, hdf5, expat, mpi, zlib.
  - In toolx/X11/base_session, check in show_window() that the window is not already mapped.
  - Fixed compilation warnings on Intel compilers.
  - Applied patch for building on MinGW. Based on GitHub PR#51.
- PTL:
  - Updated PTL to version v2.3.3.
  - New/improved support for initialization and finalization routines in ThreadPool.
  - Threading: fix in GetNumberOfPhysicalCpus(), to never return zero.
  - Fixed verbose message to cerr to be protected within verbosity level.
  - Fixes for C++20 compilation warnings and updates to build scripts.
  - Removed outdated TiMemory implementation.
  - Make copy explicit in range loop.
  - General code cleanup/tidy.
  - Minor fixes for macOS/Clang and use as a subproject.
  - Updated CMake install directory for PTL to match recent changes in default install directories in Geant4.
  - Use any existing value of PTL_SANITIZER_TYPE to set the cache value to prevent override.
  - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
  - Coverity fixes.
- ZLIB:
  - Updated source to zlib-1.2.12 sources from upstream, retaining prior Geant4 patches.
  - Suppressed deprecated-non-prototype warnings for compilers that check this.
  - Applied patch for Zlib, to address Valgrind warnings. Based on GitHub PR#43.

### G3toG4

- Replaced sprintf with std::to_string to address macOS 13 deprecation warnings.
- Fixed compilation warnings on Intel/icc compiler for deprecated conversion of string literal to char* in G3EleTable.
- Fixed compilation warning on Intel/icx compiler for variable set but not used in clparse source code.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### General Processes

- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Biasing
  - Fixed defects reported by Coverity in G4BOptnLeadingParticle, to use `auto&`.
  - Fixed compilation warning on Intel/icx compiler for variable set but not used in G4GeometrySampler.
- Cuts
  - G4ProductionCuts: removed unnecessary thread-local variables; code clean-up and simplified.
- Management
  - G4VDiscreteProcess: added virtual method GetCrossSection() needed for integral approach both in hadronics and EM modules. Added virtual method MinPrimaryEnergy(..).
  - G4VRestDiscreteProcess, G4VRestProcess, G4VRestContinuesDiscreteProcess: added protection against arithmetic operations with DBL_MAX. Addressing problem report #2452.
  - G4VProcess: introduced new virtual method GetCreatorProcess().
  - Fixed compilation warnings on Intel/icx compiler for variable set but not used in G4ProcessTableMessenger.
- Optical
  - G4OpBoundaryProcess: calculating reflection/refraction from thin film coating.
    Issuing warning when step size is slightly larger than geometry tolerance, in which case boundary scattering may be incorrect. Addressing problem report #2510.
  - Code cleanup with clang-tidy: use default constructors; auto keyword; remove `void` function argument; don't check for `nullptr` before delete; use operator==() for string comparisons. Prefer pointer to `const G4Material` where possible.
- Parameterisation
  - Added flush() method to the fast simulation model. This method allows to process the input buffer of the fast simulation model before the end of an event. It is used when particles are grouped together before the processing. The 'flush' is triggered inside the event loop of G4EventManager, when the stack is empty. The fast simulation model may add secondaries to the stack, which will then be processed by Geant4.
  - G4FastStep: code clean-up; delete copy constructor and operator=().
  - G4FastSimHitMaker: making it compatible to command-based scorer.
- Solid State
  - In G4LatticeReader, replaced `getenv()` calls for data variables with G4FindDataDir()
- Transportation
  - Revised implementation of G4CoupledTransportation: now inheriting from G4Transportation and removed duplicated variables and methods; use new constant `kMassNavigatorId` from G4TransportationManager.
  - New class G4TransportationParameters to hold looper parameters & others. This class has to be created in master to hold the values of all looper parameters for G4Transportation and derived classes.
  - G4CoupledTransportation: set flags from G4Transportation: replaced `fFirstStepInAnyVolume` with `fFirstStepInVolume`; replaced `fAnyGeometryLimitedStep` with `fGeometryLimitedStep`; removed wrong check in case of zero steps.
  - G4Transportation: removed problem check in case of zero steps; set step status on volume boundary. Removed non-working check for any field.
  - Moved G4UserSpecialCuts to `physics_lists/constructors/limiters` module.
  - Removed useless `const_cast` of G4VSensitiveDetector.
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used.

### Geometry

- Fixed compilation warnings on Intel-icx compiler for variables set but not used.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Magnetic Field
  - Revised G4FieldManager to ensure that epsilon_min/_max parameters are less than a 'maximum accepted' accuracy (now=0.02) to ensure robust behaviour of the integration. Improved their set methods, adding warnings with corrective behaviour, and a fatal exception in case of values outside the accepted range. To cope with needs of legacy applications or existing needs for performance, the value of the 'ceiling' maximum accepted accuracy can be modified using the new static method G4FieldManager::SetMaxAcceptedEpsilon(maxAccept, softFail) but must remain under or equal to a final ceiling currently of `fMaxFinalEpsilon=0.02`.
  - Introduced G4BorisScheme and G4BorisDriver, that implement the Boris integration scheme for motion in an electromagnetic field. It is a 2nd order symplectic integration method, created as part of GSoC 2022.
- Management
  - Get rid of heap allocations in G4BoundingEnvelope.
  - G4ReflectedSolid: added GetCubicVolume(), GetSurfaceArea().
  - Added headers for directly used classes from `global/HEPGeometry`.
- Navigation
  - The `/geometry/run/test` UI command can now check for overlaps in parallel worlds if `/geometry/run/check_parallel` is set to `true`.
  - Improved diagnostic message in G4MultiLevelLocator, now printing the stored information on trial integration steps in one error case. Refresh candidate intersection point when needed.
  - G4Navigator: minor code improvements in ComputeSafety(), ComputeStep(), and LocateGlobalPointAndSetup().
  - Added constant `kMassNavigatorId` in G4TransportationManager and make use of it in G4SafetyHelper.
- Solids (Boolean)
  - G4DisplacedSolid: added GetCubicVolume(), GetSurfaceArea().
  - G4SubtractionSolid: fixed problem of non-zero volume for null resulting objects in GetCubicVolume().
- Solids (CSG)
  - G4Cons: define private enums within unnamed namespace, to overcome C++ ODR (One Definition Rule) violation.
- Solids (Specific)
  - G4GenericTrap: implemented calculation of volume using analytical expression in GetCubicVolume(); in GetSurfaceArea(), improved calculation of the area of lateral faces; removed private function GetFaceCubicVolume(); private functions GetFaceSurfaceArea(), GetTwistedFaceSurfaceArea() replaced with private function GetLateralFaceArea().
  - G4Ellipsoid: in LateralSurfaceArea(), enhanced calculation of the lateral surface area.
  - G4VTwistedFaceted, G4TwistedBox, G4TwistedTrd: optimised calculation of volume and surface area.
  - G4VTwistedFaceted: fCubicVolume, fSurfaceArea made protected; GetCubicVolume() and GetSurfaceArea() no longer inlined and moved to source.
  - G4TwistedTubs: implemented GetSurfaceArea() based on analytical expressions; added private functions GetLateralArea(), GetPhiCutArea().
  - G4Hype: use analytical expression in GetCubicVolume() and GetSurfaceArea().
  - G4VTwistedFaceted: use numerical evaluation of a single integral to calculate lateral face surface area.
  - G4ExtrudedSolid, G4UExtrudedSolid: added default values for parameters in the constructor with two z-sections. Added default constructor to ZSection.

### Global

- Define G4lrint as `std::lrint`; removed unused G4lint and G4rint.
- Imported from `tasking` module all core interfaces that only depend on PTL.
- Corrected G4ErrorPropagatorData destructor.
- Additional clang-tidy fixes for header-only code.
- Moved implementation details of G4Exception to source file. Removed obsolete re-declaration of G4Exception in G4Timer.
- G4FindDataDir: correction for windows runtime, G4MULTITHREADED flag. Use the environment variable GEANT4_DATA_DIR as top data dir.
- Applied patch for building on MinGW. Based on GitHub PR#51.
- Fixed compilation warning on Intel-icx compiler for variable set but not used in G4AnalyticalPolSolver::QuarticRoots().
- Make dataset environment variables optional in CMake builds.
- Removed obsolete CMakeLists.txt script in `management` module. Declare `HEPGeometry` dependencies as INTERFACE as the module is header-only. Removed dependency on TBB which is not a direct dependency of the global category.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Updated date of release for 11.1.

### Graphical Representations

- HepPolyhedron, G4Polyhedron: added new constructors taking vertices and faces; added derived classes HepPolyhedronTetMesh, G4PolyhedronTetMesh; added SetVertex(), SetFacet() functions and made SetReferences() and InvertFacets() public methods. Implemented JoinCoplanarFacets() function, move constructor and move assignment operator.
- Implemented faster version of HepPolyhedronTetMesh.
- Revised HepPolyhedronEllipsoid, fixed visibility of edges in case of cut ellipsoid.
- G4Visible: added "user" data member `fInfo` from G4VMarker, with access and operator<<() functions, intended to offer the user/developer a way of communicating information.
- G4VVisManager: added new virtual function DrawGeometry(), drawing a geometry tree starting at the specified physical volume; this base class implementation is empty, i.e., the derived class implementation is not forced.
- Fixed compilation warning on Intel/icx compiler for variable set but not used in HepPolyhedron::FindNodeNormal(). Fixed minor Coverity defect in operator<<().
- G4VisExtent: in Transform(), use `const auto&` to avoid copying.
- G4VisAttributes: fixed formatting in operator<<().
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Applied clang-tidy fixes to the code.

### Hadronic Processes

- Replaced `getenv()` calls for data variables with G4FindDataDir() in data readers.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Updated dependencies in CMake script to address warnings from consistency check.
- Cross Sections
  - G4CrossSectionDataStore, G4NeutronElasticXS, G4NeutronInelasticXS: added interfaces needed for G4NeutronGeneralProcess. Implemented new interfaces in G4NeutronCaptureXS.
  - G4TauNeutrinoNucleusTotXsc: new cross-section for tau-neutrinos, based on energy scaled cross-section of muon-neutrinos..
  - G4NeutronElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS: code cleanup; use G4AutoLock.
  - G4ParticleInelasticXS: code cleanup; use G4AutoLock. Fixed cross-section calculation. Addressing problem report #2498.
  - G4VCrossSectionDataSet: added extra interfaces with G4ParticleDefinition and kinetic energy.
  - G4ComponentAntiNuclNuclearXS: fix and extension in methods GetTotalElementCrossSection() and GetInelasticElementCrossSection(); a bug was causing undefined values for, respectively, the total and inelastic cross-sections of anti-proton interactions with light target nuclei (d, H3, He3 and He4); extended to simulation of a light anti-hypernucleus projectile scattering on a target nucleus. Fixed Coverity warning, added checks against nullptr pointers.
  - G4ComponentGGNuclNuclXsc, G4ComponentGGHadronNuclXsc: extension to light hyper-nuclei on hydrogen.
  - G4CrossSectionDataStore, G4VCrossSectionDataSet: removed unused methods.
- Management
  - G4HadronicProcess: implemented integral method. Make access to target nucleus public needed for neutron general process.
  - G4HadXSTypes, G4HadXSHelper: new helper classes.
  - G4HadronicProcessType: added `fNeutronGeneral`.
  - G4HadronicProcessStore: extended Dump() method for hyper-triton and anti_hyper-triton.
- Processes
  - G4NeutronGeneralProcess: new combined process; make it work with QBBC physics-list.
  - G4TauNeutrinoNucleusProcess: new process for tau-neutrino hadronic inelastic physics.
  - G4HadronElasticProcess: extended debug printout.
  - G4NeutronCaptureProcess: avoid double instantiation of the cross-section.
  - Prefer pointer to `const G4Material` where possible.
- Utilities
  - G4Fragment: added `IsLongLived` flag and Get/Set methods needed for the de-excitation module; clean-up inline methods. Fixed computation of binding energy for hypernuclei; added a new private method to recompute ground state mass, excitation energy and to check consistency of input; left inlined only simple methods; added new methods SetZAandMomentum(..) and RecomputeGroundStateMass(); improved comments and warning messages.
  - G4Nucleus: corrected method GetN_asInt() for the case of hypernuclei.
  - G4HadronicParameters: added flags for switching on/off the integral approach for hadron elastic and, independently, inelastic processes; by default, it is enabled for inelastic. Added flag to enable general neutron process. Moved G4Threading header to source.
  - Added option to G4HadronicParameters to control the diffraction dissociation for nucleon projectile on target nucleus with baryon number greater than 10: by default, both projectile and target diffraction are switched off (but they are both active in the case of target nucleus with baryon number below or equal to 10; if instead the flag is set to `true`, then both projectile and target diffraction are activated regardless of the target nucleus).
  - G4KineticTrack, G4HadSecondary, G4ReactionProduct, G4DecayKineticTracks, G4DecayStrongResonances: propagate the information on parent resonance.
  - G4HadDataHandler: new data class.
  - G4NuclearPolarization: fixed Coverity warning.
- Abla
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used in G4AblaDataDefs header.
- Bertini Cascade
  - G4NumIntTwoBodyAngDst: corrected incomplete initialization of a vector. Addressing problem report #2515.
  - G4TwoBodyAngularDist: corrected the charge exchange reaction of pion+ on neutron producing in the final state pion0 and proton. Addressing problem report #2516.
  - Fixed wrong comparison between two arrays in findCrossSection(..) for G4CascadePPChannel, G4CascadeNPChanneland G4CascadeNNChannel.
  - Fixed compilation warning on gcc-12.
- Binary Cascade
  - G4GeneratorPrecompoundInterface, G4BinaryCascade: propagate the information on parent resonance (in the ApplyYourself() method, from G4ReactionProduct to G4HadSecondary; in other methods, from G4KineticTrack to G4ReactionProduct).
  - G4GeneratorPrecompoundInterface: in PropagateNuclNucl() method, in the case of anti-nucleus projectile, convert also lambdas into anti-lambdas after the de-excitation (which assumes a projectile nucleus).
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used in G4BinaryCascade.
- De-excitation
  - G4Evaporation, G4UnstableFragmentBreakUp: completed fix about production of unphysical fragments; improved debug printout. Addressing problem report #2355.
  - G4EvaporationChannel, G4Evaporation: added limitation (`A < 30`) on decay of unphysical fragments, allowing for removal of light unphysical states and providing improved isotope production for the spallation fragments.
  - G4EvaporationChannel, G4EvaporationProbability, G4VEmissionProbability, G4VCoulombBarrier, G4CoulombBarrier: use new method from G4Fragment.
  - G4VEvaporationChannel, G4EvaporationChannel, G4VEmissionProbability and G4EvaporationProbability: improved inverse cross-section parameterisation at threshold.
  - G4PhotonEvaporation: fixed situation when excited fragments are created with excitation energy not corresponding to level energies from G4LEVELGAMMADATA. Addressing problem report #2434. Also fixing event non-reproducibility for the case when radioactive decay is enabled on top of any physics list. Simplified handling of floating levels. For floating levels check if levels with the same energy can be used for sampling transitions; improved use of mutex; code clean-up.
  - G4EvaporationProbability: reduced usage of cache.
  - G4ExcitationHandler: use IsLongLived() flag from G4Fragment to decide if the de-excitation of the fragment should be stopped.
    Introduced de-excitation of fragments with lambda inside. Added protections that prevents potential crashes and large energy non-conservations in case of hypernuclei and anti-hypernuclei projectiles. Added extra sanity check for negative value of lambda inside a fragment. Note: there are still a few warnings of rejected candidate final-states with off-shell masses and few GeV energy non-conservations (implying a resampling of the final-state) in the case of light hypernuclei and anti-hypernuclei projectiles, that need further investigation.
  - G4AtomicTransition: extended upper limit of atomic de-excitation from `Z=100` to `Z=104`.
  - G4FermiCoulombBarrier: new class for Coulomb barrier according to prescription. Updated G4FermiDecayProbability and G4FermiFragment accordingly.
  - G4VEmissionProbability: limit number of bins for numerical integration to 50.
  - G4VEmissionProbability: updated sampling of the emitted fragment energy needed. Addressing problem report #2443. Fixed sampling of the tail of distributions; added numerical protections. Stronger limit on accuracy of integrated probability; improved debug printout.
  - G4CoulombBarrier: tuned parameters.
  - G4LevelManger, G4NuclLevel: removed verbose printouts; code clean-up.
  - G4NuclearLevelData: use G4AutoLock.
  - Use G4BestUnit in G4DeexPrecoParameters::StreamInfo().
  - G4StatMFChannel: fixes in the solver of the equation of motion of the multi-fragmentation model.<
  - Code cleanup.
- Elastic scattering
  - G4AntiNuclElastic: extension of the SampleInvariantT() method for the simulation of a light anti-hypernucleus projectile elastic scattering on a target nucleus. Note: most of the considered light anti-hypernuclei projectiles have baryon number equal to -4 : it is assumed that their properties are similar to anti-He4, therefore their elastic scattering is set-up as for anti-He4 elastic nuclear scattering. These properties can be improved in the future if theoretical estimations will be available.
- Electromagnetic Dissociation
  - G4EMDissociation: updated according to G4Fragment modifications.
- Fission
  - G4FissLib, G4LFission: use consistent thresholds for relative (10% instead of 5%) and absolute (350 GeV instead of 250 GeV) energy non-conservation check.
- INCLXX
  - G4INCLXXInterface: introduced a protection against unphysical nuclear remnants (i.e. unbound systems) and, if this is the case, resample the collision.
  - G4INCLParticle, G4INCLEventInfo, G4INCLNucleus, G4INCLDeltaDecayChannel, G4INCLXXInterface: set and propagate the information on parent resonance.
  - G4INCLPiNElasticChannel: erase the information on parent resonance in the case of charge exchange.
  - G4INCLPiNToDeltaChannel, G4INCLPiNToOmegaChannel, G4INCLPiNToEtaChannel, G4INCLPiNToMultiPionsChannel, G4INCLNpiToLKpiChannel, G4INCLNpiToLK2piChannel, G4INCLNpiToNKKbChannel, G4INCLNpiToSK2piChannel, G4INCLNpiToSKpiChannel, G4INCLNpiToSKChannel, G4INCLNpiToLKChannel, G4INCLNpiToMissingStrangenessChannel: erase the information on parent resonance in inelastic channels (where the nucleon and pion initial-state objects are re-used for the final state).
  - Fixed compilation warnings on Intel/icx compiler for variables set but not used.
- Lend
  - Fixed potential use of pointer after free in nf_utilities/nfu_realloc(..) function.
  - Applied patch for building on MinGW. Based on GitHub PR#51.
  - Replaced use of sprintf() with snprintf(), to fix deprecation compilation warnings on macOS-13 SDK.
- Lepto-nuclear
  - G4(A)NuTauMucleusNc(Cc)Models: new final-state models for tau and anti-tau neutral and charged current neutrino-nucleus interactions.
  - G4ElectroVDNuclearModel: added protections against null pointers to gamma cross-section and material, responsible for rare crashes.
- Particle High Precision
  - Removed environment variables G4PHPTEST, G4PHPTEST2 and NeutronHPCapture, associated getenv() calls and associated debug code, as no longer used and found to slow down the code significantly. Addressing problem report #2501.
  - G4ParticleHPContAngularPar: added protection against zero probability for both discrete and continuous emission.
  - G4ParticleHPThermalScatteringNames: updated to use new ThermalScattering data in G4NDL-4.7.
  - Fixed compilation warnings on Intel/icx compiler for variable set but not used in G4ParticleHPInelasticCompFS and G4ParticleHPFFFissionFS.
  - Use `auto` for iterators in G4ParticleHPFFFissionFS::GetAFissionFragment().
  - Fixed Coverity reports.
- Parton-String
  - G4FTFModel: implemented extension of the model to deal with the annihilation of light anti-hypernuclei. In methods AdjustNucleonsAlgorithm_beforeSampling() and ComputeNucleusProperties(), check if the residual is a single nucleon (or lambda) or a pair of nucleons (or lambdas); also use the absolute value of the nuclear residual charge to take into account the case of anti-nuclei projectiles.
  - G4FTFAnnihilation: reorganization of Create2QuarkAntiQuarkStrings() and Create3QuarkAntiQuarkStrings() methods, in order to better handle unphysical configurations that need to be rejected. The algorithm has been also optimised by changing the order of the sampling: light-cone variables are sampled first, then transverse momenta. The positions of quark and anti-quark in strings have been corrected: this is expected to improve the kinematical properties of the produced hadrons.
  - G4FTFTunings: new singleton class to allow the possibility to specify alternative sets of FTF parameters, called "tunes". Moved into this class some special, internal classes, useful for tuning of parameters, that were originally in G4FTFParameters.
  - G4FTFTuningsMessenger: new messenger class for G4FTFTunings.
  - Allow control of diffraction for baryon number greater than 10 in G4FPFParameters. The option comes from G4HadronicParameters and the default behaviour remains the same (i.e. off). Use of the new G4FTFTunings class; instead of having one, single set of parameters, it has now an array of set of parameters, with each element corresponding to one specific "tune". Clean-up of the class by moving to G4FTFTunings some code.
  - G4HadronBuilder: added a new argument in constructor, and a new data member to the class. This is needed to set a special mixing of pseudo-scalar and vector mesons for s-sbar mesons. Introduced to describe phi-meson production in proton-proton interactions measured by NA61/SHINE.
  - G4VLongitudinalStringDecay: tuned the probability of pseudo-scalar meson production, to describe K*0 meson production in proton-proton interactions according to NA61/SHINE data. Introduced also a new parameter (probability of pseudo-scalar meson production in s-sbar mesons) to increase the phi-meson yield in proton-proton interactions. Fixed a bug in mixing eta_prime and phi mesons in the quark systems d-dbar, u-ubar and s-sbar. Brought back the value (0.5) of the mixing between (rho0 and omega) vector mesons as it was originally before version 10.0. This should describe better NA61/SHINE experimental data. The change has some effect on the hadronic showers, giving that the various vector mesons have different decay rates into neutral pions.
  - G4VPartonStringModel: added debugging information on the number of lambdas for residual projectile hypernuclei.
  - G4HadronBuilder, G4VLongitudinalStringDecay, G4LundStringFragmentation, G4QGSMFragmentation, G4ExcitedStringDecay: in order to describe the NA61/SHINE data on K*0 and phi mesons production in proton-proton interactions, different probabilities were introduced for the ratios between pseudo-scalar and vector meson production. These ratios are the following: for ordinary mesons from u- and d- quarks, the ratio is 0.5/0.5; for strange mesons the ratio is 0.4/0.6; for mesons with hidden strangeness (as for phi), the ratio is 0.3/0.7. This approach is similar to the one adopted in Pythia8. It is also assumed that the probabilities for hidden strangeness (0.3/0.7) apply for mesons with hidden charm and beauty.
  - G4LundStringFragmentation: introduced few changes for a special treatment of the last string decay in the case of `ss-q` or `ss-qq, ss-sbar sbar` last string decay. This improves the yield of `anti-Xi` hyperons in proton-proton interactions according to the NA61/SHINE data.
    Moreover, some parameters have been tuned to better describe the NA61/SHINE data on various particles produced in proton-proton interactions.
  - G4DiffractiveExcitation: improved ExciteParticipants_doChargeExchange() method: for a projectile meson in the case of quark exchange, a more correct ratio between pseudo-scalar and vector mesons is included; the pion after the exchange can transform into `pi0, eta, eta', rho0` and omega mesons. This allows to improve the description of leading particle spectra in meson-nucleon interactions.
  - G4DiffractiveSplitableHadron: fixed rare warnings about large energy non-conservations (which are rejected and require resampling) seen with FTF when dealing with charm and bottom hadron inelastic nuclear interactions.
  - Fixed compilation warning on Intel/icx compiler for variables set but not used in G4QGSMSplitableHadron and G4QGSParticipants.
- Pre-equilibrium
  - G4PreCompoundModel: in the case of hypernuclei do not perform pre-compound emission but only equilibrium emission.
- QMD
  - Fixed compilation warning on Intel/icx compiler for variable set but not used in G4QMDMeanField.
- Radioactive Decay
  - G4ECDecay: added protection against negative neutrino energy. Addressing problem report #2509.
    Removed negative neutrino energy warning but keep protection against negative values. Negative values are due to negative Q values from ENSDF for only four nuclides.
  - G4ECDecay, G4ITDecay: extended upper limit of atomic de-excitation from `Z=100` to `Z=104`.
  - G4RadioactiveDecay: removed SetICM() method, as deprecated for some time and no longer used. ICM now set exclusively in G4PhotonEvaporation. Added printout of the flag of atomic relaxation.
  - G4RadioactiveDecayMessenger: removed icmCmd corresponding to SetICM() above.
  - Cosmetic changes in G4RadioactiveDecay::StreamInfo().
- Theo_High_Energy
  - G4TheoFSGenerator: propagate the information on parent resonance (in the ApplyYourself() method, from G4ReactionProduct to G4HadSecondary).
    Simplified treatment for low-energy inelastic nuclear reactions of light hypernuclei (needed because Bertini and Binary intra-nuclear cascade models are not applicable for these projectiles). Note that for light anti-hypernuclei, FTF works fine down to zero kinetic energy.

### Intercoms

- Applied set of clang-tidy modernize, readability and performance fixes.
- Always expand path argument to ExecuteMacroFile() using FindMacroPath(). Based on GitHub PR#40.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Interfaces

- G4InteractorMessenger: prevent propagation of `/gui/*` commands to workers.
- Applied patch for building on MinGW. Based on GitHub PR#51.
- Fixed compilation warning on Intel compiler for shadowing data.
- Use geant4_module_sources to add optional sources in CMake script. Added required G4VIS_USE_VTK_QT flag here instead of `Vtk` visualization module. Added dependency on Qt5 Widgets to `common` sub-module CMake script.
- Fixed compilation warnings on Intel/icc for deprecated conversion of string literal to char* in G4UIXm.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Materials

- G4Material: added an extra check on number of atoms in method AddElementByNumberOfAtoms(..). Addressing problem report #2514.
- G4MaterialPropertyVector, G4OpticalMaterialProperties: organise material property vectors in increasing order of energy. Modified from GitHub PR#42.
- G4MaterialPropertiesIndex, G4MaterialPropertiesTable, G4SurfaceProperty: added parameters to specify optical photon transport through thin film coating.
- G4AtomicShell: added extra data for `Z=101-104`.
- G4AtomicShell, G4AtomicShell_XDB_EADL: changed format of internal tables allowing to see differences in a clearer way.
- Corrected G4UCNMicroRoughnessHelper destructor.
- G4NistMaterialBuilder: fixed bio-medical material descriptions for G4_ADENINE, G4_GUANINE, G4_CYTOSINE, G4_THYMINE, G4_DEOXYRIBOSE, and added G4_PHOSPHORIC_ACID.
- Applied set of clang-tidy modernize, readability and performance fixes.
- G4NistManager, G4NistMaterialBuilder, G4NistElementBuilder: use G4AutoLock for code simplification.
- Replaced `getenv()` calls for data variables with G4FindDataDir() in G4IonStoppingData, G4MicroElecMaterialStructure and G4OpticalSurface.
- G4CrystalExtension: fixed Coverity warning and minor clean-up.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Parameterisations

- GFLASH:
  - Fixed compilation warning on Intel/icx compiler for variable set but not used in GFlashShowerModel::ElectronDoIt().
  - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Particles

- Changed halflife threshold for nuclide creation to be consistent with lifetimes in nuclear de-excitation code. In G4NuclideTable, changed `threshold_of_halflife` from `1000 ns` to `1 ns`.
- In G4NuclieTable, replaced `getenv()` calls for data variables with G4FindDataDir().
- G4NuclideTableMessenger: added command `/particle/manage/nuclide/min_meanlife` corresponding to G4NuclideTable::SetMeanLifeThreshold(). Default minimum mean life is `1.0 ns`. In `/particle/nuclideTable/min_halflife` changed default minimum half-life to `0.693 ns`.
- Changed half-life threshold for nuclide creation to be consistent with lifetimes in nuclear de-excitation code; in G4NuclideTable constructor, change `threshold_of_halflife` from `1000 ns` to `1 ns`.
- Use nuclide mean-life instead of half-life in G4NuclideTable in order to be consistent with ENSDFSTATE data, which uses mean-life. Provided two new methods, SetMeanLifeThreshold() and GetMeanLifeThreshold() so that the life-times can be accessed as either half-life or mean-life.
- G4Triton, G4AntiTriton: corrected the lifetime value for triton and anti_triton: the half-life (12.32 years) was incorrectly used instead of the mean lifetime (17.774 years) for triton, whereas the anti_triton was incorrectly treated as stable.
- Removed obsolete and unused G4DynamicParticleFastVector type alias.
- G4HyperNucleiProperties: optimization improvement and minor clean-up.
- Replaced `reinterpret_cast` with `static_cast` where possible.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Fixed compilation warning on Intel/icx compiler for variable set but never used in G4MuonRadiativeDecayChannelWithSpin.
- Minor code formatting.

### Persistency

- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- mctruth: added headers for directly used classes from `global/HEPGeometry`.

### Physics lists

- Updated public/private dependencies for consistency in CMake script and added missing dependency
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
- Constructors:
  - Replaced `getenv()` calls for data variables with G4FindDataDir() in data readers.
  - decay
    - G4DecayPhysics: added instantiation of singletons for physics.
    - Added calls to G4EmBuilder and G4PhysListUtil in order to prevent from warnings on decays of light hypernuclei, in the case of simplified custom Physics Lists.
  - electromagnetic:
    - G4EmModelActivator: fixed mechanism to define PAI model per region.
    - In G4EmStandardPhysics_option3, G4EmStandardPhysics_option4, G4EmPenelopePhysics, G4EmStandardPhysicsSS, and G4EmLivermorePhysics use G4LinhardSorensenIonModel for GenericIon.
    - Adding possibility to enable new G4TransportationWithMsc for multiple-scattering. Enabled by default in G4EmStandardPhysics_option1.
    - G4EmBuilder: enable internal stepping in G4TransportationWithMsc if requested.
      Added G4Lamda, G4AntiLambda and G4PionZero to the minimal EM particle list to avoid warnings issued due to new hypernuclei. Added e- and mu- neutrino and anti-neutrino.
      Added minimal list of EM standard particles to all DNA physics variants, to allow enabling of radioactive decay; provides correct printout of EM processes and models. Addressing problem report #2412.
    - G4EmBuilder, G4EmDNAPhysics: instantiate singletons for physics.
    - G4EmLivermorePhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option4: adopt identical configuration for msc, muon, hadron, and ion physics.
    - G4EmLivermorePhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option4, G4EmStandardPhysics: selection of the model for energy loss fluctuation is included in ionisation processes according to the type defined in G4EmParameters.
    - G4EmStandardPhysics, G4EmStandardPhysics_option3, G4EmStandardPhysics_option4: use G4GammaGeneralProcess by default.
    - G4GammaGeneralProcess: implemented new method GetCreatorProcess(). Apply Spline interpolation for tables at low energy (`<150 keV`) and at high energy (`> 100 MeV`).
    - G4EmStandardPhysics_option4: use Penelope ionisation model for e- below `100 keV`.
    - G4EmBuilder: use check on process sub-type, do not substitute G4CoupledTransportation with G4TransportationWithMsc.
    - G4EmDNABuilder: new utility class, which provides instantiation of standard and DNA processes/models; this reduces code duplication for DNA physics, energy intervals for DNA models are defined in one place. Added option2,3,4,6,8 configurations. Added extra utility methods to find or to build electron processes. Introduced constant upper limit of `1 MeV` for DNA models; introduced constant upper limit of `2 MeV` for standard low-energy ionisation; use the same upper limit for DNA excitation and ionisation. Enabling combination of DNA and standard physics processes.
    - Increased upper limit of DNA proton/ion physics from `100 MeV` to `300 MeV` in all DNA constructors.
    - Made G4EmDNAPhysics the base class for DNA physics constructors. Added interface to G4EmDNABuilder.
    - G4EmDNABuilder, G4EmDNAPhysicsActivator: make consistent the configuration of DNA physics on top of standard physics.
    - Simplified code in G4EmDNAPhysics_option1, G4EmDNAPhysics_stationary, G4EmDNAPhysics_option5 and G4EmDNAPhysics_stationary_option4.
    - G4EmDNAPhysics_option6, G4EmDNAPhysics_option8: use "fast" option.
    - G4EmDNAPhysics_option7, G4EmDNAPhysics_stationary_option6, G4EmDNAPhysics_option3, G4EmDNAPhysics_stationary_option2: simplified code.
    - Added G4DNABrownianTransportation, SBS and IRT_syn models in G4EmDNAChemistry_option3.
    - Added used headers in chemistry builders.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics, G4EmMessenger: added muon to muon pair process; use C++11 keywords; suppressed broadcasting of UI commands; moved initialisation class members to the headers.
    - G4EmExtraPhysics: introduced tau-neutrino nucleus processes.
  - hadron_elastic:
    - G4HadronElasticPhysics: use G4HadProcesses utility to build neutron elastic, which allows to use an option of neutron general process.
      Extended nuclear elastic for light hypernuclei and anti-hypernuclei projectiles.
  - hadron_inelastic:
    - G4HadronPhysicsFTFP_BERT, G4HadronPhysicsINCLXX: extension to inelastic nuclear interactions of light hypernuclei (with either FTFP only or FTFP+INCLXX) and anti-hypernuclei (with only FTFP for all energies). Notice that the QGSP string model cannot currently handle nuclear projectiles of any kind.
    - G4HadronInelasticQBBC: use G4HadProcesses utility to build neutron elastic, which allows to use an option of neutron general process.
  - limiters:
    - G4SpecialCuts: added setting of process type `fGeneral` and sub type.
    - G4MinEkineCuts: removed setting of process type `fUserDefined`.
    - G4NeutronTrackingCut: use enumerator for neutron general process instead of hard-coded number. Added check if G4NeutronGeneralProcess is defined to avoid double instantiation of the same cut.
    - Moved G4UserSpecialCuts class from `transportation` module.
    - Fixed defects reported by Coverity in G4GenericBiasingPhysics, to use `auto&`.
- Util:
  - G4PhysListUtil: added new utility method to access a process via sub-type, simplified methods to access hadron processes. Use `dynamic_cast` instead of `static_cast`. In the method InitialiseParameters(), call the singleton G4FTFTunings::Instance() to allow the setting of a FTF tune via UI commands at `PreInit` state. Extended InitialiseParameters() method.
  - G4PhysListUtil, G4HadProcesses: added extra methods needed for neutron general process initialisation. Use enumerator for neutron general process instead of hard-coded number in G4PhysListUtil.
  - Added internal dependencies on `hadronic/deexcitation/photon_evaporation`, `run` and `processes/management` modules.

### Readout

- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Run

- Imported implementations of task-based interfaces/implementations from the `tasking` module. See `History.tasking` file for History of tasking code.
- Added new G4DNAScavenger in PhysicsListHelper for DNA processes.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Tasking

- Retired module. Contents merged in `global` and `run` categories.

### Track & Tracking

- General clean-up of all ParticleChange classes: delete copy constructors and operator=(); removed unused methods; removed tracking cut to 1 eV implemented in G4ParticleChangeForLoss; make more effective handling of secondary tracks; substitute G4ParticleChangeForRadDecay with G4ParticleChangeForDecay; make all derived classes/methods final; removed commented code and corrected comments; removed duplicated code. Improved diagnostic for problems with primary track parameters or with secondary tracks; ensuring kinetic energy to be positive after a step; improved comments.
- G4SteppingManager: removed G4Exception with JustWarning severity for the case of no active at rest processes existing. Addressing problem report #2493.
- In G4ParticleChangeForTransport, simplified UpdateStepForAlongStep(), assuming that transportation is always the first process. Apply proposed step length; further simplified UpdateStepForAlongStep() method, assuming that transportation is always the first process.
- G4ParticleChangeForMSC: substituted virtual initialisation by inline method. Fixed crash in `/tracking/verbose 6`.
- Only set step status of `fGeomBoundary` when on volume boundary.
- In G4SteppingManager, refactor and simplify processing of secondaries; use new virtual method GetCreatorProcess() when processing secondaries. Corrected `ProcessDefinedStep` for AtRest case. Removed check on cuts and removed dependence of tracking from EM physics; real implementation of ApplyCut() is done within EM physics classes. Merged G4SteppingManager translation units.
- G4Track: added methods to get/set information on (short-lived) parent resonance.
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

### Visualization

- General
  - Removed obsolete `gl2ps` subcategory and `externals` module.
  - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
  - Introduced G4warn (temporarly the same as G4cout) as new output stream for visualization code, and used in place of G4cerr.
  - Updated build scripts and internal dependencies.
- Management
  - Implemented Twinkling, i.e, the rhythmic variation of brightness of given touchables: in G4VVisCommand added Twinkle() method; exploit twinkling in UI commands in G4VisCommandsTouchable and G4VisCommandsViewer.
  - Implemented generic cutaway. Prior to this, cutaways were implemented only in OpenGL by using OpenGL's clipping plane feature. This still pertains for OpenGL since it is very fast, but here cutaways are implemented using Boolean operations in a reasonably robust and reliable way. Based on the initial motivation and implementation on the management side from GitHub PR#53.
  - Re-worked and rationalised special mesh rendering utilities. The idea is that these are "standard" functions that are optional. They are optimised for OpenGL but they also work fine for ToolsSG and Qt3D. An attempt to draw a mesh with any other driver will result in a warning and only the container will be drawn. Other drivers will have to implement their own AddCompound(...G4Mesh...) function or choose to use the standard functions or some thereof.
  - Take advantage of recent developments in HepPolyhedron for rendering: conversion of tetrahedra to enclosing polyhedron removing inner surfaces; conversion of boxes to enclosing polyhedron removing inner surfaces. Also take advantage of developments in G4PhysicalVolumeModel: when a mesh has been found, an artificial node is created and added to the PVPath whose physical volume points to the parameterisation.
  - G4VisCommandsViewer: `/vis/viewer/centreOn` and `centreAndZoomInOn`: only fly and twinkle if 'KernelVisitElapsedTimeSeconds < 0.1'. Introducing `/vis/viewer/resetCameraParameters` UI command, resetting *only* the camera parameters (view direction, etc.).
  - G4VSceneHandler: added utility function Draw3DRectMeshAsDots(..); for a rectangular 3-D mesh, draw as coloured dots, one dot randomly placed in each visible cell. Tidy Draw3DRectMeshAsDots(). Allow for multiple meshes in a single screen; relevant for special mesh rendering. Implemented GetPointInBox() and GetPointInTet() to sample a random point inside a box and a tetrahedron. Exploit move operator when creating polyhedra for Special Mesh Rendering. Numerous improvements to comments and messaging.
  - Introducing drawing of parameterised tetrahedral mesh. G4VSceneHandler::DrawTetMeshAsDots(): default tet mesh drawing.
  - Ensure X-geometry string is copied correctly to a new viewer.
  - G4VisCommandsCompound: improved command guidance of `/vis/open`.
  - G4VisCommandsViewer: improved command guidance of `/vis/viewer/create`.
  - G4VisParameters: added new accessors IsWindowLocationHintX/YNegative().
  - G4VisCommandsTouchable: augment `/vis/touchable/draw`, added Boolean argument: if true, draw the extent (bounding box); Default false. In `/vis/touchable/dump`, fix missing dump of vis attributes.
  - G4VViewer: added data member and access method for `KernelVisitElapsedTimeSeconds`. This is measured in ProcessView().
  - In G4VisExecutive, introducing 'FALLBACK' drivers for TSGQt and VTKQt. A FALLBACK vis driver is selected if the user chooses a UI session that is not compatible with the requested driver. For example, if the user has built Geant4 with Qt, the TSGQt driver will be available and be the "default" driver, so `/vis/open TSG` will attempt to open TSGQt. But if the user has chosen a dumb terminal session, the vis manager selects TSGX11, for example, instead. Added TOOLSSG_OFFSCREEN.
  - Improved messaging for the case that a driver is not found in the candidate list.
  - Changed G4cout to G4warn in those cases where 'verbosity >= warnings'.
  - Introduced compound command: `/vis/plot` . This is the first part of a programme to facilitate the drawing of plots (if any have been registered with the analysis manager) at the end of a run. At the moment only the ToolsSG vis driver can offer this, so the vis manager issues appropriate messages. Later, we hope to introduce something like `/vis/reviewPlots`, which will allow the user to view all available plots in sequence.
  - G4VisManager: added access method: IsEnabled(). Register the new commands. In EndOfEvent(), protect view checking with mutex lock in MT mode, and deal better with the case of scene requesting no kept events (greatly speeds plotting). Only print list of available histograms if more than one per category. GeometryHasChanged() is a method that is called by the run manager. Sometimes the user chooses to delete the existing geometry tree and ask the run manager to construct a new detector geometry. Previously existing vis models of the geometry become invalid and the vis manager had to pick up the new geometry. The vis manager removes invalid models from the vis scenes and now adds the new version of the world back in. Other types of models, trajectory drawing, for example, if specified in the original scene, are kept in the new version of the scene.
    Implemented G4VisManager::DrawGeometry(), drawing a geometry tree starting at the specified physical volume.
  - G4VisCommandsSceneAdd: new command `/vis/scene/add/plotter`, to add G4PlotterModel to end-of-run list. Adapted `/vis/scene/add/volume` UI command to new G4PhysicalVolumesSearchScene.
  - G4Scene: redefined IsEmpty().
  - G4VisCommandsViewerSet: improved messaging for `/vis/viewer/set/lineWidth`; this simply prints a message saying how *actually* to change line width.
  - Introducing `/vis/viewer/set/specialMeshRenderingOption` UI command; "dots" draw one dot per mesh point; "surfaces" group mesh points by colour and material and compute the outer surface or envelope, removing internal shared faces. So far, only the "dots" option is implemented for some drivers.
  - Introducing `/vis/viewer/set/lineWidth` UI command, a do-nothing command that tells how to change line width.
  - Implemented /vis/reviewPlots UI command.
  - G4VisCommandsSceneAdd: changed the default width of axes added to the scene with automatic length and width determination.
  - G4VisCommandsCompound, G4VisCommandsSceneAdd, G4VisCommandsTouchable, G4VisCommandsViewer: fixed control of verbosity.
- Modeling
  - G4Mesh: augmented available data for 3D rectangular mesh. Programmed for parameterised tetrahedron mesh. Simplified algorithm: now finding 1-deep rectangular meshes such as G4PhantomParameterisation. A simple parameterisation may only be one level; nested parameterisations may be 2- or 3-level.
  - G4PhysicalVolumeModel: added `LocalExtent` and `GlobalExtent` to method GetAttDefs(). Added modifiers; for AddCompound(mesh), provide an artificial node as an (optional) hook for anything that might be generated. Implemented generic cutaway: in G4PhysicalVolumeModel::DescribeSolid(), simplified clipping, sectioning and cutaway code.
  - Migrated G4PhysicalVolumesSearchScene and G4TouchablePropertiesScene to use `fTouchableFullPVPath`.
  - Retired G4BoundingSphereScene and G4PhysicalVolumeSearchScene. G4BoundingSphereScene accumulated bounding spheres and often overestimated the extent of the scene; it is now superseded by G4BoundingExtentScene. G4BoundingExtentScene deals directly with extents, which makes it neater and more tightly estimates the overall extent of the scene.
  - G4PhysicalVolumeSearchScene is superseded by G4PhysicalVolumesSearchScene. G4PhysicalVolumesSearchScene finds all occurrences of a physical volume and returns a "findings vector". Removed last ambiguous and misleading argument in the constructor.
  - G4PseudoScene: added AddCompound(const G4Mesh&) method; if special mesh rendering is set, this catches mesh candidates (certain types of parameterisations) and avoids descending into the parameterisations.
  - G4PhysicalVolumeModel: added SetSpecialMeshRendering(true) to avoid traversing (certain types of) parameterisations (see above). Eliminated `goto` statements.
  - Allow arrow proportions to be greater than 1/100. Produces more visible arrows for field visualisation and also obeys the input parameters more closely.
- FukuiRenderer
  - Replaced use of sprintf() with snprintf(), to fix deprecation compilation warnings on macOS-13 SDK.
- gMocren
  - G4GMocrenFileSceneHandler: removed redundant header inclusion.
- OpenGL
  - G4OpenGLSceneHandler: in AddCompound(..), use base class utility G4VSceneHandler::Draw3DRectMeshAsDots(..); for parameterised tetrahedron mesh, call default G4VSceneHandler::DrawTetMeshAsDots(); added missing return statement for unimplemented cases; code tidy.
  - G4OpenGLStoredViewer, G4OpenGLStoredQtViewer: added check on special mesh rendering option in CompareForKernelVisit().
  - Updated comment about requesting a kernel visit when cutaway mode changes (noted but not relevant because OGL does its own cutaways).
  - Minor tidy: speed cutaway check in G4OpenGLViewer::SetView().
  - Retired display list re-use and display list limit.
  - Added G4gl2ps, a class frontend to `tools/gl2ps` intended to be used by OpenGL and OpenInventor; does not depend directly of OpenGL.
  - Have G4OpenGLViewer use the thread safe `tools/gl2ps`.
  - Use StandardSpecialMeshRendering(mesh).
  - Fixed compiler warnings in the use of G4OpenGLQtViewer::toggleProjection.
  - Replaced use of sprintf() with snprintf(), to fix deprecation compilation warnings on macOS-13 SDK.
  - Fixed compilation warnings on Intel/icc compiler for deprecated conversion of string literal to char* in G4OpenGLXmConvenienceRoutines and G4OpenGLXmViewer.
- OpenInventor
  - Implemented special mesh rendering.
  - Request kernel visit when cutaway mode changes in G4OpenInventorViewer.
  - G4OpenInventorQtExaminerViewer: for macOS only, disabled the mouse wheel event handler to fix the trackpad zoom direction issue.
  - G4OpenInventorViewer: removed misleading obsolete comment regarding kernel visit in the case of a change in vis attribute modifiers.
  Added check on special mesh rendering option in CompareForKernelVisit().
- G4OpenInventorQtExaminerViewer: fixed compilation warning on Intel compiler for shadowing data.
- Have G4OpenGLOpenInventorViewer and SoGL2PSAction using the thread safe tools/gl2ps.
- Replaced use of sprintf() and vsprintf() with snprintf() and vsnprintf() respectively, to fix deprecation compilation warnings on macOS-13 SDK.
- Fixed compilation warnings on Intel/icc compiler for deprecated conversion of string literal to char* in G4OpenInventorQtExaminerViewer.
- Fixed compilation warning on gcc-12.

- Qt3D
  - G4Qt3DViewer: re-implemented wheelEvent() for perspective projection; now taking into account the extent of the scene. Added check on special mesh rendering option in CompareForKernelVisit().
  - G4Qt3DSceneHandler:in AddCompound(..), use base class utility G4VSceneHandler::Draw3DRectMeshAsDots(..).
  - Request kernel visit when cutaway mode changes in G4Qt3DViewer.
  - G4Qt3DSceneHandler::AddCompound(): for parameterised tetrahedron mesh, call default G4VSceneHandler::DrawTetMeshAsDots().
  - G4Qt3DSceneHandler: updated AddPrimitive(..) to current usage. Commented out line elimination in AddPrimitive(..), as too expensive for a large polyhedron; allow the graphics-reps utilities to optimise this. Use StandardSpecialMeshRendering(mesh).
  - Fixed compilation warnings about shadowing.
- ToolsSG
  - New offscreen sub-driver.
  - G4ToolsSGViewer: handle ambient lightning; handling zb_png and zb_jpeg formats; corrected fSGViewer->set_clear_color().
  - Request kernel visit when cutaway mode changes in G4ToolsSGViewer.
  - G4ToolsSGViewer: reimplement wheel_rotate() for perspective projection; now taking into account the extent of the scene. Currently, the ToolsSG viewer cannot draw trajectories in MT mode, so in function SwitchToMasterThread() we draw any events that have been kept by the vis manager. It fixes an issue where plots were being drawn twice.
  - Reactivate G4ToolsSGQtGLES::IsUISessionCompatible(), paves way for permitted instantiation of multiple TSG drivers.
  - Access G4VVisCommand::G4VisManager pointer through static function GetVisManager() to prevent DLL issues on Windows.
  - G4ToolsSGSceneHandler: in AddPrimitive(), define dots as a single pixel; Use GetMarkerSize() for circles and squares. In AddCompound(): for parameterised tetrahedron mesh, call default G4VSceneHandler::DrawTetMeshAsDots(). Adding warning message if plot cannot be found. In SetPlotterHistograms(), suppressed `/control/verbose` messages for `/analysis/*/get*` commands. In AddPrimitive(..), comment out common line elimination, as too expensive for a large polyhedron; allow the graphics-reps utilities to optimise this. Use StandardSpecialMeshRendering(mesh).
  - Changed namespace for g4tools code from "tools" to "toolx" for externals.
- Vtk
  - Moved setting of G4VIS_USE_VTK_QT flag to `interfaces` module.
  - Replaced reinterpret_cast with static_cast where possible.

### Environments

- Removed g4py and zmq builtin environments. The source and support for these have moved to GitHub under:
  - Geant4Py
  - ZMQ

### Data sets

- New low-energy data set version, G4EMLOW-8.2:
  - New files for Nitrogen cross-sections for dna models.
  - New files for fluorescence and Auger electron transitions for heavy elements `Z=101-104`.
  - Added DNA files for the RPWBA models.
- New neutron data files for low energy neutron transport with thermal cross-sections G4NDL-4.7:
  - Updated `ThermalScattering` component, obtained from thermal scattering data from JEFF-3.3, and adding the ENDF/BVIII-0 materials not in JEFF-3.3, coupled to JEFF-3.3 nuclear cross-sections.

### Examples

- Updated reference outputs, macros, READMEs and scripts.
- Fixes for Doxygen documentation and coding guidelines.
- Fixed compilation warnings on Intel-icx compiler for set but unused variables.
- advanced
  - Updated to use default MixMax random generator.
  - air_shower
    - Define all material properties in order of increasing energy.
  - amsEcal
    - Prefer pointer to `const G4Material` where possible.
  - brachytherapy
    - Migration to C++11/14/17 features.
  - CaTS
    - Fixed compilation warnings on latest gcc compilers.
  - ChargeExchangeMC
    - CexmcHadronicProcess: disabled integral method, as not applicable to this example.
  - eFLASH_radiotherapy
    - New application simulating the beamline and energy spectra based on the Triode Electron Gun Equipped ElectronFlash Manufactured by Sordina Iort Technologies S.p.A. available at the Centro Pisano Flash Radiotherapy (CPFR) at Pisa. The linac is able to provide low-energy electron flash beams and is currently the first machine installed in Italy capable of reaching FLASH dose-rate (MGy/s) and extremely high dose per pulse DPP).
  - eRosita
    - Migrated to use C++17 Standard. General code refactoring.
    - Removed obsolete physics classes.
    - Updated physics-list with Livermore and Penelope models.
    - Replaced `getenv()` calls for data variables with G4FindDataDir().
  - gammaray_telescope
    - Migrated to use C++17 Standard. General code refactoring.
  - hadrontherapy
    - Prefer pointer to `const G4Material` where possible.
  - human_phantom
    - Fixed GDML description of the phantom.
    - Code review.
  - ICRP110_HumanPhantoms
    - Use special mesh rendering.
    - Corrected error in reading the first voxels (in x=0, y=0).
    - Migration to C++11/14/17 features.
  - ICRP145_HumanPhantoms
    - New example implementing a ICRP145 human phantom, based on related ICRP publication.
  - iort_therapy
    - Simplified calls to SetProductionCut().
  - medical_linac
    - Replaced sprintf() use with std::to_string(); sprintf() deprecated on macOS-13, leading to compilation warnings.
  - microbeam
    - Moved back to original switching field value.
  - radioprotection
    - Added diamondTelescope detector. Messengers modified accordingly.
    - Added python scripts to analyze the spectra files and calculate microdosimetric Quantities.
  - STCyclotron
    - Removed no-op lines; simplified calls to SetProductionCut().
- basic
  - Applied clang-tidy checks.
  - B1
    - In vis.mac, commented TSG_OFFSCREEN usage example.
  - B3
    - Set new analysis file name for the second run in run2.mac to avoid overwriting the output from the first run.
    - Activated merging of n-tuples with score n-tuple writer.
    - Added commented setting in run2.mac.
  - B4
    - Activated merging of n-tuples with score n-tuple writer in B4d.
- extended
  - analysis
    - Use G4Accummulables for RunAction summary data in AnaEx01 and AnaEx02 to get them merged in MT mode.
    - Reordered runs in test macro (run the test run first to get meaningful output at the end).
    - Updated AnaEx01 and AnaEx02 classes in shared with modifications applied in AnaEx03.
    - AnaEx03
      - New example demonstrating usage of analysis commands for file management, in particular writing histograms and n-tuples in a file multiple times.
  - biasing
    - Removed redundant code (forward declarations, includes) from GB* examples.
  - common
    - Applied new coding guidelines and added tests.
  - electromagnetic
    - TestEm1
      - In PhysicsList::AddRadioactiveDecay(), enable atomic de-excitation. Addressing problem report #2494.
      - Added three new macros to play with StepFunction(): pRange, alphaRange, ionRange.
      - PhysicsList::AddRadioactiveDecay(): updated lifeTime threshold.
      - Updated photoelec.mac macro.
    - TestEm3
      - Prefer pointer to `const G4Material` where possible.
    - TestEm5
      - Allow changing the gun position via UI command.
      - Added summary on gamma processes.
    - TestEm7
      - Make local EM physics the same as EM physics option3 with G4IonParameterizedModel.
    - TestEm9
      - Updated all user actions: more correct count of creator processes; use C++11 keywords; removed not needed headers; moved ScoreNewTrack(..) from Tracking to Stepping action class.
      - Removed verbose data member in PhysListEmStandard, use the `verboseLevel` defined in the base class for this purpose.
    - TestEm11
      - PhysicsList::AddRadioactiveDecay(): updated lifeTime threshold.
    - TestEm15
      - Added description of UI commands to control G4BetheHeitler5DModel.
    - TestEm16
      - Minor cleanup in vis.mac and run01.mac to make MT output more readable.
    - TestEm17
      - Added new process of muon pair production by muons; extended analysis and added new histograms.
  - errorpropagation
    - New examples category and moved existing example (now renamed `errProp`) therein.
  - eventgenerator
    - particleGun
      - Updated reference in PrimaryGeneratorAction2.
    - pythia/decayer6
      - P6DExtDecayerPhysics: make sure the external decayer is set to G4Decay process only once to avoid potential misleading.
    - pythia/py8decayer
      - Added ActionInitialization class.
      - Updated pythia8_decayer to use ActionInitialization. Code cleanup to avoid potential misleading.
  - exoticphysics
    - channeling
      - Use single-scattering EM physics instead of Opt4 and disabled Coulomb scattering.
    - monopole
      - G4MonopoleTransportation: set step status on volume boundary.
      - Removed useless 'const_cast' of G4VSensitiveDetector.
    - ucn
      - Corrected value of epsMax, to 0.001 in DetectorConstruction. Also fixed epsMin to be dimensionless.
  - field
    - field01
      - Added Boris integration method as an option.
      - In main(), demonstrating how to use G4TransporationParameters to set looper values for transportation.
      - F01FieldSetup: show how to control Epsilon Min/Max.
    - field04
      - Replaced sprintf() use with std::to_string(); sprintf() deprecated on macOS-13, leading to compilation warnings.
      - Corrected value of epsMax, to 0.001 n DetectorConstruction. Also fixed epsMin to be dimensionless.
      - Fixed compilation warning on gcc-12.
    - field05
      - Corrected value of epsMax, to 0.001 n DetectorConstruction. Also fixed epsMin to be dimensionless.
  - g3tog4
    - Updated common directory.
  - hadronic
    - FissionFragment
      - Replaced sprintf() use with std::to_string(); sprintf() deprecated on macOS-13, leading to compilation warnings.
    - Hadr01
      - Added UI commands to enable charmed and bottom hadrons physics and hypernuclei (and anti-hypernuclei) physics; added macro files to demonstrate this.
    - Hadr03
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2). Use G4NuclideTable::SetMeanLifeThreshold(1ns); use QBBC as the default configuration.
      - In Run, added protection for the case when G4NeutronGeneralProcess is used; in that case it is not currently possible to access cross-section via G4HadronicProcessStore. Addressing problem report #2517.
      - Use default MixMax engine in main().
    - Hadr05
      - Prefer pointer to 'const G4Material' where possible.
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2).
    - Hadr06
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2).
    - Hadr07
      - TrackingAction: print ions with zero meanLife.
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2).
    - Hadr08
      - BiasingOperation: use Bertini cascade instead of pre-compound model, as not applicable for pion interactions. The Bertini cascade is applied from 0 to `41 MeV`, INCLXX from `40 MeV` to `12 GeV`.
      - Moved run initialisation to macro files.
    - Hadr09
      - Extended to exercise hypernuclei and anti-hypernuclei inelastic nuclear interactions.
    - NeutronSource
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2).
    - ParticleFluence
      - New set of examples implementing different setups showing how to score particle fluences (Sphere, Concentric Spheres, Layer, Calo).
  - medical/DICOM
    - Introduced special mesh rendering of DICOM image.
    - Replace sprintf with direct G4String use to remove deprecation warnings on macOS-13.
  - medical/dna
    - chem4:
      - Added macro commands to control chemical molecules and reactions.
      - Minor correction for reaction type in macro file `beam.in`.
      - Use `thread-local` flag in G4VMoleculeCounter.
    - chem5:
      - Use `thread-local` flag in G4VMoleculeCounter.
    - chem6:
      - Adding condition for only one event, to avoid potential FPE crash.
      - Added PhysicsListMessenger.
      - Added short chemical reaction list.
      - Use `thread-local` flag in G4VMoleculeCounter.
      - Added missing headers inclusion for self-consistency.
      - Fixed analysis macros to allow running on Window.
    - dnaphysics:
      - In main(), enable visualisation only in interactive mode; use G4RunManagerFactory.
      - Added UI command to add different standard EM, DNA physics, and radioactive decay models.
      - PhysicsList: added RadioactiveDecayPhysics. Added possibility to change DNA physics via UI commands.
    - icsd:
      - PhysicsList: make use of nitrogen material.
      - Geometry: propose two geometries, nanodosimeter (N2) and dna (THF).
    - jetcounter:
      - New example providing a setup for simulation of a typical experiment with the Jet Counter nanodosimeter. Allows the calculation of the ionisation cluster size distribution (ICSD) (the number of ionisations per projectile) in a real sized cylindrical interaction volume (IV) of the Jet Counter device.
    - microyz:
      - Added UI commands for TrackerSD radius selection.
      - Added missing headers inclusion for self-consistency.
    - moleculardna:
      - New example showing how to simulate physics, physico-chemistry and chemistry processes in DNA geometries, for simulating DNA damage.
    - scavenger:
      - Fixed analysis macros to allow running on Window.
      - EmDNAChemistry: added forgotten header.
      - Use `thread-local` flag in G4VMoleculeCounter.
    - spower:
      - In main(), enable visualisation only in interactive mode; use G4RunManagerFactory.
  - optical
    - LXe
      - Modified LXeSteppingAction: removed thread-local variable; use PDG code instead of particle name; added more checks on pointers; extended printout before fatal exception.
    - OpNovice2
      - Added new macro complexRindex.mac, using dielectric-metal surface with the surface having a complex index of refraction.
      - Added new histograms to record separately Fresnel reflection, TIR, absorption, etc.
      - Use new histos to plot spike reflection/absorption vs angle on surface (useful for complex refractive index).
      - PrimaryGeneratorMessenger: fixed command /opnovice2/gun/randomDirection. Based on GitHub PR#33.
      - Added local SteppingVerbose to print velocity with `/tracking/verbose 1`.
      - New macro coated.mac, and book-keeping code, to show reflection/refraction from thin film coating.
      - SteppingAction: check that group velocity is correct. Don't include Absorbed or Detected photons in plots for forward-going particles.
    - wls
      - Fixed compilation warning on gcc-12.
  - parallel
    - MPI
      - Removed use of obsolete G4DeveloperAPI functions from CMake script.
      - Changed namespace for g4tools code from `tools::mpi` to `toolx::mpi`.
      - Updated analysis classes for changes in analysis module.
      - Fixed exMPI04 example failing in sequential mode when MPI n-tuple merging is activated.
  - parameterisations
    - Par04
      - Added python training scripts.
      - Added model conversion to ONNX and LWTNN to the training script.
      - Added updated version of the training code (PEP 8 style guide, formatting with YAPF, annotation with types, code upgrade to TF2.9, logic for GPU usage management).
      - Added support of LibTorch for inference.
      - Fixed warnings and lwtnn macro.
      - Changed visualization scripts for fast simulation.
      - Added new control histograms.
      - Changed extension of macros from .in to .mac.
  - radioactivedecay
    - Activation
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2).
    - rdecay01
      - PhysicsList: added G4NuclideTable::SetThresholdOfHalfLife(1ns*log2). In constructor, adjust meanLifeTime and halfLifeTime. Added SetInternalConversionFlag() function.
        Moved setup of options to the class constructor; use minimal list of particles defined in G4EmBuilder; added extended comments to the code; updated headers according to C++11. Adjusted meanLifeTime and halfLifeTime.
      - Use default MixMax engine in main().
      - Fixed compilation warning on gcc-12.
  - runAndEvent
    - RE02
      - Replaced sprintf() with std::ostringstream to fix deprecation warnings on macOS-13.
    - RE07
      - Renamed static class member `fMasterTrackingManager`.
      - Applied clang-format to code.

## 10. Appendix

### A1 - Location of Geant4's datasets

Use of environment variables to locate Geant4's datasets at application runtime is now optional, the following fallback-based search is being used for backward compatibility with existing setups:

- If an environment variable for an individual dataset, e.g. G4ENSDFSTATEDATA, is set, then this is used as the location of that dataset and no further search for that dataset is performed. The toolkit code raises a `G4Exception` if the dataset is not present.
- If the GEANT4_DATA_DIR environment variable is set, then this is taken as a directory under which all datasets are located, and no further search is performed. The toolkit code raises a `G4Exception` if the requested dataset is not present in this directory.
- If none of the above environment variables are set then datasets are searched for under the following ordered sequence of paths:
  1. The (absolute) path set at configuration time by the GEANT4_INSTALL_DATADIR CMake variable;
  2. Subdirectories `share/Geant4/data`, `share/geant4/data`, `share/data`, and `data` of the Geant4's install location as set at configuration time by the CMAKE_INSTALL_PREFIX CMake variable (`C:\\Program Files` (Windows only); `C:\\Geant4` (Windows only); `/usr/local`, `/usr`).
  The toolkit code raises a `G4Exception` if the requested dataset is not found in any of these locations.
- User code that directly accesses the datasets should migrate from use of raw `std::getenv()` calls to the builtin `G4FindDataDir` free function, e.g.

          #include "G4EnvironmentUtils.hh"

          // const char* p = std::getenv("G4ENSDFSTATEDATA");
          const char* p = G4FindDataDir("G4ENSDFSTATEDATA");

  which implements the above search sequence and does not rely on the per-dataset environment variables being set; `nullptr` is returned if the dataset is not located, it being up to the callee to decide what to do in this situation.