# Geant4 9.0 Release Notes

Geant4 9.0 Release Notes

June 29th, 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:

- SUN Solaris 5.8, C++ CC-5.5.
- Linux, gcc 3.4.6.
  This configuration was tested on 32 bits architectures (Intel) and 64 bits architectures (AMD) with the Scientific Linux CERN 3 (SLC3) distribution (based on RedHat Linux Enterprise 3) and 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.
- Windows/XP and CygWin Tools with: Visual C++ 8.0 (Visual Studio 2005)

More verified configurations:

- SUN Solaris 5.8, C++ CC-5.4 Patch 111715-02
- Linux, gcc-3.2.3, gcc-4.2.0
- Linux, Intel-icc 9.1
- MacOS 10.4, gcc-4.0.1
- 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.0 requires the installation of CLHEP.
Tests have been performed with CLHEP-2.0.3.1
The software has been verified also with CLHEP-1.9.3.1.

Geant4 9.0 examples with histogramming cowork with analysis tools compliant to AIDA 3.2.1 interfaces.
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 8.3 to release 9.0. Note that a full re-installation of libraries (or a full recompilation) and a recompilation of user applications is anyhow required.

Geometry

The static constants for the geometrical tolerance `kCarTolerance`, `kRadTolerance` and `kAngTolerance` which used to be defined at global scope, have been now removed.
Advanced applications making use of such constants in the code are required to retrieve the values for Cartesian, Angular and Radial tolerances through the class `G4GeometryTolerance`, a new class providing the methods, respectively: `GetSurfaceTolerance()`, `GetRadialTolerance()` and `GetAngularTolerance()`. Applications with setups of unusual dimensions (e.g. smaller than `1 mm` or larger than `1 km`) can now adjust these values, and must do so before creating any part of the geometry description. Please see the User's Guide for Application Developers for the details.

Biasing & Scoring

- When defining a parallel geometry for importance biasing, the parallel geometry now must inherit from `G4VUserParallelWorld`. This has a `GetWorld()` method which creates a (named) copy of the mass geometry world volume and later retrieves it.
- The different parallel and mass sampler classes have been combined into one `G4GeometrySampler` class which requires the following instantiation, e.g.: `mgs(detector->GetWorldVolume(),"neutron");`
  An additional set method defines whether or not the sampler is in a parallel geometry: `mgs.SetParallel(false);`
- When a parallel world is created, then parallel navigation must be activated. An application with physics list that uses the `AddTransportation` method will automatically use `G4CoupledTransportation` which is picked up by the creation of the parallel world copy.
- All scoring can be implemented only through the Primitive Scorer classes. Users utilising the older scoring classes will need to migrate to using Primitive Scorers. The same functionality is provided apart from G4ScoreTable, but scorers are now attached to logical volumes (in place of geometry cells).. This requires explicit copy numbers to be utilised for the same logical volume and the `GeometryCell` methods should be accessed through the physical volume and replica number method.
- A demonstration of the new biasing and scoring is available in `examples/extended/biasing/B01` and `B02`.

Standard Electromagnetic physics

A few methods of the interface classes `G4VEmModel`, `G4VEnergyLossProcess`, `G4VEmProcess`, `G4VMultipleScattering` were revised, in order to reduce memory allocations. All classes inheriting these interfaces were modified accordingly (see detailed list of changes). Advanced users with derived classes must make similar changes.

Old implementations of physics processes, of configurations frozen in release 5.2, have been removed (see below detailed list of changes).

An enumerator of step limitation algorithms of the multiple-scattering process has been introduced. It replaces a boolean value . The step limitation types are:

- `Minimal` - equivalent to the original algorithm, as implemented in Geant4 7.1 and earlier releases.
- `UseSafety` - the current default, which makes use of the geometrical safety
- `UseDistanceToBoundary` - the most advanced, recommended for accuracy in the cases where no magnetic field is set.

As in releases 8.0 to 8.2, the minimal option (which used to be called 'no step limitation') results in fewer steps, and typically provides less stability than the other options.

Hadronic physics

- Isotope production counting flag is now set to OFF by default. If desired, user code must switch it on using the method `G4HadronicProcess::EnableIsotopeCounting()`. Isotope production models allow users to specify their own isotope production mechanism and data set, or use G4NDL to get the production cross sections. If no model is specified, the largest final state nuclear fragment becomes the produced isotope. If enabled, isotope production will occur for any hadronic model. Only users who have specifically assigned an isotope production model in their physics lists will be affected by tghe above change.
- The old variable `NeutronHPCrossSections` defining the path where to load the G4NDL data set has been renamed to `G4NEUTRONHPDATA`, so that this variable shares the G4 prefix used for other environment variables; therefore the user environment must be changed accordingly.

