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;
193 (material-> GetTotNbOfElectPerVolume()) /
204 G4double l0Term = 0, l1Term = 0, l2Term = 0;
206 for (
G4int nos = 0 ; nos < nbOfShell ; nos++){
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);
252 G4int 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
304 G4double 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;
334 G4int nbOfTheShell)
const
336 G4double shellStrength = alShellStrength[0];
338 if(material->
GetZ() == 13) shellStrength = alShellStrength[nbOfTheShell];
339 else if(material->
GetZ() == 14)shellStrength =siShellStrength[nbOfTheShell];
340 else if(material->
GetZ() == 29)shellStrength =cuShellStrength[nbOfTheShell];
341 else if(material->
GetZ() == 73)shellStrength =taShellStrength[nbOfTheShell];
342 else if(material->
GetZ() == 79)shellStrength =auShellStrength[nbOfTheShell];
343 else if(material->
GetZ() == 78)shellStrength =ptShellStrength[nbOfTheShell];
346 shellStrength = GetOccupationNumber(Z,nbOfTheShell) /
Z ;}
347 else G4cout <<
"WARNING - G4QAOLowEnergyLoss::GetShellEnergy - "
348 <<
"The model is not available for "
352 return shellStrength;
358 G4int indice = ShellNb ;
359 for (
G4int z = 1 ;
z <
Z ;
z++) {indice += fNumberOfShells[
z];}
361 return nbOfElectronPerSubShell[indice+1];
369 for(n = 0; n < sizeL0; n++) {
370 if( normEnergy < L0[n][0] )
break;
373 if(n >= sizeL0) n = sizeL0 - 1 ;
377 G4double bethe = l0p + (l0 - l0p) * ( normEnergy - L0[n-1][0]) /
378 (L0[
n][0] - L0[n-1][0]);
387 for(n = 0; n < sizeL1; n++) {
388 if( normEnergy < L1[n][0] )
break;
391 if(n >= sizeL1) n = sizeL1 - 1 ;
395 G4double barkas= l1p + (l1 - l1p) * ( normEnergy - L1[n-1][0]) /
396 (L1[
n][0] - L1[n-1][0]);
406 for(n = 0; n < sizeL2; n++) {
407 if( normEnergy < L2[n][0] )
break;
410 if(n >= sizeL2) n = sizeL2 - 1 ;
414 G4double bloch = l2p + (l2 - l2p) * ( normEnergy - L2[n-1][0]) /
415 (L2[
n][0] - L2[n-1][0]);
421 const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
430 const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
432 const G4double G4QAOLowEnergyLoss::alShellEnergy[3] ={ 2795e-6, 202e-6, 16.9e-6};
433 const G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
434 const G4double G4QAOLowEnergyLoss::siShellEnergy[3] ={ 3179e-6, 249e-6, 20.3e-6 };
435 const G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
436 const G4double G4QAOLowEnergyLoss::cuShellEnergy[4] ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
437 const G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
438 const G4double G4QAOLowEnergyLoss::taShellEnergy[6] ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
439 const G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
440 const G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
441 const G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
442 const G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
443 const G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
446 const G4double G4QAOLowEnergyLoss::L0[67][2] =
516 const G4double G4QAOLowEnergyLoss::L1[22][2] =
542 const G4double G4QAOLowEnergyLoss::L2[14][2] =
560 const G4int G4QAOLowEnergyLoss::nbOfElectronPerSubShell[1540] =
581 2, 2, 2, 4, 2, 2, 4, 1,
582 2, 2, 2, 4, 2, 2, 4, 2,
583 2, 2, 2, 4, 2, 2, 4, 1, 2,
584 2, 2, 2, 4, 2, 2, 4, 2, 2,
585 2, 2, 2, 4, 2, 2, 4, 3, 2,
586 2, 2, 2, 4, 2, 2, 4, 4, 2,
587 2, 2, 2, 4, 2, 2, 4, 5, 2,
588 2, 2, 2, 4, 2, 2, 4, 6, 2,
589 2, 2, 2, 4, 2, 2, 4, 7, 2,
590 2, 2, 2, 4, 2, 2, 4, 4, 4, 2,
591 2, 2, 2, 4, 2, 2, 4, 4, 5, 2,
592 2, 2, 2, 4, 2, 2, 4, 4, 6, 2,
593 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 1,
594 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2,
595 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 3,
596 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 4,
597 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 5,
598 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4,
599 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1,
600 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2,
601 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
602 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 2, 2,
603 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 3, 2,
604 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 2,
605 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 5, 2,
606 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 6, 2,
607 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 7, 2,
608 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 4, 2,
609 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 5, 2,
610 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2,
611 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 1,
612 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2,
613 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 3,
614 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 4,
615 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 5,
616 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4,
617 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1,
618 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 2,
619 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 4, 1, 2,
620 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 2, 2, 2, 4, 2,
621 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 3, 2, 2, 4, 2,
622 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 4, 2, 2, 4, 2,
623 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 5, 2, 2, 4, 2,
624 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 2, 2, 4, 2,
625 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 2,
626 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 7, 2, 2, 4, 1, 2,
627 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 9, 2, 2, 4, 2,
628 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 10, 2, 2, 4, 2,
629 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 11, 2, 2, 4, 2,
630 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 12, 2, 2, 4, 2,
631 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 13, 2, 2, 4, 2,
632 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2,
633 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 1, 2,
634 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2, 2,
635 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 3, 2,
636 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 2,
637 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 5, 2,
638 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 6, 2,
639 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 7, 2,
640 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 9, 1,
641 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 1,
642 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2,
643 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 1,
644 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2,
645 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 3,
646 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 4,
647 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 3,
648 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 2, 2, 4,
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, 1,
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, 2,
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, 1, 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, 2, 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, 2, 4, 1, 2,
654 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,
655 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,
656 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,
657 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,
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, 1, 2,
659 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,
660 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,
661 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,
662 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
665 const G4int G4QAOLowEnergyLoss::fNumberOfShells[101] =
669 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 3 , 4 ,
671 5 , 5 , 6 , 6 , 6 , 6 , 6 , 7 , 8 , 8 ,
673 9 , 9 , 9 , 9 , 9 , 9 , 9 , 10 , 10 , 10 ,
675 11 , 11 , 11 , 11 , 11 , 12 , 13 , 13 , 14 , 14 ,
677 14 , 14 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 ,
681 16 , 16 , 16 , 17 , 18 , 18 , 19 , 19 , 19 , 19 ,
683 19 , 19 , 19 , 20 , 19 , 19 , 19 , 19 , 19 , 20 ,
685 21 , 21 , 21 , 21 , 21 , 21 , 21 , 21 , 22 , 22 ,
687 23 , 23 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 ,
689 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()
G4GLOB_DLL std::ostream G4cout
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double GetCharge() const
G4QAOLowEnergyLoss(const G4String &name)
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
size_t GetNumberOfElements() const
G4double GetAtomicShell(G4int index) const
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double GetPDGCharge() const