Geant4 10.2 Release Notes

December 4th, 2015

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

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

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

## Contents

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

## 1. Supported and Tested Platforms

Platforms:

- Linux, gcc-4.8.3.
  Tested on 64 bit architectures (Intel or AMD) with CERN CentOS Linux 7 (CC7) (based on CentOS Linux 7).
- MacOSX 10.11 with clang-3.7 (Apple LLVM/Clang-7.0.0)
- Windows7 with Visual C++ 14.0 (Visual Studio 2015)

More verified and tested configurations (64 bits):

- Linux, gcc-4.9.3, gcc-5.2.0, clang-3.6
- Linux, Intel-icc 15.0, 16.0
- MacOSX 10.10 with clang-3.6
- MacOSX 10.9 with clang-3.5
- Windows7 with Visual C++ 12.0 (Visual Studio 2013)
- Linux for Intel Xeon Phi with Intel-icc 15.0, 16.0 (gcc-4.9 compatibility layer)

Note: Windows platforms are supported/verified only for the sequential mode. Multi-threading capability is not yet supported on Windows.

## 2. Supported CLHEP version

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

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

- Compilation using the C++11 Standard is now enabled by default, therefore requiring compilers supporting at minimum the following C++11 Standard features:
  - Template aliases, as defined in N2258.
  - Automatic type deduction, as defined in N1984.
  - Delegating constructors, as defined in N1986.
  - Enum forward declarations, as defined in N2764.
  - Explicit conversion operators, as defined in N2437.
  - Override control final keyword, as defined in N2928, N3206 and N3272.
  - Lambda functions, as defined in N2927.
  - Null pointer, as defined in N2431.
  - Override control override keyword, as defined in N2928, N3206 and N3272.
  - Range-based for, as defined in N2930.
  - Strongly typed enums, as defined in N2347.
  - Uniform intialization, as defined in N2640.
- Minimum required version of CMake to build Geant4 is 3.3. User applications can still use CMake 2.8.X or above for configuration and compilation. It is however recommended to migrate to CMake 3.3 or above for its improved support of C++ compile and target features.

Geometry

- A new minor release of the GDML schema, GDML-3.1.3, is used, supporting optional export of physical volumes copy-numbers and geometrical regions dump. The new schema is fully compatible with old schema versions and schema validation thorugh network is already activated against it.
- Optional adoption of the Unified Solids Library, can now be achieved after installation of the library as external package.

Electromagnetic and optical physics

- Updated Goudsmit-Sounderson multiple scattering model for e+- can be tested in various applications. A new electromagnetic (EM) physics constructor G4EmStandardPhysicsGS is provided for that.
- For applications which are using C++ interface to define parameters of EM physics, it is recommended to switch from usage of the G4EmProcessOptions class to the G4EmParameters class. This will guarantee coherent parameters definition also for multi-thread setup.
- Public methods and corresponding UI commands have been added to activate PAI, MicroElec, or DNA models in one or more Geant4 regions.
- In all ionisation processes which simulate energy loss along step the models' lowest energy limits, which force full energy deposition at a step independently on the material, are reviewed. A coherent and common approach is introduced, allowing the user to set the value of this limits via UI commands or the new interface class G4EmParameters. Introduction of a lowest energy allows to remove hidden tracking cuts and limits from elastic scattering and ionisation models. For very low-energy simulations these lowest energy limits may be set to zero.
- Added alternative Geant4-DNA physics models for liquid water.
- The data file G4EMLOW-6.48 should be used.

Hadronic physics

