Geant4-11
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
G4hICRU49He Class Reference

#include <G4hICRU49He.hh>

Inheritance diagram for G4hICRU49He:
G4VhElectronicStoppingPower

Public Member Functions

G4double ElectronicStoppingPower (G4double z, G4double kineticEnergy) const override
 
 G4hICRU49He ()
 
G4bool HasMaterial (const G4Material *material) override
 
G4double StoppingPower (const G4Material *material, G4double kineticEnergy) override
 
 ~G4hICRU49He ()
 

Protected Member Functions

G4double GetHeMassAMU () const
 
G4double HeEffChargeSquare (const G4double z, const G4double kineticEnergyHe) const
 

Private Member Functions

void SetMoleculaNumber (G4int number)
 

Private Attributes

G4int iMolecula
 
G4double rateMass
 
const G4double theHeMassAMU
 

Detailed Description

Definition at line 58 of file G4hICRU49He.hh.

Constructor & Destructor Documentation

◆ G4hICRU49He()

G4hICRU49He::G4hICRU49He ( )
explicit

Definition at line 67 of file G4hICRU49He.cc.

68 rateMass(4.0026/1.007276),
69 iMolecula(0)
70{;}
G4double rateMass
Definition: G4hICRU49He.hh:75
G4int iMolecula
Definition: G4hICRU49He.hh:78

◆ ~G4hICRU49He()

G4hICRU49He::~G4hICRU49He ( )

Definition at line 74 of file G4hICRU49He.cc.

75{;}

Member Function Documentation

◆ ElectronicStoppingPower()

G4double G4hICRU49He::ElectronicStoppingPower ( G4double  z,
G4double  kineticEnergy 
) const
overridevirtual

Implements G4VhElectronicStoppingPower.

Definition at line 204 of file G4hICRU49He.cc.

