G4BetheBlochModel Class Reference

#include <G4BetheBlochModel.hh>

Inheritance diagram for G4BetheBlochModel:

G4VEmModel G4BetheBlochIonGasModel G4BetheBlochNoDeltaModel

Public Member Functions

 G4BetheBlochModel (const G4ParticleDefinition *p=0, const G4String &nam="BetheBloch")
virtual ~G4BetheBlochModel ()
virtual void Initialise (const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeCrossSectionPerElectron (const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
virtual G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, G4double kineticEnergy, G4double Z, G4double A, G4double cutEnergy, G4double maxEnergy)
virtual G4double CrossSectionPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy, G4double maxEnergy)
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
virtual G4double GetChargeSquareRatio (const G4ParticleDefinition *p, const G4Material *mat, G4double kineticEnergy)
virtual G4double GetParticleCharge (const G4ParticleDefinition *p, const G4Material *mat, G4double kineticEnergy)
virtual void CorrectionsAlongStep (const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double &eloss, G4double &, G4double length)
virtual void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)

Protected Member Functions

virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kinEnergy)
G4double GetChargeSquareRatio () const
void SetChargeSquareRatio (G4double val)

Detailed Description

Definition at line 72 of file G4BetheBlochModel.hh.


Constructor & Destructor Documentation

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]

Definition at line 99 of file G4BetheBlochModel.cc.

00100 {}


Member Function Documentation

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]

Definition at line 193 of file G4BetheBlochModel.hh.

00194 {
00195   return chargeSquare;
00196 }

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().

00201 {
00202   chargeSquare = val;
00203 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:32 2013 for Geant4 by  doxygen 1.4.7