73 numberOfMaterials = 6;
119 G4bool isInCharge =
false;
120 G4bool hasMaterial =
false;
125 && hasMaterial) isInCharge =
true;
136 G4bool isInCharge =
false;
137 G4bool hasMaterial =
false;
142 && hasMaterial) isInCharge =
true;
154 G4double eloss = EnergyLoss(material,energy,zParticle) ;
167 G4double eloss = EnergyLoss(material,kineticEnergy,zParticle) ;
178 G4int nbOfShell = GetNumberOfShell(material);
179 if(nbOfShell < 1) nbOfShell = 1;
182 G4double v = c_light * std::sqrt( 2.0 * kineticEnergy / proton_mass_c2 );
183 G4double coeff = twopi * proton_mass_c2 *
184 (material-> GetTotNbOfElectPerVolume()) /
186 G4double fBetheVelocity = fine_structure_const * c_light / v;
187 coeff *= fine_structure_const * fine_structure_const * hbarc_squared /
190 G4double l0Term = 0, l1Term = 0, l2Term = 0;
192 for (
G4int nos = 0 ; nos < nbOfShell ; nos++){
195 G4double NormalizedEnergy = ( 2.0 * electron_mass_c2 * v * v ) /
196 ( c_squared * GetShellEnergy(material,nos) );
198 G4double shStrength = GetShellStrength(material,nos);
200 l0 = GetL0(NormalizedEnergy);
201 l0Term += shStrength * l0;
203 l1 = GetL1(NormalizedEnergy);
204 l1Term += shStrength * l1;
206 l2 = GetL2(NormalizedEnergy);
207 l2Term += shStrength * l2;
210 dedx = coeff * zParticle * zParticle * (l0Term
211 + zParticle * fBetheVelocity * l1Term
212 + zParticle * zParticle * fBetheVelocity * fBetheVelocity * l2Term);
220G4int G4QAOLowEnergyLoss::GetNumberOfShell(
const G4Material* material)
const
227 for(
G4int i=0; i<numberOfMaterials; i++) {
229 if(materialAvailable[i] ==
Z){
230 nShell = nbofShellForMaterial[i];
234 nShell = fNumberOfShells[
Z];
242 G4int nbOfTheShell)
const
245 G4double shellEnergy = alShellEnergy[0];
247 if(material->
GetZ() == 13) shellEnergy = alShellEnergy[nbOfTheShell];
248 else if(material->
GetZ() == 14)shellEnergy = siShellEnergy[nbOfTheShell];
249 else if(material->
GetZ() == 29)shellEnergy = cuShellEnergy[nbOfTheShell];
250 else if(material->
GetZ() == 73)shellEnergy = taShellEnergy[nbOfTheShell];
251 else if(material->
GetZ() == 79)shellEnergy = auShellEnergy[nbOfTheShell];
252 else if(material->
GetZ() == 78)shellEnergy = ptShellEnergy[nbOfTheShell];
254 shellEnergy = GetOscillatorEnergy(material, nbOfTheShell);
258 ed <<
"The model is not available for "
261 G4Exception(
"G4QAOLowEnergyLoss::GetShellEnergy()",
271 G4int nbOfTheShell)
const
278 G4double squaredPlasmonEnergy = 28.816 * 28.816 * 1e-6
280 * (
Z/element->
GetN()) ;
282 G4double plasmonTerm = 0.66667 * GetOccupationNumber(
Z,nbOfTheShell)
283 * squaredPlasmonEnergy / (
Z*
Z) ;
286 ionTerm = ionTerm*ionTerm ;
288 G4double oscShellEnergy = std::sqrt( ionTerm + plasmonTerm );
289 return oscShellEnergy;
295 G4int nbOfTheShell)
const
297 G4double shellStrength = alShellStrength[0];
299 if(material->
GetZ() == 13) shellStrength = alShellStrength[nbOfTheShell];
300 else if(material->
GetZ() == 14)shellStrength =siShellStrength[nbOfTheShell];
301 else if(material->
GetZ() == 29)shellStrength =cuShellStrength[nbOfTheShell];
302 else if(material->
GetZ() == 73)shellStrength =taShellStrength[nbOfTheShell];
303 else if(material->
GetZ() == 79)shellStrength =auShellStrength[nbOfTheShell];
304 else if(material->
GetZ() == 78)shellStrength =ptShellStrength[nbOfTheShell];
307 shellStrength = GetOccupationNumber(
Z,nbOfTheShell) /
Z ;}
311 ed <<
"The model is not available for "
314 G4Exception(
"G4QAOLowEnergyLoss::GetShellStrength()",
317 return shellStrength;
325 G4int indice = ShellNb ;
326 for (
G4int z = 1 ; z <
Z ; z++) {indice += fNumberOfShells[z];}
328 return nbOfElectronPerSubShell[indice+1];
337 for(n = 0;
n < sizeL0;
n++) {
338 if( normEnergy < L0[n][0] )
break;
341 if(n >= sizeL0)
n = sizeL0 - 1 ;
345 G4double bethe = l0p + (l0 - l0p) * ( normEnergy - L0[n-1][0]) /
346 (L0[
n][0] - L0[
n-1][0]);
356 for(n = 0;
n < sizeL1;
n++) {
357 if( normEnergy < L1[n][0] )
break;
360 if(n >= sizeL1)
n = sizeL1 - 1 ;
364 G4double barkas= l1p + (l1 - l1p) * ( normEnergy - L1[n-1][0]) /
365 (L1[
n][0] - L1[
n-1][0]);
374 for(n = 0;
n < sizeL2;
n++) {
375 if( normEnergy < L2[n][0] )
break;
378 if(n >= sizeL2)
n = sizeL2 - 1 ;
382 G4double bloch = l2p + (l2 - l2p) * ( normEnergy - L2[n-1][0]) /
383 (L2[
n][0] - L2[
n-1][0]);
389const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
390const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
392const G4double G4QAOLowEnergyLoss::alShellEnergy[3] ={ 2795e-6, 202e-6, 16.9e-6};
393const G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
394const G4double G4QAOLowEnergyLoss::siShellEnergy[3] ={ 3179e-6, 249e-6, 20.3e-6 };
395const G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
396const G4double G4QAOLowEnergyLoss::cuShellEnergy[4] ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
397const G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
398const G4double G4QAOLowEnergyLoss::taShellEnergy[6] ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
399const G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
400const G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
401const G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
402const G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
403const G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
406const G4double G4QAOLowEnergyLoss::L0[67][2] =
476const G4double G4QAOLowEnergyLoss::L1[22][2] =
502const G4double G4QAOLowEnergyLoss::L2[14][2] =
520const G4int G4QAOLowEnergyLoss::nbOfElectronPerSubShell[1540] =
541 2, 2, 2, 4, 2, 2, 4, 1,
542 2, 2, 2, 4, 2, 2, 4, 2,
543 2, 2, 2, 4, 2, 2, 4, 1, 2,
544 2, 2, 2, 4, 2, 2, 4, 2, 2,
545 2, 2, 2, 4, 2, 2, 4, 3, 2,
546 2, 2, 2, 4, 2, 2, 4, 4, 2,
547 2, 2, 2, 4, 2, 2, 4, 5, 2,
548 2, 2, 2, 4, 2, 2, 4, 6, 2,
549 2, 2, 2, 4, 2, 2, 4, 7, 2,
550 2, 2, 2, 4, 2, 2, 4, 4, 4, 2,
551 2, 2, 2, 4, 2, 2, 4, 4, 5, 2,
552 2, 2, 2, 4, 2, 2, 4, 4, 6, 2,
553 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 1,
554 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2,
555 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 3,
556 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 4,
557 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 5,
558 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4,
559 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1,
560 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2,
561 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
562 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2, 2,
563 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 3, 2,
564 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 2,
565 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 5, 2,
566 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 6, 2,
567 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 7, 2,
568 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 4, 2,
569 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 5, 2,
570 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2,
571 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 1,
572 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2,
573 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 3,
574 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 4,
575 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 5,
576 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4,
577 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1,
578 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 2,
579 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
580 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 2, 4, 2,
581 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 3, 2, 2, 4, 2,
582 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 4, 2, 2, 4, 2,
583 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 5, 2, 2, 4, 2,
584 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 2, 2, 4, 2,
585 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 2,
586 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 1, 2,
587 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 9, 2, 2, 4, 2,
588 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 10, 2, 2, 4, 2,
589 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 11, 2, 2, 4, 2,
590 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 12, 2, 2, 4, 2,
591 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 13, 2, 2, 4, 2,
592 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2,
593 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 1, 2,
594 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2, 2,
595 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 3, 2,
596 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 2,
597 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 5, 2,
598 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 6, 2,
599 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 7, 2,
600 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 9, 1,
601 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 1,
602 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2,
603 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 1,
604 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2,
605 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 3,
606 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 4,
607 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 3,
608 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4,
609 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4, 1,
610 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4, 2,
611 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
612 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4, 2, 2,
613 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 2, 4, 1, 2,
614 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 3, 2, 2, 4, 1, 2,
615 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 4, 2, 2, 4, 1, 2,
616 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 6, 2, 2, 4, 2,
617 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 7, 2, 2, 4, 2,
618 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 7, 2, 2, 4, 1, 2,
619 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 8, 2, 2, 4, 1, 2,
620 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 10, 2, 2, 4, 2,
621 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 11, 2, 2, 4, 2,
622 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 12, 2, 2, 4, 2
625const G4int G4QAOLowEnergyLoss::fNumberOfShells[101] =
629 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 3 , 4 ,
631 5 , 5 , 6 , 6 , 6 , 6 , 6 , 7 , 8 , 8 ,
633 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 ,
63511 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 ,
63714 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 ,
64116 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 ,
64319 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 ,
64521 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 ,
64723 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 ,
64927 , 27 , 27 , 26 , 26 , 27 , 27 , 26 , 26 , 26
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static G4AntiProton * AntiProtonDefinition()
G4double GetCharge() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetAtomicShell(G4int index) const
G4double GetDensity() const
const G4Element * GetElement(G4int iel) const
size_t GetNumberOfElements() const
const G4String & GetName() const
G4double GetPDGCharge() const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const override
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const override
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material) override
G4QAOLowEnergyLoss(const G4String &name)
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const override