Physics Lists

Removed physics lists `LHEP_HP, QGSP_HP, LHEP_BIC, LHEP_BIC_HP` and `LHEP_PRECO`, which were marked obsolete in release 8.2. Users are encouraged to evaluate `QGSP_BIC` as a replacement of `LHEP_PRECO` and `LHEP_BIC`. The list `LHEP_BIC_HP` is replaced by `QGSP_BIC_HP`. In place of the remaining lists (`LHEP_HP, QGSP_HP`) we suggest to evaluate `QGSP_BERT_HP` and `QGSP_BIC_HP`.
Also removed physics lists using the `Mars13` leading particle classes, i.e. lists with a name containing `_LEAD_`.

The components for electro-magnetic physics have been renamed and three variants are now available:

- `G4EmStandardPhysics` - the default
- `G4EmStandardPhysics_option1` - providing similar physics to that implemented in release 7.1
- `G4EmStandardPhysics_option2` - using `sub-cutoff` options, which enable lower production thresholds for delta-electrons near geometry boundary.

Data Sets

This release introduced three new versions of the following data sets. Please see the last section for the corresponding details.

- New data for neutron cross-sections, G4NDL.3.11.
- New low-energy data set, G4EMLOW.4.3.
- Fix in revised data set for radioactive-decay, G4RadioactiveDecay.3.2.

## 4. New Developments and Capabilities

Error Propagation

- The first implementation of error progration for tracks is provided. This capability is new to Geant4, and is a new implementation of `GEANE` capabilities. Users are invited to provide feedback.

Standard Electromagnetic physics

- The structure of UI commands was changed: a new directory `/process/msc` contains all commands for multiple scattering. New UI commands are added to control the parameters of the Multiple Scattering process:
  - `/process/msc/Skin`
  - `/process/msc/RangeFactor`
  - `/process/msc/GeomFactor`
  - `/process/msc/StepLimit`
  - `/process/msc/LateralDisplacement`.
- The interface to `G4EmProcessOptions` is modified to be consistent with this change.
- As a result, the possibility to change the values of parameters between runs is now extended to all parameters which can be defined via the UI.

Hadronic physics: Neutrons

- When using the high precision neutron module, a user may now choose to force the use of the Photon Evaporation model, instead of the neutron capture final state data. The environment variable `G4NEUTRONHP_USE_ONLY_PHOTONEVAPORATION` must be set to do this. For cases in which the final state data does not exist in the G4NDL data library, this model was already used and thus there is no change.
- A user can force high precison neutron code to use only exact isotope data files, instead of allowing nearby isotope files to be used. In this case if the exact file is not available, the cross section will be set to zero and a warning message will be printed. To enable this, set the environment variable `G4NEUTRONHP_SKIP_MISSING_ISOTOPES`.
- A user can switch off the Doppler broadening due to the thermal motion of the target nucleus. The broadening is used to correct the G4NDL data, which are at zero temperature. This must be done only for appropriate applications. To switch it broadening off, the environment variable `G4NEUTRONHP_NEGLECT_DOPPLER` must be set. Then the Doppler broadening in the cross section calculation is neglected. However, the thermal motion of the nucleus is still taken into account in the Final State Generator. This option provides a significant CPU performance advantage. It is not suitable, though, for simulation in which low energy (thermal) neutrons are important, as related observables are affected.

## 5. Expected effects on physics and performance

Standard Electromagnetic physics

- Results for calorimetry are expected to be unchanged within 0.5%. The width of energy deposition in thin layers (vertex detectors) should be more close to data - current accuracy is few percent.
- In simple setups a speedup of simulation of EM showers of about 10% is observed for the 'default' EM physics configuration (used in most lists, including QGSP) and about 5% for the faster 'optional' physics configuration (used in `EMV` lists, such as `QGSP_EMV`).

Hadronic physics

- The FTF model is now used in some physics lists down to `5 GeV`.
- Bug fixes in LEP models remove an un-physical peak at 180 degrees and reduce the number of very low energy nucleons produced. The net effect is to shift the angular distributions forward by about 5-10 degrees and increase the mean secondary kinetic energy by roughly `20 - 30 MeV`. Effects of this size occur at incident particle energies of `2 - 10 GeV`. At higher energies the effect is small. Benchmark tests show little change in shower shape.

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

- Added modules `biasing`, `error_propagation` and `lll_fission` to configuration.
- Removed `G4LIB_BUILD_LISTS` flag. Physics lists module is built by default.
- Updated `Configure` script to detect new data sets and to remove search for old physics_list module in installation of libraries.

### Digitization & Hits

- Introducing new scorers for event biasing options.
- Removed `G4CellStoreScorer` class associated with old biasing/scoring scheme in detector module.

### Electromagnetic Processes

- In all processes inheriting from `G4VEnergyLossProcess` or `G4VEmProcess`, removed the method `SecondaryPostStep()`.
- Modified interface of `SampleSecondary()` method in all models inheriting from `G4VEmModel` base class.
- High Energy
  - `G4mplIonisation`: fixed destruction of monopole ionisation model.
- Low Energy
  - Removed obsolete class `G4LowEnergyBraggModel`.
- Muons
  - `G4EnergyLossForExtrapolator`: added `Set` methods for first and last bins in tables. Default maximum value is set to `10 TeV` on CMS request.
  - `G4MuPairProductionModel`: fixed usage of cut value inside `SelectRandomAtom()`, providing correct sampling of atom of mixture for production of `e+e-` pair.
  - New class `G4ErrorEnergyLoss` for error-propagation.
  - Removed obsolete classes `G4MuIonisation52`, `G4MuPairProduction52`, `G4MuBremsstrahlung52` and `G4VMuEnergyLoss`.
- Polarisation
  - `G4PolarizedCompton`, `G4ePolarizedIonisation`, `G4eplusPolarizedAnnihilation`: added method `PostStepGetPhysicalInteractionLength()` in order to provide simulation of polarized target. Addition required following the design change in `utils` module.
  - `G4PolarizedCompton`: fixed compilation warning and incorrect usage of `G4PhysicsVector`.
- Standard
  - `G4ionIonisation`:
    - Added `InitialiseMassCharge()` method; removed `GetMeanFreePath()` implementation.
    - Added `NuclearStopping` flag.
    - Added stopping data only for particle type `GenericIon`.
  - `G4MultipleScattering`, `G4hMultipleScattering`:
    - Reorganized methods for setting parameters of `G4UrbanMscModel` providing a possibility to change parameters between runs.
  - `G4UrbanMscModel`:
    - Reorganized initialisation and `ComputeTruePathLengthLimit()` method using `G4MscStepLimitType` enumerator to choose step limit algorithm.
    - Optimisation of step limitation for `skin>0` (about 5% CPU save).
    - Use `G4SafetyHelper` for computation of safety and distance to the boundary; removed pointer to `G4Navigator`.
  - `G4UniversalFluctuation`: correction of the algorithm in order to have better agreement between sampled width and data - precision is few percents.
  - `G4eBremsstrahlung`: removed definition of gamma threshold from constructor, define this parameter at initialisation of the process from `G4LossTableManager` - allow to use UI command.
  - Use `fParticleChange` in `G4eeToTwoGammaModel::SampleSecondaries()`.
  - Removed obsolete classes `G4VeEnergyLoss`, `G4VhEnergyLoss`, `G4GammaConversion52`, `G4PhotoElectricEffect52`, `G4eBremsstrahlung52`, `G4eIonisation52`, `G4eplusAnnihilation52`, `G4hIonisation52` and `G4MultipleScattering52`.