206{
207 G4double ionloss ;
208 G4int i = G4int(z)-1 ; // index of atom
209 if(i < 0) i = 0 ;
210 if(i > 91) i = 91 ;
211
212 // The data and the fit from:
213 // ICRU Report 49, 1993. Ziegler's type of parametrisations
214 // Reduced kinetic energy
215
216 // He energy in internal units of parametrisation formula (MeV)
217 G4double T = kineticEnergy*rateMass/MeV ;
218
219 static const G4double a[92][5] = {
220 {0.35485, 0.6456, 6.01525, 20.8933, 4.3515
221 },{ 0.58, 0.59, 6.3, 130.0, 44.07
222 },{ 1.42, 0.49, 12.25, 32.0, 9.161
223 },{ 2.1895, 0.47183,7.2362, 134.30, 197.96
224 },{ 3.691, 0.4128, 18.48, 50.72, 9.0
225 },{ 3.83523, 0.42993,12.6125, 227.41, 188.97
226 },{ 1.9259, 0.5550, 27.15125, 26.0665, 6.2768
227 },{ 2.81015, 0.4759, 50.0253, 10.556, 1.0382
228 },{ 1.533, 0.531, 40.44, 18.41, 2.718
229 },{ 2.303, 0.4861, 37.01, 37.96, 5.092
230 },{ 9.894, 0.3081, 23.65, 0.384, 92.93
231 },{ 4.3, 0.47, 34.3, 3.3, 12.74
232 },{ 2.5, 0.625, 45.7, 0.1, 4.359
233 },{ 2.1, 0.65, 49.34, 1.788, 4.133
234 },{ 1.729, 0.6562, 53.41, 2.405, 3.845
235 },{ 1.402, 0.6791, 58.98, 3.528, 3.211
236 },{ 1.117, 0.7044, 69.69, 3.705, 2.156
237 },{ 2.291, 0.6284, 73.88, 4.478, 2.066
238 },{ 8.554, 0.3817, 83.61, 11.84, 1.875
239 },{ 6.297, 0.4622, 65.39, 10.14, 5.036
240 },{ 5.307, 0.4918, 61.74, 12.4, 6.665
241 },{ 4.71, 0.5087, 65.28, 8.806, 5.948
242 },{ 6.151, 0.4524, 83.0, 18.31, 2.71
243 },{ 6.57, 0.4322, 84.76, 15.53, 2.779
244 },{ 5.738, 0.4492, 84.6, 14.18, 3.101
245 },{ 5.013, 0.4707, 85.8, 16.55, 3.211
246 },{ 4.32, 0.4947, 76.14, 10.85, 5.441
247 },{ 4.652, 0.4571, 80.73, 22.0, 4.952
248 },{ 3.114, 0.5236, 76.67, 7.62, 6.385
249 },{ 3.114, 0.5236, 76.67, 7.62, 7.502
250 },{ 3.114, 0.5236, 76.67, 7.62, 8.514
251 },{ 5.746, 0.4662, 79.24, 1.185, 7.993
252 },{ 2.792, 0.6346, 106.1, 0.2986, 2.331
253 },{ 4.667, 0.5095, 124.3, 2.102, 1.667
254 },{ 2.44, 0.6346, 105.0, 0.83, 2.851
255 },{ 1.413, 0.7377, 147.9, 1.466, 1.016
256 },{ 11.72, 0.3826, 102.8, 9.231, 4.371
257 },{ 7.126, 0.4804, 119.3, 5.784, 2.454
258 },{ 11.61, 0.3955, 146.7, 7.031, 1.423
259 },{ 10.99, 0.41, 163.9, 7.1, 1.052
260 },{ 9.241, 0.4275, 163.1, 7.954, 1.102
261 },{ 9.276, 0.418, 157.1, 8.038, 1.29
262 },{ 3.999, 0.6152, 97.6, 1.297, 5.792
263 },{ 4.306, 0.5658, 97.99, 5.514, 5.754
264 },{ 3.615, 0.6197, 86.26, 0.333, 8.689
265 },{ 5.8, 0.49, 147.2, 6.903, 1.289
266 },{ 5.6, 0.49, 130.0, 10.0, 2.844
267 },{ 3.55, 0.6068, 124.7, 1.112, 3.119
268 },{ 3.6, 0.62, 105.8, 0.1692, 6.026
269 },{ 5.4, 0.53, 103.1, 3.931, 7.767
270 },{ 3.97, 0.6459, 131.8, 0.2233, 2.723
271 },{ 3.65, 0.64, 126.8, 0.6834, 3.411
272 },{ 3.118, 0.6519, 164.9, 1.208, 1.51
273 },{ 3.949, 0.6209, 200.5, 1.878, 0.9126
274 },{ 14.4, 0.3923, 152.5, 8.354, 2.597
275 },{ 10.99, 0.4599, 138.4, 4.811, 3.726
276 },{ 16.6, 0.3773, 224.1, 6.28, 0.9121
277 },{ 10.54, 0.4533, 159.3, 4.832, 2.529
278 },{ 10.33, 0.4502, 162.0, 5.132, 2.444
279 },{ 10.15, 0.4471, 165.6, 5.378, 2.328
280 },{ 9.976, 0.4439, 168.0, 5.721, 2.258
281 },{ 9.804, 0.4408, 176.2, 5.675, 1.997
282 },{ 14.22, 0.363, 228.4, 7.024, 1.016
283 },{ 9.952, 0.4318, 233.5, 5.065, 0.9244
284 },{ 9.272, 0.4345, 210.0, 4.911, 1.258
285 },{ 10.13, 0.4146, 225.7, 5.525, 1.055
286 },{ 8.949, 0.4304, 213.3, 5.071, 1.221
287 },{ 11.94, 0.3783, 247.2, 6.655, 0.849
288 },{ 8.472, 0.4405, 195.5, 4.051, 1.604
289 },{ 8.301, 0.4399, 203.7, 3.667, 1.459
290 },{ 6.567, 0.4858, 193.0, 2.65, 1.66
291 },{ 5.951, 0.5016, 196.1, 2.662, 1.589
292 },{ 7.495, 0.4523, 251.4, 3.433, 0.8619
293 },{ 6.335, 0.4825, 255.1, 2.834, 0.8228
294 },{ 4.314, 0.5558, 214.8, 2.354, 1.263
295 },{ 4.02, 0.5681, 219.9, 2.402, 1.191
296 },{ 3.836, 0.5765, 210.2, 2.742, 1.305
297 },{ 4.68, 0.5247, 244.7, 2.749, 0.8962
298 },{ 3.223, 0.5883, 232.7, 2.954, 1.05
299 },{ 2.892, 0.6204, 208.6, 2.415, 1.416
300 },{ 4.728, 0.5522, 217.0, 3.091, 1.386
301 },{ 6.18, 0.52, 170.0, 4.0, 3.224
302 },{ 9.0, 0.47, 198.0, 3.8, 2.032
303 },{ 2.324, 0.6997, 216.0, 1.599, 1.399
304 },{ 1.961, 0.7286, 223.0, 1.621, 1.296
305 },{ 1.75, 0.7427, 350.1, 0.9789, 0.5507
306 },{ 10.31, 0.4613, 261.2, 4.738, 0.9899
307 },{ 7.962, 0.519, 235.7, 4.347, 1.313
308 },{ 6.227, 0.5645, 231.9, 3.961, 1.379
309 },{ 5.246, 0.5947, 228.6, 4.027, 1.432
310 },{ 5.408, 0.5811, 235.7, 3.961, 1.358
311 },{ 5.218, 0.5828, 245.0, 3.838, 1.25}
312 };
313
314 // Free electron gas model
315 if ( T < 0.001 ) {
316 G4double slow = a[i][0] ;
317 G4double shigh = std::log( 1.0 + a[i][3]*1000.0 + a[i][4]*0.001 )
318 * a[i][2]*1000.0 ;
319 ionloss = slow*shigh / (slow + shigh) ;
320 ionloss *= std::sqrt(T*1000.0) ;
321
322 // Main parametrisation
323 } else {
324 G4double slow = a[i][0] * std::pow((T*1000.0), a[i][1]) ;
325 G4double shigh = std::log( 1.0 + a[i][3]/T + a[i][4]*T ) * a[i][2]/T ;
326 ionloss = slow*shigh / (slow + shigh) ;
327
328 }
329 if ( ionloss < 0.0) ionloss = 0.0 ;
330
331 // He effective charge
332 ionloss /= HeEffChargeSquare(z, kineticEnergy*rateMass) ;
333
334 return ionloss;
335}
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double HeEffChargeSquare(const G4double z, const G4double kineticEnergyHe) const

