# Geant4 8.1 Release Notes

Geant4 8.1 Release Notes

June 30th, 2006

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. AIDA and CLHEP
3. Known Run-Time Problems
4. Compilation Warnings
5. Known Run-Time Warnings
6. Items for migration of the user code
7. Geant4 Software License
8. Detailed list of changes and fixes

## 1. Supported and Tested Platforms

Official platforms:

- SUN Solaris 5.8, C++ CC-5.4 Patch 111715-02.
- Linux, gcc 3.2.3 or gcc 3.4.5.
  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++ 7.1 .NET

More verified configurations:

- SUN Solaris 5.8, C++ CC-5.5
- Linux, gcc-4.1.1
- Linux, Intel-icc 8.0
- MacOS 10.4, gcc-4.0.1
- Windows/XP and CygWin Tools with: Visual C++ 8.0 (Visual Studio 2005)

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. AIDA and CLHEP

Geant4 8.1 requires the installation of CLHEP.
Tests have been performed with CLHEP-1.9.2.3
The software has been verified also with CLHEP-2.0.2.3.

Geant4 8.1 examples with histogramming cowork with AIDA 3.2.1 implementations. These include:

- PI and included components
- JAS (Java Analysis Studio)
- Open Scientist

AIDA headers can be downloaded from: http://aida.freehep.org

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

## 4. Compilation Warnings

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

## 5. Known Run-Time Warnings

The following message can be written to error output while tracking. We believe it does not give rise to incorrect behaviour.

        G4PropagateInField: Warning: Particle is looping
        -  tracking in field will be stopped.
           It has performed 1000 steps in Field while a maximum of 1000
           are allowed.

## 6. Items for migration of the user code

Some migrations may be necessary for advanced uses of features in Geant4 in order to upgrade from release 8.0 to release 8.1. Note that a full reinstallation of libraries (or a full recompilation) and a recompilation of user applications is required.

Standard Electromagnetic physics

Some improvements are introduced to multiple scattering. As a consequence of these changes in the model, the following applies in this release:

- the simulation of the back-scattering is improved;
- the scattering in very thin layers is better than the one in version 8.0;
- the tail of the angular distribution is now material dependent;
- the visible energy in sampling calorimeters is less sensitive to the value of the production threshold.

It has been reintroduced the option to utilise smaller cuts in vicinity of the geometrical boundary. The subcutoff option has been verified for a number of simplified sampling calorimeter setups. The simulation of ionization for ions was also improved. The data from NIST databases for protons and helium ion and ICRU73 data for the carbon ion are included for the first time. An interface to add user data on stopping power for particular ion in particular media is provided.
A new version of the Synchrotron radiation is released.
The user interfaces allowing to set/access EM options, cross sections and stopping powers are extended and improved.

Hadronic physics: Bertini Cascade

In this release, the `G4BERTINI_KAON` conditional assembly flag has been removed from the Bertini Cascade code, so that it is no longer needed for the user to set them to instruct Bertini handling of strange particles.

Physics Lists

Physics lists are updated in order to utilize recent developments in hadronic and electromagnetic physics. In particular, the more advanced model sampling of capture of negatively charged hadrons at rest is used. The new elastic process combining available models of elastic scattering is introduced with significant improvement of elastic scattering on hydrogen; the Binary and Bertini cascade developments are also utilized.

## 7. Geant4 Software License

As from this release, a new Software License applies to the Geant4 code. The details and the list of copyright holders is available at http://cern.ch/geant4/license and also in a text file `LICENSE` distributed with the source code.

## 8. Detailed list of changes and fixes

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

### Configuration

- `Configure` script:
  - Automatically set `LD_LIBRARY_PATH` for shared libraries and binary `PATH` to binaries in the scripts.
  - Fixed problem on setting shared libraries and corrected setting of `OGLHOME` for MacOSX.
  - Fixed typo for `RAYTRACERX`.
  - Fixed problem in caching of DATA paths.
  - Correct check/set for OpenInventor visualization driver.
  - Probe for existance of X11, XM, XAW.
- `Darwin-g++`: corrected linker options for generation of dynamic libraries. Now dynamic libraries on MacOSX work correctly. Tested on MacOS 10.4 with gcc-4.0.1.
- Removed defaults for X11, XM, XAW flags in `architecture.gmk` and added explicit settings in architecture specific setups protected for optional customisation.
- `binmake.gmk`: fixed old-standing warning on WIN32-VC for file extension of target object file.

### Electromagnetic Processes (Low-energy)

- New developments (Beta release): photoelectric angular distribution models Geant4-DNA for very lowE physics processes in water. The present version of the DNA processes is meant as a first beta release; cannot be considered suitable for physics application yet.

### Electromagnetic Processes (Standard)

