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

#include <G4IonisParamMat.hh>

Public Member Functions

 G4IonisParamMat (const G4Material *)
 
 ~G4IonisParamMat ()
 
G4double GetMeanExcitationEnergy () const
 
void SetMeanExcitationEnergy (G4double value)
 
G4double FindMeanExcitationEnergy (const G4Material *) const
 
G4double GetLogMeanExcEnergy () const
 
G4doubleGetShellCorrectionVector () const
 
G4double GetTaul () const
 
G4double GetPlasmaEnergy () const
 
G4double GetAdjustmentFactor () const
 
G4double GetCdensity () const
 
G4double GetMdensity () const
 
G4double GetAdensity () const
 
G4double GetX0density () const
 
G4double GetX1density () const
 
G4double GetD0density () const
 
void SetDensityEffectParameters (G4double cd, G4double md, G4double ad, G4double x0, G4double x1, G4double d0)
 
void SetDensityEffectParameters (const G4Material *bmat)
 
void ComputeDensityEffectOnFly (G4bool)
 
G4DensityEffectCalculatorGetDensityEffectCalculator () const
 
G4double DensityCorrection (G4double x) const
 
G4double GetDensityCorrection (G4double x) const
 
G4double GetF1fluct () const
 
G4double GetF2fluct () const
 
G4double GetEnergy1fluct () const
 
G4double GetLogEnergy1fluct () const
 
G4double GetEnergy2fluct () const
 
G4double GetLogEnergy2fluct () const
 
G4double GetEnergy0fluct () const
 
G4double GetRateionexcfluct () const
 
G4double GetZeffective () const
 
G4double GetFermiEnergy () const
 
G4double GetLFactor () const
 
G4double GetInvA23 () const
 
void SetBirksConstant (G4double value)
 
G4double GetBirksConstant () const
 
void SetMeanEnergyPerIonPair (G4double value)
 
G4double GetMeanEnergyPerIonPair () const
 
 G4IonisParamMat (__void__ &)
 
G4IonisParamMatoperator= (const G4IonisParamMat &)=delete
 
G4bool operator== (const G4IonisParamMat &) const =delete
 
G4bool operator!= (const G4IonisParamMat &) const =delete
 
 G4IonisParamMat (const G4IonisParamMat &)=delete
 

Static Public Member Functions

static G4DensityEffectDataGetDensityEffectData ()
 

Detailed Description

Definition at line 57 of file G4IonisParamMat.hh.

Constructor & Destructor Documentation

◆ G4IonisParamMat() [1/3]

G4IonisParamMat::G4IonisParamMat ( const G4Material material)

Definition at line 62 of file G4IonisParamMat.cc.

63 : fMaterial(material)
64{
65 fBirks = 0.;
66 fMeanEnergyPerIon = 0.0;
67 twoln10 = 2.*G4Pow::GetInstance()->logZ(10);
68
69 // minimal set of default parameters for density effect
70 fCdensity = 0.0;
71 fD0density = 0.0;
72 fAdjustmentFactor = 1.0;
73 if(fDensityData == nullptr) { fDensityData = new G4DensityEffectData(); }
74 fDensityEffectCalc = nullptr;
75
76 // compute parameters
77 ComputeMeanParameters();
78 ComputeDensityEffectParameters();
79 ComputeFluctModel();
80 ComputeIonParameters();
81}
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double logZ(G4int Z) const
Definition: G4Pow.hh:137

◆ ~G4IonisParamMat()

G4IonisParamMat::~G4IonisParamMat ( )

Definition at line 123 of file G4IonisParamMat.cc.

124{
125 delete fDensityEffectCalc;
126 delete [] fShellCorrectionVector;
127 delete fDensityData;
128 fDensityData = nullptr;
129 fShellCorrectionVector = nullptr;
130 fDensityEffectCalc = nullptr;
131}

◆ G4IonisParamMat() [2/3]

G4IonisParamMat::G4IonisParamMat ( __void__ &  )

Definition at line 88 of file G4IonisParamMat.cc.