References G4VhElectronicStoppingPower::HeEffChargeSquare(), MeV, and rateMass.

Referenced by StoppingPower().

◆ GetHeMassAMU()

G4double G4VhElectronicStoppingPower::GetHeMassAMU ( ) const
inlineprotectedinherited

◆ HasMaterial()

G4bool G4hICRU49He::HasMaterial ( const G4Material material)
overridevirtual

Implements G4VhElectronicStoppingPower.

Definition at line 79 of file G4hICRU49He.cc.

80{
81 G4String chFormula = material->GetChemicalFormula() ;
82 G4String myFormula = G4String(" ");
83
84 if (myFormula == chFormula ) {
85 if(1 == (material->GetNumberOfElements())) {return true;}
86 return false ;
87 }
88
89 // ICRU Report N49, 1993. Power's model for He.
90 const size_t numberOfMolecula = 30 ;
91 static const G4String name[numberOfMolecula] = {
92 "H_2", "Be-Solid", "C-Solid", "Graphite", "N_2",
93 "O_2", "Al-Solid", "Si-Solid", "Ar-Solid", "Cu-Solid",
94 "Ge", "W-Solid", "Au-Solid", "Pb-Solid", "C_2H_2",
95 "CO_2", "Cellulose-Nitrat", "C_2H_4", "LiF",
96 "CH_4", "Nylon", "Polycarbonate", "(CH_2)_N-Polyetilene", "PMMA",
97 "(C_8H_8)_N", "SiO_2", "CsI", "H_2O", "H_2O-Gas"};
98
99 // Special treatment for water in gas state
100
101 myFormula = G4String("H_2O") ;
102 const G4State theState = material->GetState() ;
103 if( theState == kStateGas && myFormula == chFormula) {
104 chFormula = G4String("H_2O-Gas");
105 }
106
107 // Search for the material in the table
108 for (size_t i=0; i<numberOfMolecula; i++) {
109 if (chFormula == name[i]) {
111 return true ;
112 }
113 }
114 return false ;
115}
G4State
Definition: G4Material.hh:111
@ kStateGas
Definition: G4Material.hh:111
static const G4int numberOfMolecula
void SetMoleculaNumber(G4int number)
Definition: G4hICRU49He.hh:75
const char * name(G4int ptype)
string material
Definition: eplot.py:19

References kStateGas, eplot::material, G4InuclParticleNames::name(), numberOfMolecula, and SetMoleculaNumber().