- Standard
  - Substituted method `SetStepLimits()` by `SetStepFunction()` in all energy loss processes.
  - Moved initialization of default values to constructors of all models and processes to fix problems at initialization for the case of many runs in one macro.
  - `G4MultipleScattering`:
    - Step limit calculation moved to model part `G4UrbanMscModel`.
    - Changed values of data members 'tkinlimit', 'factail';
    - Providing possibility of reinitialization of 'facrange' and 'steppingAlgorithm' parameters between runs;
    - Changed default value of 'facgeom' (4 -> 3.5)
    - Added set function for data member `factail`; `z` sampling by default.
  - `G4MscModel` renamed `G4UrbanMscModel`:
    - Changed the value of the parameter `theta0`, improved scattering in thin layers.
    - Changes in `ComputeTruePathLengthLimit()`: modified 'scaling' of `facrange` for high energies, data member `tlimitmin = max(lambda0/25, 5 nm)`.
    - Changes in `SampleCosineTheta()`, changed tail of angular distribution.
    - Removed some data members and code cleaning; revised `z` sampling.
    - Now computing transport cross section and not mfp.
    - Bug fix in the `SampleCosineTheta()` method and fixed a problem of non-initialized variable.
    - Make stepping algorithm be active for ions by default.
  - `G4MscModel71`: now computing transport cross section and not mfp.
  - Added first test-prototype classes of elastic Coulomb scattering: `G4eCoulombScatteringModel`, `G4CoulombScatteringModel`, `G4CoulombScattering`.
  - `G4PolarizedComptonScattering`, `G4ComptonScattering52`, `G4hIonisation52`, `G4eIonisation52`, `G4eBremsstrahlung52`: methods `ComputeCrossSectionPerAtom()` and `ComputeRestrictedMeandEdx()` are now public.
  - `G4BraggModel`, `G4BraggIonModel`, `G4eeToTwoGammaModel`, `G4MollerBhabhaModel` `G4BetheBlochModel`, `G4PEEffectModel`, `G4eBremsstrahlungModel`: added functions `ComputeCrossSectionPerElectron/Atom()`.
  - `G4MollerBhabhaModel`: fixed computation of `MinEnergyCut`, important for `dEdx` calculation with small cut value (< 10 mum) in media with high Z (like lead).
  - `G4hIonisation`: added mass and spin effects (important for pion ionization at high and moderate energies).
  - `G4BetheBlochModel`: use different formula for muons and hadrons for max energy transfer to delta-electrons (taking into account hadron size effects, important for ionization of very energetic hadrons).
  - `G4BraggModel` and `G4BraggIonModel`: added usage of the new classes `G4ASTARStopping` and `G4PSTARStopping` with NIST data on stopping powers.
  - `G4PAIModel` and `G4PAIPhotonModel`:
    - Fixed cases of NaN value for delta direction when zero cut.
    - Fixed problem for low energy hadrons.
    - Providing hiding of some technical verbose messages.
  - `G4ionIonisation`:
    - Moved `G4LossTableManager::Instance()->EmCorrections()` to constructor to avoid problems at initialization for many runs in one macro.
    - Added usage of the new class `G4WaterStopping` for light ion stopping in water.
    - Added a possibility to use user data on stopping power.
  - `G4BetheHeitlerModel`: removed obsolete function `InitialiseCrossSectionPerAtom()`.
  - `G4eBremsstrahlung`: use `gammaThreshold` from `G4LossTableManager` for more easier initialization (CMS request).
  - `G4eBremsstrahlungModel`:
    - Fixed problem of initialization in the case when cuts are not defined (needed for extrapolation and for unit tests).
    - Fixed problem of energy loss calculation below `10 MeV`.
  - `G4KleinNishinaModel`: removed upper energy limit to have a smooth cross section.
  - `G4eplusAnnihilation`: removed cut dependence in `AtRestDoIt()`.
  - Removed obsolete `G4SCProcessorStand` class.
- Muons
  - Substituted method `SetStepLimits()` by `SetStepFunction()` in all energy loss processes.
  - Moved initialization of default values to constructors of all models and processes to fix problems at initialization for the case of many runs in one macro.
  - `G4MuBetheBlochModel`, `G4MuBremsstrahlungModel` and `G4MuPairProductionModel`: added functions `ComputeCrossSectionPerElectron/Atom()`.
  - `G4MuIonisation52`, `G4MuBremsstrahlung52`, `G4MuPairProduction52`: method `ComputeMicroscopicCrossSection()` is now public.
  - `G4MuBremsstrahlungModel`: fixed problem of initialization in the case when cuts are not defined (needed for extrapolation and for unit tests).
  - `G4EnergyLossForExtrapolator`:
    - Fixed bug in units.
    - Added muon tables.
    - Moved initialization from the constructor to the first public call; added verbose variable into constructor.
- HighEnergy
  - Moved initialization of default values to constructors of all models and processes to fix problems at initialization for the case of many runs in one macro.
