## Geant4 Particle Transportation » History » Version 7

Soon Jun, 06/17/2015 06:40 PM

 1 2 3 1 Soon Jun `h1. Geant4 Particle Transportation` 1 Soon Jun 1 Soon Jun `h2. Top-Down Transportation Chain:` 1 Soon Jun 1 Soon Jun `## test the existence of a magnetic field and whether the particle is charged ` 1 Soon Jun ` if(charged particle && non-zero-BField) G4PropagatorInField::ComputeStep in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc` 1 Soon Jun ` else G4Navigator::ComputeStep in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4Navigator.cc ` 6 Soon Jun `## determine **epsilon** (local error bound) using **DeltaOneStep** (distance unit, default = 0.01 mm), **epsilonMin** and **epsilonMax** (unit-less), and the given physical step size (h)` 6 Soon Jun `
epsilon = DeltaOneStep / ProposedStepLength`
6  Soon Jun  `if(epsilon < epsilonMin) epsilon = epsilonMin            (for the case that h is relatively a small step)`
6  Soon Jun  `if(epsilon > epsilonMax) epsilon = epsilonMax            (for the case that h is relatively a large step)`
6  Soon Jun  `
see again G4PropagatorInField::ComputeStep http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc` 1 Soon Jun `## do-while loop inside G4PropagatorInField::ComputeStep` 6 Soon Jun ` until sum(h_i) < step where` 6 Soon Jun ` h_i (step length taken) = G4ChordFinder::AdvanceChordLimited in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4ChordFinder.cc` 7 Soon Jun ` and find the crossing point **if** the resultant chord intersects with a geometrical boundary with` 7 Soon Jun ` IntersectChord in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4MultiLevelLocator.cc` 7 Soon Jun ` The accuracy of the intersection is controlled by **DeltaIntersection** (distance unit, default = 1 micron) which is the distance between the segment and ` 7 Soon Jun ` the ending position of the stepper near the volume boundary by the iterative approach inside the routine. ` 1 Soon Jun `## test for a quick advance or an accurate advance inside G4ChordFinder::AdvanceChordLimited` 6 Soon Jun ` do while QuickAdvance if (delta < DeltaChord) where delta is the shortest distance to chord (**sagitta**) and **DeltaChord** is the **miss-distance** (default = 0.25mm or set to the smallest volume dimension) ` 6 Soon Jun ` then if (step possible x epsilon) > epsilon0) invoke G4MagInt_Driver::AccurateAdvance in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4MagIntegratorDriver.cc ` 6 Soon Jun ` where epsilon0 is the local truncated error from the stepper ` 6 Soon Jun `## G4MagInt_Driver::AccurateAdvance test for h_i < hmin (do-while loop for sum(h_i) < hstep where h_i from either` 1 Soon Jun ` G4MagInt_Driver::QuickAdvance or G4MagInt_Driver::OneGoodStep` 1 Soon Jun `## G4MagInt_Driver::QuickAdvance ` 1 Soon Jun ` OneGoodStep loops over the Stepper and evaluates the truncation error (for-loop test epsilon