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
G4IonDEDXScalingICRU73.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//
27//
28// ===========================================================================
29// GEANT4 class header file
30//
31// Class: G4IonDEDXScalingICRU73
32//
33// Base class: G4VIonDEDXScalingAlgorithm
34//
35// Author: Anton Lechner (Anton.Lechner@cern.ch)
36//
37// First implementation: 10. 05. 2009
38//
39// Modifications: 12. 11. 2009 - Moved all decision logic concerning ICRU 73
40// scaling for heavy ions into this class.
41// Adapting ScalingFactorEnergy class according
42// to changes in base class (AL).
43//
44// Class description:
45// dE/dx scaling algorithm applied on top of ICRU 73 data (for ions not
46// covered by the ICRU 73 report)
47//
48// Comments:
49//
50// ===========================================================================
51
52#ifndef G4IONDEDXSCALINGICRU73_HH
53#define G4IONDEDXSCALINGICRU73_HH
54
55#include "globals.hh"
57#include "G4Material.hh"
59#include <vector>
60
61
63
64 public:
65 G4IonDEDXScalingICRU73(G4int minAtomicNumberIon = 19,
66 G4int maxAtomicNumberIon = 102);
68
69 // Function for scaling the kinetic energy (no scaling by default).
70 // Returns scaling factor for a given ion.
72 const G4ParticleDefinition* particle, // Projectile (ion)
73 const G4Material* material); // Target material
74
75
76 // Function for scaling the dE/dx value (no scaling by default).
77 // Returns scaling factor for a given ion-material couple and
78 // a given kinetic energy.
80 const G4ParticleDefinition* particle, // Projectile (ion)
81 const G4Material*, // Target material
82 G4double kineticEnergy); // Kinetic energy
83
84
85 // Function for defining a base particle for dE/dx calculation.
86 // (no base particle by default). Returns atomic number of base
87 // particle.
89 G4int atomicNumberIon, // Atomic number of ion
90 const G4Material*); // Target material
91
92 private:
93 void UpdateCacheParticle(
94 const G4ParticleDefinition* particle); // Projectile (ion)
95
96 void UpdateCacheMaterial(
97 const G4Material* material); // Target material
98
99 void CreateReferenceParticles();
100
101 G4double EquilibriumCharge(
102 G4double mass, // Ion mass
103 G4double charge, // Ion charge
104 G4double atomicNumberPow, // Power of atomic nmb
105 G4double kineticEnergy); // Kinetic energy
106
107 // Scaling is only applied for ions with atomic numbers in the range
108 // defined by the following parameters:
109 G4int minAtomicNumber;
110 G4int maxAtomicNumber;
111
112 // Some properties of reference particle (Fe) are stored for faster access
113 G4ParticleDefinition* referenceFe;
114 G4int atomicNumberRefFe;
115 G4int massNumberRefFe;
116 G4double atomicNumberRefPow23Fe;
117 G4double chargeRefFe;
118 G4double massRefFe;
119
120 // Some properties of reference particle (Ar) are stored for faster access
121 G4ParticleDefinition* referenceAr;
122 G4int atomicNumberRefAr;
123 G4int massNumberRefAr;
124 G4double atomicNumberRefPow23Ar;
125 G4double chargeRefAr;
126 G4double massRefAr;
127
128 // Flag indicating the use of Fe ions as reference particles
129 G4bool useFe;
130
131 // Some properties of projectiles are stored for faster access
132 const G4ParticleDefinition* cacheParticle;
133 G4int cacheMassNumber;
134 G4int cacheAtomicNumber;
135 G4double cacheAtomicNumberPow23;
136 G4double cacheCharge;
137 G4double cacheMass;
138
139 // Material pointer
140 const G4Material* cacheMaterial;
141};
142
143// ###########################################################################
144
145inline void G4IonDEDXScalingICRU73::UpdateCacheParticle (
146 const G4ParticleDefinition* particle) { // Projectile (ion)
147
148 if(particle != cacheParticle) {
149
150 cacheParticle = particle;
151 cacheAtomicNumber = particle -> GetAtomicNumber();
152 cacheMassNumber = particle -> GetAtomicMass();
153 cacheCharge = particle -> GetPDGCharge();
154 cacheMass = particle -> GetPDGMass();
155 cacheAtomicNumberPow23 = std::pow(G4double(cacheAtomicNumber), 2./3.);
156 }
157}
158
159// ###########################################################################
160
161inline void G4IonDEDXScalingICRU73::UpdateCacheMaterial (
162 const G4Material* material) { // Target material
163
164 if(cacheMaterial != material) {
165
166 cacheMaterial = material;
167
168 useFe = true;
169
170 size_t nmbElements = material -> GetNumberOfElements();
171 if( nmbElements > 1 ) useFe = false;
172
173 if( material -> GetName() == "G4_WATER" ) useFe = true;
174 }
175}
176
177// ###########################################################################
178
179inline G4double G4IonDEDXScalingICRU73::EquilibriumCharge(
180 G4double mass,
181 G4double charge,
182 G4double atomicNumberPow,
183 G4double kineticEnergy) {
184
185 G4double totalEnergy = kineticEnergy + mass;
186 G4double betaSquared = kineticEnergy *
187 (totalEnergy + mass) / (totalEnergy * totalEnergy);
188
189 G4double beta = std::sqrt( betaSquared );
190
191 G4double velOverBohrVel = beta / CLHEP::fine_structure_const;
192
193 G4double q1 = 1.0 - std::exp(-velOverBohrVel / atomicNumberPow);
194
195 return q1 * charge;
196}
197
198// ###########################################################################
199
200#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4double ScalingFactorDEDX(const G4ParticleDefinition *particle, const G4Material *, G4double kineticEnergy)
G4int AtomicNumberBaseIon(G4int atomicNumberIon, const G4Material *)
G4double ScalingFactorEnergy(const G4ParticleDefinition *particle, const G4Material *material)