84 void G4hParametrisedLossModel::InitializeMe()
88 theZieglerFactor =
eV*
cm2*1.0e-15 ;
99 if(zi77p == modelName) {
101 highEnergyLimit = 100.0*
MeV;
102 lowEnergyLimit = 1.0*
keV;
104 }
else if(zi77He == modelName) {
106 highEnergyLimit = 10.0*
MeV/4.0;
107 lowEnergyLimit = 1.0*
keV/4.0;
109 }
else if(zi85p == modelName) {
111 highEnergyLimit = 100.0*
MeV;
112 lowEnergyLimit = 1.0*
keV;
114 }
else if(zi00p == modelName ) {
116 highEnergyLimit = 100.0*
MeV;
117 lowEnergyLimit = 1.0*
keV;
119 }
else if(ir49p == modelName || blank == modelName) {
121 highEnergyLimit = 2.0*
MeV;
122 lowEnergyLimit = 1.0*
keV;
124 }
else if(ir49He == modelName) {
126 highEnergyLimit = 10.0*
MeV/4.0;
127 lowEnergyLimit = 1.0*
keV/4.0;
136 highEnergyLimit = 2.0*
MeV;
137 lowEnergyLimit = 1.0*
keV;
138 G4cout <<
"G4hParametrisedLossModel Warning: <" << modelName
139 <<
"> is unknown - default <"
140 << ir49p <<
">" <<
" is used for Electronic Stopping"
155 delete eStopingPowerTable;
166 if (scaledEnergy < lowEnergyLimit) {
167 if (modelName !=
"QAO") factor *= std::sqrt(scaledEnergy/lowEnergyLimit);
168 scaledEnergy = lowEnergyLimit;
170 G4double eloss = StoppingPower(material,scaledEnergy) * factor;
181 G4double scaledEnergy = kineticEnergy
185 if (scaledEnergy < lowEnergyLimit) {
186 if (modelName !=
"QAO") factor *= std::sqrt(scaledEnergy/lowEnergyLimit);
187 scaledEnergy = lowEnergyLimit;
189 G4double eloss = StoppingPower(material,scaledEnergy) * factor;
199 return lowEnergyLimit;
207 return highEnergyLimit;
213 return lowEnergyLimit;
220 return highEnergyLimit;
247 const G4double* theAtomicNumDensityVector =
252 if( (eStopingPowerTable->
HasMaterial(material)) ) {
254 eloss = eStopingPowerTable->
StoppingPower(material, kineticEnergy);
255 if (
"QAO" != modelName) {
257 if(1 < numberOfElements) {
261 for (
G4int iel=0; iel<numberOfElements; iel++) {
262 nAtoms += theAtomsVector[iel];
269 }
else if(1 == numberOfElements) {
276 }
else if( MolecIsInZiegler1988(material)) {
285 for (
G4int i=0; i<numberOfElements; i++) {
286 const G4Element* element = (*theElementVector)[i] ;
289 * theAtomicNumDensityVector[i] ;
291 * theAtomicNumDensityVector[i] ;
295 eloss *= ChemicalFactor(kineticEnergy, eloss125) ;
303 for (
G4int i=0; i<numberOfElements; i++)
305 const G4Element* element = (*theElementVector)[i] ;
308 * theAtomicNumDensityVector[i];
316 G4bool G4hParametrisedLossModel::MolecIsInZiegler1988(
325 if (myFormula == chFormula )
return false ;
335 if( theState ==
kStateGas && myFormula == chFormula)
return false ;
337 const size_t numberOfMolecula = 53 ;
343 "H_2O",
"C_2H_4O",
"C_3H_6O",
"C_2H_2",
"C_H_3OH",
344 "C_2H_5OH",
"C_3H_7OH",
"C_3H_4",
"NH_3",
"C_14H_10",
345 "C_6H_6",
"C_4H_10",
"C_4H_6",
"C_4H_8O",
"CCl_4",
346 "CF_4",
"C_6H_8",
"C_6H_12",
"C_6H_10O",
"C_6H_10",
347 "C_8H_16",
"C_5H_10",
"C_5H_8",
"C_3H_6-Cyclopropane",
"C_2H_4F_2",
348 "C_2H_2F_2",
"C_4H_8O_2",
"C_2H_6",
"C_2F_6",
"C_2H_6O",
349 "C_3H_6O",
"C_4H_10O",
"C_2H_4",
"C_2H_4O",
"C_2H_4S",
350 "SH_2",
"CH_4",
"CCLF_3",
"CCl_2F_2",
"CHCl_2F",
351 "(CH_3)_2S",
"N_2O",
"C_5H_10O",
"C_8H_6",
"(CH_2)_N",
352 "(C_3H_6)_N",
"(C_8H_8)_N",
"C_3H_8",
"C_3H_6-Propylene",
"C_3H_6O",
353 "C_3H_6S",
"C_4H_4S",
"C_7H_8"
356 static G4double expStopping[numberOfMolecula] = {
357 66.1, 190.4, 258.7, 42.2, 141.5,
358 210.9, 279.6, 198.8, 31.0, 267.5,
359 122.8, 311.4, 260.3, 328.9, 391.3,
360 206.6, 374.0, 422.0, 432.0, 398.0,
361 554.0, 353.0, 326.0, 74.6, 220.5,
362 197.4, 362.0, 170.0, 330.5, 211.3,
363 262.3, 349.6, 51.3, 187.0, 236.9,
364 121.9, 35.8, 247.0, 292.6, 268.0,
365 262.3, 49.0, 398.9, 444.0, 22.91,
366 68.0, 155.0, 84.0, 74.2, 254.7,
370 static G4double expCharge[numberOfMolecula] = {
371 HeEff, HeEff, HeEff, 1.0, HeEff,
372 HeEff, HeEff, HeEff, 1.0, 1.0,
373 1.0, HeEff, HeEff, HeEff, HeEff,
374 HeEff, HeEff, HeEff, HeEff, HeEff,
375 HeEff, HeEff, HeEff, 1.0, HeEff,
376 HeEff, HeEff, HeEff, HeEff, HeEff,
377 HeEff, HeEff, 1.0, HeEff, HeEff,
378 HeEff, 1.0, HeEff, HeEff, HeEff,
379 HeEff, 1.0, HeEff, HeEff, 1.0,
380 1.0, 1.0, 1.0, 1.0, HeEff,
384 static G4double numberOfAtomsPerMolecula[numberOfMolecula] = {
385 3.0, 7.0, 10.0, 4.0, 6.0,
386 9.0, 12.0, 7.0, 4.0, 24.0,
387 12.0, 14.0, 10.0, 13.0, 5.0,
388 5.0, 14.0, 18.0, 17.0, 17.0,
389 24.0, 15.0, 13.0, 9.0, 8.0,
390 6.0, 14.0, 8.0, 8.0, 9.0,
391 10.0, 15.0, 6.0, 7.0, 7.0,
392 3.0, 5.0, 5.0, 5.0, 5.0,
393 9.0, 3.0, 16.0, 14.0, 3.0,
394 9.0, 16.0, 11.0, 9.0, 10.0,
399 for (
size_t i=0; i<numberOfMolecula; i++)
401 if(chFormula == name[i]) {
404 (expCharge[i] * numberOfAtomsPerMolecula[i]) ;
405 SetExpStopPower125(exp125) ;
415 G4double G4hParametrisedLossModel::ChemicalFactor(
425 G4double beta = std::sqrt(1.0 - 1.0/(gamma*gamma)) ;
426 G4double beta25 = std::sqrt(1.0 - 1.0/(gamma25*gamma25)) ;
427 G4double beta125 = std::sqrt(1.0 - 1.0/(gamma125*gamma125)) ;
429 G4double factor = 1.0 + (expStopPower125/eloss125 - 1.0) *
430 (1.0 + std::exp( 1.48 * ( beta125/beta25 - 7.0 ) ) ) /
431 (1.0 + std::exp( 1.48 * ( beta/beta25 - 7.0 ) ) ) ;