# Category geomnav History

See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top).
It must **not** be used as a substitute for writing good git commit messages!

-------------------------------------------------------------------------------

## 2024-04-21 Gabriele Cosmo (geomnav-V11-01-09)
- Fixed compilation error in G4Navigator on Windows VC++ with
  C++20 Standard enabled.
  Based on [GitHub PR#69](https://github.com/Geant4/geant4/pull/69).

## 2023-11-17 Gabriele Cosmo (geomnav-V11-01-08)
- Fixed "/geometry/test/check_parallel" UI command in G4GeometryMessenger.

## 2023-11-06 Gabriele Cosmo (geomnav-V11-01-07)
- Fixed uninitialised data in G4SafetyCalculator.
  Addressing a reported Coverity defect.

## 2023-11-04 Gabriele Cosmo (geomnav-V11-01-06)
- Some code cleanup in G4Navigator and code formatting.

## 2023-10-30 John Apostolakis (geomnav-V11-01-05)
- Add new G4SafetyCalculator class, auxiliary to G4Navigator.
  Use this in G4Navigator in ComputeSafety() to avoid saving/restoring state.

## 2023-10-12 Guilherme Amadio (geomnav-V11-01-04)
- Add new G4VNavigation common navigation interface.
- Add RelocateWithinVolume method to G4VoxelNavigation
  and G4ParameterisedNavigation.
- Update existing navigators to make use of new common interface.

## 2023-09-04 Gabriele Cosmo (geomnav-V11-01-03)
- In G4Navigator, use G4TouchableHandle in place of G4TouchableHistoryHandle
  which is now deprecated. Same in G4MultiNavigator, G4DrawVoxels and
  G4VIntersectionLocator.

## 2023-08-31 Gabriele Cosmo (geomnav-V11-01-02)
- Removed references to unused classes G4GRSSolid and G4GRSVolume
  in G4Navigator.
- Removed use of forward declarations to G4VTouchable in phantom
  parameterisation classes.

## 2023-06-13 Gabriele Cosmo (geomnav-V11-01-01)
- Applied clang-tidy fixes (readability, modernization, performance, ...).

## 2023-01-31 John Apostolakis (geomnav-V11-01-00)
- G4PropagatorInField: Added parameters for big steps.
   New parameter 'MaxStepSizeMultiplier' - enables changing
     (eg needed to reduce costly unnecessary integration in QSS)
   New parameter 'MinBigDistance' used as minimum distance in 
     case of long steps.  Could be adapted to size of world.
   Default values also changed: 
           'LargestAcceptableDistance' = 100 * meter ( from 1000* meter )
           'MaxStepSizeMultiplier'     = 0.1         ( from 100 ).

## 2022-11-23 John Apostolakis (geomnav-V11-00-09)
- G4MultiLevelLocator: refresh candidate intersection point when needed.

## 2022-11-10 John Apostolakis (geomnav-V11-00-08)
- Improved diagnostic message in G4MultiLevelLocator - they missed to print
  the stored information on trial integration steps in one error case.
- G4MultiLevelLocator: small print formatting change.

## 2022-11-10 Gabriele Cosmo (geomnav-V11-00-07)
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.

## 2022-10-05 Gabriele Cosmo (geomnav-V11-00-06)
- Fixed compilation warnings on Intel-icx compiler for variables set
  but not used.

## 2022-05-10 Guilherme Amadio (geomnav-V11-00-05)
- G4Navigator: minor improvements to ComputeSafety(), ComputeStep()
  and LocateGlobalPointAndSetup().

## 2022-03-11 Pedro Arce (geomnav-V11-00-04)
- G4RegularNavigation: reset the zero step counter when a non-zero step was
  performed, to avoid aborted events. Corrected tabulation.
  Fixes as proposed in [GitHub PR #38](https://github.com/Geant4/geant4/pull/38)

## 2022-02-14 Sergio Losilla (geomnav-V11-00-03)
- /geometry/run/test also checks for overlaps in parallel worlds if
  /geometry/run/check_parallel is set to true.

## 2022-01-08 Gabriele Cosmo (geomnav-V11-00-02)
- G4VIntersectionLocator: Fixed compilation warning on Intel-icx compiler
  for unused data.

## 2022-01-05 Jonas Hahnfeld (geomnav-V11-00-01)
- G4TransportationManager: Add constant `kMassNavigatorId`.
- G4SafetyHelper: Use it.

## 2021-12-10 Ben Morgan (geomnav-V11-00-00)
- Change to new Markdown History format.

---

# History entries prior to 11.0

September 25, 2021 - P.Arce  (geomnav-V10-07-05)
----------------------------
- Reduce warning messages in GetReplicaNo: only when difference is > kCarTolerance 
- NoVoxel -> NoVoxels for coherence with rest of code

May  4, 2021 - J.Apostolakis  (geomnav-V10-07-04)
----------------------------
- G4Navigator: 
   * Added missing implementation of SetVoxelNavigation method (i.e. VecGeom Nav.)
   * deleted experimental method RecheckDistanceToCurrentBoundary (obsolete)
       ( Also removed in G4SafetyHelper and G4PathFinder. )
   * cleaned up ComputeSafety
- G4VoxelNavigation: 
   * simplify code of 'check' mode tests -- avoid 2nd code path.
       Prioritise reducing cost of 'non-checking' mode (avoid one if) 
       at marginal extra cost in check mode (extra call to DistanceToOut)
   * added comments about method arguments.
- G4NavigationLogger: soften check of step vs distance (using tolerance)

March 30, 2021 - B.Morgan      (geomnav-V10-07-03)
-------------------------
- Migrate sources.cmake to modular build API

March 8, 2021 - J.Apostolakis  (geomnav-V10-07-02)
-----------------------------
- G4Navigator: enable use of alternative G4VoxelNavigation class.
For development / prototyping of integration of VecGeom navigation.
Notes:
  * Adds call to virtual method in ComputeStep, LocateGlobalPointAndSetup
  in each voxelised volume.
  * Controled by #ifdef ALTERNATIVE_VOXEL_NAV  (now turned on
  in G4Navigator.hh)

January 27, 2021 - P.Arce (geomnav-V10-07-01)
---------------------------
- G4RegularNavigation: Addressing problem report #2314.
Added a #ifdef G4DEBUG_NAVIGATION to avoid excessive warnings
Substituted G4cout by G4Exception GeomRegNav1002 (renumbering of exceptions)

December 16, 2020 - G.Cosmo (geomnav-V10-07-00)
---------------------------
- G4ReplicaNavigation: reduced step correction in ComputeStep().
  Addressing problem report #2302.
- G4PathFinder: moved debug printout within debug block in Locate().

October 15, 2020 - G.Cosmo (geomnav-V10-06-08)
--------------------------
- G4ReplicaNavigation: relaxed condition for step correction in ComputeStep().

October 13, 2020 - E.Tcherniaev (geomnav-V10-06-07)
-------------------------------
- Added G4GeomTestVolume::TestOverlapInTree().

September 8, 2020 - G.Cosmo (geomnav-V10-06-06)
---------------------------
- Fixed Coverity defects in G4RegularNavigation for uninitialised data.

June 15, 2020 - G.Cosmo (geomnav-V10-06-05)
-----------------------
- Fixed Coverity defects in G4LocatorChangeRecord and some code cleanup.

June 8, 2020 - G.Cosmo (geomnav-V10-06-04)
----------------------
- Enabled "check-mode" for G4PropagatorInField and G4VIntersectionLocator.
  Enable use of whiteboard for logging/debugging in G4MultiLevelLocator, if
  "check-mode" in navigation is being activated through UI command.

May 28, 2020 - J.Apostolakis  (geomnav-V10-06-03)
----------------------------
- G4MultiLevelLocator: introduced whiteboard for logging/debugging in
  G4MultiLevelLocator, to help identify source(s) of recent issues seen
  in CMS and Belle2.
  Activating the following:
    * Record points ( e.g. A, B, H ) changes using G4LocatorChangeRecord
    * Report when a problem is encountered.
    * Improved reports of check of distance of endpoints <= the curve length.
      and of exception of interval start A being past end B during integration.
    * New separate name for return of intersection 'PointGi'.
  Improved PiF ClearPropagatorState.
- New classes G4LocatorChangeLogger and G4LocatorChangeRecord, implementing
  simple 'whiteboard' to store successive curve-point values (e.g. start(A)
  or end(B) ).
- G4PropagationInField: improved ClearPropagatorState() method.
  Clears values of additional data members.

March 24, 2020 - J.Apostolakis  (geomnav-V10-06-02)
------------------------------
- Reordered the data members of G4Navigator, to reduce size
  of G4Navigator object(s), as compromise between full compactification and
  keeping some related data members declarations close.
  Inspired by the effort of G.Amadio in this direction.

February 5, 2020 - P.Arce  (geomnav-V10-06-01)
-------------------------
- Addressing problem report #2196.
  Avoid looping infinitely by pushing N times with increasing step size.

December 10, 2019 - B.Morgan  (geomnav-V10-06-0)
----------------------------
- Cleanup CMake build, removing obsolete granular library options and
  explicit include_directories.

November 29, 2019 - J.Apostolakis  (geomnav-V10-05-19)
---------------------------------
- Added method to PropagatorInField to Get/Set new parameter that
  controls after how many integration substeps (in one physics step)
  the Increase of Chord Distance is trigerred.
  The new method
       SetIterationsToIncreaseChordDistance()
  provides control of 'increase' feature introduced in geomnav-V10-05-10.
  This control is necessary to allow the user to either
    - disable this change (setting to 0 or large value) or to
    - change the parameter's value, for earlier/later increase of delta chord.

  This parameter allows the temporary 'relaxation' of the constraint
  which ensure that each 'chords' is close enough to the section of the
  curved trajectory that it is approximating.

  ( See further explanation of feature & parameter in note for
    geomnav-V10-05-10. )

November 19, 2019 - G.Cosmo  (geomnav-V10-05-18)
---------------------------
- Fixed more cases of implicit type conversions.

November 15, 2019 - G.Cosmo  (geomnav-V10-05-17)
---------------------------
- Attempt to fix cases of implicit type conversions from size_t to G4int...

November 14, 2019 - J.Apostolakis  (geomnav-V10-05-16)
---------------------------------
- G4MultiLevelLocator: Avoid re-estimating endpoint if driver does not
     ReIntegrate when AccurateAdvance is called.
  Requires field-V10-05-17

November 5, 2019 - J.Apostolakis  (geomnav-V10-05-15)
--------------------------------
- G4TransportationManager: Enable worker threads to clone G4Navigator if needed.
  * Keep first Navigator created for a TM object. By convention that will be
    the Navigator object of the Master thread (or the only thread).
  * Other (worker) threads will clone first Navigator, if it has an external
    sub-navigator registered. This ensures that they clone the ability to
    navigate in 'external' volume description.
- G4VExternalNavigation: added new method for relocation within volume.
  G4Navigator will call it in LocateGlobalPointWithinVolume().

November 1, 2019 - P.Arce  (geomnav-V10-05-14)
--------------------------------
- G4PhantomParameterisation: Reverted precision checks to the code in
  geant4.10.02.p02 to address problem report.
  Fixes bug #2192

October 29, 2019 - J.Apostolakis  (geomnav-V10-05-13)
--------------------------------
- Fixed G4Navigator::CharacteriseDaughters:
  * Use only logical volume's CharacteriseDaughters.
    Do not check/use whether External Navigator is present.
- Added 'direction' back to External Navigation's Inside method.

October 28, 2019 - G.Cosmo (geomnav-V10-05-12)
--------------------------
- G4Navigator: define Clone() function to be used instead of copy-constructor
  (which is kept deleted) for use of explicit cloning.

October 25, 2019 - J.Apostolakis, G.Cosmo, V.Vlachoudis (geomnav-V10-05-11)
-------------------------------------------------------
- Added hooks for capability to navigate in 'external' geometry:
  * base class for external 'sub'-navigator;
  * new type of 'External' physical volume, to flag volumes for
    external sub-navigator;
  * an 'external' sub-navigator can be registered with G4Navigator;
  * revisions to G4Navigator to dispatch logical volumes with
    daughters which are of 'external' PV type to that object of
    type G4VExternalNavigation.
  Note: 'placement' and 'external' physical volumes cannot be currently mixed
        inside the same logical volume.
- New copy constructor of G4Navigator
  * needed to 'clone' navigator for G4VIntersectionLocator's 'helper',
    and potentially for worker threads.

August 23, 2019 - D.Sorokin (geomnav-V10-05-10)
---------------------------
- Try to relax delta chord condition to solve looping particle issue.

  Introduces temporary 'relaxation' (increase) of the value of delta-chord,
  to enable larger steps, after a threshold number of iterations (parameter).

  Delta chord ensures that the set of 'chords' approximate the curved trajectory
  adequately.  Each integration step is broken up into segments or substeps
  for which the sagitta is smaller than 'delta chord.'

  For some tracks this constraint can force a large number of short integration
  steps, and once the number of steps exceed the 'maximum' they are classed
  as looping tracks.  ( This can occur when the radius of curvature is just
  larger than  delta_chord and a particle is hardly interacting, e.g. if
  travelling in vacuum or is a muon in a large gas volume. )

  To address this, we increase the value of delta-chord temporarily,
  after the number of iterations substeps reach a multiple of this threshold.
  In particular the value of 'delta chord' is doubled when the iterations
  reach twice this threshold number, and it is doubled again every time the
  iteration count reaches every other multiple of this value.
  ( Note that delta chord is not changed when the iteration count reaches
  the threshold number, only its multiples. )

  The initial value of the parameter IterationsChordDistanceThreshold is 100.

  Note: delta-chord is reset to its original value at the end of
        each call to G4PropagatorInField's ComputeStep method.

August 22, 2019 - G.Cosmo (geomnav-V10-05-09)
-------------------------
- Use pre-increment wherever possible.

July 9, 2019 - G.Cosmo (geomnav-V10-05-08)
----------------------
- Enable UI command "/geometry/navigator/push_notify" which was not
  setup properly. Addressing problem report #2173.

July 8, 2019 - G.Cosmo (geomnav-V10-05-07)
----------------------
- Use constant iterator when possible in G4TransportationManager and
  G4PartialPhantomParameterisation.

July 4, 2019 - G.Cosmo (geomnav-V10-05-06)
----------------------
- Implemented c++11 revision: nullptr, auto, inline data initialisation,
  alias using statements.
- Made G4RegularNavigationHelper a G4ThreadLocalSingleton.
- Fixed builds with debug flags.
- Code formatting and cleanup.

July 2, 2019 - J.Apostolakis (geomnav-V10-05-05)
----------------------------
- G4Navigator: further fix to avoid creating ostringstream object.
  Now it is created for each step only when the G4DEBUG_NAVIGATION flag
  is set.
  ( To clarify: the warning was created in ostringstream object if
    G4VERBOSE was set, but only printed if  G4DEBUG_NAVIGATION was set.
    Now the latter flag is used for both creating and printing. )

  Created to address memory churn reported by memory profiling
  (Julia/Soon @FNAL).

June 19, 2019 - G.Cosmo (geomnav-V10-05-04)
-----------------------
- Fixed compilation warning for unused variable when G4VERBOSE is not set.

June 18, 2019 - J.Apostolakis (geomnav-V10-05-03)
-----------------------------
- Revised (recent) code for Exceptions to avoid creating ostringstream
  when it is not needed / used.
  Seen only in 'stuck tracks' that are trying to recover from more than
  10 zero steps in a row (fixes problem seen in one benchmark).

June 5, 2019 - J.Apostolakis (geomnav-V10-05-02)
----------------------------
- Improved information in Exceptions for particles stuck due to multiple
  zero steps in G4Navigator.

April 1, 2019 - G.Cosmo (geomnav-V10-05-01)
------------------------
- Protected report for looping particles under verbosity flag.

March 11, 2019 - G.Cosmo (geomnav-V10-05-00)
------------------------
- Fixed typos in printouts in G4NavigationLogger.

September 26, 2018 - D.Sorokin (geomnav-V10-04-12)
------------------------------
- Notify G4ChordFinder at the beginning of each ComputeStep() call.

June 15, 2018 - G.Cosmo (geomnav-V10-04-11)
-----------------------
- Fixed Coverity defect in diagnostic report in G4MultiLevelLocator.

June 13, 2018 - G.Cosmo (geomnav-V10-04-10, 09)
-----------------------
- Use G4Exception instead of streaming to cerr in various classes.

June 8, 2018 - J.Apostolakis (geomnav-V10-04-08, 07)
----------------------------
- G4PropagatorInField: fix for case of finishing integration in last iteration
  (so a looping particle will not be signalled incorrectly in that case.)
  Improved reporting of looping particle, adding info on density and
  fraction (%) of proposed step that was completed, and momentum (-08).

May 11, 2018 - E.Tcherniaev (geomnav-V10-04-06)
---------------------------
- G4Navigator::ComputeLocalAxis(): removed unnecessary check for IsRotated().

May 9, 2018 - E.Tcherniaev (geomnav-V10-04-05)
--------------------------
- Replaced use of Inverse() from G4AffineTransform with new dedicated
  methods, to avoid creation of temporaries in G4Navigator, G4RegularNavigation
  and G4ReplicaNavigation.

May 4, 2018 - J.Apostolakis (geomnav-V10-04-04)
---------------------------
- G4Navigator::GetLocalExitNormal(): fix for normal calculated at the endpoint
  of current step, on a 'candidate' next volume. Adds missing transformation to
  the frame of the current volume.
  Addresses problem report #2054.

April 17, 2018 - J.Apostolakis (geomnav-V10-04-02,03)
------------------------------
- G4Navigator::Set/RestoreSavedState(): fix for save/restore of ReplicaNumber
  (Thanks to Helmut Burkhardt).

April 11, 2018 - J.Apostolakis (geomnav-V10-04-01)
------------------------------
- G4PathFinder::DoNextLinearStep():
  * Use 'Relocated Point' flag to signal move from call to ReLocate, and
    ensure that new point is used in cross-checks in subsequent Locate.
  * Revert change of geomnav-V10-03-09, keeping fMinStep as 'logical'
    value, which can be kInfinity when step is not limited by Navigators
    (it was meant to cope with zero proposed step in RE03, however it
    caused problems in multiple cases when PathFinder was used).

- G4SafetyHelper:
  * Do not limit memorisation of safety in case of parallel
    geometries (when a length is not passed to safety method).
  * Fix to including full message in Exception.

February 26, 2018 - J.Apostolakis (geomnav-V10-04-00)
---------------------------------
- Fix for momentum value in G4PathFinder::SetChargeMomentumMass
  Was passing magnitude square, instead of magnitude.
  Corrects bug report 2037.
    Thanks to Renee Fatemi (Univ. of Kentucky, mu-to-e experim.)

November 23, 2017 - J.Apostolakis (geomnav-V10-03-09)
---------------------------------
- Fix in G4PathFinder to cope with zero proposed step.
  Correction ensures that the 'physical' length of a step is used
  in minimum, rather than 'logical' value (i.e. kInfinity).

November 2, 2017 - G.Cosmo (geomnav-V10-03-08)
--------------------------
- Correction to use G4 types in G4Navigator after previous tags...

November 2, 2017 - J.Apostolakis (geomnav-V10-03-07)
--------------------------------
- test/CMakeLists.txt: fixed to enable use with unit test infrastructure.

November 1, 2017 - J.Apostolakis (geomnav-V10-03-06)
--------------------------------
- G4Navigator - loosened check on normal vector, whether it is a unit
    vector.  Warn only if | norm - 1 | > 10^-3  ( not 10^-6 ).
    Improved clarity by using a constant to define it.

August 25, 2017 - J.Apostolakis (geomnav-V10-03-05)
-------------------------------
- G4PathFinder, G4PropagatorInField and all Locator classes (source files)
  G4PropagatorInField.icc ( GetCurrentEquationOfMotion method )
  *  Moved to using IntegrationDriver's direct method to Get Equation of motion
     ( for cleaner code and future proofing - introducing non-RK drivers.)
  * Used 'auto' for type of driver (to pave way for non-RK drivers.)

- G4Navigator:  use 'perThousand' in check for unity of normal vector
    ( issue was too noisy for no good reason otherwise. )

March 22, 2017 - G.Cosmo (geomnav-V10-03-04)
------------------------
- Avoid deletion of field-manager pointer in destructor of
  G4TransportationManager, as it is being deleted by G4FieldManagerStore.

March 21, 2017 - G.Cosmo (geomnav-V10-03-03, 02, 01)
------------------------
- Provide simple accessor GetInstanceIfExist() for G4PathFinder and
  G4TransportationManager singletons.

March 17, 2017 - G.Cosmo (geomnav-V10-03-00)
------------------------
- Correction in destructors of G4TransportationManager and G4PathFinder.

October 23, 2016 - G.Cosmo (geomnav-V10-02-21)
--------------------------
- Fixed recursion test in G4GeomTestVolume to iterate on all daughters.

October 19, 2016 - G.Cosmo (geomnav-V10-02-20)
--------------------------
- G4ReplicaNavigation: use Cartesian tolerance in distance evaluation
  in DistanceToOutPhi(). Addressing problem report #1902.
- G4Navigator: extended printout in ComputeStep() for stuck tracks, to
  show also local coordinates.
- Fixed shadowing compilation warnings in unit tests.

October 11, 2016 - G.Cosmo (geomnav-V10-02-19)
--------------------------
- Code formatting and fixed compilation error for left-over includes
  in G4PhantomParameterisation.

October 11, 2016 - P.Arce (geomnav-V10-02-18)
-------------------------
- G4PhantomParameterisation: revisiting precision checks.

October 7, 2016 - J.Apostolakis (geomnav-V10-02-17, 16)
-------------------------------
- Checked loops for terminationof infinite loops and annotated them with
  "Loop checking" comment.
  A number of files were not included, as they require complex multi-method
  analysis: G4ParameterisedNavigation, G4RegularNavigation, G4VoxelNavigation,
  G4VoxelSafety.

October 5, 2016 - G.Cosmo (geomnav-V10-02-15)
-------------------------
- G4Navigator: still force abortion of event if track gets really stuck,
  but avoid check for overlaps if push-verbosity is set to false.

October 5, 2016 - G.Cosmo (geomnav-V10-02-14)
-------------------------
- G4Navigator: allow to disable overlap checks and warnings in ComputeStep()
  by setting push-verbosity to false with SetPushVerbosity().
- G4PhantomParameterisation: correction in use of std::copysign()
  introduced in previous tag.

October 4, 2016 - P.Arce (geomnav-V10-02-13)
------------------------
- G4PhantomParameterisation: revisiting precision checks (some were
  unreasonably tight).

August 30, 2016 - G.Cosmo (geomnav-V10-02-12)
-------------------------
- G4Navigator: more diagnostics in G4VERBOSE mode in GetGlobalExitNormal().

August 25, 2016 - D.Sorokin (geomnav-V10-02-11)
---------------------------
- G4PropagatorInField: fix to pass accuracy values to Intersection Locator
   after re-evaluating epsilon (not before.)
   [ Dmitrii Sorokin was supported by Google during GSoC 2016. ]
   [ Recorded by J. Apostolakis ]

August 15, 2016 - G.Cosmo (geomnav-V10-02-10)
-------------------------
- G4Navigator: more diagnostics in G4VERBOSE mode in GetGlobalExitNormal().

July 8, 2016 - G.Cosmo (geomnav-V10-02-09)
----------------------
- Fix in G4Navigator::GetGlobalExitNormal() to synchronise caching of
  'fExitNormalGlobalFrame' before returning (thanks to P.Gumplinger for
  spotting this). Addressing problem report #1750.

May 18, 2016 - G.Cosmo (geomnav-V10-02-08)
----------------------
- Fixed compilation warning on gcc-6.1 in G4Navigator::PrintState().

May 3, 2016 - G.Cosmo (geomnav-V10-02-07)
---------------------
- Reinstated check on anomalous mother-step with corrective action, previously
  moved only in check-mode in G4VoxelNavigation and G4NormalNavigation.

April 15, 2016 - G.Cosmo (geomnav-V10-02-06, 05)
------------------------
- Avoid static constant definition of surface tolerance in G4VoxelNavigation
  in method LocateNextVoxel() to clear spurious warnings for data-race
  conflicts from Valgrind/DRD tool; defined as class data member.
- Cleared up use of static constants also in other navigation classes.

April 12, 2016 - G.Cosmo (geomnav-V10-02-04)
------------------------
- Improved diagnostic in G4Navigator. Moved some debug checks in "check-mode".
- Minor code cleanup.

February 1, 2016 - G.Cosmo (geomnav-V10-02-03, 02)
--------------------------
- Relax condition for zero or almost-zero steps in G4ReplicaNavigation and
  G4Navigator, to allow for faster progression in case of stuck tracks in
  3D scoring meshes. Addressed old problem report #1432.

January 29, 2016 - G.Cosmo (geomnav-V10-02-01)
--------------------------
- Fix in G4ReplicaNavigation::ComputeStep() for correct setting of copyNo
  for particle entering. Fixes issue of negative copyNo observed in nested
  replica setups. Addressing problem report #1634.

January 11, 2016 - G.Cosmo (geomnav-V10-02-00)
--------------------------
- Move check for overlaps in G4Navigator::ComputeStep() within G4VERBOSE.
  Addressing problem report #1811.

November 13, 2015 - G.Cosmo (geomnav-V10-01-35)
---------------------------
- Code cleanup in G4MultiLevelLocator and G4PropagatorInField.

October 30, 2015 - J.Apostolakis (geomnav-V10-01-34)
--------------------------------
- G4MultiLevelLocator::EstimateIntersectionPoint():
  * Replaced fatal error for exceeding max steps with warning.
    In addition it returns immediately, giving the current progress as the
    'Recalculated End Point'. This signals 'looping' - ie too many steps.
- G4PropagatorInField detects this condition, and identifies it as a 'Looping
  Particle' which is then flagged.
  The calling class (Transportation, PathFinder) is expected to stop the
  tracking of this particle after this step (or potentially after a few of
  these steps.)
  Note: Current way to identify looping (in PropagatorInField) is:
        - if flag recalculated is set and the proposed end-point is short,
          i.e. if it not as far along the curve as the original proposed
          end-point (the one sent to the Locator).
  TODO: Consider revising the interface of EstimateIntersectionPoint to add an
        'unfinished' output value - to make this condition clearer.
- Addresses issues seen by ALICE in trial productions.

October 23, 2015 - G.Cosmo (geomnav-V10-01-33)
--------------------------
- Fixed Coverity defect in G4VIntersectionLocator. Some minor code cleanup...

October 14, 2015 - J.Apostolakis (geomnav-V10-01-32)
--------------------------------
- G4MultiLevelLocator::EstimateIntersectionPoint():
  * Ensure that splitting of step (new level / depth) advances the required
    length by calling ChordFinder's AdvanceChordLimited method
      ( instead of method AccurateAdvance of Driver.)
       Used when adding a new level / depth.
   Addresses issue seen by ALICE (non-finishing of step due to poor advances).
- Added method in G4VIntersectionLocator to report Immediate Hit
    - ie if the intersection point is within tolerance of the start point
- G4NavigationLogger: Added method to report issue with normal that
    is the result of applying a rotation (which prints the matrix.)
- G4NormalNavigation, G4VoxelNavigation: Added check of rotated exit normal

October 11, 2015 - G.Cosmo (geomnav-V10-01-30, 31)
-------------------------
- Fix in G4MultiLevelLocator::EstimateIntersectionPoint(): revised condition
  of 'while' loop which ensures that a new candidate intersection exists.
  Corrected the resetting of 'first_section' flag: when the linear search is
  progressing well, several (>1) iterations of the outer loop can be part of
  the initial sections (i.e. before any bi-section = depth increase).
  (J.Apostolakis)
- Removed more debug printouts and conditions.
- Fixed compilation warning in G4MultiLevelLocator. (tag -31)

September 5, 2015 - G.Cosmo (geomnav-V10-01-29)
---------------------------
- Removed left-over debug statement introduced in tag "geomnav-V10-01-26";
  fixing compilation warning on clang compiler.

September 4, 2015 - G.Cosmo (geomnav-V10-01-28)
---------------------------
- Removed 'tracing' mode in G4MultiLevelLocator.
- Some code cleanup.

September 2, 2015 - J.Apostolakis (geomnav-V10-01-27, 26)
---------------------------------
- G4MultiLevelLocator::EstimateIntersectionPoint():
  * Fix for logic error in keeping consistent candidate intersection.
    Copes with case that a candidate intersection is not found in the next
    segment (typically in the 'second half' part).
    Correction was to examine additional segments until a chord is found that
    intersects (changing 'if' to 'while') or all were exhausted (then no
    intersection exists).
  * Includes new flags and consistency check - in an assert.
  * Added a 'tracing' mode, to report each call, and the path taken.
    Off by default. Likely to be suppressed in a future tag.
- G4VIntersectionLoator: new methods & revised interfaces.
  Added new auxiliary methods: ReportReversedPoints(), ReportProgress() and
  CheckAndReEstimateEndpoint().
  Revised arguments of methods:
  * ReEstimateEndpoint(): Ignore & recalculate redundant parameters.
  * Made printStatus( with stream ) static, and added verbose argument.
  * Changed ostringstream argument to ostream in PrintStatus (more flexible
    as it can now be used directly with std::cout).

August 4, 2015 - G.Cosmo (geomnav-V10-01-25)
------------------------
- Withdrawn changes to G4GlobalFieldMessenger.cc introduced in the previous tag.
- G4VIntersectionLocator: properly initialise 'fCheckMode'; fixing Coverity
  defect.

June 9, 2015 - J.Apostolakis (geomnav-V10-01-24)
----------------------------
- G4GlobalFieldMessenger: Revised SetField() method to switch order of call
  to 'CreateChordFinder()' before calling G4FieldManager::SetDetectorField().
  Changed in order to co-work with fix of G4FieldManager::SetDetectorField().
  Requires and co-works with  field-V10-01-05

May 10, 2015 - J.Apostolakis (geomnav-V10-01-23)
----------------------------
- G4NavigationLogger: Changes, refinements for ReportOutsideMotherVolume()
  * Delegate printing details to new method 'ReportVolumeAndIntersection'.
  * Print additional diagnostic information (to help with ATLAS issue.)
  * New properties:
     * fMinTriggerDistance: a larger error is fatal (def. DBL_MAX)
     * fReportSoftWarnings: is set, report if small safety (abs<tolerance)
                            is not rounded to zero.

June 3, 2015 - G.Cosmo (geomnav-V10-01-22)
----------------------
- Minor printout fix in G4NavigationLogger::ReportOutsideMother().

May 29, 2015 - G.Cosmo (geomnav-V10-01-21)
----------------------
- Fixed compilation errors when compiling with G4DEBUG_FIELD turned on.
  Addressing problem report #1748.

May 11, 2015 - G.Cosmo (geomnav-V10-01-20)
----------------------
- Minor fixes and code cleanup/simplification.

May 10, 2015 - J.Apostolakis (geomnav-V10-01-19)
----------------------------
- Navigation Helper classes (Normal, Voxel, Parameterised)
  * Use return value of motherSolid DistanceToOut(p,v), each time
    that it is called.  Correct 'invalid' to zero:
      If it is  kInfinity, reset value to zero!
      If it is  negative,  reset value to zero!
  * Small cleanup - always use variables 'mother'ExitNormal.
    'mother'ValidExitNormal.  Enables small simplification.
  * Do not return motherExitNormal (valid=false), if outside mother.

May 8, 2015 - G.Cosmo (geomnav-V10-01-18)
---------------------
- Fixed spurious compilation warnings.

May 7, 2015 - G.Cosmo (geomnav-V10-01-17)
---------------------
- Protect all changes for extra checks made by navigators in ComputeStep()
  introduced in the previous tags within 'check_mode' and G4VERBOSE, to
  allow restoring original run-time performance penalised by more 8-10%.
- Utilised changes from tag "geomnav-V10-01-16", in a private branch.
- Code cleanup and various minor fixes.

May 3, 2015 - J.Apostolakis (geomnav-V10-01-14 and -15)
---------------------------
- ComputeStep() methods of Normal/Voxel/Parameterised Navigation:
  Protect stepping for case of being outside mother volume.
  Always evaluate mother's DistanceToOut(p,v), in order to check whether
  answer indicates invalid position (i.e. outside mother solid).
  Created to address issue of tracking in ATLAS - (JIRA issue ATLAS-SIM 1815
  and SIM-433, ie https://sft.its.cern.ch/jira/browse/SIM-433 )

  Detailed description:
  ComputeStep() methods of the 'Navigation' helper methods changed to always
  evaluate the mother DistanceToOut(p,v), in order to check whether the answer
  is
      * valid, indicating that the point is inside / on surface), or
      * invalid, indicating the point is outside (when the value is either
        negative or equal to kInfinity).
  Addresses / protects Navigation from the case that a point escapes a volume,
  and never again encounters the volume boundary.

  Note: DistanceToOut(p,v,...) in some solids is able to return a value that
        indicates that it has been called from Outside the solid (contrary to
        its expectation / contract.)
        But not all solids provide this diagnostic (it would be a very
        invaluable improvement in the specification / implementation, and
        likely simple to add and cheap to evaluate.)

  Enabled ComputeStep() to recognise this response (invalid point - i.e.
  outside mother). Before it was not recognised, but used instead as a numeric
  value (kInfinity). In case it was kInfinity, this meant the volume could not
  be chosen, and the track never exited the volume!

  This invalid response now triggers an immediate exit from the volume
  daughters do not need to be considered.

  'Behaviour' change: this modification changes the logic in ComputeStep(),
  and always calls the mother solid's DistanceToOut() method.
  (before it was called only if the currentStep was larger than the mother
  Solid's safety. )

  Expected performance impact:
  The (mandatory) call to DistanceToOut(p,v) in ComputeStep is extra work,
  as it was optional before.
  Expect an overhead, proportional to the cost of the 'average' DistanceToOut()
  method (in the geometry model).
  The worst cases are expected to be geometries with one or more large
  complex volumes (e.g. Polycone.) which is either
  - a leaf node (with above-average density material), or
  - which has a large number of volumes placed directly inside it.

  Potential alternative approach:
  An invalid point must be recognised using some method of a solid.
  There are three possibilities:
  - the inside method is called for the mother volume at the start
    of every step. This would be a new additional call;
  - the safety method "DistanceToOut(p)" is used to recognise this condition.
    This could be done if it returns a negative value for positions outside
    the solid. This call already occurs, but would become more expensive;
  - the intersection distance "DistanceToOut(p,v,..) is used, and must be
    called at every step.   This is the choice that has now been made.
    It is possible to consider the alternative choices, to evaluate their
    computational cost, and the effort to review/improve the implementations.

  The most realistic alternative is a) to rely on the Safety method(s) to
  respond zero if the point is on the 'wrong' side of the volume boundary,
  and b) to call DistanceToOut(p,v) only if (step < mother Safety).