- Utils
  - `G4EmProcessOptions`:
    - Added method `SetLPMFlag()` in order to set flag of LPM effect.
    - Added method `SetBremsstrahlungTh()` (CMS request).
    - Added method `SetBuildCSDARange()`.
  - `G4EnergyLossMessenger`: added commands `MscStepLimitation`. `CSDARange` and `LPM`.
  - `G4VEnergyLossProcess`:
    - Subcutoff calculation significantly updated, results of tests show that this regime can be used for sampling calorimeters.
    - Added option to sample range straggling at the last step of a particle.
    - Reset `currentCouple` when StepFunction is changed (fixed initialization problem for case of many runs in a macro).
    - Added store energy loss tables for bremsstrahlung.
    - Added method `SetDynamicMassCharge()`, used by ionIonisation; make use of flag `isIonisation` in AlongStep, PrintInfo, and StoreTables (needed for activate/inactivate regime).
    - Added `GetModelByIndex()` and NumberOfModels() methods.
    - Fixed extra cout for heavy ions in gas.
    - Renamed in all places `PreciseRange` to `CSDARange`.
    - Substituted `SetStepLimits()` with `SetStepFunction()`.
    - Improved printout.
    - Remove `minStepLimit` member and use `finalRange`.
  - `G4VEmProcess`:
    - `ComputeCrossSectionPerAtom()`: put default value `A=0`, to keep compatibility with version 5.2.
    - Added `GetModelByIndex()` and `NumberOfModels()` methods.
    - Removed dependence on `G4NistManager`.
  - `G4VMultipleScattering`:
    - Added `GetModelByIndex()` and `NumberOfModels()` methods.
    - Lambda table keeps now cross section and not mfp.
  - `G4VEmModel`:
    - `ComputeCrossSectionPerAtom()`: put default value `A=0`, to keep compatibility with version 5.2.
    - Added method `ComputeMeanFreePath()`.
    - Optimized interfaces to multiple-scattering model.
  - `G4LossTableManager`:
    - Added methods `SetMscStepLimitation()`, `FacRange()`, and `MscFlag()`.
    - Substituted `PreciseRange` with `CSDARange`.
    - Fixed logic to ensure rebuilding of PhysicsTable in the regime of activate/deactivate processes.
    - Set flag `isIonisation` for a process holding table with sum of `dEdx` and added flag of LPM effect.
    - Added Get/SetBremsstrahlungTh() methods (CMS request).
  - `G4EmTableType` enumerator is added to reduce code duplication inside `G4LossTableManager`, `G4VEnergyLossProcess` and other classes.
  - `G4EmCorrections`:
    - Substituted `PreciseRange` with `CSDARange`.
    - Introduced an option to peak up user data for stopping power for particular ion and media.
    - Added finite size correction - important for high energy hadrons and ions.
    - Cleanup of the code.
  - `G4EmCalculator`:
    - Added `GetCSDARange()` method.
    - Corrections/bug fixes in `GetCrossSectionPerVolume()`, `GetCrossSectionPerAtom()` and `ComputeCrossSectionPerAtom()`.
    - Added public methods `ComputeTotalDEDX()` and `ComputeElectronicDEDX()`; updated `GetDEDX()` for ions.
    - Fixed problem for gammas concerning `GetCrossSectionPerVolume()`.
  - `G4ionEffectiveCharge`: extended upper limit to `50 MeV` (important for ions with large Z).
  - Added dummy class `G4DummyModel`.
  - Removed obsolete interface class `G4VSCProcessor`.
- Xrays
  - `G4TransitionRadiation`:
    - New algorithm for XTR angular distribution based on the transparent regular radiator. The method can help for more precise estimation of XTR angular distribution needed in tracking applications of XTR detectors (ATLAS request).
    - Updated tested algorithm for XTR angular distribution based on the transparent regular radiator. The method takes into account the angular distribution for given energy and gets activated by `SetAngleRadDistr(true)` method just after the construction of XTR object.
    - Tuned angular distribution of XTR according to transparent regular approximation.
  - `G4SynchrotronRadiation`:
    - Moved to module `xrays` from `standard`.
    - Split in two processes: `G4SynchrotronRadiation` and `G4SynchrotronRadiationInMat`, the first using analytical solution for description of the gamma spectrum, the second one using numerical integration.
    - Introduced new methods for angular distribution.
    - Updated methods for calculation of integral number spectrum.
    - Enhanced to set polarization and work with local magnetic-fields attached to single volumes.
    - Fixed bug for unit polarization in `PostStepDoIt()`.

### Event

- `G4EventManager`:
  - Now setting pointer to `G4Event` before the state is changed.
  - Storing inside the event the random number status.
- Imported `G4RayShooter` class from the visualization RayTracer module.
- Minor fix in alternative `G4ParticleGun` constructor.

### General Processes: Management, Cuts, Optical

- Management
  - Extended signature of `G4WrapperProcess::StartTracking()` to take `G4Track*` as argument.
- Cuts
  - Fixed memory leak in `G4VRangeToEnergyConverter::BuildLossTable()`, fixing a problem detected and reported by ATLAS.
  - Fixed memory leak in `G4ProductionCutsTable` and `G4PhysicsTableHelper`.
