Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmCalculator Class Reference

#include <G4EmCalculator.hh>

Public Member Functions

 G4EmCalculator ()
 ~G4EmCalculator ()
G4double GetDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
G4double GetDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &regname="world")
G4double GetRangeFromRestricteDEDX (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
G4double GetRangeFromRestricteDEDX (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &regname="world")
G4double GetCSDARange (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
G4double GetCSDARange (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &regname="world")
G4double GetRange (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
G4double GetRange (G4double kinEnergy, const G4String &part, const G4String &mat, const G4String &regname="world")
G4double GetKinEnergy (G4double range, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
G4double GetKinEnergy (G4double range, const G4String &part, const G4String &mat, const G4String &regname="world")
G4double GetCrossSectionPerVolume (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=nullptr)
G4double GetCrossSectionPerVolume (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, const G4String &regname="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=nullptr)
G4double GetMeanFreePath (G4double kinEnergy, const G4String &part, const G4String &proc, const G4String &mat, const G4String &regname="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 ComputeDEDXForCutInRange (G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double rangecut=DBL_MAX)
G4double ComputeDEDXForCutInRange (G4double kinEnergy, const G4String &part, const G4String &mat, G4double rangecut=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 ComputeCrossSectionPerShell (G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, G4int Z, G4int shellIdx, G4double cut=0.0)
G4double ComputeCrossSectionPerShell (G4double kinEnergy, const G4String &part, const G4String &processName, const G4Element *, G4int shellIdx, G4double cut=0.0)
G4double ComputeGammaAttenuationLength (G4double kinEnergy, const G4Material *)
G4double ComputeShellIonisationCrossSectionPerAtom (const G4String &part, G4int Z, G4AtomicShellEnumerator shell, G4double kinEnergy, const G4Material *mat=nullptr)
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=nullptr)
G4VProcessFindProcess (const G4ParticleDefinition *part, const G4String &processName)
void SetupMaterial (const G4Material *)
void SetupMaterial (const G4String &)
void SetVerbose (G4int val)
void SetApplySmoothing (G4int val)
G4EmCalculatoroperator= (const G4EmCalculator &right)=delete
 G4EmCalculator (const G4EmCalculator &)=delete

Detailed Description

Definition at line 79 of file G4EmCalculator.hh.

Constructor & Destructor Documentation

◆ G4EmCalculator() [1/2]

G4EmCalculator::G4EmCalculator ( )

Definition at line 80 of file G4EmCalculator.cc.

81{
84 theParameters = G4EmParameters::Instance();
85 corr = manager->EmCorrections();
86 cutenergy[0] = cutenergy[1] = cutenergy[2] = DBL_MAX;
87 theGenericIon = G4GenericIon::GenericIon();
88 ionEffCharge = new G4ionEffectiveCharge();
89 dynParticle = new G4DynamicParticle();
91}
static G4EmParameters * Instance()
static G4GenericIon * GenericIon()
static G4LossTableManager * Instance()
static G4NistManager * Instance()
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
#define DBL_MAX
Definition templates.hh:62

Referenced by G4EmCalculator(), and operator=().

◆ ~G4EmCalculator()

G4EmCalculator::~G4EmCalculator ( )

Definition at line 95 of file G4EmCalculator.cc.

96{
97 delete ionEffCharge;
98 delete dynParticle;
99 for (G4int i=0; i<nLocalMaterials; ++i) {
100 delete localCouples[i];
101 }
102}
int G4int
Definition G4Types.hh:85

◆ G4EmCalculator() [2/2]

G4EmCalculator::G4EmCalculator ( const G4EmCalculator & )
delete

Member Function Documentation

◆ ComputeCrossSectionPerAtom() [1/2]

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

Definition at line 600 of file G4EmCalculator.cc.

605{
606 G4double res = 0.0;
607 if(UpdateParticle(p, kinEnergy)) {
608 G4int iz = G4lrint(Z);
609 CheckMaterial(iz);
610 if(FindEmModel(p, processName, kinEnergy)) {
611 G4double e = kinEnergy;
612 G4double aCut = std::max(cut, theParameters->LowestElectronEnergy());
613 if(baseParticle) {
614 e *= kinEnergy*massRatio;
615 currentModel->InitialiseForElement(baseParticle, iz);
616 res = currentModel->ComputeCrossSectionPerAtom(
617 baseParticle, e, Z, A, aCut) * chargeSquare;
618 } else {
619 currentModel->InitialiseForElement(p, iz);
620 res = currentModel->ComputeCrossSectionPerAtom(p, e, Z, A, aCut);
621 }
622 if(verbose>0) {
623 G4cout << "E(MeV)= " << kinEnergy/MeV
624 << " cross(barn)= " << res/barn
625 << " " << p->GetParticleName()
626 << " Z= " << Z << " A= " << A/(g/mole) << " g/mole"
627 << " cut(keV)= " << aCut/keV
628 << G4endl;
629 }
630 }
631 }
632 return res;
633}
double G4double
Definition G4Types.hh:83
const G4double A[17]
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
const G4String & GetParticleName() const
int G4lrint(double ad)
Definition templates.hh:134

Referenced by ComputeCrossSectionPerAtom().

◆ ComputeCrossSectionPerAtom() [2/2]

G4double G4EmCalculator::ComputeCrossSectionPerAtom ( G4double kinEnergy,
const G4String & part,
const G4String & processName,
const G4Element * elm,
G4double cut = 0.0 )
inline

Definition at line 508 of file G4EmCalculator.hh.

513{
514 return ComputeCrossSectionPerAtom(kinEnergy,FindParticle(particle),
515 processName,
516 elm->GetZ(),elm->GetN(),cut);
517}
G4double GetZ() const
Definition G4Element.hh:119
G4double GetN() const
Definition G4Element.hh:123
const G4ParticleDefinition * FindParticle(const G4String &)
G4double ComputeCrossSectionPerAtom(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, G4double Z, G4double A, G4double cut=0.0)

◆ ComputeCrossSectionPerShell() [1/2]

G4double G4EmCalculator::ComputeCrossSectionPerShell ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
G4int Z,
G4int shellIdx,
G4double cut = 0.0 )

Definition at line 638 of file G4EmCalculator.cc.

643{
644 G4double res = 0.0;
645 if(UpdateParticle(p, kinEnergy)) {
646 CheckMaterial(Z);
647 if(FindEmModel(p, processName, kinEnergy)) {
648 G4double e = kinEnergy;
649 G4double aCut = std::max(cut, theParameters->LowestElectronEnergy());
650 if(nullptr != baseParticle) {
651 e *= kinEnergy*massRatio;
652 currentModel->InitialiseForElement(baseParticle, Z);
653 res =
654 currentModel->ComputeCrossSectionPerShell(baseParticle, Z, shellIdx,
655 e, aCut) * chargeSquare;
656 } else {
657 currentModel->InitialiseForElement(p, Z);
658 res = currentModel->ComputeCrossSectionPerAtom(p, Z, shellIdx, e, aCut);
659 }
660 if(verbose>0) {
661 G4cout << "E(MeV)= " << kinEnergy/MeV
662 << " cross(barn)= " << res/barn
663 << " " << p->GetParticleName()
664 << " Z= " << Z << " shellIdx= " << shellIdx
665 << " cut(keV)= " << aCut/keV
666 << G4endl;
667 }
668 }
669 }
670 return res;
671}

Referenced by ComputeCrossSectionPerShell().

◆ ComputeCrossSectionPerShell() [2/2]

G4double G4EmCalculator::ComputeCrossSectionPerShell ( G4double kinEnergy,
const G4String & part,
const G4String & processName,
const G4Element * elm,
G4int shellIdx,
G4double cut = 0.0 )
inline

Definition at line 521 of file G4EmCalculator.hh.

525{
526 return ComputeCrossSectionPerShell(kinEnergy, FindParticle(part),
527 processName, elm->GetZasInt(),
528 shellIdx, cut);
529}
G4int GetZasInt() const
Definition G4Element.hh:120
G4double ComputeCrossSectionPerShell(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, G4int Z, G4int shellIdx, G4double cut=0.0)

◆ ComputeCrossSectionPerVolume() [1/2]

G4double G4EmCalculator::ComputeCrossSectionPerVolume ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
const G4Material * mat,
G4double cut = 0.0 )

Definition at line 562 of file G4EmCalculator.cc.

568{
569 SetupMaterial(mat);
570 G4double res = 0.0;
571 if(UpdateParticle(p, kinEnergy)) {
572 if(FindEmModel(p, processName, kinEnergy)) {
573 G4double e = kinEnergy;
574 G4double aCut = std::max(cut, theParameters->LowestElectronEnergy());
575 chargeSquare = currentModel->GetChargeSquareRatio(p, mat, kinEnergy);
576 if (baseParticle && !isIon) {
577 e *= kinEnergy*massRatio;
578 res = currentModel->CrossSectionPerVolume(
579 mat, baseParticle, e, aCut, e) * chargeSquare;
580 } else {
581 res = currentModel->CrossSectionPerVolume(mat, p, e, aCut, e);
582 }
583 if(verbose>0) {
584 G4cout << "G4EmCalculator::ComputeXSPerVolume: E(MeV)= "
585 << kinEnergy/MeV
586 << " cross(cm-1)= " << res*cm
587 << " cut(keV)= " << aCut/keV
588 << " " << p->GetParticleName()
589 << " in " << mat->GetName()
590 << G4endl;
591 }
592 }
593 }
594 return res;
595}
void SetupMaterial(const G4Material *)
const G4String & GetName() const

Referenced by ComputeCrossSectionPerVolume(), ComputeGammaAttenuationLength(), ComputeMeanFreePath(), and GetCrossSectionPerVolume().

◆ ComputeCrossSectionPerVolume() [2/2]

G4double G4EmCalculator::ComputeCrossSectionPerVolume ( G4double kinEnergy,
const G4String & part,
const G4String & proc,
const G4String & mat,
G4double cut = 0.0 )
inline

Definition at line 493 of file G4EmCalculator.hh.

499{
500 return ComputeCrossSectionPerVolume(kinEnergy,FindParticle(particle),
501 processName,
502 FindMaterial(material),cut);
503}
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
const G4Material * FindMaterial(const G4String &)

◆ ComputeDEDX() [1/2]

G4double G4EmCalculator::ComputeDEDX ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
const G4Material * mat,
G4double cut = DBL_MAX )

Definition at line 354 of file G4EmCalculator.cc.

359{
360 SetupMaterial(mat);
361 G4double res = 0.0;
362 if (verbose > 1) {
363 G4cout << "### G4EmCalculator::ComputeDEDX: " << p->GetParticleName()
364 << " in " << currentMaterialName
365 << " e(MeV)= " << kinEnergy/MeV << " cut(MeV)= " << cut/MeV
366 << G4endl;
367 }
368 if (UpdateParticle(p, kinEnergy)) {
369 if (FindEmModel(p, processName, kinEnergy)) {
370 G4double escaled = kinEnergy*massRatio;
371 chargeSquare = currentModel->GetChargeSquareRatio(p, mat, kinEnergy);
372 if (nullptr != baseParticle && !isIon) {
373 res = currentModel->ComputeDEDXPerVolume(mat, baseParticle, escaled, cut)
374 * chargeSquare;
375 if (verbose > 1) {
376 G4cout << "Particle: " << p->GetParticleName()
377 << " E(MeV)=" << kinEnergy
378 << " Base particle: " << baseParticle->GetParticleName()
379 << " Escaled(MeV)= " << escaled
380 << " q2=" << chargeSquare
381 << " dEdx(MeV/mm)=" << res << " << cut=" << cut << G4endl;
382 }
383 } else {
384 res = currentModel->ComputeDEDXPerVolume(mat, p, kinEnergy, cut);
385 if(verbose > 1) {
386 G4cout << p->GetParticleName() << " E(MeV)=" << kinEnergy
387 << " dE/dx(MeV/mm)=" << res << G4endl;
388 }
389 }
390 if (verbose > 1) {
391 G4cout << currentModel->GetName() << ": E(MeV)=" << kinEnergy
392 << " cut(MeV)=" << cut << " DEDX(MeV/mm)=" << res
393 << " q2=" << chargeSquare << G4endl;
394 }
395 // emulate smoothing procedure
396 if (applySmoothing && nullptr != loweModel && loweModel != currentModel) {
397 G4double eth = loweModel->HighEnergyLimit();
398 G4double res0 = 0.0;
399 G4double res1 = 0.0;
400 if (nullptr != baseParticle && !isIon) {
401 res1 = chargeSquare*
402 currentModel->ComputeDEDXPerVolume(mat, baseParticle, eth, cut);
403 res0 = chargeSquare*
404 loweModel->ComputeDEDXPerVolume(mat, baseParticle, eth, cut);
405 } else {
406 res1 = currentModel->ComputeDEDXPerVolume(mat, p, eth, cut);
407 res0 = loweModel->ComputeDEDXPerVolume(mat, p, eth, cut);
408 }
409 if(res1 > 0.0 && escaled > 0.0) {
410 res *= (1.0 + (res0/res1 - 1.0)*eth/escaled);
411 }
412 if (verbose > 1) {
413 G4cout << "At boundary energy(MeV)= " << eth/MeV
414 << " DEDX(MeV/mm)= " << res0*mm/MeV << " " << res1*mm/MeV
415 << " after correction DEDX(MeV/mm)=" << res*mm/MeV << G4endl;
416 }
417 }
418 if (isIon) {
419 G4double eloss = res*length;
420 currentModel->CorrectionsAlongStep(mat, p, kinEnergy, cut, length, eloss);
421 res = std::max(eloss/length, 0.0);
422 }
423 if (verbose > 0) {
424 G4cout << "## E(MeV)= " << kinEnergy/MeV
425 << " DEDX(MeV/mm)= " << res*mm/MeV
426 << " DEDX(MeV*cm^2/g)= " << res*gram/(MeV*cm2*mat->GetDensity())
427 << " cut(MeV)= " << cut/MeV
428 << " " << p->GetParticleName()
429 << " in " << currentMaterialName
430 << " Zi^2= " << chargeSquare
431 << " isIon=" << isIon
432 << G4endl;
433 }
434 }
435 }
436 return res;
437}
G4double GetDensity() const

Referenced by ComputeDEDX(), ComputeDEDXForCutInRange(), and ComputeElectronicDEDX().

◆ ComputeDEDX() [2/2]

G4double G4EmCalculator::ComputeDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & proc,
const G4String & mat,
G4double cut = DBL_MAX )
inline

Definition at line 469 of file G4EmCalculator.hh.

474{
475 return ComputeDEDX(kinEnergy,FindParticle(particle),processName,
476 FindMaterial(material),cut);
477}
G4double ComputeDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=DBL_MAX)

◆ ComputeDEDXForCutInRange() [1/2]

G4double G4EmCalculator::ComputeDEDXForCutInRange ( G4double kinEnergy,
const G4ParticleDefinition * part,
const G4Material * mat,
G4double rangecut = DBL_MAX )

Definition at line 475 of file G4EmCalculator.cc.

479{
480 SetupMaterial(mat);
481 G4double dedx = 0.0;
482 if(UpdateParticle(part, kinEnergy)) {
483
484 G4LossTableManager* lManager = G4LossTableManager::Instance();
485 const std::vector<G4VEnergyLossProcess*> vel =
486 lManager->GetEnergyLossProcessVector();
487 std::size_t n = vel.size();
488
489 if(mat != cutMaterial) {
490 cutMaterial = mat;
491 cutenergy[0] =
493 cutenergy[1] =
495 cutenergy[2] =
497 }
498
499 //G4cout << "ComputeElectronicDEDX for " << part->GetParticleName()
500 // << " n= " << n << G4endl;
501
502 for(std::size_t i=0; i<n; ++i) {
503 if(vel[i]) {
504 auto p = static_cast<G4VProcess*>(vel[i]);
505 if(ActiveForParticle(part, p)) {
506 //G4cout << "idx= " << i << " " << (vel[i])->GetProcessName()
507 // << " " << (vel[i])->Particle()->GetParticleName() << G4endl;
508 const G4ParticleDefinition* sec = (vel[i])->SecondaryParticle();
509 std::size_t idx = 0;
510 if(sec == G4Electron::Electron()) { idx = 1; }
511 else if(sec == G4Positron::Positron()) { idx = 2; }
512
513 dedx += ComputeDEDX(kinEnergy,part,(vel[i])->GetProcessName(),
514 mat,cutenergy[idx]);
515 }
516 }
517 }
518 }
519 return dedx;
520}
static G4Electron * Electron()
Definition G4Electron.cc:91
G4double ComputeEnergyCutFromRangeCut(G4double range, const G4ParticleDefinition *, const G4Material *)
static G4Gamma * Gamma()
Definition G4Gamma.cc:81
const std::vector< G4VEnergyLossProcess * > & GetEnergyLossProcessVector()
static G4Positron * Positron()
Definition G4Positron.cc:90

Referenced by ComputeDEDXForCutInRange().

◆ ComputeDEDXForCutInRange() [2/2]

G4double G4EmCalculator::ComputeDEDXForCutInRange ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
G4double rangecut = DBL_MAX )
inline

