#include <G4MuBetheBlochModel.hh>
Inheritance diagram for G4MuBetheBlochModel:
Definition at line 69 of file G4MuBetheBlochModel.hh.
G4MuBetheBlochModel::G4MuBetheBlochModel | ( | const G4ParticleDefinition * | p = 0 , |
|
const G4String & | nam = "MuBetheBloch" | |||
) |
Definition at line 78 of file G4MuBetheBlochModel.cc.
References G4Electron::Electron(), G4LossTableManager::EmCorrections(), and G4LossTableManager::Instance().
00080 : G4VEmModel(nam), 00081 particle(0), 00082 limitKinEnergy(100.*keV), 00083 logLimitKinEnergy(log(limitKinEnergy)), 00084 twoln10(2.0*log(10.0)), 00085 bg2lim(0.0169), 00086 taulim(8.4146e-3), 00087 alphaprime(fine_structure_const/twopi) 00088 { 00089 theElectron = G4Electron::Electron(); 00090 corr = G4LossTableManager::Instance()->EmCorrections(); 00091 fParticleChange = 0; 00092 00093 // initial initialisation of memeber should be overwritten 00094 // by SetParticle 00095 mass = massSquare = ratio = 1.0; 00096 00097 if(p) { SetParticle(p); } 00098 }
G4MuBetheBlochModel::~G4MuBetheBlochModel | ( | ) | [virtual] |
G4double G4MuBetheBlochModel::ComputeCrossSectionPerAtom | ( | const G4ParticleDefinition * | , | |
G4double | kineticEnergy, | |||
G4double | Z, | |||
G4double | A, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 184 of file G4MuBetheBlochModel.cc.
References ComputeCrossSectionPerElectron().
00190 { 00191 G4double cross = Z*ComputeCrossSectionPerElectron 00192 (p,kineticEnergy,cutEnergy,maxEnergy); 00193 return cross; 00194 }
G4double G4MuBetheBlochModel::ComputeCrossSectionPerElectron | ( | const G4ParticleDefinition * | , | |
G4double | kineticEnergy, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Definition at line 135 of file G4MuBetheBlochModel.cc.
References MaxSecondaryEnergy().
Referenced by ComputeCrossSectionPerAtom(), and CrossSectionPerVolume().
00140 { 00141 G4double cross = 0.0; 00142 G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); 00143 G4double maxEnergy = min(tmax,maxKinEnergy); 00144 if(cutEnergy < maxEnergy) { 00145 00146 G4double totEnergy = kineticEnergy + mass; 00147 G4double energy2 = totEnergy*totEnergy; 00148 G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2; 00149 00150 cross = 1.0/cutEnergy - 1.0/maxEnergy - beta2*log(maxEnergy/cutEnergy)/tmax 00151 + 0.5*(maxEnergy - cutEnergy)/energy2; 00152 00153 // radiative corrections of R. Kokoulin 00154 if (maxEnergy > limitKinEnergy) { 00155 00156 G4double logtmax = log(maxEnergy); 00157 G4double logtmin = log(max(cutEnergy,limitKinEnergy)); 00158 G4double logstep = logtmax - logtmin; 00159 G4double dcross = 0.0; 00160 00161 for (G4int ll=0; ll<8; ll++) 00162 { 00163 G4double ep = exp(logtmin + xgi[ll]*logstep); 00164 G4double a1 = log(1.0 + 2.0*ep/electron_mass_c2); 00165 G4double a3 = log(4.0*totEnergy*(totEnergy - ep)/massSquare); 00166 dcross += wgi[ll]*(1.0/ep - beta2/tmax + 0.5*ep/energy2)*a1*(a3 - a1); 00167 } 00168 00169 cross += dcross*logstep*alphaprime; 00170 } 00171 00172 cross *= twopi_mc2_rcl2/beta2; 00173 00174 } 00175 00176 // G4cout << "tmin= " << cutEnergy << " tmax= " << tmax 00177 // << " cross= " << cross << G4endl; 00178 00179 return cross; 00180 }
G4double G4MuBetheBlochModel::ComputeDEDXPerVolume | ( | const G4Material * | , | |
const G4ParticleDefinition * | , | |||
G4double | kineticEnergy, | |||
G4double | cutEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 213 of file G4MuBetheBlochModel.cc.
References G4IonisParamMat::DensityCorrection(), G4InuclParticleNames::gam, G4Material::GetElectronDensity(), G4Material::GetIonisation(), G4IonisParamMat::GetMeanExcitationEnergy(), G4EmCorrections::HighOrderCorrections(), MaxSecondaryEnergy(), and G4EmCorrections::ShellCorrection().
00217 { 00218 G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); 00219 G4double tau = kineticEnergy/mass; 00220 G4double cutEnergy = min(cut,tmax); 00221 G4double gam = tau + 1.0; 00222 G4double bg2 = tau * (tau+2.0); 00223 G4double beta2 = bg2/(gam*gam); 00224 00225 G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy(); 00226 G4double eexc2 = eexc*eexc; 00227 //G4double cden = material->GetIonisation()->GetCdensity(); 00228 //G4double mden = material->GetIonisation()->GetMdensity(); 00229 //G4double aden = material->GetIonisation()->GetAdensity(); 00230 //G4double x0den = material->GetIonisation()->GetX0density(); 00231 //G4double x1den = material->GetIonisation()->GetX1density(); 00232 00233 G4double eDensity = material->GetElectronDensity(); 00234 00235 G4double dedx = log(2.0*electron_mass_c2*bg2*cutEnergy/eexc2) 00236 -(1.0 + cutEnergy/tmax)*beta2; 00237 00238 G4double totEnergy = kineticEnergy + mass; 00239 G4double del = 0.5*cutEnergy/totEnergy; 00240 dedx += del*del; 00241 00242 // density correction 00243 G4double x = log(bg2)/twoln10; 00244 //if ( x >= x0den ) { 00245 // dedx -= twoln10*x - cden ; 00246 // if ( x < x1den ) dedx -= aden*pow((x1den-x),mden) ; 00247 //} 00248 dedx -= material->GetIonisation()->DensityCorrection(x); 00249 00250 // shell correction 00251 dedx -= 2.0*corr->ShellCorrection(p,material,kineticEnergy); 00252 00253 // now compute the total ionization loss 00254 00255 if (dedx < 0.0) dedx = 0.0 ; 00256 00257 // radiative corrections of R. Kokoulin 00258 if (cutEnergy > limitKinEnergy) { 00259 00260 G4double logtmax = log(cutEnergy); 00261 G4double logstep = logtmax - logLimitKinEnergy; 00262 G4double dloss = 0.0; 00263 G4double ftot2= 0.5/(totEnergy*totEnergy); 00264 00265 for (G4int ll=0; ll<8; ll++) 00266 { 00267 G4double ep = exp(logLimitKinEnergy + xgi[ll]*logstep); 00268 G4double a1 = log(1.0 + 2.0*ep/electron_mass_c2); 00269 G4double a3 = log(4.0*totEnergy*(totEnergy - ep)/massSquare); 00270 dloss += wgi[ll]*(1.0 - beta2*ep/tmax + ep*ep*ftot2)*a1*(a3 - a1); 00271 } 00272 dedx += dloss*logstep*alphaprime; 00273 } 00274 00275 dedx *= twopi_mc2_rcl2*eDensity/beta2; 00276 00277 //High order corrections 00278 dedx += corr->HighOrderCorrections(p,material,kineticEnergy,cutEnergy); 00279 00280 return dedx; 00281 }
G4double G4MuBetheBlochModel::CrossSectionPerVolume | ( | const G4Material * | , | |
const G4ParticleDefinition * | , | |||
G4double | kineticEnergy, | |||
G4double | cutEnergy, | |||
G4double | maxEnergy | |||
) | [virtual] |
Reimplemented from G4VEmModel.
Definition at line 198 of file G4MuBetheBlochModel.cc.
References ComputeCrossSectionPerElectron(), and G4Material::GetElectronDensity().
00204 { 00205 G4double eDensity = material->GetElectronDensity(); 00206 G4double cross = eDensity*ComputeCrossSectionPerElectron 00207 (p,kineticEnergy,cutEnergy,maxEnergy); 00208 return cross; 00209 }
void G4MuBetheBlochModel::Initialise | ( | const G4ParticleDefinition * | , | |
const G4DataVector & | ||||
) | [virtual] |
Implements G4VEmModel.
Definition at line 126 of file G4MuBetheBlochModel.cc.
References G4VEmModel::GetParticleChangeForLoss().
00128 { 00129 if(p) { SetParticle(p); } 00130 if(!fParticleChange) { fParticleChange = GetParticleChangeForLoss(); } 00131 }
G4double G4MuBetheBlochModel::MaxSecondaryEnergy | ( | const G4ParticleDefinition * | , | |
G4double | kinEnergy | |||
) | [protected, virtual] |
Reimplemented from G4VEmModel.
Definition at line 115 of file G4MuBetheBlochModel.cc.
Referenced by ComputeCrossSectionPerElectron(), and ComputeDEDXPerVolume().
00117 { 00118 G4double tau = kinEnergy/mass; 00119 G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) / 00120 (1. + 2.0*(tau + 1.)*ratio + ratio*ratio); 00121 return tmax; 00122 }
G4double G4MuBetheBlochModel::MinEnergyCut | ( | const G4ParticleDefinition * | , | |
const G4MaterialCutsCouple * | ||||
) | [virtual] |
Definition at line 107 of file G4MuBetheBlochModel.cc.
References G4Material::GetIonisation(), G4MaterialCutsCouple::GetMaterial(), and G4IonisParamMat::GetMeanExcitationEnergy().
00109 { 00110 return couple->GetMaterial()->GetIonisation()->GetMeanExcitationEnergy(); 00111 }
virtual void G4MuBetheBlochModel::SampleSecondaries | ( | std::vector< G4DynamicParticle * > * | , | |
const G4MaterialCutsCouple * | , | |||
const G4DynamicParticle * | , | |||
G4double | tmin, | |||
G4double | maxEnergy | |||
) | [virtual] |
Implements G4VEmModel.