- Optical
  - Fix default behaviour for unified model of dielectric_metal. Addresses problem report #842.
  - The WLS time delay can now be a delta function or exponential. New classes: `G4VWLSTimeGeneratorProfile`, `G4WLSTimeGeneratorProfileDelta` and `G4WLSTimeGeneratorProfileExponential.`

### Geometry

- Divisions
  - Revised text in G4Exceptions thrown by various classes.
- Magnetic field
  - `G4FieldManager`: added missing `GetChordFinder()` method. Addresses problem report #847.
  - `G4FieldTrack`:
    - Added charge and moments to `FieldTrack`, with accessors.
    - Added new constructors, one with charge and without velocity and one taking a const reference to `Spin`.
    - New implementation method `UpdateFourMomentum()`.
  - Correction in `G4ExactHelixStepper` and made `Stepper()` method virtual in `G4MagHelicalStepper` to enable `G4ExactHelixStepper` to override it.
  - Streaming operator takes `const` reference and outputs momentum and direction magnitudes.
- Management
  - `G4Region`:
    - Support material scanning for nested parameterisations. Moved classes `G4VNestedParameterisation` and `G4VVolumeMaterialScanner` from `volumes` module.
    - Fixed implementation of utility method `GetParentRegion()` to return a boolean flag as argument, to identify if parent region is unique or not.
    - Simplified implementation of method `BelongsTo(PV*)`.
  - Workaround in `G4SmartVoxelHeader::BuildNodes()` to avoid rare cases of negative extent returned by volumes due to malformed geometries or inaccurate extent calculation.
  - Modified `G4VStoreNotifier` class to be now a `typedef` of `G4VNotifier` which is moved in the `global` module. Adapted stores to the new configuration.
  - Moved `G4AssemblyTriplet` class to `volumes` module.
  - `G4VPhysicalVolume`: return `const G4String&` for `GetName()` instead of a string copy.
- Navigation
  - Extended `G4TransportationManager` to handle multiple navigators. Preserved interface for navigation in mass/tracking geometry.
  - Added activation flag to `G4Navigator` and related accessor methods.
- Solids
  - Boolean:
    - Fix in `G4IntersectionSolid::CalculateExtent()` for the correctly handling extent computation for nested intersections and always respect the rule `pMax > pMin`.
  - CSG:
    - `G4Tubs`: added protection against `NaN`s in `CalculateExtent()` to avoid `sqrt()` of negative numbers due to round-off.
  - Specific:
    - Introducing first implementation of a tessellated solid, i.e. a solid which can be composed of arbitrary triangular and/or quadrangular facets. New classes: `G4QuadrangularFacet`, `G4TessellatedSolid`, `G4TriangularFacet` and `G4VFacet`.
    - `G4TwistedTubs`: defined approximated estimation for `GetCubicVolume()`.
    - Fix in `G4Ellipsoid::SetZCuts()` and `G4EllipticalTube::SetZCut()` for usage of uninitialised variables.
    - `G4Polycone`: added protection against `NaN`s in `G4PolyconeSide::Normal()` for points at the origin.
    - Added accessor method `GetVertices()` in `G4Tet` to return the list of vertices composing the solid. Required for GDML persistency.
- Volumes
  - `G4AssemblyVolume`:
    - Now `G4AssemblyVolume` can support assembly of assemblies and reflections. Reviewed and modified `MakeImprint()` methods to act recursively.
    - Added methods `GetVolumesIterator()` and `TotalImprintedVolumes()` for accessing the list of physical-volumes imprinted.
    - Added default boolean argument to `MakeImprint()` methods to allow for optional check of overlaps of constituent volumes.
  - Extended overlaps check also for reflection of placements.
  - Protect against checking overlaps on world volume placement ...
  - Moved `G4VNestedParameterisation` and `G4VVolumeMaterialScanner` classes to `management` module, to support material scanning in `G4Region`.
  - Moved `G4AssemblyTriplet` class from `management` module.

### Global

- `G4UnitsTable`: added `GeV/cm`, `MeV/cm`, `keV/cm`, `eV/cm` (Energy/Length), `g/cm2` ("Mass/Surface") and `MeV*cm2/g` ..etc.. ("Energy*Surface/Mass").
- Added `G4VNotifier` class, renamed from `G4VStoreNotifier` implemented inside the `geometry` module. The class is a simple abstract class allowing for implementation of user notifiers to be activated for example at registration/deregistration of objects in stores.
- Clear entries in table in destructor of `G4UnitDefinition`.

### Graphical Representations

- Added new `G4PolyhedronArbitrary` class for creating arbitrary `G4Polyhedron` objects out of vertices and indices.
- Added classes `G4VFilter` and `G4SmartFilter`.
- Added `operator<<()` for `G4Text`, `G4Circle`, `G4Square` and `G4Polyhedron`. Improved/tidied `operator<<()` for `G4Polyline`, `G4VMarker` and `G4VisAttributes`.
- `G4VGraphicsScene`: added `Begin/EndPrimitives2D()` methods.
- `G4VVisManager`: added `Draw2d(const G4Text&)` and `FilterTrajectory()` methods.

