Import Geant4 10.5.0 source tree
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
$Id: README 100688 2016-10-31 11:21:51Z gcosmo $
|
||||
-------------------------------------------------------------------
|
||||
|
||||
=========================================================
|
||||
@@ -8,70 +7,216 @@ $Id: README 100688 2016-10-31 11:21:51Z gcosmo $
|
||||
field01
|
||||
-------
|
||||
|
||||
Example enabling investigation of tracking in a magnetic field.
|
||||
|
||||
Example that enables investigation of the accuracy and performance of the
|
||||
tracking in a magnetic field.
|
||||
|
||||
The key capabilities of this example are creating a uniform magnetic
|
||||
field interactively using the field messenger.
|
||||
The key Geant4 capabilities demonstrated in this example are:
|
||||
- creating a uniform magnetic field interactively using the field
|
||||
messenger,
|
||||
- choosing the type of Runge Kutta stepper used for integration of the
|
||||
motion of charged particles in the magnetic field,
|
||||
- controlling the thresholds that determine which looping particles are
|
||||
killed by G4Transporation.
|
||||
|
||||
The capabilities are demonstrated in the field.in file:
|
||||
Some of these capabilities are available via interactive commands,
|
||||
implemented in F01FieldMessenger.
|
||||
|
||||
/field/setStepperType 4
|
||||
A. The magnetic field is defined in F01FieldSetup, which is created in
|
||||
the ConstructSDandField() method in the F01DetectorConstruction
|
||||
class.
|
||||
|
||||
/field/setMinStep 0.1 mm
|
||||
B. Choosing the type of stepper -
|
||||
|
||||
/field/update
|
||||
The basic capabilities of choosing the stepper type are demonstrated in the
|
||||
field.in macro file:
|
||||
|
||||
There are several potential choices of the stepper type. Here are some suggestions:
|
||||
/field/setStepperType 145 ## Choose a stepper type ( Tsitouras )
|
||||
|
||||
/field/setStepperType 101 ## Choose an FSAL stepper ( FEqRK1 )
|
||||
|
||||
/field/setMinStep 0.1 mm ## Smaller steps always succeed
|
||||
|
||||
/field/update ## Initialise using parameters above
|
||||
|
||||
In addition it is possible to choose to use a new type of stepper, known
|
||||
as 'First Same as Last' or FSAL, which in each step obtains the field value
|
||||
at the step endpoint and evaluates the 'right hand size' of the equation
|
||||
for the next integration step. This reduces the number of calls to the field
|
||||
evaluation, which can be one the most computationally expensive methods,
|
||||
while providing similar accuracy.
|
||||
|
||||
There are several potential choices of the stepper type. Here are some
|
||||
suggestions:
|
||||
===========================================================================
|
||||
Number Name of Stepper Comments
|
||||
===========================================================================
|
||||
Recommended - new in Geant4 10.3-beta:
|
||||
Recommended - default since Geant4 10.4:
|
||||
|
||||
15 - Dormand Prince 745 : well-known and very efficient embedded method
|
||||
15 - 'DoPri5' or
|
||||
Dormand Prince 745 : Uses a pair 4th & 5th order formulae (like other 4/5
|
||||
well-known and very efficient embedded method
|
||||
methods); their difference is the error estimate.
|
||||
Highly recommended in literature, including
|
||||
Hairer & Wanner, & even Numerical Recipes
|
||||
Hairer & Wanner, & Numerical Recipes
|
||||
Used in several established RK code (e.g. DOPRI5)
|
||||
===========================================================================
|
||||
Good choices for reasonably smooth fields:
|
||||
|
||||
8 - Cash Karp RKF 45 : Old 'embedded' RK method - fairly robust,
|
||||
Uses a pair 4th & 5th order formulae;
|
||||
the difference is the error estimate.
|
||||
Faster than old 'simple' that use two half
|
||||
steps to estimate error.
|
||||
Available since Geant4 1.0
|
||||
|
||||
45 - BogackiShampine45 : More efficient embedded 4/5 pair
|
||||
45 - BogackiShampine45 : more efficient embedded 4/5 pair
|
||||
Used in many applications, including
|
||||
RKSUITE suite.
|
||||
New in Geant4 10.3-beta:
|
||||
|
||||
145 - Tsitouras45 : potentially the most efficient embedded 4/5
|
||||
pair - found in expanded search of parameter
|
||||
space.
|
||||
|
||||
56 - Dormand Prince RK56 : higher order embedded method from authors of DoPri5.
|
||||
Uses a pair 5th & 6th order formulae.
|
||||
|
||||
78 - Dormand Prince RK78 : higher order embedded method from authors of DoPri5.
|
||||
Uses a pair 7th & 8th order formulae.
|
||||
|
||||
9 - NystromRK4 : a specialised Nystrom method for magnetic fields.
|
||||
Reuses the field value at the mid-point of the step,
|
||||
and also provides an analytical estimation of the
|
||||
integration error based on numerical evaluation of
|
||||
fourth order variation in the equation for
|
||||
magnetic field.
|
||||
===========================================================================
|
||||
The new 'First Same as Last' (FSAL) steppers can be chosen in addition:
|
||||
1 - RKFEq1 : FSAL stepper with improved equilibrium properties.
|
||||
When kinks or other anomalies are encountered,
|
||||
and at the start of integration when the best
|
||||
step size is not known, this type of stepper
|
||||
converges faster and more smoothly to good
|
||||
step sizes.
|
||||
===========================================================================
|
||||
Default - good choice for unknown fields:
|
||||
The old default and old first alternative -
|
||||
|
||||
4 - ClassicalRK4 : original Runge-Kutta method, very robust but slower )
|
||||
( obtains error estimate by doing 2 half steps )
|
||||
Good baseline for comparison - long experience of use.
|
||||
May be good alternative for less smooth fields.
|
||||
|
||||
8 - Cash Karp RKF 45 : The oldest 'embedded' RK method in Geant4 -
|
||||
also fairly robust.
|
||||
Faster than ClassicalRK4 for smoother fields,
|
||||
as it does not need two half steps to estimate error.
|
||||
Available since Geant4 1.0
|
||||
|
||||
===========================================================================
|
||||
Good choices for non-smooth fields (with kinks, abrupt changes):
|
||||
Other potential choices for non-smooth fields (with kinks, abrupt changes):
|
||||
|
||||
3 - SimpleHeum : low order, with error obtained from half-steps
|
||||
23 - BogackiShampine23 : lower order embedded method (new in 10.3-beta)
|
||||
===========================================================================
|
||||
|
||||
|
||||
|
||||
|
||||
C. Controlling the killing of looping particles
|
||||
|
||||
|
||||
Occasionally tracks 'looping' in a strong magnetic field, making little
|
||||
progress even over hundreds of integration steps. This is due to a
|
||||
combination of a strong magnetic field and a thin material (gas or vacuum)
|
||||
in which the size of a physics step is substantially larger than the radius
|
||||
of curvature of the track.
|
||||
|
||||
Since the amount of CPU time which can be consumed by one or few such tracks
|
||||
is very large, it is important to limit the number of integration steps
|
||||
spent on these tracks. The module for propagation in field in Geant4
|
||||
flags tracks which take more than a certain number (default 1,000) integration
|
||||
steps without reaching the requested end of the step size, which was
|
||||
determined by the physics and geometry.
|
||||
|
||||
The Geant4 G4Transportation and G4CoupledTransportation processes are tasked
|
||||
to select which of the looping tracks are killed and which survive. To
|
||||
balance the potential significant cost of integrating looping particles,
|
||||
three thresholds exist
|
||||
|
||||
The 'Warning' Energy: a track with energy below this value that is found to
|
||||
loop is killed silently (no warning.)
|
||||
|
||||
Above the 'Warning Energy', if a track is selected for killing a warning is
|
||||
generated.
|
||||
|
||||
The 'Important' Energy: the threshold energy above which a track will survive
|
||||
for multiple steps if found looping.
|
||||
|
||||
number of 'tracking' steps. They will be only be killed only if they still
|
||||
loop after than
|
||||
The number of 'trials': the number of steps that 'important' tracks survive.
|
||||
|
||||
Note that currently only stable particles are killed. ( Refinements to enable
|
||||
toggling whether unstable particles can be killed are in development. )
|
||||
|
||||
This example demonstrate choosing different values for these parametes
|
||||
in the main() method of field01.cc using one of two techniques.
|
||||
|
||||
The first method is new in Geant4 release 10.5, and uses the G4PhysicsListHelper
|
||||
which has methods to choose a pre-selected set of parameter values. The choices
|
||||
are between a set each of low and high thresholds. Either one can be enabled
|
||||
by calling correspondingly
|
||||
- G4PhysicsListHelper::GetPhysicsListHelper()->UseLowLooperThresholds();
|
||||
or
|
||||
- G4PhysicsListHelper::GetPhysicsListHelper()->UseHighLooperThresholds();
|
||||
These methods must be called before the physics is constructed - i.e. typically
|
||||
before RunManager's Initialise() method is called.
|
||||
This works only if either
|
||||
- a modular physics lists is used, or if
|
||||
- the G4ModularPhysicsList and its AddTransporation method are used
|
||||
to create and register a common transportation process for all particles
|
||||
(one for each thread).
|
||||
|
||||
ii) Fine grained control (available in Geant4 versions since 7.0)
|
||||
|
||||
Fine grained control of the Transportation's parameters for looping particles
|
||||
is also possible.
|
||||
|
||||
This is demonstrated in the F01RunAction's ChangeLooperParameters method,
|
||||
which is called by the BeginOfRunAction. There the appropriate
|
||||
Transportation object for the electron is obtained, and its parameters
|
||||
(if valid) are used to overwrite the thresholds in the G4Transportation class.
|
||||
|
||||
For example, to ensure that only looping particles with energy 10 keV are
|
||||
killed silently we change the value of the 'Warning' Energy:
|
||||
|
||||
runAction->SetWarningEnergy( 10.0 * CLHEP::keV );
|
||||
|
||||
[ This is passed along to the registered G4Transportation or
|
||||
G4CoupledTransportation object by the F01RunAction's ChangeLooperParameters.]
|
||||
|
||||
As a result the killing of any (stable) looping track with energy over 10 keV
|
||||
will generate a warning.
|
||||
|
||||
A second configurable energy threshold enables tracks above it to survive a
|
||||
chosen number of 'tracking' steps. They will be only be killed only if they
|
||||
still loop after than number of tracking steps. F01RunAction's methods are
|
||||
used to configure these parameters:
|
||||
|
||||
runAction->SetImportantEnergy( 0.1 * CLHEP::MeV );
|
||||
runAction->SetNumberOfTrials( 30 );
|
||||
|
||||
which the run action passes to the G4Transportation or
|
||||
G4CoupledTransportation object registered for the electron.
|
||||
|
||||
Note that for all pre-configured and modular physics lists share a single
|
||||
Transportation process for all types of particles. So the parameters for
|
||||
killing loopers will be shared by all particle types in this case.
|
||||
|
||||
|
||||
Background Information
|
||||
|
||||
1- GEOMETRY DEFINITION
|
||||
|
||||
The "absorber" is a solid made of a given material.
|
||||
The "Absorber" is a solid made of a given material.
|
||||
|
||||
Three parameters define the absorber :
|
||||
- the material of the absorber,
|
||||
- the thickness of an absorber,
|
||||
- the transverse size of the absorber (the input face is a square).
|
||||
|
||||
The volume "World" contains the "absorber".
|
||||
The volume "World" contains the "Absorber".
|
||||
In this test the parameters of the "World" can be changed , too.
|
||||
|
||||
In addition a transverse uniform magnetic field can be applied.
|
||||
@@ -82,18 +227,22 @@ Background Information
|
||||
|
||||
2- AN EVENT : THE PRIMARY GENERATOR
|
||||
|
||||
The primary kinematic consists of a single particle (proton, Ekin = 1 GeV)
|
||||
The primary kinematic consists of a single particle (electron, Ekin = 0.5 GeV)
|
||||
which hits the
|
||||
absorber perpendicular to the input face. The type of the particle
|
||||
and its energy are set in the F01PrimaryGeneratorAction class, and can
|
||||
be changed via the G4 build-in commands of G4ParticleGun class (see
|
||||
the macros provided with this example).
|
||||
|
||||
It is also possible to change the position of the primary particle vertex
|
||||
or activate its randomization via the commands defined in the
|
||||
F01PrimaryGeneratorMessenger class.
|
||||
|
||||
A RUN is a set of events.
|
||||
|
||||
3- DETECTOR RESPONSE
|
||||
|
||||
The spatial distribution of charged particles transported in magnetic
|
||||
The spatial distribution of charged particles transported in magnetic
|
||||
field is envistigated.
|
||||
A HIT is a record, event per event , of all the
|
||||
informations needed to simulate and analyse the detector response.
|
||||
@@ -114,13 +263,13 @@ Background Information
|
||||
|
||||
5- HOW TO START ?
|
||||
|
||||
- execute field01 in 'batch' mode from macro file e.g.
|
||||
% field01 field01.in
|
||||
- Execute field01 in 'batch' mode from macro file e.g.
|
||||
% ./field01 field01.in
|
||||
|
||||
- execute field01 in 'interactive' mode with visualization e.g.
|
||||
% field01
|
||||
- Execute field01 in 'interactive' mode with visualization e.g.
|
||||
% ./field01
|
||||
....
|
||||
Idle> /control/execute vis.mac
|
||||
Idle> /run/beamOn 1
|
||||
....
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user