Definition at line 446 of file G4EmCalculator.hh.

450{
451 return ComputeDEDXForCutInRange(kinEnergy,FindParticle(part),
452 FindMaterial(mat), rangecut);
453}
G4double ComputeDEDXForCutInRange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double rangecut=DBL_MAX)

◆ ComputeElectronicDEDX() [1/2]

G4double G4EmCalculator::ComputeElectronicDEDX ( G4double kinEnergy,
const G4ParticleDefinition * part,
const G4Material * mat,
G4double cut = DBL_MAX )

Definition at line 441 of file G4EmCalculator.cc.

445{
446 SetupMaterial(mat);
447 G4double dedx = 0.0;
448 if(UpdateParticle(part, kinEnergy)) {
449
450 G4LossTableManager* lManager = G4LossTableManager::Instance();
451 const std::vector<G4VEnergyLossProcess*> vel =
452 lManager->GetEnergyLossProcessVector();
453 std::size_t n = vel.size();
454
455 //G4cout << "ComputeElectronicDEDX for " << part->GetParticleName()
456 // << " n= " << n << G4endl;
457
458 for(std::size_t i=0; i<n; ++i) {
459 if(vel[i]) {
460 auto p = static_cast<G4VProcess*>(vel[i]);
461 if(ActiveForParticle(part, p)) {
462 //G4cout << "idx= " << i << " " << (vel[i])->GetProcessName()
463 // << " " << (vel[i])->Particle()->GetParticleName() << G4endl;
464 dedx += ComputeDEDX(kinEnergy,part,(vel[i])->GetProcessName(),mat,cut);
465 }
466 }
467 }
468 }
469 return dedx;
470}

Referenced by ComputeElectronicDEDX(), and ComputeTotalDEDX().

◆ ComputeElectronicDEDX() [2/2]

G4double G4EmCalculator::ComputeElectronicDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
G4double cut = DBL_MAX )
inline

Definition at line 436 of file G4EmCalculator.hh.

438{
439 return
440 ComputeElectronicDEDX(kinEnergy,FindParticle(part),FindMaterial(mat),cut);
441}
G4double ComputeElectronicDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *mat, G4double cut=DBL_MAX)

◆ ComputeEnergyCutFromRangeCut() [1/2]

G4double G4EmCalculator::ComputeEnergyCutFromRangeCut ( G4double range,
const G4ParticleDefinition * part,
const G4Material * mat )

Definition at line 732 of file G4EmCalculator.cc.

736{
738 ConvertRangeToEnergy(part, mat, range);
739}
static G4ProductionCutsTable * GetProductionCutsTable()

Referenced by ComputeDEDXForCutInRange(), and ComputeEnergyCutFromRangeCut().

◆ ComputeEnergyCutFromRangeCut() [2/2]

G4double G4EmCalculator::ComputeEnergyCutFromRangeCut ( G4double range,
const G4String & particle,
const G4String & material )
inline

Definition at line 534 of file G4EmCalculator.hh.