### Materials

- `G4NistMaterialBuilder`:
  - Added method `ConstructNewGasMaterial()`.
  - Added warning flag to control standard output.
  - Fixed graphite description.
- `G4NistManager`:
  - Added `GetAtomicMassAmu(Z)` and `GetIsotopeAbundance()` methods.
  - Added warning flag to control standard output.
- Added `GetIsotopeAbundance()` method in `G4NistElementBuider`.
- Fixed bug in `G4NistMaterialManager` in regime of combined material definition (partially via NIST DB and partially user-defined).

### Hadronic Processes

- management:
  - `G4HadronicProcess::ChooseAandZ()`: throw fatal exception if `Z>92` is chosen.
  - `G4HadronicProcess::GeneralPostStepDoIt()`: for suspended tracks, allow PostStep action to occur at end of step, but maintain suspended track status. This avoids the "unknown track status" warning for suspended tracks.
  - `G4EnergyRangeManager`: in method `GetHadronicInteraction()`, print out some diagnostic information for the exception which occurs when two hadronic models completely overlap in energy.
- models/cascade:
  - Removed `G4BERTINI_KAON` conditional assembly flags. Kaon and hyperon interactions are now automatically included.
  - `G4ElasticCascadeInterface` now derives from `G4VIntraNuclearTransportModel` instead of `G4HadronElastic`. Code now checks for the case when no elastic scattering occurs. If so, original bullet and target are returned.
- models/chiral_invariant_phase_space:
  - Added gamma decay for forced hypernucleus decay.
  - Modify `G4StringChipsParticleLevelInterface` in order to fix energy/momentum conservation in QGSC.
  - Added new prototype class G4QElastic for precise elastic scattering simulation in CHIPS.
    - Improved high-t exponential behavior of pp elastic scattering.
    - Added isotope-symmetric reactions nd(=pd) and nHe4(=pHe4).
  - Fixed negative value to `sqrt()` in `G4Quasmon` and `G4QEnvironment`.
  - CHIPS muon-nuclear, photo-nuclear, electro-nuclear and tau-nuclear reactions have been introduced.
  - Upgraded cashing method for the CHIPS cross-sections.
- models/coherent_elastic:
  - New process `G4UHadronElasticProcess` added. It allows user-defined isotope composition of elements and uses cross sections from the CHIPS model and high-precision neutron models when appropriate.
  - `G4LElasticB` model:
    - Renamed as `G4HadronElastic`.
    - Removed charge exchange option.
    - Removed low limit on primary momentum.
    - Added limit on secondary kinetic energy.
    - Added s-wave only regime for low momentum scattering.
    - Add code from high energy elastic scattering which does not use data files.
    - Fix to remove occasional NaN values at scattering on deuteron.
  - For both `G4UHadronElasticProcess` and `G4LElastic` use np scattering from CHIPS.
  - Added new `G4ChargeExchangeProcess` class.
- models/de_excitation:
  - Fixed memory leak in method `G4PhotonEvaporation::BreakItUp()`. Addresses problem report #851.
- models/low_energy:
  - Moved `G4LElasticB` to `coherent_elastic` module.
  - Removed subtraction of electron masses from atomic mass in some low energy models. This is because the method `G4Nucleus::AtomicMass()` now already makes the subtraction. Models affected:
    - `G4LEAlphaInelastic`, `G4LEDeuteronInelastic`, `G4LENeutronInelastic`, `G4LEProtonInelastic`, `G4LETritonInelastic`.
- models/management:
  - `G4InelasticInteraction`: in method `CalculateMomenta()`, corrected excess energy problem by doing two calculations of nuclear evaporation, one for the annihilation case and one for non- annihilation. Previously one value was applied to both cases. Biggest effect seen for anti-baryons.
    Save also current target and secondaries in case annihilation fails in `GenerateXandPt()`, then restore them for use in `TwoCluster()`.
- models/neutron_hp:
  - Installed option to turn off neutron suspension in HPElastic models: added method `DoNotSuspend()` to `G4NeutronHPElastic` and `G4NeutronHPorLElastic`.
- models/radioactive_decay:
  - `G4RadioactiveDecay::IsApplicable()`: added test for negative lifetime, fixed problem connected with particle design in 8.0.
- stopping:
  - Fixed energy/momentum balance for `G4MuonMinusCaptureAtRest`.