◆ HeEffChargeSquare()

G4double G4VhElectronicStoppingPower::HeEffChargeSquare ( const G4double  z,
const G4double  kineticEnergyHe 
) const
protectedinherited

This method returns He effective charge square parametrised according to J.F.Ziegler, J.P. Biersack, U. Littmark The Stopping and Range of Ions in Matter, Vol.1, Pergamon Press, 1985

Definition at line 69 of file G4VhElectronicStoppingPower.cc.

72{
73 // The aproximation of He effective charge from:
74 // J.F.Ziegler, J.P. Biersack, U. Littmark
75 // The Stopping and Range of Ions in Matter,
76 // Vol.1, Pergamon Press, 1985
77
78 static const G4double c[6] = {0.2865, 0.1266, -0.001429,
79 0.02402,-0.01135, 0.001475} ;
80
81 G4double e = std::log( std::max( 1.0, kineticEnergyHe/(keV*GetHeMassAMU()))) ;
82 G4double x = c[0] ;
83 G4double y = 1.0 ;
84 for (G4int i=1; i<6; i++) {
85 y *= e ;
86 x += y * c[i] ;
87 }
88
89 G4double w = 7.6 - e ;
90 w = 1.0 + (0.007 + 0.00005*z) * G4Exp( -w*w ) ;
91 w = 4.0 * (1.0 - G4Exp(-x)) * w * w ;
92 return w;
93}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static constexpr double keV
Definition: G4SIunits.hh:202
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References G4Exp(), G4VhElectronicStoppingPower::GetHeMassAMU(), keV, and G4INCL::Math::max().

Referenced by ElectronicStoppingPower(), and StoppingPower().

◆ SetMoleculaNumber()

void G4hICRU49He::SetMoleculaNumber ( G4int  number)
inlineprivate

Definition at line 75 of file G4hICRU49He.hh.

75{iMolecula = number;};

References iMolecula.

Referenced by HasMaterial().

◆ StoppingPower()

G4double G4hICRU49He::StoppingPower ( const G4Material material,
G4double  kineticEnergy 
)
overridevirtual

Implements G4VhElectronicStoppingPower.

Definition at line 119 of file G4hICRU49He.cc.