538{
539 return ComputeEnergyCutFromRangeCut(range,FindParticle(particle),
540 FindMaterial(material));
541}

◆ ComputeGammaAttenuationLength()

G4double G4EmCalculator::ComputeGammaAttenuationLength ( G4double kinEnergy,
const G4Material * mat )

Definition at line 676 of file G4EmCalculator.cc.

678{
679 G4double res = 0.0;
680 const G4ParticleDefinition* gamma = G4Gamma::Gamma();
681 res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "conv", mat, 0.0);
682 res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "compt", mat, 0.0);
683 res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "phot", mat, 0.0);
684 res += ComputeCrossSectionPerVolume(kinEnergy, gamma, "Rayl", mat, 0.0);
685 if(res > 0.0) { res = 1.0/res; }
686 return res;
687}

◆ ComputeMeanFreePath() [1/2]

G4double G4EmCalculator::ComputeMeanFreePath ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
const G4Material * mat,
G4double cut = 0.0 )

Definition at line 710 of file G4EmCalculator.cc.

715{
716 G4double mfp = DBL_MAX;
717 G4double x =
718 ComputeCrossSectionPerVolume(kinEnergy, p, processName, mat, cut);
719 if(x > 0.0) { mfp = 1.0/x; }
720 if(verbose>1) {
721 G4cout << "E(MeV)= " << kinEnergy/MeV
722 << " MFP(mm)= " << mfp/mm
723 << " " << p->GetParticleName()
724 << " in " << mat->GetName()
725 << G4endl;
726 }
727 return mfp;
728}

Referenced by ComputeMeanFreePath().

◆ ComputeMeanFreePath() [2/2]

G4double G4EmCalculator::ComputeMeanFreePath ( G4double kinEnergy,
const G4String & particle,
const G4String & processName,
const G4String & processName,
G4double cut = 0.0 )
inline

Definition at line 546 of file G4EmCalculator.hh.

551{
552 return ComputeMeanFreePath(kinEnergy,FindParticle(particle),processName,
553 FindMaterial(material),cut);
554}
G4double ComputeMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)

◆ ComputeNuclearDEDX() [1/2]

G4double G4EmCalculator::ComputeNuclearDEDX ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4Material * mat )

Definition at line 536 of file G4EmCalculator.cc.

539{
540 G4double res = 0.0;
541 G4VEmProcess* nucst = FindDiscreteProcess(p, "nuclearStopping");
542 if(nucst) {
543 G4VEmModel* mod = nucst->EmModel();
544 if(mod) {
545 mod->SetFluctuationFlag(false);
546 res = mod->ComputeDEDXPerVolume(mat, p, kinEnergy);
547 }
548 }
549
550 if(verbose > 1) {
551 G4cout << p->GetParticleName() << " E(MeV)= " << kinEnergy/MeV
552 << " NuclearDEDX(MeV/mm)= " << res*mm/MeV
553 << " NuclearDEDX(MeV*cm^2/g)= "
554 << res*gram/(MeV*cm2*mat->GetDensity())
555 << G4endl;
556 }
557 return res;
558}
void SetFluctuationFlag(G4bool val)
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
G4VEmModel * EmModel(std::size_t index=0) const

Referenced by ComputeNuclearDEDX(), and ComputeTotalDEDX().

◆ ComputeNuclearDEDX() [2/2]

G4double G4EmCalculator::ComputeNuclearDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & mat )
inline

Definition at line 482 of file G4EmCalculator.hh.

485{
486 return ComputeNuclearDEDX(kinEnergy,FindParticle(particle),
487 FindMaterial(material));
488}
G4double ComputeNuclearDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *)

◆ ComputeShellIonisationCrossSectionPerAtom()

G4double G4EmCalculator::ComputeShellIonisationCrossSectionPerAtom ( const G4String & part,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinEnergy,
const G4Material * mat = nullptr )

Definition at line 691 of file G4EmCalculator.cc.

697{
698 G4double res = 0.0;
699 const G4ParticleDefinition* p = FindParticle(particle);
700 G4VAtomDeexcitation* ad = manager->AtomDeexcitation();
701 if(p && ad) {
702 res = ad->ComputeShellIonisationCrossSectionPerAtom(p, Z, shell,
703 kinEnergy, mat);
704 }
705 return res;
706}
virtual G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0

◆ ComputeTotalDEDX() [1/2]

G4double G4EmCalculator::ComputeTotalDEDX ( G4double kinEnergy,
const G4ParticleDefinition * part,
const G4Material * mat,
G4double cut = DBL_MAX )

Definition at line 524 of file G4EmCalculator.cc.

528{
529 G4double dedx = ComputeElectronicDEDX(kinEnergy,part,mat,cut);
530 if(mass > 700.*MeV) { dedx += ComputeNuclearDEDX(kinEnergy,part,mat); }
531 return dedx;
532}

Referenced by ComputeTotalDEDX().

◆ ComputeTotalDEDX() [2/2]

G4double G4EmCalculator::ComputeTotalDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
G4double cut = DBL_MAX )
inline

Definition at line 458 of file G4EmCalculator.hh.

462{
463 return ComputeTotalDEDX(kinEnergy,FindParticle(part),FindMaterial(mat),cut);
464}
G4double ComputeTotalDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, G4double cut=DBL_MAX)

◆ FindCouple()

const G4MaterialCutsCouple * G4EmCalculator::FindCouple ( const G4Material * material,
const G4Region * r = nullptr )

Definition at line 839 of file G4EmCalculator.cc.

842{
843 const G4MaterialCutsCouple* couple = nullptr;
844 SetupMaterial(material);
845 if(nullptr != currentMaterial) {
846 // Access to materials
847 const G4ProductionCutsTable* theCoupleTable=
849 const G4Region* r = region;
850 if(nullptr != r) {
851 couple = theCoupleTable->GetMaterialCutsCouple(material,
852 r->GetProductionCuts());
853 } else {
854 G4RegionStore* store = G4RegionStore::GetInstance();
855 std::size_t nr = store->size();
856 if(0 < nr) {
857 for(std::size_t i=0; i<nr; ++i) {
858 couple = theCoupleTable->GetMaterialCutsCouple(
859 material, ((*store)[i])->GetProductionCuts());
860 if(nullptr != couple) { break; }
861 }
862 }
863 }
864 }
865 if(nullptr == couple) {
867 ed << "G4EmCalculator::FindCouple: fail for material <"
868 << currentMaterialName << ">";
869 if(region) { ed << " and region " << region->GetName(); }
870 G4Exception("G4EmCalculator::FindCouple", "em0078",
871 FatalException, ed);
872 }
873 return couple;
874}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
static G4RegionStore * GetInstance()
G4ProductionCuts * GetProductionCuts() const

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

◆ FindIon()

const G4ParticleDefinition * G4EmCalculator::FindIon ( G4int Z,
G4int A )

Definition at line 810 of file G4EmCalculator.cc.

811{
812 const G4ParticleDefinition* p = ionTable->GetIon(Z,A,0);
813 return p;
814}

◆ FindMaterial()

const G4Material * G4EmCalculator::FindMaterial ( const G4String & name)

Definition at line 818 of file G4EmCalculator.cc.

819{
820 if(name != currentMaterialName) {
822 if(nullptr == currentMaterial) {
823 G4cout << "### WARNING: G4EmCalculator::FindMaterial fails to find "
824 << name << G4endl;
825 }
826 }
827 return currentMaterial;
828}
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
const char * name(G4int ptype)

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

◆ FindParticle()

const G4ParticleDefinition * G4EmCalculator::FindParticle ( const G4String & name)

Definition at line 793 of file G4EmCalculator.cc.

794{
795 const G4ParticleDefinition* p = nullptr;
796 if(name != currentParticleName) {
798 if(nullptr == p) {
799 G4cout << "### WARNING: G4EmCalculator::FindParticle fails to find "
800 << name << G4endl;
801 }
802 } else {
803 p = currentParticle;
804 }
805 return p;
806}
G4ParticleDefinition * FindParticle(G4int PDGEncoding)

Referenced by ComputeCrossSectionPerAtom(), ComputeCrossSectionPerShell(), ComputeCrossSectionPerVolume(), ComputeDEDX(), ComputeDEDXForCutInRange(), ComputeElectronicDEDX(), ComputeEnergyCutFromRangeCut(), ComputeMeanFreePath(), ComputeNuclearDEDX(), ComputeShellIonisationCrossSectionPerAtom(), ComputeTotalDEDX(), GetCrossSectionPerVolume(), GetCSDARange(), GetDEDX(), GetKinEnergy(), GetMeanFreePath(), GetRange(), GetRangeFromRestricteDEDX(), and GetShellIonisationCrossSectionPerAtom().

◆ FindProcess()

G4VProcess * G4EmCalculator::FindProcess ( const G4ParticleDefinition * part,
const G4String & processName )

Definition at line 1144 of file G4EmCalculator.cc.

1146{
1147 G4VProcess* proc = nullptr;
1148 const G4ProcessManager* procman = part->GetProcessManager();
1149 G4ProcessVector* pv = procman->GetProcessList();
1150 G4int nproc = (G4int)pv->size();
1151 for(G4int i=0; i<nproc; ++i) {
1152 if(processName == (*pv)[i]->GetProcessName()) {
1153 proc = (*pv)[i];
1154 break;
1155 }
1156 }
1157 return proc;
1158}
G4ProcessManager * GetProcessManager() const
G4ProcessVector * GetProcessList() const
std::size_t size() const

◆ FindRegion()

const G4Region * G4EmCalculator::FindRegion ( const G4String & reg)

Definition at line 832 of file G4EmCalculator.cc.

833{
834 return G4EmUtility::FindRegion(reg);
835}
static const G4Region * FindRegion(const G4String &regionName, const G4int verbose=0)

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

◆ GetCrossSectionPerVolume() [1/2]

G4double G4EmCalculator::GetCrossSectionPerVolume ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 235 of file G4EmCalculator.cc.

240{
241 G4double res = 0.0;
242 const G4MaterialCutsCouple* couple = FindCouple(mat,region);
243
244 if(nullptr != couple && UpdateParticle(p, kinEnergy)) {
245 if(FindEmModel(p, processName, kinEnergy)) {
246 G4int idx = couple->GetIndex();
247 G4int procType = -1;
248 FindLambdaTable(p, processName, kinEnergy, procType);
249
250 G4VEmProcess* emproc = FindDiscreteProcess(p, processName);
251 if(nullptr != emproc) {
252 res = emproc->GetCrossSection(kinEnergy, couple);
253 } else if(currentLambda) {
254 // special tables are built for Msc models
255 // procType is set in FindLambdaTable
256 if(procType==2) {
257 auto mscM = static_cast<G4VMscModel*>(currentModel);
258 mscM->SetCurrentCouple(couple);
259 G4double tr1Mfp = mscM->GetTransportMeanFreePath(p, kinEnergy);
260 if (tr1Mfp<DBL_MAX) {
261 res = 1./tr1Mfp;
262 }
263 } else {
264 G4double e = kinEnergy*massRatio;
265 res = (((*currentLambda)[idx])->Value(e))*chargeSquare;
266 }
267 } else {
268 res = ComputeCrossSectionPerVolume(kinEnergy, p, processName, mat, kinEnergy);
269 }
270 if(verbose>0) {
271 G4cout << "G4EmCalculator::GetXSPerVolume: E(MeV)= " << kinEnergy/MeV
272 << " cross(cm-1)= " << res*cm
273 << " " << p->GetParticleName()
274 << " in " << mat->GetName();
275 if(verbose>1)
276 G4cout << " idx= " << idx << " Escaled((MeV)= "
277 << kinEnergy*massRatio
278 << " q2= " << chargeSquare;
279 G4cout << G4endl;
280 }
281 }
282 }
283 return res;
284}
const G4MaterialCutsCouple * FindCouple(const G4Material *, const G4Region *r=nullptr)
G4double GetCrossSection(const G4double kinEnergy, const G4MaterialCutsCouple *couple) override

Referenced by GetCrossSectionPerVolume(), and GetMeanFreePath().

◆ GetCrossSectionPerVolume() [2/2]

G4double G4EmCalculator::GetCrossSectionPerVolume ( G4double kinEnergy,
const G4String & part,
const G4String & proc,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 410 of file G4EmCalculator.hh.

415{
416 return GetCrossSectionPerVolume(kinEnergy,FindParticle(particle),processName,
417 FindMaterial(material),FindRegion(reg));
418}
const G4Region * FindRegion(const G4String &)
G4double GetCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=nullptr)

◆ GetCSDARange() [1/2]

G4double G4EmCalculator::GetCSDARange ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 166 of file G4EmCalculator.cc.

170{
171 G4double res = 0.0;
172 if(!theParameters->BuildCSDARange()) {
174 ed << "G4EmCalculator::GetCSDARange: CSDA table is not built; "
175 << " use UI command: /process/eLoss/CSDARange true";
176 G4Exception("G4EmCalculator::GetCSDARange", "em0077",
177 JustWarning, ed);
178 return res;
179 }
180
181 const G4MaterialCutsCouple* couple = FindCouple(mat,region);
182 if(nullptr != couple && UpdateParticle(p, kinEnergy)) {
183 res = manager->GetCSDARange(p, kinEnergy, couple);
184 if(verbose>1) {
185 G4cout << " G4EmCalculator::GetCSDARange: E(MeV)= " << kinEnergy/MeV
186 << " range(mm)= " << res/mm
187 << " " << p->GetParticleName()
188 << " in " << mat->GetName()
189 << G4endl;
190 }
191 }
192 return res;
193}
@ JustWarning

Referenced by GetCSDARange(), and GetRange().

◆ GetCSDARange() [2/2]

G4double G4EmCalculator::GetCSDARange ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 376 of file G4EmCalculator.hh.

380{
381 return GetCSDARange(kinEnergy,FindParticle(particle),
382 FindMaterial(material),FindRegion(reg));
383}
G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)

◆ GetDEDX() [1/2]

G4double G4EmCalculator::GetDEDX ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 106 of file G4EmCalculator.cc.

110{
111 G4double res = 0.0;
112 const G4MaterialCutsCouple* couple = FindCouple(mat, region);
113 if (nullptr != couple && UpdateParticle(p, kinEnergy) ) {
114 if (FindEmModel(p, currentProcessName, kinEnergy)) {
115 if (isIon) {
116 G4double q2 = currentModel->GetChargeSquareRatio(p, mat, kinEnergy);
117 res = manager->GetDEDX(p, kinEnergy, couple) * q2;
118 G4double eloss = res*length;
119 auto const v =
121 G4double cut = (*v)[couple->GetIndex()];
122 currentModel->CorrectionsAlongStep(mat, p, kinEnergy, cut, length, eloss);
123 res = std::max(eloss/length, 0.0);
124 } else {
125 res = manager->GetDEDX(p, kinEnergy, couple);
126 }
127 }
128 }
129 if (verbose > 1) {
130 G4cout << "G4EmCalculator::GetDEDX: E(MeV)= " << kinEnergy/MeV
131 << " DEDX(MeV/mm)= " << res*mm/MeV
132 << " DEDX(MeV*cm^2/g)= " << res*gram/(MeV*cm2*mat->GetDensity())
133 << " " << p->GetParticleName()
134 << " in " << mat->GetName()
135 << " isIon= " << isIon
136 << G4endl;
137 }
138 return res;
139}
const std::vector< G4double > * GetEnergyCutsVector(std::size_t pcIdx) const

Referenced by GetDEDX(), and G4EnergySplitter::SplitEnergyInVolumes().

◆ GetDEDX() [2/2]

G4double G4EmCalculator::GetDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 354 of file G4EmCalculator.hh.

356{
357 return GetDEDX(kinEnergy,FindParticle(particle),
358 FindMaterial(material),FindRegion(reg));
359}
G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)

◆ GetKinEnergy() [1/2]

G4double G4EmCalculator::GetKinEnergy ( G4double range,
const G4ParticleDefinition * p,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 213 of file G4EmCalculator.cc.

217{
218 G4double res = 0.0;
219 const G4MaterialCutsCouple* couple = FindCouple(mat,region);
220 if(nullptr != couple && UpdateParticle(p, 1.0*GeV)) {
221 res = manager->GetEnergy(p, range, couple);
222 if(verbose>0) {
223 G4cout << "G4EmCalculator::GetKinEnergy: Range(mm)= " << range/mm
224 << " KinE(MeV)= " << res/MeV
225 << " " << p->GetParticleName()
226 << " in " << mat->GetName()
227 << G4endl;
228 }
229 }
230 return res;
231}

Referenced by GetKinEnergy().

◆ GetKinEnergy() [2/2]

G4double G4EmCalculator::GetKinEnergy ( G4double range,
const G4String & part,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 400 of file G4EmCalculator.hh.

402{
403 return GetKinEnergy(range,FindParticle(particle),
404 FindMaterial(material),FindRegion(reg));
405}
G4double GetKinEnergy(G4double range, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)

◆ GetMeanFreePath() [1/2]

G4double G4EmCalculator::GetMeanFreePath ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4String & processName,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 305 of file G4EmCalculator.cc.

310{
311 G4double res = DBL_MAX;
312 G4double x = GetCrossSectionPerVolume(kinEnergy,p, processName, mat,region);
313 if(x > 0.0) { res = 1.0/x; }
314 if(verbose>1) {
315 G4cout << "G4EmCalculator::GetMeanFreePath: E(MeV)= " << kinEnergy/MeV
316 << " MFP(mm)= " << res/mm
317 << " " << p->GetParticleName()
318 << " in " << mat->GetName()
319 << G4endl;
320 }
321 return res;
322}

Referenced by GetMeanFreePath().

◆ GetMeanFreePath() [2/2]

G4double G4EmCalculator::GetMeanFreePath ( G4double kinEnergy,
const G4String & part,
const G4String & proc,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 423 of file G4EmCalculator.hh.

428{
429 return GetMeanFreePath(kinEnergy,FindParticle(particle),processName,
430 FindMaterial(material),FindRegion(reg));
431}
G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=nullptr)

◆ GetRange() [1/2]

G4double G4EmCalculator::GetRange ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 197 of file G4EmCalculator.cc.

201{
202 G4double res = 0.0;
203 if(theParameters->BuildCSDARange()) {
204 res = GetCSDARange(kinEnergy, p, mat, region);
205 } else {
206 res = GetRangeFromRestricteDEDX(kinEnergy, p, mat, region);
207 }
208 return res;
209}
G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)

Referenced by GetRange().

◆ GetRange() [2/2]

G4double G4EmCalculator::GetRange ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 388 of file G4EmCalculator.hh.

392{
393 return GetRange(kinEnergy,FindParticle(particle),
394 FindMaterial(material),FindRegion(reg));
395}
G4double GetRange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)

◆ GetRangeFromRestricteDEDX() [1/2]

G4double G4EmCalculator::GetRangeFromRestricteDEDX ( G4double kinEnergy,
const G4ParticleDefinition * p,
const G4Material * mat,
const G4Region * r = nullptr )

Definition at line 143 of file G4EmCalculator.cc.

147{
148 G4double res = 0.0;
149 const G4MaterialCutsCouple* couple = FindCouple(mat,region);
150 if(couple && UpdateParticle(p, kinEnergy)) {
151 res = manager->GetRangeFromRestricteDEDX(p, kinEnergy, couple);
152 if(verbose>1) {
153 G4cout << " G4EmCalculator::GetRangeFromRestrictedDEDX: E(MeV)= "
154 << kinEnergy/MeV
155 << " range(mm)= " << res/mm
156 << " " << p->GetParticleName()
157 << " in " << mat->GetName()
158 << G4endl;
159 }
160 }
161 return res;
162}

Referenced by GetRange(), and GetRangeFromRestricteDEDX().

◆ GetRangeFromRestricteDEDX() [2/2]

G4double G4EmCalculator::GetRangeFromRestricteDEDX ( G4double kinEnergy,
const G4String & part,
const G4String & mat,
const G4String & regname = "world" )
inline

Definition at line 364 of file G4EmCalculator.hh.

368{
369 return GetRangeFromRestricteDEDX(kinEnergy,FindParticle(particle),
370 FindMaterial(material),FindRegion(reg));
371}

◆ GetShellIonisationCrossSectionPerAtom()

G4double G4EmCalculator::GetShellIonisationCrossSectionPerAtom ( const G4String & part,
G4int Z,
G4AtomicShellEnumerator shell,
G4double kinEnergy )

Definition at line 288 of file G4EmCalculator.cc.

293{
294 G4double res = 0.0;
295 const G4ParticleDefinition* p = FindParticle(particle);
296 G4VAtomDeexcitation* ad = manager->AtomDeexcitation();
297 if(nullptr != p && nullptr != ad) {
298 res = ad->GetShellIonisationCrossSectionPerAtom(p, Z, shell, kinEnergy);
299 }
300 return res;
301}
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0

◆ operator=()

G4EmCalculator & G4EmCalculator::operator= ( const G4EmCalculator & right)
delete

◆ PrintDEDXTable()

void G4EmCalculator::PrintDEDXTable ( const G4ParticleDefinition * p)

Definition at line 326 of file G4EmCalculator.cc.

327{
328 const G4VEnergyLossProcess* elp = manager->GetEnergyLossProcess(p);
329 G4cout << "##### DEDX Table for " << p->GetParticleName() << G4endl;
330 if(nullptr != elp) G4cout << *(elp->DEDXTable()) << G4endl;
331}
G4PhysicsTable * DEDXTable() const

◆ PrintInverseRangeTable()

void G4EmCalculator::PrintInverseRangeTable ( const G4ParticleDefinition * p)

Definition at line 344 of file G4EmCalculator.cc.

345{
346 const G4VEnergyLossProcess* elp = manager->GetEnergyLossProcess(p);
347 G4cout << "### G4EmCalculator: Inverse Range Table for "
348 << p->GetParticleName() << G4endl;
349 if(nullptr != elp) G4cout << *(elp->InverseRangeTable()) << G4endl;
350}
G4PhysicsTable * InverseRangeTable() const

◆ PrintRangeTable()

void G4EmCalculator::PrintRangeTable ( const G4ParticleDefinition * p)

Definition at line 335 of file G4EmCalculator.cc.

336{
337 const G4VEnergyLossProcess* elp = manager->GetEnergyLossProcess(p);
338 G4cout << "##### Range Table for " << p->GetParticleName() << G4endl;
339 if(nullptr != elp) G4cout << *(elp->RangeTableForLoss()) << G4endl;
340}
G4PhysicsTable * RangeTableForLoss() const

◆ SetApplySmoothing()

void G4EmCalculator::SetApplySmoothing ( G4int val)
inline

Definition at line 558 of file G4EmCalculator.hh.

559{
560 applySmoothing = val;
561}

◆ SetupMaterial() [1/2]

void G4EmCalculator::SetupMaterial ( const G4Material * mat)

Definition at line 1180 of file G4EmCalculator.cc.

1181{
1182 if (nullptr != mat) {
1183 currentMaterial = mat;
1184 currentMaterialName = mat->GetName();
1185 } else {
1186 currentMaterial = nullptr;
1187 currentMaterialName = "";
1188 }
1189}

Referenced by ComputeCrossSectionPerVolume(), ComputeDEDX(), ComputeDEDXForCutInRange(), ComputeElectronicDEDX(), FindCouple(), FindMaterial(), and SetupMaterial().

◆ SetupMaterial() [2/2]

void G4EmCalculator::SetupMaterial ( const G4String & mname)

Definition at line 1193 of file G4EmCalculator.cc.

1194{
1195 SetupMaterial(nist->FindOrBuildMaterial(mname));
1196}

◆ SetVerbose()

void G4EmCalculator::SetVerbose ( G4int val)

Definition at line 1219 of file G4EmCalculator.cc.

1220{
1221 verbose = verb;
1222}

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