Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmCorrections Class Reference

#include <G4EmCorrections.hh>

Public Member Functions

 G4EmCorrections ()
 
virtual ~G4EmCorrections ()
 
G4double HighOrderCorrections (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy, G4double cutEnergy)
 
G4double IonHighOrderCorrections (const G4ParticleDefinition *, const G4MaterialCutsCouple *, G4double kineticEnergy)
 
G4double ComputeIonCorrections (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double IonBarkasCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double Bethe (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double SpinCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double KShellCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double LShellCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double ShellCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double ShellCorrectionSTD (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double DensityCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double BarkasCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double BlochCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double MottCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double NuclearDEDX (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy, G4bool fluct=true)
 
void AddStoppingData (G4int Z, G4int A, const G4String &materialName, G4PhysicsVector *dVector)
 
void InitialiseForNewRun ()
 
G4double EffectiveChargeCorrection (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
G4double EffectiveChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
void SetIonisationModels (G4VEmModel *m1=0, G4VEmModel *m2=0)
 
G4int GetNumberOfStoppingVectors ()
 

Detailed Description

Definition at line 71 of file G4EmCorrections.hh.

Constructor & Destructor Documentation

◆ G4EmCorrections()

G4EmCorrections::G4EmCorrections ( )

Definition at line 77 of file G4EmCorrections.cc.

78{
79 particle = 0;
80 curParticle= 0;
81 material = 0;
82 curMaterial= 0;
83 curVector = 0;
84 kinEnergy = 0.0;
85 ionLEModel = 0;
86 ionHEModel = 0;
87 nIons = 0;
88 verbose = 1;
89 ncouples = 0;
90 massFactor = 1.0;
91 eth = 2.0*MeV;
92 nbinCorr = 20;
93 eCorrMin = 25.*keV;
94 eCorrMax = 250.*MeV;
97 BarkasCorr = ThetaK = ThetaL = 0;
98 Initialise();
99}
static G4NistManager * Instance()
static G4ParticleTable * GetParticleTable()
G4IonTable * GetIonTable()

◆ ~G4EmCorrections()

G4EmCorrections::~G4EmCorrections ( )
virtual

Definition at line 103 of file G4EmCorrections.cc.

104{
105 for(G4int i=0; i<nIons; ++i) {delete stopData[i];}
106 delete BarkasCorr;
107 delete ThetaK;
108 delete ThetaL;
109}
int G4int
Definition: G4Types.hh:66

Member Function Documentation

◆ AddStoppingData()

void G4EmCorrections::AddStoppingData ( G4int  Z,
G4int  A,
const G4String materialName,
G4PhysicsVector dVector 
)

Definition at line 791 of file G4EmCorrections.cc.

794{
795 G4int i = 0;
796 for(; i<nIons; ++i) {
797 if(Z == Zion[i] && A == Aion[i] && mname == materialName[i]) break;
798 }
799 if(i == nIons) {
800 Zion.push_back(Z);
801 Aion.push_back(A);
802 materialName.push_back(mname);
803 materialList.push_back(0);
804 ionList.push_back(0);
805 stopData.push_back(dVector);
806 nIons++;
807 if(verbose>1) {
808 G4cout << "AddStoppingData Z= " << Z << " A= " << A << " " << mname
809 << " idx= " << i << G4endl;
810 }
811 }
812}
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout

Referenced by G4ionIonisation::AddStoppingData().

◆ BarkasCorrection()

G4double G4EmCorrections::BarkasCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 575 of file G4EmCorrections.cc.

578{
579 // . Z^3 Barkas effect in the stopping power of matter for charged particles
580 // J.C Ashley and R.H.Ritchie
581 // Physical review B Vol.5 No.7 1 April 1972 pp. 2393-2397
582 // valid for kineticEnergy > 0.5 MeV
583
584 SetupKinematics(p, mat, e);
585 G4double BarkasTerm = 0.0;
586
587 for (G4int i = 0; i<numberOfElements; ++i) {
588
589 G4double Z = (*theElementVector)[i]->GetZ();
590 G4int iz = G4int(Z);
591 if(iz == 47) {
592 BarkasTerm += atomDensity[i]*0.006812*std::pow(beta,-0.9);
593 } else if(iz >= 64) {
594 BarkasTerm += atomDensity[i]*0.002833*std::pow(beta,-1.2);
595 } else {
596
597 G4double X = ba2 / Z;
598 G4double b = 1.3;
599 if(1 == iz) {
600 if(material->GetName() == "G4_lH2") { b = 0.6; }
601 else { b = 1.8; }
602 }
603 else if(2 == iz) { b = 0.6; }
604 else if(10 >= iz) { b = 1.8; }
605 else if(17 >= iz) { b = 1.4; }
606 else if(18 == iz) { b = 1.8; }
607 else if(25 >= iz) { b = 1.4; }
608 else if(50 >= iz) { b = 1.35;}
609
610 G4double W = b/std::sqrt(X);
611
612 G4double val = BarkasCorr->Value(W);
613 if(W > BarkasCorr->Energy(46)) {
614 val *= BarkasCorr->Energy(46)/W;
615 }
616 // G4cout << "i= " << i << " b= " << b << " W= " << W
617 // << " Z= " << Z << " X= " << X << " val= " << val<< G4endl;
618 BarkasTerm += val*atomDensity[i] / (std::sqrt(Z*X)*X);
619 }
620 }
621
622 BarkasTerm *= 1.29*charge/material->GetTotNbOfAtomsPerVolume();
623
624 // temporary protection
625 //if(charge < -7.0 ) { BarkasTerm *= (-7.0/charge); }
626
627 return BarkasTerm;
628}
double G4double
Definition: G4Types.hh:64
G4double GetTotNbOfAtomsPerVolume() const
Definition: G4Material.hh:208
const G4String & GetName() const
Definition: G4Material.hh:177
G4double Value(G4double theEnergy)
G4double Energy(size_t index) const

Referenced by ComputeIonCorrections(), HighOrderCorrections(), and IonBarkasCorrection().

◆ Bethe()

G4double G4EmCorrections::Bethe ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 249 of file G4EmCorrections.cc.

252{
253 SetupKinematics(p, mat, e);
254 G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy();
255 G4double eexc2 = eexc*eexc;
256 G4double dedx = 0.5*std::log(2.0*electron_mass_c2*bg2*tmax/eexc2)-beta2;
257 return dedx;
258}
G4double GetMeanExcitationEnergy() const
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:225

◆ BlochCorrection()

G4double G4EmCorrections::BlochCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 632 of file G4EmCorrections.cc.

635{
636 SetupKinematics(p, mat, e);
637
638 G4double y2 = q2/ba2;
639
640 G4double term = 1.0/(1.0 + y2);
641 G4double del;
642 G4double j = 1.0;
643 do {
644 j += 1.0;
645 del = 1.0/(j* (j*j + y2));
646 term += del;
647 } while (del > 0.01*term);
648
649 G4double res = -y2*term;
650 // temporary protection
651 //if(q2 > 49. && res < -0.2) { res = -0.2; }
652
653 return res;
654}

Referenced by ComputeIonCorrections(), and HighOrderCorrections().

◆ ComputeIonCorrections()

G4double G4EmCorrections::ComputeIonCorrections ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 168 of file G4EmCorrections.cc.

171{
172 // . Z^3 Barkas effect in the stopping power of matter for charged particles
173 // J.C Ashley and R.H.Ritchie
174 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
175 // and ICRU49 report
176 // valid for kineticEnergy < 0.5 MeV
177 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
178 SetupKinematics(p, mat, e);
179 if(tau <= 0.0) { return 0.0; }
180
181 G4double Barkas = BarkasCorrection (p, mat, e);
182 G4double Bloch = BlochCorrection (p, mat, e);
183 G4double Mott = MottCorrection (p, mat, e);
184
185 G4double sum = 2.0*(Barkas*(charge - 1.0)/charge + Bloch) + Mott;
186
187 if(verbose > 1) {
188 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas
189 << " Bloch= " << Bloch << " Mott= " << Mott
190 << " Sum= " << sum << G4endl;
191 }
192 sum *= material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2;
193
194 if(verbose > 1) { G4cout << " Sum= " << sum << G4endl; }
195 return sum;
196}
G4double MottCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4double BarkasCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4double BlochCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4double GetElectronDensity() const
Definition: G4Material.hh:216

Referenced by IonHighOrderCorrections().

◆ DensityCorrection()

G4double G4EmCorrections::DensityCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 548 of file G4EmCorrections.cc.

551{
552 SetupKinematics(p, mat, e);
553
554 G4double cden = material->GetIonisation()->GetCdensity();
555 G4double mden = material->GetIonisation()->GetMdensity();
556 G4double aden = material->GetIonisation()->GetAdensity();
557 G4double x0den = material->GetIonisation()->GetX0density();
558 G4double x1den = material->GetIonisation()->GetX1density();
559
560 G4double twoln10 = 2.0*std::log(10.0);
561 G4double dedx = 0.0;
562
563 // density correction
564 G4double x = std::log(bg2)/twoln10;
565 if ( x >= x0den ) {
566 dedx = twoln10*x - cden ;
567 if ( x < x1den ) dedx += aden*std::pow((x1den-x),mden) ;
568 }
569
570 return dedx;
571}
G4double GetMdensity() const
G4double GetX1density() const
G4double GetX0density() const
G4double GetCdensity() const
G4double GetAdensity() const

◆ EffectiveChargeCorrection()

G4double G4EmCorrections::EffectiveChargeCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 742 of file G4EmCorrections.cc.

745{
746 G4double factor = 1.0;
747 if(p->GetPDGCharge() <= 2.5*eplus || nIons <= 0) return factor;
748 /*
749 if(verbose > 1) {
750 G4cout << "EffectiveChargeCorrection: " << p->GetParticleName()
751 << " in " << mat->GetName()
752 << " ekin(MeV)= " << ekin/MeV << G4endl;
753 }
754 */
755 if(p != curParticle || mat != curMaterial) {
756 curParticle = p;
757 curMaterial = mat;
758 curVector = 0;
759 currentZ = p->GetAtomicNumber();
760 if(verbose > 1) {
761 G4cout << "G4EmCorrections::EffectiveChargeCorrection: Zion= "
762 << currentZ << " Aion= " << p->GetPDGMass()/amu_c2 << G4endl;
763 }
764 massFactor = proton_mass_c2/p->GetPDGMass();
765 idx = -1;
766
767 for(G4int i=0; i<nIons; ++i) {
768 if(materialList[i] == mat && currentZ == Zion[i]) {
769 idx = i;
770 break;
771 }
772 }
773 // G4cout << " idx= " << idx << " dz= " << G4endl;
774 if(idx >= 0) {
775 if(!ionList[idx]) BuildCorrectionVector();
776 if(ionList[idx]) curVector = stopData[idx];
777 } else { return factor; }
778 }
779 if(curVector) {
780 factor = curVector->Value(ekin*massFactor);
781 if(verbose > 1) {
782 G4cout << "E= " << ekin << " factor= " << factor << " massfactor= "
783 << massFactor << G4endl;
784 }
785 }
786 return factor;
787}
G4int GetAtomicNumber() const
G4double GetPDGCharge() const

Referenced by G4BraggIonModel::CorrectionsAlongStep(), G4BetheBlochModel::CorrectionsAlongStep(), G4BraggIonModel::GetChargeSquareRatio(), G4BraggModel::GetChargeSquareRatio(), and G4BetheBlochModel::GetChargeSquareRatio().

◆ EffectiveChargeSquareRatio()

G4double G4EmCorrections::EffectiveChargeSquareRatio ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)
inline

◆ GetNumberOfStoppingVectors()

G4int G4EmCorrections::GetNumberOfStoppingVectors ( )
inline

Definition at line 321 of file G4EmCorrections.hh.

322{
323 return nIons;
324}

Referenced by G4ionIonisation::PrintInfo().

◆ GetParticleCharge()

G4double G4EmCorrections::GetParticleCharge ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)
inline

Definition at line 327 of file G4EmCorrections.hh.

330{
331 return effCharge.EffectiveCharge(p,mat,kineticEnergy);
332}
G4double EffectiveCharge(const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)

Referenced by G4BetheBlochModel::GetParticleCharge(), G4BraggIonModel::GetParticleCharge(), and G4BraggModel::GetParticleCharge().

◆ HighOrderCorrections()

G4double G4EmCorrections::HighOrderCorrections ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy,
G4double  cutEnergy 
)

Definition at line 113 of file G4EmCorrections.cc.

116{
117 // . Z^3 Barkas effect in the stopping power of matter for charged particles
118 // J.C Ashley and R.H.Ritchie
119 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
120 // and ICRU49 report
121 // valid for kineticEnergy < 0.5 MeV
122 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
123
124 SetupKinematics(p, mat, e);
125 if(tau <= 0.0) { return 0.0; }
126
127 G4double Barkas = BarkasCorrection (p, mat, e);
128 G4double Bloch = BlochCorrection (p, mat, e);
129 G4double Mott = MottCorrection (p, mat, e);
130
131 G4double sum = (2.0*(Barkas + Bloch) + Mott);
132
133 if(verbose > 1) {
134 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas
135 << " Bloch= " << Bloch << " Mott= " << Mott
136 << " Sum= " << sum << " q2= " << q2 << G4endl;
137 G4cout << " ShellCorrection: " << ShellCorrection(p, mat, e)
138 << " Kshell= " << KShellCorrection(p, mat, e)
139 << " Lshell= " << LShellCorrection(p, mat, e)
140 << " " << mat->GetName() << G4endl;
141 }
142 sum *= material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2;
143 return sum;
144}
G4double LShellCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4double KShellCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
G4double ShellCorrection(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)

Referenced by G4MuBetheBlochModel::ComputeDEDXPerVolume(), and G4BetheBlochModel::ComputeDEDXPerVolume().

◆ InitialiseForNewRun()

void G4EmCorrections::InitialiseForNewRun ( )

Definition at line 892 of file G4EmCorrections.cc.

893{
895 ncouples = tb->GetTableSize();
896 if(currmat.size() != ncouples) {
897 currmat.resize(ncouples);
898 for(std::map< G4int, std::vector<G4double> >::iterator it =
899 thcorr.begin(); it != thcorr.end(); ++it){
900 (it->second).clear();
901 }
902 thcorr.clear();
903 for(size_t i=0; i<ncouples; ++i) {
904 currmat[i] = tb->GetMaterialCutsCouple(i)->GetMaterial();
905 G4String nam = currmat[i]->GetName();
906 for(G4int j=0; j<nIons; ++j) {
907 if(nam == materialName[j]) { materialList[j] = currmat[i]; }
908 }
909 }
910 }
911}
const G4Material * GetMaterial() const
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
static G4ProductionCutsTable * GetProductionCutsTable()

Referenced by G4ionIonisation::InitialiseEnergyLossProcess().

◆ IonBarkasCorrection()

G4double G4EmCorrections::IonBarkasCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 148 of file G4EmCorrections.cc.

151{
152 // . Z^3 Barkas effect in the stopping power of matter for charged particles
153 // J.C Ashley and R.H.Ritchie
154 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
155 // and ICRU49 report
156 // valid for kineticEnergy < 0.5 MeV
157
158 SetupKinematics(p, mat, e);
159 G4double res = 0.0;
160 if(tau > 0.0)
161 res = 2.0*BarkasCorrection(p, mat, e)*
162 material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2;
163 return res;
164}

Referenced by G4BetheBlochModel::ComputeDEDXPerVolume().

◆ IonHighOrderCorrections()

G4double G4EmCorrections::IonHighOrderCorrections ( const G4ParticleDefinition p,
const G4MaterialCutsCouple couple,
G4double  kineticEnergy 
)

Definition at line 200 of file G4EmCorrections.cc.

203{
204// . Z^3 Barkas effect in the stopping power of matter for charged particles
205// J.C Ashley and R.H.Ritchie
206// Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
207// and ICRU49 report
208// valid for kineticEnergy < 0.5 MeV
209// Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
210
211 G4double sum = 0.0;
212
213 if(ionHEModel) {
214 G4int Z = G4int(p->GetPDGCharge()/eplus + 0.5);
215 if(Z >= 100) Z = 99;
216 else if(Z < 1) Z = 1;
217
218 G4double ethscaled = eth*p->GetPDGMass()/proton_mass_c2;
219 G4int ionPDG = p->GetPDGEncoding();
220 if(thcorr.find(ionPDG)==thcorr.end()) { // Not found: fill the map
221 std::vector<G4double> v;
222 for(size_t i=0; i<ncouples; ++i){
223 v.push_back(ethscaled*ComputeIonCorrections(p,currmat[i],ethscaled));
224 }
225 thcorr.insert(std::pair< G4int, std::vector<G4double> >(ionPDG,v));
226 }
227
228 //G4cout << " map size=" << thcorr.size() << G4endl;
229 //for(std::map< G4int, std::vector<G4double> >::iterator
230 // it = thcorr.begin(); it != thcorr.end(); ++it){
231 // G4cout << "\t map element: first (key)=" << it->first
232 // << "\t second (vector): vec size=" << (it->second).size() << G4endl;
233 // for(size_t i=0; i<(it->second).size(); ++i){
234 // G4cout << "\t \t vec element: [" << i << "]=" << (it->second)[i] << G4endl;
235 // }
236 //}
237
238 G4double rest = (thcorr.find(ionPDG)->second)[couple->GetIndex()];
239
240 sum = ComputeIonCorrections(p,couple->GetMaterial(),e) - rest/e;
241
242 if(verbose > 1) { G4cout << " Sum= " << sum << " dSum= " << rest/e << G4endl; }
243 }
244 return sum;
245}
G4double ComputeIonCorrections(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)

Referenced by G4BetheBlochModel::CorrectionsAlongStep().

◆ KShellCorrection()

G4double G4EmCorrections::KShellCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 273 of file G4EmCorrections.cc.

276{
277 SetupKinematics(p, mat, e);
278 G4double term = 0.0;
279 for (G4int i = 0; i<numberOfElements; ++i) {
280
281 G4double Z = (*theElementVector)[i]->GetZ();
282 G4int iz = G4int(Z);
283 G4double f = 1.0;
284 G4double Z2= (Z-0.3)*(Z-0.3);
285 if(1 == iz) {
286 f = 0.5;
287 Z2 = 1.0;
288 }
289 G4double eta = ba2/Z2;
290 G4double tet = Z2*(1. + Z2*0.25*alpha2);
291 if(11 < iz) { tet = ThetaK->Value(Z); }
292 term += f*atomDensity[i]*KShell(tet,eta)/Z;
293 }
294
295 term /= material->GetTotNbOfAtomsPerVolume();
296
297 return term;
298}

Referenced by HighOrderCorrections().

◆ LShellCorrection()

G4double G4EmCorrections::LShellCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 302 of file G4EmCorrections.cc.

305{
306 SetupKinematics(p, mat, e);
307 G4double term = 0.0;
308 for (G4int i = 0; i<numberOfElements; ++i) {
309
310 G4double Z = (*theElementVector)[i]->GetZ();
311 G4int iz = G4int(Z);
312 if(2 < iz) {
313 G4double Zeff = Z - ZD[10];
314 if(iz < 10) { Zeff = Z - ZD[iz]; }
315 G4double Z2= Zeff*Zeff;
316 G4double f = 0.125;
317 G4double eta = ba2/Z2;
318 G4double tet = ThetaL->Value(Z);
319 G4int nmax = std::min(4,G4AtomicShells::GetNumberOfShells(iz));
320 for(G4int j=1; j<nmax; ++j) {
322 if(15 >= iz) {
323 if(3 > j) { tet = 0.25*Z2*(1.0 + 5*Z2*alpha2/16.); }
324 else { tet = 0.25*Z2*(1.0 + Z2*alpha2/16.); }
325 }
326 //G4cout << " LShell: j= " << j << " ne= " << ne << " e(eV)= " << e/eV
327 // << " ThetaL= " << tet << G4endl;
328 term += f*ne*atomDensity[i]*LShell(tet,eta)/Z;
329 }
330 }
331 }
332
333 term /= material->GetTotNbOfAtomsPerVolume();
334
335 return term;
336}
static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb)
static G4int GetNumberOfShells(G4int Z)

Referenced by HighOrderCorrections().

◆ MottCorrection()

G4double G4EmCorrections::MottCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 658 of file G4EmCorrections.cc.

661{
662 SetupKinematics(p, mat, e);
663 G4double mterm = CLHEP::pi*fine_structure_const*beta*charge;
664 return mterm;
665}

Referenced by ComputeIonCorrections(), and HighOrderCorrections().

◆ NuclearDEDX()

G4double G4EmCorrections::NuclearDEDX ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy,
G4bool  fluct = true 
)

Definition at line 669 of file G4EmCorrections.cc.

673{
674 G4double nloss = 0.0;
675 if(e <= 0.0) return nloss;
676 SetupKinematics(p, mat, e);
677
678 lossFlucFlag = fluct;
679
680 // Projectile nucleus
681 G4double z1 = std::fabs(particle->GetPDGCharge()/eplus);
682 G4double mass1 = mass/amu_c2;
683
684 // loop for the elements in the material
685 for (G4int iel=0; iel<numberOfElements; iel++) {
686 const G4Element* element = (*theElementVector)[iel] ;
687 G4double z2 = element->GetZ();
688 G4double mass2 = element->GetA()*mole/g ;
689 nloss += (NuclearStoppingPower(kinEnergy, z1, z2, mass1, mass2))
690 * atomDensity[iel] ;
691 }
692 nloss *= theZieglerFactor;
693 return nloss;
694}
G4double GetZ() const
Definition: G4Element.hh:131
G4double GetA() const
Definition: G4Element.hh:138