- The new data sets `G4PhotonEvaporation-3.2`, `G4RadioactiveDecay-4.3` and `G4ENSDFSTATE-1.2` should be used.
- The environment variable `G4ENSDFSTATEDATA` must be set to `G4ENSDFSTATE-1.2`.
- The `NeutronHP` module has been replaced by `ParticleHP`: no change in the user code is required.

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-6.48, G4ENSDFSTATE-1.2, G4RadioactiveDecay-4.3, G4PhotonEvaporation-3.2`.
- The G4ENSDFSTATE data set has now become mandatory, therefore it is required to have it installed and the appropriate environment variable `G4ENSDFSTATEDATA` for its path to be set.
- In order to use `ParticleHP` for charged particles (protons, deuterons, tritons, He3 and alphas), an optional data set `G4TENDL-1/0` is required, and should be downloaded in addition from the Geant4 web site.

## 4. New Developments and Capabilities

Analysis

- Added "batch plotting" facility.
- Added classes for users parameters management.
- Added ability to send/receive histograms through MPI.

Geometry

- In this release, an option allows an installation to use the Unified Solids Library primitives, to replace the original Geant4 solids, as in the previous release. The path to an external installation of the USolids library (VecGeom version `v00.01.00`) should be specified. See the associated instructions file for configuration and installation.

Electromagnetic physics

- New UI commands and C++ interfaces to define parameters of EM physics are now provided. PAI models may be enabled per particle type and detector region on top of any EM physics configuration. For example, the UI command `"/process/em/AddPAIRegion all Tracker"` defines PAI model for all charged particles in Tracker region. MicroElec models for the Silicon and set of DNA default models for the liquid water may be also enabled via UI commands and C++ interface.
- In all ionization processes which simulate energy loss along step a lowest energy limit is introduced, which forces full energy deposition at a step independently on material. Its value may be changed via a new UI commands or through the interface class G4EmParameters. The default value is `1 keV`, for Opt3, Opt4, Livermore, and Penelope physics constructors lowest e+- energy is `100 eV`.
- By default lateral displacement sampling is disabled for muons, hadrons, and ions. To enable lateral displacement a new UI command should be used: `"/process/msc/MuHadLateralDisplacement true"`.
- G4UrbanMscModel has been updated: e+ corrections are added and a new optional algorithm to sample lateral displacement is introduced. The new lateral displacement sampling is used only in Opt3, Opt4, Livermore, and Penelope EM physics constructors.
- A new implementation of the Goudsmit-Saunderson model for multiple-scattering is now used for e+- below 100 MeV in the G4EmStandardPhysicsGS constructor. It is available in the experimental physics-list FTFP_BERT_TRV.
- The single scattering model with Mott corrections may be enabled in the G4EmStandardPhysicsSS physics constructor using the new UI command: `"/process/msc/UseMottCorrection true"`.
- Ion/ion stopping power tables have been updated using new computations of A. Schinner.
- Introduced new G4LowEPPolarizedComptonModel for simulation of the Compton scattering of linear polarized gamma.
- Full Auger atomic de-excitation cascade simulation may be enabled via the new UI command: `"/process/em/augerCascade true"`.
- The usage of the more accurate atomic transition energies (Bearden data) can be enabled via the UI command: `"/process/em/fluoBearden true"`.
- Added alternative Geant4-DNA physics models for liquid water and extra DNA physics constructors.

Hadronic physics

- Improved simulation of low-energy, evaporated nucleons by Fritiof model coupled with Precompond-de-excitation model. It affects the energy response in hadronic showers: the visible energy in simplified calorimeters increases in not heavy absorber materials, e.g. Iron and Copper.
- A new model for nuclear gamma de-excitation model has been introduced. It affects the lateral shapes of hadronic showers: narrower showers are produced, especially for heavy absorber materials.
- The model `NeutronHP` has been merged into the `ParticleHP` model, which now extends the treatment of low-energy neutrons (below `20 MeV`) to charged particles: proton, deuteron, triton, 3He and alpha, with energies up to `200 MeV`. Note: users should be careful when using this model for charged particles, for various reasons: validation is not yet completed; only the inelastic interactions are included in this model, while the elastic interaction is treated independently by other Geant4 models; the TENDL data library is deployed, which means that ENDF VII(.r1) evaluated data is used only for the few cases where it is available, while, in all other cases, the data from TALYS nuclear model is utilized, which can lead to large uncertainties. In order to use ParticleHP for charged particles, the optional data set G4TENDL-1.0 is required.
- Substantial revision of the Radioactive Decay model: now using G4UAtomicDeexcitation to handle fluorescence and Auger electrons; improved energy conservation for IT and EC modes to order `30 eV` by using approximate shell energy method of A. Zoglauer; adapted to changes in particle category by providing a mass defect check between parent and daughter nuclei; removed dependence on local isotope table in favor of that in G4NuclideTable.

Particles

- Mass width is taken into account in Phase Space Decay when daughter particles are resonant particles; dynamic mass is given to daughter particles according to the Breit-Wigner formula.

Physics Lists

- New experimental EM physics constructors: G4EmStandardPhysicsGS, G4EmStandardPhysicsWVI, G4EmSTandardPhysicsSS.
- Replaced the Chips neutron elastic cross-section with NeutronElasticXS one in all (non-HP) physics lists.
- The Glauber-Gribov kaon inelastic cross-sections are used in all physics lists (instead of either Chips or Gheisha cross-sections).
- In the QBBC physics list, the upper limit of Bertini has been reduced from `12` to `4 GeV`.
- The `FTFP_BERT_TRV` physics list uses now the standard EM option with the new Goudsmit-Saunderson multiple scattering model (i.e. G4EmStandardPhysicsGS). Moreover, the transition region between Bertini and Fritiof models has been reduced from `[3, 12] GeV` to `[2, 4] GeV`.
- The physics list `QGSP_BIC_AllHP` uses the `ParticleHP` model for charged particles (p, d, t, 3He, alpha) below `200 MeV`. Note: this requires some optional data libraries, which the user needs to download from the Geant4 web site.

Run

- New UI command for running in multi-threading mode by forcing the random generator engine to use a specified state (stored in a file) for each event. This allows to test strong reproducibility in pure multi-threading mode.
- Increased granularity of MT methods to allow easier subclassing of run-manager classes and ease integration with external frameworks.

Visualization and Interfaces

- New dedicated thread for visualization in MT mode
- New commands for multithreading:
  - `"/vis/multithreading/actionOnEventQueueFull"`: when event queue for drawing gets full, wait or discard events.
  - `"/vis/multithreading/maxEventQueueSize"`: defines maximum event queue size.
- Added viewer menu button in Open Inventor for PDF output.

## 5. Expected effects on physics and computing performance

Electromagnetic physics

- Expected reduction of memory per thread in multi-treaded mode.
- Due to increased precision in some models, the measured CPU performance for some cases of high energy EM shower in HEP calorimeters is ~1% slower with respect to the previous Geant4 release.

Hadronic physics

- Hadronic showers have changed in two aspects: increased visible energy in not heavy absorber materials (e.g. Fe and Cu); narrower lateral showers in heavy absorber materials (e.g. W and Pb). The change in energy response is mostly due to the development in the formation of the excited nuclear remnant in the Fritiof model. The change in the lateral shape is mostly due to the new model for nuclear gamma de-excitation.
- In some cases simulations of hadronic showers in HEP calorimeters are faster up to 5% with respect to the previous Geant4 release.

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

- Use CMake Compile Features to setup C++ Standard. Removed setup of C++ Standard selection via compiler version checking. Created list of compile features required by Geant4. Maintain GEANT4_BUILD_CXXSTD option to allow user to choose between C++11 and C++14 standards. When newer standard is chosen, require that compiler supports at least one feature from that standard, and add all supported features of that standard to the required list. Updated setting of flags and standard used to obtain information from compile features.
- Always use libc++ with Apple Clang so that std-supporting library is used for C++11 mode on older Mac systems where libstdc++ is the default.
- Migrate output directories for build products to use same layout as install tree. For single mode generators (Makefiles/Ninja), products are output to a 'BuildProducts' subdir of the main binary dir which holds bin/lib directories as derived from requested install dirs. With multimode generators (Xcode/VS), 'BuildProducts' holds an extra directory layer, one per build mode, under which the same bin/lib structure is used.
- Updates for migration to CMake >= 2.8.12. Use generator expressions in setting of per-mode compile definitions for Geant4 libs.
- Removed -no-gcc in CMAKE_CXX_FLAGS when using Intel compiler, as gcc interoperability is required for use of C++11 features in cxxlib. Removed -i-dynamic from LDFLAGS, no longer supported. Corrected checking of Intel compiler to use better CMAKE_CXX_COMPILER_ID variable.
- Only allow use of system USolids, i.e. external installation of the package.
- Updated Apple Clang detection to work on Xcode-7.
- Correction to allow for both static and shared libs to be built on Windows.
- Added new GEANT4_USE_FREETYPE option (OFF by default), to allow user to enable Freetype support in analysis library. Added export of TOOLS_FONT_PATH to environment when Freetype support is enabled, pointing to the fonts/ subdirectory of Geant4's share directory. Added TOOLS_FONT_PATH to test environment when Freetype support enabled.
- Updated FindROOT.cmake script to provide compatibility with Root-6 and allow usage of ROOTConfig.cmake, if available.
- Changed default build mode for single config generators to RelWithDebInfo to match testing system and UNIX conventions.
- Added new MSVC only option GEANT4_BUILD_MSVC_MP, defaulting to OFF. When ON, it prepends /MP to CMAKE_CXX_FLAGS to enable file level parallel compilation on Windows.
- Allow user to force search for Qt4 only when GEANT4_USE_QT is selected. Requested on HN User Forum #1766.
- Put CLHEP version 2.3.1.x as the minimum required.
- Updated data-sets versions.

### Analysis

- Plotting
  - Added "batch plotting" facility for histograms and profiles.
  - Implemented `"/analysis/xx/setPlotting"` commands to activate plotting for selected histograms or profiles.
  - Introduced the plot configuration parameters that can be set via UI commands: the plotting style, page layout and the viewer dimensions.
  - A single plot file, possibly with multiple pages, is generated.
  - Implemented support for Freetype.
- Parameteres
  - Added a new sub-category, parameters, with first implementation of G4ParameterManager and G4Parameter<T> classes for handling user parameters.
  - Users can define their parameters objects as named parameters registered to the parameter manager, which then provides the acces to them by name and performs their merging in multi-threading mode.
  - See their usage in basic examples B1 or B3a.
- MPI
  - Added code to send/receive histograms through MPI:
    G4VAnalysisManager::Merge(tools::histo::hmpi*) method and G4MMPIToolsManager class which implements histogram and profiles MPI merging using tools/histo/hmpi interface.
- Histograms & Profiles
  - Implemented `"/analysis/xx/setX,Y,Z"` commands for setting histograms/profiles parameters per dimension. They can be used as an alternative to the complex set commands.
  - Removed profile directory; the profiles are put in the histograms directory, if its name is set by the user.
- Ntuples
  - Implemented activation of ntuples.
  - Implemented support for the ntuple columns of vector type with Csv output.
- General
  - Added `Set/GetCompressionLevel()` functions to G4AnalysisManager and changed its default value to 1 (was 9).
- Fixes
  - Fixed false warnings about unknown column type when an ntuple contains a column of a vector type and is created via ntuple booking.
  - Fixed parameter range in `'setAscii'` command.
  - Fixed handling of n-tuples created in MT mode on master thread; this fixes the problem reported in Hypernews Analysis Forum (#495) and the problem of deleting non-empty Root file containing only n-tuples.
  - Fixed `G4AnalysisManager::IsActive()`, now taking into account all histogram and profiles types.
  - Fixed `G4Analysis::Tokenize()` which was failing when processing a string containing opening double quota without a closing one. This function is used in messengers.
- Internal
  - Introduced C++11 features. Added classes for common handling of tools objects and restructured existing classes to avoid code duplication.
  - Added G4AnalysisOutput type (as class enum) and G4AnalysisManager functions needed to connect analysis to Geant4 scorers.
- g4tools
  - Updated the g4tools version to g4tools-1.26.2.

### Digitization & Hits

- Added new G4MultiSensitiveDetector functionality, allowing to assign multiple sensitive-detectors to a single logical-volume. Sensitive-detectors are added to this proxy class and an instance of the proxy is assigned to the logical volume. Calls to the sensitive-detectors methods are forwarded to all user-defined sensitive-detectors that are added.

### Electromagnetic Processes

- Adjoint
  - G4AdjointhMultipleScattering: make it coherent with the forward multiple-scattering processes.
  - G4AdjointCSManager: use G4ThreadLocalSingleton pattern, fixed computation of A of an element, added initialisation of all class members in the constructor.
  - Fixed coverity defect in G4VEmAdjointModel.
  - Checked code for potential never-ending loops.
- DNA:
  - Added elastic model by H.Tran.
  - Vector of products becomes a pointer instead of a reference in `G4UserTimeStepAction::UserReactionAction()`.
  - G4DNAMillerGreenExcitationModel, G4DNABornExcitationModel: added `GetPartialCrossSection()` method.
  - Updated G4DNABrownianTransportation and G4Scheduler classes.
  - Updated G4TrackState & related classes.
  - Born headers: include both model versions when proxy header is included.
  - Added classes G4DNAEmfietzoglouExcitationModel, G4DNAEmfietzoglouIonisationModel and G4DNAUeharaScreenedRutherfordElasticModel.
  - Added temporary classes G4DNABornIonisationModel2 and G4DNABornExcitationModel2.
  - Added preliminary implementation of G4DNASmoluchowskiDiffusion.
  - G4ITTrackHolder: replaced use of `G4Threading::IsWorkerThread()` by `G4Threading::IsMasterThread()`.
  - G4DNAElastic: added check on name.
  - G4DNAIonElasticModel: cleanup and fixed potential double free.
  - Removed unnecessary `using namespace std` from few headers.
  - G4DNA processes: corrected setup of energy boundaries.
  - Added new classes G4ITLeadingTracks, G4ITSteppingVerbose, G4IosFlagsSaver, G4DNAElectronHoleRecombination.
  - Added new UI command `"/chem/tracking/verbose 1,2,3..."` in G4VITSteppingVerbose and G4ITSteppingVerbose.
  - Added methods `SetFormatedName(), NewConfiguration(), NewConfiguration(), AddDecayChannel()` per G4MolecularConfiguration, `Finalize()` to G4MoleculeDefinition; replaced `AddDecayChannel()` for a molecule model.
  - G4MolecularConfiguration: new configuration can be defined by labels; added `Finalize()` method and added exception if attempt to modified the G4MolecularConfiguration is done after finalization.
  - G4MolecularDissociationChannel, G4DNAMolecularReactionTable and G4DNAMolecularEncounterStepper: use G4MolecularConfiguration rather than molecule models.
  - G4Molecule: added constructor where only G4MolecularConfiguration is specified.
  - G4Scheduler: removed entirely track specification from this class. Added `GetGun()` method.
  - G4ITXProcess: deal with tracks.
  - G4ITTrackingManager is a "service" to start and finish tracking.
  - G4ITModelProcessor, G4ITStepProcessor: added macro to prevent warnings in verbose mode.
  - G4DNADingfelderChargeDecreaseModel: added hole creation.
  - G4DNAEmfietzoglouXModel: specify energy boundaries in constructor.
  - G4DNAEmfietzoglouIonisationModel: removed condition for faster code usage on shell selection.
  - Added easier handling of cumulative probabilities in SR elastic models.
  - Added new class G4Serialize.
  - Added accessors in G4MolecularReactionTable.
  - G4MoleculeGun, G4MoleculeGunMessenger: place gun randomly in a box.
  - G4DNAAttachment, G4DNAChargeDecrease, G4DNADissociation, G4DNAExcitation, G4DNAIonisation: updated processes & models initialisation.
  - Use standard `shared_ptr` types instead of old CLHEP wrappers.
  - Added stationary regime to all inelastic models.
  - Updated ion selection in G4DNARuddIonisationExtendedModel for Z>2.
  - Added proton ionisation scaling in G4DNABornIonisationModel1* classes.
  - Fixed issue of vector out-of-bounds in Sanche model.
  - Added base class G4VDNAPTBModel.
  - Removed `dynamic_cast` to G4VITProcess in G4ITStepProcessor.
  - Renamed G4DNAOneStepSolvatationModel to G4DNAOneStepThermalizationModel. Avoid placing products outside volume of the mother track and delete navigator state when model is deleted.
  - G4MoleculeCounter: fixed bug and made class compatible with G4DNAElectronHoleRecombination. Added a flag to check or not against scheduler time.
  - G4MoleculeTable: no longer store G4MolecularConf as G4MolecularConfMan is taking care of this.
  - Added classes G4VITDiscreteProcess and G4ReactionTableMessenger.
  - Added class G4DNARevertProbability, now used by G4DNAWaterDissociationDisplacer.
  - G4Scheduler: Update time before `G4ITStepProcessor::DoIt()`.
  - Reset leading tracks at the end of the call in `G4ITStepProcessor::DoIt()`.
  - G4ITModelProcessor: added `RegisterModel()` and `GetComputeTimeStep()` methods.
  - G4DNAMolecularReactionTable: delete reaction data when table is deleted.
  - G4DNAElectronHoleRecombination: enable using this model even when not all dissociation products have been defined (they will just not be taken into account).
  - G4DNAWaterDissociationDisplacer: fix and speed up distributions.
  - Requires G4EMLOW-6.48 data-set.
- High Energy
  - Checked code for potential never-ending loops.
  - Replaced use of variable 'L' to avoid shadowing of new volumetric units.
- Low Energy
  - New Monash Compton model G4LowEPPolarizedComptonModel including polarization.
  - Migrated G4LowEPComptonModel to multi-threading.
  - G4MicroElecElastic, G4MicroElecInelastic: fixed definition of default models at initialisation; by default use G4DummyModel.
  - G4UAtomicDeexcitation: added optional implementation of Auger cascade, based on proposal by B.Suerfu (see problem report #1727).
  - G4LowECapture: added capture process needed for MicroElec and DNA applications.
  - G4AtomicTransitionManager: improved Exception printout.
  - Fixed issue of over-generation of atomic deexcitation in PenelopeIonisation model when PIXE activated. Addressing problem report #1761.
  - Updated G4UAtomicDeexcitation for Bearden UI command. Cleanup initialisation, use only G4EmParameters.
  - Fixed cross-section names in G4UAtomicDeexcitation, G4empCrossSection and G4teoCrossSection.
  - G4PenelopeIonisationModel: use G4EmParameters.
  - Migrated MT-compliant Livermore polarized models for gammas.
  - Upgraded models for pair and triplet production.
  - Replaced G4Exception in G4PenelopeIonisationModel with printout.
  - Checked while/do loop in G4PenelopeBremsstrahlungFS.
  - G4LivermoreIonisationModel: increased intrinsic low limit from `10 eV` to `12 eV`.
  - G4UAtomDeexcitation: comment out unnecessary G4Exceptions.
  - Replaced use of variable 'L' to avoid shadowing of new volumetric units.
  - Checked code for potential never-ending loops.
  - Requires G4EMLOW-6.48 data set.
- Muons
  - G4MuMultipleScattering: do not redefine step limit type.
  - Checked code for potential never-ending loops.
- Polarisation
  - G4PolarizedCompton, G4ePolarizedIonisation, G4eplusPolarizedAnnihilation: changed initialisation taking into account MT mode; added method `ComputeSaturationFactor()` used in mean-free-path and step-limit corrections; removed `PreparePhysicsTable()` method (use one from the base class); fixed computation of the value of number of interaction lengths left which is responsible for the problem report #1698.
  - G4PolarizedComptonModel: revised do/while loop in sampling of gamma scattering angle.
  - Checked code for potential never-ending loops.
- Standard
  - G4GoudsmitSaundersonMscModel, G4GoudsmitSaundersonTable: completely revised and improved implementation of the model.
  - G4GoudsmitSaundersonTable: fix for problem report #1767.
  - New class G4PWATotalXsecTable for GS model.
  - G4UrbanMscModel: new positron correction dependent on e+ energy and material is added; new lateral displacement sampling algorithm is added as an alternative (disabled by default); flag is added to switch between lateral displacement sampling methods; repeat check on safety for each new step; added extra limit for very small step regime; use "distance" instead of "range" to compare with safety; fixed for rare long running event; `facsafety` parameter is set to 0.6 (was 0.3) to provide some CPU speedup for calorimeter simulation and tiny change of calorimeter response.
  - G4hMultipleScattering: do not redefine step limit type.
  - G4IonCoulombScatteringModel, G4eSingleCoulombScatteringModel: removed unnecessary `using namespace std` from header files.
  - G4IonCoulombScatteringModel, G4eCoulombScatteringModel, G4hCoulombScatteringModel: removed low-energy limits from scattering models, because it is now implemented inside ionisation.
  - G4IonCoulombScatteringModel, G4IonCoulombCrossSection: fixed wrong kinematics for the recoil. Addressing problem report #1763.
  - G4IonCoulombScatteringModel, G4hCoulombScatteringModel: fixed recoil kinematics. Addressing problem report #1778.
  - G4hCoulombScatteringModel, G4WentzelVIRelXSection: fully implemented scattering in CM rest frame of projectile/target.
  - Updated G4ScreeningMottCrossSection and G4eSingleCoulombScatteringModel; make optimal usage of vectors.
  - G4PAIModel, G4PAIPhotModel: fixed re-initilisation in MT mode.
  - Removed obsolete class G4PAIPhotonModel.
  - G4BraggIonModel: fixed non reproducibility problem. Addressing problem report #1771.
  - G4ASTARStopping, G4ESTARStopping, G4PSTARStopping: build Spline at initialisation of a vector.
  - G4UrbanMscModel, G4IonFluctuations, G4MollerBhabhaModel: take from material class the value of effective Z instead of computing it; fixing potential source of event non-reproducibility.
  - Use `nullptr` in models implementation. Use `rndmEngine->flatArray(n, rndm)` in sampling algorithms.
  - Checked code for potential never-ending loops.
  - Fixes for Coverity defects.
  - Requires G4EMLOW-6.48 data set.
- Utils
  - G4VEmModel: added extra interface `ComputeCrossSectionPerShell()`; added new feature, a flag allowing a user to "lock" model parameters protecting from overwrite by default values. Currently needed for the new Goudsmit-Saunderson multiple-scattering model.
  - G4VEmModel, G4VEmFluctuationModel: removed pointers to random engine, now handled by individual models (this fix is responsible for small CPU performance degradation).
  - G4VMscModel: compute distance to boundary even if a particle is inside the world volume (identified use-case when the world volume is filled not by vacuum but some material).
  - G4VEmProcess, G4VEnergyLossProcess, G4VMultipleScattering, G4VEmModel: added new interfaces for automatic description of processes/models to generate HTML pages.
  - G4VEnergyLossProcess: use lowest energy from G4EmParameters. Minor optimisation at the last step.
  - G4VEmProcess, G4VEnergyLossProcess, G4LossTableManager, G4EmConfigurator: removed tabs and improve code formatting.
  - G4VEmProcess, G4VEnergyLossProcess: avoid destruction of G4PhysicsModelCatalog at end of run.
  - G4VMultipleScattering: fixed algorithm of displacement beyond the boundary.
  - G4EmParameters, G4EmParametersMessenger: added new methods and respective UI commands for muon/hadron/ion multiple scattering: `SetMscMuHadRangeFactor(), SetMscMuHadStepLimitType()`, `"/process/msc/RangeFactorMuHad", "/process/msc/StepLimitMuHad"` and use these methods in G4VMultipleScattering; added vector of regions, public interface and corresponding UI commands by which PAI, MicroElec, or DNA models may be activated on top of any EM physics builders.
  - G4EmParameters, G4EmParametersMessenger: added added extra flag AugerCascade and its use in G4VAtomDeexcitation; added extra parameters accessors and UI command (`"/process/em/printParameters"`) to dump EM parameters, for lowest energy for e+- and muons/hadrons; added `SetDefaults()` method for initialisation of EM parameters; define allowed names for PIXE cross-sections and to multiple-scattering step limits; fixed PIXE cross-sections names; added UI command (`"/process/em/fluoBearden"`) for Bearden files and its use in G4VAtomicDeexcitation. Added `useMottCorrection` parameter, Get/Set, and UI command `"/process/msc/UseMottCorrection"`.
  - G4LossTableManager: moved run time methods to be inlined.
  - G4VAtomDeexcitation, G4LossTableManager: changed initialisation, now happening before `BuildPhysicsTable()` in each thread.
  - G4VAtomDeexcitation, G4EmProcessOptions: use only G4EmParameters for de-excitation module parameters.
  - G4EmCalculator: moved simple methods to inline; added public method `SetupMaterial()` for computation of cross-section per atom, to add initialisation of material (problem observed in Bremsstrahlung cross-section); added ComputeCrossSectionPerShell, minor fixes of printout; added special computation of dEdx for ICRU'73 based ion ionisation model. Addressing problem report #1792.
  - Checked code for potential never-ending loops.
  - Fixed Coverity defects.
- Xrays
  - Calculate `deltaTime` more accurately in G4Scintillation and G4Cerenkov.
  - Checked code for potential never-ending loops.

### Error Propagation

- Checked for potential never-ending loops.

### Event

- Fixed Coverity defects.
- Fixed logical bug in GPS relative to the use of `"/gps/source/clear"` UI command when old sources could still be used (addressing problem report #1744).
- Fixed problem report #1706.

### Externals

- Removed internal USolids module. Adapted scripts for optional builds against an installation of the Unified Solids Library in a different, outside location.
- Updated CLHEP module to version 2.3.1.1:
  - Added MixMax random engine classes implementing the "Matrix Generator of Pseudorandom Numbers", as described in J. Compt. Phy. 97, 573 (1991).
  - Added liter and its sub units to SystemOfUnits.h: `liter, L, dL, cL, mL`.
  - Fixed usage of `std::abs()` in RandGaussZiggurat.
  - Moved static methods handling static data in G4RandGauss from inline to source. Addressing problem report #1754.
  - Switch off gcc-5 warnings for deprecated calls to `auto_ptr` in Utility headers. Switch off gcc-5 warning for unused variable in Randomize.h header.
  - Use `std::shared_ptr` in random classes instead of internal Boost-derived implementation. In the Utility module, removed Boost derived implementation of `shared_ptr` and `weak_ptr`; removed no longer used type_traits.h header.
  - Corrected RandExpZiggurat to use shared_ptr as for all other distributions.
- Upgraded expat module to version 2.1.0. Use pragmas to suppress trivial warnings for GNU and Clang compilers.
- Upgraded zlib module to version 1.2.8. Keeping local modifications, like function declarationss, and removed obsolete register keyword; added type casts to fix compilation errors on Windows.

### General Processes

- Biasing
  - management:
    - Migrated to use G4VAuxiliaryTrackInformation: removed classes G4BiasingTrackData and G4BiasingTrackDataStore. Removed no longer applicable methods in G4VBiasingOperator.
    - G4VBiasingOperator : added `Configure()` and `ConfigureForWorker()` virtual methods, primarely intended to handle the G4VAuxiliaryTrackInformation ID's creation (ID's to be created using the G4PhysicsModelCatalog).
  - generic:
    - Migrated to use G4VAuxiliaryTrackInformation: created G4BOptrForceCollisionTrackData and rewritten G4BOptrForceCollision biasing operator accordingly. The bookkeeping of tracks to be biased is no longer made through state variables stored by the operator but through the G4BOptrForceCollisionTrackData; this makes the bookeeping much simpler, eliminates non-reliable cases, and allows for warnings to be issued in case a track to be biased is undeservedly deleted.
    - Removed dependency on deleted G4BiasingTrackData in 'management' module.
- Cuts
  - G4VRangeToEnergyConverter: added back call to `Reset()` in destructor.
  - Checked code for potential never-ending loops.
- Decay
  - Fixed issue in `G4Decay::DecayIt()` to check that the parent mass is enough for decay products.
  - Check on parent mass for decay products moved to method `G4VDecayChannel::IsOKWithParentMass()`.
  - Fix for spin treatment in decay in-flight. Addressing problem report #1783.
- Management
  - Cleanup source code of messengers.
  - Fixed Coverity defects in G4ProcessTable.
  - Checked code for potential never-ending loops.
- Optical
  - Change calculation of NewPolarization in G4OpRayleigh to avoid potential division by zero. If the polarization is perpendicular to the scattering plane, it will not change after the scattering.
  - Added call to `ProposeLocalEnergyDeposit()` for particle-change in G4OpAbsorption.
  - Corrected reflectivity calculation with complex refractive index; include the index of refraction of the PreStepPoint medium; allow for a real and imaginary part of the index of refraction. Addressing problem report #1762.
  - Checked code for potential never-ending loops.
- Scoring
  - G4ParallelWorldProcess: added verbosity to check update of field-track.
  - Fixed Coverity defects.

### Geometry

- Checked code for potential never-ending loops.
- Protected compilation of USolid wrappers with G4GEOM_USE_USOLIDS flag.
- Division
  - Fix for use of rotation matrix in G4VDivisionParameterisation in MT-mode; use thread-local pointer for rotation matrix as member of the class G4VDivisionParameterisation and set it to suto-delete. Removed unnecessary thread-local verbose flag. Addressing problem reports #1743 and #1758.
  - Set as unsupported divisions of polycone and polyhedra in MT-mode.
- Magnetic field
  - Change assignment to field instead of field array in G4RepleteEofM. Included `NumberOfVariables` in G4RepleteEofM constructor argument list.
  - Added check against number of iterations in `G4ChordFinder::FindNextChord()`, to identify potential cases of lack of convergence.
- Management
  - Added shadow pointers to shared data structures in G4LogicalVolume and G4VPhysicalVolume for exclusive use by object persistency.
  - Return const reference in G4LogicalVolume::GetName(). Addressing report #1757.
  - Use `G4Threading::IsMasterThread()` function in splitters.
  - In G4VSolid, moved `EstimateCubiVolume()` and `EstimateSurfaceArea()` to public section for specific use-cases and customisation of precision.
  - Replaced use of `sprintf` with C++ streams in G4AffineTransform.
- Navigation
  - `G4MultiLevelLocator::EstimateIntersectionPoint()`: fix for logic error in keeping consistent candidate intersection. Copes with case that a candidate intersection is not found in the next segment (typically in the 'second half' part). Ensure that splitting of step (new level/depth) advances the required length, used when adding a new level/depth. Revised condition of 'while' loop which ensures that a new candidate intersection exists. Corrected the resetting of 'first_section' flag. Replaced fatal error for exceeding max steps with warning and signal 'looping' for too many steps; G4PropagatorInField detects this condition, and identifies it as a 'Looping Particle' which is then flagged; the calling class (Transportation, PathFinder) is expected to stop the tracking of this particle after a few of these steps. Addressing issue seen by ALICE (non-finishing of step due to poor advances).
  - G4VIntersectionLocator: added new logging methods & revised interfaces.
  - G4NavigationLogger: added method to report issue with normal that is the result of applying a rotation.
  - G4NormalNavigation, G4VoxelNavigation: added check of rotated exit normal.
  - Removed unused leftover header file G4GeomTestVolPoint.hh.
- Solids (CSG)
  - Added USolids/VecGeom wrapper for G4Torus.
  - Introduced check in `G4Sphere::DistanceToIn(p,v)` for concave Theta and point located on the origin. Also make proper use of radial tolerance in `DistanceToOut(p,v)`.
  - Fixed Coverity defect in `G4CutTubs::GetMaxMinZ()`.
- Solids (Specific)
  - Added USolids/VecGeom wrapper for G4Paraboloid.
  - Added specialised implementation for `GetCubicVolume()` in G4TessellatedSolid.
  - G4PolyhedraSide: moved internal struct definitions to public section to overcome deficiencies in object-persistency class parsing.
  - Removed redundant condition in G4Polyhedra and G4Polycone `SetOriginalParameters()` method.
  - Minor code cleanup in G4SurfaceVoxelizer.
- Volumes
  - Enabled paramerisation by solid type in G4GeometryWorkspace in MT-mode. Assumes solids being parameterised are declared thread-local in the user's parameterisation class and allocated just once.

### Global

- First implementation of G4UniformRandPool for serial generation of uniform random numbers. Feature not actived yet.
- Introduced `IsMasterThread()` function in G4Threading header.
- Added type-info information to G4Allocator to aid debugging.
- Force use of G4MT wrappers for Intel-icc compiler for random numbers. Explicit settings for Intel-icc compiler in tls.hh.
- Added missing `inline` specification to functions in G4String.icc. Added string length check in `G4String::operator==()`.
- Tune radial tolerance to same value as for Cartesian tolerance in G4GeometryTolerance.
- Added units in G4SystemOfUnits.hh: `liter, L, dL, cL, mL`. Updated G4SIunits.hh and G4UnitsTable accordingly.
- G4PhysicsVector, G4Physics2DVector, G4PhysicsOrderedFreeVector: use `std::lower_bound()` instead of do/while loops.
- G4Pow: added protections against zero value of argument of methods `powN()`, `powA()` and `A13()`. Minor cleanup.
- Update date of release for 10.2.

### Graphical Representations

- HepPolyhedron: corrected a long-standing spelling mistakes. This is reflected in the method names, but the old names have been kept for backwards compatibility. Fixed Coverity defect.

### Hadronic Processes

- Fixed Coverity defects.
- Cross sections
  - G4CrossSectionDataSetRegistry, G4VCrossSectionDataSet: defined as G4ThreadLocalSingleton; delete all x-sections at exit except HP.
  - G4KokoulinMuonNuclearXS: fixed initialisation for the case of multiple runs.
  - G4DiffElasticRatio: added protection for hydrogen; added energy thresholds to skip treatment of low-energy particles.
  - Added description method to cross-section classes.
  - G4CrossSectionDataStore: additions to print Html documentation.
  - G4NeutronInelasticXS, G4NeutronCaptureXS: fixed isotope cross-sections including retrieve, data management, isotope x-section and isotope selection.
  - Deleted old classes G4GlauberGribovCrossSection, G4GGNuclNuclCrossSection, and replaced them with new, recommended ones G4ComponentGGHadronNucleusXsc and G4ComponentGGNuclNuclXsc, respectively.
  - Added artificial cross-section data set G4ZeroXS which always replies zero.
  - G4HadronNucleonXsc: fixed energies for K-p data in order to avoid crash when bounds check is applied.
  - G4ComponentGGHadronNucleusXsc: added `Default_Name()` method.
  - G4HadronNucleonXsc, G4ComponentGGHadronNucleusXsc: clean up of kaon-nucleon cross-section vector-arrays, no longer used.
  - G4CrossSectionDataSetRegistry: added same ad-hoc trick of NeutronHP to ParticleHP models to prevent problem at termination.
  - First implementation of fast-path (ASCR style) cross-section feature (currently OFF by default).
  - Properly treat initialisation of float quantities in G4HadronCrossSections.
  - Replaced use of variable 'L' in G4ElectroNuclearCrossSection.cc to avoid shadowing of new volumetric units.
  - Migrated code to use faster G4Exp, G4Log and G4Pow where possible.
- Management
  - G4HadronicProcessStore, G4HadronicProcess: fixed procedure of deletion at exit.
  - G4HadronicProcess: improved method `GetElementCrossSection()` to be used also with neutronHP (which needs a material defined).
  - G4HadronicProcessStore: print "/n", i.e. "per nucleon", in the kinetic energy limits of hadronic models in the case of ions. Addressing problem report #1775.
  - Replace condition in G4HadronicProcess::BiasCrossSectionByFactor() with initial capital letter for strings being compared. Addressing problem report #1740.
  - Updates to G4HadronicProcessStore for Html documentation.
  - Checked code for potential never-ending loops.
  - Models Management:
    - G4HadronicInteractionRegistry, G4HadronicInteraction: fixed deletion of models at exit. Made G4HadronicInteractionRegistry thread-local singleton.
    - G4HadronicInteractionRegistry: more accurate check on HP models.
- Processes
  - Changed default argument of G4He3InelasticProcess constructor to avoid confusion with triton. Addressing problem report #1782.
  - G4HadronElasticProcess: switch to `ProcessDescription()` interface.
  - Added G4PhotoCaptureProcess and G4PhotoFissionProcess classes.
  - Inline some methods in G4UCNBoundaryProcess.
  - Checked code for potential never-ending loops.
- Stopping
  - G4AntiNeutronAnnihilationAtRest: migration to G4Exp, G4Log and G4Pow.
  - G4HadronStoppingProcess: removed call to DeRegistration() to fix memory corruption reported by Valgrind.
  - Checked code for potential never-ending loops.
- Utility
  - G4NuclearPolarization: new container class keeping nuclear polarisation tensor.
  - G4Nucleus, G4Bessel and G4LightMedia: use G4Exp, G4Log and G4Pow.
  - Checked code for potential never-ending loops.
  - Models Utilities:
    - New implementations of G4Clebsch, G4LegendrePolynomial and G4PolynomialPDF for correlated gamma nuclear de-excitation.
    - G4Fragment: fixed copy constructor; fixed leak in operator=(). Use initialisers in constructors. Add usage of G4NuclearParameterization.
    - G4GeneralPhaseSpaceDecay, G4KineticTrack : extension to deal with decays with maximum 4 daughters (instead of 3).
    - G4KineticTrack: fixed final products list.
    - Use G4Exp, G4Log and G4Pow in place of std functions.
    - Checked code for potential never-ending loops.
- ABLA
  - Checked code for potential never-ending loops.
- Abrasion
  - Use G4Exp and G4Pow in G4NuclearAbrasionGeometry and G4WilsonAbrasionModel.
  - Checked code for potential never-ending loops.
- Bertini Cascade
  - G4InuclCollider: added special end-of-cascade test to require low-energy photo-nuclear and lepto-nuclear events to produce at least one non-gamma secondary. Currently hidden behind G4CASCADE_CHECK_PHOTONUCLEAR flag; will address problem report #1680 to increase neutron yield around the giant dipole resonance, without model changes.
  - G4KaonSampler, G4HyperonSampler: new copies of G4KaonHypSampler, which will eventually diverge with different energy binning, in order to extend kaon and hyperon final state tables to `~30 GeV`.
  - G4KaonSampler: modified to 30 bins, finely divided up to `1.5 GeV`, very coarsely grained above `10 GeV`. Binning optimized to isolate various resonances in Kp and Kn spectra.
  - G4CascadeKplusPChannel: use new G4KaonSampler binning, with final states tabulated up to 9-body. Should dramatically improve match to data.
  - Follow new G4cbrt() by moving powers of Z and A out of argument.
  Lookup table only covers real nuclei (up to about 300 or so).
- G4CascadeInterface: call static Initialize() function in constructor, for sequential builds or master thread.
- Migrated "TLS" local buffers in G4InuclSpecialFunctions and G4NucleiModel to use G4AutoDelete mechanism. This removes them as spurious memory leaks at end of job.
- G4CascadeCoalescence: added explicit inclusion of G4InuclElementaryParticle header to address compiler error from Cray (as reported in Configuration Hypernews Forum #1764).
- G4CascadeKplusNChannel: extended to 9-body final states and `32 GeV` using same energy bins as G4CascadeKplusPChannel.
- Migrated code to use G4Pow, G4Log, and G4Exp.
- Verified while-do loops conditions for potential non-termination.

- Binary Cascade
  - Improved fragmentation of fast residual nuclei in G4GeneratorPrecompoundInterface, with energies of the order of some TeV/nucleon. A residual is transformed in its rest frame. After fragmentation, all produced fragments are transformed to Lab. system.
  - G4GeneratorPrecompoundInterface: propagate for hA interactions. Fixed bug for a case when the actual mass of a residual nucleus is less than the ground state mass of the residual. Introduced CaptureThreshold variable and improved calculation of excitation energies of projectile and target nuclear residuals. Improved calculation of excitation energies of nuclear residuals for QGS model.
  - Migrated code to use G4Exp, G4Log, and G4Pow.
  - Checked code for potential never-ending loops.
- De-excitation
  - G4NuclearLevelStore: taken out access to G4LevelManager.
  - G4NuclearLevelData: new data class for nuclear levels and gamma transitions; pure singleton with data shared among threads. Adapted classes G4LevelReader, G4LevelManager and G4NucLevel accordingly.
  - G4LevelReader: added factor to transform half life time into life time.
  - G4NuclearLevelData, G4LevelReader: cleanup of reading of the data. Implemented lazy initialisation per isotope (before data for all isotopes for a given Z were uploaded); reduces initial memory footprint.
  - Moved new nuclear data structure classes to 'management' module. Removed obsolete G4E1SingleProbability1, G4VPhotonEvaporation classes.
  - G4VEvaporationChannel, G4VEvaporation, G4VEvaporationChannel: moved setters from G4PhotonEvaporation to reduce number of new/delete at initialisation.
  - G4VEvaporationChannel, G4LevelManager, G4EvaporationFactory, G4EvaporationDefaultGEMFactory, G4EvaporationGEMFactory: added new method `GetNearestLevel()` providing access to the nuclear level data from any nuclear decay channel. Providing implementation of `GetNearestLevel()` in G4PromptPhotonEvaporation.
  - G4Evaporation: access random engine before the loop.
  - Renamed G4PromptPhotonEvaporation as G4PhotonEvaporation, the old G4PhotonEvaporation class is renamed as G4PhotonEvaporationOLD.
  - G4PhotonEvaporation: added prototype of gamma transition class with correlated gamma emission. Computation of probability of gamma emission does not use level data information (and does not require uploading files); this reduces CPU used by de-excitation module.
  - G4PhotonEvaporation, G4GammaTransition, G4PolarizedGammaTransition: added protection against fragments with Z > 100. Added protection against wrong shell index.
  - Replaced use of variable 'L' in G4LevelReader.cc and G4PolarizationTransition to avoid shadowing of new volumetric units.
  - More accurate use of G4float, make explicit conversion to G4double when needed, use float const for initialisation of float.
  - G4WilsonAblationModel, G4EvaporationFactory, G4EvaporationFactory, G4ExcitationHandler: use default constructor of G4Evaporation and access photon evaporation class from G4Evaporation.
  - G4VEvaporationChannel, G4PhotonEvaporation: removed "timeType" which is no longer used; removed name of channel.
  - G4ChatterjeeCrossSection, G4KalbachCrossSection: new cross-section classes to be used for all evaporation fragments.
  - G4AlphaEvaporationProbability, G4DeuteronEvaporationProbability, G4EvaporationProbability, G4He3EvaporationProbability, G4NeutronEvaporationProbability, G4ProtonEvaporationProbability, G4TritonEvaporationProbability: use new classes above; reduced number of virtual calls and number of computations in the integration loop.
  - G4FissionParameters, G4CompetitiveFission: fixed kinematics; code cleanup.
  - G4EvaporationChannel, G4EvaporationProbability: optimisation of the sampling of final state.
  - G4WilsonAblationModel: complete migration to G4PromptPhotonEvaporation. Use G4Exp and G4Pow; fixed Coverity defect.
  - G4VGammaDeexcitation, G4PhotonEvaporation, G4E1Probability, G4DiscreteGammaTransition, G4DiscreteGammaDeexcitation, G4ContinuumGammaTransition, G4ContinuumGammaDeexcitation: tolerance is reduced from `1-10 keV` to `0.1 keV`. Required in order to address problem report #1760.
  - G4PolarizationTransition: new class for correlated gamma emission.
  - G4VEvaporationChannel, G4VEvaporationChannel, G4LevelManager: added extra method GetMaxLevelEnergy() needed for decay channels to distinguish continue and discrete excitation states.
  - G4FermiPhaseSpaceDecay: removed obsolete method to sample N-body decay and left only Kopylov one. Fixed compilation on Windows.
  - G4ExcitationHandler: increased limit for multi-fragmentation model from `4` to `400 GeV`, so rare cases when a fragment with very high excitation is sent to the de-excitation module are not treated any longer with this model.
  - Fixed cases of event non-reproducibility.
  - Checked code for potential never-ending loops.
- Elastic scattering
  - G4ElasticHadrNucleusHE : share cross-section tables among threads.
  - G4LMsdGenerator: modification in angle distribution to reduce angles at high energies. Changed final state for pi+- DD, according to recent COMPASS data.
  - Migration to use `ModelDescription()` for G4ChipsElasticModel, G4ElasticHadrNucleusHE, and G4HadronElastic.
  - G4ElasticHadrNucleusHE: added check on max Z. Fixed Coverity defect.
  - G4LMsdGenerator: disactivated internal elastic scattering of dissociated hadron.
  - G4NuclNuclDiffuseElastic: fixed trivial Coverity reports.
  - Removed unnecessary "using namespace std" statement from some headers.
  - G4LMsdGenerator: improved resonance masses, taking them from G4ParticleTable.
  - G4LMsdGenerator: included resonances recommended by the COMPASS experiment in diffraction dissociation. Fixed uninitialized variable responsible for event non-reproducibility.
  - G4DiffuseElastic: bug-fix in BuildAngleTable() to improve the angle bin accuracy at high energies.
  - Use G4Exp, G4Log and G4Pow in several classes.
  - Properly treat initialisation of float quantities.
  - Checked code for potential never-ending loops.
- Electromagnetic dissociation
  - G4EMDissociation: fixed memory leaks. Removed useless header file dependency on G4GeneralPhaseSpaceDecay.
- Fission
  - Migrated to use ParticleHP instead of NeutronHP.
  - Adapted interface in G4FissionLibrary with particle-hp module.
  - Set A and Z of actual target of reaction to "targetNucleus" from HadronicProcess. Reset isotope pointer to the target G4Nucleus object of reaction; fixing warning message about 'ReactionWhiteBoard disappeared'.
  - Migration to fast-math functions.
  - Checked code for potential never-ending loops.
- High Energy Theoretical
  - Migrated code to use fast math functions.
  - Properly treat initialisation of float quantities.
  - Checked code for potential never-ending loops.
- Im_r_matrix
  - Moved G4Clebsch class to 'models/util' module.
  - Cleared compilation warning on clang-3.6.
- INCLXX
  - Updated to INCL++ v5.2.9.5.
  - Removed unnecessary `using namespace std` statement in G4INCLXXInterface.
  - Introducing possibility to perform calculations with a limited number of outgoing pions in multi-pion collisions. Checked all the while loops in the code and added guards and comments.
  - Added some setters for configuration; added UI commands to control the INCL physics and the coupled de-excitation model; removed INCL_INVERSE_KINEMATICS compile-time symbol.
  - Omit use of real masses from incl42 physics option.
  - Fixed nuclide name parsing.
- Lend
  - Updated LEND code to LEND v1.3.
  - fixed case of energy non-conservation in Capture and Inelastic.
  - Migrated code to use fast math functions.
  - Fixed compilation problem on Intel-icc with c++11 enabled.
  - Checked code for potential never-ending loops.
- Lepto-nuclear
  - G4MuonVDNuclearModel: defined G4KokoulinMuonNuclearXS via factory interface allowing reuse of already instantiated class; keep pointer of G4KokoulinMuonNuclearXS instead of object in order to avoid double deletion at exit.
  - Migrated code to use fast math functions.
  - Checked code for potential never-ending loops.
- Particle High Precision
  - Fixing problem of possible infinite loop in G4ParticleHPEnAngCorrelation.
  - Fixed rare core dump in thermal scattering.
  - Uncomment out para/ortho hydrogen and liquid/solid methane.
  - Adjust A and Z in the case of mismatch between selected data and target nucleus.
  - Added G4ParticleHPMessenger class. Added UI commands for controlling options of HP package and verbose level.
  - Delete unnecessary issue of BuildPhysicTable.
  - Introducing ThreadLocalManager for storing information related to each individual reactions.
  - Avoid using the cache of cross-section, as the same feature is offered in G4CrossSectionDataStore.
  - Improved sharing of static data among threads.
  - Added model and cross-section descriptions.
  - Fixed problem on photon distribution. Addressing problem report #1745.
  - Fixed issue in MT-mode in Wendt-Fission-Fragment model.
  - Use G4Threading::IsMasterThread() instead of calls to IsWorkerThread().
  - Fixed cases of array out-of-bound errors.
  - Fixed problems at deletion and reproducibility in multi-threading mode.
  - Use `G4Threading::IsMasterThread()`.
  - Enable to use dynamically generated materials.
  - Improved memory consumption.
  - Fix problem in G4InterpolationIterator.
  - Fixes in G4ParticleHPProduct and G4ParticleHPEnAngCorrelation for solving event reproducibility issues.
  - Moved header files from old 'neutron_hp' module as typedefs to new types for backward compatibility. Added NeutronHP.History and FissFragGen.History, copies of the History files in the old neutron_hp module.
  - Replaced use of variable 'L' in G4ParticleHPThermalScattering.cc and G4PolarizationTransition to avoid shadowing of new volumetric units.
  - Migrated code to use fast math functions.
  - Checked code for potential never-ending do-while loops.
  - Note: if `ParticleHP` is used only for neutrons, as replacement for `NeutronHP`, then the usual neutron data library (G4NDL4.5) is utilized. In order to use `ParticleHP` for charged particles (protons, deuterons, tritons, He3 and alphas), the optional data set G4TENDL-1.0 is required, downloadable from the Geant4 web site.
- Parton-String
  - G4FTFParameters: tuning to improve the description of evaporated neutrons, based on an analysis of ITEP and Leray experimental data.
  - G4LundStringFragmentation: improved reaction cross-sections of: Pbar + P -> Pi+ Pi-, K+ K-.
  - G4FTFModel: changed lower energy limit from `2` to `1 GeV`.
  Introduced smearing of the excitation energy associated with an involved nucleon.
- Implemented correct coupling of FTF with BIC. Energy-momentum is conserved.
- Improved sampling of nucleon momenta after the Reggeon cascading in the method `G4FTFModel::SamplingNucleonKinematics()`. Added protection to Elastic hN scattering.
- Added new methods `Set/GetCofNuclearDestructionPr()` in G4FTFParameters, for projectile nucleus, according to last studies that Reggeon cascading depends on nuclear mass number.
- Tuned parameters in G4LundStringFragmentation according to NA49 data. Fixed case of potential FPE in `FragmentString()` function.
- G4ExcitedStringDecay: fixed bug leading to energy-momentum non-conservation in QGSM.
- Fixed bug in `G4QGSMFragmentation::SplitEandP()` for rare energy-momentum non-conservation.
- G4FTFParameters: fixed Valgrind error for uninitialized variables.
- Use G4Exp, G4Log and G4Pow.
- Checked code for potential never-ending loops.
- Pre-equilibrium
  - G4PreCompoundFragment: use classes G4KalbachCrossSection and G4ChatterjeeCrossSection; removed duplicate computations of these cross-sections; fixed sampling of kinetic energy of emitted fragment.
  - Fixed compilation problem on icc-16 in G4PreCompoundFragment.
  - Checked code for potential never-ending loops.
- QMD Reaction
  - Added model and cross-section descriptions.
  - Added new method GetExcitationHandler() in G4QMDReaction and deleted obsolete code.
  - Fixed bug in handling forgiven decay in G4QMDCollision.
  - Migrated to use fast-math functions.
  - Checked code for potential never-ending loops.
- Quasi-elastic
  - Fixed problem of double deletion.
  - Migrated code to use fast math functions.
- Radioactive Decay
  - Added new classes G4BetaMinusDecay, G4BetaPlusDecay, G4ECDecay and G4ITDecay to streamline inheritance chain and reduce non-reproducibility.
  - Use G4NuclearDecay as the new base class for all decay channels. This replaces G4NuclearDecayChannel.
  - Removed G4NuclearDecayChannel from G4RadioactiveDecay.
  - G4RadioactiveDecay: register G4UAtomicDeexcitation to G4LossTableManager in BuildPhysicsTable() so that electron shells can be found. Set Fluo and Auger flags to true, PIXE to false. Change code to create new atomic deexcitation only if one doesn't already exist.
  - Temporary removal of decay table map sharing for threads, to resolve observed failures in MT mode.
  - Activated Auger in `G4RadioactiveDecay::BuildPhysicsTable()`.
  - Re-enable setting of ARM on/off (default is on) in G4ITDecay and G4ECDecay.
  - `G4RadioactivedDecay::LoadDecayTable()`: implemented changes back to level search using tolerance (now `0.1 keV`).
  - `G4RadioactivedDecay::AddDecayTable()`: bug fix in combination of branching ratios (brs[1] -> brs[2] in beta+ decay).
  - G4ECDecay: use of daughter atom instead of parent atom when calling atomic relaxation.
  - Addressing problem report #1727 for Auger electron cascade missing vacancies.
  - G4ITDecay: fix memory leak of G4Fragment objects. Addressing problem report #1787.
  - G4RIsotopeTable: added object name in constructor; removed G4RIsotopeTable (now redundant) and all associated pointers from G4RadioactiveDecay.
  - Changed G4ProtonDecayChannel by G4ProtonDecay.
  - G4NeutronDecay added to work with the "Neutron" key in the radfiles.
  - Fixed cases of energy non-conservation in IT and EC modes due to incomplete atomic relaxation model. Addresses problem report #1756.
  - G4RadioactiveDecay::DoDecay(): pass parent mass + `30 MeV` to G4DecayTable::SelectADecayChannel() in order to account for difference in mass defects between parent and daughter.Addresses problem report #1793.
  - Removed obsolete class G4BetaFermiFunction and references to it in G4NuclearDecayChannel. Addresses problem report #1785.
  - Checked code for potential never-ending loops.
  - Requiring new data set RadioactiveDecay.4.3.
- RPG
  - Migrated code to use fast math functions.
  - Properly treat initialisation of float quantities.
  - Checked code for potential never-ending loops.

### Intercoms

- Deal with implementation of `remove_reference()` in G4AnyMethod for cases where one is compiling with the C++11 standard.
- Fixed Coverity defects in G4UImanager.

### Interfaces

- G4UIQt:
  - Added method `GetCoutDockWidget()` returning a QDockWidget.

### Materials

- G4IonisParamMat: corrected density effect parameterisation when density of a simple (one component) material differs from the nominal value; use G4Exp and G4Log; added protection for the case of large difference between nominal density and defined density of the material; for big difference Sternheimer-1971 parameterisation is used, while Sternheimer-1984 is normally applied (important for vacuum and low-density gas), this fix addressing problem report #1765.
- G4Element: always define effective number of nucleons `fNeff` as `fAeff/(g/mole)`; addressing post on Hadronic Processes Forum on Hypernews #1495; it is recommended to use `element->GetN()` for average atomic mass, for number of nucleons to use `G4lrint(element->GetN())`.
- G4NistManager: added method `FindOrBuildSimpleMaterial(Z)` and `GetNominalDensity()`; removed method `GetLOGA()`, duplicated from G4Pow.
- G4NistMaterialBuilder: fixed computation of gas density in method `ConstructNewGasMaterial()`. Added `FindOrBuildSimpleMaterial(Z)`; splitted implementation in longest private method.
- G4NistMaterialBuilder, G4SandiaTable: fixed minor Coverity defects.
- Checked code for potential never-ending loops.

### Parameterisations

- Gflash: Fix for Zeff wrongly computed as `( W1*Z2 ) + ( W2*Z1 )`, with Z1 and Z2 swapped. Addressing problem report #1719.

### Particles

- Added new method `G4VDecayChannel::IsOKWithParentMass()` to check that parent mass (dynamical mass) is enough for decay products. Added 'parentMass' as argument of `G4DecayTable::SelectADecayChannel()`. Channels which give false with `IsOKWithParentMass()` are ignored. Added parent_polarization.
- Added new method `G4PhaseSpaceDecayChannel::SetDaughterMasses()` to give daughter masses instead of sampling masses according to PDG mass and width. A new method of SampleDaughterMasses() switches back to sampling masses.
- Fixed bug in K-K* decay modes in G4ExitedMesonConstructor; K-K* modes in pi2(1670) decay were missing.
- Clean up of G4IonTable class; simplified `GetLifeTime()` and make sure worker threads know G4NuclideTable. Introducing a utility method `GetLifeTime(A,Z,E)`, returning the lifetime of a nuclide without instantiating a G4Ion object.
- Updated G4NuclideTable: deleted hard-coded state data, now retrieved from the G4ENSDFSTATE data set. Enabled to change tolerance value for finding state.Added messenger.
- Added methods to cleanly delete particle dictionaries when worker threads are deleted.
- Fixed Coverity defects and checked code for potential never-ending loops.

### Persistency

- GDML:
  - New GDML schema version 3.1.3 (files: gdml.xsd, gdml_core.xsd): Added 'userinfo' to GDML schema to allow 'global' auxiliary fields. Extended auxiliary field in the schema by `auxunit` and pointer to sub-auxiliary fields (no limit on the number of levels). Added optional field for specifying copy-numbers associated to normal volume placements.
  - Added support for writing and reading copy-numbers associated to placements.
  - Added writer support for auxiliary info (global and volume-specific).
  - Implemented import/export of geometrical regions associated to volumes for importing and storing production cuts and user-limits, as global auxiliary_info entity. Updated G4GDMLParser to optionally activate export of regions (default is OFF). Export of regions can be activated/de-activated by means of the new UI command `"/persistency/gdml/export_regions [true/false]"`.
  - Implemented ability to optionally export energy cuts associated to logical volumes (default is OFF). Export of energy cuts for volumes can be activated/de-activated by means of a new UI command `"/persistency/gdml/export_Ecuts [true/false]"`.
  - Fixed writing out of reflected volumes. No more redundant duplicated logical volumes in the store after import of geometry.
  - Allow for return of NULL pointer in call to GetWorldVolume() in case read command for importing a GDML file has not been yet issued. Addressing enhancement request #1412.
  - Use relaxed precision constant for matrix to angle formula evaluation in G4GDMLWriteDefine, to allow for proper treatment of singularities. Fixes issues of misplaced volumes in exported geometries of complex detectors.
  - Rectify rotation matrices in reading and writing GDML files to reduce spurious roundoff errors in stored values.
  - Protected compilation of G4MultiUnion wrapper with G4GEOM_USE_USOLIDS flag.
  - Code cleanup and formatting.

### Physics lists

- Migrated to 'particle_hp' module.
- Fixed Coverity defects.
- Builders:
  - G4INCLXXPionBuilder: fixed pion cross-section for pi-.
  - Do not delete model and x-section at exit to avoid double deletion.
- Constructors:
  - electromagnetic:
    - Added G4EmDNAPhysics_option2 and G4EmDNAPhysics_option3 constructors.
    - G4EmLivermorePhysics, G4EmLowEPPhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option1, G4EmStandardPhysics_option2, G4EmStandardPhysics_option3, G4EmStandardPhysics_option4: parameters for multiple scattering are defined via G4EmParameters class.
    - G4EmLivermorePhysics, G4EmLowEPPhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option3,4: set lowest e+- energy to `100 eV`.
    - G4EmStandardPhysicsWVI, G4EmStandardPhysicsSS, G4EmStandardPhysicsGS: set lowest e+- energy to `10 eV`.
    - G4EmLivermorePhysics, G4EmLowEPPhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option[1,2,3,4], G4EmStandardPhysicsWVI, G4EmStandardPhysicsSS, G4EmStandardPhysics, G4EmLivermorePolarizedPhysics, G4EmDNAPhysics_option[1,2,3,4,5]: call G4EmParameters::SetDefaults() in constructor for each electromagnetic physics-list.
    - Updated G4EmDNAPhysics_option1 for GenericIon usage.
    - G4DNAPhysics_option5: added Born models for energy regions where Emfietzoglou models do not apply.
    - G4EmDNAChemistry: adapted for new elastic model. Use G4MolecularConfiguration instead of G4Molecule.
    - G4EmModelActivator: added Ion elastic model + cosmetics.
    - New helper class G4EmModelActivator to activate PAI, MicroElec and DNA models per G4Region. Adapted constructor classes G4EmLivermorePhysics, G4EmLowEPPhysics, G4EmPenelopePhysics, G4EmStandardPhysics_option1, G4EmStandardPhysics_option2, G4EmStandardPhysics_option3, G4EmStandardPhysics_option4 G4EmStandardPhysicsWVI, G4EmStandardPhysicsSS and G4EmLivermorePolarizedPhysics to use G4EmModelActivator.
    - G4EmStandardPhysicsSS: full activation of the atomic de-excitation module.
    - Added constructor G4EmDNAPhysics_option4. Added G4EmStandardPhysicsGS constructor to use the Goudsmit-Saunderson multiple-scattering model for e+e- below `100 MeV`. Enable Rayleigh scattering and fluorescence.
    - G4EmStandardPhysics_option4: configure Penelope ionisation for e+- below `1 MeV`.
    - G4EmStandardPhysics_option4: use WVI+SS for pions, kaons, p, pbar.
    - G4EmStandardPhysicsGS: use PWA screening option for e+; set RangeFactor to 0.15; use `SafetyPlus` step limit.
    - G4EmStandardPhysicsWVI: set `RangeFactor` to 0.15.
    - Corrected proton energy limits in G4EmDNAPhysics_option2.
    - Added G4EmDNAPhysics_option5 constructor.
    - G4EmStandardPhysicsSS, G4EmStandardPhysicsWVI: enable Rayleigh scattering and fluorescence.
    - Define 'fluo' flag in constructors of all EM constructors.
    - G4EmStandardPhysics_option3, G4EmStandardPhysicsWVI, G4EmStandardPhysicsSS, G4EmStandardPhysicsGS: use G4LivermorePhotoElectricModel and G4KleinNishinaModel.
    - G4EmStandardPhysics, G4EmStandardPhysics_option1,2: set new Urban multiple-scattering lateral displacement off.
    - G4EmStandardPhysicsGS: tuned parameters; now compatible with standard Opt0.
    - G4EmStandardPhysicsSS: allowing Mott correction for e-.
  - decay
    - Added constructor for Spin decay, G4SpinDecayPhysics.
  - gamma_lepto_nuclear:
    - G4EmExtraPhysics: removed use of G4AutoDelete.
    - Fixed text in History (problem report #1788).
  - hadron_elastic
    - Replaced Chips neutron elastic cross-section with NeutronElasticXS cross-section.
    - G4HadronHElasticPhysics: fixed Coverity report for memory leak at exit.
    - G4IonElasticPhysics: replaced old class G4GlauberGribovCrossSection with new recommended one G4ComponentGGHadronNucleusXsc.
  - hadron_inelastic:
    - G4HadronPhysicsFTFP_BERT_TRV: changed the transition region between BERT and FTF from `[3, 12] GeV` to `[2, 4] GeV`.
    - G4HadronInelasticQBBC: reduced upper limit of Bertini from `12` to `4 GeV`; use BGG inelastic cross-sections for pions.
    - Use G4ComponentGGHadronNucleusXsc for the kaon inelastic cross-sections consistently everywhere (instead of either Chips or Gheisha cross-sections). According to LHCb, this class describes well the charged kaon cross section asymmetry.
  - limiters:
    - Added utility methods to G4GenericBiasingPhysics for selection of particles to bias: by PDG ranges, all charged (with option to exclude short lived particles), all neutral (with option to exclude short lived particles).
    - Added option for verbosity.
- Lists:
  - FTFP_BERT_TRV: now using G4EmStandardPhysicsGS.
  - Updates to g4alt::G4PhysListFactory to do more passthrough to underlying G4PhysListRegistry singleton.
  - G4PhysListRegistry more checking that all the requested physics constructor additions are available; updated output to closer match old factory.
  - Enable registration of ShieldingLEND, ShieldingM and G4GenericPhysicsList to g4alt::G4PhysListFactory.
  - G4PhysListFactory: added QGSP_BIC_AllHP. Addresses problem report #1732.
  - G4PhysListFactory: added extra EM option "_GS" where G4GoudsmithSoundersonMscModel is used for e+-; registered new QGSP_BIC_AllHP physics list to mirror original factory.
  - LBE: replaced old G4GGNuclNuclCrossSection class with the new recommended one, G4ComponentGGNuclNuclXsc.
  - Migrate responsibility for pulling the $PHYSLIST down to G4PhysListRegistry.
  - Allow user to set a preferred default in case $PHYSLIST is not set; initial value (and value when set to "") is system default "FTFP_BERT".

### Run

- New functionalities for MT:
  - Added new method `G4WorkerRunManager::DoWork()`, called by `G4MTRunManagerKernel::StartThread()` to process requests of new runs from kernel.
  - Moved setting of pin affinity from `G4MTRunManagerKernel::StartThread()` to G4WorkerThread.
  - Corrected handling of deletion of worker run-managers.
  - G4MTRunManager: removed explicit initialization of Bertini Cascade (now done in Bertini module).
  - Replaced calls to IsWorkerThread() by `G4Threading::IsMasterThread()`.
  - Fixed issue for random-number strong-reproducibility in MT mode. A new UI command has been introduced to allow to run in MT mode by forcing the random generator engine to use a specified state (stored in a file) for each event: `"/random/resetEngineFromEachEvent true"`. It looks for the files `runXevtY.rndm`, where `X` is the run-number (starting from 0), and `Y` is the event-number (starting from 0): if these files are not found, then the reseeding is ignored and the run proceeds as usual. This command allows to test the strong reproducibility in pure MT mode, e.g. to re-run a single event with the starting random engine status `G4Worker3_run0evt5.rndm` it is enough to rename (or copy) it as `run0evt0.rndm` and use the above UI command.
  - Invoking `G4ParticleTable::DestroyWorkerG4ParticleTable()` in G4WorkerRunManagerKernel destructor to cleanly delete thread-local particle dictionaries.
- Other changes (non MT related):
  - Added new G4MultiSensitiveDetector functionality.
  - G4VUserPhysicsList: lookup for default-world-region in G4RegionStore instead of accessing the store at index 0. It's not always guaranteed the default world region is the first element in the store!
  - Added MixMaxRng to the list of possible engines to use in `G4UserWorkerThreadInitialization::SetupRNGEngine()`. Requires installation of CLHEP version 2.3.1.1.
  - Fixes for Coverity defects.

### Track & Tracking

- New G4VAuxiliaryTrackInformation class to be associated to G4Track.
- Added 'Creator Model ID' and 'Creator Model Name' to G4Atts of G4RichTrajectory. Fixed Coverity defect.
- Fix in `G4ParticleChange::UpdateStepForPostStep()`.
- Added `GetNumberOfSecondariesInCurrentStep()` method to G4Step.

### Visualization

- Management
  - Now adopting dedicated thread for visualization in MT mode.
  - New interface in G4VViewer for multi-threading.
  - Re-implemented graphics system fallback strategy. A graphics system may have more than one nickname. This is used for finding a fallback graphics systems when, for example, a Qt session is requested but the user has not instantiated a Qt session, or when interactive graphics systems are prohibited, as in batch mode.
    This allows the user to run an application that is fully configured with all available graphics systems, even under circumstances for which the primary graphics system is inappropriate. For example, it allows one to make a image with these commands in a batch macro: `"/vis/open OGL"`, `"/vis/drawVolume"`, `"/vis/ogl/export"`.
  - Improved guidance for UI command `"/vis/scene/add/extent"`.
  - Fixed `"/vis/scene/add/eventID"` UI command for MT mode.
  - Introduced use of std chrono for queue handling in MT mode.
  - G4VisManager: corrected end-of-run printing for the case of `"/vis/multithreading/actionOnEventQueueFull discard"`.
  - G4VisCommandsViewer: improved guidance and confirmation printing for UI command `"/vis/viewer/save"`.
  - Improvements to help and verbosity printing.
  - New UI commands for multi-threading: `"/vis/multithreading/actionOnEventQueueFull"` and `"/vis/multithreading/maxEventQueueSize"`.
  - Added "light" representation to `"/vis/scene/add/magneticField"`.
  - Fixed Coverity defects.
- Modeling:
  - Augmented G4PhysicalVolumeModel interface. Added local transformation attribute.
  - G4TouchableDumpScene: added polyhedron dump for use with `"/vis/touchable/dump"`.
  - G4PhysicalVolumeSearchScene: optimised `ProcessVolume()` by setting variables only when needed and by comparing string length before comparing all string.
  - G4PhysicalVolumeSearchScene.cc: minor improvement; replaced an assignment by a reference.
- HepRep
  - Fixed compilation warnings on Windows/VC-14.
- OpenGL
  - Added methods to manage GLContext in Qt.
  - Fixing Qt visualization in MT mode on clang.
  - Fixed problem when zooming on small volumes.
  - Introduced sleep while waiting for pick action
  - Migrated to new G4VViewer interface.
  - A bit of cleaning in managing OpenGL context for Qt.
  - Fixed "SetVisible" problem on various platforms.
  - G4OpenGLViewer: fixed small problem in picking list.
  - Improved graphics system fallback strategy: implemented `IsUISessionCompatible()` in G4OpenGLQt and G4OpenGLXm; Qt not allowed unless a Qt session has been instantiated; interactive graphics systems (Qt, Xm) are not allowed in batch.
  - Fixed minor problem for Qt driver: open/close icons on scene tree/viewer properties and pick were not good at start.
  - Minor improvements to the interface on scene tree/viewer properties and pick item menu.
  - Fixed bug when launching OGL driver from a macro file (in batch mode).
  - Fixed Coverity defects in G4OpenGLViewer and G4OpenGLStoredViewer.
- OpenInventor
  - G4OpenInventorViewer, G4OpenInventorXtExtendedViewer: added viewer menu button and methods for PDF output.
  - G4OpenInventor: added IsUISessionCompatible(); set OI graphics system not compatible with a batch job.
- Tree
  - G4ASCIITreeSceneHandler: added physical volume dump for verbosity >=7.
  - Tidied and cleaned up att values after use.
- Externals
  - G4OpenGL2PSAction: added method `setBufferSize()`.

### Environments

- G4Py:
  - Updated interfaces for release 10.2.
  - Added exported methods as suggested in enhancement request #1613.
  - Updated CMakeLists.txt for C++11 migration and minimum required version for CMake to 3.3.

### Data sets

- New low-energy data set version, G4EMLOW.6.48:
  - Added elastic files by H.Tran for Geant4-DNA.
  - Added files by D. Emfietzoglou for Geant4-DNA.
  - Added files by M.Novak for upgraded version of the Goudthmit-Sounderson multiple-scattering model.
  - Substituted 2016 files in ion_stopping_data by new PASS computations.
  - New files for upgraded version of the Goudthmit-Sounderson multiple scattering model in the sub-directory 'msc_GS'.
  - Added directories livermore/tripdata and livermore/pairdata used by the new Livermore polarized gamma models.
- New data files for nuclides properties G4ENSDFSTATE-1.2:
  - Updated state data based on February 2015 input data from ENSDF.
  - Fixed missing ground state of Cl35.
  - Fixed duplicated entry for ground state of 21N.
  - Fixed formatting in ground state of 223Rn.
- New data set version PhotonEvaporation.3.2 for nuclear de-excitation data:
  - New photon evaporation database meant to be consistent with version 4.3 of the radioactive-decay database. Also formatted to remove scientific notation where possible and to remove trailing zeros.
- New data set version for radioactive-decay processes, G4RadioactiveDecay.4.3:
  - New files with February 2015 input data from ENSDF and nuclear wallet cards. Q values are computed with QCalc. Data overlapping with those in G4PhotonEvaporation-3.2 and G4ENDSFSTATE are intended to be consistent.
  - Added proton, neutron emission and spontaneuos fission lines.
- New optional data set, G4TENDL-1.0 for incident proton data:
  - Set translated from the TENDL-2014 incident proton, deuteron, triton, He3 and alpha data libraries (written in ENDF-6 format), excluding the elastic channel. Of the about 2600 isotopes contained in the TENDL-2014 libraries, only those present in the G4NDL-4.5 neutron data library have been included. For the few isotopes available in the corresponding ENDF/B-VII.1 data libraries, the data are taken from the latter instead of TENDL-2014..

### Examples

- Updated reference outputs, macros and scripts.
- advanced
  - air_shower
    - Replaced call to obsolete `GetDz()` for G4Tubs to `GetZHalfLength()` in UltraDetectorConstruction.
  - composite_calorimeter
    - Migrated to use 'particle_hp' module.
  - gammaray_telescope
    - GammaRayTelIonPhysics: replaced use of G4GGNuclNuclCrossSection with recommended one, G4ComponentGGNuclNuclXsc.
  - hadrontherapy
    - General revision and fixed comments.
  - iort_therapy
    - Migrated to use g4tools.
  - lAr_calorimeter
    - Fixed internal array overflow in FCALTestSetupSD, causing crashes in MT.
  - microbeam
    - Added stronger constraints on `SetMinimumEpsilonStep()` and `SetMaximumEpsilonStep()`.
    - Switched to use G4UIExecutive.
  - nanobeam
    - Updated analysis script.
  - underground_physics
    - DMXPhysicsList: replaced use of G4GGNuclNuclCrossSection with recommended one, G4ComponentGGNuclNuclXsc.
    - Migrated to use 'particle_hp' module.
  - xray_fluorescence
    - Updated livermore.mac macro.
- basic
  - B1
    - B1Run class replaced with a code based on G4Parameter.
  - B3
    - Split example in two variants of merging data: B3a (new) with the code based on G4Parameter; B3b (as previous B3) with the code based on G4Run.
  - B5
    - Extended n-tuple with two columns of a vector type in order to provide an example of this analysis use case.
- extended
  - analysis
    - AnaEx01: Updated hbook for developments in analysis category: implemented interfaces for activations of ntuples.
    - Introduced meaningful histograms and ntuple names instead of numbers in all AnaEx0N examples and use histogram ids starting from 0.
    - Simplified HistoManager class and fixed function names to follow coding guidelines.
    - Updated hbook for developments in analysis category.
  - biasing
    - biasing/GB02
      - Biasing scheme evolved to use G4VAuxiliaryTrackInformation. Adapted example to these changes: second `OperationApplied()` method implemented in GB02BOptrMultiParticleForceCollision.
    - biasing/GB04
      - Bug fix in GB04BOptnBremSplitting for missing call to `SetSecondaryWeightByProcess(true)`.
    - biasing/ReverseMC01
      - RMC01AnalysisManager: added variable `fNentry` in order to correctly compute mean and error of energy deposition.
  - common
    - Added a client-specific prefix to common library and test to avoid name clashes when building all extended examples at once.
  - electromagnetic
    - electromagnetic/TestEm0
      - Removed local `SetCutFor*()` methods from PhysicsList and 'setCut' command from PhysicsListMessenger, to use `"/run/setCut"` UI command.
    - electromagnetic/TestEm1
      - Added EM standards physics builders GS, WVI.
      - PhysicsList: removed `SetICM()` method.
    - electromagnetic/TestEm2
      - PhysicsList: use GS, WVI, SS EM physics from main library.
    - electromagnetic/TestEm3
      - PhysicsList: use GS physics from main library.
      - TestEm3: use default 4 threads, improved vis.mac macro.
      - PhysListEmStandard: use G4EmParameters.
    - electromagnetic/TestEm5
      - PhysicsList: use GS physics from main library.
      - DetectorConstruction: do not remove volumes when sizes are changed.
      - SteppingVerbose: restored usage of this class.
      - TrackingAction: cleanup logic of transmitted/reflected particles.
    - electromagnetic/TestEm6
      - Added more standard EM physics builders.
    - electromagnetic/TestEm7
      - Replaced CLHEP header inclusion for units in G4ScreenedNuclearRecoil.
    - electromagnetic/TestEm8
      - RunAction, Run, StackingAction: improved histogram handling.
      - PhysicsList: added SS, GS, WVI physics-lists.
      - Macro files: added alternative configuration of PAI models via UI command.
      - PhysicsList: removed configuration of PAI models via G4EmConfigurator and left only method via UI command; set default verbosity to zero to reduce length of reference output; fixed initialisation of StepMax in MT mode.
      - DetectorConstruction: allowed to change geometry sizes between runs.
      - TestParameters: added parameters needed for ALICE TRD simulation.
      - Use one thread for interactive mode; improved vis.mac macro.
      - Updated macro files.
    - electromagnetic/TestEm9
      - Added physics lists G4EmStandardPhysicsGS, SS, WVI.
      - Applied code guidelines, removed tabulation.
    - electromagnetic/TestEm10
      - Em10PhysicsList: removed obsolete header.
    - electromagnetic/TestEm11
      - RunAction: corrected bin width of histogram #1.
      - Added EM physics builders G4EmStandardGS, WVI.
      - Added EM physics builders G4EmStandardPhysicsMP which uses G4DiscreteScatteringModel for e-.
      - Use G4EmParameters in local Physics List classes.
    - electromagnetic/TestEm12
      - PhysicsList: use GS physics from main library.
      - RunAction: corrected bin width of histogram #1.
    - electromagnetic/TestEm13, TestEm14
      - DetectorConstruction::SetMatetial(): allow NIST materials.
    - electromagnetic/TestEm17
      - Set default EmParameters in PhysListEmStandard.
      - PhysicsList, PhysListEmStandard: fixed upper energy for physics tables.
  - eventgenerator/userPrimaryGenerator
    - New example showing how to create a primary event including several vertices and several primary particles per vertex.
  - eventgenerator/exgps
    - Added in ctest with distribution from histogram for PhysicsChecks.
    - Updated macros with new commands for H2.
    - Fixed documentation.
  - eventgenerator/particleGun
    - PrimaryGeneratorAction1: added randomization of time zero of each event.
  - eventgenerator/pythia/decayer6
    - Set a specific prefix to common library and test to avoid name clashes when building all extended examples at once.
  - exoticphysics/channeling
    - Added full integration of particle trajectory into the channeling process.
    - Added beampipe and detector box to the detector construction.
    - Modified wrapper classes to correct bugs in energy loss calculation under channeling.
    - Added to the wrapper class the InCrystal parameter in order to be completely transparent if the particle is outside a volume with a lattice. Added InCrystal parameter to the user info to switch between single and multiple scattering.
    - Single and multiple scattering are enabled/disabled if the volume has or not a lattice.
    - Added data files for Si110 and Si111 planar nuclei density, planar electron density and planar electric field.
    - Minor modification to XPhysicalLattice.
    - Minor modification to the macro to analyze the output data.
  - exoticphysics/monopole
    - Removed EventAction and EventActionMessenger classes, now obsolete, and replaced `"/testex/event/printModulo"` UI commands in macros with `"/run/printProgress"`.
  - exoticphysics/phonon
    - XAluminumElectrodeHit: make simple container with public data members.
    - XAluminumElectrodeSensitivity: improved MT robustness, make HC local, make file streams shared-static, with protective mutexes.
    - Updated output reference logs.
  - exoticphysics/ucn
    - Corrected way to access `G4Transportation::EnableUseMagneticMoment()`.
    - Removed `AddBetaDecay()` method. Added `NumberOfVariables` in G4RepleteEofM constructor.
  - field/field01, 02, 03
    - Removed EventActionMessenger classes, now obsolete, and replaced `"/event/printModulo"` UI commands in macros with `"/run/printProgress"`.
    - Code cleanup.
  - field/field04
    - Removed obsolete commands from macros.
  - field/field05
    - Use new G4SpinDecayPhysics constructor in PhysicsList.
  - field/field06
    - Removed AddBetaDecay() method.
  - g3tog4
    - Set a specific prefix to common library and test to avoid name clashes when building all extended examples at once.
  - geometry/transforms
    - Updated vis.mac macro to draw axes.
  - hadronic/FissionFragment
    - Limit number of worker threads of one.
  - hadronic/Hadr01
    - PhysicsList: updated according to developments in reference physics-lists.
  - hadronic/Hadr02
    - Removed obsolete interface to DPMJET.
  - hadronic/Hadr03
    - Fix in SteppingAction for setting pointer to hadronic process.
  - hadronic/Hadr04
    - Migrated to use 'particle_hp' module.
  - hadronic/Hadr06
    - Migrated to use 'particle_hp' module.
  - medical/dna
    - chem2
      - In G4UserTimeStepAction::UserReactionAction(), vector of reaction products becomes a pointer instead of a reference.
      - CommandLine option: -mt option restaured with 2 as default number of threads.
      - Updated visualization macros.
    - chem3
      - In G4UserTimeStepAction::UserReactionAction(), vector of reaction products becomes a pointer instead of a reference.
      - CommandLine option: -mt option restaured with 2 as default number of threads.
      - Updated visualization macros.
    - clustering
      - New example simulating protons tracks in liquid water using Geant4-DNA processes and models. Energy deposit are clustered with a dedicated clustering algorithm to assess strand breaks. The default parameters of the clustering algorithm have been tuned to reproduce data published by Francis et al. 2011 Comput. Meth. Programs. Biomed. 2011 101(3).
    - dnaphysics
      - Switched to use G4UIExecutive.
      - Use G4EmModelActivator to define DNA physics.
      - Added `"ignoreCut"` UI command in dnaphysics.in macro.
    - pdb4dna
      - Removed modulo printing at EventAction level.
    - range
      - New example showing how to calculate range of electrons in liquid water using the Geant4-DNA physics processes and models.
    - svalue
      - New example showing how to calculate mono-energetic S values in liquid water using the Geant4-DNA physics processes and models.
    - wvalue
      - New example showing how to calculate w in liquid water for e- using the Geant4-DNA physics processes and models.
  - medical/DICOM
    - Fixed coding guidelines (long lines).
  - medical/electronScattering2
    - Removing from master unnecessary instance of GPS.
    - Added physics-list G4EmStandardGS to PhysicsList.
    - Modifid primary foil parameters by setting class variables and calling G4RunManager [Physics/Geometry]HasBeenModified.
    - Removed local physics lists.
    - Correction to only instantiate VisManager if no macro file is specified on command line.
  - medical/fanoCavity[1,2]
    - Migrated code to support multi-threading.
    - Use G4EmParameters instead of G4EmProcessOptions.
    - Removed EventActionMessenger class. Replaced printModulo by `"/run/printProgress"` UI command.
  - optical/OpNovice
    - Use `G4Threading::IsMasterThread()`. Introduced G4ThreadLocal in OpNovicePhysicsList.
  - optical/WLS
    - Removed obsolete commands from macros.
  - parallel/MPI
    - Fixed bug in exMPI02 using wrong calls to random generator for generation of primaries.
    - Introduced new functionality in G4mpi library to merge G4Run, scorers and g4tools histograms/profiles across MPI ranks.
    - Introduced new example exMPI03, based on same geometry and physics of exMPI02 to demonstrate merging capabilities.
    - Added implementation of histo merger with use of g4analysis and g4tools; kept temporarily old merger class.
    - Optimized merging for G4Run and scorer.
    - Improved CMake scripts for standalone use: allow for library and examples to be built together.
    - Increased verbosity during build phase to print out location of MPI library and headers. Updated CMake scripts.
    - Building of MPI library requires CMake minimum version to be 3.3.
  - parallel/ThreadsafeScorers
    - New example demonstrating a very simple application where an energy deposit and # of steps is accounted in thread-local (i.e. one instance per thread) hits maps with underlying types of plain-old data (POD) and global (i.e. one instance) hits maps with underlying types of atomics.
  - parameterisations/gflash
    - ExGflashPhysicsList replaced with ExGflashPhysics builder.
    - Code clean-up, coding guidelines.
  - parameterisations/Par02
    - New example implementing a simplified version of a Geant4-based fast simulation program for Future Circular Collider (FCC), showing how to do "track and energy smearing".
  - persistency/gdml/G01
    - Added example code showing how to import and export auxiliary information.
    - Enabled export of geometrical regions.
  - persistency/gdml/G02
    - Added mbb.geom mbb.tree to G02_SCRIPTS.
  - persistency/gdml/G04
    - Migrated code to support multi-threading.
  - persistency/P01, P02
    - Upgraded to work with Root-6.
  - persistency/P03
    - Removed ExTGPhysicsList class.
  - radioactivedecay/rdecay01
    - PhysicsList: removed call to SetICM(). Removed initialization of UAtomicDeexcitation.
    - Compute total visible energy in TrackingAction, EventAction, Run and HistoManager.
    - Removed EventMessenger classe, now obsolete, and replaced `"/event/printModulo"` UI commands in macros with `"/run/printProgress"`.
    - PhysicsList: added LevelTolerance (`100*eV`) and HalfLife (`0.1*ps`).
    - Updated it1.mac and it2.mac macros.
  - radioactivedecay/rdecay02
    - Migrated to support multi-threading.
    - Migrated to use g4tools for analysis.
  - runAndEvent/RE06
    - Added new macro file for testing on Xeon Phi with limited statistics.