89 : fMaterial(nullptr), fShellCorrectionVector(nullptr)
90{
91 fMeanExcitationEnergy = 0.0;
92 fLogMeanExcEnergy = 0.0;
93 fTaul = 0.0;
94 fCdensity = 0.0;
95 fMdensity = 0.0;
96 fAdensity = 0.0;
97 fX0density = 0.0;
98 fX1density = 0.0;
99 fD0density = 0.0;
100 fPlasmaEnergy = 0.0;
101 fAdjustmentFactor = 0.0;
102 fF1fluct = 0.0;
103 fF2fluct = 0.0;
104 fEnergy1fluct = 0.0;
105 fLogEnergy1fluct = 0.0;
106 fEnergy2fluct = 0.0;
107 fLogEnergy2fluct = 0.0;
108 fEnergy0fluct = 0.0;
109 fRateionexcfluct = 0.0;
110 fZeff = 0.0;
111 fFermiEnergy = 0.0;
112 fLfactor = 0.0;
113 fInvA23 = 0.0;
114 fBirks = 0.0;
115 fMeanEnergyPerIon = 0.0;
116 twoln10 = 2.*G4Pow::GetInstance()->logZ(10);
117
118 fDensityEffectCalc = nullptr;
119}

◆ G4IonisParamMat() [3/3]

G4IonisParamMat::G4IonisParamMat ( const G4IonisParamMat )
delete

Member Function Documentation

◆ ComputeDensityEffectOnFly()

void G4IonisParamMat::ComputeDensityEffectOnFly ( G4bool  val)

Definition at line 545 of file G4IonisParamMat.cc.

546{
547 if(val) {
548 if(nullptr == fDensityEffectCalc) {
549 G4int n = 0;
550 for(size_t i=0; i<fMaterial->GetNumberOfElements(); ++i) {
551 const G4int Z = fMaterial->GetElement((G4int)i)->GetZasInt();
553 }
554 // The last level is the conduction level. If this is *not* a conductor,
555 // make a dummy conductor level with zero electrons in it.
556 fDensityEffectCalc = new G4DensityEffectCalculator(fMaterial, n);
557 }
558 } else {
559 delete fDensityEffectCalc;
560 fDensityEffectCalc = nullptr;
561 }
562}
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
static G4int GetNumberOfShells(G4int Z)
G4int GetZasInt() const
Definition: G4Element.hh:132
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:197
size_t GetNumberOfElements() const
Definition: G4Material.hh:181

Referenced by G4Material::ComputeDensityEffectOnFly().

◆ DensityCorrection()

G4double G4IonisParamMat::DensityCorrection ( G4double  x) const
inline

Definition at line 110 of file G4IonisParamMat.hh.

111 { return (nullptr == fDensityEffectCalc) ? GetDensityCorrection(x)
112 : fDensityEffectCalc->ComputeDensityCorrection(x); }
G4double GetDensityCorrection(G4double x) const

Referenced by G4MuBetheBlochModel::ComputeDEDXPerVolume(), G4BetheBlochModel::ComputeDEDXPerVolume(), and G4MollerBhabhaModel::ComputeDEDXPerVolume().

◆ FindMeanExcitationEnergy()

G4double G4IonisParamMat::FindMeanExcitationEnergy ( const G4Material mat) const

Definition at line 566 of file G4IonisParamMat.cc.