Referenced by G4EmCalculator::ComputeNuclearDEDX().

◆ SetIonisationModels()

void G4EmCorrections::SetIonisationModels ( G4VEmModel m1 = 0,
G4VEmModel m2 = 0 
)
inline

Definition at line 315 of file G4EmCorrections.hh.

316{
317 if(mod1) { ionLEModel = mod1; }
318 if(mod2) { ionHEModel = mod2; }
319}

Referenced by G4ionIonisation::InitialiseEnergyLossProcess().

◆ ShellCorrection()

G4double G4EmCorrections::ShellCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 459 of file G4EmCorrections.cc.

462{
463 SetupKinematics(p, mat, ekin);
464
465 G4double term = 0.0;
466 //G4cout << "### G4EmCorrections::ShellCorrection " << mat->GetName()
467 // << " " << ekin/MeV << " MeV " << G4endl;
468 for (G4int i = 0; i<numberOfElements; ++i) {
469
470 G4double res = 0.0;
471 G4double res0 = 0.0;
472 G4double Z = (*theElementVector)[i]->GetZ();
473 G4int iz = G4int(Z);
474 G4double Z2= (Z-0.3)*(Z-0.3);
475 G4double f = 1.0;
476 if(1 == iz) {
477 f = 0.5;
478 Z2 = 1.0;
479 }
480 G4double eta = ba2/Z2;
481 G4double tet = Z2*(1. + Z2*0.25*alpha2);
482 if(11 < iz) { tet = ThetaK->Value(Z); }
483 res0 = f*KShell(tet,eta);
484 res += res0;
485 //G4cout << " Z= " << iz << " Shell 0" << " tet= " << tet
486 // << " eta= " << eta << " resK= " << res0 << G4endl;
487 if(2 < iz) {
488 G4double Zeff = Z - ZD[10];
489 if(iz < 10) { Zeff = Z - ZD[iz]; }
490 Z2= Zeff*Zeff;
491 eta = ba2/Z2;
492 f = 0.125;
493 tet = ThetaL->Value(Z);
495 G4int nmax = std::min(4, ntot);
496 G4double norm = 0.0;
497 G4double eshell = 0.0;
498 for(G4int j=1; j<nmax; ++j) {
500 if(15 >= iz) {
501 if(3 > j) { tet = 0.25*Z2*(1.0 + 5*Z2*alpha2/16.); }
502 else { tet = 0.25*Z2*(1.0 + Z2*alpha2/16.); }
503 }
504 norm += ne;
505 eshell += tet*ne;
506 res0 = f*ne*LShell(tet,eta);
507 res += res0;
508 //G4cout << " Z= " << iz << " Shell " << j << " Ne= " << ne
509 // << " tet= " << tet << " eta= " << eta
510 // << " resL= " << res0 << G4endl;
511 }
512 if(ntot > nmax) {
513 eshell /= norm;
514 // Add M-shell
515 if(28 > iz) {
516 res += f*(iz - 10)*LShell(eshell,HM[iz-11]*eta);
517 } else if(63 > iz) {
518 res += f*18*LShell(eshell,HM[iz-11]*eta);
519 } else {
520 res += f*18*LShell(eshell,HM[52]*eta);
521 }
522 // Add N-shell
523 if(32 < iz) {
524 if(60 > iz) {
525 res += f*(iz - 28)*LShell(eshell,HN[iz-33]*eta);
526 } else if(63 > iz) {
527 res += 4*LShell(eshell,HN[iz-33]*eta);
528 } else {
529 res += 4*LShell(eshell,HN[30]*eta);
530 }
531 // Add O-P-shells
532 if(60 < iz) {
533 res += f*(iz - 60)*LShell(eshell,150*eta);
534 }
535 }
536 }
537 }
538 term += res*atomDensity[i]/Z;
539 }
540
541 term /= material->GetTotNbOfAtomsPerVolume();
542 //G4cout << "# Shell Correction= " << term << G4endl;
543 return term;
544}