May 02, 2015 - J.Apostolakis (geomnav-V10-01-13)
----------------------------
- Withdraw change in "geomnav-V10-01-06":
- Correction for roundoff issue in G4PropagatorInField

April 30, 2015 - J.Apostolakis (geomnav-V10-01-07,-08,-10) -12 fixed
------------------------------
- NavigationLogger:
  * Added method  for Reporting A Point is Outside the Mother volume.
  * Added methods CheckAndReportBadNormal, CheckDaughterEntryPoint
- G4AuxiliaryNavigationServices:
  * Optimisation: Reuse dot product, rather than recomputing
  * Added optional printout (protected by debug flag)
  * Replaced the fake 'TestOne' non-inline method, with utility method
    ReportTolerances.
- G4VIntersectionLocator
  * New PrintStatus method with additional ostringstream argument.
- G4NormalNavigation:
  * Moved Set/Get Verbose Level methods to source file (reduces dependency
    on logger)
- G4PathFinder:
  * Reformatted warning/error message.
    (Consolidation, include changes commited February 19, 2015, but not
    tagged).

April 30, 2015 - J.Apostolakis (geomnav-V10-01-06)
------------------------------
( Separate tag for the following fix committed on February 19, 2015 )
- PropagatorInField:
  * Fix for roundoff error in return value of ComputeStep, which reduces
    apparent step, and leads to confusing SteppingManager.
    ( In case no intersection is found, return the attempted step, not the
      taken-step. )
  * Added optional 'trace' verbosity in IntersectChord method which
      reports arguments and results of each call.
    Note: this is protected with DEBUG_PROPAGATION flag.

 [ Note: This tag was made on branch geomnav-V10-01-06-branch, in order to
         modify this History file without overwriting the History file for
         geomnave-V10-01-07, which was created earlier. ]

