#include <G4BetheBlochModel.hh>
Inheritance diagram for G4BetheBlochModel:
Definition at line 72 of file G4BetheBlochModel.hh.
G4BetheBlochModel::G4BetheBlochModel | ( | const G4ParticleDefinition * | p = 0 , |
|
const G4String & | nam = "BetheBloch" | |||
) |
Definition at line 73 of file G4BetheBlochModel.cc.
References G4Electron::Electron(), G4LossTableManager::EmCorrections(), G4NistManager::Instance(), G4LossTableManager::Instance(), and G4VEmModel::SetLowEnergyLimit().
00075 : G4VEmModel(nam), 00076 particle(0), 00077 tlimit(DBL_MAX), 00078 twoln10(2.0*log(10.0)), 00079 bg2lim(0.0169), 00080 taulim(8.4146e-3), 00081 isIon(false), 00082 isInitialised(false) 00083 { 00084 fParticleChange = 0; 00085 theElectron = G4Electron::Electron(); 00086 if(p) { 00087 SetGenericIon(p); 00088 SetParticle(p); 00089 } else { 00090 SetParticle(theElectron); 00091 } 00092 corr = G4LossTableManager::Instance()->EmCorrections(); 00093 nist = G4NistManager::Instance(); 00094 SetLowEnergyLimit(2.0*MeV); 00095 }
G4BetheBlochModel::~G4BetheBlochModel | ( | ) | [virtual] |
G4double G4BetheBlochModel::ComputeCrossSectionPerAtom | ( | const G4ParticleDefinition * | , | |
G4double | kineticEnergy, | |||
G4double | Z, | |||
G4double | A, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 211 of file G4BetheBlochModel.cc.
References ComputeCrossSectionPerElectron().
00217 { 00218 G4double cross = Z*ComputeCrossSectionPerElectron 00219 (p,kineticEnergy,cutEnergy,maxEnergy); 00220 return cross; 00221 }
G4double G4BetheBlochModel::ComputeCrossSectionPerElectron | ( | const G4ParticleDefinition * | , | |
G4double | kineticEnergy, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Definition at line 174 of file G4BetheBlochModel.cc.
References MaxSecondaryEnergy().
Referenced by ComputeCrossSectionPerAtom(), and CrossSectionPerVolume().
00178 { 00179 G4double cross = 0.0; 00180 G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); 00181 G4double maxEnergy = min(tmax,maxKinEnergy); 00182 if(cutEnergy < maxEnergy) { 00183 00184 G4double totEnergy = kineticEnergy + mass; 00185 G4double energy2 = totEnergy*totEnergy; 00186 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2; 00187 00188 cross = 1.0/cutEnergy - 1.0/maxEnergy 00189 - beta2*log(maxEnergy/cutEnergy)/tmax; 00190 00191 // +term for spin=1/2 particle 00192 if( 0.5 == spin ) { cross += 0.5*(maxEnergy - cutEnergy)/energy2; } 00193 00194 // High order correction different for hadrons and ions 00195 // nevetheless they are applied to reduce high energy transfers 00196 // if(!isIon) 00197 //cross += corr->FiniteSizeCorrectionXS(p,currentMaterial, 00198 // kineticEnergy,cutEnergy); 00199 00200 cross *= twopi_mc2_rcl2*chargeSquare/beta2; 00201 } 00202 00203 // G4cout << "BB: e= " << kineticEnergy << " tmin= " << cutEnergy 00204 // << " tmax= " << tmax << " cross= " << cross << G4endl; 00205 00206 return cross; 00207 }
G4double G4BetheBlochModel::ComputeDEDXPerVolume | ( | const G4Material * | , | |
const G4ParticleDefinition * | , | |||
G4double | kineticEnergy, | |||
G4double | cutEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Reimplemented in G4BetheBlochNoDeltaModel.
Definition at line 240 of file G4BetheBlochModel.cc.
References G4IonisParamMat::DensityCorrection(), G4InuclParticleNames::gam, G4Material::GetElectronDensity(), G4Material::GetIonisation(), G4IonisParamMat::GetMeanExcitationEnergy(), G4EmCorrections::HighOrderCorrections(), G4EmCorrections::IonBarkasCorrection(), MaxSecondaryEnergy(), and G4EmCorrections::ShellCorrection().
Referenced by G4BetheBlochNoDeltaModel::ComputeDEDXPerVolume().
00244 { 00245 G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); 00246 G4double cutEnergy = std::min(cut,tmax); 00247 00248 G4double tau = kineticEnergy/mass; 00249 G4double gam = tau + 1.0; 00250 G4double bg2 = tau * (tau+2.0); 00251 G4double beta2 = bg2/(gam*gam); 00252 00253 G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy(); 00254 G4double eexc2 = eexc*eexc; 00255 00256 G4double eDensity = material->GetElectronDensity(); 00257 00258 G4double dedx = log(2.0*electron_mass_c2*bg2*cutEnergy/eexc2) 00259 - (1.0 + cutEnergy/tmax)*beta2; 00260 00261 if(0.5 == spin) { 00262 G4double del = 0.5*cutEnergy/(kineticEnergy + mass); 00263 dedx += del*del; 00264 } 00265 00266 // density correction 00267 G4double x = log(bg2)/twoln10; 00268 dedx -= material->GetIonisation()->DensityCorrection(x); 00269 00270 // shell correction 00271 dedx -= 2.0*corr->ShellCorrection(p,material,kineticEnergy); 00272 00273 // now compute the total ionization loss 00274 dedx *= twopi_mc2_rcl2*chargeSquare*eDensity/beta2; 00275 00276 //High order correction different for hadrons and ions 00277 if(isIon) { 00278 dedx += corr->IonBarkasCorrection(p,material,kineticEnergy); 00279 } else { 00280 dedx += corr->HighOrderCorrections(p,material,kineticEnergy,cutEnergy); 00281 } 00282 00283 if (dedx < 0.0) { dedx = 0.0; } 00284 00285 //G4cout << "E(MeV)= " << kineticEnergy/MeV << " dedx= " << dedx 00286 // << " " << material->GetName() << G4endl; 00287 00288 return dedx; 00289 }
void G4BetheBlochModel::CorrectionsAlongStep | ( | const G4MaterialCutsCouple * | couple, | |
const G4DynamicParticle * | dp, | |||
G4double & | eloss, | |||
G4double & | , | |||
G4double | length | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 293 of file G4BetheBlochModel.cc.
References G4EmCorrections::EffectiveChargeCorrection(), G4EmCorrections::EffectiveChargeSquareRatio(), G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), G4MaterialCutsCouple::GetMaterial(), G4VEmModel::GetModelOfFluctuations(), G4EmCorrections::IonHighOrderCorrections(), and G4VEmFluctuationModel::SetParticleAndCharge().
00298 { 00299 if(isIon) { 00300 const G4ParticleDefinition* p = dp->GetDefinition(); 00301 const G4Material* mat = couple->GetMaterial(); 00302 G4double preKinEnergy = dp->GetKineticEnergy(); 00303 G4double e = preKinEnergy - eloss*0.5; 00304 if(e < preKinEnergy*0.75) { e = preKinEnergy*0.75; } 00305 00306 G4double q2 = corr->EffectiveChargeSquareRatio(p,mat,e); 00307 GetModelOfFluctuations()->SetParticleAndCharge(p, q2); 00308 G4double qfactor = q2*corr->EffectiveChargeCorrection(p,mat,e)/corrFactor; 00309 G4double highOrder = length*corr->IonHighOrderCorrections(p,couple,e); 00310 G4double elossnew = eloss*qfactor + highOrder; 00311 if(elossnew > preKinEnergy) { elossnew = preKinEnergy; } 00312 else if(elossnew < eloss*0.5) { elossnew = eloss*0.5; } 00313 eloss = elossnew; 00314 //G4cout << "G4BetheBlochModel::CorrectionsAlongStep: e= " << preKinEnergy 00315 // << " qfactor= " << qfactor 00316 // << " highOrder= " << highOrder << " (" << highOrder/eloss << ")" << G4endl; 00317 } 00318 }
G4double G4BetheBlochModel::CrossSectionPerVolume | ( | const G4Material * | , | |
const G4ParticleDefinition * | , | |||
G4double | kineticEnergy, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Reimplemented in G4BetheBlochNoDeltaModel.
Definition at line 225 of file G4BetheBlochModel.cc.
References ComputeCrossSectionPerElectron(), and G4Material::GetElectronDensity().
00231 { 00232 G4double eDensity = material->GetElectronDensity(); 00233 G4double cross = eDensity*ComputeCrossSectionPerElectron 00234 (p,kineticEnergy,cutEnergy,maxEnergy); 00235 return cross; 00236 }
G4double G4BetheBlochModel::GetChargeSquareRatio | ( | ) | const [inline, protected] |
G4double G4BetheBlochModel::GetChargeSquareRatio | ( | const G4ParticleDefinition * | p, | |
const G4Material * | mat, | |||
G4double | kineticEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 125 of file G4BetheBlochModel.cc.
References G4EmCorrections::EffectiveChargeCorrection(), and G4EmCorrections::EffectiveChargeSquareRatio().
00128 { 00129 // this method is called only for ions 00130 G4double q2 = corr->EffectiveChargeSquareRatio(p,mat,kineticEnergy); 00131 corrFactor = q2*corr->EffectiveChargeCorrection(p,mat,kineticEnergy); 00132 return corrFactor; 00133 }
G4double G4BetheBlochModel::GetParticleCharge | ( | const G4ParticleDefinition * | p, | |
const G4Material * | mat, | |||
G4double | kineticEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Reimplemented in G4BetheBlochIonGasModel.
Definition at line 137 of file G4BetheBlochModel.cc.
References G4EmCorrections::GetParticleCharge().
00140 { 00141 // this method is called only for ions, so no check if it is an ion 00142 return corr->GetParticleCharge(p,mat,kineticEnergy); 00143 }
void G4BetheBlochModel::Initialise | ( | const G4ParticleDefinition * | , | |
const G4DataVector & | ||||
) | [virtual] |
Implements G4VEmModel.
Definition at line 104 of file G4BetheBlochModel.cc.
References G4VEmModel::GetParticleChangeForLoss(), and G4VEmModel::SetDeexcitationFlag().
00106 { 00107 SetGenericIon(p); 00108 SetParticle(p); 00109 00110 //G4cout << "G4BetheBlochModel::Initialise for " << p->GetParticleName() 00111 // << " isIon= " << isIon 00112 // << G4endl; 00113 00114 // always false before the run 00115 SetDeexcitationFlag(false); 00116 00117 if(!isInitialised) { 00118 isInitialised = true; 00119 fParticleChange = GetParticleChangeForLoss(); 00120 } 00121 }
G4double G4BetheBlochModel::MaxSecondaryEnergy | ( | const G4ParticleDefinition * | , | |
G4double | kinEnergy | |||
) | [protected, virtual] |
Reimplemented from G4VEmModel.
Definition at line 427 of file G4BetheBlochModel.cc.
Referenced by ComputeCrossSectionPerElectron(), and ComputeDEDXPerVolume().
00429 { 00430 // here particle type is checked for any method 00431 SetParticle(pd); 00432 G4double tau = kinEnergy/mass; 00433 G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) / 00434 (1. + 2.0*(tau + 1.)*ratio + ratio*ratio); 00435 return std::min(tmax,tlimit); 00436 }
virtual void G4BetheBlochModel::SampleSecondaries | ( | std::vector< G4DynamicParticle * > * | , | |
const G4MaterialCutsCouple * | , | |||
const G4DynamicParticle * | , | |||
G4double | tmin, | |||
G4double | maxEnergy | |||
) | [virtual] |
Implements G4VEmModel.
void G4BetheBlochModel::SetChargeSquareRatio | ( | G4double | val | ) | [inline, protected] |
Definition at line 200 of file G4BetheBlochModel.hh.
Referenced by G4BetheBlochIonGasModel::ChargeSquareRatio().