- util:
  - Fixed bug in methods `G4Nucleus::GetFermiMomentum()` and `G4ReactionKinematics::TwoBodyScattering()`: momentum is now isotropic; previously theta was incorrectly sampled by `pi*G4UniformRand()`. Addresses problem report #838.
  - `G4ReactionDynamics`:
    - Implemented exact proton and neutron accounting to improve baryon number conservation:
      - Added new method `GetFinalStateNucleons()` which returns the number of protons and neutrons generated by the initial projectile-nucleon collision.
      - Replaced spall argument in `AddBlackTrackParticles()` with `PinNucleus` and `NinNucleus`.
    - Improved energy balance:
      - In method `GenerateXandPt()`, try removing pions and kaons before removing nucleons.
      - In method `SuppressChargedPions()`: check available CM energy before changing pion to nucleon, also extended test for anti-particles to include strange particles.
      - In methods `GenerateXandPt()` and `TwoCluster()`, call `GenerateNBodyEvent()` a second time if energy sum is violated, this time with total system energy.
      - In method `TwoCluster()`, use annihilation black track energy when annihilation channel occurs.
  - `G4Nucleus`:
    - Added new method `AnnihilationEvaporationEffects()` which calculates energy to be given to evaporated nucleons after annihilation.
    - Added new methods `GetAnnihilationPNBlackTrackEnergy()` and `GetAnnihilationDTABlackTrackEnergy()` to retrieve the values calculated above.
    - Replaced code in method `AtomicMass()` with: `G4NucleiProperties::GetNuclearMass(A, Z)` in order to be consistent with other methods for getting nucleus mass. Note: new version has electron masses subtracted, while old version included them.

### Parameterisation Models

- gflash:
  - Fixed compilation warning on SUN-CC.

### Particles

- Updated particles to match with PDG2005:
  - Updated name and PDG code for some resonaces.
  - Updated mass/width for resonance particle.
  - Updated mass/width/life for heavy flavor particle.
  - Updated mass/life/decay modes for `tau+-`.
- `G4Ions` is defined as the base class of all nuclei:
  - `G4GenericIon` and all light ion classes (including proton and neutron) are derived from `G4Ions`.
  - `GetAtomicMass()` and `GetAtomicNumber()` of `G4ParticleDefinition` are changed to be non-virtual.
  - `AtomicNumber` and `AtomicMass` are defined for `G4GenericIon`. Fixes problem report #846 about registration of `G4RadioactiveDecay` to `G4GenericIon`.
- All particles are deleted when calling `G4ParticleTable::RemoveAllParticles()` and is invoked in the destructor of `G4ParticleTable`.
- Fixed memory leak in `G4MuonDecayChannel`. Addressing problem report #864.

### Run

- Introducing new material scanner utility.
- Store random number status in `G4Run` and `G4Event`.
- Added zero vector check for polarization of optical photon in `G4PrimaryTransformer`.

### Track and Tracking

- Track
  - Improved `G4Track::GetVelocity()` for optical photon.
- Tracking
  - Bug fix for `StepStatus` when a track is outside of world boundary. Addressing problem report #866.
  - Introduced new flags in `G4VSteppingVerbose` for more verbosity control.

### Visualization

- Overall
  - Support 2D Text for OpenGL and HepRep (other drivers to be supported in future releases).
  - Added powerful new facility to control which trajectories are drawn: Trajectory Filter Models. See also new commands `/vis/filtering`.
  - Added more trajectory models: DrawByOriginVolume and GenericDrawer.
  - Added options to modeling commands to control drawing style for lines, step and auxiliary points. See also commands `/vis/modeling/trajectories/*`. Older way of controlling some of these options, the `i_mode` argument in `/vis/scene/add/trajectories`, is also still supported but will be deprecated in the next major release.
  - Added command to interactively edit vis attributes (color, visibility, etc.) of geometry volumes. See also commands `/vis/geometry/*`.
  - Added command to list current settings of modeling, filtering, etc. See also commands `/vis/list/*`.
  - Added command to write Run and Event numbers onto visualization. See also command `/vis/scene/add/eventID`.
  - Support re-computation of transients to allow sending same events to multiple vis drivers. See also command `/vis/scene/transientsAction`. Note that this feature is turned off by default since we consider it a beta release.
  - Print available models on initialisation (uses new command `/vis/list` described above).
  - Changed ERROR to WARNING when user calls `Draw` with an invalid view.
  - Added protection against non-instantiation of run manager.
  - Improved protection for null models and parameters.
  - Improved handling of situation when world has been added to an empty scene.
  - Eliminated some cases of double refresh.
  - Fixed memory leak in `CheckModel()`.
  - Implemented methods `Begin/EndPrimitives2D()` used by some vis drivers to tell if primitives are to be placed in 2D (screen) space or 2D (world) space.
  - Fixed bug in culling of covered daughters.
  - Migrated to direct access to `G4PhysicalVolumeModel`.
  - Added capability of maintaining path of the current drawn (non-culled) volume in terms of drawn (non-culled) ancestors. See header file for `G4PhysicalVolumeModel` for detailed description.
- DAWN
  - Fixed rewind and file-closure-on-exit issues that occurred for some command sequences.
  - Prevented possibility of having duplicate instances of the geometry.
- HepRep
  - `HepRepFile`:
    - Corrected direction of `G4Cons`.
    - Added units to geometry volume attributes Density and Radlen.
    - Corrected hierarchy for cases in which culling has removed some volumes.
    - Split different groups of hits into different HepRep Types depending on attribute `HitType`.
    - Handle axes and other primitives that are neither transients nor geometry.
    - Fixed file-closure-on-exit issues that occurred for some command sequences.
    - Added `G4Version` attribute to HepRep file.
  - `HepRepXML`: stable. No changes.