- Utils
  - `G4VEmModel`: changed interface of `SampleSecondary()` method, return type becomes `void`, added extra parameter `std::vector<G4DynamicParticle*>*`. All classes using or inheriting this interface are modified. About 5% speedup of EM shower simulation observed. `G4VEmProcess` and `G4VMultipleScattering` modified to follow new interface.
  - `G4VEnergyLossProcess`, `G4VEmProcess`:
    - Removed method `SecondaryPostStep()`; use a direct call to selected model instead.
    - Speedup code by adding implementation method `PostStepGetPhysicalInteractionLength()`.
    - Cleanup comments and reorganized code for easier reading; moved short methods to inline.
  - `G4VEnergyLossProcess`:
    - Added methods `InitialiseStep()` and `InitialiseMassCharge()` to define mass and charge of ions at each step.
    - Added implementation method `AlongStepGetPhysicalInteractionLength()` in order to speedup computations.
    - Remove pointer to G4Navigator and use G4SafetyHelper.
    - Added proper initialisation of `preStepKinEnergy`.
  - `G4VMultipleScattering`:
    - Speedup code by adding implementation of methods `AlongStepGetPhysicalInteractionLength()` and `PostStepGetPhysicalInteractionLength()`.
    - Cleanup comments and reorganized code for easier reading; moved short methods to inline; added method to set multiple-scattering parameters.
  - `G4EnergyLossMessenger`:
    - Defined new UI sub-directory `/process/msc` and reorganized UI commands for multiple-scattering processes. Using `G4EmProcessOptions` as an interface to all EM processes.
  - `G4LossTableManager`: removed setting of multiple-scattering parameters and fixed deletion of `G4EmCorrections` class in destructor.
  - `G4EmProcessOptions`: updated interface to multiple-scattering processes, added extra methods to set multiple-scattering parameters.
  - Added class `G4MscStepLimitType`.

### Error Propagation

- New module for backwards error propagation of tracks (`Geant4e`).

### Event

- Fixed normalisation of source intensities with multiple sources in `G4GeneralParticleSource::IntensityNormalization()`.
- Removed classes using old biasing/scoring scheme: `G4ScoreTable`, `G4Scorer`.

### General Processes

- Biasing
  - New module for process-based biasing.
  - Migrated classes from `processes/scoring` and `transportation` modules.
- Cuts
  - Fix in `G4VRangeToEnergyConverter::convert()`, range-energy conversion, correcting artifact observed in the visible energy plot over range-cut, where a jump in the distribution was evident. The correction can influence the result only for the tests, where the `e+/e-` energy cuts are below `30 keV` and even in this case the change in results should be small.
  - Fix in `G4ProductionCutsTable::CheckMaterialCutsCoupleInfo()`.
- Management
  - Added `PreparePhysicsTable()` method in `G4WrapperProcess`.
- Optical
  - Use call to `G4GeometryTolerance` instead of `kCarTolerance` constant in `G4OpBoundaryProcess`.
- Parameterisation
  - Removed classes implementing old interface to fast-simulation manager process and setting of parallel world: `G4FastSimulationManagerProcess81`, `G4FlavoredParallelWorld` and `G4GFSManager81`.
- Scoring
  - Moved biasing classes and tests into `processes/biasing` module.
  - Fixed bug in `G4ScoreProcess` which didn't get applied to non-parallel geometries.
- Transportation
  - `G4CoupledTransportation`: make treatment of mass and full safety coherent. Added storing of full safety in state; retrieve it after compute step from `G4PathFinder`; calculate them same way at start of step.
  - Use call to `G4GeometryTolerance` instead of `kCarTolerance` constant in `G4VTrackTerminator`.
  - Archived classes for old biasing scheme, now replaced in module `processes/biasing`. Removed classes: `G4MImportanceConfigurator`, `G4MScoreConfigurator`, `G4MScoreProcess`, `G4MWeightWindowConfigurator`, `G4MassGCellFinder`, `G4MassGeometrySampler`, `G4MassImportanceProcess`, `G4MassWeightWindowProcess`, `G4PImportanceConfigurator`, `G4PScoreConfigurator`, `G4PScoreProcess`, `G4PWeightWindowConfigurator`, `G4ParallelGCellFinder`, `G4ParallelGeometrySampler`, `G4ParallelImportanceProcess`, `G4ParallelTransport`, `G4ParallelTransportConfigurator`, `G4ParallelWWnTransportProcess`, `G4ParallelWeightWindowProcess`, `G4PlaceOfAction`, `G4ProcessPlacer`, `G4SamplingPostStepAction`, `G4VProcessPlacer`, `G4VSampler`, `G4VSamplerConfigurator`, `G4WeightCutOffConfigurator`.

### Geometry

- Use call to `G4GeometryTolerance` instead of `kCarTolerance`, `kAngTolerance` and `kRadTolerance` constants where necessary.
- Biasing
  - Removed classes from old biasing scheme. These are now replaced by either `G4CoupledTransportation` (parallel navigation) or in `processes/biasing` module. In addition the scoring is implemented with the new scoring framework (in `digits_hits` and `processes/scoring` modules). The following classes are removed: `G4ParallelNavigator`, `G4ParallelStepper`, `G4ParallelWorld`, `G4VParallelStepper`, `G4VPGeoDriver`, `G4VScorer`, `G4ImportanceSplitExaminer`, `G4VImportanceSplitExaminer`, `G4VWeightWindowExaminer`, `G4WeightWindowExaminer`.
- Magnetic field
  - New class `G4HelixMixedStepper`, mixing helical stepper and Runge-Kutta `G4MagHelicalStepper`.
  - New calculation of `DistChord()` for `SteppingAngle>pi` in `G4RKG3Stepper`.
  - Relaxed fatal exception to warning in `G4PropagatorInField::AccurateAdvance()` for case of step zero and return previous value. This fixes problem observed by ATLAS in release 8.3 when using very conservative values for field parameters.
  - Introduced new class `G4ErrorMag_UsualEqRhs` used to reverse the magnetic field when propagation is backwards for error propagation.
- Management
  - Introduced new classes for handling error propagation: `G4ErrorTarget`, `G4ErrorSurfaceTarget`, `G4ErrorTanPlaneTarget`, `G4ErrorPlaneSurfaceTarget` and `G4ErrorCylSurfaceTarget`.
  - `G4Region` may have assigned a regional user stepping action. This local action is invoked after the global user stepping action which is set to `G4RunManager`.
- Navigation
  - `G4SafetyHelper` can now be accessed via `G4TransportationManager`. Depending on type of navigation (single world or multiple navigation) it uses mass navigator or `G4PathFinder`. All calls from EM processes to geometry are provided by `G4SafetyHelper`. Initialisation of the class is done in `G4TransportationManager` and `G4PathFinder`.
  - `G4Navigator`: added new method `CheckNextStep()`, which makes a trial step, without changing the state of the navigator. It's a variant of `ComputeStep()`, whose signature it shares.
  - Fixed bug in `G4GeomTestSegment` in case of point on the surface, reducing cases of reported spurious overlaps.
  - `G4PropagatorInField`: modified `ReEstimateNewPoint()` in order to handle cases with zero step.
  - Introduced new class `G4ErrorPropagationNavigator`, a specialised navigator for performing double navigation in the detector geometry and on the target surface for error propagation.
  - Added method `CheckPointExiting()` in `G4AuxiliaryNavServices` utility class.
- Solids (CSG)
  - `G4Tubs`, `G4Cons`: fixed bug for `DistanceToOut(p,v)` for `phi` section. The bug was causing segmentation fault in recursive_test (problem report #784).
- Solids (Specific)
  - Fixed default response of `DistToIn/DistToOut` for twisted solids.

### Global

- Added `G4GeometryTolerance` singleton class for the definition of tunable geometrical tolerances. The Cartesian tolerance can either be set to a fixed value (`kCarTolerance=1E-9 mm`) or to a value computed on the basis of the maximum extent of the world volume assigned through the `G4GeometryManager` at the beginning of the application and -before- any geometrical object is created.
- Old static constants `kCarTolerance`, `kRadTolerance` and `kAngTolerance` have been removed.
- Added new class `G4SimplexDownhill` in `HEPNumerics` module: a Simplex method for function minimization.
- Introduced new utility class `G4ErrorPropagatorData` to provide access to mode, state, target and manager verbosity for the error propagation classes.
- Fixed bug in `G4LPhysicsVector` constructor: initialise vectors of `length=nbin+1` (one bin is hidden for users). Addresses problem report #942.
- Changed date for release 9.0.

### Graphical Representations

- `G4AttDefStore`: now comprises utility functions in namespace.
- `G4AttHolder`: Made copy constructor and assignment private to enforce proper usage. Replaced forward declarations in header with explicit inclusions.

### Hadronic Processes

- Cross sections
  - `G4GlauberGribovCrossSection`: added new methods `GetRatioSD()` and `GetRatioQE()` allowing for retrieving qe/in and sd/in ratios.
  - `G4HadronNucleonXsc`: added new method `GetHadronNucleonXscMK()` to get hadron-nucleon cross section.
  - Fix for non-initialised total cross section for `pi-` in `G4PiNuclearCrossSection`.
  - Fixed memory leak at initialisation in classes `G4ElectroNuclearCrossSection` and `G4PhotoNuclearCrossSection`.
  - `G4HadronCrossSections`: replaced `PSIZE` with `NPARTS` to avoid name conflict with SDK Windows environment.
- Management
  - `G4HadronicProcess`:
    - In method `FillTotalResult()` partly remove spurious peak at 90 degrees by using different `G4DynamicParticle` constructor and prohibiting kinetic energy from being exactly zero.
    - Changed default for isotope production to off to fix a memory leak. Fixed memory leak at initialisation. Removed effective charge calculation.
- Binary Cascade
  - `G4BinaryLightIonReaction`: added protection against divide by 0 when energy momentum correction stalls.
- Cascade
  - First implementation of interfaces for pre-equilibrium model and equilibrium evaporation model.
- Chiral Invariant Phase Space (CHIPS)
  - More accurate initialization of dZ, dN, dS (dense area) in `G4QNucleus`.
  - Elastic cross-section for low energy neutrons upgraded and tuned in `G4QElasticCrossSection`. High energy, heavy nuclei nA correction.
  - Memory leak fix in `G4StringChipsParticleLevelInterface`, `G4QuasiFreeRatios` and `G4QElasticCrossSection`.
  - First implementation of the G4QDiffractionRatio class.
  - First implementation of the charge-exchange: coherent in the new process `G4QCoherentChargeExchange` and incoherent as an extention of the `G4QuasiFreeRatios`.
- De-excitation
  - Fixed bug in `G4ExcitationHandler` caused by attempt to access deleted pointers and iterators. Now a final state iterator list is created and filled only when necessary.
  - Fixed bug in low A,Z false condition in `G4DiscreteGammaDeexcitation`.
- Elastic scattering
  - `G4ElasticHadrNucleusHE`: optimised computation of tables. Fixed compilation of nuclear parameters for heavy nucleus (`A &ft;100`). General cleanup and redesign of private methods.
  - Added model names to constructors in `G4LEnp`, `G4LEpp`, `G4ChargeExchange`, `G4HadronElastic` and `G4ElasticHadrNucleusHE`.
  - `G4HadronElastic`: use `QElasticCrossSection` for `p, n` incident for any energy and any target; use `HElastic` for mesons only.
  - `G4UHadronElasticProcess`: use `true` flag calling CHIPS to compute cross section.
  - New class `G4DiffuseElastic`, new model for elastic scattering.
- High precision Neutron
  - Try to limit sum of secondary photons energy while keeping distributions in `G4NeutronHPPhotonDist`.
  - Renamed variable `NeutronHPCrossSections` to `G4NEUTRONHPDATA` for the path definition to the G4NDL data library.
  - Added possibility to neglet Doppler broadening mode to boost performance in `G4NeutronHPElasticData`, `G4NeutronHPInelasticData` and `G4NeutronHPCaptureData`, by using the environment variable `G4NEUTRONHP_NEGLECT_DOPPLER`.
  - Added environment variable `G4NEUTRONHP_SKIP_MISSING_ISOTOPES` which will force the use of the exact isotope file and set the cross section to zero and print a warning if the file is not found. Modified method of searching substitute isotope data in `G4NeutronHPNames`.
  - Added `G4NEUTRONHP_USE_ONLY_PHOTONEVAPORATION` flag in `G4NeutronHPCaptureFS`.
  - Bug fixes for Valgrind run-time errors and NaNs. Fixes for memory leaks.
- LLNL Fission
  - New module for Livermore LLNL neutron-induced and spontaneous fission model is now available. Model class G4FissLib must be instantiated and assigned to G4HadronFissionProcess. Pointer to G4NDL is required as in high precision neutron models.
- Parton String
  - Separate `G4DiffractiveExcitation` for FTF from QGS. Added original `G4DiffractiveExcitation` to qgsm as `G4QGSDiffractiveExcitation`. Moved `G4SingleDiffractiveExcitation` class from `management` to `qgsm` module.
- Radioactive Decay
  - Minor fix to remove compilation warnings on Windows in `G4RIsotopeTable` and `G4RadioactiveDecay`.
- Utils
  - Removed unused classes `G4Fuzzy`, `G4EffectiveCharge` and `G4ParticleVector`.
  - Three bug fixes in `G4ReactionDynamics::TwoCluster()`: removed a sharp peak at 180 degrees by fixing a units error and fixed an error in sampling the momentum transfer. Fixed array bound violation which caused in some rare occasions an infinite loop.

### Interfaces

- Implemented signal handler for soft-abort in `G4UIterminal`.

### Materials

- Added implementation file for G4SurfaceProperty.
- Added static `G4SurfacePropertyTable` to `G4MaterialTable`.
- Added exception to `SetGROUPVEL()` when `E_photon<<=0`.
- `G4NistManager` and `G4NistElementBuilder`: added `GetNistFirstIsotopeN()` and `GetNumberOfNistIsotopes()` methods.
- `G4NistElementBuilder`: added protection (`Z>=limitNumElements`) inside `BuildElement()` on Mokka request.
- `G4SandiaTable`: fixed deletion of elements of the table in destructor and non-initilised pointer in constructor. Use G4 native types.

### Particles

- Added magnetic moment in `G4ParticleDefinition`, `G4DynamicParticle` and `G4IsotopeProperty`. Updated magnetic moment for leptons. Added `G4IsotopeMagneticMomentTable` and data file.
- Allow for registration of several isotope property table in `G4IonTable`.
- Allow for any `Z,A` combination (`A>=Z`) for `G4IonTable::GetIon()`.
- Added deletion of `IsotopeTableList` in `G4IonTable` destructor.
- Fix in `G4PDGCodeChecker::GetQuarkFlavor()`.

### Physics lists

- In QBBC list, use consistent cross sections for elastic and inelastic.
- Activated quasi-elastic for `FTF` lists. Lower threshold for `FTF`: `FTF` starts at `4.0 GeV`, overlaps with `LEP` up to `5.0 GeV`.
- Added `G4QEmExtraPhysics` for `gamma, e+-, mu+-` nuclear CHIPS.
- Removed obsolete physics lists `LHEP_HP, QGSP_HP, LHEP_BIC, LHEP_BIC_HP` and `LHEP_PRECO`. Removed physics lists using `Mars` leading particle classes (*`LEAD`*).
- Removed obsolete `G4EmStandardPhysics72` and `G4EmStandardPhysics71`; using new commands for `G4EmStandardPhysics_option1,2`.
- `QGSP_BIC_HP` is no longer experimental.
- Removed definition of name of EM constructor, now name of EM constructor defined inside the constructor itself.
- Incremented version number.

### Run

- `G4VUserDetectorConstruction` class now has access methods to the parallel worlds.
- Fix against accessing to the world logical volume that had already been deleted.
- Fixed memory leak in `G4VUserPhysicsList` and `G4VModularPhysicsList`.
- Fixed the name of random number status file.
- Fixed case of segmentation fault with stacking events; addressing problem report #951.
- In `G4RunManagerKernel`, `UpdateRegion()` method now internally invokes `CheckRegions()` method to make sure all region information are updated.

### Track & Tracking

- Fixed weight treatment in `G4ParticleChange`.
- Added non-ionizing energy deposit in `G4Step` and `G4VParticleChange`.
- Added magnetic moment in `G4DynamicParticle`.

### Visualization

- Management
  - Added command `/vis/viewer/set/picking`.
  Picking is `false` by default, except for OpenInventor.
- Removed `G4GAGTree` class.
- Removed `/vis/scene/add/eventID` command from `/vis/drawVolume`.
- Improved error trapping and bug fix.
- Bug fix for zero pointer in `G4VscenHamdler::LoadAtts()`.

- Modeling
  - Added further information on volume `G4Atts`.
  - Added solid dump and volume transformation to `G4Atts`.
  - Simplified `G4Atts` for Physical Volume path.
- HepRep
  - Fixed memory leak in `G4HepRepFile`.
- OpenGL
  - Implemented picking for OGLIX.
  - Some reorganisation of display list construction to fix rare bug in Display-by-Time feature.
  - Fixed some compilation warnings.
  - implemented picking for OGLSX (as well as OGLIX).
  - `/vis/ogl/printEPS` should work for all viewers.
  - Improved error trapping and bug fixes.
- OpenInventor
  - Picking is `true` by default.
  - Added scale factor to list of changes requiring kernel visit, and some rationalisation.
- RayTracer
  - Fixed memory leak at initialisation.
- ASCIITree
  - Removed GAGTree.

### Environments

- g4py: implemented software abort by `<Ctrl-C>`.

### Data sets

- New data for neutron cross-sections, G4NDL.3.11:
  - Added Germanium data and Silver data.
  - Added Special file `0_0_Zero` which give 0 cross section over all energy range.
- New low-energy data set, G4EMLOW.4.3:
  - Added auger file `au-tr-pr-100.dat`.
- New data set for radioactive-decay, G4RadioactiveDecay.3.2:
  - Fixed `z81.a188` element.

### Examples

- Updated reference outputs.
- advanced
  - brachytherapy
    - Few improvements resulting from code review. No functionality changes.
  - cosmicray_charging
    - Fixed compilation problem in physics-list.
  - hadrontherapy
    - Geometry upgrade (hadrontherapyBeamLine class) according to the experimental CATANA proton therapy beam line.
    - Improved the modulator geometry and fixed a bug on its rotation.
    - Physics component redesigned and reimplemented as a result of code review.
  - human_phantom
    - Corrected bug in MIRDLeftBreast and MIRDRightBreast.
    - Introduced voxel Left/Right breast, VoxelBreastSensitive detector and PhantomHeadBuilder.
    - Introduced Left and Right Adrenals and Scapulae.
    - Minor correction to documentation.
  - radioprotection
    - Correction to documentation.
  - underground_physics
    - Migrated to new interface for `SetMscStepLimitation(fMinimal)` in `DMXPhysicsList`.
    - Changed to `hIonisation` from `hLowEnergyIonisation`.
  - Tiara
    - Currently not supported and not migrated to new python, scoring or biasing.
- extended
  - analysis/N03Con
    - New example showing how to apply convergence test in simulation.
  - biasing
    - Migrated example B01 and B02 to new biasing/scoring scheme.
    - Removed B03 (redundant/obsolete use of Python).
  - electromagnetic/TestEm1
    - Use `G4EmProcessOptions` to define bremsstrahlung threshold energy.
    - Completed `PhysListEmStandard` options and added new input macro for `e-`.
    - Make visualization only in interactive mode.
  - electromagnetic/TestEm2
    - Completed `PhysListEmStandard` options.
    - Updated main input macro file; use visualisation only for interactive session.
  - electromagnetic/TestEm3
    - Use renamed EM builders and update macro files.
    - More options in `PhysListEmStandard`.
  - electromagnetic/TestEm5
  - electromagnetic/TestEm7
    - Fixed bug in standardSS Physics Lists.
    - Added EM builders from physics_lists library.
    - Added output of mean number of primary steps and `kaon+` run in main input macro.
  - electromagnetic/TestEm9
    - Use standard names for histograms and updated macro files.
    - Substituted 'autoptr' by normal pointers in Histo to avoid crash.
    - Use renamed EM builders, and `emstandard_opt1` EM physics in `TestEm9.in`.
    - Extended reference output: showing both mean/RMS values and truncated mean/RMS.
  - errorpropagation
    - New example illustrating the use of the error propagation utility. A `G4ErrorFreeTrajState` is created to simulate a muon track of `20 GeV` along the X axis. Then the track is propagated until the target is reached.
  - field
    - Removed un-necessary initialisation of `G4FastSimulationManagerProcess` from setup.
  - hadronic/Hadr01
    - Physics List updated according to recent changes in hadronics and `physics_lists` packages.
    - Substituted usage of `autoptr` by normal pointers in Histo to avoid crash.
    - Added histogram on total energy deposit in the target.
    - Use renamed EM builders `G4EmStandardPhysics_option1` and `G4EmStandardPhysics_option2`.
  - medical/fanoCavity
    - Updated to follow change of interface of `G4VEmModel::SampleSecondaries()`.
    - Updated EM options.
  - medical/Gammatherapy
    - Use renamed EM physics-list components from `physics_lists` module.
    - Substituted usage of `autoptr` by normal pointers in Histo to avoid crash.
    - Fixed singleton GetPointer() method.
  - parameterisation/gflash
    - Updated physics-list: register the fast simulation process as a discrete process.
  - runAndEvent
    - Fixed indexing scheme of `GetIndex()` method in the scorers.
- novice
  - N02
    - Show usage of `G4GeometryTolerance` tuned for the geometry topology.
  - N03
    - Changed `visTutor/exN03Vis12` and `visTutor/exN03Vis13` macros, following change to `/vis/ogl/printEPS` command.
    - Increased verbosity in `rndmSeed` input macro.
  - N04
    - Delete materials and elements when quitting application.
  - N05
    - Migrated to new parallel geometry scheme.
    - Added vis.mac macro.
  - N07
    - Introduced `ExN07ParallelWorld` and related modifications.
    - Modified `vis.mac` to allow for visualization of the parallel world.