567{
568 G4double res = 0.0;
569 // data from density effect data
570 if(fDensityData != nullptr)
571 {
572 G4int idx = fDensityData->GetIndex(mat->GetName());
573 if(idx >= 0) {
574 res = fDensityData->GetMeanIonisationPotential(idx);
575 }
576 }
577
578 // The data on mean excitation energy for compaunds
579 // from "Stopping Powers for Electrons and Positrons"
580 // ICRU Report N#37, 1984 (energy in eV)
581 // this value overwrites Density effect data
582 G4String chFormula = mat->GetChemicalFormula();
583 if(!chFormula.empty())
584 {
585 static const size_t numberOfMolecula = 54;
586 static const G4String name[numberOfMolecula] = {
587 // gas 0 - 12
588 "NH_3", "C_4H_10", "CO_2", "C_2H_6", "C_7H_16-Gas",
589 // "G4_AMMONIA", "G4_BUTANE","G4_CARBON_DIOXIDE","G4_ETHANE", "G4_N-HEPTANE"
590 "C_6H_14-Gas", "CH_4", "NO", "N_2O", "C_8H_18-Gas",
591 // "G4_N-HEXANE" , "G4_METHANE", "x", "G4_NITROUS_OXIDE", "G4_OCTANE"
592 "C_5H_12-Gas", "C_3H_8", "H_2O-Gas",
593 // "G4_N-PENTANE", "G4_PROPANE", "G4_WATER_VAPOR"
594
595 // liquid 13 - 39
596 "C_3H_6O", "C_6H_5NH_2", "C_6H_6", "C_4H_9OH", "CCl_4",
597 //"G4_ACETONE","G4_ANILINE","G4_BENZENE","G4_N-BUTYL_ALCOHOL","G4_CARBON_TETRACHLORIDE"
598 "C_6H_5Cl", "CHCl_3", "C_6H_12", "C_6H_4Cl_2", "C_4Cl_2H_8O",
599 //"G4_CHLOROBENZENE","G4_CHLOROFORM","G4_CYCLOHEXANE","G4_1,2-DICHLOROBENZENE",
600 //"G4_DICHLORODIETHYL_ETHER"
601 "C_2Cl_2H_4", "(C_2H_5)_2O", "C_2H_5OH", "C_3H_5(OH)_3","C_7H_16",
602 //"G4_1,2-DICHLOROETHANE","G4_DIETHYL_ETHER","G4_ETHYL_ALCOHOL","G4_GLYCEROL","G4_N-HEPTANE"
603 "C_6H_14", "CH_3OH", "C_6H_5NO_2","C_5H_12", "C_3H_7OH",
604 //"G4_N-HEXANE","G4_METHANOL","G4_NITROBENZENE","G4_N-PENTANE","G4_N-PROPYL_ALCOHOL",
605 "C_5H_5N", "C_8H_8", "C_2Cl_4", "C_7H_8", "C_2Cl_3H",
606 //"G4_PYRIDINE","G4_POLYSTYRENE","G4_TETRACHLOROETHYLENE","G4_TOLUENE","G4_TRICHLOROETHYLENE"
607 "H_2O", "C_8H_10",
608 // "G4_WATER", "G4_XYLENE"
609
610 // solid 40 - 53
611 "C_5H_5N_5", "C_5H_5N_5O", "(C_6H_11NO)-nylon", "C_25H_52",
612 // "G4_ADENINE", "G4_GUANINE", "G4_NYLON-6-6", "G4_PARAFFIN"
613 "(C_2H_4)-Polyethylene", "(C_5H_8O_2)-Polymethil_Methacrylate",
614 // "G4_ETHYLENE", "G4_PLEXIGLASS"
615 "(C_8H_8)-Polystyrene", "A-150-tissue", "Al_2O_3", "CaF_2",
616 // "G4_POLYSTYRENE", "G4_A-150_TISSUE", "G4_ALUMINUM_OXIDE", "G4_CALCIUM_FLUORIDE"
617 "LiF", "Photo_Emulsion", "(C_2F_4)-Teflon", "SiO_2"
618 // "G4_LITHIUM_FLUORIDE", "G4_PHOTO_EMULSION", "G4_TEFLON", "G4_SILICON_DIOXIDE"
619 } ;
620
621 static const G4double meanExcitation[numberOfMolecula] = {
622
623 53.7, 48.3, 85.0, 45.4, 49.2,
624 49.1, 41.7, 87.8, 84.9, 49.5,
625 48.2, 47.1, 71.6,
626
627 64.2, 66.2, 63.4, 59.9, 166.3,
628 89.1, 156.0, 56.4, 106.5, 103.3,
629 111.9, 60.0, 62.9, 72.6, 54.4,
630 54.0, 67.6, 75.8, 53.6, 61.1,
631 66.2, 64.0, 159.2, 62.5, 148.1,
632 75.0, 61.8,
633
634 71.4, 75.0, 63.9, 48.3, 57.4,
635 74.0, 68.7, 65.1, 145.2, 166.,
636 94.0, 331.0, 99.1, 139.2
637 };
638
639 for(size_t i=0; i<numberOfMolecula; i++) {
640 if(chFormula == name[i]) {
641 res = meanExcitation[i]*eV;
642 break;
643 }
644 }
645 }
646 return res;
647}
double G4double
Definition: G4Types.hh:83
G4double GetMeanIonisationPotential(G4int idx) const
G4int GetIndex(const G4String &matName) const
const G4String & GetChemicalFormula() const
Definition: G4Material.hh:173
const G4String & GetName() const
Definition: G4Material.hh:172
const char * name(G4int ptype)

◆ GetAdensity()

G4double G4IonisParamMat::GetAdensity ( ) const
inline

Definition at line 88 of file G4IonisParamMat.hh.

88{return fAdensity;};

Referenced by G4EmCorrections::DensityCorrection(), and SetDensityEffectParameters().

◆ GetAdjustmentFactor()

G4double G4IonisParamMat::GetAdjustmentFactor ( ) const
inline

Definition at line 82 of file G4IonisParamMat.hh.

82{return fAdjustmentFactor;};

◆ GetBirksConstant()

G4double G4IonisParamMat::GetBirksConstant ( ) const
inline

Definition at line 151 of file G4IonisParamMat.hh.

151{return fBirks;};

Referenced by G4EmSaturation::DumpBirksCoefficients(), and G4EmSaturation::VisibleEnergyDeposition().

◆ GetCdensity()

G4double G4IonisParamMat::GetCdensity ( ) const
inline

Definition at line 84 of file G4IonisParamMat.hh.

84{return fCdensity;};

Referenced by G4EmCorrections::DensityCorrection(), and SetDensityEffectParameters().

◆ GetD0density()

G4double G4IonisParamMat::GetD0density ( ) const
inline

Definition at line 94 of file G4IonisParamMat.hh.

94{return fD0density;};

Referenced by SetDensityEffectParameters().

◆ GetDensityCorrection()

G4double G4IonisParamMat::GetDensityCorrection ( G4double  x) const

Definition at line 135 of file G4IonisParamMat.cc.

136{
137 // x = log10(beta*gamma)
138 G4double y = 0.0;
139 if(x < fX0density) {
140 if(fD0density > 0.0) { y = fD0density*G4Exp(twoln10*(x - fX0density)); }
141 } else if(x >= fX1density) {
142 y = twoln10*x - fCdensity;
143 } else {
144 y = twoln10*x - fCdensity +
145 fAdensity*G4Exp(G4Log(fX1density - x)*fMdensity);
146 }
147 return y;
148}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
G4double G4Log(G4double x)
Definition: G4Log.hh:227

Referenced by G4DensityEffectCalculator::ComputeDensityCorrection(), and DensityCorrection().

◆ GetDensityEffectCalculator()

G4DensityEffectCalculator * G4IonisParamMat::GetDensityEffectCalculator ( ) const
inline

Definition at line 105 of file G4IonisParamMat.hh.

106 { return fDensityEffectCalc; }

◆ GetDensityEffectData()

G4DensityEffectData * G4IonisParamMat::GetDensityEffectData ( )
static

Definition at line 195 of file G4IonisParamMat.cc.

196{
197 return fDensityData;
198}

Referenced by G4NistMessenger::SetNewValue().

◆ GetEnergy0fluct()

G4double G4IonisParamMat::GetEnergy0fluct ( ) const
inline

Definition at line 133 of file G4IonisParamMat.hh.

133{return fEnergy0fluct;};

◆ GetEnergy1fluct()

G4double G4IonisParamMat::GetEnergy1fluct ( ) const
inline

Definition at line 125 of file G4IonisParamMat.hh.

125{return fEnergy1fluct;};

◆ GetEnergy2fluct()

G4double G4IonisParamMat::GetEnergy2fluct ( ) const
inline

Definition at line 129 of file G4IonisParamMat.hh.

129{return fEnergy2fluct;};

◆ GetF1fluct()

G4double G4IonisParamMat::GetF1fluct ( ) const
inline

Definition at line 121 of file G4IonisParamMat.hh.

121{return fF1fluct;};

◆ GetF2fluct()

G4double G4IonisParamMat::GetF2fluct ( ) const
inline

Definition at line 123 of file G4IonisParamMat.hh.

123{return fF2fluct;};

◆ GetFermiEnergy()

G4double G4IonisParamMat::GetFermiEnergy ( ) const
inline

Definition at line 141 of file G4IonisParamMat.hh.

141{return fFermiEnergy;};

Referenced by G4ionEffectiveCharge::EffectiveCharge().

◆ GetInvA23()

G4double G4IonisParamMat::GetInvA23 ( ) const
inline

◆ GetLFactor()

G4double G4IonisParamMat::GetLFactor ( ) const
inline

Definition at line 143 of file G4IonisParamMat.hh.

143{return fLfactor;};

◆ GetLogEnergy1fluct()

G4double G4IonisParamMat::GetLogEnergy1fluct ( ) const
inline

Definition at line 127 of file G4IonisParamMat.hh.

127{return fLogEnergy1fluct;};

◆ GetLogEnergy2fluct()

G4double G4IonisParamMat::GetLogEnergy2fluct ( ) const
inline

Definition at line 131 of file G4IonisParamMat.hh.

131{return fLogEnergy2fluct;};

◆ GetLogMeanExcEnergy()

G4double G4IonisParamMat::GetLogMeanExcEnergy ( ) const
inline

Definition at line 72 of file G4IonisParamMat.hh.

72{return fLogMeanExcEnergy;};

◆ GetMdensity()

G4double G4IonisParamMat::GetMdensity ( ) const
inline

Definition at line 86 of file G4IonisParamMat.hh.

86{return fMdensity;};

Referenced by G4EmCorrections::DensityCorrection(), and SetDensityEffectParameters().

◆ GetMeanEnergyPerIonPair()

G4double G4IonisParamMat::GetMeanEnergyPerIonPair ( ) const
inline

◆ GetMeanExcitationEnergy()

◆ GetPlasmaEnergy()

G4double G4IonisParamMat::GetPlasmaEnergy ( ) const
inline

Definition at line 80 of file G4IonisParamMat.hh.

80{return fPlasmaEnergy;};

Referenced by G4DensityEffectCalculator::G4DensityEffectCalculator().

◆ GetRateionexcfluct()

G4double G4IonisParamMat::GetRateionexcfluct ( ) const
inline

Definition at line 135 of file G4IonisParamMat.hh.

135{return fRateionexcfluct;};

◆ GetShellCorrectionVector()

G4double * G4IonisParamMat::GetShellCorrectionVector ( ) const
inline

Definition at line 74 of file G4IonisParamMat.hh.

74{return fShellCorrectionVector;};

Referenced by G4EmCorrections::ShellCorrectionSTD().

◆ GetTaul()

G4double G4IonisParamMat::GetTaul ( ) const
inline

Definition at line 76 of file G4IonisParamMat.hh.

76{return fTaul;};

Referenced by G4hBetheBlochModel::LowEnergyLimit(), and G4EmCorrections::ShellCorrectionSTD().

◆ GetX0density()

G4double G4IonisParamMat::GetX0density ( ) const
inline

Definition at line 90 of file G4IonisParamMat.hh.

90{return fX0density;};

Referenced by G4EmCorrections::DensityCorrection(), and SetDensityEffectParameters().

◆ GetX1density()

G4double G4IonisParamMat::GetX1density ( ) const
inline

Definition at line 92 of file G4IonisParamMat.hh.

92{return fX1density;};

Referenced by G4EmCorrections::DensityCorrection(), and SetDensityEffectParameters().

◆ GetZeffective()

◆ operator!=()

G4bool G4IonisParamMat::operator!= ( const G4IonisParamMat ) const
delete