- OpenGL
  - Improved efficiency (by making `G4OpenGLXmViewerMessenger` smart).
  - Refined display list handling.
  - Fixed buffer swapping behaviour that had resulted in blank or incomplete displays on Windows.
- OpenInventor
  - Implemented drawn volume path.
  - General improvements in logic.
- RayTracer
  - Moved `G4RayShooter` class to `Event` module.
  - Allow RayTracer and RayTracerX to be separately controlled during same session.
- Tree
  - Fixed bug in treatment of repeated replicas.
- VRML
  - Fixed rewind and file-closure-on-exit issues that occurred for some command sequences.
  - Prevented possibility of having duplicate instances of the geometry.
- XXX
  - Improved handling of `DrawnPVPath` (by using drawn volume path).
  - Added more example classes: `G4XXXFile`, `G4XXXStored` and `G4XXXSG`.

### Environments

- Added new Python interface module:
  - `g4py/source`: Python wrappers for Geant4 source.
  - `g4py/site-modules`: some application modules using the wrappers.
  - examples, tests and associated configuration files.
- Removed dependency on Gain module in MOMO.

### Physics lists

- Archived 'electromagnetic' subdirectory. Physics lists for EM use cases are provided together within the geant4 examples. In particular extended electromagnetic examples demonstrates how to use standard EM physics, how to use available options and provide extensions.
- Providing `G4QStoppingPhysics` based on the CHIPS model for simulation of capture at rest of negatively charged hadrons; using it in all QGS and FTF type physics lists.
- Moved elastic out of Neutron/Proton/PIK- builders. Now using `G4HadronElasticPhysics` directly in all.
- Using Bertini Cascade for kaons (K+,K-, K0L, k0S).
- Added Binary Cascade for Ions to BIC physics lists.
- Added experimental QGSP_EMX physics list providing an alternative standard EM physics, requiring less CPU in comparison with QGSP.
- Added mu-nuclear option to `G4EmExtraBuilder`.
- Added experimental QBBC Physics List: version of physics free of LHEP models but using Binary, BinaryIon, Bertini, CHIPS, QGSC, FTFC.
- Fixed problem in destructors of `G4DecayPhysics` and `G4ElectroNuclearBuilder` and `G4MiscLHEPBuilder`.
- Fixed name of builder for `HadronPhysicsQGSP_GN`.

### Data sets

- New data set for low-energy electromagnetic processes: G4EMLOW 4.0.
- New data set for high-precision neutron processes: G4NDL 3.9:
  - Added data for Antimony, Hafnium, Technetium, Samarium, Neodymium and Gadorinium.
  - Updated inelastic data for 17_nat_Chlorine, 28_62_Nickel and removed data for 32_70/2/3/4/6_Germanium.

### Examples

- Updated reference outputs.
- advanced
  - air_shower
    - `RunAction`: removed use of visualization UI commands, and small changes in `PrimaryGeneratorAction`.
  - brachytherapy
    - Delete hits collection. Energy deposit and position are stored directly in histograms and ntuples in the `BrachyPhantomSD`.
    - Iteration in the management of the primary particles.
    - More comments in code and README updated.
  - gammaray_telescope
    - Updates in Digi section, Physics Models, Source Generation.
  - hadrontherapy
    - Improved the random generator.
    - Bug fixed in all the hadronic physics lists; the hadronic processes are not activated for He3 at the moment.
    - Corrected a bug in the primary generator action on `SetParticleMomentum()`.
    - Changed the beam line according with a modification in the real CATANA beam line considered as model.
    - Comments in the primary particle and physics components.
  - medical_linac
    - Changes in input macros.
  - microbeam
    - New example simulating the cellular irradiation beam line installed on the AIFIRA electrostatic accelerator facility located at CENBG, Bordeaux-Gradignan, France.
  - radioprotection
    - Introduced pion absorption at rest in `RemSimHadronicBinary`.
    - Primary particle generator can handle spectra.
    - Added histograms and comments.
  - raredecay_calorimetry
    - New example simulating a simplified sandwitch calorimeter for estimate importance of photonuclear reactions for photon inefficiency and compare effectiveness of different absorbers to reduce it.
  - Tiara
    - Minor updates.
  - underground_physics
    - Removed visualisation warnings when running in batch mode.
    - Replaced obsolete e-mail address in headers.
