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;
192 G4double v = c_light * std::sqrt( 2.0 * kineticEnergy / proton_mass_c2 );
193 G4double coeff = twopi * proton_mass_c2 *
194 (material-> GetTotNbOfElectPerVolume()) /
196 G4double fBetheVelocity = fine_structure_const * c_light / v;
197 coeff *= fine_structure_const * fine_structure_const * hbarc_squared /
205 G4double l0Term = 0, l1Term = 0, l2Term = 0;
207 for (
G4int nos = 0 ; nos < nbOfShell ; nos++){
210 G4double NormalizedEnergy = ( 2.0 * electron_mass_c2 * v * v ) /
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);
253G4int 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
305G4double 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]);
422const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
431const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
433const G4double G4QAOLowEnergyLoss::alShellEnergy[3] ={ 2795e-6, 202e-6, 16.9e-6};
434const G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
435const G4double G4QAOLowEnergyLoss::siShellEnergy[3] ={ 3179e-6, 249e-6, 20.3e-6 };
436const G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
437const G4double G4QAOLowEnergyLoss::cuShellEnergy[4] ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
438const G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
439const G4double G4QAOLowEnergyLoss::taShellEnergy[6] ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
440const G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
441const G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
442const G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
443const G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
444const G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
447const G4double G4QAOLowEnergyLoss::L0[67][2] =
517const G4double G4QAOLowEnergyLoss::L1[22][2] =
543const G4double G4QAOLowEnergyLoss::L2[14][2] =
561const 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
666const 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 ,
67611 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 ,
67814 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 ,
68216 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 ,
68419 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 ,
68621 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 ,
68823 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 ,
69027 , 27 , 27 , 26 , 26 , 27 , 27 , 26 , 26 , 26
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4GLOB_DLL 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