January  28, 2015 - J.Apostolakis (geomnav-V10-01-05)
---------------------------------
- G4PropagatorInField: Added new methods to report looping and stuck tracks.
  Cleanup.
- G4PathFinder: Fix to two calls to ComputeSafety - second argument is length,
  not bool.

January  27, 2015 - J.Apostolakis (geomnav-V10-01-04)
---------------------------------
- G4PropagatorInField: Fix for issue found in microbeam. Reinstate old code
  that worked.
  G4PropagatorInField ComputeStep: Widthraw adjustment of 'step taken'
  in case it was just less than requested step (within tolerance.)
  This change caused a step to appear to be fully taken, rather than
  stopping at the boundary just smaller the proposed step (from the physics).
  As a consequence the trasnportation was not the chosen process, and
  other processes (multiple scattering) did not update parameters correctly.

January  15, 2015 - J.Apostolakis (geomnav-V10-01-03)
---------------------------------
- G4PathFinder: Pass to equation of motion relevant properties of current
    particle: latest charge state (electric, magnetic dipole moment),
    PDG spin value, momentum and rest mass of current particle
    Part of corrections needed for Bugzilla issue 1696.

- Increased maximum number of Navigators from 8 to 16.

December 15, 2014 - J.Apostolakis (geomnav-V10-01-02)
---------------------------------
- Improvements to enable identification of first and last step in a volume, when
    tracking in a field. (Bugzilla issue 1032).
  Revised G4PropagatorInField, adding new method PrepareNewTrack() and data members.
  G4PropagatorInField ComputeStep: Adjust 'step taken' in case it was just less
     than requested/proposed (within tolerance) - in case accumulated numerical
     error might cause problem. [ Experimental - withdrawn in geomnav-V10-01-04.]
  Note: Co-works with and is required tags in processes/transportation and track.

December 15, 2014 - J.Apostolakis (geomnav-V10-01-01)
---------------------------------
- G4ErrorPropagationNavigator: revise implementation of ComputeStep, to
  avoid calling G4Navigator::ComputeSafety (which has side effects.)
  Addresses problem report #1679.

December 8, 2014 - G.Cosmo (geomnav-V10-01-00)
--------------------------
- Removed unused leftover header file G4GeomTestVolPoint.hh.

November 27, 2014 - G.Cosmo (geomnav-V10-00-19)
---------------------------
- Added protection in G4ReplicaNavigation::DistanceToOutRad() for potential
  rare cases of negative value to sqrt() in equation calculation for rmin/rmax
  intersection.
- Improved warning printout in G4Navigator::GetGlobalExitNormal().

November 20, 2014 - J.Apostolakis (geomnav-V10-00-18, 17)
---------------------------------
- G4ErrorPropagationNavigator: fix to make normal a unit vector,
  and fix for Coverity issue, to protect against null 'target'.
  Addressing problem report #1679.

November 19, 2014 - G.Cosmo (geomnav-V10-00-16)
---------------------------
- Some code cleanup in G4Navigator source.

November 18, 2014 - J.Apostolakis (geomnav-V10-00-15)
---------------------------------
- G4ErrorPropagationNavigator: added GetGlobalExitNormal() method to
  correspond to update of G4Navigator interface in Geant4 9.5.
  Addresses problem report #1679.
- G4Navigator: small fix to calculation of stored step endpoint, for steps
  that do not hit a boundary.
- Fixed GNUmakefile in test.

November 14, 2014 - J.Apostolakis (geomnav-V10-00-13,14)
---------------------------------
- G4Navigator: Corrections for Exit Normal.

October 20, 2014 - G.Cosmo (geomnav-V10-00-12)
--------------------------
- Leave out changes in G4FieldPropagation.cc laying on the trunk...

October 18, 2014 - A.Dotti (geomnav-V10-00-11)
------------------------
- Code cleanup: removed unnecessary G4ThreadLocal in G4ReplicaNavigation.

August 25, 2014 - G.Cosmo  (geomnav-V10-00-10)
-------------------------
- Minor code cleanup.

August 22, 2014 - M.Asai  (geomnav-V10-00-08 and geomnav-V10-00-09)
------------------------
- G4TransportationManager: Add ClearParallelWorlds() method. This method is
  invoked by G4RunManager when user destroys all the geometry and rebuild
  from scratch.

June  24, 2014 - G.Folger  (geomnav-V10-00-07)
-------------------------
- G4MultiNavigator: set 'fIdNavLimiting' index to navigator limiting the step,
  if only one navigator limited the step. Fixes crash in RE05 on Windows.
  Likely addressing problem report #1634.

May   27, 2014 - J.Apostolakis  (geomnav-V10-00-06)
------------------------------
- G4Navigator: corrected saving/restoring of 'navigator state':
  * Added bool sWasLimitedByGeometry to G4SaveNavigatorState struct
     ( fixes side effect of call to ComputeSafety. )
  * Corrected RestoreState() to reset the Safety Origin and Value
  * ComputeSafety: If at endpoint of step, answer safety=0.0 quickly.
       Do not save/restore state.
- G4PropagatorInField:
  * Added new method GetCurrentEquationOfMotion()

May   16, 2014 - J.Apostolakis  (geomnav-V10-00-05)
------------------------------
- Fixed G4PathFinder::RecheckDistanceToCurrentBoundary():
  A compilation error identified error: return value from Navigator
  was not used to accumulate method return value.

May   16, 2014 - J.Apostolakis  (geomnav-V10-00-04)
------------------------------
- Improved G4Navigator::RecheckDistanceToCurrentBoundary
  * Extended it to check a daughter volume, in case the previous step ended at
    its boundary.  In case the proposed point is inside that daughter, it
    tries to identify a distance to backtrack (=> returns a negative value. )
  * Added check that ComputeStep() that was called last, not a Locate method.
      -currently optional - it fails due to call to Locate in ComputeSafety.

May    7, 2014 - J.Apostolakis  (geomnav-V10-00-03) - (internal)
------------------------------
- Created  G4Navigator::RecheckDistanceToCurrentBoundary
  * First version of a new method RecheckDistanceToCurrentBoundary
   in G4SafetyHelper, G4Navigator and G4PathFinder
  * The method checks
       a proposed displacement (new Position) to see if it is in mother;
       a proposed new direction to find potential backtrack to return to
          mother volume, or distance to new exit.
  Requested by EM team (Vladimir Iv.) for use by MultipleScattering.

