73 numberOfMaterials = 6;
114 G4bool isInCharge =
false;
116 G4bool hasMaterial =
false;
121 && hasMaterial) isInCharge =
true;
131 G4bool isInCharge =
false;
133 G4bool hasMaterial =
false;
139 && hasMaterial) isInCharge =
true;
152 G4double eloss = EnergyLoss(material,energy,zParticle) ;
164 G4double eloss = EnergyLoss(material,kineticEnergy,zParticle) ;
175 G4int nbOfShell = GetNumberOfShell(material);
176 if(nbOfShell < 1) nbOfShell = 1;
194 (material-> GetTotNbOfElectPerVolume()) /
205 G4double l0Term = 0, l1Term = 0, l2Term = 0;
207 for (
G4int nos = 0 ; nos < nbOfShell ; nos++){
211 (
c_squared * GetShellEnergy(material,nos) );
214 G4double shStrength = GetShellStrength(material,nos);
216 l0 = GetL0(NormalizedEnergy);
217 l0Term += shStrength * l0;
219 l1 = GetL1(NormalizedEnergy);
220 l1Term += shStrength * l1;
222 l2 = GetL2(NormalizedEnergy);
223 l2Term += shStrength * l2;
241 dedx = coeff * zParticle * zParticle * (l0Term
242 + zParticle * fBetheVelocity * l1Term
243 + zParticle * zParticle * fBetheVelocity * fBetheVelocity * l2Term);
253 G4int G4QAOLowEnergyLoss::GetNumberOfShell(
const G4Material* material)
const
260 for(
G4int i=0; i<numberOfMaterials; i++) {
262 if(materialAvailable[i] == Z){
263 nShell = nbofShellForMaterial[i];
266 else nShell = fNumberOfShells[
Z];
275 G4int nbOfTheShell)
const
278 G4double shellEnergy = alShellEnergy[0];
280 if(material->
GetZ() == 13) shellEnergy = alShellEnergy[nbOfTheShell];
281 else if(material->
GetZ() == 14)shellEnergy = siShellEnergy[nbOfTheShell];
282 else if(material->
GetZ() == 29)shellEnergy = cuShellEnergy[nbOfTheShell];
283 else if(material->
GetZ() == 73)shellEnergy = taShellEnergy[nbOfTheShell];
284 else if(material->
GetZ() == 79)shellEnergy = auShellEnergy[nbOfTheShell];
285 else if(material->
GetZ() == 78)shellEnergy = ptShellEnergy[nbOfTheShell];
287 shellEnergy = GetOscillatorEnergy(material, nbOfTheShell);
288 else G4cout <<
"WARNING - G4QAOLowEnergyLoss::GetShellEnergy - "
289 <<
"The model is not available for "
298 G4int nbOfTheShell)
const
305 G4double squaredPlasmonEnergy = 28.816 * 28.816 * 1e-6
307 * (Z/element->
GetN()) ;
312 G4double plasmonTerm = 0.66667 * GetOccupationNumber(Z,nbOfTheShell)
313 * squaredPlasmonEnergy / (Z*
Z) ;
317 ionTerm = ionTerm*ionTerm ;
319 G4double oscShellEnergy = std::sqrt( ionTerm + plasmonTerm );
331 return oscShellEnergy;
335 G4int nbOfTheShell)
const
337 G4double shellStrength = alShellStrength[0];
339 if(material->
GetZ() == 13) shellStrength = alShellStrength[nbOfTheShell];
340 else if(material->
GetZ() == 14)shellStrength =siShellStrength[nbOfTheShell];
341 else if(material->
GetZ() == 29)shellStrength =cuShellStrength[nbOfTheShell];
342 else if(material->
GetZ() == 73)shellStrength =taShellStrength[nbOfTheShell];
343 else if(material->
GetZ() == 79)shellStrength =auShellStrength[nbOfTheShell];
344 else if(material->
GetZ() == 78)shellStrength =ptShellStrength[nbOfTheShell];
347 shellStrength = GetOccupationNumber(Z,nbOfTheShell) /
Z ;}
348 else G4cout <<
"WARNING - G4QAOLowEnergyLoss::GetShellEnergy - "
349 <<
"The model is not available for "
353 return shellStrength;
359 G4int indice = ShellNb ;
360 for (
G4int z = 1 ;
z <
Z ;
z++) {indice += fNumberOfShells[
z];}
362 return nbOfElectronPerSubShell[indice+1];
370 for(n = 0; n < sizeL0; n++) {
371 if( normEnergy < L0[n][0] )
break;
374 if(n >= sizeL0) n = sizeL0 - 1 ;
378 G4double bethe = l0p + (l0 - l0p) * ( normEnergy - L0[n-1][0]) /
379 (L0[
n][0] - L0[n-1][0]);
388 for(n = 0; n < sizeL1; n++) {
389 if( normEnergy < L1[n][0] )
break;
392 if(n >= sizeL1) n = sizeL1 - 1 ;
396 G4double barkas= l1p + (l1 - l1p) * ( normEnergy - L1[n-1][0]) /
397 (L1[
n][0] - L1[n-1][0]);
407 for(n = 0; n < sizeL2; n++) {
408 if( normEnergy < L2[n][0] )
break;
411 if(n >= sizeL2) n = sizeL2 - 1 ;
415 G4double bloch = l2p + (l2 - l2p) * ( normEnergy - L2[n-1][0]) /
416 (L2[
n][0] - L2[n-1][0]);
422 const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
431 const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
433 const G4double G4QAOLowEnergyLoss::alShellEnergy[3] ={ 2795e-6, 202e-6, 16.9e-6};
434 const G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
435 const G4double G4QAOLowEnergyLoss::siShellEnergy[3] ={ 3179e-6, 249e-6, 20.3e-6 };
436 const G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
437 const G4double G4QAOLowEnergyLoss::cuShellEnergy[4] ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
438 const G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
439 const G4double G4QAOLowEnergyLoss::taShellEnergy[6] ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
440 const G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
441 const G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
442 const G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
443 const G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
444 const G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
447 const G4double G4QAOLowEnergyLoss::L0[67][2] =
517 const G4double G4QAOLowEnergyLoss::L1[22][2] =
543 const G4double G4QAOLowEnergyLoss::L2[14][2] =
561 const G4int G4QAOLowEnergyLoss::nbOfElectronPerSubShell[1540] =
582 2, 2, 2, 4, 2, 2, 4, 1,
583 2, 2, 2, 4, 2, 2, 4, 2,
584 2, 2, 2, 4, 2, 2, 4, 1, 2,
585 2, 2, 2, 4, 2, 2, 4, 2, 2,
586 2, 2, 2, 4, 2, 2, 4, 3, 2,
587 2, 2, 2, 4, 2, 2, 4, 4, 2,
588 2, 2, 2, 4, 2, 2, 4, 5, 2,
589 2, 2, 2, 4, 2, 2, 4, 6, 2,
590 2, 2, 2, 4, 2, 2, 4, 7, 2,
591 2, 2, 2, 4, 2, 2, 4, 4, 4, 2,
592 2, 2, 2, 4, 2, 2, 4, 4, 5, 2,
593 2, 2, 2, 4, 2, 2, 4, 4, 6, 2,
594 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 1,
595 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2,
596 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 3,
597 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 4,
598 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 5,
599 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4,
600 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1,
601 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2,
602 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
603 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2, 2,
604 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 3, 2,
605 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 2,
606 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 5, 2,
607 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 6, 2,
608 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 7, 2,
609 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 4, 2,
610 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 5, 2,
611 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2,
612 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 1,
613 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2,
614 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 3,
615 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 4,
616 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 5,
617 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4,
618 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1,
619 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 2,
620 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
621 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 2, 4, 2,
622 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 3, 2, 2, 4, 2,
623 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 4, 2, 2, 4, 2,
624 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 5, 2, 2, 4, 2,
625 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 2, 2, 4, 2,
626 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 2,
627 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 1, 2,
628 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 9, 2, 2, 4, 2,
629 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 10, 2, 2, 4, 2,
630 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 11, 2, 2, 4, 2,
631 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 12, 2, 2, 4, 2,
632 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 13, 2, 2, 4, 2,
633 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2,
634 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 1, 2,
635 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2, 2,
636 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 3, 2,
637 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 2,
638 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 5, 2,
639 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 6, 2,
640 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 7, 2,
641 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 9, 1,
642 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 1,
643 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2,
644 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 1,
645 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2,
646 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 3,
647 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 4,
648 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 3,
649 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4,
650 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,
651 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,
652 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,
653 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,
654 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,
655 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,
656 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,
657 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,
658 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,
659 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,
660 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,
661 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,
662 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,
663 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
666 const G4int G4QAOLowEnergyLoss::fNumberOfShells[101] =
670 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 3 , 4 ,
672 5 , 5 , 6 , 6 , 6 , 6 , 6 , 7 , 8 , 8 ,
674 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 ,
676 11 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 ,
678 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 ,
682 16 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 ,
684 19 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 ,
686 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 ,
688 23 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 ,
690 27 , 27 , 27 , 26 , 26 , 27 , 27 , 26 , 26 , 26
G4double GetKineticEnergy() const
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
const G4String & GetName() const
G4double GetDensity() const
G4ParticleDefinition * GetDefinition() const
const G4Element * GetElement(G4int iel) const
static G4AntiProton * AntiProtonDefinition()
static constexpr double twopi
G4GLOB_DLL std::ostream G4cout
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double GetCharge() const
static constexpr double eplus
static constexpr double cm3
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double energy(const ThreeVector &p, const G4double m)
G4QAOLowEnergyLoss(const G4String &name)
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
static constexpr double MeV
size_t GetNumberOfElements() const
G4double GetAtomicShell(G4int index) const
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double GetPDGCharge() const
static constexpr double keV