44 : fClassName(className), fVerbose(verbosity),
45 fThldWarningEnergy(0.), fThldImportantEnergy(0.), fThldTrials(0)
51 : fClassName(className), fVerbose(verbosity),
52 fThldWarningEnergy(0.), fThldImportantEnergy(0.), fThldTrials(0)
77 G4cout << className <<
": Current values for thresholds related to "
78 <<
" the killing of looping tracks: " <<
G4endl
80 <<
" ( below this tracks are killed without warning ) " <<
G4endl
82 <<
" ( above this tracks are given multiple chances ) " <<
G4endl
84 <<
" 'important' tracks, i.e. those above 'important' energy "
96 const char* methodName
99 static std::atomic<unsigned int> numAdviceExcessSteps(0);
101 std::ostringstream msg;
104 msg <<
" Transportation is killing track that is looping or stuck. " <<
G4endl
108 <<
" MeV energy ( pre-Step = " << preStepEn <<
" ) " <<
G4endl;
113 auto material= physVolume->GetLogicalVolume()->GetMaterial();
114 msg <<
" is in volume '" << physVolume->GetName() <<
"', ";
117 msg <<
" its material is '" <<
material->GetName() <<
"'";
118 msg <<
" with density = " <<
material->GetDensity() / gramPerCm3
123 msg <<
" unable to obtain material information (including density.) ";
128 <<
" Length of this step = " << stepData.
GetStepLength() /
mm <<
" mm "
130 <<
" Number of propagation trials = " << numTrials
133 <<
" ( Number of *calls* of Transport/AlongStepDoIt = " << noCalls <<
" )"
136 const G4int numPrints= 5;
137 if( numAdviceExcessSteps++ < numPrints )
139 msg <<
" =============== Recommendations / advice ====================" <<
G4endl;
140 msg <<
" Recommendations to address this issue (Transport-001-ExcessSteps)" <<
G4endl;
141 msg <<
" This warning is controlled by the SetThresholdWarningEnergy "
142 <<
" method of G4Transportation. " << G4endl
143 <<
" Current value of 'warning' threshold= "
145 msg <<
" - If 'unimportant' particles (with energy low enough not to matter in your "
146 <<
" application, then increase its value. " <<
G4endl;
147 msg <<
" - If particles of high-enough energy to be important are being "
148 <<
" killed, you can " << G4endl
149 <<
" a) Increase the trial steps using the method SetThresholdTrials(). "
150 <<
" Particles above the 'important' threshold " << G4endl
151 <<
" will be given this many 'chances'."
154 <<
" b) Increase the energy which you consider 'important' (above this they are"
155 <<
" killed only after extra trials), using the method SetThresholdImportantEnergy() " << G4endl
156 <<
" Note: this can incur a potentially high cost in extra simulation time "
157 <<
" if more tracks require very large number of integration steps . " << G4endl
158 <<
" c) investigate alternative integration methods " << G4endl
159 <<
" e.g. Helical methods for uniform or almost uniform fields"
160 <<
" or else higher order RK methods such as DormandPrince78 "
162 msg <<
" This information is provided " << numPrints <<
" times. Current count: "
163 << numAdviceExcessSteps <<
" / " << numPrints <<
G4endl;
164 msg <<
" =============================================================" <<
G4endl;