April 10, 2014 - G.Cosmo  (geomnav-V10-00-02)
------------------------
- Get rid of deprecated 'register' storage class specifier in source files.

March 14, 2014 - J.Apostolakis  (geomnav-V10-00-01)
------------------------------
- G4PathFinder: Added method for end of track - needed to signal
   G4 Transportation Manager to use 'ordinary' Navigator.
- Revised G4Navigator::SetupHierarchy, to reduce extra cost due to
   handling the case of Nested Parameterisation.
- PropagatorInField: When setting up a new Intersection Locator
   pass pointer to current Navigator.

December 11th, 2013 - G.Cosmo  (geomnav-V10-00-00)
-----------------------------
- Fixed implementation of G4TransportationManager::SetNavigatorForTracking()
  to initialise active navigator and propagator-in-field with the new
  provided instance. Addressing problem report #1537.
- Minor code cleanup in G4GlobalMagFieldMessenger.

November 22nd, 2013 - I.Hrivnacova  (geomnav-V09-06-19)
----------------------------------
- Fixed compiler warning intruduced with previous update.

November 22nd, 2013 - I.Hrivnacova  (geomnav-V09-06-18)
----------------------------------
- Removed checks for existence of G4TransportationManager
  from G4GlobalMagFieldMessenger as they do not work as expected.

September 9th, 2013 - G.Cosmo  (geomnav-V09-06-17)
-----------------------------
- Relaxed condition for reported move in G4PathFinder::Locate() to exclude
  reports for intentional pushes.

September 3rd, 2013 - I.Hrivnacova  (geomnav-V09-06-16)
----------------------------------
- Added new messenger class G4GlobalMagFieldMessenger defining UI commands
  for creating/deleting the global uniform magnetic field and
  activating/inactivating it according to the set field value.

August 27th, 2013 - G.Cosmo  (geomnav-V09-06-15)
---------------------------
- Added G4Ellipsoid among solids enabled for parameterisation in
  G4PhantomParameterisation.

August 22nd, 2013 - G.Cosmo  (geomnav-V09-06-14)
---------------------------
- Added ability to set maximum number of errors to report for overlaps
  from a volume in G4GeometryMessenger.
  Added new UI command "/geometry/test/maximum_errors [int]" to fix the
  threshold. By default, for each volume, reports stop after the first
  error reported.

August 21st, 2013 - G.Cosmo  (geomnav-V09-06-13)
---------------------------
- Rationalised implementation of VolumeType() and CharacteriseDaughters()
  in G4Navigator, to use implementation now provided in G4VPhysicalVolume
  and G4LogicalVolume respectively.

July 15th, 2013 - J.Apostolakis  (geomnav-V09-06-12)
-------------------------------
- G4SafetyHelper: fixed compilation warning; take out unused variable
  and cleanup.

July 12th, 2013 - J.Apostolakis  (geomnav-V09-06-11)
-------------------------------
- G4SafetyHelper: protection against storing 'fake' safety, in case
  'maxLength' is used ( not DBL_MAX ).

June 4th, 2013 - J.Apostolakis  (geomnav-V09-06-10)
------------------------------
- G4MultiNavigator: fixed use of enum as Boolean in GetGlobalExitNormal().
  Issue identified by Coverity.

Jun 3rd, 2013 - G.Cosmo (geomnav-V09-06-09)
-----------------------
- Corrected deletion of commands in destructor and removed unused pointer.
- Made copy-ctor and assignment operator private in G4Navigator, as not
  supposed to be copied or cloned.

May 23rd, 2013 - G.Cosmo (geomnav-V09-06-08)
------------------------
- Archived GeomTest* classes for overlaps checking through grid/cylinder
  lines. UI commands are replaced with calls to built-in overlaps checking
  based on random points located in surface. Defined commands are:
    /geometry/test/tolerance [double] [unit]
       -- to define tolerance by which overlaps should not be reported.
          Default is '0'.
    /geometry/test/verbosity [bool]
       -- to set verbosity mode. Default is 'true'.
    /geometry/test/resolution [int]
       -- to establish the number of points on surface to be generated
          and checked for each volume. Default is '10000'.
    /geometry/test/recursion_start [int]
       -- to set the starting depth level in the volumes tree from where
          checking overlaps. Default is level '0'.
    /geometry/test/recursion_depth [int]
       -- to set the total depth in the volume tree for checking overlaps.
          Default is '-1', which means checking the whole tree.
    /geometry/test/run
       -- to start the overlaps checking recursively through the volumes tree.

May 7th, 2013 - P.Gumplinger (geomnav-V09-06-07, geomnav-V09-06-06)
----------------------------
- G4PropagatorInField: deleted SetChargeMomentumMass method.

May 7th, 2013 - J.Apostolakis  (geomnav-V09-06-05)
------------------------------
- G4Navigator: Added new helper object G4VoxelSafety.
    A helper object is owned by a Navigator instance.
    To avoid including header it is stored as pointer.
    Resolves issue with Multi-threading (thanks to Andrea Dotti
         for identifying and reporting the issue.)

Apr 17th, 2013 - G.Cosmo (geomnav-V09-06-04)
------------------------
- Minor code cleanup.

Apr 16th, 2013 - J.Apostolakis  (geomnav-V09-06-03)
------------------------------
- G4Navigator: made new safety (from G4VoxelSafety) the default.

Apr 16th, 2013 - J.Apostolakis  (geomnav-V09-06-02)
------------------------------
- G4VoxelSafety: corrected calculation of edges of voxels.
  Identified when point's coordinate is beyond the range of voxels.

Mar 19th, 2013 - G.Cosmo  (geomnav-V09-06-01)
------------------------
- Cleanup of MT changes in G4PathFinder, G4RegularNavigationHelper
  and G4TransportationManager.

Dec 10th, 2012 - G.Cosmo  (geomnav-V09-06-00)
------------------------
- Cleared left-over debug check in G4VoxelNavigation.
  Addressing problem report #1406.

Nov 20th, 2012 - G.Cosmo  (geomnav-V09-05-45)
------------------------
- Corrected G4Exceptions tags and text.

Nov 15th, 2012 - G.Cosmo  (geomnav-V09-05-44)
------------------------
- Code cleanup.

Nov  6th, 2012 - J.Apostolakis  (geomnav-V09-05-43)
------------------------------
- G4SafetyHelper: fixed ComputeSafety(), to adapt it to use ComputeSafety()
  with extra argument. It was passing a boolean for this argument.
  That was correct until the additional argument was added.

Nov  6th, 2012 - J.Apostolakis  (geomnav-V09-05-42)
------------------------------
- G4Navigator::ComputeSafety(): made the 'old' safety default (the one
  provided by G4VoxelNavigation.
- G4VoxelSafety: in ComputeSafety(), provide the mother safety in the call
  to SafetyForVoxelHeader() as initial value; optimisation, to reduce number
  of voxels searched.
  In SafetyForVoxelHeader(), if point is outside boundaries of voxel 'Min' or
  'Max' coordinates, then corresponding 'distance' will be negative.
  Must never consider this direction to move: Reset that distance to DBL_MAX.
  Cosmetic changes in SafetyForVoxelHeader(): added explanation: why must
  'pointNodeNo' be normalised; revised asserts, corrected comments and removed
  old ones; added 'depth' to some diagnostic printouts.

Nov 9th, 2012 - G.Cosmo  (geomnav-V09-05-41)
-----------------------
- G4RegularNavigationHelper: added newline at the end of file to avoid
  compilation warnings on clang.

Nov 9th, 2012 - G.Folger  (geomnav-V09-05-40)
------------------------
- G4RegularNavigationHelper: transform it to real singleton from static
  utility class, created upon first use; make vector of 'Steplengths' a data
  member.
- Adapted G4RegularNavigation to use G4RegularNavigationHelper singleton calls.
- Co-works with procscore-V09-05-05, which requires it.

Nov  6th, 2012 - J.Apostolakis  (geomnav-V09-05-39)
------------------------------
- Fix for compiler warning from gcc 4.7.

Nov  6th, 2012 - J.Apostolakis  (geomnav-V09-05-38)
------------------------------
- G4VoxelSafety::SafetyForVoxelNode(): corrected calculation of 'pointNodeNo'
  to ensure it corresponds to a physical node ( range: 0 to Max-1 ).
  Reason: it is possible for the Min and Max of a voxel NOT to contain the
  current location along an axis (at lower levels only, not top level).
  Interface change: added const pointer to Physical volume (for printing).

Nov  5th, 2012 - J.Apostolakis  (geomnav-V09-05-37)
------------------------------
- G4VoxelSafety::SafetyForVoxelHeader(): use 'minSafety' and 'maxLength' to
  prune search tree for optimisation. Pass along 'minSafety' to lower levels.
  Also keep safety at this level and below (NOT above) as 'ourSafety'
  Return 'ourSafety', not updated value of 'minSafety'.
  Arguments: use *squared* distance-to-upper-depth, and add previous
  minimum safety.
  Revised calculation of square distance-to-upper-depth, adding square of
  current level distance (previously, using maximum of previous and current
  level, to avoid square root).
  Printing only under the flag 'G4DEBUG_NAVIGATION', not G4VERBOSE.

Nov  1st, 2012 - J.Apostolakis  (geomnav-V09-05-36)
------------------------------
- G4VoxelSafety: hidden verbose output under G4DEBUG_NAVIGATION.

Nov  1st, 2012 - J.Apostolakis  (geomnav-V09-05-35)
------------------------------
- G4VoxelSafety: do not check whether 'input' safety position is inside volume
  except if G4DEBUG_NAVIGATION is set.

Nov  1st, 2012 - J.Apostolakis  (geomnav-V09-05-34)
------------------------------
- G4VoxelSafety: revised end condition to use distance of previous depths
  sqr(distAxis) + sqr(distUpperDepth) < sqr(minSafety).
  Streamlined printing, and move it behind G4DEBUG_NAVIGATION.
  Added count of nodes checked.
- G4Navigator: fix for compilation warning. Small change in printing.
  Streamlined use of (new) G4VoxelSafety. Check its results only if
  G4DEBUG_NAVIGATION is set.
  NOTE: continues to use *new* safety (best safety).

Nov  1st, 2012 - G.Cosmo        (geomnav-V09-05-33)
------------------------
- G4ReplicaNavigation: fixed compilation warning and some code cleanup...

Nov  1st, 2012 - J.Apostolakis  (geomnav-V09-05-32)
------------------------------
- G4Navigator: changed to use *new* safety (best safety), as a trial.
  Added information for problem of 'not calculated' normal in
  GetGlobalExitNormal().
  Revised operator << to print all state (adapted from PrintState()),
  not just history. Hidden unused code in GetLocalExitNormalAndCheck().

Oct 31st, 2012 - J.Apostolakis  (geomnav-V09-05-31)
------------------------------
- G4VoxelSafety: improved reporting of potential issues, e.g. (nodeNo==0).
- G4VoxelNavigation: added a simple check whether point in ComputeSafety()
  call is inside current volume.

Oct 30th, 2012 - J.Apostolakis  (geomnav-V09-05-30)
------------------------------
- G4VoxelSafety: use distance to reduce search length.

Oct 30th, 2012 - J.Apostolakis  (geomnav-V09-05-29)
------------------------------
- G4VoxelSafety: find distance to voxel boundary at current level.
  Decide next node using distance.

Oct 30th, 2012 - J.Apostolakis  (geomnav-V09-05-28)
------------------------------
- G4VoxelSafety: fixed logic to find next voxel up and down.

Oct 29th, 2012 - J.Apostolakis  (geomnav-V09-05-27)
------------------------------
- G4ReplicaNavigation: get additional information in case of 'Out-of-Volume'
  exception. Hide debug printout with (fVerbose>2).
- G4SafetyHelper: introduced check of length for relocation method
  LocateGlobalPointWithinVolume() to check move against safety.
  Works if Verbose Level > 0.
- G4VoxelSafety: eliminated debug printouts (hidden in 'if fVerbose > 2').
  Reset 'fCheckMode' in constructor.

Oct 29th, 2012 - J.Apostolakis  (geomnav-V09-05-26)
------------------------------
- G4ReplicaNavigation: fix for compilation issues (shadowing/unused variables).

Oct 26th, 2012 - J.Apostolakis  (geomnav-V09-05-25)
------------------------------
- Fix for G4ReplicaNavigation: set 'calculatedExitNormal' flag correctly.

Oct 26th, 2012 - J.Apostolakis  (geomnav-V09-05-24)
------------------------------
- Revised G4Navigator to use G4VoxelSafety and to check its results
  against those of G4NormalNavigation::ComputeSafety().
  NOTE: *SLOW* - Calculates safety 3 times for voxel volumes
        for checking only, not for production!
- G4VoxelSafety: improved to use equivalent nodes (still checks all voxels).
  Changed arguments and members to make G4SmartVoxelHeader into const.
- G4ReplicaNavigation: small cleanup, mostly cosmetic.

Oct 23rd, 2012 - J.Apostolakis  (geomnav-V09-05-23)
------------------------------
- G4ReplicaNavigation: fixed compiler warning on use of 'perMillion'.

Oct 23rd, 2012 - J.Apostolakis  (geomnav-V09-05-22)
------------------------------
- Incorporated fixes made for tag "geomnav-V09-05-18" (in Fix-line).
- G4Navigator::GetGlobalExitNormal(): corrected use of cached global normal
  value; use it only when ComputeStep() was last called.
- G4Navigator, G4MultiNavigator and G4ErrorPropagationNavigator: changed
  default of 3rd argument of ComputeSafety to true.
- G4Navigator: changed GetSavedState() and RestoreSavedState() methods to
  protected (from public). Extended the state saved by these methods.
- G4ErrorPropagationNavigator: cosmetic change to improve readability of
  initialisation of a double.

Oct 15th, 2012 - J.Apostolakis  (geomnav-V09-05-21)
------------------------------
- G4PropagatorInField & G4VIntersectionLocator: changed first two arguments
  of IntersectChord() to const 3-vec references.
- G4VIntersectionLocator: fixed return value of validNormal of
  GetSurfaceNormal(). Made const the first argument of GetLastSurface() normal.
- G4ErrorPropagationNavigator: revised interface of ComputeSafety(), making
  'true' default value of the 3rd argument.
  Cosmetic change to improve readability of initialisation of a double.
- G4ReplicaNavigation: small revision to printout, to improve end-of-line.

Oct 15th, 2012 - J.Apostolakis  (geomnav-V09-05-20)
------------------------------
- G4Navigator: enabled code that finds the entering normal for the case of
  replicas! When entering a volume, the same code can find the entering normal
  in the case of replicas, as in the case of other types of volumes (normal,
  parameterised). Improved error message, changing it into an Exception. (#5)
- G4ReplicaNavigation: transform exitNormal to Grand-mother reference frame
  (was current=mother). Fix starting depth for 'while': had made it top-2,
  not top-1=2nd level.

Oct 15th, 2012 - J.Apostolakis  (geomnav-V09-05-15) - Fix-line
------------------------------
- G4Navigator: hidden exception with #ifdef for unsupported Exit Normal
  in Replicas.

Oct 13th, 2012 - J.Apostolakis  (geomnav-V09-05-14) - Develop-line
------------------------------
- G4ReplicaNavigation: extended it to calculate ExitNormal. First version.
  Now calculates it at each 'depth', and also for daughter; used to calculate
  it only for exiting mother, i.e. current.
- G4Navigator: GetExitNormal(): set 'fCalculatedExitNormal' in case of 'Valid'
  (convex) normal. Re-activate printing for missing exit Normal in case of
  Replica (define G4DEBUG_NAVIGATION 1).

Oct 11th, 2012 - J.Apostolakis  (geomnav-V09-05-13) - Fix-line
------------------------------
- Ignoring previous tag.

Oct 11th, 2012 - J.Apostolakis  (geomnav-V09-05-12) - Develop-line
------------------------------
- G4Navigator::GetLocalExitNormal(): hidden exception warning for missing
  Exit Normal (it remains 'protected' under  #ifdef G4DEBUG_NAVIGATION).
- G4SafetyHelper::ReLocateWithinVolume(): Added check of relocation.

Oct 11th, 2012 - J.Apostolakis  (geomnav-V09-05-11)
------------------------------
- G4Navigator::ComputeStep(): fixed condition for transformation of
  local-normal: had flipped conditions, not corrected it.

Oct  2nd, 2012 - J.Apostolakis  (geomnav-V09-05-10)
------------------------------
- G4Navigator::GetGlobalExitNormal(): added checks for non-unit surface
  normals in cases of exiting (existing global) or entering (new local) normal.

Sep 21st, 2012 - J.Apostolakis  (geomnav-V09-05-09)
------------------------------
- Improved GetLocalExitNormal(). In case GrandMother is correct, it will now
  supply it.

Sep 20th, 2012 - J.Apostolakis  (geomnav-V09-05-08)
------------------------------
- G4Navigator: suppressed extra transformations for updating
  'fGrandMotherExitNormal' in ComputeStep(). This is the only existing way
  to keep an update 'local' Exit Normal (potential alternative way is not
  implemented). It also serves as an alternative way (not needed) for the
  'global' Exit Normal.
  CHANGE of BEHAVIOR: This changes the results of GetLocalExitNormal(G4bool*)
  and GetLocalExitNormalAndCheck(const G4ThreeVector&, G4bool*); it now always
  returns 'valid'=false when Exiting. A simple ERROR (not G4Exception) is
  generated if this case used.
  Detailed description of change: previously it was unclear whether the
  (Grand Mother) normal was correct (due to potential extra changes of
  coordinates). In the case that the GrandMother was correct (unknown before),
  it is no longer available (when exiting).
  The suppressed updating of 'fGrandMotherExitNormal' in ComputeStep()
  is not needed for the Exit Normal in Global Coordinates, as that is now
  calculated using the Grand-Mother to Global transform in the case of exiting
  volume.
  NOTE: any client that need a normal should convert to using
        GetGlobalExitNormal() in place of GetLocalExitNormal().
- Commented out extra debug printing in ComputeStep().

Sep 19th, 2012 - J.Apostolakis  (geomnav-V09-05-07)
------------------------------
- G4Navigator: commented out debug printing in ComputeStep() and
  GetGlobalExitNormal().

Sep 19th, 2012 - J.Apostolakis  (geomnav-V09-05-06)
------------------------------
- G4Navigator: reverted condition in GetGlobalExitNormal().
  NOTE: This version contains debug printing (next tag will remove them.)
- Extended testG4Navigator1 unit test to check GetGlobalExitNormal()
  (few rotation for now).

Aug 15th, 2012 - J.Apostolakis
------------------------------
- G4Navigator: corrected condition in GetGlobalExitNormal -- the value is
  precalculated when Locate was just called, not when ComputeStep was last
  called.

July 11th, 2012 - J.Apostolakis (geomnav-V09-05-05)
-------------------------------
- Added data member for improved Exit Normal for optical photons (and
  potentially more uses, e.g. field )

June 12th, 2012 - G.Cosmo (geomnav-V09-05-04)
-------------------------
- Explicitly use inclusion of headers for system of units and physical
  constants, in plan to remove implicit inclusion from globals.hh.

May 14th, 2012 - G.Cosmo (geomnav-V09-05-03)
------------------------
- Fixed spurious cases of hidden variable visibility, detected with
  '-Wshadow' compilation option on gcc compiler.

March 9th, 2012 - J.Apostolakis (geomnav-V09-05-02)
-------------------------------
- G4MultiNavigator: fix for dealing with cases of clashing normals and
  return Invalid normal. Replaced FatalException with Warning, issued
  only if fVerbose > 2.

January 31st, 2012 - J.Apostolakis (geomnav-V09-05-01)
----------------------------------
- Corrected redundant condition in G4PropagatorInField.
  Revised threshold for decreaseFactor=0.5 from 100 to 30 times
  the zero-step threshold.

December 8th, 2011 - G.Cosmo (geomnav-V09-05-00)
----------------------------
- Fixed left over debug flags for field check in locator classes.
  Some code cleanup.

November 24th, 2011 - J.Apostolakis (geomnav-V09-04-12)
-----------------------------------
- G4VIntersectionLocator: Use only 'last' Normal.
  Disable fallback of using helper Navigator, as it appears
  to cause problems in the presence of additional geometries.

November 23rd, 2011 - J.Apostolakis (geomnav-V09-04-11)
-----------------------------------
- G4MultiNavigator: adapt to revisions of intersection logic,
  to provide Exit Surface Normal for step ending on boundary.
  First implementation of methods GetGlobalExitNormal(), GetLocalExitNormal()
  and GetLocalExitNormalAndCheck.
  The Local methods are not adapted for this case - they complain:
    - warn if one navigator limited the step;
    - fail report error if multiple navigators limited the step.
  Added data members to record number of Navigators which limited
  the step in the last call to ComputeStep ( fNoLimitingStep ),
  and the id in case of just one having limited it (fIdNavLimiting).

November 18th, 2011 - J.Apostolakis (geomnav-V09-04-10)
-----------------------------------
- G4Navigator: fixed valid flag to mean correctly
  'convexity' and 'have-calculated' in its two use cases.
  - G4Navigator::ComputeStep():
    * Undid / corrected change to 'fValidExitNormal' (meaning= exited
      solid is convex ) when it is recalculated for the case of exiting.
  - Minor fix to G4Navigator::GetLocalExitNormal():
    * Always set Valid=calculated for Local Normal.

November 18th, 2011 - J.Apostolakis (geomnav-V09-04-09)
-----------------------------------
- G4SimpleLocator, G4BrentLocator & G4MultiLevelLocator:
    Revised all Locator classes to use GetLastSurfaceNormal()
    which first calls the robust GetLastSurfaceNormal()
    instead of calling GetLocalSurfaceNormal().
    *Corrects* ATLAS stuck track issues for hard test cases.

November 11th, 2011 - G.Cosmo (geomnav-V09-04-08)
-----------------------------
- Trivial fixes for Coverity defects in G4GeomTestPoint and G4GeomTestVolPoint.
- Some code cleanup...

October 28th, 2011 - J.Apostolakis (geomnav-V09-04-07)
----------------------------------
- Fix in G4Navigator::GetLocalExitNormal() to use end-point of last
  step (not start point) when calculating normal at end of step.
- New method GetLocalExitNormalAndCheck(3-vec, *valid) for checking,
  now used by GetGlobalExitNormal().
- Added new state 'fLastStepEndPointLocal' to the state of G4Navigator.

October 26th, 2011 - J.Apostolakis (geomnav-V09-04-06)
----------------------------------
- Fix to G4Navigator::GetLocalExitNormal(): rewrote the case when ComputeStep()
  has been called but not Locate.
  If 'entering', must first transform 'fLastLocatedPointLocal' to the new
  daughter coordinates before using them.
  If 'exiting' use the stored values (as after Locate()).
- Created new method GetMotherToDaughterTransform() in G4Navigator:
  'fLastLocatedPointLocal' remains in the coordinates of current step's
  volume, i.e. what is called mother (always) , until after the re-location
  (i.e. call to LocateGlobalPointAndSetup())

October 25th, 2011 - J.Apostolakis (geomnav-V09-04-05)
----------------------------------
- G4Navigator: ComputeSafety() no longer sets flag meant for ComputeStep().

October 24th, 2011 - J.Apostolakis (geomnav-V09-04-04)
----------------------------------
- Improvement in G4VIntersectionLocator (for use in GetLocalSurfaceNormal()):
  make a data member of type G4TouchableHistoryHandle to replace interim use
  of 'static' for local variable in GetLocalSurfaceNormal().
- G4MultiLevelNavigator: put in missing change of threshold.

October 21th, 2011 - J.Apostolakis (geomnav-V09-04-03)
----------------------------------
- Several fixes and improvements in G4VIntersectionLocator:
  o Fix to GetSurfaceNormal(): fixed check in case of 'last computed' normal.
  o Fix to GetGlobalSurfaceNormal(): use correct navigator (helper) to transform
    normal from local to global
  o Optimisation to GetLocalSurfaceNormal(): reuse G4TouchableHistoryHandle
    (via static ad interim), do not allocate for every call.
    Note: *limitation* of using helper - cannot cope with coincident surfaces in
          this version (need to use direction of trial *chord* when locating).
  o GetLocalExitNormal(): call Surface Normal only if on Surface or near inside,
    else return 'false' for validity.
  o All 'Normal' methods: check Normal vector to make sure its magnitude is
    within 0.001 of 1.

October 18th, 2011 - J.Apostolakis
----------------------------------
- Locators (Simple, Brent, Multi-Level):
  Refined the threshold for accepting a candidate intersection
  The new criterion is much smaller (to capture more cases) :
        sagitta < tolerance    ~=   1e-9 mm
  whereas it used to be
        sagitta < geom_mean( tolerance, delta_intersection )
        ie.  sagitta < 1e-6 mm.
- Corrected compilation warning from gcc 4.6 (unused variables).
- Corrected problem in G4Navigator::GetLocalExitNormal (not set variable).

October 11th, 2011 - J.Apostolakis (geomnav-V09-04-02)
----------------------------------
- Created *fix* for ATLAS problem of tracks stuck on boundary of volumes:
  Improved the condition for accepting a candidate intersection with
  a boundary in the Locator classes.
  >> It now *checks* that the track will enter the new volume. <<
  All three Locator classes were revised to use the new convergence
  condition ( ie G4SimpleLocator, G4BrentLocator and G4MultiLevelLocator).
  Note: the check uses the dot product between the exiting normal and
        the estimated momentum of the track at the approximate curve
        point near the entry/intersection point.
- Revised G4VIntersectionLocator:
  * New method GetSurfaceNormal, to get last normal or, if not
    available obtain new estimate from GetGlocalSurfaceNormal;
  * Corrected AdjustmentOfFoundIntersection() to use GlobalExitNormal
    instead of Local(ExitNormal);
  * Renamed arguments of IntersectChord (to no longer use fP prefix).
- Revised G4Navigator::GetLocalExitNormal():
  * improved GetLocalExitNormal() method, to allow it to be called
    before Locate is called at the endpoint of the last ComputeStep;
  * adding state to identify whether ComputeStep was called last
    (rather than a Locate method);
  * adding a method to provide the Exit Normal in Global coordinates.

August 11th, 2011 - G.Cosmo (geomnav-V09-04-01)
---------------------------
- Migrated to new G4Exception scheme for warnings and errors.
- Defined scheme for warnings/errors coding:
  + 1xxx for warnings, 0xxx for errors.
  Code numbering:
  + 0001: not supported or implemented features;
  + 0002: invalid setup/construct;
  + 0003: invalid run condition;
  + 1001: incorrect setup; automatically adapted.
  + 1002: notification.

May 12th, 2011 - G.Cosmo (geomnav-V09-04-00)
------------------------
- Fixed compilation warnings from gcc-4.6.0 for variables set but not used.

May 4th, 2011 - J.Apostolakis
-----------------------------
- Adjusted constructor in G4PropagatorInField to reorder class' data members,
  to separate a) invariants, b) state information and c)Dependent objects.

December 15th, 2010 - G.Cosmo (geomnav-V09-03-10)
-----------------------------
- Added inline method for creation of a touchable-history given a navigation
  history as argument. Required for clients like G4ScoreSplittingProcess, to
  avoid external symbols exporting on generation of DLLs.

November 19th, 2010 - G.Cosmo (geomnav-V09-03-09)
-----------------------------
- Removed unused variable in G4RegularNavigation.

November 15th, 2010 - G.Cosmo (geomnav-V09-03-08)
-----------------------------
- Restored trials for zero steps to 10 in G4Navigator, as originally.

November 12th, 2010 - G.Cosmo (geomnav-V09-03-07)
-----------------------------
- Cleared compilation warnings for unused parameters; temporarily commented out.

November 11th, 2010 - G.Cosmo (geomnav-V09-03-06)
-----------------------------
- Set trials for zero steps to 5 before activating push in G4Navigator;
  increased unit value to 100 times kCarTolerance to make push more effective.

November 10th, 2010 - G.Cosmo (geomnav-V09-03-05)
-----------------------------
- Reduced trials for zero steps from 10 to 3 for activating tolerance push
  in G4Navigator.
- Added possibility to switch off push notifications in G4Navigator; also
  added related UI command.

November 9th, 2010 - P.Arce
---------------------------
- Added new class G4PartialPhantomParameterisation allowing for envelopes
  of different types other than box for regular geometries, so that relaxing
  the restriction for voxels to completely fill the envelope container.
  Adapted G4PhantomParameterisation, G4RegularNavigation and G4Navigator
  accordingly.

November 4th, 2010 - G.Cosmo
----------------------------
- Added new class G4NavigationLogger for "check-mode" verbosity. Reorganised
  verbosity formatting for voxel and normal navigation.

November 3rd, 2010 - J.Apostolakis
----------------------------------
- Added prototype class G4VoxelSafety for computation of exact safety.

September 6th, 2010 - G.Cosmo (geomnav-V09-03-04)
-----------------------------
- Added missing initialization for 'fNewSafety' and 'fTrueMinStep' in
  G4MultiNavigator constructor.

September 3rd, 2010 - G.Cosmo (geomnav-V09-03-03)
-----------------------------
- Fixed typo in signature of ComputeStepSkippingEqualMaterials() in
  G4RegularNavigation.

August 19th, 2010 - T.Nikitina (geomnav-V09-03-02)
------------------------------
- Fix in G4GeomTestSegment::FindSomePoints(), to address problem report #980.

July 12th, 2010 - G.Cosmo (geomnav-V09-03-01)
-------------------------
- Fixed array out of bound error in G4MultipleNavigator and G4PathFinder
  constructors (J.Apostolakis).
- Fixed cout precision restoring in G4BrentLocator, G4PropagatorInField,
  G4SimpleLocator, G4VIntersectionLocator and G4MultiLevelLocator.
- Removed unused private data members in G4MultiLevelLocator.
- Replaced use of DBL_MAX for distances with kInfinity in G4MultiNavigator
  and G4Navigator internals.
- Exchanged conditions for initialization of members in G4TransportationManager
  constructor.
- Added dummy initialisation of members in constructors in G4MultiNavigator,
  G4ParameterisedNavigation, G4PathFinder, G4PhantomParameterisation,
  G4RegularNavigation.

March 8th, 2010 - G.Cosmo (geomnav-V09-03-00)
-------------------------
- Avoid unnecessary creation of string for debug purposes in G4PropagatorInField.
  Courtesy of P.Elmer (CMS).
- Some printout formatting...

December 11th, 2009 - J.Apostolakis (geomnav-V09-02-11)
-----------------------------------
- Implemented field by region in G4PropagatorInField, with extra checking of
  logical volume.

November 30th, 2009 - J.Apostolakis (geomnav-V09-02-10)
-----------------------------------
- Fixes in G4VIntersectionLocator:
   * Fixed problem in ReEstimateEndPoint() behaviour for very small steps.
   * Corrected constructor to ensure that it initialises all data members.
   * Labelled the methods (in header) to make noticable those that must change
     at every step (attributes: 'ChordFinder', 'EpsilonStep', 'Navigator').

Nov 23rd, 2009 - J.Apostolakis
------------------------------
- Fixes in G4PropagatorInField.cc:
   * Revised condition for flagging ZeroStep to avoid fake triggering. Small
     proposed steps (from Physics) could trigger the previous simple condition
     for Tiny/Zero Problem steps.

November 12th, 2009 - J.Apostolakis (geomnav-V09-02-09)
-----------------------------------
- Cleanup of minor methods in G4PropagatorInField:
   * Added new method RefreshIntersectionLocator() to update the state of locator.
     It is used to synchronise with G4IntersectionLocator.
   * Deleted long obsolete methods: SetAccuraciesWithDeltaOneStep(),
     SetDeltaIntersection() and SetDeltaOneStep().
   * Revised implementation to avoid using the older methods GetDeltaIntersection()
     and GetDeltaOneStep().

November 12th, 2009 - J.Apostolakis (geomnav-V09-02-08)
-----------------------------------
- Refined G4PropagatorInField.cc:
   * Changed parameters for treating consecutive tiny/zero steps:
     - the value of default decrease factor to 0.25 (from 0.1),
     - the value is not used when the step size falls below a certain thresholds
       This threshold is changed. It is expressed as a multiple of fZeroStepThreshold
       instead of kCarTolerance. This, since the thresholds were meant to refer to
       the  ZeroStepThreshold (it was kCarTolerance), and the values were now much
       larger than 'ZeroStepThreshold'.
     - The value given to the decrease factor after the first such thresholds is
       changed to 0.35 instead of 0.25, 0.5.
   * Improved printing of Diagnostic message.

November 3rd, 2009 - J.Apostolakis (geomnav-V09-02-07)
----------------------------------
- Refined G4PropagatorInField.cc:
   * Added new member fZeroStepThreshold, to enable tuning of threshold for
     Tiny/Zero steps.
   * Changed default value from 0.5 * kCarTolerance
     to max (100,000 * kCarTolerance, 0.1 * micron )
   * This is first revision to address problem seen at boundary of volumes
     (Reports of ATLAS).

June 2nd, 2009 - J.Apostolakis (geomnav-V09-02-06)
------------------------------
- Fix in G4PropagatorInField::SetNavigator
   * Forward new Navigator to IntersectionLocator.

May 20th, 2009 - P.Arce (geomnav-V09-02-05)
-----------------------
- Added method BuildContainerSolid() taking a solid as argument to
  G4PhantomParameterisation. Added protection to GetMaterialIndex()
  for zero index.

May 18th, 2009 - T.Nikitina (geomnav-V09-02-04)
---------------------------
- Enhanced algorithm for 'FB_intersects' in order to speedup BrentLocator.
- Fix in the usage of the geometrical tolerance in G4VIntersectionLocator
  in method AdjustementOfFoundIntersection().

May 13th, 2009 - J.Apostolakis (geomnav-V09-02-03)
------------------------------
- Fix in G4PathFinder: A geometry is at a boundary if its step is within
   tolerance of the minimum step for any geometry.

May 5th, 2009 - T.Nikitina (geomnav-V09-02-02)
--------------------------
- Fix in G4Navigator::ComputeStep() for the computation of rotation of the
  'LocalExitNormal' in cases when DistanceToOut() returns non-valid normal
  for optical photons in rotated solids. Addresses problem report #1059.

February 26th, 2009 - T.Nikitina (geomnav-V09-02-01)
--------------------------------
- Fixed problem in G4BrentLocator::EstimateIntersectionPoint() responsible
  for rare cases of negative steps.

January 27th, 2009 - G.Cosmo (geomnav-V09-02-00)
----------------------------
- Added G4RegularNavigationHelper class, used by G4RegularNavigation for
  counting the number of step lengths in each voxel of the regular structure
  (by P.Arce).
- Some code cleanup...

December 11th, 2008 - T.Nikitina (geomnav-V09-01-10)
--------------------------------
- Reinstated G4MultiLevelLocator as the default locator to allow for proper
  tuning of parameters in propagation in field and avoid CPU penalty currently
  induced by default parameters.
- Corrected text in exceptions in locators classes.

November 14th, 2008 - T.Nikitina, J.Apostolakis (geomnav-V09-01-09)
-----------------------------------------------
- Introduced first implementation of new optional method in locator classes
  AdjustementOfFoundIntersection() using surface-normal of the intersecting
  solid to boost accuracy. Added the optional call to the new method in each
  concrete locator.
- Removed unnecessary accessors for Brent locator in G4PropagatorInField.
- G4VoxelNavigation: implemented additional check when running in "check"
  mode; if it is on the surface, ensure that it can move on next step;
  either DistanceToIn(p,v) or DistanceToOut(p,v) should return a finite
  value greater than the tolerance.

November 10th, 2008 - G.Cosmo (geomnav-V09-01-08)
-----------------------------
- G4PathFinder: cleared unecessary calls to ComputeSafety() in ReLocate().

October 28th, 2008 - T.Nikitina (geomnav-V09-01-07)
-------------------------------
- Moved method LocateIntersectionPoint() in G4PropagatorInField to a separate
  class G4VIntersectionLocator, now allowing to use different location
  algorithms: Brent, MultiLevel, Simple.
- New classes: G4VIntersectionLocator, G4SimpleLocator, G4BrentLocator and
  G4MultiLevelLocator.
- Coworks with tag "field-V09-01-03".

October 10th, 2008 - G.Cosmo (geomnav-V09-01-06)
----------------------------
- Introduced optional Boolean argument in G4Navigator::ComputeSafety() to
  allow for computation of safety without modifying the state restoring of
  the navigator.
- Modified accordingly the following classes, for calls to ComputeSafety():
  G4SafetyHelper, G4PathFinder (now calling ComputeSafety() with TRUE
  argument to preserve navigator's state), G4MultiNavigator and
  G4ErrorPropagationNavigator.

May 5th, 2008 - T.Nikitina (geomnav-V09-01-05)
--------------------------
- Added Brent method for LocateIntersectionPoint() in G4PropagatorInField.
  The Brent method is now used as default and can be switched off through
  call to the proper accessor function SetBrentMethod().
- Requires related update to G4ChordFinder in geometry/magneticfield module
  included in tag "field-V09-01-02".

April 29th, 2008 - M.Asai (geomnav-V09-01-04)
-------------------------
- G4PathFinder: commented out warning and exception in ComputeStep()
  for step smaller than minimum threshold.

April 28th, 2008 - G.Cosmo (geomnav-V09-01-03)
--------------------------
- Corrected condition for wrong evaluation order introduced in the
  previous tag.

March 13th, 2008 - G.Cosmo (geomnav-V09-01-02)
--------------------------
- Cleared compilation warnings in G4ReplicaNavigation on gcc-4.3.0 for
  ambiguous use of parentheses in condition statements.

January 24th, 2008 - T.Nikitina (geomnav-V09-01-01)
-------------------------------
- G4PropagatorInField: changed condition for 'ReEstimationEndPoint'
  in order to better handle very strict parameters of propagation.
  Also added more verbosity in case of error for negative step.
  Fixes rare problem observed in production by ATLAS.

January 22nd, 2008 - P.Arce (geomnav-V09-01-00)
---------------------------
- G4PhantomParameterisation:
  o Bug fix in GetReplicaNo() to catch overflows in X and Y.
    (on suggestion by S.Stute)
  o Made CheckVoxelsFillContainer() visible in public interface.

November 16th, 2007 - G.Cosmo (geomnav-V09-00-12)
-----------------------------
- Cleared compilation warnings for shadowing of variables in classes
  within the module.

November 14th, 2007 - G.Cosmo (geomnav-V09-00-11)
-----------------------------
- Reintroduced artificial push in G4ReplicaNavigation::ComputeStep().
  Further investigation and eventually reimplementation of LevelLocate()
  required to take into account point and direction ...

November 14th, 2007 - G.Cosmo (geomnav-V09-00-10)
-----------------------------
- Trial to remove artificial push in G4ReplicaNavigation::ComputeStep().
- Some minor cleanup.

November 9th, 2007 - J.Apostolakis (geomnav-V09-00-09)
----------------------------------
- G4SafetyHelper: Improved ComputeSafety() not to call G4Navigator
  if exactly on safety 'center'.
- G4PathFinder: correction to debug code under #ifdef G4DEBUG_NAVIGATION.

November 9th, 2007 - G.Cosmo (geomnav-V09-00-08)
----------------------------
- Fix in G4ReplicaNavigation::DistanceToOut() for exact classification of
  the linear step for Cartesian case.
- Made IdentifyAndPlaceSolid() method inlined in G4ParameterisedNavigation.
- Minor cosmetics and cleanup.

November 6th, 2007 - P.Arce (geomnav-V09-00-07)
---------------------------
- Optimisation in G4RegularNavigation: use voxelBox->DistanceToOut() instead
  of ComputeStep() in ComputeStepSkippingEqualMaterials().
- Some cleanup and proper formatting of error/warning messages.

November 2nd, 2007 - J.Apostolakis (geomnav-V09-00-06)
----------------------------------
- Merging fixes in "geomnav-V09-00-03b" and "geomnav-V09-00-03c" on top
  of tag "geomnav-V09-00-05".

November 2nd, 2007 - J.Apostolakis (geomnav-V09-00-03c)
----------------------------------
- G4PathFinder:
  o Added setting of 'fNoGeometriesLimiting' in DoNextCurvedStep().
  o Check to verify that 'fNoGeometriesLimiting' is set by DoNext*Step methods.
  o Revised data type of 'fNoGeometriesLimiting' to be a int, so that < 0
    shows 'unset'.
- G4PropagatorInField:
  o Fixes for compilation of code under G4DEBUG_FIELD (problem report #982).
  o Added extra check of method LocateIntersectionPoint() arguments.
- Tag based on "geomnav-V09-00-03b".

October 29th, 2007 - J.Apostolakis (geomnav-V09-00-03b)
----------------------------------
- G4PathFinder: first fix for problem of another process shortening steps
  (between calls to ComputeStep by different processes in same step.)
  I.e.  First call to ComputeStep (geom 1) has proposed Step = 3.0 cm
        Next  call to ComputeStep (geom 2) has proposed Step = 1.0 cm
        (e.g. Multiple Scattering)
- Tag based on "geomnav-V09-00-03a".

October 24th, 2007 - J.Apostolakis (geomnav-V09-00-05)
----------------------------------
- Merging fixes introduced in "geomnav-V09-00-03a" on top of
  "geomnav-V09-00-04".

October 24th, 2007 - J.Apostolakis (geomnav-V09-00-03a)
----------------------------------
- G4PathFinder: fix to now set 'fNoGeometriesLimiting' in DoNextLinearStep()
  when WhichLimited() is not called, i.e. in case of one navigator
  optimisation.
- Tag based on "geomnav-V09-00-03".

October 18th, 2007 - G.Cosmo (geomnav-V09-00-04)
----------------------------
- Added new specific navigation for regular structures and phantoms.
  New classes: G4RegularNavigation, G4PhantomParameterisation (by P.Arce).
  Added cases to G4Navigator. Added dependency on "materials" module.

October 12th, 2007 - J.Apostolakis (geomnav-V09-00-03)
----------------------------------
- G4PathFinder: added new methods GetNumberGeometriesLimitingStep()
  and GetMinimumStep() needed by G4CoupledTransportation to see whether
  to relocate.

September 25th, 2007 - G.Cosmo (geomnav-V09-00-02)
------------------------------
- Some code cleanup in G4PathFinder. Switch off additional optimisation
  for safety in method DoNextLinearStep().
- Set 'fRecomputeFactor' in G4SafetyHelper to 0.0, to switch off internal
  optimisation and allow for reproducibility of steps (A.Howard).

July 12th, 2007 - J.Apostolakis (geomnav-V09-00-01)
-------------------------------
- Restores fixes/improvements of geomnav-V08-03-07
- G4PathFinder: includes fix for result of ObtainSafety(), used in
  CoupledTransportation.

July 12th, 2007 - J.Apostolakis (geomnav-V09-00-00)
-------------------------------
- G4PathFinder:
  o Include correction to signature of method PrepareNewTrack().
    (This was done on a branch for this class in order to keep only
     development of geomnav-V08-03-06)
- G4PropagatorInField:
  o Included revisions and fixes for G4PropagatorInField of June 8th.
- This tag is based on "geomnav-V08-03-06" and does NOT include the
  revisions of "geomnav-V08-03-07".

July 5th, 2007 - G.Cosmo
------------------------
- G4PathFinder:
  o Corrected signature to method PrepareNewTrack().
    Resolves linking problems detected on SUN-CC platform.
- Changes included in tag  "geomnav-V08-03-02c", included in relase 9.0.p01.

June 8th, 2007 - T.Nikitina
---------------------------
- G4PropagatorInField:
  o Put in the constructor creation of array of FieldTracks used in
    LocateInterSectionPoint().
  o Change in ReEstimateNewPoint() in order to handle cases with zero step
    caused by diffCurve=0.
  o In case of proposed step less than tolerance, now return 'kInfinity'
    as per convention of geometry instead of 'DBL_MAX'.
    (by J.Apostolakis, May 18th 2007)
- Changes included in tag "geomnav-V08-03-02b", included in release 9.0.

June 5th, 2007 - J.Apostolakis (geomnav-V08-03-07)
------------------------------
- G4PathFinder:
  o New method to return the safety sphere last calculated for
    a PreStep point (it could be a previous one - due to optimasation).
    >> If last step(s) were smaller than safety, then for a linear
    track (no field or no charge) Navigator's ComputeSafety is not
    called.  The older PreStep (previous step or some steps back
    in case of many small steps) is stored for this - and provided.
  o ComputeStep() still returns current PreStep point's safety (must).
  o Revisions are to make this (used by CoupledTransportation) more
    compatible with the old direct use of G4Navigator by G4Transportation.

May 29th, 2007 - J.Apostolakis (geomnav-V08-03-06)
------------------------------
- G4Navigator
  o Fixed **ComputeSafety**: wrong coordinates used (last tag only).
    For certainty reinstated LocateGlobalPointWithinVolume (for now).
  o Corrected calculation of fStepEndPoint (in ComputeStep)
    for case of step not limited by geometry
- G4PathFinder
  o PrepareNewTrack: calls to re-initialise SafetyHelper (reset safety)
  o ReLocate: Corrected check of move (avoid one side effect on stored safety)
              --> ComputeSafety still results individual navigators' values.

May 24th, 2007 - J.Apostolakis (geomnav-V08-03-05)
------------------------------
- G4PathFinder: 1 correction and 2 optimisations:
  o PrepareNewTrack() clear safety - to avoid potential problems in overlaps.
  o DoNextLinearStep() only calls ComputeStep() for a navigator whose safety
    greater than the step.
  o DoNextCurvedStep(), if there's one geometry, no longer calls
    ComputeSafety() at start.
- G4Navigator ComputeSafety:
  o Corrected it to address use at non-endpoint
  o Replaced call to LocateGlobalPointWithinVolume() with calls to
    sub-navigators.

May 21st, 2007 - G.Cosmo
------------------------
- Made 'fVerbose' protected in G4Navigator, reused in G4MultipleNavigator.
- Some cleanup in G4MultipleNavigator implementation.
- Make G4PathFinder singleton definition canonical.
- Added method CheckPointExiting() in G4AuxiliaryNavServices utility
  class (by P.Arce).

May 19th, 2007 - J.Apostolakis (geomnav-V08-03-04)
------------------------------
- Corrections and additions in G4PathFinder:
    1) Added calculation of start-point safety in DoNextCurvedStep
    2) Corrected GetCurrentSafety() - uses mininum of 1)
    3) Added method to obtain safety of one navigator (after call to all).
    4) Deleted obsolete data member 'fMinSafety'.
    5) If only one geometry, do not call WhichLimited in DoNextLinearStep (optimisation)
    6) ComputeSafety: save the values of isotropic safety for each navigator