- extended
  - analysis/A01
    - Added Time attribute to Hit classes.
  - electromagnetic/TestEm0
    - New example to print the cross sections and stopping power used by the standard electromagnetic package via `G4EmCalculator`, which extracts these data from the Physics Tables. The program can be used in batch or interactively.
  - electromagnetic/TestEm1
    - Added `PhysListEmLivermore` and `PhysListEmPenelope`.
    - Create histograms for primary particle only.
    - Refreshed all macros. Changed names.
    - Changed printing format in `EndOfRun`.
    - `PhysicsList`: new functions `AddDecay()`, `AddStepMax()`.
    - Changed unit `mum` to `um` in input macro.
    - Updated README.
  - electromagnetic/TestEm2
    - Suppress the geometrical replica. The energy profiles are produced without geometrical step limitation. Suppressed the geometrical disivions in geant3.
    - Removed histograms of particle flux. Histograms 10-12 become 7-9.
    - Removied all Builders and replaced by simple physics lists.
    - `SteppingAction`: edep randomly distribued along step.
    - `PrimaryGenerator`: allow `/gun/particle/position`.
    - `RunAction` added printout of Moliere radius.
    - Updated README.
  - electromagnetic/TestEm3
    - Changed unit `mum` to `um` in most macros.
    - Added extra material and use G4 NIST element DB.
    - Added Livermore and Penelope Physics Lists.
    - Use touchable-handle in stepping-action.
    - Updated README.
  - electromagnetic/TestEm4
    - Updated input macros and README.
  - electromagnetic/TestEm5
    - `TrackingAction`: more precise definition of transmit and reflect.
    - Added Livermore Physics List.
    - Changed unit `mum` to `um` in input macros.
    - Completed Penelope Physics List.
    - Count energy of killed secondaries and print full `dEdx`.
    - Use touchable-handle in stepping-action.
    - Updated README.
  - electromagnetic/TestEm6
    - Added UI command `/testem/phys/SetAnnihiToHadronFac`.
    - Register `G4StepLimiter` in Physics List.
  - electromagnetic/TestEm7
    - New macro: tallies.mac; completed default input macro.
    - SteppingAction: `edep` randomly distribued along step.
    - Use touchable-handle in stepping-action.
    - Updated README.
  - electromagnetic/TestEm9
    - Updated README.
  - electromagnetic/TestEm10
    - General cleanup and removed obsolete files.
  - electromagnetic/TestEm11
    electromagnetic/TestEm12
    - Changed unit `mum` to `um` in input macros.
    - Added Livermore and Penelope Physics Lists.
    - RunAction: added GetCSDARange().
    - HistoManager: compute stepMax from histo 1 (stepMax <= binWidth).
    - RunAction: pass stepMax from HistoManager to StepMax process.
    - StepMax: added boolean flag 'apply'.
    - SteppingAction: edep randomly distribued along step.
    - Updated README
  - electromagnetic/TestEm13
    - Replaces (renamed) `PhotonProcesses` example.
    - Allows to compute the total cross section of one or several processes.
    - Added protection in `DetectorConstruction::UpdateDeometry()`.
    - Updated README.
  - electromagnetic/TestEm14
    - Replaces (renamed) `MuonProcesses` example.
    - Allows to compute the total cross section of one or several processes and to plot the final state at interaction point.
    - Added protection in `DetectorConstruction::UpdateDeometry()`.
    - Updated README.
  - electromagnetic/TestEm15
    - Added protection in `DetectorConstruction::UpdateDeometry()`.
    - Added `phi` correlation.
    - Use touchable-handle in stepping-action.
    - Updated README.
  - electromagnetic/TestEm16
    - New example for the simulation of synchrotron radiation.
  - electromagnetic/TestEm17
    - New example to check implementation of the processes of muon interactions: ionization, direct (`e+,e-`) production, bremsstrahlung, `mu`-nuclear interaction.
  - gdml
    - Added `G4Evaluator` for new version of GDML and updated `GNUmakefile`.
  - hadronic/Hadr01
    - New example based on the IION application developed for simulation of proton or ion beam interaction with a water target. Different aspects of beam target interaction are demonstrated in the example including logitudinal profile of energy deposition, spectra of secondary particles, spectra of particles leaving the target. The results are presented in a form of average numbers and histograms.
  - optical/LXe
    - Exhibit choice of WLS time delay via new classes of `G4VWLSTimeGeneratorProfile`.
  - persistency
    - Archived old `PersEx01` example based on CINT dictionary.
    - Introduced new example `P01` for persistency using the Reflex tool.
  - visualization
    - New example "perspective".
- novice
  - Reviewed initialization in `main()`.
  - N02
    - Use touchable-handle in `TrackerSD`.
    - Updated README.
  - N03
    - Use `preStepPoint` and touchable-handle in stepping-action.
    - Removed `printModulo` command in `vis.mac`.
  - N05
    - Fixed memory leak in `ExN05PionShowerModel`.
  - N06
    - Added new method `PSetOptPhotonPolar()` in `PrimaryGeneratorAction` to set a random linear polarization when the command `/N06/gun/optPhotonPolar` is given without arguments.
  - N07
    - Fixed a bug in `SetGapMaterial()` in `DetectorConstruction`.
    - Added method `AddMaterial()` to `DetectorConstruction` and modified `DetectorMessenger` class accordingly.
    - Updated `sample.mac` and `retrieve.mac` for modified messenger.