72 numberOfMaterials = 6;
113 G4bool isInCharge =
false;
115 G4bool hasMaterial =
false;
120 && hasMaterial) isInCharge =
true;
130 G4bool isInCharge =
false;
132 G4bool hasMaterial =
false;
138 && hasMaterial) isInCharge =
true;
151 G4double eloss = EnergyLoss(material,energy,zParticle) ;
163 G4double eloss = EnergyLoss(material,kineticEnergy,zParticle) ;
174 G4int nbOfShell = GetNumberOfShell(material);
175 if(nbOfShell < 1) nbOfShell = 1;
191 G4double v = c_light * std::sqrt( 2.0 * kineticEnergy / proton_mass_c2 );
192 G4double coeff = twopi * proton_mass_c2 *
193 (material-> GetTotNbOfElectPerVolume()) /
195 G4double fBetheVelocity = fine_structure_const * c_light / v;
196 coeff *= fine_structure_const * fine_structure_const * hbarc_squared /
204 G4double l0Term = 0, l1Term = 0, l2Term = 0;
206 for (
G4int nos = 0 ; nos < nbOfShell ; nos++){
209 G4double NormalizedEnergy = ( 2.0 * electron_mass_c2 * v * v ) /
210 ( c_squared * GetShellEnergy(material,nos) );
213 G4double shStrength = GetShellStrength(material,nos);
215 l0 = GetL0(NormalizedEnergy);
216 l0Term += shStrength * l0;
218 l1 = GetL1(NormalizedEnergy);
219 l1Term += shStrength * l1;
221 l2 = GetL2(NormalizedEnergy);
222 l2Term += shStrength * l2;
240 dedx = coeff * zParticle * zParticle * (l0Term
241 + zParticle * fBetheVelocity * l1Term
242 + zParticle * zParticle * fBetheVelocity * fBetheVelocity * l2Term);
252G4int G4QAOLowEnergyLoss::GetNumberOfShell(
const G4Material* material)
const
259 for(
G4int i=0; i<numberOfMaterials; i++) {
261 if(materialAvailable[i] == Z){
262 nShell = nbofShellForMaterial[i];
265 else nShell = fNumberOfShells[Z];
274 G4int nbOfTheShell)
const
277 G4double shellEnergy = alShellEnergy[0];
279 if(material->
GetZ() == 13) shellEnergy = alShellEnergy[nbOfTheShell];
280 else if(material->
GetZ() == 14)shellEnergy = siShellEnergy[nbOfTheShell];
281 else if(material->
GetZ() == 29)shellEnergy = cuShellEnergy[nbOfTheShell];
282 else if(material->
GetZ() == 73)shellEnergy = taShellEnergy[nbOfTheShell];
283 else if(material->
GetZ() == 79)shellEnergy = auShellEnergy[nbOfTheShell];
284 else if(material->
GetZ() == 78)shellEnergy = ptShellEnergy[nbOfTheShell];
286 shellEnergy = GetOscillatorEnergy(material, nbOfTheShell);
287 else G4cout <<
"WARNING - G4QAOLowEnergyLoss::GetShellEnergy - "
288 <<
"The model is not available for "
297 G4int nbOfTheShell)
const
304G4double squaredPlasmonEnergy = 28.816 * 28.816 * 1e-6
306 * (Z/element->
GetN()) ;
311 G4double plasmonTerm = 0.66667 * GetOccupationNumber(Z,nbOfTheShell)
312 * squaredPlasmonEnergy / (Z*Z) ;
316 ionTerm = ionTerm*ionTerm ;
318 G4double oscShellEnergy = std::sqrt( ionTerm + plasmonTerm );
330 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]);
422const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
431const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
433G4double G4QAOLowEnergyLoss::alShellEnergy[3] ={ 2795e-6, 202e-6, 16.9e-6};
434G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
435G4double G4QAOLowEnergyLoss::siShellEnergy[3] ={ 3179e-6, 249e-6, 20.3e-6 };
436G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
437G4double G4QAOLowEnergyLoss::cuShellEnergy[4] ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
438G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
439G4double G4QAOLowEnergyLoss::taShellEnergy[6] ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
440G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
441G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
442G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
443G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
444G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
447const G4double G4QAOLowEnergyLoss::L0[67][2] =
518const G4double G4QAOLowEnergyLoss::L1[22][2] =
545const G4double G4QAOLowEnergyLoss::L2[14][2] =
564const G4int G4QAOLowEnergyLoss::nbOfElectronPerSubShell[1540] =
585 2, 2, 2, 4, 2, 2, 4, 1,
586 2, 2, 2, 4, 2, 2, 4, 2,
587 2, 2, 2, 4, 2, 2, 4, 1, 2,
588 2, 2, 2, 4, 2, 2, 4, 2, 2,
589 2, 2, 2, 4, 2, 2, 4, 3, 2,
590 2, 2, 2, 4, 2, 2, 4, 4, 2,
591 2, 2, 2, 4, 2, 2, 4, 5, 2,
592 2, 2, 2, 4, 2, 2, 4, 6, 2,
593 2, 2, 2, 4, 2, 2, 4, 7, 2,
594 2, 2, 2, 4, 2, 2, 4, 4, 4, 2,
595 2, 2, 2, 4, 2, 2, 4, 4, 5, 2,
596 2, 2, 2, 4, 2, 2, 4, 4, 6, 2,
597 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 1,
598 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2,
599 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 3,
600 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 4,
601 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 5,
602 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4,
603 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1,
604 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2,
605 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
606 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2, 2,
607 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 3, 2,
608 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 2,
609 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 5, 2,
610 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 6, 2,
611 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 7, 2,
612 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 4, 2,
613 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 5, 2,
614 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2,
615 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 1,
616 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2,
617 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 3,
618 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 4,
619 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 5,
620 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4,
621 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1,
622 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 2,
623 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
624 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 2, 4, 2,
625 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 3, 2, 2, 4, 2,
626 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 4, 2, 2, 4, 2,
627 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 5, 2, 2, 4, 2,
628 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 2, 2, 4, 2,
629 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 2,
630 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 1, 2,
631 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 9, 2, 2, 4, 2,
632 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 10, 2, 2, 4, 2,
633 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 11, 2, 2, 4, 2,
634 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 12, 2, 2, 4, 2,
635 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 13, 2, 2, 4, 2,
636 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2,
637 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 1, 2,
638 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2, 2,
639 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 3, 2,
640 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 2,
641 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 5, 2,
642 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 6, 2,
643 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 7, 2,
644 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 9, 1,
645 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 1,
646 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2,
647 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 1,
648 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2,
649 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 3,
650 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 4,
651 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 3,
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,
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, 1,
654 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,
655 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,
656 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,
657 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,
658 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,
659 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,
660 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,
661 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,
662 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,
663 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,
664 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,
665 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,
666 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
669const G4int G4QAOLowEnergyLoss::fNumberOfShells[101] =
673 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 3 , 4 ,
675 5 , 5 , 6 , 6 , 6 , 6 , 6 , 7 , 8 , 8 ,
677 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 ,
67911 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 ,
68114 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 ,
68516 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 ,
68719 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 ,
68921 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 ,
69123 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 ,
69327 , 27 , 27 , 26 , 26 , 27 , 27 , 26 , 26 , 26
G4DLLIMPORT std::ostream G4cout
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 TheValue(const G4DynamicParticle *particle, const G4Material *material)
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4QAOLowEnergyLoss(const G4String &name)
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const