May 18th, 2007 - A.Howard (geomnav-V08-03-03)
------------------------
- Fixed return value for G4PathFinder::ComputeStep in case of
   step smaller than tolerance (now kInfinity): fixes one PathFinder issue (JA).
- Added compiler flags for verbosity in G4PathFinder.cc
- Added compiler flags for verbosity in G4MultiNavigator.cc

May 18th, 2007 - G.Cosmo (geomnav-V08-03-02)
------------------------
- Use kAngTolerance and kRadTolerance from G4GeometryTolerance class.
- Coworks with tag "global-V08-03-03".

May 16th, 2007 - G.Cosmo (geomnav-V08-03-01)
------------------------
- Introduced new class G4ErrorPropagationNavigator, a specialised navigator
  for performing double navigation in the detector geometry and on the
  target surface for error propagation (by P.Arce).
- Fixed bug in G4GeomTestSegment in case of TestPoint on the surface,
  reducing cases of reported spurious overlaps.
- Coworks with tag "global-V08-03-02".

May 16th, 2007 - J.Apostolakis (geomnav-V08-03-00a)
------------------------------
- Moved to G4PathFinder version without extra prints

April 26th, 2007 - G.Cosmo (geomnav-V08-03-00)
--------------------------
- Use call to G4GeometryTolerance instead of kCarTolerance where needed.
- Revised data members in G4SafetyHelper to conform to convention.
- Requires tag "global-V08-03-00" and related tag set.

April 26th, 2007 - T.Nikitina (geomnav-V08-02-03)
-----------------------------
- Fixed case of out of range access in G4GeomTestSegment responsible for
  crashes observed when recursive-grid test for overlaps was run.
  Addressing problem report #784.

April 20th, 2007 - G.Cosmo (geomnav-V08-02-02)
--------------------------
- Some cleanup and minor cosmetics ...

April 12st, 2007 - V.Ivanchenko
-------------------------------
- G4SafetyHelper become a unique class, which can be accessed via
  G4TransporationManager. 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.
- G4TransportationManager: added G4SafetyHelper.
- G4PathFinder: initialisation of G4SafetyHelper.
- Tagged "geomnav-V08-02-02-beta2".

March 31st, 2007 - J. Apostolakis
---------------------------------
- G4Navigator:
  o New method CheckNextStep() makes a trial step, without
    changing the state of the Navigator (to be verified).
    It is a variant of ComputeStep, whose signature it shares.
- Tagged "geomnav-V08-02-02-beta1".

February 13th, 2007 - J.Apostolakis
-----------------------------------
- G4Navigator:
  o Improvement for creating touchable history when located outside world.
    Retain whether last point was located outside, and if so call default
    TouchableHistory constructor (that initialised world to null).
    NOTE: testing found problems with SteppingManager::SetInitialStep()
          as the Vertex physical volume was not set. Protection is potentially
          required, or bigger issue to be resolved.
    Currently, changes in G4Navigator.hh,cc are safe, but the fix in .icc is
    temporarly suspended and NOT included.
- Attempted fix created Dec 7th, 2006

February 13th, 2007 - J.Apostolakis (geomnav-V08-02-01)
-----------------------------------
- G4PropagatorInField:
  o Implemented ClearPropagatorState() to clear all the track-dependent
    state (incl. safety, zero-steps, loop flag ...).
    ** Calling this is mandatory for each new track because in the case of
       geometry overlaps, the safety can be easily inconsistent (and/or
       incorrect) otherwise
    ** Must be called from G4Transportation (or alternatives) !!
- Fix created Jan 25th, 2007

January 31st, 2007 - G.Cosmo (geomnav-V08-02-00)
----------------------------
- G4Navigator: forcing call to CheckOverlaps() on the current volume
  before event abortion for cases of stuck tracks.
- Requires tag "geommng-V08-02-00".

November 23rd, 2006 - J.Apostolakis (geomnav-V08-01-08)
-----------------------------------
- G4PathFinder:
  o Fix when report a problem only if move > safety (additional check).
  o Revised condition for extra checking against safety.
  o Many small and cosmetic changes in debug printing.

November 18th, 2006 - J.Apostolakis (geomnav-V08-01-07)
-----------------------------------
- G4PathFinder:
  o Fix for problem when step is fully taken.
    Note: this occurs due to optimisation in PiF that avoids calling
    G4(Multi)Navigator!!
  o Function LimitedString( ELimited lim ) enables printing this enum
  o Improved printing in IntersectChord. Deleted/simplified few prints in
    ComputeStep().
- G4MultiNavigator: cleanup, cosmetics

November 13th, 2006 - G.Cosmo (geomnav-V08-01-06)
-----------------------------
- Fixed compilation warnings and some cleanup ...

November 11th, 2006 - J.Apostolakis (geomnav-V08-01-05)
-----------------------------------
- G4PathFinder improvements for parallel Navigation
  o ComputeStep method signature extended to add volume
  o Use G4MultiNavigator for tracking in field.
- G4MultiNavigator:
  o Several fixes, primarily for taking care of condition of
    geometry limited step.

November 11th, 2006 - J.Apostolakis (geomnav-V08-01-04)
-----------------------------------
- G4PropagatorInField:
  o Refined fix in LocateIntersectionPoint(), to subdivide
    in case it cannot find intersection point quickly (T.Nikitina).
    Second version, with several levels of cutting.
  o NOTE: Special tags made (later) not including the Developments in
    G4TransportationManager, G4PathFinder, G4SafetyHelper for parallel
    navigation. i.e. - based on tag "geomnav-V08-01-03".

November 11th, 2006 - J.Apostolakis
-----------------------------------
- Created G4MultiNavigator class and utilised it from G4PathFinder
  to implement curved trajectory parallel navigation.

November 10th, 2006 - J.Apostolakis (geomnav-V08-01-03)
-----------------------------------
- G4PropagatorInField:
  o Fix in LocateIntersectionPoint(), to subdivide in case it cannot find
    intersection point quickly (T.Nikitina).
    First version, only one level of cutting
  o NOTE: Special tags made (later) not including the Developments in
    G4TransportationManager, G4PathFinder, G4SafetyHelper for parallel
    navigation. i.e. - based on tag "geomnav-V08-01-02".

November  9th, 2006 - J.Apostolakis
-----------------------------------
- G4SafetyHelper:
  o Changed default value of 'fUseParallelGeometries' to 'false'.
    This is the default, except when using parallel geometries.
    Value 'true' will become the default.

November 4th, 2006 - M.Asai
---------------------------
- G4TransportationManager:
  o added new method SetWorldForTracking() to enable change of world from
    the RunManager.

October 31st, 2006 - J.Apostolakis
----------------------------------
- G4SafetyHelper
  o Added new class variable 'fUseParallelGeometries', to enable
    it to work call G4Navigator of Mass geometry directly, in
    the case of single geometry (when G4PathFinder is disabled).
  o Default value is currently 'true' --> for parallel navigation development.
- G4PathFinder
  o Improved the code that checks within relocation whether position
    is proposed to be moved outside safety sphere from endpoint.

October 26th, 2006 - G.Cosmo (geomnav-V08-01-02)
----------------------------
- G4Navigator:
  o Added inline methods EnteredDaughterVolume() and ExitedMotherVolume() to
    allow for verification of a point entering a daughter volume or exiting
    the mother volume.
  o Made LocateGlobalPointAndSetup() method virtual. Moved to non virtual
    and inline LocateGlobalPointAndUpdateTouchableHandle() method.
  o Moved 'fHistory' data member to protected to aloow for more complete
    subclassing.
  o Minor cosmetics to recently introduced printout diagnostics in
    ComputeSafety() method.
- G4TransportationManager:
  o Added methods to access the list of the registered worlds.
- NOTE: this tag does NOT include the recent developments introduced for
  G4PathFinder. It resumes from tag "geomnav-V08-00-01"; anything else
  introduced after it, except for changes in G4Navigator, is NOT included !

October 25th, 2006 - J.Apostolakis
----------------------------------
- G4PathFinder: fixed initialisation of cached value for the
  G4TransportationManager to cope with singletons.

October 16th, 2006 - J.Apostolakis    (geomnav-V08-01-01)
----------------------------------
- G4Navigator: moved debug printing behind fVerbose conditions

October 12th, 2006 - J.Apostolakis (geomnav-V08-01-00)
----------------------------------
- New class G4SafetyHelper to aid multiple scattering inn
  determining the correct Mass geometry step (via PathFinder)
  and all-geometry safety.
- Several revisions, fixes to G4PathFinder.

June 8th, 2006 - J.Apostolakis (geomnav-V08-00-06)
------------------------------
- G4PathFinder:
  o New method 'ComputeSafety' to compute safety at endpoint of last step.

June 2nd, 2006 - J.Apostolakis (geomnav-V08-00-05)
------------------------------
- G4PathFinder:
  o New method ReLocate() for non-Transportation classes to call when moving
    the endpoint of a particle. Uses LocateGlobalPointWithinVolume() method
    of the navigators.
  o Small fixes and protection of debug printing with Verbose flag.
  o Default verbose level is now 0.

May 28th, 2006 - J.Apostolakis (geomnav-V08-00-04)
------------------------------
- G4PathFinder:
  o Check whether a process shifted the position since the last step.
  o Corrected checking for 'Unique', i.e. one process limiting step.
  o Revised printing (more information, some protected by verbose flag).

May 27th, 2006 - J.Apostolakis (geomnav-V08-00-03)
------------------------------
- G4PathFinder revised significantly:
  o Workaround for problem of CreateHistory() when outside world.
  o Revised for new counting of Navigator IDs (M.Asai).
  o Added MovePoint() method that signals if it moved.
  o Added state to cope with cases where a full step is taken,
    i.e. to cope with steps that return kInfinity:
    New state:
      RelocatedPoint - to show if it is moved;
      TrueMinStep    - finite whereas reported can be kInfinity.
    and to aid in clarifying the state of the (singleton) object:
      LastStepNo     - already kept in one method (static), now exposed;
      CurrentStepNo  - mostly for debugging and printing out.
  o Small improvements in tests.

May 23rd, 2006 - J.Apostolakis (geomnav-V08-00-02)
------------------------------
- Added new prototype class G4PathFinder to coupled navigation
  in parallel geometries.

May 22nd, 2006 - G.Cosmo (geomnav-V08-00-01)
------------------------
- Extended G4TransportationManager to handle multiple navigators.
  Preserved interface for navigation in mass/tracking geometry.
- Added activation flag to G4Navigator and related accessor methods.

Feb 8th, 2006 - J.Apostolakis (geomnav-V08-00-00)
-----------------------------
- Addressing problem with convergence in LocateIntersectionPoint()
  of G4PropagatorInField (problem identified by Atlas, observed when
  requesting high precision, i.e. small values of eps_min/max, delta_one_step,
  due e.g. to need for small delta_intersection):
  o First solution by increasing maximum iterations (from 100 to 10,000).
  o Until correct information can be returned, an Exception is thrown
    in case of too many iterations.
  o Warn in case over 1000 iterations, to let user see difficulty.
- This fix is an interim solution, in lieu of improving the algorithm
  for location (or returning correct incomplete progress).

Nov 24th, 2005 - J.Apostolakis (geomnav-V07-01-02)
------------------------------
- Revised G4ParameterisedNavigation, to use new interface for
  ComputeMaterial(). Now no longer needing 'Physical Touchable'.

Sep 19th, 2005 - G.Cosmo  (geomnav-V07-01-01)
------------------------
- G4DrawVoxels: removed unnecessary 'panic' message in ComputeVoxelPolyhedra()
  and some code cleanup.

Jul 25th, 2005 - G.Cosmo  (geomnav-V07-01-00)
------------------------
- Some cleanup and cosmetic changes for Software Reference Manual.

Jun 14th, 2005 - J.Apostolakis  (geomnav-V07-00-00)
------------------------------
- Added ability to use Nested Parameterisations to Parameterised Navigation
  Coworks with tag "geomvol-V07-00-01".

Dec 2nd, 2004 - G.Cosmo  (geomnav-V06-02-08)
-----------------------
- Implemented migration to <cmath> for standard mathematical functions.

Nov 24th, 2004 - G.Cosmo  (geomnav-V06-02-07)
------------------------
- Fix in G4ReplicaNavigation::DistanceToOutPhi() for the case of phi
  sections on convex surfaces. Fixes problem report #651.

Nov 19th, 2004 - J.Apostolakis  (geomnav-V06-02-06)
------------------------------
- New access method in G4Navigator for SeverityOfZeroStepping().

Nov 17th, 2004 - G.Cosmo  (geomnav-V06-02-05)
------------------------
- Allow consecutive corrections for stuck tracks in G4Navigator::ComputeStep()
  up to 10 times before aborting the event.

Sep 28th, 2004 - G.Cosmo  (geomnav-V06-02-04)
------------------------
- Invoke G4LogicalVolume::UpdateMaterial() instead of SetMaterial() for
  parameterised navigation in G4Navigator and G4ParameterisedNavigation
  (M.Asai).
- Coworks with tag "geommng-V06-02-02".

Sep 13th, 2004 - G.Cosmo  (geomnav-V06-02-03)
------------------------
- G4Navigator: corrected computation of fGrandMotherExitNormal in ComputeStep()
  in the case where a not valid exit-normal exists.

Sep 11th, 2004 - G.Cosmo  (geomnav-V06-02-02)
------------------------
- Dump out contents from the solid when a fatal G4Exception is thrown from
  the navigators in ComputeStep().
  Modified files G4NormalNavigation.cc, G4ParameterisedNavigation.cc,
                 G4ReplicaNavigation.cc, G4VoxelNavigation.cc.

Aug 31st, 2004 - D.C.Williams  (geomnav-V06-02-01)
-----------------------------
- G4GeomTestSegment: fix to correctly determine whether starting trajectory
  is entering or exiting the solid when the starting point is on a surface.
  Added additional tests on solid consistencies (from roundoff sometimes) to
  avoid incorrect overlap warnings. Addresses problem reports #610 and #652.

Jun 29th, 2004 - G.Cosmo  (geomnav-V06-02-00)
------------------------
- Fixed zero step-length problem in G4ReplicaNavigation::ComputeStep()
  for cases where different replica types are coincident. Resolves
  problem report #633.
- G4NormalNavigation: added extra verbosity to print out information
  for each solid which returns a 'lowest-yet' step, including the
  mother volume. It is activated by setting verbose level to 2 or
  more (J.Apostolakis).

Jun 18th, 2004 - G.Cosmo  (geomnav-V06-01-03)
------------------------
- Enhanced check for null step in G4Navigator::ComputeStep().
  Now attempting a corrective action after 10 consecutive zero steps.
  Event gets aborted after 25 zero steps.

Jun 15th, 2004 - G.Cosmo  (geomnav-V06-01-02)
------------------------
- Relax exception in G4Navigator::ComputeStep() for stuck tracks.
  Event gets aborted after 25 zero steps.

Jun 11th, 2004 - G.Cosmo  (geomnav-V06-01-01)
------------------------
- Added check to G4Navigator to count the number of steps with zero length
  and issue an exception for tracks that get stuck in a loop (J.Apostolakis).
- Modified GNUmakefile to define G4GEOMETRY_ALLOC_EXPORT flag for DLLs
  build on Windows.

May 17th, 2004 - G.Cosmo  (geomnav-V06-01-00)
------------------------
- Added more verbosity on solids response for navigators (optimised/not
  optimised) if "check_mode" state is combined with verbose level-1.

Mar 11th, 2004 - G.Cosmo  (geomnav-V06-00-02)
------------------------
- Added "check_mode" state for navigators. The state can be activated by
  a new UI command (geometry/navigator/check_mode [true/false]) and will
  force more strict and less tolerant checks in step/safety computation to
  verify the correctness of solids' response in the geometry.
- Reorganised verbosity levels. Added more useful information activated
  when in G4VERBOSE mode and verbosity level selected.
  Fixed output formatting when entering/exiting verbose blocks.

Feb 27th, 2004 - G.Cosmo  (geomnav-V06-00-01)
------------------------
- G4Navigator.cc:
  o Fixed old outstanding bug in ComputeStep() for the location of the
    the local point in the calculation of a valid exit normal. (V.Grichine)

Feb  9th, 2004 - J.Apostolakis  (geomnav-V06-00-00)
------------------------------
- G4PropagatorInField.cc:
  o ReEstimateEndpoint:  Changed to cope with a failure of AccurateAdvance,
                         by calling it iteratively up maximum 20 times.
  o SetVerboseLevel, now forwards the verbosity (minus 3) to integration driver

Dec 11th, 2003 - J.Apostolakis  (geomnav-V05-02-15)
------------------------------
- G4PropagatorInField.cc:
  o LocateIntersectionPoint: Refined re-setting of finalSection.
    --> Endpoint recalculation is returned only for final section.
    (trial fix in -14 is replaced by above code)
  o Fixed ReEstimateEndPoint which ignored return code of AccurateAdvance
    and moved to short end-point for long requests
    It now leaves the endpoint unchanged, when it cannot improve it.
  o Few format changes for PrintStatus

Dec 10th, 2003 - J.Apostolakis  (geomnav-V05-02-14)
------------------------------
- G4PropagatorInField.cc on top of latest (not 1.7):
  o Fix for the case where two previous corrections are 'operational'
     Problem if the current endpoint is not the final one, and it has been
     recalculated, and we need to go beyond the current section to the
     final one -- the recalcuted endpoint no longer valid!

Dec 10th, 2003 - J.Apostolakis  (geomnav-V05-02-13)
------------------------------
- G4PropagatorInField.cc:
  o Gone back to version 1.7, without the fix in LocateIntersectionPoint
      for the "long-standing error".

Dec  5th, 2003 - G.Cosmo - (geomnav-V05-02-12)
------------------------
- G4TransportationManager.cc:
  o removed initialisation of allocators for navigation levels, where they
    were introduced as workaround for solving static initialisation a long
    time ago. Now moved to "volumes" module, where they should belong, in
    G4TouchableHistory.cc.
- Restored original unit-tests, using inherited navigator.
  --> Requires geomvol-V05-02-08

Dec  4th, 2003 - J.Apostolakis  (geomnav-V05-02-11)
------------------------------
- G4PropagatorInField.cc
  o Corrected placement of #endif for two #ifdef VERBOSE

Dec  2nd, 2003 - J.Apostolakis  (geomnav-V05-02-10)
------------------------------
- G4PropagatorInField[.hh.cc]:
   o Fixed LocateIntersectionPoint for long-standing error.
     A section of the chord was not considered in use case where
     a previous chord at first appeared to have an intersection, but did not.

Nov 26th, 2003 - J.Apostolakis  (geomnav-V05-02-09)
------------------------------
- G4PropagatorInField[.hh.cc]:
  o Added argument Method LocateIntersectionPoint G4bool& recalculatedEndPt
    to return 'true' if the endpoint has been recalculated.
    This fixes a problem that can occasionally cause the skipping of a volume
    boundary - in the case when a re-integration was done near a boundary,
    because the new endpoint was previously not passed back.
  o ComputeStep also changed to accept above recalculation.
  o New method GetVerboseLevel(),  closer to std naming than Verbose()

Nov 14th, 2003 - J.Apostolakis  (geomnav-V05-02-08)
------------------------------
- Retagged the files of tag "geomnav-V05-02-07", due to tagging with same
  name incorrectly files in another directory and, as such confusing Bonsai.

Nov 13th, 2003 - J.Apostolakis  (geomnav-V05-02-07)
------------------------------
- G4PropagatorInField[.hh.icc.cc]:
  o Pass safety sphere information to G4ChordFinder for optimisation
  o Including G4ChordFinder.hh only in .cc file
- Requires and coworks with "field-V05-02-08" tag.


Nov 10th, 2003 - G.Cosmo  (geomnav-V05-02-06)
------------------------
- G4Navigator[.hh.icc.cc] - methods review:
  o Removed obsolete methods: IsExitNormalValid(), GetLocalExitNormal().
  o Renamed method LocateGlobalPointAndSetup(p,v,history) to
    ResetHistoryAndLocate(p,v,history).
  o Moved to protected the following methods: GetCurrentLocalCoordinate(),
    ComputeLocalPoint(), ComputeLocalAxis(), NetTranslation(),
    NetRotation(), EnteredDaughterVolume().
  o Fixed consistency of inline/not-inline implementations of methods.
- Coworks with tag "tracking-V05-02-03".

Nov 6th, 2003 - J.Apostolakis  (geomnav-V05-02-05)
-----------------------------
- G4PropagatorInField[.hh.icc.cc]:
  o Implements move of EpsilonMin / Max to G4FieldManager.
- Requires and coworks with "field-V05-02-04" or later tag.

Nov 6th, 2003 - G.Cosmo  (geomnav-V05-02-04)
-----------------------
- G4Navigator[.hh.icc.cc]:
  o Made relevant methods virtual to verify performance impact.
    If tests will behave reasonably, a further refinement in the
    design of the class will be applied, in view of a more consistent
    design review next year.

Nov 3rd, 2003 - G.Cosmo  (geomnav-V05-02-03)
-----------------------
- Code cleanup and headers inclusion review
  (replaced by forward declarations where necessary).
- Added build system to tests. Cleared compilation warnings.

Oct 29th, 2003 - J.Apostolakis  (geomnav-V05-02-02)
------------------------------
- G4PropagatorInField:
  Added option to turn On/Off the optimisation of using the safety
  in calling G4Navigator.
- Unit tests: moved test testG4NavigatorX, X=1,2,3,4,5,6 here from
  "volumes" module.

Oct 24th, 2003 - G.Cosmo  (geomnav-V05-02-01)
------------------------
- Migrated calls to G4Exception to new scheme.
- Fixed compilation warning in G4PropagationInField.

Sep 29th, 2003 - G.Cosmo  (geomnav-V05-02-00)
------------------------
- Created.
  Imported classes from "volumes", "management" and "verification" modules:
    G4AuxiliaryNavServices[.hh.icc]		- from geometry/volumes
    G4GeometryMessenger[.hh.cc]			-	"	"
    G4Navigator[.hh.icc.cc]			-	"	"
    G4NormalNavigation[.hh.icc.cc]		-	"	"
    G4ParameterisedNavigation[.hh.icc.cc]	-	"	"
    G4PropagatorInField[.hh.icc.cc]		-	"	"
    G4ReplicaNavigation[.hh.icc.cc]		-	"	"
    G4TransportationManager[.hh.icc.cc]		-	"	"
    G4VoxelNavigation[.hh.icc.cc]		-	"	"
    G4DrawVoxels[.hh.cc]			- from geometry/management
    G4GeomTest*[.hh.cc]				- from geometry/verification
- Cleared call to PV->Setup() according to changes in G4VPhysicalVolume.
  Affected files: G4Navigator[.icc.cc], G4ParameterisedNavigation[.icc.cc],
                  G4VoxelNavigation[.icc.cc], G4ReplicaNavigation[.icc.cc],
                  G4NormalNavigation[.icc.cc].
- G4DrawVoxels: retrieve top transformation through touchable history in
  method DrawVoxels(). Removed old method GetAbsoluteTransformation().
- G4GeomTestErrorList.cc: retrieve top transformation through touchable
  history in method FindGlobalCoordinateSystem().

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Imported History file from old geometry/verification module
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

May 20th, 2003          G.Cosmo  (geomver-V05-01-00)
- G4GeomTestVolume[.hh.cc]:
  o Added methods TestRecursiveLine() and TestRecursiveCylinder() for
    allowing recursion on line_test and cylinder_test respectively.
  o Introduced ability to control depth and starting level of recursion.

Jul 30th, 2002          G.Cosmo  (geomver-V04-01-00)
- G4GeomTestVolume.cc: fixed recursive call to G4GeomTestVolume passing also
  'tolerance' as argument in the recursive test algorithm.

Apr 19th, 2002          G.Cosmo  (geomver-V04-00-00)
- Moved inline constructors and destructors to no inline.
  Affected files: G4GeomTestStreamLogger[.hh.cc].

Oct 24th, 2001          G.Cosmo  (geomver-V03-02-02)
- Fixed compilation error and warnings on HP-aCC. Modified files:
  G4GeomTestVolume.cc, G4GeomTestStreamLogger.cc.

Oct 24th, 2001          G.Cosmo  (geomver-V03-02-01)
- Moved messenger to geometry/volumes and renamed G4GeometryMessenger.
- Removed dependencies from intercoms and geometry/volumes.

Oct 22nd, 2001		G.Cosmo  (geomver-V03-02-00)
- Added "/geomtest/tolerance" command to set custom error tolerance.
  Added Set/GetTolerance() methods to G4GeomTestVolume class.
- Introduced additional diagnostics in G4GeomTestStreamLogger to report
  in case no intersections/overlaps are detected.

Oct 16th, 2001		G.Cosmo
- Added messenger for geometry overlaps testing.
- General source code formatting.
- G4TestGeom* classes implementation by D.C.Williams (UCSC, BaBar).
