Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4IonParametrisedLossModel.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27//
28// ===========================================================================
29// GEANT4 class header file
30//
31// Class: G4IonParametrisedLossModel
32//
33// Base class: G4VEmModel (utils)
34//
35// Author: Anton Lechner (Anton.Lechner@cern.ch)
36//
37// First implementation: 10. 11. 2008
38//
39// Modifications: 03. 02. 2009 - Bug fix iterators (AL)
40// 11. 03. 2009 - Introduced new table handler(G4IonDEDXHandler)
41// and modified method to add/remove tables
42// (tables are now built in init. phase),
43// Minor bug fix in ComputeDEDXPerVolume (AL)
44// 12. 11. 2009 - Added function for switching off scaling
45// of heavy ions from ICRU 73 data
46// 20. 11. 2009 - Added set-method for energy loss limit (AL)
47// 24. 11. 2009 - Bug fix: Range calculation corrected if same
48// materials appears with different cuts in diff.
49// regions (added UpdateRangeCache function and
50// modified BuildRangeVector, ComputeLossForStep
51// functions accordingly, added new cache param.,
52// changed typdef of IonMatCouple).
53// - Removed GetRange function (AL)
54//
55// Class description:
56// Model for computing the energy loss of ions by employing a
57// parameterisation of dE/dx tables (default ICRU 73 tables). For
58// ion-material combinations and/or projectile energies not covered
59// by this model, the G4BraggIonModel and G4BetheBloch models are
60// employed.
61//
62// Comments:
63//
64// ===========================================================================
65
66
67#ifndef G4IONPARAMETRISEDLOSSMODEL_HH
68#define G4IONPARAMETRISEDLOSSMODEL_HH
69
70#include <iomanip>
71#include <list>
72#include <map>
73#include <utility>
75
76#include "G4VEmModel.hh"
77#include "G4EmCorrections.hh"
78#include "G4IonDEDXHandler.hh"
79
80class G4BraggIonModel;
83class G4VIonDEDXTable;
87
88typedef std::list<G4IonDEDXHandler*> LossTableList;
89typedef std::pair<const G4ParticleDefinition*,
91
92
94
95 public:
97 const G4String& name = "ParamICRU73");
98
100
101 virtual void Initialise(
102 const G4ParticleDefinition*, // Projectile
103 const G4DataVector&); // Cut energies
104
105 virtual G4double MinEnergyCut(
106 const G4ParticleDefinition*, // Projectile
107 const G4MaterialCutsCouple*);
108
110 const G4ParticleDefinition*, // Projectile
111 G4double, // Kinetic energy of projectile
112 G4double, // Atomic number
113 G4double, // Mass number
114 G4double, // Energy cut for secondary prod.
115 G4double); // Maximum energy of secondaries
116
118 const G4Material*, // Target material
119 const G4ParticleDefinition*, // Projectile
120 G4double, // Kinetic energy
121 G4double, // Energy cut for secondary prod.
122 G4double); // Maximum energy of secondaries
123
125 const G4Material*, // Target material
126 const G4ParticleDefinition*, // Projectile
127 G4double, // Kinetic energy of projectile
128 G4double); // Energy cut for secondary prod.
129
130 // Function, which computes the continuous energy loss (due to electronic
131 // stopping) for a given pre-step energy and step length by using
132 // range vs energy (and energy vs range) tables
134 const G4MaterialCutsCouple*, // Mat-cuts couple
135 const G4ParticleDefinition*, // Projectile
136 G4double, // Kinetic energy of projectile
137 G4double); // Length of current step
138
139 // Function, which computes the mean energy transfer rate to delta rays
141 const G4Material*, // Target Material
142 const G4ParticleDefinition*, // Projectile
143 G4double, // Kinetic energy of projectile
144 G4double); // Energy cut for secondary prod.
145
146
147 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
149 const G4DynamicParticle*,
150 G4double, // Energy cut for secondary prod.
151 G4double); // Maximum energy of secondaries
152
154 const G4ParticleDefinition*, // Projectile
155 const G4Material*, // Target Material
156 G4double); // Kinetic energy of projectile
157
159 const G4ParticleDefinition*, // Projectile
160 const G4Material*, // Target Material
161 G4double); // Kinetic energy of projectile
162
163 virtual void CorrectionsAlongStep(
164 const G4MaterialCutsCouple*,// Mat.-Cut couple
165 const G4DynamicParticle*, // Dyn. particle
166 G4double&, // Energy loss in current step
167 G4double&,
168 G4double); // Length of current step
169
170 // Function which allows to add additional stopping power tables
171 // in combination with a scaling algorithm, which may depend on dynamic
172 // information like the current particle energy (the table and scaling
173 // algorithm are used via a handler class, which performs e.g.caching or
174 // which applies the scaling of energy and dE/dx values)
175 G4bool AddDEDXTable(const G4String& name,
176 G4VIonDEDXTable* table,
177 G4VIonDEDXScalingAlgorithm* algorithm = 0);
178
179 G4bool RemoveDEDXTable(const G4String& name);
180
181 // Function which allows to switch off scaling of stopping powers of heavy
182 // ions from existing ICRU 73 data
184
185 // Function checking the applicability of physics tables to ion-material
186 // combinations (Note: the energy range of tables is not checked)
187 inline LossTableList::iterator IsApplicable(
188 const G4ParticleDefinition*, // Projectile (ion)
189 const G4Material*); // Target material
190
191 // Function printing a dE/dx table for a given ion-material combination
192 // and a specified energy grid
193 void PrintDEDXTable(
194 const G4ParticleDefinition*, // Projectile (ion)
195 const G4Material*, // Absorber material
196 G4double, // Minimum energy per nucleon
197 G4double, // Maximum energy per nucleon
198 G4int, // Number of bins
199 G4bool); // Logarithmic scaling of energy
200
201 // Function printing a dE/dx table for a given ion-material combination
202 // and a specified energy grid
204 const G4ParticleDefinition*, // Projectile (ion)
205 const G4Material*, // Absorber material
206 G4double, // Minimum energy per nucleon
207 G4double, // Maximum energy per nucleon
208 G4int, // Number of bins
209 G4bool); // Logarithmic scaling of energy
210
211 // Function for setting energy loss limit for stopping power integration
212 inline void SetEnergyLossLimit(G4double ionEnergyLossLimit);
213
214 protected:
215
216 virtual
218 G4double); // Kinetic energy of projectile
219
220 private:
221 // Function which updates parameters concerning the dE/dx calculation
222 // (the parameters are only updated if the particle, the material or
223 // the associated energy cut has changed)
224 void UpdateDEDXCache(
225 const G4ParticleDefinition*, // Projectile (ion)
226 const G4Material*, // Target material
227 G4double cutEnergy); // Energy cut
228
229 // Function which updates parameters concerning the range calculation
230 // (the parameters are only updated if the particle, the material or
231 // the associated energy cut has changed)
232 void UpdateRangeCache(
233 const G4ParticleDefinition*, // Projectile (ion)
234 const G4MaterialCutsCouple*); // Target material
235
236 // Function, which updates parameters concering particle properties
237 inline void UpdateCache(
238 const G4ParticleDefinition*); // Projectile (ion)
239
240 // Function, which builds range vs energy (and energy vs range) vectors
241 // for a given particle, material and energy cut
242 void BuildRangeVector(
243 const G4ParticleDefinition*, // Projectile (ion)
244 const G4MaterialCutsCouple*); // Material cuts couple
245
246 // Assignment operator and copy constructor are hidden:
247 G4IonParametrisedLossModel & operator=(
248 const G4IonParametrisedLossModel &right);
250
251 // ######################################################################
252 // # Models and dE/dx tables for computing the energy loss
253 // #
254 // ######################################################################
255
256 // G4BraggIonModel and G4BetheBlochModel are used for ion-target
257 // combinations and/or projectile energies not covered by parametrisations
258 // adopted by this model:
259 G4BraggIonModel* braggIonModel;
260 G4BetheBlochModel* betheBlochModel;
261
262 // List of dE/dx tables plugged into the model
263 LossTableList lossTableList;
264
265 // ######################################################################
266 // # Maps of Range vs Energy and Energy vs Range vectors
267 // #
268 // ######################################################################
269
270 typedef std::map<IonMatCouple, G4LPhysicsFreeVector*> RangeEnergyTable;
271 RangeEnergyTable r;
272
273 typedef std::map<IonMatCouple, G4LPhysicsFreeVector*> EnergyRangeTable;
274 EnergyRangeTable E;
275
276 // ######################################################################
277 // # Energy grid definitions (e.g. used for computing range-energy
278 // # tables)
279 // ######################################################################
280
281 G4double lowerEnergyEdgeIntegr;
282 G4double upperEnergyEdgeIntegr;
283
284 size_t nmbBins;
285 size_t nmbSubBins;
286
287 // ######################################################################
288 // # Particle change for loss
289 // #
290 // ######################################################################
291
292 // Pointer to particle change object, which is used to set e.g. the
293 // energy loss and secondary delta-electron
294 // used indicating if model is initialized
295 G4ParticleChangeForLoss* particleChangeLoss;
296
297 // ######################################################################
298 // # Corrections and energy loss limit
299 // #
300 // ######################################################################
301
302 // Pointer to an G4EmCorrections object, which is used to compute the
303 // effective ion charge, and other corrections (like high order corrections
304 // to stopping powers)
305 G4EmCorrections* corrections;
306
307 // Corrections factor for effective charge, computed for each particle
308 // step
309 G4double corrFactor;
310
311 // Parameter indicating the maximal fraction of kinetic energy, which
312 // a particle may loose along a step, in order that the simple relation
313 // (dE/dx)*l can still be applied to compute the energy loss (l = step
314 // length)
315 G4double energyLossLimit;
316
317 // ######################################################################
318 // # Cut energies and properties of generic ion
319 // #
320 // ######################################################################
321
322 // Vector containing the current cut energies (the vector index matches
323 // the material-cuts couple index):
324 G4DataVector cutEnergies;
325
326 // Pointer to generic ion and mass of generic ion
327 G4ParticleDefinition* genericIon;
328 G4double genericIonPDGMass;
329
330 // ######################################################################
331 // # "Most-recently-used" cache parameters
332 // #
333 // ######################################################################
334
335 // Cached key (particle) and value information for a faster
336 // access of particle-related information
337 const G4ParticleDefinition* cacheParticle; // Key: Current projectile
338 G4double cacheMass; // Projectile mass
339 G4double cacheElecMassRatio; // Electron-mass ratio
340 G4double cacheChargeSquare; // Charge squared
341
342 // Cached parameters needed during range computations:
343 const G4ParticleDefinition* rangeCacheParticle; // Key: 1) Current ion,
344 const G4MaterialCutsCouple* rangeCacheMatCutsCouple; // 2) Mat-cuts-couple
345 G4PhysicsVector* rangeCacheEnergyRange; // Energy vs range vector
346 G4PhysicsVector* rangeCacheRangeEnergy; // Range vs energy vector
347
348 // Cached parameters needed during dE/dx computations:
349 const G4ParticleDefinition* dedxCacheParticle; // Key: 1) Current ion,
350 const G4Material* dedxCacheMaterial; // 2) material and
351 G4double dedxCacheEnergyCut; // 3) cut energy
352 LossTableList::iterator dedxCacheIter; // Responsible dE/dx table
353 G4double dedxCacheTransitionEnergy; // Transition energy between
354 // parameterization and
355 // Bethe-Bloch model
356 G4double dedxCacheTransitionFactor; // Factor for smoothing the dE/dx
357 // values in the transition region
358 G4double dedxCacheGenIonMassRatio; // Ratio of generic ion mass
359 // and current particle mass
360};
361
362
363#include "G4IonParametrisedLossModel.icc"
364
365#endif
std::list< G4IonDEDXHandler * > LossTableList
std::pair< const G4ParticleDefinition *, const G4MaterialCutsCouple * > IonMatCouple
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition *, G4double)
virtual G4double GetParticleCharge(const G4ParticleDefinition *, const G4Material *, G4double)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double, G4double, G4double, G4double, G4double)
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *)
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double)
LossTableList::iterator IsApplicable(const G4ParticleDefinition *, const G4Material *)
void PrintDEDXTableHandlers(const G4ParticleDefinition *, const G4Material *, G4double, G4double, G4int, G4bool)
G4double DeltaRayMeanEnergyTransferRate(const G4Material *, const G4ParticleDefinition *, G4double, G4double)
G4bool RemoveDEDXTable(const G4String &name)
G4double ComputeLossForStep(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double, G4double)
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &, G4double &, G4double)
G4bool AddDEDXTable(const G4String &name, G4VIonDEDXTable *table, G4VIonDEDXScalingAlgorithm *algorithm=0)
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double, G4double)
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double, G4double, G4double)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double)
void SetEnergyLossLimit(G4double ionEnergyLossLimit)
void PrintDEDXTable(const G4ParticleDefinition *, const G4Material *, G4double, G4double, G4int, G4bool)