Geant4 7.0 Release Notes

December 17th, 2004

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. Compiler Specific Problems
4. Known Run-Time Problems
5. Compilation Warnings
6. Known Run-Time Warnings
7. Major items for migration of user code
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.
  This configuration was tested on 32 bits architectures with the Scientific Linux CERN 3 (SLC3) distribution (based on RedHat Linux Enterprise 3) and also with RedHat 7.3. Versions of Geant4 have also been compiled successfully on other Linux distributions, like Debian, Suse or more recent RedHat systems. The default RedHat compiler gcc-2.96 distributed in RedHat 7.X is NOT supported. It has been verified that it produces incorrect binaries, therefore is not reliable. See also note below.
- Windows/XP and CygWin Tools with: Visual C++ 7.1 .NET

More verified configurations:

- SUN Solaris 5.8, C++ CC-5.5.
- Linux, gcc 3.4.3.
- Linux, Intel-icc 8.0.
- MacOS 10.3, gcc-3.3

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 7.0 requires the installation of CLHEP.
Tests have been performed with CLHEP-1.8.1.0
The software has been verified also with CLHEP-1.9.1.2.

Geant4 7.0 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. Compiler Specific Problems

- Linux Red Hat 7.X, gcc-2.96.
  - The default compiler distributed by Red Hat since release 7.0 is NOT supported and not considered reliable for running a Geant4-based application. In more than one test case, binaries produced by gcc-2.96 have shown incorrect behavior, either due to wrong order of initialisation of static data in memory or to bugs in the system `iostream` classes, problems which apparently have all been solved in more recent versions of the compiler (3.X series).
    For information, gcc-2.96 is a compiler that has never been officially released, nor supported by the GNU team itself and is not considered reliable by the authors (for more information, see also http://gcc.gnu.org/gcc-2.96.html).

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

## 5. Compilation Warnings

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

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

## 7. Major items for migration of user code

Some migrations are necessary in different areas of the user code in order to upgrade from release 6.2 to release 7.0, a full recompilation and/or reinstallation of libraries and user applications is moreover required.

Direct usage of `<cmath>` for standard mathematical functions

In this release the Geant4 code makes now direct usage of `<cmath>` for standard mathematical functions. All direct/indirect inclusions of `<math.h>` have been removed.
To be compliant with this migration, the user code should be modified as well, by adopting either one of the following approaches:

- Put in front of the following standard mathematical functions the `std::` prefix for the namespace:

             pow(), exp(), sqrt(), log(), log10(), sin(), cos(), tan(),
             sinh(), cosh(), tanh(), asin(), acos(), atan(), atan2(),
             ceil(), floor(), fabs(), fmod(), frexp(), ldexp(), modf()

- Alternatively, for places where code readability is a concern, add in source files (not headers or inline methods, and after the headers inclusions), the statement:

             using namespace std;

As part of this migration also standard headers like:

           <math.h>, <limits.h>, <stdlib.h>

are no longer indirectly included. This may require the user code to include them if/where necessary.
To be noticed also that this migration involves also the removal of usage of the ad-hoc template function originally defined in CLHEP:

           T abs(T)

So the definition of this function will not be any longer available in a indirect way. The standard mathematical function:

           std::abs()

will have to be used instead.

New Installation procedure for the `Configure` script

The installation procedure of the kernel libraries using the `Configure` script has changed. It is now required to specify the final area of installation for the libraries and sources; libraries are now first built in the local directory where the source has been downloaded and unpacked; and will be later-on installed in the specified installation area (requiring `root` priviledges if necessary). See the Installation Guide for the details.

Migration for usage of the `G4VParticleChange` class

An interface change to the class `G4VParticleChange` is implemented in Geant4 7.0. Advanced users, who have implemented a physics process should be aware that the following methods have been removed:

          void  SetTrueStepLength(G4double truePathLength);
          void  SetLocalEnergyDeposit(G4double anEnergyPart);
          G4TrackStatus GetStatusChange() const;
          void  SetStatusChange(G4TrackStatus status);
          void  SetSteppingControl(G4SteppingControl StepControlFlag);
          void  SetParentWeight(G4double);

They have been replaced by the following methods, respectively:

          void ProposeTrueStepLength(G4double truePathLength);
          void ProposeLocalEnergyDeposit(G4double anEnergyPart);
          G4TrackStatus GetTrackStatus() const;
          void ProposeTrackStatus(G4TrackStatus status);
          void ProposeSteppingControl(G4SteppingControl StepControlFlag);
          void ProposeParentWeight(G4double);

For the detailed list of all interface changes involved in `G4VParticleChange`, please consult: http://cern.ch/geant4/source/source/migration_70.html.

Step limitation

A user now needs to change his/her code, in order to limit the step size of a particle -- when using the class `G4UserLimits` to limit the step. Up to the previous release, step limitation due to the maximum step length of `G4UserLimits` was directly done by `G4SteppingManager`, while all other limits (`maxTrackLength`, `maxStepNumber`, `MinKinEnergy` and `minRemainRange`) were dealt by `G4UserSpecialCuts` process. To solve this inconsistency, to simplify the majority of applications which do not utilize the step limitation, and to give more usability to the user, we introduce a new process `G4StepLimiter` and move the step limitation procedure in `G4SteppingManager` to this new process.

- The new process, `G4StepLimiter`, limits the step size specified by `G4UserLimits`, but will not kill a track.
- `G4UserLimits` class is kept as it is, and can specify all limits as before.
- `G4UserSpecialCuts` is kept as it is. This process kills a track once the track comes to a limit specified by `G4UserLimits` (as it did previously). This provides the user the ability to impose one or more kinds of "tracking cuts".
- Given no process took place for max step length limitation in the old design, `G4StepPoint::GetProcessDefinedStep()` method used to return `NULL`. In the new scheme, if a step is limited by the maximum step length limitation, this method now returns a valid pointer of `G4StepLimiter` process.

The user who is using the step length limitation MUST include the new `G4StepLimiter` process in the physics-list explicitly. This new process may be assigned only to the selected particle types (e.g. only to the charged particles) instead of setting it to all particle types.
No change is required for the user who is NOT using `G4UserLimits` for the purpose of maximum step limitation.

Killing of a particle

An advanced user who has created a process with a continuous component ('AlongStep' action) that can kill or bring a particle to a rest will need to review their process implementation. Energy-loss processes no longer change the track status of a charged particle as part of their `AlongStepDoIt()` action. For a user-defined process with a "continuous" component, in order to stop (and thus either kill or bring to a rest in an 'alive' state) a particle in its `AlongStepDoIt()` method, it is now necessary to propose zero kinetic energy for the particle. Alternatively a process can contribute to the particle arriving at zero energy, as a result of the action of two or more processes, e.g. energy loss and propagation in an electric field (in the transportation process). Once a particle has zero (or less) proposed energy, it is brought to a rest and its energy is set exactly to zero. If the particle can decay, can be annihilated or generally has one or more 'AtRest' actions, then another step will be performed that calls these; else, the particle is killed. The discrete component (or 'PostStep' action) of a process will not be performed once the particle has come to a stop.
Note: the case of a particle that comes to a rest in a field and is then re-accelerated, is not supported at this time.

Future migration for `G4GeneralParticleSource` class

A 'tree-structured' command format is implemented in this release for `G4GeneralParticleSource`. The old UI commands have been kept for backward compatibility but will be removed in the future.
For more information, please consult: http://reat.space.qinetiq.com/gps.

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

- Implemented migration to `<cmath>` for standard mathematical functions.

### Configuration

- `Configure` script: now installing libraries in specified installation area. Installation happens now in two steps: libraries are first built locally and later-on installed. Defined new commands:
  - `Configure -build`: to start the configuration process and locally build the libraries.
  - `Configure -install`: to install libraries and sources in the specified installation area.
- Archived setup for Windows/VC++6 and removed WIN32-VC7 G4SYSTEM tag, now replaced by WIN32-VC, setup for VC++ .NET.
- Relaxed compilation options for SUN-CC.
- Darwin-g++.gmk:
  - Added -lXi to X11LIBS.
  - Corrected options to build granular shared libs. Have "-undefined define_a_way" instead of "-undefined error".

### Digitization & Hits

- `G4VDigi`: added methods to store and retrieve HepRep attributes in same manner as currently done for trajectories and hits.

### Electromagnetic Processes (Low-energy)

- Fixes to tables manipulation, effective charge, graphite problem and Bremsstrhalung low energy edge of the spectrum.
- Revision of G4LowEnergyPhotoelectric to allow for new development of precise angular distributions.
- Improved parameterised PIXE model based on Paul & Sacher review; it becomes the default one.
- Software improvement in G4PenelopeCompton.
- Implemented migration of processes to new `G4VParticleChange` interfaces.

### Electromagnetic Processes (Standard)

- Added new process: positron annihilation to pion pair (`G4eeToHadrons`).
- Added new utility class: `G4EmCalculator`, to access/calculate dedx, range, cross sections of EM processes.
- Migrated to new scheme for store/retrieve Physics Tables: new sequence of initialisation of EnergyLoss process: first PreparePhysicsTable, then BuildPhysicsTable or RetreivePhysicsTable. Do not rebuild G4PhysicsVector if cuts were not changed for given `G4MaterialCutsCouple`.
- Restructured subdirectories: multiple-scattering and other concrete models have been moved from utils to standard and a new package (`highenergy`) has been created.
- Migrated processes to new interface for `G4VParticleChange`.
- Multiple Scattering
  - Changes in the angle distribution (slightly modified Highland formula for the width of the central part, changes in the numerical values of some other parameters) ---> approximately step independent distribution.
  - Correction in `SampleCosineTheta` in order to avoid numerical precision problems at high energy/small step.
  - Fix precision problem for very high energy ions in gases (or with small stepsize) has been solved in `G4MscModel`.
- proton Ionization
  - Extended `G4BraggModel` below `1 keV`
- Ion Ionization
  - Decoupled `G4ionIonisation` process from proton ionisation, use alpha stopping power tables for simulation of ion ionisation.
  - Added `G4ionEffectiveCharge` class needed to ion physics.
- mu Ionization
  - Fixed a problem observed after deactivation of muon ionisation.
  - Provide a possibility to use the same EnergyLoss process class for several particles (mu+ and mu-)
  - Changed process names: Mu -> mu.
- PAIonization
  - Removed `G4PAIonisation`; provided two new models of PAI ionisation and example `TestEm8` to demonstrate how to use these models. Provided possibility to use PAI per region; any low cut should be established for the PAI model.
  - Removed `G4IonisationByLogicalVolume`.
- All EnergyLoss processes
  - Removed `ProposeTrackStatus()` from AlongStep for EnergyLoss processes, this action becomes under responsibility of `G4SteppingManager`.
- Pair production by muon
  - Fixed bug in calculation of cross section of pair production by muons.
- eBremsstrahlung
  - Added a threshold for `G4eBremsstrahlung` process, if emitted gamma is above the threshold, incoming track is killed and is added to the list of secondary particles.
- Compton Scattering
  - Improved `totalCrossSection` parameterisation below `15 keV`.

### Event

- Made `G4PrimaryTransformer` a base class to allow for users to customize treatment of particle types, especially those exotic to Geant4.
- Added treatment of `G4UnknownParticle` to `G4PrimaryTransformer`.
- `G4GeneralParticleSource`: added new features, focused beam and multiple vertices.

### General Processes, Parameterisation, Cuts, Decay, Optical

- Migrated processes to new interface for `G4VParticleChange`.
- Cuts:
  - Added `G4PhysicsTableHelper` class in order to assist implementation of new scheme of `Store/RetrievePhysicsTable()` for processes.
  - Added `G4MCCIndexConversionTable` class and modified `G4ProductionCutsTable` in order to extend functionality of `Store/RetrievePhysicsTable()`.
- Decay:
  - Introduced `G4UnknownDecay` class.
  - Added a new method `GetRemainderLifeTime()` to `G4Decay`.
- Management:
  - Added `PreparePhysicsTable()` method in `G4VProcess`.
  - Added `const` cast for arguments in `Store/RetrievePhysicsTable()`.
- Optical:
  - Fixed bug in DielectricMetal only `GetFacetNormal()` for LobeReflection.
- Transportation:
  - Introduced `G4StepLimiter` to handle `MaxAllowedStep` in `G4UserLimits`.
  - Added pointer to sensitive detector in `G4ParticleChangeForTransport` and updated `G4Transportation` to make use of it.
  - Added protection in `G4Transportation` for specific case of parameterised volumes by materials where no EM processes are defined.
  - Added threshold energy for not abandoning stuck particles quickly in `G4Transportation`.
  - `G4UserSpecialCuts`: apply tracking cut only if `Rmin` or `Emin > DBL_MIN`.

### Geometry

- Magnetic Field
  - Added `Set/GetAnomaly()` methods in `G4Mag_SpinEqRhs` equation of motion.
- Management
  - Introduced abstract class `G4VStoreNotifier` to be optionally associated to stores by the user for the notification of the registration and deregistration of objects in the stores.
  - Added notification mechanism to volume, solid, and region stores.
  - `G4VTouchable`: added `GetCopyNumber()` method, clone of `GetReplicaNumber()`.
  - Introduced virtual method `GetCubicVolume()` to `G4VSolid`, returning an estimation of the solid volume in internal units. This method may be overloaded by derived classes to compute the exact geometrical quantity for solids where this is possible, or anyway to cache the computed value. By default it uses the new protected method `EstimateCubicVolume(stat, eps)` with fixed statistics and error accuracy, and does not cache the computed value.
  - Added `GetPolyhedron()` to `G4VPhysicalVolume`, a smart access function that creates a `G4Polyhedron` on request and stores for future access. A null pointer means "not available".
  - `G4LogicalVolume`:
    - Added method `GetMass()` to `G4LogicalVolume`, returning the value in absolute units of the mass of the logical volume tree. The mass is computed from the estimated geometrical volume of each solid and material's density associated to the logical volume and its daughters. The returned value is cached and can be used for successive calls (default), unless recomputation is forced by providing `true` as the first boolean argument in input. Computation should be forced if the geometry setup has changed after the previous call. An optional argument to specify a material is provided; it is implicitely used for geometrical parameterisations by material.
    - Added method `TotalVolumeEntities()` to `G4LogicalVolume`, returning the total number of physical volumes (placed or replicated/parameterised) included in the tree represented by the current logical volume.
    - Fix in `UpdateMaterial()` for checking the existance of root-region pointer for logical-volume. Fixes report #684.
- Navigation
  - `G4Navigator`:
    - Added new access method `SeverityOfZeroStepping()`.
    - Allow consecutive corrections for stuck tracks in `ComputeStep()` up to 10 times before aborting the event.
  - `G4ReplicaNavigation`: fix in `DistanceToOutPhi()` for the case of phi sections on convex surfaces. Fixes problem report #651.
- Solids
  - Added specific implementation for `GetCubicVolume()` wherever possible and implemented caching of the computed value for all solids.
  - Added specific `GetPolyhedron()` to solids, a smart access function that creates a `G4Polyhedron` on request and stores for future access. A null pointer means "not available".
  - CSG solids:
    - `G4Trap`: added check for X-centering in constructor by verteces. Fixes problem report #687.
  - Specific solids:
    - Added new `G4TwistedBox` shape: a twisted box with twist angle alpha, length a/2,b/2,L/2.
    - Added new `G4TwistedTrap` shape: a twisted trapezoid with twist angle alpha and same trapezoidal caps.
    - Fixes in `G4VSurface`:
      - `GetNeighbours()`: corrected axiscode (was returning the wrong neighbours).
      - `SetNeighbours()`: fixed problem #685 (index out of range).
    - Fix in `G4PolyconeSide::Inside()` for points at radius = 0 for phi slides solids with an inner radius. Addresses problem report #598.
- Volumes
  - `G4ReflectionFactory`: added automatic reflection for visualization attributes, biasing weights and regions associated to the logical volume.

### Global

- New implementation of `G4Allocator` based on a pool of memory-chunks. The size of a single chunk is kept at 1Kb as for the old allocator. This implementation replaces the old `G4Allocator` which was based on pages and no longer portable on the gcc-3.4.X compilers. The new allocator also supports the standard interface required for STL containers, in case it will be used as alternative allocator instead of the default `std::allocator`.
  Added inclusion of `<cstddef>` to `G4Allocator.hh` to make the header self-consistent.
- Migrated code to use `std` namespace for mathematical functions included from `<cmath>`. Removed explicit inclusion of `CLHEP.h` and therefore also implicit inclusions of system headers `<math.h>`, `<stdlib.h>` and `<limits.h>`.
- Removed implicit inclusion of CLHEP's template function `abs()`, use now standard function `std::abs()` instead.
- `G4PhysicsTable`:
  - Added collection of flags and related methods. The collection of boolean values will be used by physics processes to flag if recomputation will be required or not.
  - Code cleanup and added `Push_back()` method.
- Added global function `G4RandomDirection()` providing a random 3-vector normalised in 4pi.
- Cleared obsolete setup for min/max macros required for Windows/VC++6.

### Graphical Representations

- Introduced forced auxiliary edge visible in `G4VisAttributes`.
- Removed `G4Polymarker::line`. Use `G4Polyline` instead.
- `HepPolyhedron`, `BooleanProcessor`: replaced occurences of `HepStd` with `std`.

### Hadronic Processes

- Migrated processes to new interface for `G4VParticleChange`.
- Improved treatment of cross-sections, and neutrons to improve on the ATLAS/HEC shower-shape description for the QGSP physics list.
- cross_sections
  - Updating pion cross-sections for copper, to be more closely consistent with data.
- management
  - Changed the framework classes, so that the `G4TouchableHandle` from the parent `G4Track` is now carried forward to the secondary tracks in all cases.
- stopping
  - Changed process classes, so that the `G4TouchableHandle` from the parent `G4Track` is now carried forward to the secondary tracks in all cases.
- models/binary_cascade
  - Resonance potentials now consistently treated under the assumption that they are zero.
  - Introduced a new more selective system of debug printout steering.
  - Cleared debug run-time output.
- models/cascade
  - Fixed a memory fault, and some minor cleanup.
- models/chiral_inv_phase_space/body
  - Fixed unnecessary debug messages affecting unit-test.
  - Changed problem related print-out.
- models/high_energy
  - Removed a phi asymmetry in the high energy neutral pion distributions.
- models/leading_particle
  - Added clarification notice with respect to the nature of the code, to be printed at start-up.
  - Corrected treatment of secondaries in the creation of particle change.
- models/low_energy
  - Fixed an energy non-conservation problem of few `MeV` size, in relations to phase-space sampling.
- models/muon_nuclear
  - Changed process name to be consistent with other muon processes.
  - Changed memory allocation policy in the hadronic vertex to avoid a platform dependency that can lead to a crash on exit.
- models/radioactive_decay
  - Added G4MshellECDecay class and changed `G4RadioactiveDecay` accordingly.
  - Added better handling of incomplete data files.
  - Corrected treatment of metastables as initial tracks in VR mode.
  - Default decay window in VR model set to 9.9x109 - 1010 seconds.
  - Added individual time stamp for splitted isotope
  - Fixed problem reports #396 and #662.
  - Applying now atomic relaxation only to `5 < z < 101`.
  - No more fast/slow beta decay mode with a faster 3-body decay implementation.
  - `G4RIsotopeTable`: no longer reset the excitation energy.
  - Added `touchableHandle` to secondary tracks.

### Parameterisations

- New gflash submodule for fast shower parameterisation, contribution of CMS and ATLAS.
- Moved original TRD classes to `trd_models` submodule.

### Particles

- Introduced `G4UnknownParticle` class for bosons.
- Introduced `G4MuonDecayChannelWithSpin` class.
- Removed obsolete dependency to G4Material from `G4ParticleDefinition` and related class.

### Run and Interfaces

- Interfaces:
  - `G4UIXm`: define default resources in case `XENVIRONMENT` is not set.
- Run:
  - Temporarily allow the use of `G4ParticleTable` before the construction of physics table.
  - Fixed wrong behaviour of `G4RunManager` when the user modifies the geometry without replacing the world.
  - Moved ConstructParticle() and ConstructProcess() methods to 'public'.
  - `G4VUserPhysicsList`:
    - Modified `BuildPhysicsTable()` and `PreparePhysicsTable()` for new scheme of `Store/RetrievePhysicsTable()` methods.
    - `ConstructParticle()` and `ConstructProcess()` methods are moved to 'public'.

### Track and Tracking

- Track
  - Removed obsolete interface methods from `G4VParticleChange`.
  - Modified `G4ParticleChangeForDecay`: added `thePolarizationChange` and related methods.
  - Fixed problem in the destructor of `G4VUserTrackInformation`.
- Tracking
  - Made `G4SteppingVerbose` a singleton.
  - `G4SteppingManager`:
    - Change the track status to `StopAndKill` when a track looses all kinetic energy cumulatively while the AlongStep loop.
    - Now changing the track status to `StopButAlive` if the kinetic energy becomes below zero while AlongStep loop.
    - Fix on interactive on/off for AtRest processes.
    - Do not issue `G4Exception` anymore also if no atRestDoit processes exit.
  - `G4Trajectory`, `G4SmoothTrajectory`: added HepRep attribute for magnitude of momentum.
  - Fix in `G4SteppingManager::InvokePSDIP()` for completing migration to new `G4VParticleChange` interface.

### Visualization

- Management
  - Correction to guidance of `vis/viewer/set/hiddenEdge`.
  - Removed deprecated commands:

                /vis/viewer/show               (use /vis/viewer/update)
                /vis/viewer/lightsThetaPhi     (use /vis/viewer/set/lightsThetaPhi)
                /vis/viewer/lightsVector       (use /vis/viewer/set/lightsVector)
                /vis/viewer/viewpointThetaPhi  (use /vis/viewer/set/viewpointThetaPhi)
                /vis/viewer/viewpointVector    (use /vis/viewer/set/viewpointVector)

  - Added auxiliary edge visible flag to `G4ViewParameters` and a new command, `/vis/viewer/set/auxiliaryEdge`. (Auxiliary edges are not genuine edges of the volume. They may be in a curved surface made out of polygons, for example, or in plane surface of complicated shape that has to be broken down into simpler polygons. `HepPolyhedron` breaks all surfaces into triangles or quadrilaterals. There will be auxiliary edges for any volumes with a curved surface, such as a tube or a sphere, or a volume resulting from a Boolean operation. Normally, they are not shown, but sometimes it is useful to see them. In particular, a sphere, because it has no egdes, will not be seen in wireframe mode in some graphics systems unless this flag is turned on). Implemented force auxiliary edge visible feature of `G4VisAttributes`.
  - Refined forced wireframe algorithm: *always* force wireframe even if hidden line removal is specified.
  - Rationalised vis command code (uses `G4UIcommand` static conversion functions where possible).
  - Removed `GetDrawingStyle()` method. Instead, developer has to:
    - Get vis attributes (pick up defaults if none):

                     const G4VisAttributes* pVA =
                           fpViewer -> GetApplicableVisAttributes (v.GetVisAttributes ());

      where v is the visible object (polyline, circle, polyhedron, etc.).
    - Get view parameters that the user can force through the vis attributes, thereby over-riding the current view parameter:

                     G4ViewParameters::DrawingStyle drawing_style = GetDrawingStyle (pVA);
                     G4bool isAuxEdgeVisible = GetAuxEdgeVisible (pVA);

      Most developers do this anyway, so the removed routine was redundant and resulting code is more efficient and transparent.
      To get colour, the developer can pick up directly from the vis attributes, pVA, obtained as above:

                        const G4Colour& c = pVA -> GetColour ();

      or use a slightly less efficient method:

                        const G4Colour& c = GetColour (v);

      where v is the visible object.
      Note that for text, the developer must use a different procedure, since the default text colour is determined by the default text vis attributes, which may be specified independent of default vis attributes of other types of visible objects. A function, `GetTextColour()`, is provided and the recommended use is:

                        const G4Colour& c = GetTextColour (text);

      which picks up the default if none.
  - Corrected mistake in `/vis/viewer/set/*Vector` commands.
  - Utilise smart method `GetPolyhedron()` for solids; greatly speeds 2nd and subsequent drawings when kernel access is required.
  - Rationalised use of `EstablishSpecials`: functionality moved to base class.
  - Removed use of obsolete `G4Polymarker::line`.
- Modeling
  - Added `G4PhysicalVolumeMassScene` and improvements to `G4PhysicalVolumeModel`.
- ASCIITree
  - `verbosity >= 3`: prints volume, density of all volumes in hierarchy.
  - `verbosity >= 4`: calculates the mass of the complete geometry tree taking into account daughters up to the depth specified for each physical volume in the current scene. Culling is ignored so that all volumes are processed. Uses `G4PhysicalVolumeMassScene`.
  - Added option to write to file (`/vis/ASCIITree/set/outFile`).
- DAWN
  - Improved diagnostic on trapping non-regular polyhedra.
- HepRep
  - Fixed a compilation problem in `zlib` for AMD64.
  - Upgraded to latest version C++ HepRep driver from FreeHEP.
  - Fixed GEANT-51, upgrade zlib to version 1.2.2 (for AMD64 compatibility).
- OpenGL
  - Hidden line *and/or* hidden surface removal now work for OGL*X and OGL*Xm.
  - Trap non-regular polyhedra and other small changes.
  - Removed redundant `fLastVP` from `G4OpenGLStoredSceneHandler`.
  - `G4OpenGLWin32Viewer::ShowView()`: correction in usage of glFlush to allow proper visualization of trajectories.
- OpenInventor
  - General code review of the driver.
  - Porting on Windows.
  - Corrected handling of transparent mode.
  - Forced culling off by default and solid mode. User will see all of the requested geometry volume tree; can use pointer button and CTRL-left-click to uncover (SHIFT-left-click to re-cover); can use the hand button and right-click to get wireframe.

### Physics lists

- Imported hadronic lists and electromagnetic lists from top-level to new module `physics_lists`.
  - electromagnetic
    - Instantiate processes only once for muons.
    - Use ionIonisation for GenericIon, alpha, He3.
  - hadronic
    - Added to build missing LHEP_BERT_HP & LHEP_BIC_HP lists.
    - Implemented migration to new `G4VParticleChange` interface.
    - Removed debug printout in `G4HadronQEDBuilder`.

### Environments

- New version of MOMO integrating GAG and Gain.
- Added new example and removed obsolete files.

### Examples

- Updated reference outputs.
- advanced
  - air_shower
    - New example for the simulation of an UV detection system (UVscope).
  - brachytherapy
    - Improved analysis management and corrected initial seed setting.
  - composite_calorimeter
    - Use new phys-lists structure.
  - cosmicray_charging
    - Removed call by pointer of hadronics classes.
    - Added MuNuclear interaction.
    - Updated input macros for obsolete gps commands.
  - gammaray_telescope
    - Code review.
  - hadrontherapy
    - Correction to analysis classes.
  - lAr_calorimeter
    - Use new phys-lists structure.
  - medical_linac
    - Added MedLinacTrackingAction, MedLinacMLCDecorator and MedLinacMLCMessenger.
  - purging_magnet
    - Cleared compilation warnings.
  - radioprotection
    - Added binary cascade approach.
    - Added histograms and option to define the format of the output file hbook or xml.
  - Rich
    - Implemented migration to new `G4VParticleChange` interface.
  - Tiara
    - Corrected link to the centralized hadronic physics lists and using new physics-lists structure.
    - Eliminated all the old links to the tiara-dedicated shared libraries for the Packaging and the physics lists SWIG wraps based on the templated physics list classes.
  - underground_physics
    - Implemented migration to new `G4VParticleChange` interface.
  - xray_fluorescence
    - General update, can now be used in batch mode without histograms.
- extended
  - analysis/A01
    - Removed dependency from user hadronics lists.
  - electromagnetic/MuonProcesses
    - Fix for generation of histograms according to 'muons' tag.
    - Trivial fixes for compilation in gcc-3.2.
    - Avoid deletion of Analysisfactory (for JAIDA).
  - electromagnetic/PhotonProcesses
    - Added new input macro anni.mac.
    - Avoid deletion of Analysisfactory (for JAIDA).
  - electromagnetic/TestEm1
    - Compute and print CSDA range from `G4EmCalculator`.
    - Set default vertex at left side of the box.
    - Avoid deletion of Analysisfactory (for JAIDA).
    - Define correctly all UI subdirectories.
    - Modifications in HistoManager and Messenger for histograms files.
    - Migrated to new interface for `G4VParticleChange` in `G4eBremsstrahlungCMS`.
    - Modified call to `G4EmCalculator`.
    - PhysListEmStandard: put threshold for `G4BremsstrahlungCMS` at `10 GeV`.
  - electromagnetic/TestEm2
    - Define correctly all UI subdirectories.
    - Modifications in RunAction for histograms files.
    - Change `USE_AIDA` to `G4ANALYSIS_USE` in `GNUmakefile`.
    - Fix in the logic of `PhysicsList::AddPhysicsList()`.
    - Fixed bug in change of cuts between runs.
  - electromagnetic/TestEm3
    - Modified HistoManager and Messenger in order to allow a multirun job.
    - Removed static ionC12. Use generic ion instead.
    - Avoid deletion of Analysisfactory (for JAIDA).
    - More histograms: longitudinal energy profile and forward energy flow.
    - Changed the numering of absorbers: start from 1 instead of 0.
    and modified all macros according to the above.
  - Define correctly all UI subdirectories.
  - New `StepMax` processes and messenger.
  - Updated macros tbhec and lhcb.
- electromagnetic/TestEm5
  - Print stopping power.
  - Showing example of use of `G4EmCalculator`.
  - Added dedx1.mac and dedx2.mac input macros.
  - Fixed a minor problem is energy deposit.
  - Fixed a problem in PhysicsList for hadrons.
  - Avoid deletion of Analysisfactory (for JAIDA).
  - Define correctly all UI subdirectories.
  - Added macros neutron.mac and hadron.mac.
  - Modified call to `G4EmCalculator`.
- electromagnetic/TestEm7
  - Reset histo and dose calculation by run.
  - Introduced `RunAction::FillHisto()` method.
  - Compute projected range of primary particle (new class TrackingAction).
  - Removed static ionC12. Use generic ion instead.
  - Optimised interfaces.
  - Added proton.mac, updated ionC12.mac and removed run01.mac.
  - Fixed minor problem in stepping action.
  - Define correctly all UI subdirectories.
  - Modifications in RunAction for histograms files.
- eventgenerator/exgps
  - New example showing the usage of `G4GeneralParticleSource` for generating primary incident particle according to user defined distributions. These range from simple monocromatic point source to complicated mutiple sources with various biasing schemes.
- field
  - Removed dependency on old PAI and XTR models in PhysicsList of field01/02/03 examples.
- gdml
  - Archived old example and setup. New example based on GDML-2.0.0 demonstrating the abilities of import/export of GDML descriptions.
- medical/GammaTherapy
  - New example of Gamma beam irradiation therapy on a water phantom.
- parallel
  - New version of marshaling/unmarshaling code for ParN02 and ParN04, generated from annotations using Marshalgen.
- radioactivedecay/exrdm
  - New example for showing the usage of the `G4RadioactiveDecay` process to simulate the decays of radioactive isotopes as well as the induced radioactivity resulted from nuclear interactions.
- runAndEvent/RE01
  - New example showing how to connect the information between primary particles and hits and utilize user-information classes.

- novice
  - N02
    - Removed trajectory printing from `ExN02EventAction`, now available with `/vis/scene/add/trajectories`, included in vis.mac.
    - DetectorConstruction: modified a comment for placements.
  - N03
    - visTutor/exN03Vis[5,10].mac : added commented examples on how to request the visualization of a particular volume.
    - visTutor/exN03Vis9.mac: added visualization with OGLIWin32 to verify visualization of geometry and trajectories.
    - DetectorConstruction: added commented vis attributes in order to verify interactive expansion/contraction geometry system of the OpenInventor driver.
    - gui.mac: gun pulldown menu.
  - N04
    - Use standard hadronic physics-lists with QGSP.
  - N05
    - Modified method name for `G4VParticleChange` in `ExN05SpecialCuts`.
    - Implemented migration to new `G4VParticleChange` interfaces.
  - N07
    - Modified to comply to new cut-per-region scheme.