121{
122 G4double ionloss = 0.0 ;
123
124 // pure material (normally not the case for this function)
125 if(1 == (material->GetNumberOfElements())) {
126 G4double z = material->GetZ() ;
127 ionloss = ElectronicStoppingPower( z, kineticEnergy ) ;
128
129 // The data and the fit from:
130 // ICRU Report N49, 1993. Power's model for He.
131 } else if ( iMolecula < 30 ) {
132
133 // Reduced kinetic energy
134 // in internal units of parametrisation formula (MeV)
135 G4double T = kineticEnergy*rateMass/MeV ;
136
137 static const G4double c[30][7] = {
138 {8.0080, 3.6287, 23.0700, 14.9900, 0.8507, 0.60, 2.0
139 },{ 13.3100, 3.7432, 39.4130, 12.1990, 1.0950, 0.38, 1.4
140 },{ 22.7240, 3.6040, 47.1810, 17.5490, 0.9040, 0.40, 1.4
141 },{ 24.4040, 2.4032, 48.9440, 27.9730, 1.2933, 0.40, 1.6
142 },{ 58.4719, 1.5115, 77.6421, 102.490, 1.5811, 0.50, 2.0
143 },{ 60.5408, 1.6297, 91.7601, 94.1260, 1.3662, 0.50, 2.0
144 },{ 48.4480, 6.4323, 59.2890, 18.3810, 0.4937, 0.48, 1.6
145 },{ 59.0346, 5.1305, 47.0866, 30.0857, 0.3500, 0.60, 2.0
146 },{ 71.8691, 2.8250, 51.1658, 57.1235, 0.4477, 0.60, 2.0
147 },{ 78.3520, 4.0961, 136.731, 28.4470, 1.0621, 0.52, 1.2
148 },{ 120.553, 1.5374, 49.8740, 82.2980, 0.8733, 0.45, 1.6
149 },{ 249.896, 0.6996, -37.274, 248.592, 1.1052, 0.50, 1.5
150 },{ 246.698, 0.6219, -58.391, 292.921, 0.8186, 0.56, 1.8
151 },{ 248.563, 0.6235, -36.8968, 306.960, 1.3214, 0.50, 2.0
152 },{ 25.5860, 1.7125, 154.723, 118.620, 2.2580, 0.50, 2.0
153 },{ 138.294, 25.6413, 231.873, 17.3780, 0.3218, 0.58, 1.3
154 },{ 83.2091, 1.1294, 135.7457, 190.865, 2.3461, 0.50, 2.0
155 },{ 263.542, 1.4754, 1541.446, 781.898, 1.9209, 0.40, 2.0
156 },{ 59.5545, 1.5354, 132.1523, 153.3537, 2.0262, 0.50, 2.0
157 },{ 31.7380, 19.820, 125.2100, 6.8910, 0.7242, 0.50, 1.1
158 },{ 31.7549, 1.5682, 97.4777, 106.0774, 2.3204, 0.50, 2.0
159 },{ 230.465, 4.8967, 1845.320, 358.641, 1.0774, 0.46, 1.2
160 },{ 423.444, 5.3761, 1189.114, 319.030, 0.7652, 0.48, 1.5
161 },{ 86.3410, 3.3322, 91.0433, 73.1091, 0.4650, 0.50, 2.0
162 },{ 146.105, 9.4344, 515.1500, 82.8860, 0.6239, 0.55, 1.5
163 },{ 238.050, 5.6901, 372.3575, 146.1835, 0.3992, 0.50, 2.0
164 },{ 124.2338, 2.6730, 133.8175, 99.4109, 0.7776, 0.50, 2.0
165 },{ 221.723, 1.5415, 87.7315, 192.5266, 1.0742, 0.50, 2.0
166 },{ 26.7537, 1.3717, 90.8007, 77.1587, 2.3264, 0.50, 2.0
167 },{ 37.6121, 1.8052, 73.0250, 66.2070, 1.4038, 0.50, 2.0} };
168
169 G4double a1,a2 ;
170
171 // Free electron gas model
172 if ( T < 0.001 ) {
173 G4double T0 = 0.001 ;
174 a1 = 1.0 - G4Exp(-c[iMolecula][1]*std::pow(T0,-2.0+c[iMolecula][5])) ;
175 a2 = (c[iMolecula][0]*std::log(T0)/T0 + c[iMolecula][2]/T0) *
176 G4Exp(-c[iMolecula][4]*std::pow(T0,-c[iMolecula][6])) +
177 c[iMolecula][3]/(T0*T0) ;
178
179 ionloss = a1*a2*std::sqrt(T/T0) ;
180
181 // Main parametrisation
182 } else {
183 a1 = 1.0 - G4Exp(-c[iMolecula][1]*std::pow(T,-2.0+c[iMolecula][5])) ;
184 a2 = (c[iMolecula][0]*std::log(T)/T + c[iMolecula][2]/T) *
185 G4Exp(-c[iMolecula][4]*std::pow(T,-c[iMolecula][6])) +
186 c[iMolecula][3]/(T*T) ;
187 ionloss = a1*a2;
188 }
189
190 // He effective charge
191 G4double z = (material->GetTotNbOfElectPerVolume()) /
192 (material->GetTotNbOfAtomsPerVolume()) ;
193
194 ionloss /= HeEffChargeSquare(z, kineticEnergy*rateMass) ;
195
196 if ( ionloss < 0.0) ionloss = 0.0 ;
197 }
198
199 return ionloss ;
200}
static const G4double T0[78]
G4double ElectronicStoppingPower(G4double z, G4double kineticEnergy) const override
Definition: G4hICRU49He.cc:204

References ElectronicStoppingPower(), G4Exp(), G4VhElectronicStoppingPower::HeEffChargeSquare(), iMolecula, eplot::material, MeV, rateMass, and T0.

Field Documentation

◆ iMolecula

G4int G4hICRU49He::iMolecula
private

Definition at line 78 of file G4hICRU49He.hh.

Referenced by SetMoleculaNumber(), and StoppingPower().

◆ rateMass

G4double G4hICRU49He::rateMass
private

Definition at line 77 of file G4hICRU49He.hh.

Referenced by ElectronicStoppingPower(), and StoppingPower().

◆ theHeMassAMU

const G4double G4VhElectronicStoppingPower::theHeMassAMU
privateinherited

The documentation for this class was generated from the following files: