Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4EmCalculator Class Reference

#include <G4EmCalculator.hh>

Inheritance diagram for G4EmCalculator:
HadrontherapyInteractionParameters IORTInteractionParameters

Public Member Functions

 G4EmCalculator ()
 
 ~G4EmCalculator ()
 
G4double GetDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
 
G4double GetDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &s="world")
 
G4double GetRangeFromRestricteDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
 
G4double GetRangeFromRestricteDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &s="world")
 
G4double GetCSDARange (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
 
G4double GetCSDARange (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &s="world")
 
G4double GetRange (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
 
G4double GetRange (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &s="world")
 
G4double GetKinEnergy (G4double range, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
 
G4double GetKinEnergy (G4double range, const G4String &part, const G4String &mat, const G4String &s="world")
 
G4double GetCrossSectionPerVolume (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
 
G4double GetCrossSectionPerVolume (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, const G4String &s="world")
 
G4double GetShellIonisationCrossSectionPerAtom (const G4String &part, G4int Z, G4AtomicShellEnumerator shell, G4double kinEnergy)
 
G4double GetMeanFreePath (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
 
G4double GetMeanFreePath (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, const G4String &s="world")
 
void PrintDEDXTable (const G4ParticleDefinition *)
 
void PrintRangeTable (const G4ParticleDefinition *)
 
void PrintInverseRangeTable (const G4ParticleDefinition *)
 
G4double ComputeDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=DBL_MAX)
 
G4double ComputeDEDX (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, G4double cut=DBL_MAX)
 
G4double ComputeElectronicDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double cut=DBL_MAX)
 
G4double ComputeElectronicDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, G4double cut=DBL_MAX)
 
G4double ComputeNuclearDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *)
 
G4double ComputeNuclearDEDX (G4double kinEnergy, const G4String &part, const G4String &mat)
 
G4double ComputeTotalDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, G4double cut=DBL_MAX)
 
G4double ComputeTotalDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, G4double cut=DBL_MAX)
 
G4double ComputeCrossSectionPerVolume (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
 
G4double ComputeCrossSectionPerVolume (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, G4double cut=0.0)
 
G4double ComputeCrossSectionPerAtom (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, G4double Z, G4double A, G4double cut=0.0)
 
G4double ComputeCrossSectionPerAtom (G4double kinEnergy, const G4String &part, const G4String &processName, const G4Element *, G4double cut=0.0)
 
G4double ComputeGammaAttenuationLength (G4double kinEnergy, const G4Material *)
 
G4double ComputeShellIonisationCrossSectionPerAtom (const G4String &part, G4int Z, G4AtomicShellEnumerator shell, G4double kinEnergy, const G4Material *mat=0)
 
G4double ComputeMeanFreePath (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
 
G4double ComputeMeanFreePath (G4double kinEnergy, const G4String &, const G4String &, const G4String &processName, G4double cut=0.0)
 
G4double ComputeEnergyCutFromRangeCut (G4double range, const G4ParticleDefinition *, const G4Material *)
 
G4double ComputeEnergyCutFromRangeCut (G4double range, const G4String &, const G4String &)
 
const G4ParticleDefinitionFindParticle (const G4String &)
 
const G4ParticleDefinitionFindIon (G4int Z, G4int A)
 
const G4MaterialFindMaterial (const G4String &)
 
const G4RegionFindRegion (const G4String &)
 
const G4MaterialCutsCoupleFindCouple (const G4Material *, const G4Region *r=0)
 
void SetVerbose (G4int val)
 

Detailed Description

Definition at line 80 of file G4EmCalculator.hh.

Constructor & Destructor Documentation

G4EmCalculator::G4EmCalculator ( )

Definition at line 89 of file G4EmCalculator.cc.

References G4LossTableManager::EmCorrections(), G4GenericIon::GenericIon(), G4ParticleTable::GetIonTable(), G4ParticleTable::GetParticleTable(), and G4LossTableManager::Instance().

90 {
91  manager = G4LossTableManager::Instance();
92  corr = manager->EmCorrections();
93  nLocalMaterials = 0;
94  verbose = 0;
95  currentCoupleIndex = 0;
96  currentCouple = 0;
97  currentMaterial = 0;
98  currentParticle = 0;
99  lambdaParticle = 0;
100  baseParticle = 0;
101  currentLambda = 0;
102  currentModel = 0;
103  currentProcess = 0;
104  loweModel = 0;
105  chargeSquare = 1.0;
106  massRatio = 1.0;
107  mass = 0.0;
108  currentCut = 0.0;
109  currentParticleName= "";
110  currentMaterialName= "";
111  currentName = "";
112  lambdaName = "";
113  theGenericIon = G4GenericIon::GenericIon();
114  ionEffCharge = new G4ionEffectiveCharge();
116  isIon = false;
117  isApplicable = false;
118 }
static G4LossTableManager * Instance()
G4IonTable * GetIonTable() const
G4EmCorrections * EmCorrections()
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:93
static G4ParticleTable * GetParticleTable()
G4EmCalculator::~G4EmCalculator ( )

Definition at line 122 of file G4EmCalculator.cc.

123 {
124  delete ionEffCharge;
125  for (G4int i=0; i<nLocalMaterials; ++i) {
126  delete localCouples[i];
127  }
128 }
int G4int
Definition: G4Types.hh:78

Member Function Documentation

G4double G4EmCalculator::ComputeCrossSectionPerAtom ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
G4double  Z,
G4double  A,
G4double  cut = 0.0 
)

Definition at line 705 of file G4EmCalculator.cc.

References python.hepunit::barn, G4VEmModel::ComputeCrossSectionPerAtom(), g(), G4cout, G4endl, G4lrint(), G4ParticleDefinition::GetParticleName(), G4VEmModel::InitialiseForElement(), python.hepunit::MeV, and python.hepunit::mole.

Referenced by RunAction::BeginOfRunAction(), and ComputeCrossSectionPerAtom().

711 {
712  G4double res = 0.0;
713  if(UpdateParticle(p, kinEnergy)) {
714  if(FindEmModel(p, processName, kinEnergy)) {
715  G4double e = kinEnergy;
716  if(baseParticle) {
717  e *= kinEnergy*massRatio;
718  currentModel->InitialiseForElement(baseParticle, G4lrint(Z));
719  res = currentModel->ComputeCrossSectionPerAtom(
720  baseParticle, e, Z, A, cut) * chargeSquare;
721  } else {
722  currentModel->InitialiseForElement(p, G4lrint(Z));
723  res = currentModel->ComputeCrossSectionPerAtom(p, e, Z, A, cut);
724  }
725  if(verbose>0) {
726  G4cout << "E(MeV)= " << kinEnergy/MeV
727  << " cross(barn)= " << res/barn
728  << " " << p->GetParticleName()
729  << " Z= " << Z << " A= " << A/(g/mole) << " g/mole"
730  << G4endl;
731  }
732  }
733  }
734  return res;
735 }
virtual void InitialiseForElement(const G4ParticleDefinition *, G4int Z)
Definition: G4VEmModel.cc:231
const G4String & GetParticleName() const
function g(Y1, Y2, PT2)
Definition: hijing1.383.f:5205
G4GLOB_DLL std::ostream G4cout
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:300
int G4lrint(double ad)
Definition: templates.hh:163
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeCrossSectionPerAtom ( G4double  kinEnergy,
const G4String part,
const G4String processName,
const G4Element elm,
G4double  cut = 0.0 
)

Definition at line 739 of file G4EmCalculator.cc.

References ComputeCrossSectionPerAtom(), FindParticle(), G4Element::GetN(), and G4Element::GetZ().

744 {
745  return ComputeCrossSectionPerAtom(kinEnergy,FindParticle(particle),
746  processName,
747  elm->GetZ(),elm->GetN(),cut);
748 }
G4double GetN() const
Definition: G4Element.hh:134
G4double GetZ() const
Definition: G4Element.hh:131
const G4ParticleDefinition * FindParticle(const G4String &)
G4double ComputeCrossSectionPerAtom(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, G4double Z, G4double A, G4double cut=0.0)
G4double G4EmCalculator::ComputeCrossSectionPerVolume ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
const G4Material mat,
G4double  cut = 0.0 
)

Definition at line 656 of file G4EmCalculator.cc.

References python.hepunit::cm, G4VEmModel::CrossSectionPerVolume(), G4cout, G4endl, G4Material::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::keV, and python.hepunit::MeV.

Referenced by RunAction::BeginOfRunAction(), ComputeCrossSectionPerVolume(), ComputeGammaAttenuationLength(), ComputeMeanFreePath(), and GetCrossSectionPerVolume().

662 {
663  currentMaterial = mat;
664  currentMaterialName = mat->GetName();
665  G4double res = 0.0;
666  if(UpdateParticle(p, kinEnergy)) {
667  if(FindEmModel(p, processName, kinEnergy)) {
668  G4double e = kinEnergy;
669  if(baseParticle) {
670  e *= kinEnergy*massRatio;
671  res = currentModel->CrossSectionPerVolume(
672  mat, baseParticle, e, cut, e) * chargeSquare;
673  } else {
674  res = currentModel->CrossSectionPerVolume(mat, p, e, cut, e);
675  }
676  if(verbose>0) {
677  G4cout << "G4EmCalculator::ComputeXSPerVolume: E(MeV)= " << kinEnergy/MeV
678  << " cross(cm-1)= " << res*cm
679  << " cut(keV)= " << cut/keV
680  << " " << p->GetParticleName()
681  << " in " << mat->GetName()
682  << G4endl;
683  }
684  }
685  }
686  return res;
687 }
virtual G4double CrossSectionPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
Definition: G4VEmModel.cc:245
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeCrossSectionPerVolume ( G4double  kinEnergy,
const G4String part,
const G4String proc,
const G4String mat,
G4double  cut = 0.0 
)

Definition at line 691 of file G4EmCalculator.cc.

References ComputeCrossSectionPerVolume(), FindMaterial(), and FindParticle().

697 {
698  return ComputeCrossSectionPerVolume(kinEnergy,FindParticle(particle),
699  processName,
700  FindMaterial(material),cut);
701 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
G4double G4EmCalculator::ComputeDEDX ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
const G4Material mat,
G4double  cut = DBL_MAX 
)

Definition at line 448 of file G4EmCalculator.cc.

References python.hepunit::cm2, G4VEmModel::ComputeDEDXPerVolume(), G4VEmModel::CorrectionsAlongStep(), FindCouple(), G4cout, G4endl, G4VEmModel::GetChargeSquareRatio(), G4Material::GetDensity(), G4Material::GetName(), G4VEmModel::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::gram, G4VEmModel::LowEnergyLimit(), python.hepunit::MeV, python.hepunit::mm, and G4DynamicParticle::SetKineticEnergy().

Referenced by RunAction::BeginOfRunAction(), ComputeDEDX(), ComputeElectronicDEDX(), and RunAction::CriticalEnergy().

453 {
454  currentMaterial = mat;
455  currentMaterialName = mat->GetName();
456  G4double res = 0.0;
457  if(verbose > 1) {
458  G4cout << "### G4EmCalculator::ComputeDEDX: " << p->GetParticleName()
459  << " in " << currentMaterialName
460  << " e(MeV)= " << kinEnergy/MeV << " cut(MeV)= " << cut/MeV
461  << G4endl;
462  }
463  if(UpdateParticle(p, kinEnergy)) {
464  if(FindEmModel(p, processName, kinEnergy)) {
465  G4double escaled = kinEnergy*massRatio;
466  if(baseParticle) {
467  res = currentModel->ComputeDEDXPerVolume(
468  mat, baseParticle, escaled, cut) * chargeSquare;
469  if(verbose > 1) {
470  G4cout << baseParticle->GetParticleName()
471  << " Escaled(MeV)= " << escaled;
472  }
473  } else {
474  res = currentModel->ComputeDEDXPerVolume(mat, p, kinEnergy, cut);
475  if(verbose > 1) { G4cout << " no basePart E(MeV)= " << kinEnergy << " "; }
476  }
477  if(verbose > 1) {
478  G4cout << currentModel->GetName() << ": DEDX(MeV/mm)= " << res*mm/MeV
479  << " DEDX(MeV*cm^2/g)= "
480  << res*gram/(MeV*cm2*mat->GetDensity())
481  << G4endl;
482  }
483 
484  // emulate smoothing procedure
485  G4double eth = currentModel->LowEnergyLimit();
486  // G4cout << "massRatio= " << massRatio << " eth= " << eth << G4endl;
487  if(loweModel) {
488  G4double res0 = 0.0;
489  G4double res1 = 0.0;
490  if(baseParticle) {
491  res1 = currentModel->ComputeDEDXPerVolume(mat, baseParticle, eth, cut)
492  * chargeSquare;
493  res0 = loweModel->ComputeDEDXPerVolume(mat, baseParticle, eth, cut)
494  * chargeSquare;
495  } else {
496  res1 = currentModel->ComputeDEDXPerVolume(mat, p, eth, cut);
497  res0 = loweModel->ComputeDEDXPerVolume(mat, p, eth, cut);
498  }
499  if(verbose > 1) {
500  G4cout << "At boundary energy(MeV)= " << eth/MeV
501  << " DEDX(MeV/mm)= " << res1*mm/MeV
502  << G4endl;
503  }
504 
505  //G4cout << "eth= " << eth << " escaled= " << escaled
506  // << " res0= " << res0 << " res1= "
507  // << res1 << " q2= " << chargeSquare << G4endl;
508 
509  if(res1 > 0.0 && escaled > 0.0) {
510  res *= (1.0 + (res0/res1 - 1.0)*eth/escaled);
511  }
512  }
513 
514  // low energy correction for ions
515  if(isIon) {
516  G4double length = CLHEP::nm;
517  const G4Region* r = 0;
518  const G4MaterialCutsCouple* couple = FindCouple(mat, r);
519  G4double eloss = res*length;
520  G4double niel = 0.0;
521  dynParticle.SetKineticEnergy(kinEnergy);
522  currentModel->GetChargeSquareRatio(p, mat, kinEnergy);
523  currentModel->CorrectionsAlongStep(couple,&dynParticle,eloss,niel,length);
524  res = eloss/length;
525 
526  if(verbose > 1) {
527  G4cout << "After Corrections: DEDX(MeV/mm)= " << res*mm/MeV
528  << " DEDX(MeV*cm^2/g)= " << res*gram/(MeV*cm2*mat->GetDensity())
529  << G4endl;
530  }
531  }
532  }
533 
534  if(verbose > 0) {
535  G4cout << "Sum: E(MeV)= " << kinEnergy/MeV
536  << " DEDX(MeV/mm)= " << res*mm/MeV
537  << " DEDX(MeV*cm^2/g)= " << res*gram/(MeV*cm2*mat->GetDensity())
538  << " cut(MeV)= " << cut/MeV
539  << " " << p->GetParticleName()
540  << " in " << currentMaterialName
541  << " Zi^2= " << chargeSquare
542  << " isIon=" << isIon
543  << G4endl;
544  }
545  }
546  return res;
547 }
G4double LowEnergyLimit() const
Definition: G4VEmModel.hh:599
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
Definition: G4VEmModel.cc:339
const G4String & GetName() const
Definition: G4Material.hh:176
G4double GetDensity() const
Definition: G4Material.hh:178
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
void SetKineticEnergy(G4double aEnergy)
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Definition: G4VEmModel.cc:322
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
Definition: G4VEmModel.cc:236
#define G4endl
Definition: G4ios.hh:61
const G4String & GetName() const
Definition: G4VEmModel.hh:753
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeDEDX ( G4double  kinEnergy,
const G4String part,
const G4String proc,
const G4String mat,
G4double  cut = DBL_MAX 
)

Definition at line 615 of file G4EmCalculator.cc.

References ComputeDEDX(), FindMaterial(), and FindParticle().

620 {
621  return ComputeDEDX(kinEnergy,FindParticle(particle),processName,
622  FindMaterial(material),cut);
623 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=DBL_MAX)
const G4ParticleDefinition * FindParticle(const G4String &)
G4double G4EmCalculator::ComputeElectronicDEDX ( G4double  kinEnergy,
const G4ParticleDefinition part,
const G4Material mat,
G4double  cut = DBL_MAX 
)

Definition at line 551 of file G4EmCalculator.cc.

References ComputeDEDX(), G4LossTableManager::GetEnergyLossProcessVector(), G4Material::GetName(), G4LossTableManager::Instance(), and n.

Referenced by ComputeElectronicDEDX(), and ComputeTotalDEDX().

555 {
556  currentMaterial = mat;
557  currentMaterialName = mat->GetName();
558  G4double dedx = 0.0;
559  if(UpdateParticle(part, kinEnergy)) {
560 
562  const std::vector<G4VEnergyLossProcess*> vel =
563  lManager->GetEnergyLossProcessVector();
564  G4int n = vel.size();
565 
566  //G4cout << "ComputeElectronicDEDX for " << part->GetParticleName()
567  // << " n= " << n << G4endl;
568 
569  for(G4int i=0; i<n; ++i) {
570  if(vel[i]) {
571  G4VProcess* p = reinterpret_cast<G4VProcess*>(vel[i]);
572  if(ActiveForParticle(part, p)) {
573  //G4cout << "idx= " << i << " " << (vel[i])->GetProcessName()
574  // << " " << (vel[i])->Particle()->GetParticleName() << G4endl;
575  dedx += ComputeDEDX(kinEnergy,part,(vel[i])->GetProcessName(),mat,cut);
576  }
577  }
578  }
579  }
580  return dedx;
581 }
static G4LossTableManager * Instance()
const char * p
Definition: xmltok.h:285
const G4String & GetName() const
Definition: G4Material.hh:176
int G4int
Definition: G4Types.hh:78
G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=DBL_MAX)
const G4int n
const std::vector< G4VEnergyLossProcess * > & GetEnergyLossProcessVector()
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeElectronicDEDX ( G4double  kinEnergy,
const G4String part,
const G4String mat,
G4double  cut = DBL_MAX 
)

Definition at line 585 of file G4EmCalculator.cc.

References ComputeElectronicDEDX(), FindMaterial(), and FindParticle().

587 {
588  return ComputeElectronicDEDX(kinEnergy,FindParticle(part),FindMaterial(mat),cut);
589 }
const G4Material * FindMaterial(const G4String &)
G4double ComputeElectronicDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double cut=DBL_MAX)
const G4ParticleDefinition * FindParticle(const G4String &)
G4double G4EmCalculator::ComputeEnergyCutFromRangeCut ( G4double  range,
const G4ParticleDefinition part,
const G4Material mat 
)

Definition at line 820 of file G4EmCalculator.cc.

References G4ProductionCutsTable::GetProductionCutsTable().

Referenced by ComputeEnergyCutFromRangeCut().

824 {
826  ConvertRangeToEnergy(part, mat, range);
827 }
static G4ProductionCutsTable * GetProductionCutsTable()
G4double G4EmCalculator::ComputeEnergyCutFromRangeCut ( G4double  range,
const G4String particle,
const G4String material 
)

Definition at line 831 of file G4EmCalculator.cc.

References ComputeEnergyCutFromRangeCut(), FindMaterial(), and FindParticle().

835 {
836  return ComputeEnergyCutFromRangeCut(range,FindParticle(particle),
837  FindMaterial(material));
838 }
const G4Material * FindMaterial(const G4String &)
const G4ParticleDefinition * FindParticle(const G4String &)
G4double ComputeEnergyCutFromRangeCut(G4double range, const G4ParticleDefinition *, const G4Material *)
G4double G4EmCalculator::ComputeGammaAttenuationLength ( G4double  kinEnergy,
const G4Material mat 
)

Definition at line 753 of file G4EmCalculator.cc.

References ComputeCrossSectionPerVolume(), and G4Gamma::Gamma().

755 {
756  G4double res = 0.0;
757  const G4ParticleDefinition* gamma = G4Gamma::Gamma();
758  res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "conv", mat, 0.0);
759  res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "compt", mat, 0.0);
760  res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "phot", mat, 0.0);
761  res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "Rayl", mat, 0.0);
762  if(res > 0.0) { res = 1.0/res; }
763  return res;
764 }
static G4Gamma * Gamma()
Definition: G4Gamma.cc:86
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeMeanFreePath ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
const G4Material mat,
G4double  cut = 0.0 
)

Definition at line 787 of file G4EmCalculator.cc.

References ComputeCrossSectionPerVolume(), DBL_MAX, G4cout, G4endl, G4Material::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::MeV, python.hepunit::mm, and test::x.

Referenced by ComputeMeanFreePath().

792 {
793  G4double mfp = DBL_MAX;
794  G4double x = ComputeCrossSectionPerVolume(kinEnergy, p, processName, mat, cut);
795  if(x > 0.0) { mfp = 1.0/x; }
796  if(verbose>1) {
797  G4cout << "E(MeV)= " << kinEnergy/MeV
798  << " MFP(mm)= " << mfp/mm
799  << " " << p->GetParticleName()
800  << " in " << mat->GetName()
801  << G4endl;
802  }
803  return mfp;
804 }
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
G4double G4EmCalculator::ComputeMeanFreePath ( G4double  kinEnergy,
const G4String particle,
const G4String processName,
const G4String processName,
G4double  cut = 0.0 
)

Definition at line 808 of file G4EmCalculator.cc.

References ComputeMeanFreePath(), FindMaterial(), and FindParticle().

813 {
814  return ComputeMeanFreePath(kinEnergy,FindParticle(particle),processName,
815  FindMaterial(material),cut);
816 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
G4double ComputeMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
G4double G4EmCalculator::ComputeNuclearDEDX ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4Material mat 
)

Definition at line 627 of file G4EmCalculator.cc.

References python.hepunit::cm2, G4cout, G4endl, G4Material::GetDensity(), G4ParticleDefinition::GetParticleName(), python.hepunit::gram, python.hepunit::MeV, python.hepunit::mm, and G4EmCorrections::NuclearDEDX().

Referenced by ComputeNuclearDEDX(), and ComputeTotalDEDX().

630 {
631 
632  G4double res = corr->NuclearDEDX(p, mat, kinEnergy, false);
633 
634  if(verbose > 1) {
635  G4cout << p->GetParticleName() << " E(MeV)= " << kinEnergy/MeV
636  << " NuclearDEDX(MeV/mm)= " << res*mm/MeV
637  << " NuclearDEDX(MeV*cm^2/g)= "
638  << res*gram/(MeV*cm2*mat->GetDensity())
639  << G4endl;
640  }
641  return res;
642 }
G4double GetDensity() const
Definition: G4Material.hh:178
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4double NuclearDEDX(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy, G4bool fluct=true)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeNuclearDEDX ( G4double  kinEnergy,
const G4String part,
const G4String mat 
)

Definition at line 646 of file G4EmCalculator.cc.

References ComputeNuclearDEDX(), FindMaterial(), and FindParticle().

649 {
650  return ComputeNuclearDEDX(kinEnergy,FindParticle(particle),
652 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *)
const G4ParticleDefinition * FindParticle(const G4String &)
G4double G4EmCalculator::ComputeShellIonisationCrossSectionPerAtom ( const G4String part,
G4int  Z,
G4AtomicShellEnumerator  shell,
G4double  kinEnergy,
const G4Material mat = 0 
)

Definition at line 768 of file G4EmCalculator.cc.

References G4LossTableManager::AtomDeexcitation(), G4VAtomDeexcitation::ComputeShellIonisationCrossSectionPerAtom(), and FindParticle().

774 {
775  G4double res = 0.0;
776  const G4ParticleDefinition* p = FindParticle(particle);
777  G4VAtomDeexcitation* ad = manager->AtomDeexcitation();
778  if(p && ad) {
779  res = ad->ComputeShellIonisationCrossSectionPerAtom(p, Z, shell,
780  kinEnergy, mat);
781  }
782  return res;
783 }
const char * p
Definition: xmltok.h:285
virtual G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=0)=0
const G4ParticleDefinition * FindParticle(const G4String &)
G4VAtomDeexcitation * AtomDeexcitation()
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeTotalDEDX ( G4double  kinEnergy,
const G4ParticleDefinition part,
const G4Material mat,
G4double  cut = DBL_MAX 
)

Definition at line 593 of file G4EmCalculator.cc.

References ComputeElectronicDEDX(), ComputeNuclearDEDX(), and python.hepunit::MeV.

Referenced by ComputeTotalDEDX(), RunAction::GetEnergyFromCSDARange(), HadrontherapyInteractionParameters::GetStopping(), IORTInteractionParameters::GetStopping(), HadrontherapyInteractionParameters::GetStoppingTable(), IORTInteractionParameters::GetStoppingTable(), and Run::PrintSummary().

597 {
598  G4double dedx = ComputeElectronicDEDX(kinEnergy,part,mat,cut);
599  if(mass > 700.*MeV) { dedx += ComputeNuclearDEDX(kinEnergy,part,mat); }
600  return dedx;
601 }
G4double ComputeElectronicDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double cut=DBL_MAX)
G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *)
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::ComputeTotalDEDX ( G4double  kinEnergy,
const G4String part,
const G4String mat,
G4double  cut = DBL_MAX 
)

Definition at line 605 of file G4EmCalculator.cc.

References ComputeTotalDEDX(), FindMaterial(), and FindParticle().

609 {
610  return ComputeTotalDEDX(kinEnergy,FindParticle(part),FindMaterial(mat),cut);
611 }
const G4Material * FindMaterial(const G4String &)
G4double ComputeTotalDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, G4double cut=DBL_MAX)
const G4ParticleDefinition * FindParticle(const G4String &)
const G4MaterialCutsCouple * G4EmCalculator::FindCouple ( const G4Material material,
const G4Region r = 0 
)

Definition at line 958 of file G4EmCalculator.cc.

References FatalException, G4Exception(), G4RegionStore::GetInstance(), G4ProductionCutsTable::GetMaterialCutsCouple(), G4Material::GetName(), G4Region::GetProductionCuts(), G4ProductionCutsTable::GetProductionCutsTable(), and eplot::material.

Referenced by ComputeDEDX(), export_G4EmCalculator(), GetCrossSectionPerVolume(), GetCSDARange(), GetDEDX(), GetKinEnergy(), GetRange(), and GetRangeFromRestricteDEDX().

961 {
962  const G4MaterialCutsCouple* couple = 0;
963  if(material) {
964  currentMaterial = material;
965  currentMaterialName = material->GetName();
966  // Access to materials
967  const G4ProductionCutsTable* theCoupleTable=
969  const G4Region* r = region;
970  if(r) {
971  couple = theCoupleTable->GetMaterialCutsCouple(material,
972  r->GetProductionCuts());
973  } else {
975  size_t nr = store->size();
976  if(0 < nr) {
977  for(size_t i=0; i<nr; ++i) {
978  couple = theCoupleTable->GetMaterialCutsCouple(
979  material, ((*store)[i])->GetProductionCuts());
980  if(couple) { break; }
981  }
982  }
983  }
984  }
985  if(!couple) {
987  ed << "G4EmCalculator::FindCouple: fail for material " << material
988  << " <" << currentMaterialName << " > and region " << region;
989  G4Exception("G4EmCalculator::FindCouple", "em0078",
990  FatalException, ed);
991  }
992  return couple;
993 }
G4ProductionCuts * GetProductionCuts() const
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
const G4String & GetName() const
Definition: G4Material.hh:176
static G4RegionStore * GetInstance()
string material
Definition: eplot.py:19
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ProductionCutsTable * GetProductionCutsTable()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
const G4ParticleDefinition * G4EmCalculator::FindIon ( G4int  Z,
G4int  A 
)

Definition at line 922 of file G4EmCalculator.cc.

References G4IonTable::GetIon().

923 {
924  const G4ParticleDefinition* p = ionTable->GetIon(Z,A,0);
925  return p;
926 }
const char * p
Definition: xmltok.h:285
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:449
const G4Material * G4EmCalculator::FindMaterial ( const G4String name)

Definition at line 930 of file G4EmCalculator.cc.

References G4cout, G4endl, and G4Material::GetMaterial().

Referenced by ComputeCrossSectionPerVolume(), ComputeDEDX(), ComputeElectronicDEDX(), ComputeEnergyCutFromRangeCut(), ComputeMeanFreePath(), ComputeNuclearDEDX(), ComputeTotalDEDX(), export_G4EmCalculator(), GetCrossSectionPerVolume(), GetCSDARange(), GetDEDX(), GetKinEnergy(), GetMeanFreePath(), GetRange(), and GetRangeFromRestricteDEDX().

931 {
932  if(name != currentMaterialName) {
933  currentMaterial = G4Material::GetMaterial(name, false);
934  currentMaterialName = name;
935  if(!currentMaterial) {
936  G4cout << "### WARNING: G4EmCalculator::FindMaterial fails to find "
937  << name << G4endl;
938  }
939  }
940  return currentMaterial;
941 }
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
Definition: G4Material.cc:578
const XML_Char * name
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4ParticleDefinition * G4EmCalculator::FindParticle ( const G4String name)

