#include <G4EmCorrections.hh>
Definition at line 71 of file G4EmCorrections.hh.
G4EmCorrections::G4EmCorrections | ( | ) |
Definition at line 77 of file G4EmCorrections.cc.
References G4ParticleTable::GetIonTable(), G4ParticleTable::GetParticleTable(), and G4NistManager::Instance().
00078 { 00079 particle = 0; 00080 curParticle= 0; 00081 material = 0; 00082 curMaterial= 0; 00083 curVector = 0; 00084 kinEnergy = 0.0; 00085 ionLEModel = 0; 00086 ionHEModel = 0; 00087 nIons = 0; 00088 verbose = 1; 00089 ncouples = 0; 00090 massFactor = 1.0; 00091 eth = 2.0*MeV; 00092 nbinCorr = 20; 00093 eCorrMin = 25.*keV; 00094 eCorrMax = 250.*MeV; 00095 nist = G4NistManager::Instance(); 00096 ionTable = G4ParticleTable::GetParticleTable()->GetIonTable(); 00097 BarkasCorr = ThetaK = ThetaL = 0; 00098 Initialise(); 00099 }
G4EmCorrections::~G4EmCorrections | ( | ) | [virtual] |
Definition at line 103 of file G4EmCorrections.cc.
00104 { 00105 for(G4int i=0; i<nIons; ++i) {delete stopData[i];} 00106 delete BarkasCorr; 00107 delete ThetaK; 00108 delete ThetaL; 00109 }
void G4EmCorrections::AddStoppingData | ( | G4int | Z, | |
G4int | A, | |||
const G4String & | materialName, | |||
G4PhysicsVector * | dVector | |||
) |
Definition at line 791 of file G4EmCorrections.cc.
References G4cout, and G4endl.
Referenced by G4ionIonisation::AddStoppingData().
00794 { 00795 G4int i = 0; 00796 for(; i<nIons; ++i) { 00797 if(Z == Zion[i] && A == Aion[i] && mname == materialName[i]) break; 00798 } 00799 if(i == nIons) { 00800 Zion.push_back(Z); 00801 Aion.push_back(A); 00802 materialName.push_back(mname); 00803 materialList.push_back(0); 00804 ionList.push_back(0); 00805 stopData.push_back(dVector); 00806 nIons++; 00807 if(verbose>1) { 00808 G4cout << "AddStoppingData Z= " << Z << " A= " << A << " " << mname 00809 << " idx= " << i << G4endl; 00810 } 00811 } 00812 }
G4double G4EmCorrections::BarkasCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 575 of file G4EmCorrections.cc.
References G4PhysicsVector::Energy(), G4Material::GetName(), G4Material::GetTotNbOfAtomsPerVolume(), and G4PhysicsVector::Value().
Referenced by ComputeIonCorrections(), HighOrderCorrections(), and IonBarkasCorrection().
00578 { 00579 // . Z^3 Barkas effect in the stopping power of matter for charged particles 00580 // J.C Ashley and R.H.Ritchie 00581 // Physical review B Vol.5 No.7 1 April 1972 pp. 2393-2397 00582 // valid for kineticEnergy > 0.5 MeV 00583 00584 SetupKinematics(p, mat, e); 00585 G4double BarkasTerm = 0.0; 00586 00587 for (G4int i = 0; i<numberOfElements; ++i) { 00588 00589 G4double Z = (*theElementVector)[i]->GetZ(); 00590 G4int iz = G4int(Z); 00591 if(iz == 47) { 00592 BarkasTerm += atomDensity[i]*0.006812*std::pow(beta,-0.9); 00593 } else if(iz >= 64) { 00594 BarkasTerm += atomDensity[i]*0.002833*std::pow(beta,-1.2); 00595 } else { 00596 00597 G4double X = ba2 / Z; 00598 G4double b = 1.3; 00599 if(1 == iz) { 00600 if(material->GetName() == "G4_lH2") { b = 0.6; } 00601 else { b = 1.8; } 00602 } 00603 else if(2 == iz) { b = 0.6; } 00604 else if(10 >= iz) { b = 1.8; } 00605 else if(17 >= iz) { b = 1.4; } 00606 else if(18 == iz) { b = 1.8; } 00607 else if(25 >= iz) { b = 1.4; } 00608 else if(50 >= iz) { b = 1.35;} 00609 00610 G4double W = b/std::sqrt(X); 00611 00612 G4double val = BarkasCorr->Value(W); 00613 if(W > BarkasCorr->Energy(46)) { 00614 val *= BarkasCorr->Energy(46)/W; 00615 } 00616 // G4cout << "i= " << i << " b= " << b << " W= " << W 00617 // << " Z= " << Z << " X= " << X << " val= " << val<< G4endl; 00618 BarkasTerm += val*atomDensity[i] / (std::sqrt(Z*X)*X); 00619 } 00620 } 00621 00622 BarkasTerm *= 1.29*charge/material->GetTotNbOfAtomsPerVolume(); 00623 00624 // temporary protection 00625 //if(charge < -7.0 ) { BarkasTerm *= (-7.0/charge); } 00626 00627 return BarkasTerm; 00628 }
G4double G4EmCorrections::Bethe | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 249 of file G4EmCorrections.cc.
References G4Material::GetIonisation(), and G4IonisParamMat::GetMeanExcitationEnergy().
00252 { 00253 SetupKinematics(p, mat, e); 00254 G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy(); 00255 G4double eexc2 = eexc*eexc; 00256 G4double dedx = 0.5*std::log(2.0*electron_mass_c2*bg2*tmax/eexc2)-beta2; 00257 return dedx; 00258 }
G4double G4EmCorrections::BlochCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 632 of file G4EmCorrections.cc.
Referenced by ComputeIonCorrections(), and HighOrderCorrections().
00635 { 00636 SetupKinematics(p, mat, e); 00637 00638 G4double y2 = q2/ba2; 00639 00640 G4double term = 1.0/(1.0 + y2); 00641 G4double del; 00642 G4double j = 1.0; 00643 do { 00644 j += 1.0; 00645 del = 1.0/(j* (j*j + y2)); 00646 term += del; 00647 } while (del > 0.01*term); 00648 00649 G4double res = -y2*term; 00650 // temporary protection 00651 //if(q2 > 49. && res < -0.2) { res = -0.2; } 00652 00653 return res; 00654 }
G4double G4EmCorrections::ComputeIonCorrections | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 168 of file G4EmCorrections.cc.
References BarkasCorrection(), BlochCorrection(), G4cout, G4endl, G4Material::GetElectronDensity(), and MottCorrection().
Referenced by IonHighOrderCorrections().
00171 { 00172 // . Z^3 Barkas effect in the stopping power of matter for charged particles 00173 // J.C Ashley and R.H.Ritchie 00174 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397 00175 // and ICRU49 report 00176 // valid for kineticEnergy < 0.5 MeV 00177 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980 00178 SetupKinematics(p, mat, e); 00179 if(tau <= 0.0) { return 0.0; } 00180 00181 G4double Barkas = BarkasCorrection (p, mat, e); 00182 G4double Bloch = BlochCorrection (p, mat, e); 00183 G4double Mott = MottCorrection (p, mat, e); 00184 00185 G4double sum = 2.0*(Barkas*(charge - 1.0)/charge + Bloch) + Mott; 00186 00187 if(verbose > 1) { 00188 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas 00189 << " Bloch= " << Bloch << " Mott= " << Mott 00190 << " Sum= " << sum << G4endl; 00191 } 00192 sum *= material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2; 00193 00194 if(verbose > 1) { G4cout << " Sum= " << sum << G4endl; } 00195 return sum; 00196 }
G4double G4EmCorrections::DensityCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 548 of file G4EmCorrections.cc.
References G4IonisParamMat::GetAdensity(), G4IonisParamMat::GetCdensity(), G4Material::GetIonisation(), G4IonisParamMat::GetMdensity(), G4IonisParamMat::GetX0density(), and G4IonisParamMat::GetX1density().
00551 { 00552 SetupKinematics(p, mat, e); 00553 00554 G4double cden = material->GetIonisation()->GetCdensity(); 00555 G4double mden = material->GetIonisation()->GetMdensity(); 00556 G4double aden = material->GetIonisation()->GetAdensity(); 00557 G4double x0den = material->GetIonisation()->GetX0density(); 00558 G4double x1den = material->GetIonisation()->GetX1density(); 00559 00560 G4double twoln10 = 2.0*std::log(10.0); 00561 G4double dedx = 0.0; 00562 00563 // density correction 00564 G4double x = std::log(bg2)/twoln10; 00565 if ( x >= x0den ) { 00566 dedx = twoln10*x - cden ; 00567 if ( x < x1den ) dedx += aden*std::pow((x1den-x),mden) ; 00568 } 00569 00570 return dedx; 00571 }
G4double G4EmCorrections::EffectiveChargeCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 742 of file G4EmCorrections.cc.
References G4cout, G4endl, G4ParticleDefinition::GetAtomicNumber(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), and G4PhysicsVector::Value().
Referenced by G4BraggIonModel::CorrectionsAlongStep(), G4BetheBlochModel::CorrectionsAlongStep(), G4BraggModel::GetChargeSquareRatio(), G4BraggIonModel::GetChargeSquareRatio(), and G4BetheBlochModel::GetChargeSquareRatio().
00745 { 00746 G4double factor = 1.0; 00747 if(p->GetPDGCharge() <= 2.5*eplus || nIons <= 0) return factor; 00748 /* 00749 if(verbose > 1) { 00750 G4cout << "EffectiveChargeCorrection: " << p->GetParticleName() 00751 << " in " << mat->GetName() 00752 << " ekin(MeV)= " << ekin/MeV << G4endl; 00753 } 00754 */ 00755 if(p != curParticle || mat != curMaterial) { 00756 curParticle = p; 00757 curMaterial = mat; 00758 curVector = 0; 00759 currentZ = p->GetAtomicNumber(); 00760 if(verbose > 1) { 00761 G4cout << "G4EmCorrections::EffectiveChargeCorrection: Zion= " 00762 << currentZ << " Aion= " << p->GetPDGMass()/amu_c2 << G4endl; 00763 } 00764 massFactor = proton_mass_c2/p->GetPDGMass(); 00765 idx = -1; 00766 00767 for(G4int i=0; i<nIons; ++i) { 00768 if(materialList[i] == mat && currentZ == Zion[i]) { 00769 idx = i; 00770 break; 00771 } 00772 } 00773 // G4cout << " idx= " << idx << " dz= " << G4endl; 00774 if(idx >= 0) { 00775 if(!ionList[idx]) BuildCorrectionVector(); 00776 if(ionList[idx]) curVector = stopData[idx]; 00777 } else { return factor; } 00778 } 00779 if(curVector) { 00780 factor = curVector->Value(ekin*massFactor); 00781 if(verbose > 1) { 00782 G4cout << "E= " << ekin << " factor= " << factor << " massfactor= " 00783 << massFactor << G4endl; 00784 } 00785 } 00786 return factor; 00787 }
G4double G4EmCorrections::EffectiveChargeSquareRatio | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) | [inline] |
Definition at line 335 of file G4EmCorrections.hh.
References G4ionEffectiveCharge::EffectiveChargeSquareRatio().
Referenced by G4BraggIonModel::CorrectionsAlongStep(), G4BetheBlochModel::CorrectionsAlongStep(), G4BraggModel::GetChargeSquareRatio(), G4BraggIonModel::GetChargeSquareRatio(), G4BetheBlochModel::GetChargeSquareRatio(), and G4UAtomicDeexcitation::GetShellIonisationCrossSectionPerAtom().
00338 { 00339 return effCharge.EffectiveChargeSquareRatio(p,mat,kineticEnergy); 00340 }
G4int G4EmCorrections::GetNumberOfStoppingVectors | ( | ) | [inline] |
G4double G4EmCorrections::GetParticleCharge | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) | [inline] |
Definition at line 327 of file G4EmCorrections.hh.
References G4ionEffectiveCharge::EffectiveCharge().
Referenced by G4BraggModel::GetParticleCharge(), G4BraggIonModel::GetParticleCharge(), and G4BetheBlochModel::GetParticleCharge().
00330 { 00331 return effCharge.EffectiveCharge(p,mat,kineticEnergy); 00332 }
G4double G4EmCorrections::HighOrderCorrections | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy, | |||
G4double | cutEnergy | |||
) |
Definition at line 113 of file G4EmCorrections.cc.
References BarkasCorrection(), BlochCorrection(), G4cout, G4endl, G4Material::GetElectronDensity(), G4Material::GetName(), KShellCorrection(), LShellCorrection(), MottCorrection(), and ShellCorrection().
Referenced by G4MuBetheBlochModel::ComputeDEDXPerVolume(), and G4BetheBlochModel::ComputeDEDXPerVolume().
00116 { 00117 // . Z^3 Barkas effect in the stopping power of matter for charged particles 00118 // J.C Ashley and R.H.Ritchie 00119 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397 00120 // and ICRU49 report 00121 // valid for kineticEnergy < 0.5 MeV 00122 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980 00123 00124 SetupKinematics(p, mat, e); 00125 if(tau <= 0.0) { return 0.0; } 00126 00127 G4double Barkas = BarkasCorrection (p, mat, e); 00128 G4double Bloch = BlochCorrection (p, mat, e); 00129 G4double Mott = MottCorrection (p, mat, e); 00130 00131 G4double sum = (2.0*(Barkas + Bloch) + Mott); 00132 00133 if(verbose > 1) { 00134 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas 00135 << " Bloch= " << Bloch << " Mott= " << Mott 00136 << " Sum= " << sum << " q2= " << q2 << G4endl; 00137 G4cout << " ShellCorrection: " << ShellCorrection(p, mat, e) 00138 << " Kshell= " << KShellCorrection(p, mat, e) 00139 << " Lshell= " << LShellCorrection(p, mat, e) 00140 << " " << mat->GetName() << G4endl; 00141 } 00142 sum *= material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2; 00143 return sum; 00144 }
void G4EmCorrections::InitialiseForNewRun | ( | ) |
Definition at line 892 of file G4EmCorrections.cc.
References G4MaterialCutsCouple::GetMaterial(), G4ProductionCutsTable::GetMaterialCutsCouple(), G4ProductionCutsTable::GetProductionCutsTable(), and G4ProductionCutsTable::GetTableSize().
Referenced by G4ionIonisation::InitialiseEnergyLossProcess().
00893 { 00894 G4ProductionCutsTable* tb = G4ProductionCutsTable::GetProductionCutsTable(); 00895 ncouples = tb->GetTableSize(); 00896 if(currmat.size() != ncouples) { 00897 currmat.resize(ncouples); 00898 for(std::map< G4int, std::vector<G4double> >::iterator it = 00899 thcorr.begin(); it != thcorr.end(); ++it){ 00900 (it->second).clear(); 00901 } 00902 thcorr.clear(); 00903 for(size_t i=0; i<ncouples; ++i) { 00904 currmat[i] = tb->GetMaterialCutsCouple(i)->GetMaterial(); 00905 G4String nam = currmat[i]->GetName(); 00906 for(G4int j=0; j<nIons; ++j) { 00907 if(nam == materialName[j]) { materialList[j] = currmat[i]; } 00908 } 00909 } 00910 } 00911 }
G4double G4EmCorrections::IonBarkasCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 148 of file G4EmCorrections.cc.
References BarkasCorrection(), and G4Material::GetElectronDensity().
Referenced by G4BetheBlochModel::ComputeDEDXPerVolume().
00151 { 00152 // . Z^3 Barkas effect in the stopping power of matter for charged particles 00153 // J.C Ashley and R.H.Ritchie 00154 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397 00155 // and ICRU49 report 00156 // valid for kineticEnergy < 0.5 MeV 00157 00158 SetupKinematics(p, mat, e); 00159 G4double res = 0.0; 00160 if(tau > 0.0) 00161 res = 2.0*BarkasCorrection(p, mat, e)* 00162 material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2; 00163 return res; 00164 }
G4double G4EmCorrections::IonHighOrderCorrections | ( | const G4ParticleDefinition * | , | |
const G4MaterialCutsCouple * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 200 of file G4EmCorrections.cc.
References ComputeIonCorrections(), G4cout, G4endl, G4MaterialCutsCouple::GetIndex(), G4MaterialCutsCouple::GetMaterial(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGEncoding(), and G4ParticleDefinition::GetPDGMass().
Referenced by G4BetheBlochModel::CorrectionsAlongStep().
00203 { 00204 // . Z^3 Barkas effect in the stopping power of matter for charged particles 00205 // J.C Ashley and R.H.Ritchie 00206 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397 00207 // and ICRU49 report 00208 // valid for kineticEnergy < 0.5 MeV 00209 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980 00210 00211 G4double sum = 0.0; 00212 00213 if(ionHEModel) { 00214 G4int Z = G4int(p->GetPDGCharge()/eplus + 0.5); 00215 if(Z >= 100) Z = 99; 00216 else if(Z < 1) Z = 1; 00217 00218 G4double ethscaled = eth*p->GetPDGMass()/proton_mass_c2; 00219 G4int ionPDG = p->GetPDGEncoding(); 00220 if(thcorr.find(ionPDG)==thcorr.end()) { // Not found: fill the map 00221 std::vector<G4double> v; 00222 for(size_t i=0; i<ncouples; ++i){ 00223 v.push_back(ethscaled*ComputeIonCorrections(p,currmat[i],ethscaled)); 00224 } 00225 thcorr.insert(std::pair< G4int, std::vector<G4double> >(ionPDG,v)); 00226 } 00227 00228 //G4cout << " map size=" << thcorr.size() << G4endl; 00229 //for(std::map< G4int, std::vector<G4double> >::iterator 00230 // it = thcorr.begin(); it != thcorr.end(); ++it){ 00231 // G4cout << "\t map element: first (key)=" << it->first 00232 // << "\t second (vector): vec size=" << (it->second).size() << G4endl; 00233 // for(size_t i=0; i<(it->second).size(); ++i){ 00234 // G4cout << "\t \t vec element: [" << i << "]=" << (it->second)[i] << G4endl; 00235 // } 00236 //} 00237 00238 G4double rest = (thcorr.find(ionPDG)->second)[couple->GetIndex()]; 00239 00240 sum = ComputeIonCorrections(p,couple->GetMaterial(),e) - rest/e; 00241 00242 if(verbose > 1) { G4cout << " Sum= " << sum << " dSum= " << rest/e << G4endl; } 00243 } 00244 return sum; 00245 }
G4double G4EmCorrections::KShellCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 273 of file G4EmCorrections.cc.
References G4Material::GetTotNbOfAtomsPerVolume(), and G4PhysicsVector::Value().
Referenced by HighOrderCorrections().
00276 { 00277 SetupKinematics(p, mat, e); 00278 G4double term = 0.0; 00279 for (G4int i = 0; i<numberOfElements; ++i) { 00280 00281 G4double Z = (*theElementVector)[i]->GetZ(); 00282 G4int iz = G4int(Z); 00283 G4double f = 1.0; 00284 G4double Z2= (Z-0.3)*(Z-0.3); 00285 if(1 == iz) { 00286 f = 0.5; 00287 Z2 = 1.0; 00288 } 00289 G4double eta = ba2/Z2; 00290 G4double tet = Z2*(1. + Z2*0.25*alpha2); 00291 if(11 < iz) { tet = ThetaK->Value(Z); } 00292 term += f*atomDensity[i]*KShell(tet,eta)/Z; 00293 } 00294 00295 term /= material->GetTotNbOfAtomsPerVolume(); 00296 00297 return term; 00298 }
G4double G4EmCorrections::LShellCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 302 of file G4EmCorrections.cc.
References G4AtomicShells::GetNumberOfElectrons(), G4AtomicShells::GetNumberOfShells(), G4Material::GetTotNbOfAtomsPerVolume(), and G4PhysicsVector::Value().
Referenced by HighOrderCorrections().
00305 { 00306 SetupKinematics(p, mat, e); 00307 G4double term = 0.0; 00308 for (G4int i = 0; i<numberOfElements; ++i) { 00309 00310 G4double Z = (*theElementVector)[i]->GetZ(); 00311 G4int iz = G4int(Z); 00312 if(2 < iz) { 00313 G4double Zeff = Z - ZD[10]; 00314 if(iz < 10) { Zeff = Z - ZD[iz]; } 00315 G4double Z2= Zeff*Zeff; 00316 G4double f = 0.125; 00317 G4double eta = ba2/Z2; 00318 G4double tet = ThetaL->Value(Z); 00319 G4int nmax = std::min(4,G4AtomicShells::GetNumberOfShells(iz)); 00320 for(G4int j=1; j<nmax; ++j) { 00321 G4int ne = G4AtomicShells::GetNumberOfElectrons(iz,j); 00322 if(15 >= iz) { 00323 if(3 > j) { tet = 0.25*Z2*(1.0 + 5*Z2*alpha2/16.); } 00324 else { tet = 0.25*Z2*(1.0 + Z2*alpha2/16.); } 00325 } 00326 //G4cout << " LShell: j= " << j << " ne= " << ne << " e(eV)= " << e/eV 00327 // << " ThetaL= " << tet << G4endl; 00328 term += f*ne*atomDensity[i]*LShell(tet,eta)/Z; 00329 } 00330 } 00331 } 00332 00333 term /= material->GetTotNbOfAtomsPerVolume(); 00334 00335 return term; 00336 }
G4double G4EmCorrections::MottCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 658 of file G4EmCorrections.cc.
References G4INCL::Math::pi.
Referenced by ComputeIonCorrections(), and HighOrderCorrections().
00661 { 00662 SetupKinematics(p, mat, e); 00663 G4double mterm = CLHEP::pi*fine_structure_const*beta*charge; 00664 return mterm; 00665 }
G4double G4EmCorrections::NuclearDEDX | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy, | |||
G4bool | fluct = true | |||
) |
Definition at line 669 of file G4EmCorrections.cc.
References G4ParticleDefinition::GetPDGCharge().
Referenced by G4EmCalculator::ComputeNuclearDEDX().
00673 { 00674 G4double nloss = 0.0; 00675 if(e <= 0.0) return nloss; 00676 SetupKinematics(p, mat, e); 00677 00678 lossFlucFlag = fluct; 00679 00680 // Projectile nucleus 00681 G4double z1 = std::fabs(particle->GetPDGCharge()/eplus); 00682 G4double mass1 = mass/amu_c2; 00683 00684 // loop for the elements in the material 00685 for (G4int iel=0; iel<numberOfElements; iel++) { 00686 const G4Element* element = (*theElementVector)[iel] ; 00687 G4double z2 = element->GetZ(); 00688 G4double mass2 = element->GetA()*mole/g ; 00689 nloss += (NuclearStoppingPower(kinEnergy, z1, z2, mass1, mass2)) 00690 * atomDensity[iel] ; 00691 } 00692 nloss *= theZieglerFactor; 00693 return nloss; 00694 }
void G4EmCorrections::SetIonisationModels | ( | G4VEmModel * | m1 = 0 , |
|
G4VEmModel * | m2 = 0 | |||
) | [inline] |
G4double G4EmCorrections::ShellCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 459 of file G4EmCorrections.cc.
References G4AtomicShells::GetNumberOfElectrons(), G4AtomicShells::GetNumberOfShells(), G4Material::GetTotNbOfAtomsPerVolume(), and G4PhysicsVector::Value().
Referenced by G4MuBetheBlochModel::ComputeDEDXPerVolume(), G4BetheBlochModel::ComputeDEDXPerVolume(), and HighOrderCorrections().
00462 { 00463 SetupKinematics(p, mat, ekin); 00464 00465 G4double term = 0.0; 00466 //G4cout << "### G4EmCorrections::ShellCorrection " << mat->GetName() 00467 // << " " << ekin/MeV << " MeV " << G4endl; 00468 for (G4int i = 0; i<numberOfElements; ++i) { 00469 00470 G4double res = 0.0; 00471 G4double res0 = 0.0; 00472 G4double Z = (*theElementVector)[i]->GetZ(); 00473 G4int iz = G4int(Z); 00474 G4double Z2= (Z-0.3)*(Z-0.3); 00475 G4double f = 1.0; 00476 if(1 == iz) { 00477 f = 0.5; 00478 Z2 = 1.0; 00479 } 00480 G4double eta = ba2/Z2; 00481 G4double tet = Z2*(1. + Z2*0.25*alpha2); 00482 if(11 < iz) { tet = ThetaK->Value(Z); } 00483 res0 = f*KShell(tet,eta); 00484 res += res0; 00485 //G4cout << " Z= " << iz << " Shell 0" << " tet= " << tet 00486 // << " eta= " << eta << " resK= " << res0 << G4endl; 00487 if(2 < iz) { 00488 G4double Zeff = Z - ZD[10]; 00489 if(iz < 10) { Zeff = Z - ZD[iz]; } 00490 Z2= Zeff*Zeff; 00491 eta = ba2/Z2; 00492 f = 0.125; 00493 tet = ThetaL->Value(Z); 00494 G4int ntot = G4AtomicShells::GetNumberOfShells(iz); 00495 G4int nmax = std::min(4, ntot); 00496 G4double norm = 0.0; 00497 G4double eshell = 0.0; 00498 for(G4int j=1; j<nmax; ++j) { 00499 G4int ne = G4AtomicShells::GetNumberOfElectrons(iz,j); 00500 if(15 >= iz) { 00501 if(3 > j) { tet = 0.25*Z2*(1.0 + 5*Z2*alpha2/16.); } 00502 else { tet = 0.25*Z2*(1.0 + Z2*alpha2/16.); } 00503 } 00504 norm += ne; 00505 eshell += tet*ne; 00506 res0 = f*ne*LShell(tet,eta); 00507 res += res0; 00508 //G4cout << " Z= " << iz << " Shell " << j << " Ne= " << ne 00509 // << " tet= " << tet << " eta= " << eta 00510 // << " resL= " << res0 << G4endl; 00511 } 00512 if(ntot > nmax) { 00513 eshell /= norm; 00514 // Add M-shell 00515 if(28 > iz) { 00516 res += f*(iz - 10)*LShell(eshell,HM[iz-11]*eta); 00517 } else if(63 > iz) { 00518 res += f*18*LShell(eshell,HM[iz-11]*eta); 00519 } else { 00520 res += f*18*LShell(eshell,HM[52]*eta); 00521 } 00522 // Add N-shell 00523 if(32 < iz) { 00524 if(60 > iz) { 00525 res += f*(iz - 28)*LShell(eshell,HN[iz-33]*eta); 00526 } else if(63 > iz) { 00527 res += 4*LShell(eshell,HN[iz-33]*eta); 00528 } else { 00529 res += 4*LShell(eshell,HN[30]*eta); 00530 } 00531 // Add O-P-shells 00532 if(60 < iz) { 00533 res += f*(iz - 60)*LShell(eshell,150*eta); 00534 } 00535 } 00536 } 00537 } 00538 term += res*atomDensity[i]/Z; 00539 } 00540 00541 term /= material->GetTotNbOfAtomsPerVolume(); 00542 //G4cout << "# Shell Correction= " << term << G4endl; 00543 return term; 00544 }
G4double G4EmCorrections::ShellCorrectionSTD | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 425 of file G4EmCorrections.cc.
References G4Material::GetIonisation(), G4IonisParamMat::GetShellCorrectionVector(), and G4IonisParamMat::GetTaul().
00428 { 00429 SetupKinematics(p, mat, e); 00430 G4double taulim= 8.0*MeV/mass; 00431 G4double bg2lim= taulim * (taulim+2.0); 00432 00433 G4double* shellCorrectionVector = 00434 material->GetIonisation()->GetShellCorrectionVector(); 00435 G4double sh = 0.0; 00436 G4double x = 1.0; 00437 G4double taul = material->GetIonisation()->GetTaul(); 00438 00439 if ( bg2 >= bg2lim ) { 00440 for (G4int k=0; k<3; k++) { 00441 x *= bg2 ; 00442 sh += shellCorrectionVector[k]/x; 00443 } 00444 00445 } else { 00446 for (G4int k=0; k<3; k++) { 00447 x *= bg2lim ; 00448 sh += shellCorrectionVector[k]/x; 00449 } 00450 sh *= std::log(tau/taul)/std::log(taulim/taul); 00451 } 00452 sh *= 0.5; 00453 return sh; 00454 }
G4double G4EmCorrections::SpinCorrection | ( | const G4ParticleDefinition * | , | |
const G4Material * | , | |||
G4double | kineticEnergy | |||
) |
Definition at line 262 of file G4EmCorrections.cc.
00265 { 00266 SetupKinematics(p, mat, e); 00267 G4double dedx = 0.5*tmax/(kinEnergy + mass); 00268 return 0.5*dedx*dedx; 00269 }