◆ operator=()

G4IonisParamMat & G4IonisParamMat::operator= ( const G4IonisParamMat )
delete

◆ operator==()

G4bool G4IonisParamMat::operator== ( const G4IonisParamMat ) const
delete

◆ SetBirksConstant()

void G4IonisParamMat::SetBirksConstant ( G4double  value)
inline

Definition at line 149 of file G4IonisParamMat.hh.

149{fBirks = value;};

◆ SetDensityEffectParameters() [1/2]

void G4IonisParamMat::SetDensityEffectParameters ( const G4Material bmat)

Definition at line 521 of file G4IonisParamMat.cc.

522{
523#ifdef G4MULTITHREADED
524 G4MUTEXLOCK(&ionisMutex);
525#endif
526 const G4IonisParamMat* ipm = bmat->GetIonisation();
527 fCdensity = ipm->GetCdensity();
528 fMdensity = ipm->GetMdensity();
529 fAdensity = ipm->GetAdensity();
530 fX0density = ipm->GetX0density();
531 fX1density = ipm->GetX1density();
532 fD0density = ipm->GetD0density();
533
534 G4double corr = G4Log(bmat->GetDensity()/fMaterial->GetDensity());
535 fCdensity += corr;
536 fX0density += corr/twoln10;
537 fX1density += corr/twoln10;
538#ifdef G4MULTITHREADED
539 G4MUTEXUNLOCK(&ionisMutex);
540#endif
541}
#define G4MUTEXLOCK(mutex)
Definition: G4Threading.hh:251
#define G4MUTEXUNLOCK(mutex)
Definition: G4Threading.hh:254
G4double GetMdensity() const
G4double GetX1density() const
G4double GetX0density() const
G4double GetCdensity() const
G4double GetD0density() const
G4double GetAdensity() const
G4double GetDensity() const
Definition: G4Material.hh:175
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:221

◆ SetDensityEffectParameters() [2/2]

void G4IonisParamMat::SetDensityEffectParameters ( G4double  cd,
G4double  md,
G4double  ad,
G4double  x0,
G4double  x1,
G4double  d0 
)

Definition at line 504 of file G4IonisParamMat.cc.

507{
508 // no check on consistence of user parameters
509 G4AutoLock l(&ionisMutex);
510 fCdensity = cd;
511 fMdensity = md;
512 fAdensity = ad;
513 fX0density = x0;
514 fX1density = x1;
515 fD0density = d0;
516 l.unlock();
517}

◆ SetMeanEnergyPerIonPair()

void G4IonisParamMat::SetMeanEnergyPerIonPair ( G4double  value)
inline

Definition at line 155 of file G4IonisParamMat.hh.

155{fMeanEnergyPerIon = value;};

Referenced by G4ElectronIonPair::FindG4MeanEnergyPerIonPair().

◆ SetMeanExcitationEnergy()

void G4IonisParamMat::SetMeanExcitationEnergy ( G4double  value)

Definition at line 477 of file G4IonisParamMat.cc.

478{
479 if(value == fMeanExcitationEnergy || value <= 0.0) { return; }
480 if (G4NistManager::Instance()->GetVerbose() > 1) {
481 G4cout << "G4Material: Mean excitation energy is changed for "
482 << fMaterial->GetName()
483 << " Iold= " << fMeanExcitationEnergy/CLHEP::eV
484 << "eV; Inew= " << value/eV << " eV;"
485 << G4endl;
486 }
487
488 fMeanExcitationEnergy = value;
489
490 // add corrections to density effect
491 G4double newlog = G4Log(value);
492 G4double corr = 2*(newlog - fLogMeanExcEnergy);
493 fCdensity += corr;
494 fX0density += corr/twoln10;
495 fX1density += corr/twoln10;
496
497 // recompute parameters of fluctuation model
498 fLogMeanExcEnergy = newlog;
499 ComputeFluctModel();
500}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4NistManager * Instance()

Referenced by G4tgbMaterialMgr::FindOrBuildG4Material(), and G4GDMLReadMaterials::MaterialRead().


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