Project

General

Profile

Geant4 Particle Transportation » History » Version 6

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

1 1 Soon Jun
h1. Geant4 Particle Transportation
2 1 Soon Jun
3 1 Soon Jun
h2. Top-Down Transportation Chain:
4 1 Soon Jun
5 1 Soon Jun
## test the existence of a magnetic field and whether the particle is charged  
6 1 Soon Jun
   if(charged particle && non-zero-BField)  G4PropagatorInField::ComputeStep in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc
7 1 Soon Jun
   else                                      G4Navigator::ComputeStep        in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4Navigator.cc                             
8 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)
9 6 Soon Jun
<pre>epsilon = DeltaOneStep / ProposedStepLength
10 6 Soon Jun
if(epsilon < epsilonMin) epsilon = epsilonMin            (for the case that h is relatively a small step)
11 6 Soon Jun
if(epsilon > epsilonMax) epsilon = epsilonMax            (for the case that h is relatively a large step)
12 6 Soon Jun
</pre>see again G4PropagatorInField::ComputeStep http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4PropagatorInField.cc
13 1 Soon Jun
## do-while loop inside G4PropagatorInField::ComputeStep
14 6 Soon Jun
   until sum(h_i) < step where
15 6 Soon Jun
   h_i (step length taken) =  G4ChordFinder::AdvanceChordLimited in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4ChordFinder.cc
16 1 Soon Jun
   and find the crossing point if the resultant chord intersects with a geometrical boundary with
17 1 Soon Jun
   IntersectChord in http://www-geant4.kek.jp/lxr/source/geometry/navigation/src/G4MultiLevelLocator.cc 
18 1 Soon Jun
## test for a quick advance or an accurate advance inside G4ChordFinder::AdvanceChordLimited
19 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) 
20 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 
21 6 Soon Jun
    where epsilon0 is the local truncated error from the stepper 
22 6 Soon Jun
## G4MagInt_Driver::AccurateAdvance test for h_i < hmin (do-while loop for sum(h_i) < hstep where h_i from either
23 1 Soon Jun
   G4MagInt_Driver::QuickAdvance or G4MagInt_Driver::OneGoodStep
24 1 Soon Jun
## G4MagInt_Driver::QuickAdvance 
25 1 Soon Jun
   OneGoodStep loops over the Stepper and evaluates the truncation error (for-loop test epsilon<epsilon0 before break) (and then adjust the step size control if necessary)
26 1 Soon Jun
   G4MagInt_Driver::QuickAdvance call Stepper and DistanceChord
27 1 Soon Jun
   default Stepper: G4ClassicalRK4::DumbStepper in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4ClassicalRK4.cc 
28 4 Soon Jun
## G4ClassicalRK4::Stepper calls G4EquationOfMotion::EvaluateRhsReturnB in http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/src/G4EquationOfMotion.cc
29 2 Soon Jun
## G4EquationOfMotion::EvaluateRhsReturnB calls G4MagneticField::GetFieldValue (pure virtual) in  http://www-geant4.kek.jp/lxr/source/geometry/magneticfield/include/G4MagneticField.hh 
30 3 Soon Jun
31 1 Soon Jun
h2. Soon's (scratch) Diagram: