Geant4 9.1 Release Notes

December 14th, 2007

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

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

## Contents

1. Supported and Tested Platforms
2. CLHEP and AIDA
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. Known Run-Time Warnings
9. Geant4 Software License
10. Detailed list of changes and fixes

## 1. Supported and Tested Platforms

Official platforms:

- Linux, gcc-3.4.6.
  Tested on 32 bits architectures and 64 bits architectures (Intel or AMD) with the Scientific Linux CERN 4 (SLC4) distribution (based on RedHat Linux Enterprise 4). Versions of Geant4 have also been compiled successfully on other Linux distributions, like Debian, Suse or other RedHat systems.
- MacOSX 10.4, gcc-4.0.1
- SUN Solaris 5.8, C++ CC-5.5.
- Windows/XP and CygWin Tools with: Visual C++ 8.0 (Visual Studio 2005)

More verified configurations:

- Linux, gcc-3.2.3, gcc-4.2.2
- Linux, Intel-icc 9.1
- SUN Solaris 5.8, C++ CC-5.4 Patch 111715-02
- Windows/XP and CygWin Tools with: Visual C++ 7.1 .NET

Platforms configured but not tested and not supported:

- AIX 4.3.2, xlC 6.0
- DEC V4.0, cxx C++ V6.1-027
- HP 10.20, aCC C++ B3910B A.01.23
- SGI V6.5.5, CC 7.2.1

## 2. CLHEP and AIDA

Geant4 9.1 requires the installation of CLHEP.
Tests have been performed with CLHEP-2.0.3.2

Geant4 9.1 examples with histogramming cowork with analysis tools compliant to AIDA 3.2.1 interfaces (for details, see Appendix 2 of the Users Guide for Application Developers).
AIDA headers can be downloaded from: http://aida.freehep.org

## 3. Items for migration of the user code

Listed here is some relevant information on developments included in this release, some of which may require migrations (mainly for advanced uses of features in Geant4) in order to upgrade from release 9.0 to release 9.1. Note that a full re-installation of libraries (or a full recompilation) and a recompilation of user applications is required.

Geometry

The revision of `G4TessellatedSolid` required a name change for some public methods. User code making explicit use of these methods should migrate accordingly.

Low Energy Electromagnetic physics

The prototype interfaces of beta-version `G4DNA*` processes have been replaced by a unique process. Prototype user code is required to migrate; in principle the migration is limited to replacing `typedef` statements.

Standard Electromagnetic physics

The `G4Cerenkov` process was changed from being an `AlongStep` process to a `PostStep` process. Custom user physics-lists that include `G4Cerenkov` must be changed accordingly:

       pmanager->AddContinuousProcess(theCerenkovProcess);

to:

       pmanager->AddProcess(theCerenkovProcess);
       pmanager->SetProcessOrdering(theCerenkovProcess,idxPostStep);

Hadronic physics

Gamma level file warnings in `G4NuclearLevelManager` have been suppressed, so if an isotope has no data, no warning will be issued. To turn them on again, set the pre-compiler flag `GAMMAFILEWARNING` as follows:

       CPPFLAGS += -DGAMMAFILEWARNING

and re-build the library in `processes/hadronic/models/de_excitation/photon_evaporation` of Geant4.

Fast Parameterised Simulation

The process `G4FastSimulationManagerProcess` (`G4FSMP`) can be used for trigger fast simulation models. These can be attached either to a region of the primary 'mass' geometry or to a region of a parallel (ghost) geometry.
In the first case, the user has to attach an instance of the `G4FSMP` process as a `PostStep` process to particles having a fast simulation model in the mass geometry; this remains unchanged.
A change is required in the second case, of a ghost geometry: the `G4FSMP` process now must be attached as an `AlongStep+PostStep` process to particles having fast simulation models bound to regions of the ghost geometry.
The `AlongGetPhysicalInteractionLength()` method of the `G4FSMP` process must be placed second-to-last in this case (i.e. after the Multiple Scattering, but before the Transportation processes). An example is given in the physics-list defined in `examples/novice/N05`.

Data Sets

This release introduces a new data set and two new versions. Please see the last section for the corresponding details.

- New data for neutron cross-sections, G4NDL.3.12.
- New low-energy data set, G4EMLOW.5.1.
- New data set for nuclear shell effects, G4ABLA3.0 used by the new ABLA .

## 4. New Developments and Capabilities

Geometry

- Introduced new navigation for phantoms and similar regular structures. The new algorithm provides fast navigation and no memory overhead for voxels phantoms and similar geometries. An option is available to skip volume boundaries, when the volumes on either side hold the same material. The example in `extended/medical/DICOM` has been revised to demonstrate the usage of the new parameterisation required and the corresponding navigation. In addition it enables comparison against existing algorithms, including the nested parameterisation (which had reduced memory overhead) and the older 3D optimisation.

GDML detector description persistency

- A plugin-module for GDML can be installed optionally in Geant4. This replaces the dependency on the external GDML (GDML-2.X series) library. The new module includes all the features supported in the old GDML library for importing GDML descriptions, except for handling of parameterised volumes and material optical properties. (These will be added in a future version of the new plugin.) It remains possible to use the old external GDML library, if needed.

Low Energy Electromagnetic physics

- Fully functional capabilities of physics processes in liquid water for microdosimetry simulation are provided in this release; details can be found in S. Chauvie et al., "Geant4 physics processes for microdosimetry simulation: design foundation and implementation of the first set of models", IEEE Trans. Nucl. Sci., vol. 54, no. 6, Dec. 2007.

Standard Electromagnetic physics

- Non-ionizing energy loss is filled by ion ionisation processes and is available to user actions.
- The new process `G4ionGasIonisation` is available. It is recommended to be used for simulation of ion transport in low-density media.
- The process `G4CoulombScattering` was verified and is proposed to be used instead of the multiple scattering process for simulation of scattering in low-density media.
- The `G4ScreenNuclearRecoil` process developed by the Vanderbilt University group is available with the extended example `TestEm7`. This process is an alternative to the multiple scattering process for ions.
- The simulation of energy loss of the classical magnetic monopole is provided. The example of Physics List with the monopole is available with the new extended example `exotic_physics/monopole`.

Hadronic physics

- Extended applicability of the Binary cascade. `G4BinaryCascade::Propagate()` method is first released. This allows the use of the Binary cascade to transport the remnants of a high energy collision, as it has become model in the high energy framework (`G4TheoFSGenerator::SetTransport()`). This feature is aimed for expert use currently, as validation is starting.
  The binary cascade can now be used for pions, benefiting from a bug fix for incident pions; validation is in progress.
- The first, alpha release of the new INCL (Liege) cascade module is included. This will be an alternative to the Binary and Bertini cascades, are already offered in Geant4, and valid up to `3 GeV`. It has been converted from the Fortran implementation and its validation is ongoing.
- First, alpha release of new QMD (quantum molecular dynamics) nucleus-nucleus interaction code. Its validation is ongoing.
- High precision neutrons: G4NDL 3.12 data set is now released. This uses JENDL entries for Cd isotopes, and adds four new elements with their corresponding isotopes: `Hg`, `Ra`, `Br`, and `La`.

Physics Lists

Several new physics lists are offered, providing new configurations or new modeling options. Feedback via the Hypernews Forum on physics lists is welcome. The new physics lists are:

- FTFP_BERT and QGSC_BERT: both of these reduce the use of parameterized modeling. For proton, neutron, pion and kaon induced inelastic hadronic interactions the parameterized model is not used.
- QGSP_DIF and QGSP_BERT_DIF: for diffractive scattering of proton and neutron at high energies a diffractive scattering model provided by CHIPS is used.
- QGS_BIC and FTF_BIC: offering new developments of Binary cascade. For more details, see the detailed notes.

Command-based scoring

- The user can use this new ability to score on an arbitrary three-dimensional scoring mesh, using only new user commands. No user code needs be written to apply the scoring. It utilises a parallel world making the mesh geometry can be independent of the mass geometry. An arbitrary number of physics quantities to be scored and filters affecting these scorers can be assigned to the mesh. After scoring has been applied (i.e. after the run), the user can visualize the score map and also dump scores into a file. Relevant UI commands are listed in the Application Developers Guide, and the new `extended/runAndEvent/RE03` example demonstrates their usage.
- Command-based scoring is in Beta release; commands and methods are subject to modification in future releases. Feedback will be greatly appreciated.

## 5. Expected effects on physics and performance

Standard Electromagnetic physics

- Improved simulation of the high-energy gamma tail for muon Bremsstrahlung (rare process, important for background simulation - NA49).
- Improved simulation of straggling for ions; the width of the Bragg peak becomes stable versus modification of the cut in range.

Hadronic physics

- Fixed problem reported by ATLAS of high energy collision of `sigma+` and a nucleon producing a high energy backward proton. This problem has been in the hadronic code since the beginning and was due to incorrectly selecting evaporated nucleons as leading particles. At `1 TeV` incident energy, this type of event occurred 0.5% to 1% of the time when the HEP models are used. After the fix, no high energy backward nucleons are observed, with the effect that such events will not exist to mimic exotic reactions.
- Bug fixes and completed implementation of theory in `G4PreCompoundModel` and `G4Evaporation` have produced a 10-15% increase in neutron flux for `2.5 GeV/c` protons incident on `Pb`.
- Correct time is now set for secondaries, instead of global time. This will primarily affect neutron times for users of the HP neutron package.
- An angular distribution bug in Bertini cascade has been fixed. Previously, double differential cross sections showed an excess of events at high energy and small to medium scattering angles. The fix removes this by using an `exp(t)` distribution for nucleon-nucleon scattering above `2.8 GeV`. This will result in only a small reduction of average particle energy in the secondaries.
- Bug fix in quasi-elastic scattering may cause shower shapes to be a bit shorter and wider when using QGSC/QGSP physics lists.

## 6. Known Run-Time Problems and Limitations

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

## 7. Compilation Warnings

There are compilation warnings on some tested platforms. We do not believe that any of these lead to incorrect run-time behaviour.

## 8. Known Run-Time Warnings

The following message can be written to standard output at the end of a program:

        G4Transportation: Statistics for looping particles
           Sum of energy of loopers killed:
           Max energy of loopers killed:

It provides the total energy (in `MeV`) of tracks killed due to excessive number of steps ('looping') during the simulation, and the maximum energy of such a track. Such behaviour can be due to looping in magnetic fields or encountering problems at geometrical boundaries.

In case either of these reported energy is significant, we recommend to increase the verbosity of `G4Transportation` to obtain information for each track killed. A user can change the threshold energy above which particles are not killed using the method `SetThresholdImportantEnergy` of `G4Transportation`. The default value is `250 MeV`.

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

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

- New modules added to `binmake.gmk`: `digits_hits/scorer`, `processes/hadronic/models/rpg`, `processes/hadronic/models/incl` (Liege cascade), `processes/hadronic/models/qmd` and `persistency/gdml`.
- Introduced `G4LIB_BUILD_GDML/G4LIB_USE_GDML` flags to trigger compilation of `gdml` plug-in. Added setup for XercesC. Required path `XERCESCROOT` to XercesC installation if `G4LIB_BUILD_GDML` is set.
- Added setup for QT in UI scripts (variables `QTHOME, G4UI_BUILD_QT_SESSION, G4UI_USE_QT, G4VIS_BUILD_OPENGLQT_DRIVER, G4VIS_USE_OPENGLQT`).
- Use `gfortran` instead of `g77` on MacOSX.
- Updated Configure script to handle new modules and data libraries.

### Digitization & Hits

- Created new module `scorer` now including all scorer and filter classes. The module `utils` is now used for interactive scoring utilities.
- First implementation of interactive parallel world scoring.
- Introducing command-based scoring mechanism: Beta release. Currently shape of scoring cell is limited to boxes.

### Electromagnetic Processes

- High Energy
  - `G4mplIonisation`: introduced theoretical asymtotic low-energy parameterization of `dEdx` and fixed intermediate parameterization between low-energy and high-energy models for classical magnetic monopole..
- Low Energy
  - Refactoring of Geant4-DNA domain. Added `G4DNAProcess` and `G4DNAFinalStateProduct` classes.
  - New Geant4-DNA models for electrons: Elastic Scattering (screened Rutherford, Brenner-Zaider), Ionisation (Emfietzoglou), Excitation (Emfietzoglou).
  - New Geant4-DNA models for protons: Excitation (Dingfelder, Emfietzoglou), Ionisation (Rudd, Dingfelder 1st Born approximation), Charge Change (Dingfelder).
  - New Geant4-DNA models for hydrogen: Excitation (Dingfelder), Ionisation (Dingfelder), Charge Change (Dingfelder).
  - New Geant4-DNA models for helium and its charge states: effective charge scaling from proton models.
  - Fixes to handle `Z=100` in the Livermore library and to correct problem report #933.
  - Fix in `G4PenelopeRayleigh` to address problem report #965.
  - Correction in `G4AtomicDeexcitation`, addressing problem Report #986.
  - Requires new data set G4EMLOW5.1, where a new dna/directory has been added containing Geant4-DNA data tables for interpolation.
- Muons
  - `G4EnergyLossForExtrapolator`: added `maxEnergyTransfer` parameter for the computation of energy loss.
  - `G4MuBremsstrahlungModel`: updated sampling algorithm to provide more precise predictions for the tail of the gamma energy spectra (NA49 problem).
  - `G4MuBremsstrahlungModel` and `G4MuPairProductionModel`: added `ignoreCut` flag, if `true` both models provide zero `dEdx` and full cross sections.
  - `G4MuMultipleScattering`, `G4MuMscModel`: new classes for simulation of multiple scattering for muons (beta-version).
- Polarisation
  - `G4eplusPolarizedAnnihilation`: added `enabledAtRest` flag.
  - Implemented more general cross section framework; removed dependencies to models. Now cross sections can be used independent of any model, e.g. in a cross section calculator class.
  - Added polarized photo-electric effect.
  - Bug fix in `G4PolarizedAnnihilationCrossSection` correcting error in calculation of polarisation dependent total cross section (wrong interaction-length for positrons in applications where particle and media are polarised).
- Standard
  - `G4UrbanMscModel`:
    - Use `SampleScattering()` method instead of `SampleSecondaries()`.
    - For `skin > 0` (computed distance to the geometry boundary):
      - use range instead of `TrueStepLimit` for the computation of the distance to a boundary to provide more stable step limitation by `GeomFactor`;
      - default values `stepmin = 1 nm`, `tlimitmin = 10*stepmin`;
      - default value `10^-16` is used to avoid lost of precision and occasional `NaN` values.
    - New, simpler model functions for mean scattering angle `theta0`. Now the form of `theta0` is the same as in the Highland formula, but the parameter values are different for `e+/e-` and the other (heavy) particles.
    - Fixed old bug in sign of `theta0` for negatively charged particles.
    - Fixed old bug in `SampleCosineTheta()`: now the value of `prob` is always between `[0,1]`.
    - Compare new value of safety with zero after sampling of lateral displacement to identify if track is on boundary.
    - Changed initialisation for ions: protecting parameters from modification.
    - Tuned `ComputeGeomPathLength()` in order to get better low energy behaviour for heavy particles (`mu`, hadrons).
  - `G4UrbanMscModel90`: new class which keeps the version of sampling of scattering angle as the one of version 9.0 but includes also protections and fixes of `G4UrbanMscModel`. Used by `G4hMultipleScattering`.
  - `G4CoulombScattering`, `G4CoulombScatteringModel`, `G4eCoulombScatteringModel`:
    - Updated `InitialiseProcess()` and `PrintInfo()` methods to ensure that the parameters of models change between runs.
    - Added nuclear size effect; added separate simulation of scattering on atomic electrons taking into account cuts; fixed cross section for compounds.
    - Reorganised initialisation of kinematics and screening parameters.
    - Using precomputed `Z^1/3` and `log(A)` values to speed up code.
    - Fixed crash happening at initialisation when several elements with the same `Z` are defined.
  - `G4BraggModel`, `G4BraggIonModel`:
    - More safe computation of scattering angle.
  - `G4ionIonisation`:
    - Removed obsolete method `DefineMassCharge()`
    - Added protected methods `BetheBlochEnergyThreshold()` and `NuclearStoppingFlag()`.
  - `G4ionGasIonisation`:
    - New ion ionisation process with discrete ion charge and no equilibrium between ion and media.
  - `G4IonFluctuations`:
    - Added dependence on cut in the formula of width to reduce cut dependence of the Bragg peak width for ions; use Fermi energy from `G4Material`.
  - `G4PAIphotonModel`, G4PAIModel:
    - Fixed `MaxSecondaryEnergy()` method for `e-` and `e+` and use it for definition of max energy transfer; protected printouts by verbosity flag.
    - General cleanup and fixed memory leak in `G4PAIModel`.
  - `G4eplusAnnihilation`: added flag `enabledAtRest`.
  - `G4PAIySection`: new class which substitutes `G4PAIxSection`, fixing memory leak problems.
  - `G4ionIonisation`, `G4ionGasIonisation`, `G4CoulombScatteringModel`: fill NIEL energy deposit.
- Utils
  - `G4VEnergyLossProcess`:
    - Use prestep time for subcutoff secondaries and avoid precise computation ot the time using `GetVelocity()` method.
    - Improved energy loss computation for the case of big step, allowing for slight improvement in CPU performance.
    - Use STL vector of `G4VEmModel*` instead of C-array.
  - `G4VEmProcess`:
    - Added cut as a parameter of `ComputeCrossSectionPerAtom()` method allowing models to use the cut (used by single scattering model and potentially by others); added vector of cuts to the list of members of the class.
    - Integral option now coupled with `buildLambdaTable` option: integral cannot be activated if `buildLambdaTable` is not activated.
  - `G4VEmModel`:
    - Compare cross section with DBL_MIN instead of zero.
    - Added `SampleScattering()` method for multiple-scattering models.
  - `G4VEnergyLossProcess`, `G4VEmProcess`, `G4VMultipleScattering`:
    - Fixed memory leak at destruction; proper deletion of `G4PhysicsTables`.
    - Moved virtual functions, like `PostStepGetPhysicalInteractionLength()` from inline to body of classes; moved simple methods from body to inline.
    - Fixed handling zero cross section in `PostStepGetPhysicalInteractionLength()` method to avoid problem happening in FanoCavity example when cross section inside cavity is zero.
  - `G4VEnergyLossProcess`:
    - Simplified logic to switch on/off fluctuations.
  - `G4VMultipleScattering`:
    - Use `SampleScattering()` method in `PostStep`.
    - Added vector of cuts for electrons (needed for combined multiple scattering processes).
  - `G4EmCalculator`: fixed default region name.
  - `G4ionEffectiveCharge`: use Fermi energy from `G4Material` and not recalculate it at each step; reorganized formulas: less calls to mathematical functions.
  - `G4EmModelmanager`: added pointers to `G4Gamma` and `G4Positron` at initialisation.
  - `G4EmProcessOptions`: added missing initialisation of `G4LossTableManager` parameters together with parameters of concrete processes (fixed initialisation when an option is defined before phyics list construct processes).
- Xrays
  - `G4Cerenkov`: changed inheritance to `G4VDiscreteProcess`, and changed the arguments of `G4Cerenkov::GetAverageNumberOfPhotons()`. Added warning in `G4Cerenkov` constructor.
  - `G4VXTRenergyLoss`: general cleanup of old comments; removed all static members; protect verbosity within flag.
  - `G4XTRTransparentRegRadModel`, `G4XTRRegularRadModel`, `G4StrawTubeXTRadiator`: cleanup; protect verbosity within flag.

### Error Propagation

- `G4ErrorFreeTrajState`: corrected bug in one of the transformation matrix terms. Addresses problem report #971.
- `G4ErrorFreeTrajParam`: corrected normalization of Y and Z coordinates.
- `G4ErrorPropagator`: removed call to `exit()` and some cleanup.

### Event

- Added class member `particle_momentum` and method `SetParticleMomentum()`.
- Added UI commands `/gun/momentum` and `/gun/momentumAmp`.
- Added private copy constructor and `=, ==, +=` operators to `G4ParticleGun`. Addressing problem report #984.
- Modified `G4SPSEneDistribution` to adress problem report #988.

### General Processes

- Biasing
  - Fix in `G4ProcessPlacer` to put biasing process at the second place for `AlongStep` as well as for `PostStep`. A bug fix which would feature for charged particles.
  - Added printout for `AlongStep` process vector.
- Decay
  - Added `G4PionDecayMakeSpin` class: set the daughter muon spin for 2-body decays of pi, K and K0_long.
  - Added method `DaughterPolarization()` in `G4Decay` to set polarization vector for daughters.
- Management
  - Added method `SetProcessOrderingToSecond()` to `G4ProcessManager`, which puts the process at the second position in the `DoIt` list.
  - Added method `CheckOrderingParameters()` to `G4ProcessManager`, in order to check whether given ordering parameters are set for valid `DoIt`s.
  - Added methods to `G4VProcess` to indicate that the specified `DoIt` is valid for the process.
  - `G4WrapperProcess`: fixed double definition of method `PreparePhysicsTable()` in the header and moved inline implementations of virtual methods to source file.
- Optical
  - Added capability of calculating the reflectivity off a metal surface by way of a complex index of refraction.
  - In `G4OpWLS`, allow for the `MeanNumberOfPhotons` to be different from 1, in case the constant property `WLSMEANNUMBERPHOTONS` is provided and, if so, `NumPhotons` is sampled with Poisson.
- Parameterisation
  - Added `Along` methods to `G4FastSimulationManagerProcess`.
  - Minor corrections to `G4FastSimulationManagerProcess`: added call to `G4PathFinder::PrepareNewTrack()`; deactivated ghost navigator in `EndOfTracking()` method.
- Transportation
  - `G4Transportation`:
    - Modified behaviour of `G4Navigator` for small straight steps - when a track does less than the safety. Before only a simple, quick estimation of the starting point's safety was done, using the last available value of the isotropic safety (from the Navigator). Now the navigator is called to compute this safety. This improves the value and avoids roundoff issues. It gives better stability in comparisons with CoupledTransportation. The costs are additional calls to the Navigator. A new method `EnableShortStepOptimisation` controls this. Note: this only affects neutral particles and charged particles when no field is present.
    - Fixed `StartTracking()` to reset number of looping steps and to clear propagator state ( issue with caching of safety, which is multi-valued in case of overlaps, is now addressed.)
    - Change to enable a user to switch on a global field (off was already possible), when a track goes between volume (or regions) of a setup. Was response to requirement of ATLAS. Done by moving the call to `ConfigureForTrack()` before the check for zero field, in `AlongStepGPIL()`.
  - `G4CoupledTransportation`:
    - Fix for problem in condition for relocation. It was incorrect when only a parallel geometry limited the step.
    - Changed condition for recalculation of the safety used, to improve stability to roundoff.
    - Corrected treatment of time integration.
    - Fix to reset looping counter also when no field or charge is present.
    - Fix for case of zero proposed step: missed to set end position.