Definition at line 905 of file G4EmCalculator.cc.

References G4ParticleTable::FindParticle(), G4cout, G4endl, and G4ParticleTable::GetParticleTable().

Referenced by ComputeCrossSectionPerAtom(), ComputeCrossSectionPerVolume(), ComputeDEDX(), ComputeElectronicDEDX(), ComputeEnergyCutFromRangeCut(), ComputeMeanFreePath(), ComputeNuclearDEDX(), ComputeShellIonisationCrossSectionPerAtom(), ComputeTotalDEDX(), export_G4EmCalculator(), GetCrossSectionPerVolume(), GetCSDARange(), GetDEDX(), GetKinEnergy(), GetMeanFreePath(), GetRange(), GetRangeFromRestricteDEDX(), GetShellIonisationCrossSectionPerAtom(), HadrontherapyInteractionParameters::ParseArg(), and IORTInteractionParameters::ParseArg().

906 {
907  const G4ParticleDefinition* p = 0;
908  if(name != currentParticleName) {
910  if(!p) {
911  G4cout << "### WARNING: G4EmCalculator::FindParticle fails to find "
912  << name << G4endl;
913  }
914  } else {
915  p = currentParticle;
916  }
917  return p;
918 }
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
const char * p
Definition: xmltok.h:285
G4GLOB_DLL std::ostream G4cout
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
const G4Region * G4EmCalculator::FindRegion ( const G4String reg)

Definition at line 945 of file G4EmCalculator.cc.

References G4RegionStore::GetInstance(), and G4RegionStore::GetRegion().

Referenced by export_G4EmCalculator(), GetCrossSectionPerVolume(), GetCSDARange(), GetDEDX(), GetKinEnergy(), GetMeanFreePath(), GetRange(), and GetRangeFromRestricteDEDX().

946 {
947  const G4Region* r = 0;
948  if(reg != "" && reg != "world") {
950  } else {
951  r = G4RegionStore::GetInstance()->GetRegion("DefaultRegionForTheWorld");
952  }
953  return r;
954 }
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
static G4RegionStore * GetInstance()
G4double G4EmCalculator::GetCrossSectionPerVolume ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 321 of file G4EmCalculator.cc.

References python.hepunit::cm, ComputeCrossSectionPerVolume(), FindCouple(), G4cout, G4endl, G4MaterialCutsCouple::GetIndex(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), and python.hepunit::MeV.

Referenced by RunAction::BeginOfRunAction(), GetCrossSectionPerVolume(), and GetMeanFreePath().

326 {
327  G4double res = 0.0;
328  const G4MaterialCutsCouple* couple = FindCouple(mat,region);
329 
330  if(couple && UpdateParticle(p, kinEnergy)) {
331  G4int idx = couple->GetIndex();
332  FindLambdaTable(p, processName, kinEnergy);
333 
334  if(currentLambda) {
335  G4double e = kinEnergy*massRatio;
336  res = (((*currentLambda)[idx])->Value(e))*chargeSquare;
337  } else {
338  res = ComputeCrossSectionPerVolume(kinEnergy, p, processName, mat,
339  kinEnergy);
340  }
341  if(verbose>0) {
342  G4cout << "G4EmCalculator::GetXSPerVolume: E(MeV)= " << kinEnergy/MeV
343  << " cross(cm-1)= " << res*cm
344  << " " << p->GetParticleName()
345  << " in " << mat->GetName();
346  if(verbose>1)
347  G4cout << " idx= " << idx << " Escaled((MeV)= "
348  << kinEnergy*massRatio
349  << " q2= " << chargeSquare;
350  G4cout << G4endl;
351  }
352  }
353  return res;
354 }
const G4String & GetName() const
Definition: G4Material.hh:176
int G4int
Definition: G4Types.hh:78
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::GetCrossSectionPerVolume ( G4double  kinEnergy,
const G4String part,
const G4String proc,
const G4String mat,
const G4String s = "world" 
)

Definition at line 358 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetCrossSectionPerVolume().

363 {
364  return GetCrossSectionPerVolume(kinEnergy,FindParticle(particle),processName,
366 }
const G4Material * FindMaterial(const G4String &)
G4double GetCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetCSDARange ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 204 of file G4EmCalculator.cc.

References FindCouple(), G4cout, G4endl, G4Exception(), G4LossTableManager::GetCSDARange(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4LossTableManager::Instance(), JustWarning, python.hepunit::MeV, and python.hepunit::mm.

Referenced by RunAction::BeginOfRunAction(), Run::ComputeStatistics(), GetCSDARange(), and RunAction::GetEnergyFromCSDARange().

208 {
209  G4double res = 0.0;
210  if(!G4LossTableManager::Instance()->BuildCSDARange()) {
212  ed << "G4EmCalculator::GetCSDARange: CSDA table is not built; "
213  << " use UI command: /process/eLoss/CSDARange true";
214  G4Exception("G4EmCalculator::GetCSDARange", "em0077",
215  JustWarning, ed);
216  return res;
217  }
218 
219  const G4MaterialCutsCouple* couple = FindCouple(mat,region);
220  if(couple && UpdateParticle(p, kinEnergy)) {
221  res = manager->GetCSDARange(p, kinEnergy, couple);
222  if(verbose>0) {
223  G4cout << "G4EmCalculator::GetRange: E(MeV)= " << kinEnergy/MeV
224  << " range(mm)= " << res/mm
225  << " " << p->GetParticleName()
226  << " in " << mat->GetName()
227  << G4endl;
228  }
229  }
230  return res;
231 }
static G4LossTableManager * Instance()
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4double GetCSDARange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::GetCSDARange ( G4double  kinEnergy,
const G4String part,
const G4String mat,
const G4String s = "world" 
)

Definition at line 268 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetCSDARange().

272 {
273  return GetCSDARange(kinEnergy,FindParticle(particle),
275 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetDEDX ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 132 of file G4EmCalculator.cc.

References python.hepunit::cm2, G4VEmModel::CorrectionsAlongStep(), FindCouple(), G4cout, G4endl, G4VEmModel::GetChargeSquareRatio(), G4LossTableManager::GetDEDX(), G4Material::GetDensity(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::gram, python.hepunit::MeV, python.hepunit::mm, and G4DynamicParticle::SetKineticEnergy().

Referenced by RunAction::BeginOfRunAction(), GetDEDX(), RunAction::GetEnergyFromRestrictedRange(), Run::PrintSummary(), and G4EnergySplitter::SplitEnergyInVolumes().

136 {
137  G4double res = 0.0;
138  const G4MaterialCutsCouple* couple = FindCouple(mat, region);
139  if(couple && UpdateParticle(p, kinEnergy) ) {
140  res = manager->GetDEDX(p, kinEnergy, couple);
141 
142  if(isIon) {
143  if(FindEmModel(p, currentProcessName, kinEnergy)) {
144  G4double length = CLHEP::nm;
145  G4double eloss = res*length;
146  //G4cout << "### GetDEDX: E= " << kinEnergy << " dedx0= " << res
147  // << " de= " << eloss << G4endl;;
148  G4double niel = 0.0;
149  dynParticle.SetKineticEnergy(kinEnergy);
150  currentModel->GetChargeSquareRatio(p, mat, kinEnergy);
151  currentModel->CorrectionsAlongStep(couple,&dynParticle,eloss,niel,length);
152  res = eloss/length;
153  //G4cout << " de1= " << eloss << " res1= " << res
154  // << " " << p->GetParticleName() <<G4endl;;
155  }
156  }
157 
158  if(verbose>0) {
159  G4cout << "G4EmCalculator::GetDEDX: E(MeV)= " << kinEnergy/MeV
160  << " DEDX(MeV/mm)= " << res*mm/MeV
161  << " DEDX(MeV*cm^2/g)= " << res*gram/(MeV*cm2*mat->GetDensity())
162  << " " << p->GetParticleName()
163  << " in " << mat->GetName()
164  << " isIon= " << isIon
165  << G4endl;
166  }
167  }
168  return res;
169 }
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double &eloss, G4double &niel, G4double length)
Definition: G4VEmModel.cc:339
G4double GetDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
const G4String & GetName() const
Definition: G4Material.hh:176
G4double GetDensity() const
Definition: G4Material.hh:178
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
void SetKineticEnergy(G4double aEnergy)
virtual G4double GetChargeSquareRatio(const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
Definition: G4VEmModel.cc:322
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::GetDEDX ( G4double  kinEnergy,
const G4String part,
const G4String mat,
const G4String s = "world" 
)

Definition at line 173 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetDEDX().

175 {
176  return GetDEDX(kinEnergy,FindParticle(particle),
178 }
const G4Material * FindMaterial(const G4String &)
G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetKinEnergy ( G4double  range,
const G4ParticleDefinition p,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 290 of file G4EmCalculator.cc.

References FindCouple(), G4cout, G4endl, G4LossTableManager::GetEnergy(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::GeV, python.hepunit::MeV, and python.hepunit::mm.

Referenced by GetKinEnergy().

294 {
295  G4double res = 0.0;
296  const G4MaterialCutsCouple* couple = FindCouple(mat,region);
297  if(couple && UpdateParticle(p, 1.0*GeV)) {
298  res = manager->GetEnergy(p, range, couple);
299  if(verbose>0) {
300  G4cout << "G4EmCalculator::GetKinEnergy: Range(mm)= " << range/mm
301  << " KinE(MeV)= " << res/MeV
302  << " " << p->GetParticleName()
303  << " in " << mat->GetName()
304  << G4endl;
305  }
306  }
307  return res;
308 }
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
G4double GetEnergy(const G4ParticleDefinition *aParticle, G4double range, const G4MaterialCutsCouple *couple)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::GetKinEnergy ( G4double  range,
const G4String part,
const G4String mat,
const G4String s = "world" 
)

Definition at line 312 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetKinEnergy().

314 {
315  return GetKinEnergy(range,FindParticle(particle),
317 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
G4double GetKinEnergy(G4double range, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetMeanFreePath ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4String processName,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 387 of file G4EmCalculator.cc.

References DBL_MAX, G4cout, G4endl, GetCrossSectionPerVolume(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), python.hepunit::MeV, python.hepunit::mm, and test::x.

Referenced by RunAction::BeginOfRunAction(), and GetMeanFreePath().

392 {
393  G4double res = DBL_MAX;
394  G4double x = GetCrossSectionPerVolume(kinEnergy,p, processName, mat,region);
395  if(x > 0.0) { res = 1.0/x; }
396  if(verbose>1) {
397  G4cout << "G4EmCalculator::GetMeanFreePath: E(MeV)= " << kinEnergy/MeV
398  << " MFP(mm)= " << res/mm
399  << " " << p->GetParticleName()
400  << " in " << mat->GetName()
401  << G4endl;
402  }
403  return res;
404 }
const G4String & GetName() const
Definition: G4Material.hh:176
G4double GetCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
G4double G4EmCalculator::GetMeanFreePath ( G4double  kinEnergy,
const G4String part,
const G4String proc,
const G4String mat,
const G4String s = "world" 
)

Definition at line 408 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetMeanFreePath().

413 {
414  return GetMeanFreePath(kinEnergy,FindParticle(particle),processName,
416 }
const G4Material * FindMaterial(const G4String &)
G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetRange ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 235 of file G4EmCalculator.cc.

References FindCouple(), G4cout, G4endl, G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4LossTableManager::GetRange(), python.hepunit::MeV, and python.hepunit::mm.

Referenced by GetRange().

239 {
240  G4double res = 0.0;
241  const G4MaterialCutsCouple* couple = FindCouple(mat,region);
242  if(couple && UpdateParticle(p, kinEnergy)) {
243  res = manager->GetRange(p, kinEnergy, couple);
244  if(verbose>0) {
245  G4cout << "G4EmCalculator::GetRange: E(MeV)= " << kinEnergy/MeV
246  << " range(mm)= " << res/mm
247  << " " << p->GetParticleName()
248  << " in " << mat->GetName()
249  << G4endl;
250  }
251  }
252  return res;
253 }
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double G4EmCalculator::GetRange ( G4double  kinEnergy,
const G4String part,
const G4String mat,
const G4String s = "world" 
)

Definition at line 279 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetRange().

283 {
284  return GetRange(kinEnergy,FindParticle(particle),
286 }
const G4Material * FindMaterial(const G4String &)
G4double GetRange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
string material
Definition: eplot.py:19
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetRangeFromRestricteDEDX ( G4double  kinEnergy,
const G4ParticleDefinition p,
const G4Material mat,
const G4Region r = 0 
)

Definition at line 182 of file G4EmCalculator.cc.

References FindCouple(), G4cout, G4endl, G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4LossTableManager::GetRangeFromRestricteDEDX(), python.hepunit::MeV, and python.hepunit::mm.

Referenced by RunAction::BeginOfRunAction(), RunAction::GetEnergyFromRestrictedRange(), and GetRangeFromRestricteDEDX().

186 {
187  G4double res = 0.0;
188  const G4MaterialCutsCouple* couple = FindCouple(mat,region);
189  if(couple && UpdateParticle(p, kinEnergy)) {
190  res = manager->GetRangeFromRestricteDEDX(p, kinEnergy, couple);
191  if(verbose>0) {
192  G4cout << "G4EmCalculator::GetRange: E(MeV)= " << kinEnergy/MeV
193  << " range(mm)= " << res/mm
194  << " " << p->GetParticleName()
195  << " in " << mat->GetName()
196  << G4endl;
197  }
198  }
199  return res;
200 }
const G4String & GetName() const
Definition: G4Material.hh:176
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=0)
G4double GetRangeFromRestricteDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
G4double G4EmCalculator::GetRangeFromRestricteDEDX ( G4double  kinEnergy,
const G4String part,
const G4String mat,
const G4String s = "world" 
)

Definition at line 257 of file G4EmCalculator.cc.

References FindMaterial(), FindParticle(), FindRegion(), and GetRangeFromRestricteDEDX().

261 {
262  return GetRangeFromRestricteDEDX(kinEnergy,FindParticle(particle),
264 }
const G4Material * FindMaterial(const G4String &)
string material
Definition: eplot.py:19
G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
const G4ParticleDefinition * FindParticle(const G4String &)
const G4Region * FindRegion(const G4String &)
G4double G4EmCalculator::GetShellIonisationCrossSectionPerAtom ( const G4String part,
G4int  Z,
G4AtomicShellEnumerator  shell,
G4double  kinEnergy 
)

Definition at line 370 of file G4EmCalculator.cc.

References G4LossTableManager::AtomDeexcitation(), FindParticle(), and G4VAtomDeexcitation::GetShellIonisationCrossSectionPerAtom().

375 {
376  G4double res = 0.0;
377  const G4ParticleDefinition* p = FindParticle(particle);
378  G4VAtomDeexcitation* ad = manager->AtomDeexcitation();
379  if(p && ad) {
380  res = ad->GetShellIonisationCrossSectionPerAtom(p, Z, shell, kinEnergy);
381  }
382  return res;
383 }
const char * p
Definition: xmltok.h:285
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=0)=0
const G4ParticleDefinition * FindParticle(const G4String &)
G4VAtomDeexcitation * AtomDeexcitation()
double G4double
Definition: G4Types.hh:76
void G4EmCalculator::PrintDEDXTable ( const G4ParticleDefinition p)

Definition at line 420 of file G4EmCalculator.cc.

References G4VEnergyLossProcess::DEDXTable(), G4cout, G4endl, and G4ParticleDefinition::GetParticleName().

Referenced by export_G4EmCalculator().

421 {
422  const G4VEnergyLossProcess* elp = FindEnergyLossProcess(p);
423  G4cout << "##### DEDX Table for " << p->GetParticleName() << G4endl;
424  if(elp) G4cout << *(elp->DEDXTable()) << G4endl;
425 }
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4PhysicsTable * DEDXTable() const
#define G4endl
Definition: G4ios.hh:61
void G4EmCalculator::PrintInverseRangeTable ( const G4ParticleDefinition p)

Definition at line 438 of file G4EmCalculator.cc.

References G4cout, G4endl, G4ParticleDefinition::GetParticleName(), and G4VEnergyLossProcess::InverseRangeTable().

Referenced by export_G4EmCalculator().

439 {
440  const G4VEnergyLossProcess* elp = FindEnergyLossProcess(p);
441  G4cout << "### G4EmCalculator: Inverse Range Table for "
442  << p->GetParticleName() << G4endl;
443  if(elp) G4cout << *(elp->InverseRangeTable()) << G4endl;
444 }
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
G4PhysicsTable * InverseRangeTable() const
#define G4endl
Definition: G4ios.hh:61
void G4EmCalculator::PrintRangeTable ( const G4ParticleDefinition p)

Definition at line 429 of file G4EmCalculator.cc.

References G4cout, G4endl, G4ParticleDefinition::GetParticleName(), and G4VEnergyLossProcess::RangeTableForLoss().

Referenced by export_G4EmCalculator().

430 {
431  const G4VEnergyLossProcess* elp = FindEnergyLossProcess(p);
432  G4cout << "##### Range Table for " << p->GetParticleName() << G4endl;
433  if(elp) G4cout << *(elp->RangeTableForLoss()) << G4endl;
434 }
G4PhysicsTable * RangeTableForLoss() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
void G4EmCalculator::SetVerbose ( G4int  val)

Definition at line 1280 of file G4EmCalculator.cc.

Referenced by export_G4EmCalculator().

1281 {
1282  verbose = verb;
1283 }

The documentation for this class was generated from the following files: