G4MuBetheBlochModel Class Reference

#include <G4MuBetheBlochModel.hh>

Inheritance diagram for G4MuBetheBlochModel:

G4VEmModel

Public Member Functions

 G4MuBetheBlochModel (const G4ParticleDefinition *p=0, const G4String &nam="MuBetheBloch")
virtual ~G4MuBetheBlochModel ()
virtual void Initialise (const G4ParticleDefinition *, const G4DataVector &)
virtual G4double MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *)
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 void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)

Protected Member Functions

virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kinEnergy)

Detailed Description

Definition at line 69 of file G4MuBetheBlochModel.hh.


Constructor & Destructor Documentation

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]

Definition at line 102 of file G4MuBetheBlochModel.cc.

00103 {}


Member Function Documentation

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.


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