### Geometry

- Biasing
  - Modified Weight-Window algorithm: do not introduce extra variance in the case of splitting to the survival weight when the weight is above the upper weight window.
- Magnetic field
  - New class `G4EqEMFieldWithSpin` to allow tracking of spin also in case of electromagnetic fields.
- Management
  - Fixed typo in forcing minimum number of points in method `G4VSolid::EstimateSurfaceArea()`. Addresses problem report #981.
- Navigation
  - Introduced new specific navigation for regular structures and phantoms. New classes: `G4RegularNavigation`, `G4PhantomParameterisation`.
  - `G4PathFinder`:
    - Make singleton definition canonical.
    - New method to return the safety sphere last calculated for a `PreStep` point. If last step(s) were smaller than safety, then for a linear track (no field or no charge) navigator's `ComputeSafety()` is not called. Older `PreStep` point is stored for this and provided.
    - Fixed return value for `ComputeStep()` in case of step smaller than tolerance (now `kInfinity`).
    - Added calculation of start-point safety in `DoNextCurvedStep()` and corrected `GetCurrentSafety()` accordingly.
    - Added method to obtain safety of one navigator (after call to all).
    - Deleted obsolete data member `fMinSafety`.
    - Optimisation: if only one geometry, do not call `WhichLimited()` in `DoNextLinearStep()`. `DoNextLinearStep()` also only calls `ComputeStep()` for a navigator whose safety greater than the step; if there's one geometry, no longer calls `ComputeSafety()` at start.
    - `ComputeSafety()`: save the values of isotropic safety for each navigator.
    - Fix for result of `ObtainSafety()`, used in `G4CoupledTransportation`.
    - Some code cleanup. Switched off additional optimisation for safety in method `DoNextLinearStep()`.
    - `PrepareNewTrack()` clears safety to avoid potential problems in overlaps. Added calls to re-initialise `SafetyHelper` (reset safety).
    - Fix to now set `fNoGeometriesLimiting` in `DoNextLinearStep()` in the case of one navigator optimisation.
    - Added new methods `GetNumberGeometriesLimitingStep()` and `GetMinimumStep()` needed by `G4CoupledTransportation` to see whether to relocate.
    - Fix for problem of another process shortening steps (between calls to `ComputeStep()` by different processes in same step).
    - Check to verify that `fNoGeometriesLimiting` is set by `DoNext*Step` methods. Revised data type of `fNoGeometriesLimiting` to be a `int`, so that less than 0 means `unset`.
  - `G4Navigator`:
    - Corrected calculation of `fStepEndPoint` in `ComputeStep()` for case of step not limited by geometry.
    - Replaced call to `LocateGlobalPointWithinVolume()` with calls to sub-navigators.
    - Made `fVerbose` protected.
  - `G4PropagatorInField`:
    - Fixes for compilation of code under `G4DEBUG_FIELD` (problem report #982).
    - Added extra check of method `LocateIntersectionPoint()` arguments.
  - Protected verbosity with compiler flags in `G4PathFinder` and `G4MultiNavigator`.
  - Set `fRecomputeFactor` in `G4SafetyHelper` to zero, to switch off internal optimisation and allow for reproducibility of steps when using different transportation classes.
  - Added method `CheckPointExiting()` in `G4AuxiliaryNavServices` utility class.
  - Reuse `fVerbose` from `G4Navigator` in `G4MultipleNavigator` and some cleanup.
  - `G4SafetyHelper`: Improved `ComputeSafety()` not to call `G4Navigator` if exactly on safety 'center'.
  - Fix in `G4ReplicaNavigation::DistanceToOut()` for exact classification of the linear step for Cartesian case.
  - Made `IdentifyAndPlaceSolid()` method inlined in `G4ParameterisedNavigation`.
  - Cleared compilation warnings for shadowing of variables in classes within the module. Minor cosmetics and cleanup.
- Solids (Boolean)
  - Boosted performance for response of `Inside()` for `G4SubtractionSolid` and `G4UnionSolid` according to suggestion in problem report #979.
- Solids (CSG)
  - `G4Torus`:
    - Fixed bug in `CalculateExtent()` for case of non-rotated full-`Phi` torus definition: added protection against negative value for `sqrt()` and corrected formula for `delta`. Fixes problem of NaN detected in initialisation by CMS.
    - Fixed bug in `SolveNumericJT()`: corrected handling of complex roots, `rootsrefined` is used only if the number of refined roots is the same as for primary roots. Addresses problem report #969.
  - Fixed problem of undefined side for valid surface normal in case of `Phi` section and direction through the center of either a `G4Tubs` or `G4Cons` shape.
- Solids (Specific)
  - New specific shape `G4Paraboloid` with cuts along the `Z` axis.
  - Revision of `G4TessellatedSolid` classes:
    - Fixed problem report #931 for proper handling of concave surfaces. Modified classes `G4TessellatedSolid` and `G4TriangularFacet`.
    - Modified data and accessor `centroid` and `GetCentroid()` for `G4VFacet`; replaced by `circumcentre` and `GetCircumcentre()` respectively.
    - Reviewed implementation of `CalculateExtent()` to make it more robust and precise. Addresses problem report #983.
    - Added utility class `G4TessellatedGeometryAlgorithms`.
  - Removed debug printout in `G4Polycone::GetPointOnCone()`.
  - Added formulas for calculating `SemiAxis` and `Zheight` in `G4EllipticalCone`.
- Volumes
  - Added explicit initialisation of first volume entry to zero, to ensure correct behavior for `out-of-world` touchable handle.
  - Minor cleanup in `G4LogicalBorderSurface` and `G4LogicalSkinSurface` classes.
  - Added inline specification to methods in `G4AssemblyTriplet` class.

### Global

- Cleared compilation warnings for non-inlining and shadowing of variables. Removed unnecessary `virtual` specifier to `G4String` destructor.
- Changed date for release 9.1.

### Graphical Representations

- Added `G4Paraboloid` to `HepPolyhedron` and `G4Polyhedron`.

### Hadronic Processes

- Cross sections
  - Added `log(0)` protection in `G4NeutronInelasticCrossSection` and `G4ProtonInelasticCrossSection`.
- Management
  - `G4HadronicProcess::FillTotalResult()`: fix addressing problem report #967, replaced call to `aT.GetGlobalTime()` with the internal variable `time`.
- Binary Cascade
  - Developments for propagate interface.
  - Correcting bug for pion incident at low energy causing crash in Precompound
  - `G4BinaryLightIon`: adapted to changes in Binary Cascade.
- Cascade
  - Fixed angular distribution for nucleon-nucleon elastic scattering above `2.8 GeV`.
- Chiral Invariant Phase Space (CHIPS)
  - Bug fix in quasi-elastic, which may influence the shower shape, it should be now a bit shorter and wider when using QGSC/QGSP physics lists.
  - Introducing Single Target Diffraction.
  - R&D level implementation of ion-ion elastic and low-energy inelastic.
  - Added `(e,nu)` reaction to `G4QCollision` and weight support in all CHIPS processes.
  - Corrected neutral currents normalization for neutrino-nuclear interactions.
  - Chain of bug-fixes in `G4Quasmon, G4QEnvironment, G4QNucl*` classes.
  - More accurate decay transition from `G4QEnvironment` to `G4QNucleus`.
  - Improvement in `G4QNucleus` class to boost CPU speed.
- De-excitation
  - Removed atomic mass number from "gamma factor" for `G4DeuteronEvaporationProbability`, `G4TritonEvaporationProbability`, `G4He3EvaporationProbability` and `G4AlphaEvaporationProbability`.
  - Introduced missing `Rj (Q_beta)` factor in the evaporation module. Protected against occasionally divide by zero.
  - Corrected the Coulomb-barrier to the formalism of Dostrovski as described in the Physics Reference manual.
  - Fix in photon evaporation to address problem report #952.
  - Suppressed gamma-level file warnings in `G4NuclearLevelManager`.
- Elastic scattering
  - `G4DiffuseElastic`: added Coulomb elastic scattering amplitude using Wentzel model. Do initialisation of the model for each new target nucleus on-fly; the model is initialised in constructor with particle definition for the vector of available elements. Tuning at high energies. Added control on verbosity at initialisation.
  - Updated `G4ElasticHadrNucleusHE`: included difference in scattering off protons and neutrons; optimised computation of the distribution function (important for heavy targets); fixed model for scattering off hydrogen; tuned model parameters for better description of total and elastic cross sections.
  - `G4LEnp`: removed erroneous code for identity exchange of particles.
  - `G4UHadronElasticProcess`: introduced verbosity checks within `VERBOSE` flag inside methods called at each step.
- High Energy
  - `G4HEInelastic::TuningOfHighEnergyCascading()`: fixed incorrect assignment of leading particle to low energy backward nucleons and fragments. This bug caused high energy backward particles to be emitted from high energy collisions.
  - `G4HEPionMinusInelastic`: fixed incorrect `Imax` in sampling of charge exchange.
- High precision Neutron
  - Allow for _nat_ final state even for isotoped cross sections.
  - Enabled element based cross-section dump.
  - Fixed bug in `G4NeutronHPChannel` for treatment of `Z` in elements.
- Im_r_matrix
  - Incorporated changes for `G4CollisionComposite`.
  - In `G4ParticleTypeConverter`, removed warning on unknown particle; occurs for `eta_prime, k_star+, anti_...` etc. in BIC propagate interface.
- INCL/ABLA
  - First version of the Liege cascade INCL Model, including ABLA evaporation and fission. Requires new external data set (G4ABLA3.0) including files for nuclear shell effects, with new environment variable G4ABLADATA to be set to point to the directory where the data are stored.
- Pre-equilibrium
  - New developments to reflect the literature and units expected for the exciton model: introducing an `Rj` factor into the probability calculation; correcting the units for the Pauli Blocking Factor (missing a g factor); decreasing the number of charged particles if the number excitons is decreased (previously this number was only increased with increasing excitons).
  - New development with respect to light ion production.
  - Correction for integer arithmetic bug in `G4PreCompoundModel` and concerning the ratio of charged to neutral excitons.
- QMD Reaction
  - First implementation of QMD reaction model based on JQMD (Niita et al., JAERI-Data/Code 99-042).
- Re-Parameterized Gheisha
  - First version of a 'Re-Parameterized Gheisha-style' model. This version is essentially a re-factored copy of the low energy parameterized model which also contains several bug fixes and physics improvements.
- Theoretical High Energy
  - Added channel for projectile diffractive scattering.
- Stopping
  - `G4StopElementSelector`: fixed typo in Primakoff formula for capture velocity.
  - `G4MuonMinusCaptureAtRest`: fixed old memory leak.
  - Removed old-style copyright from all headers and fixed Software Reference Manual tags.
- Utils
  - Removed initialization by random number of angular momentum vector from `G4Fragment` constructors which could cause change of random sequence after physics initialisation.
  - Use production version of G4Fancy3DNucleus.
  - `G4LightMedia`: fixed coding errors in inequalities for charge exchange occurrence in `PionPlusExchange`, `KaonZeroShortExchange`, and `NeutronExchange`.

### Interfaces

- `G4UItcsh`: added ability to store shell history across sessions.
- Updated the implementation of the signal handler for `Ctrl-C`.
- New classes `G4UIQt` and `G4Qt` for handling of Qt interface (Beta version with support restricted to Qt-4).
- Removed improper dependency from `basic` sub-module to `run`.

### Materials

- `G4NistManager`: extended interfaces to build new materials; added `G4State`, temperature, pressure (gases are allowed) with default values. Simplified logic of Print() methods. Providing destruction of all materials and elements.
- `G4NistElementBuilder`: for given Z, build only one Nist element and allow user to create other elements with given Z (HP physics requirement).
- `G4NistMaterialBuilder`: modified `FindOrBuildMaterial()` method: NIST materials are now built even if user creates a material with the same name, therefore NIST materials parameters -cannot- be substituted.
- `G4Material, G4Element`: extended destructors, now all materials and elements are deleted at the end of a run.
- `G4SandiaTable`: separated computations of tables photo-absobtion coefficients for photo-electric effect and PAI model; general cleanup and reduced number of static variables. Fixed memory leak at destruction.
- `G4IonisParamMat`: added commutation and accessor methods for parameters of ion ionisation: Fermi energy, effective Z, effective L-factor; values will not be recomputed at each step.

### Particles

- Added `G4HyperNucleiProperties` class so that hyper-nuclei can be created for `G4Ions`. `G4ParticleTable` can return a pointer to hyper-nucleus by using `GetIon()` and `FindIon()` methods.
- Modified `G4PDGCodeChecker` to support PDG code for hyper-nuclei.
- Changed `G4ParticleTable::GetIonTable()` to give 'non-const' pointer in order to allow users to use `G4IonTable::GetIon()` methods directly.
- Added check for atomic number (less than 1000) in `G4IonTable`.
- Added new classes `G4PionRadiativeDecayChannel` and `G4MuonRadiativeDecayChannelWithSpin`.

### Persistency

- Introduced new `gdml` plugin sub-module, based on new GDML release 3. Added `G4LIB_BUILD_GDML/G4LIB_USE_GDML` flags and `XERCESCROOT` path. The new GDML plugin does not yet support parameterised volumes and material optical properties.
- Moved existing classes to `mctruth` sub-module; renamed libraries.

### Physics lists

- New physics lists QGSP_DIF and QGSP_BERT_DIF; as QGSP or QGSP_BERT with projectile diffraction for proton and neutron enabled.
- New physics list QGSC_BERT; use QGSC down in energy to overlap with BERT. LEP is not used for proton, neutron, pions, kaons, except for neutron capture and neutron induced fission.
- New physics list FTFP_BERT: FTFP with Bertini cascade.The energy ranges of FTFP and BERT overlap, so LEP is not used for proton, neutron, pions, kaons, except for neutron capture and neutron induced fission.
- New physics list QGS_BIC, equivalent to QGSP_BIC, but using binary also for pion and for rescattering via the propagate interface; the deexcitation implicitely uses precompound.
- Several fixes in QBBC: fixed bug in adding of cross section for pions and mesons; tuned energy thresholds between string and cascade models; corrected interface to CHIPS model; reviewed options: QBBC, QBBC_DEL, QBBC_HEL, QBBC_HP.
- New physics list FTF_BIC, equivalent to QGS_BIC but using FTF model for high energy interactions. For protons, neutrons and pions LEP is not used, as BIC is used up to 5 GeV, thus overlapping with FTF starting at 4 GeV.
- Added possibility to activate `G4SynchrotronRadiation` and mu-nuclear betwen runs.
- Change QGSP builders to enable use of projectile diffraction in QGSP-like lists.
- Added optional builder `G4RadioactiveDecayPhysics`.
- Added `G4HadronDElasticPhysics` builder and fixed name to `G4HadronHElasticPhysics`.
- `G4EmStandardPhysics_option2`: increased number of bins in tables.
- `G4LEPNeutronBuilder`: when the limit for `MaxInelastic` is zero, do NOT add LEP for inelastic. Change needed for FTFP_BERT list.

### Run

- Added ability to handle `G4ScoringManager` in `G4RunManager`.
- First implementation of interactive parallel world scoring.
- Introducing new `/random/setSeeds` command allowing to set initial seeds.
- Now `/random/setDirectoryName` command creates directories if needed.
- Reordered commands in `G4RunMessenger` so that obsolete commands appear last. Obsolete UI commands now do nothing except warning messages.

### Track & Tracking

- Added accessors for non-ionizing energy deposit in `G4Step`.
- Added protection in `G4Track::GetVolume()` to avoid cases of dereferencing of null pointer.
- `G4SteppingManager`: fix to use Cartesian tolerance in `Stepping()` and `CalculateSafety()` for the computation of `endPointSafety`.

### Visualization

- Management
  - Replaced references to Wired3 in command guidance.
  - Minor improvements in messaging.
- Modeling
  - Minor improvements in messaging.
- HepRep
  - Adjusted geometry hierarchy for parallel worlds.
- OpenGL
  - Removed redundant `G4OpenGLXViewerMessenger` class.
  - Minor improvements in design and messaging.
  - Added `GEANT4_QT_DEBUG` flag to test Qt interfaces.
- OpenInventor
  - Initialise local vectors in `SoPolyhedron` implementation; fixing compilation warnings on gcc-4.2.2.

### Environments

- Python interface (G4Py): added support for embedded GDML plugin. Updated physics-lists bindings.

### Data sets

- New data for neutron cross-sections, G4NDL.3.12:
  - Changed Cadium data. Added Hg, Radium, Br and La data.
- New low-energy data set, G4EMLOW.5.1:
  - Added dna/directory including Geant4-DNA data tables for interpolation.
- New data set for nuclear shell effects, G4ABLA3.0.

### Examples

- Updated reference outputs.
- advanced
  - air_shower
    - Adjust to the `G4Cerenkov` process now become a `G4VDiscreteProcess`.
  - hadrontherapy
    - Updated physics commands in macro files. Updated README.
  - underground_physics
    - Corrected micrometer unit in macros from mum to um (old bug since 8.2).
  - Rich
    - Adjust to the `G4Cerenkov` process now become a `G4VDiscreteProcess`.
- extended
  - electromagnetic/TestEm1
    - Added material `CO2` at `10^-6 atm`.
    - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
  - electromagnetic/TestEm2
    - PhysicsLists: added options from `physics_lists` library.
    - `TestEm2.in` update to provide the same reference output as before.
  - electromagnetic/TestEm3
    - Updated `TestEm3.in` macro.
    - Added `PhysListEmStandardIG` experimental PhysList.
    - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
  - electromagnetic/TestEm5
  - New histogram numbering (see README). Changed all macros accordingly, also in Geant3 version.
  - Reordered processes in `PhysListEmStandardSS`.
  - Added histos 17->20: energy fluence.
  - Fixed usage of elastic builders.
  - `RunAction`: compute and print energy leakage and energy balance.
  - `PhysListEmStandard`: PhysicsTables set with 100 bins per decade (EmOptions).
  - Added `PhysListEmStandardIG` experimental PhysList.
  - `TrackingAction`: new histos (4,5) to plot vertex position of secondaries.
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
- electromagnetic/TestEm7
  - `PhysListStandardSS`: reviewed process ordering.
  - Added `PhysListStandardIG`, ion `G4ionIonisation` process is substituted by `G4ionGasIonisation` and for Coulomb scattering the model taking into account the recoil is used.
  - Added class `G4ScreenNuclearRecoil` and ancillary utilities for ion-ion scattering provided by Vanderbuilt University.
  - `PhysListStandardSS`: use `G4ionGasIonisation`.
  - `PhysListStandardIG`: use `G4ScreenNuclearRecoil`.
  - Fixed usage of elastic builders.
- electromagnetic/TestEm8
  - Use components of physics lists from `physics_list` module.
  - Fixed memory leak in the UI interface.
  - Removed used lines from PAI physics constructors, added `pai_brem` constructor `PhysListEmPAI` in which `AlongStep` from Bremsstrahlung is allowed.
  - Fixed logic in `SteppingAction`.
- electromagnetic/TestEm9
  - Added `PhysListEmStandardIG` experimental physics list.
- electromagnetic/TestEm11
  - Added histo 8: energy profile as function of x/range.
  - Added input macro `sandia.mac`.
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
- electromagnetic/TestEm12
  - `HistoManager`: modified way to get `csdaRange` from `G4EmCalculator` and compute `stepMax` for histo 8.
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
- electromagnetic/TestEm14
- electromagnetic/TestEm15
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
- electromagnetic/TestEm18
  - `PhysicsList`: added more `EmOptions`.
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
- exoticphysics/monopole
  - New example demostrating simulation of a classical magnetic monopole and computation of the energy deposited.
- field/field04
  - New example showing how to define/use overlapping field elements. Fields might be either magnetic, electric or both (contributed by T.Roberts and Muons Inc., G4BEAMLINE).
- gdml
  - Updated to co-work with built-in GDML plugin module GDML-3.
  - Showing loading of modular GDML files.
- hadronic/Hadr01
  - Physics list updated according to recent changes in hadronics and `physics_lists` package. Added QGSC_BERT physics list.
- medical/DICOM
  - Deep review: on the input files and the way how the geometry is built. Now using new specialised fast navigation and parameterisation according to `G4PhantomParameterisation`.
  - Added color by voxel and possibility to also use nested-parameterisations.
- medical/fanoCavity
  - `DetectorConstruction`: `wallRadius` automatically recomputed; added materials graphite and aluminium.
  - `PhysicsList`: implemented `G4CoulombScattering` process as option; use 100 bins per decade (`emOptions`) in physics tables.
  - `MyKleinNishina`: do not cancel Compton cross-section in cavity.
  - `EventAction`: added histogram of energy deposit in cavity per incident gamma.
  - `RunAction`: compute error on energy deposit and mean kinetic energy.
  - `HistoManager/HistoMessenger`: printing selected histos on ascii file.
  - Syntax correction in `DetectorMessenger`.
- medical/fanoCavity2
  - New example demonstrating computation of the dose deposited in an ionization chamber by an extended (one dimensional) monoenergetic electron source, making use of a reciprocity theorem.
- parallel/MPI
  - New module including a Geant4 MPI UI library and a couple of examples showing how applications can be parallelized with different MPI compliant libraries, such as LAM/MPI, MPICH2, OpenMPI, etc.
- persistency/P02
  - New example showing how to store in a binary file and read back the geometry tree using the 'reflection' technique for persistency.
- polarisation/Pol01
  - Use new polarized photo electric effect, important for polarisation transfer from photon to electron in certain regions of the phasespace (see also E166 experiment).
- optical/LXe
  - Adjust to the `G4Cerenkov` process now become a `G4VDiscreteProcess`.
- radioactivedecay/exrdm
  - Use decay and radiactive decay builders from `physics_lists` module.
  - Added elastic, stopping, ion and `extraEm` physics.
  - Minor fix to low-energy EM physics builder.
- runAndEvent/RE03
  - New example demonstrating how to use UI-command based scoring. It creates a parallel world for defining scoring mesh(es).

- novice
  - N02
    - Explicitely delete allocated parameterisation and step-limit objects in `ExN02DetectorConstruction` class.
  - N03
    - Added option to activate Qt rendering.
  - N05
    - Modified physics list to take into account usage of `Along` method in `G4FastSimulationManagerProcess`.
  - N06
    - Adjust to the `G4Cerenkov` process now become a `G4VDiscreteProcess`.