G4mplIonisationWithDeltaModel Class Reference

#include <G4mplIonisationWithDeltaModel.hh>

Inheritance diagram for G4mplIonisationWithDeltaModel:

G4VEmModel G4VEmFluctuationModel

Public Member Functions

 G4mplIonisationWithDeltaModel (G4double mCharge, const G4String &nam="mplIonisationWithDelta")
virtual ~G4mplIonisationWithDeltaModel ()
virtual void Initialise (const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy)
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 void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
virtual G4double SampleFluctuations (const G4Material *, const G4DynamicParticle *, G4double &tmax, G4double &length, G4double &meanLoss)
virtual G4double Dispersion (const G4Material *, const G4DynamicParticle *, G4double &tmax, G4double &length)
void SetParticle (const G4ParticleDefinition *p)

Protected Member Functions

virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kinEnergy)

Detailed Description

Definition at line 57 of file G4mplIonisationWithDeltaModel.hh.


Constructor & Destructor Documentation

G4mplIonisationWithDeltaModel::G4mplIonisationWithDeltaModel ( G4double  mCharge,
const G4String nam = "mplIonisationWithDelta" 
)

Definition at line 69 of file G4mplIonisationWithDeltaModel.cc.

References G4Electron::Electron(), G4cout, G4endl, G4lrint(), and G4INCL::Math::pi.

00071   : G4VEmModel(nam),G4VEmFluctuationModel(nam),
00072   magCharge(mCharge),
00073   twoln10(log(100.0)),
00074   betalow(0.01),
00075   betalim(0.1),
00076   beta2lim(betalim*betalim),
00077   bg2lim(beta2lim*(1.0 + beta2lim))
00078 {
00079   nmpl = G4lrint(std::fabs(magCharge) * 2 * fine_structure_const);
00080   if(nmpl > 6)      { nmpl = 6; }
00081   else if(nmpl < 1) { nmpl = 1; }
00082   pi_hbarc2_over_mc2 = pi * hbarc * hbarc / electron_mass_c2;
00083   chargeSquare = magCharge * magCharge;
00084   dedxlim = 45.*nmpl*nmpl*GeV*cm2/g;
00085   fParticleChange = 0;
00086   theElectron = G4Electron::Electron();
00087   G4cout << "### Monopole ionisation model with d-electron production, Gmag= " 
00088          << magCharge/eplus << G4endl;
00089   monopole = 0;
00090   mass = 0.0;
00091 }

G4mplIonisationWithDeltaModel::~G4mplIonisationWithDeltaModel (  )  [virtual]

Definition at line 95 of file G4mplIonisationWithDeltaModel.cc.

00096 {}


Member Function Documentation

G4double G4mplIonisationWithDeltaModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition ,
G4double  kineticEnergy,
G4double  Z,
G4double  A,
G4double  cutEnergy,
G4double  maxEnergy 
) [virtual]

Reimplemented from G4VEmModel.

Definition at line 221 of file G4mplIonisationWithDeltaModel.cc.

References ComputeCrossSectionPerElectron().

00227 {
00228   G4double cross = 
00229     Z*ComputeCrossSectionPerElectron(p,kineticEnergy,cutEnergy,maxEnergy);
00230   return cross;
00231 }

G4double G4mplIonisationWithDeltaModel::ComputeCrossSectionPerElectron ( const G4ParticleDefinition ,
G4double  kineticEnergy,
G4double  cutEnergy,
G4double  maxEnergy 
) [virtual]

Definition at line 201 of file G4mplIonisationWithDeltaModel.cc.

References G4VEmModel::LowEnergyLimit(), MaxSecondaryEnergy(), and SetParticle().

Referenced by ComputeCrossSectionPerAtom().

00206 {
00207   if(!monopole) { SetParticle(p); }
00208   G4double cross = 0.0;
00209   G4double tmax = MaxSecondaryEnergy(p, kineticEnergy);
00210   G4double maxEnergy = std::min(tmax,maxKinEnergy);
00211   G4double cutEnergy = std::max(LowEnergyLimit(), cut);
00212   if(cutEnergy < maxEnergy) {
00213     cross = (0.5/cutEnergy - 0.5/maxEnergy)*pi_hbarc2_over_mc2 * nmpl * nmpl;
00214   }
00215   return cross;
00216 }

G4double G4mplIonisationWithDeltaModel::ComputeDEDXPerVolume ( const G4Material ,
const G4ParticleDefinition ,
G4double  kineticEnergy,
G4double  cutEnergy 
) [virtual]

Reimplemented from G4VEmModel.

Definition at line 125 of file G4mplIonisationWithDeltaModel.cc.

References G4InuclParticleNames::gam, G4Material::GetDensity(), G4VEmModel::LowEnergyLimit(), MaxSecondaryEnergy(), and SetParticle().

00129 {
00130   if(!monopole) { SetParticle(p); }
00131   G4double tmax = MaxSecondaryEnergy(p,kineticEnergy);
00132   G4double cutEnergy = std::min(tmax, maxEnergy);
00133   cutEnergy = std::max(LowEnergyLimit(), cutEnergy);
00134   G4double tau   = kineticEnergy / mass;
00135   G4double gam   = tau + 1.0;
00136   G4double bg2   = tau * (tau + 2.0);
00137   G4double beta2 = bg2 / (gam * gam);
00138   G4double beta  = sqrt(beta2);
00139 
00140   // low-energy asymptotic formula
00141   G4double dedx  = dedxlim*beta*material->GetDensity();
00142 
00143   // above asymptotic
00144   if(beta > betalow) {
00145 
00146     // high energy
00147     if(beta >= betalim) {
00148       dedx = ComputeDEDXAhlen(material, bg2, cutEnergy);
00149 
00150     } else {
00151 
00152       G4double dedx1 = dedxlim*betalow*material->GetDensity();
00153       G4double dedx2 = ComputeDEDXAhlen(material, bg2lim, cutEnergy);
00154 
00155       // extrapolation between two formula 
00156       G4double kapa2 = beta - betalow;
00157       G4double kapa1 = betalim - beta;
00158       dedx = (kapa1*dedx1 + kapa2*dedx2)/(kapa1 + kapa2);
00159     }
00160   }
00161   return dedx;
00162 }

G4double G4mplIonisationWithDeltaModel::Dispersion ( const G4Material ,
const G4DynamicParticle ,
G4double tmax,
G4double length 
) [virtual]

Implements G4VEmFluctuationModel.

Definition at line 323 of file G4mplIonisationWithDeltaModel.cc.

References G4InuclParticleNames::gam, G4Material::GetElectronDensity(), and G4DynamicParticle::GetKineticEnergy().

Referenced by SampleFluctuations().

00327 {
00328   G4double siga = 0.0;
00329   G4double tau   = dp->GetKineticEnergy()/mass;
00330   if(tau > 0.0) { 
00331     G4double electronDensity = material->GetElectronDensity();
00332     G4double gam   = tau + 1.0;
00333     G4double invbeta2 = (gam*gam)/(tau * (tau+2.0));
00334     siga  = (invbeta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
00335       * electronDensity * chargeSquare;
00336   }
00337   return siga;
00338 }

void G4mplIonisationWithDeltaModel::Initialise ( const G4ParticleDefinition ,
const G4DataVector  
) [virtual]

Implements G4VEmModel.

Definition at line 115 of file G4mplIonisationWithDeltaModel.cc.

References G4VEmModel::GetParticleChangeForLoss(), and SetParticle().

00117 {
00118   if(!monopole) { SetParticle(p); }
00119   if(!fParticleChange) { fParticleChange = GetParticleChangeForLoss(); }
00120 }

G4double G4mplIonisationWithDeltaModel::MaxSecondaryEnergy ( const G4ParticleDefinition ,
G4double  kinEnergy 
) [protected, virtual]

Reimplemented from G4VEmModel.

Definition at line 343 of file G4mplIonisationWithDeltaModel.cc.

Referenced by ComputeCrossSectionPerElectron(), and ComputeDEDXPerVolume().

00345 {
00346   G4double tau = kinEnergy/mass;
00347   return 2.0*electron_mass_c2*tau*(tau + 2.);
00348 }

G4double G4mplIonisationWithDeltaModel::SampleFluctuations ( const G4Material ,
const G4DynamicParticle ,
G4double tmax,
G4double length,
G4double meanLoss 
) [virtual]

Implements G4VEmFluctuationModel.

Definition at line 294 of file G4mplIonisationWithDeltaModel.cc.

References Dispersion(), and G4UniformRand.

00300 {
00301   G4double siga = Dispersion(material,dp,tmax,length);
00302   G4double loss = meanLoss;
00303   siga = sqrt(siga);
00304   G4double twomeanLoss = meanLoss + meanLoss;
00305 
00306   if(twomeanLoss < siga) {
00307     G4double x;
00308     do {
00309       loss = twomeanLoss*G4UniformRand();
00310       x = (loss - meanLoss)/siga;
00311     } while (1.0 - 0.5*x*x < G4UniformRand());
00312   } else {
00313     do {
00314       loss = G4RandGauss::shoot(meanLoss,siga);
00315     } while (0.0 > loss || loss > twomeanLoss);
00316   }
00317   return loss;
00318 }

virtual void G4mplIonisationWithDeltaModel::SampleSecondaries ( std::vector< G4DynamicParticle * > *  ,
const G4MaterialCutsCouple ,
const G4DynamicParticle ,
G4double  tmin,
G4double  maxEnergy 
) [virtual]

Implements G4VEmModel.

void G4mplIonisationWithDeltaModel::SetParticle ( const G4ParticleDefinition p  ) 

Definition at line 100 of file G4mplIonisationWithDeltaModel.cc.

References G4ParticleDefinition::GetPDGMass(), G4VEmModel::HighEnergyLimit(), G4VEmModel::LowEnergyLimit(), G4VEmModel::SetHighEnergyLimit(), and G4VEmModel::SetLowEnergyLimit().

Referenced by ComputeCrossSectionPerElectron(), ComputeDEDXPerVolume(), Initialise(), and G4mplIonisation::InitialiseEnergyLossProcess().

00101 {
00102   monopole = p;
00103   mass     = monopole->GetPDGMass();
00104   G4double emin = 
00105     std::min(LowEnergyLimit(),0.1*mass*(1/sqrt(1 - betalow*betalow) - 1)); 
00106   G4double emax = 
00107     std::max(HighEnergyLimit(),10*mass*(1/sqrt(1 - beta2lim) - 1)); 
00108   SetLowEnergyLimit(emin);
00109   SetHighEnergyLimit(emax);
00110 }


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