#include <G4RToEConvForPositron.hh>
Inheritance diagram for G4RToEConvForPositron:
Public Member Functions | |
G4RToEConvForPositron () | |
virtual | ~G4RToEConvForPositron () |
Protected Member Functions | |
virtual G4double | ComputeLoss (G4double AtomicNumber, G4double KineticEnergy) const |
Definition at line 51 of file G4RToEConvForPositron.hh.
G4RToEConvForPositron::G4RToEConvForPositron | ( | ) |
Definition at line 45 of file G4RToEConvForPositron.cc.
References G4ParticleTable::FindParticle(), G4cout, G4endl, G4ParticleTable::GetParticleTable(), G4VRangeToEnergyConverter::GetVerboseLevel(), and G4VRangeToEnergyConverter::theParticle.
00045 : G4VRangeToEnergyConverter() 00046 { 00047 theParticle = G4ParticleTable::GetParticleTable()->FindParticle("e+"); 00048 if (theParticle ==0) { 00049 #ifdef G4VERBOSE 00050 if (GetVerboseLevel()>0) { 00051 G4cout << " G4RToEConvForPositron::G4RToEConvForPositron() "; 00052 G4cout << " Positron is not defined !!" << G4endl; 00053 } 00054 #endif 00055 } 00056 }
G4RToEConvForPositron::~G4RToEConvForPositron | ( | ) | [virtual] |
G4double G4RToEConvForPositron::ComputeLoss | ( | G4double | AtomicNumber, | |
G4double | KineticEnergy | |||
) | const [protected, virtual] |
Implements G4VRangeToEnergyConverter.
Definition at line 68 of file G4RToEConvForPositron.cc.
References G4ParticleDefinition::GetPDGMass(), and G4VRangeToEnergyConverter::theParticle.
00070 { 00071 static G4double Z; 00072 static G4double taul, ionpot, ionpotlog; 00073 const G4double cbr1=0.02, cbr2=-5.7e-5, cbr3=1., cbr4=0.072; 00074 const G4double Tlow=10.*keV, Thigh=1.*GeV; 00075 static G4double bremfactor = 0.1 ; 00076 00077 G4double Mass = theParticle->GetPDGMass(); 00078 // calculate dE/dx for electrons 00079 if( std::fabs(AtomicNumber-Z)>0.1 ) { 00080 Z = AtomicNumber; 00081 taul = Tlow/Mass; 00082 ionpot = 1.6e-5*MeV*std::exp(0.9*std::log(Z))/Mass; 00083 ionpotlog = std::log(ionpot); 00084 } 00085 00086 G4double tau = KineticEnergy/Mass; 00087 G4double dEdx; 00088 00089 if(tau<taul) 00090 { 00091 G4double t1 = taul+1.; 00092 G4double t2 = taul+2.; 00093 G4double tsq = taul*taul; 00094 G4double beta2 = taul*t2/(t1*t1); 00095 G4double f = 2.*std::log(taul) 00096 -(6.*taul+1.5*tsq-taul*(1.-tsq/3.)/t2-tsq*(0.5-tsq/12.)/ 00097 (t2*t2))/(t1*t1); 00098 dEdx = (std::log(2.*taul+4.)-2.*ionpotlog+f)/beta2; 00099 dEdx = twopi_mc2_rcl2*Z*dEdx; 00100 G4double clow = dEdx*std::sqrt(taul); 00101 dEdx = clow/std::sqrt(KineticEnergy/Mass); 00102 00103 } else { 00104 G4double t1 = tau+1.; 00105 G4double t2 = tau+2.; 00106 G4double tsq = tau*tau; 00107 G4double beta2 = tau*t2/(t1*t1); 00108 G4double f = 2.*std::log(tau) 00109 - (6.*tau+1.5*tsq-tau*(1.-tsq/3.)/t2-tsq*(0.5-tsq/12.)/ 00110 (t2*t2))/(t1*t1); 00111 dEdx = (std::log(2.*tau+4.)-2.*ionpotlog+f)/beta2; 00112 dEdx = twopi_mc2_rcl2*Z*dEdx; 00113 00114 // loss from bremsstrahlung follows 00115 G4double cbrem = (cbr1+cbr2*Z) 00116 *(cbr3+cbr4*std::log(KineticEnergy/Thigh)); 00117 cbrem = Z*(Z+1.)*cbrem*tau/beta2; 00118 cbrem *= bremfactor ; 00119 dEdx += twopi_mc2_rcl2*cbrem; 00120 } 00121 return dEdx; 00122 }