Referenced by G4MuBetheBlochModel::ComputeDEDXPerVolume(), G4BetheBlochModel::ComputeDEDXPerVolume(), and HighOrderCorrections().

◆ ShellCorrectionSTD()

G4double G4EmCorrections::ShellCorrectionSTD ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 425 of file G4EmCorrections.cc.

428{
429 SetupKinematics(p, mat, e);
430 G4double taulim= 8.0*MeV/mass;
431 G4double bg2lim= taulim * (taulim+2.0);
432
433 G4double* shellCorrectionVector =
435 G4double sh = 0.0;
436 G4double x = 1.0;
437 G4double taul = material->GetIonisation()->GetTaul();
438
439 if ( bg2 >= bg2lim ) {
440 for (G4int k=0; k<3; k++) {
441 x *= bg2 ;
442 sh += shellCorrectionVector[k]/x;
443 }
444
445 } else {
446 for (G4int k=0; k<3; k++) {
447 x *= bg2lim ;
448 sh += shellCorrectionVector[k]/x;
449 }
450 sh *= std::log(tau/taul)/std::log(taulim/taul);
451 }
452 sh *= 0.5;
453 return sh;
454}
G4double * GetShellCorrectionVector() const
G4double GetTaul() const

◆ SpinCorrection()

G4double G4EmCorrections::SpinCorrection ( const G4ParticleDefinition p,
const G4Material mat,
G4double  kineticEnergy 
)

Definition at line 262 of file G4EmCorrections.cc.

265{
266 SetupKinematics(p, mat, e);
267 G4double dedx = 0.5*tmax/(kinEnergy + mass);
268 return 0.5*dedx*dedx;
269}

The documentation for this class was generated from the following files: