Geant4-11
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
G4IonisParamMat Class Reference

#include <G4IonisParamMat.hh>

Public Member Functions

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

Static Public Member Functions

static G4DensityEffectDataGetDensityEffectData ()
 

Private Member Functions

void ComputeDensityEffectParameters ()
 
void ComputeFluctModel ()
 
void ComputeIonParameters ()
 
void ComputeMeanParameters ()
 

Private Attributes

G4double fAdensity
 
G4double fAdjustmentFactor
 
G4double fBirks
 
G4double fCdensity
 
G4double fD0density
 
G4DensityEffectCalculatorfDensityEffectCalc
 
G4double fEnergy0fluct
 
G4double fEnergy1fluct
 
G4double fEnergy2fluct
 
G4double fF1fluct
 
G4double fF2fluct
 
G4double fFermiEnergy
 
G4double fInvA23
 
G4double fLfactor
 
G4double fLogEnergy1fluct
 
G4double fLogEnergy2fluct
 
G4double fLogMeanExcEnergy
 
const G4MaterialfMaterial
 
G4double fMdensity
 
G4double fMeanEnergyPerIon
 
G4double fMeanExcitationEnergy
 
G4double fPlasmaEnergy
 
G4double fRateionexcfluct
 
G4doublefShellCorrectionVector
 
G4double fTaul
 
G4double fX0density
 
G4double fX1density
 
G4double fZeff
 
G4double twoln10
 

Static Private Attributes

static G4DensityEffectDatafDensityData = nullptr
 

Detailed Description

Definition at line 60 of file G4IonisParamMat.hh.

Constructor & Destructor Documentation

◆ G4IonisParamMat() [1/3]

G4IonisParamMat::G4IonisParamMat ( const G4Material material)

Definition at line 59 of file G4IonisParamMat.cc.

61{
62 fBirks = 0.;
65
66 // minimal set of default parameters for density effect
67 fCdensity = 0.0;
68 fD0density = 0.0;
70 if(fDensityData == nullptr) { fDensityData = new G4DensityEffectData(); }
71 fDensityEffectCalc = nullptr;
72
73 // compute parameters
78}
G4DensityEffectCalculator * fDensityEffectCalc
static G4DensityEffectData * fDensityData
void ComputeMeanParameters()
void ComputeDensityEffectParameters()
G4double fAdjustmentFactor
G4double fMeanEnergyPerIon
const G4Material * fMaterial
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double logZ(G4int Z) const
Definition: G4Pow.hh:137
string material
Definition: eplot.py:19

References ComputeDensityEffectParameters(), ComputeFluctModel(), ComputeIonParameters(), ComputeMeanParameters(), fAdjustmentFactor, fBirks, fCdensity, fD0density, fDensityData, fDensityEffectCalc, fMeanEnergyPerIon, G4Pow::GetInstance(), G4Pow::logZ(), and twoln10.

◆ ~G4IonisParamMat()

G4IonisParamMat::~G4IonisParamMat ( )

Definition at line 121 of file G4IonisParamMat.cc.

122{
123 delete fDensityEffectCalc;
124 delete [] fShellCorrectionVector;
125 delete fDensityData;
126 fDensityData = nullptr;
127 fShellCorrectionVector = nullptr;
128 fDensityEffectCalc = nullptr;
129}
G4double * fShellCorrectionVector

References fDensityData, fDensityEffectCalc, and fShellCorrectionVector.

◆ G4IonisParamMat() [2/3]

G4IonisParamMat::G4IonisParamMat ( __void__ &  )

Definition at line 85 of file G4IonisParamMat.cc.

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

References fAdensity, fAdjustmentFactor, fBirks, fCdensity, fD0density, fDensityData, fDensityEffectCalc, fEnergy0fluct, fEnergy1fluct, fEnergy2fluct, fF1fluct, fF2fluct, fFermiEnergy, fInvA23, fLfactor, fLogEnergy1fluct, fLogEnergy2fluct, fLogMeanExcEnergy, fMdensity, fMeanEnergyPerIon, fMeanExcitationEnergy, fPlasmaEnergy, fRateionexcfluct, fTaul, fX0density, fX1density, fZeff, G4Pow::GetInstance(), G4Pow::logZ(), and twoln10.

◆ G4IonisParamMat() [3/3]

G4IonisParamMat::G4IonisParamMat ( const G4IonisParamMat )
delete

Member Function Documentation

◆ ComputeDensityEffectOnFly()

void G4IonisParamMat::ComputeDensityEffectOnFly ( G4bool  val)

Definition at line 532 of file G4IonisParamMat.cc.

533{
534 if(val) {
535 if(nullptr == fDensityEffectCalc) {
536 G4int n = 0;
537 for(size_t i=0; i<fMaterial->GetNumberOfElements(); ++i) {
538 const G4int Z = fMaterial->GetElement(i)->GetZasInt();
540 }
541 // The last level is the conduction level. If this is *not* a conductor,
542 // make a dummy conductor level with zero electrons in it.
544 }
545 } else {
546 delete fDensityEffectCalc;
547 fDensityEffectCalc = nullptr;
548 }
549}
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:198
size_t GetNumberOfElements() const
Definition: G4Material.hh:182

References fDensityEffectCalc, fMaterial, G4Material::GetElement(), G4Material::GetNumberOfElements(), G4AtomicShells::GetNumberOfShells(), G4Element::GetZasInt(), CLHEP::detail::n, and Z.

Referenced by G4Material::ComputeDensityEffectOnFly().

◆ ComputeDensityEffectParameters()

void G4IonisParamMat::ComputeDensityEffectParameters ( )
private

Definition at line 193 of file G4IonisParamMat.cc.

194{
196
197 // Check if density effect data exist in the table
198 // R.M. Sternheimer, Atomic Data and Nuclear Data Tables, 30: 261 (1984)
199 // or is assign to one of data set in this table
202 G4int Z0 = ((*(fMaterial->GetElementVector()))[0])->GetZasInt();
203 const G4Material* bmat = fMaterial->GetBaseMaterial();
205
206 // arbitrary empirical limits
207 // parameterisation with very different density is not applicable
208 static const G4double corrmax = 1.;
209 static const G4double massfracmax = 0.9;
210
211 // for simple non-NIST materials
212 G4double corr = 0.0;
213
214 if(idx < 0 && 1 == nelm) {
215 G4int z = (1 == Z0 && State == kStateLiquid) ? 0 : Z0;
217
218 // Correction for base material or for non-nominal density
219 // Except cases of very different density defined in user code
220 if(idx >= 0 && 0 < z) {
221 G4double dens = nist->GetNominalDensity(Z0);
222 if(dens <= 0.0) { idx = -1; }
223 else {
224 corr = G4Log(dens/fMaterial->GetDensity());
225 }
226 if(std::abs(corr) > corrmax) { idx = -1; }
227 }
228 }
229 // for base material case
230 if(idx < 0 && nullptr != bmat) {
231 idx = fDensityData->GetIndex(bmat->GetName());
232 if(idx >= 0) {
233 corr = G4Log(bmat->GetDensity()/fMaterial->GetDensity());
234 if(std::abs(corr) > corrmax) { idx = -1; }
235 }
236 }
237
238 // for compound non-NIST materials with one element dominating
239 if(idx < 0 && 1 < nelm) {
241 for(G4int i=0; i<nelm; ++i) {
242 const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[i]/tot;
243 if(frac > massfracmax) {
244 Z0 = ((*(fMaterial->GetElementVector()))[i])->GetZasInt();
246 G4double dens = nist->GetNominalDensity(Z0);
247 if(idx >= 0 && dens > 0.0) {
248 corr = G4Log(dens/fMaterial->GetDensity());
249 if(std::abs(corr) > corrmax) { idx = -1; }
250 else { break; }
251 }
252 }
253 }
254 }
255 //G4cout<<"DensityEffect for "<<fMaterial->GetName()<<" "<< idx << G4endl;
256
257 if(idx >= 0) {
258
259 // Take parameters for the density effect correction from
260 // R.M. Sternheimer et al. Density Effect For The Ionization Loss
261 // of Charged Particles in Various Substances.
262 // Atom. Data Nucl. Data Tabl. 30 (1984) 261-271.
263
272
273 // parameter C is computed and not taken from Sternheimer tables
274 //fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy);
275 //G4cout << "IonisParamMat: " << fMaterial->GetName()
276 // << " Cst= " << Cdensity << " C= " << fCdensity << G4endl;
277
278 // correction on nominal density
279 fCdensity += corr;
280 fX0density += corr/twoln10;
281 fX1density += corr/twoln10;
282
283 } else {
284
287
288 // Compute parameters for the density effect correction in DE/Dx formula.
289 // The parametrization is from R.M. Sternheimer, Phys. Rev.B,3:3681 (1971)
290 G4int icase;
291
293 //
294 // condensed materials
295 //
296 if ((State == kStateSolid) || (State == kStateLiquid)) {
297
298 static const G4double E100eV = 100.*CLHEP::eV;
299 static const G4double ClimiS[] = {3.681 , 5.215 };
300 static const G4double X0valS[] = {1.0 , 1.5 };
301 static const G4double X1valS[] = {2.0 , 3.0 };
302
303 if(fMeanExcitationEnergy < E100eV) { icase = 0; }
304 else { icase = 1; }
305
306 if(fCdensity < ClimiS[icase]) { fX0density = 0.2; }
307 else { fX0density = 0.326*fCdensity - X0valS[icase]; }
308
309 fX1density = X1valS[icase]; fMdensity = 3.0;
310
311 //special: Hydrogen
312 if (1 == nelm && 1 == Z0) {
313 fX0density = 0.425; fX1density = 2.0; fMdensity = 5.949;
314 }
315 } else {
316 //
317 // gases
318 //
319 fMdensity = 3.;
320 fX1density = 4.0;
321
322 if(fCdensity <= 10.) {
323 fX0density = 1.6;
324 } else if(fCdensity <= 10.5) {
325 fX0density = 1.7;
326 } else if(fCdensity <= 11.0) {
327 fX0density = 1.8;
328 } else if(fCdensity <= 11.5) {
329 fX0density = 1.9;
330 } else if(fCdensity <= 12.25) {
331 fX0density = 2.0;
332 } else if(fCdensity <= 13.804) {
333 fX0density = 2.0;
334 fX1density = 5.0;
335 } else {
336 fX0density = 0.326*fCdensity-2.5;
337 fX1density = 5.0;
338 }
339
340 //special: Hydrogen
341 if (1 == nelm && 1 == Z0) {
342 fX0density = 1.837; fX1density = 3.0; fMdensity = 4.754;
343 }
344
345 //special: Helium
346 if (1 == nelm && 2 == Z0) {
347 fX0density = 2.191; fX1density = 3.0; fMdensity = 3.297;
348 }
349 }
350 }
351
352 // change parameters if the gas is not in STP.
353 // For the correction the density(STP) is needed.
354 // Density(STP) is calculated here :
355
356 if (State == kStateGas) {
357 G4double Density = fMaterial->GetDensity();
358 G4double Pressure = fMaterial->GetPressure();
360
361 G4double DensitySTP = Density*STP_Pressure*Temp/(Pressure*NTP_Temperature);
362
363 G4double ParCorr = G4Log(Density/DensitySTP);
364
365 fCdensity -= ParCorr;
366 fX0density -= ParCorr/twoln10;
367 fX1density -= ParCorr/twoln10;
368 }
369
370 // fAdensity parameter can be fixed for not conductive materials
371 if(0.0 == fD0density) {
374 /std::pow((fX1density-fX0density),fMdensity);
375 }
376 /*
377 G4cout << "G4IonisParamMat: density effect data for <"
378 << fMaterial->GetName()
379 << "> " << G4endl;
380 G4cout << "Eplasma(eV)= " << fPlasmaEnergy/eV
381 << " rho= " << fAdjustmentFactor
382 << " -C= " << fCdensity
383 << " x0= " << fX0density
384 << " x1= " << fX1density
385 << " a= " << fAdensity
386 << " m= " << fMdensity
387 << G4endl;
388 */
389}
#define State(X)
G4double G4Log(G4double x)
Definition: G4Log.hh:226
G4State
Definition: G4Material.hh:111
@ kStateSolid
Definition: G4Material.hh:111
@ kStateLiquid
Definition: G4Material.hh:111
@ kStateGas
Definition: G4Material.hh:111
static const G4double NTP_Temperature
Definition: G4Material.hh:113
double G4double
Definition: G4Types.hh:83
G4double GetAdjustmentFactor(G4int idx) const
G4double GetCdensity(G4int idx) const
G4double GetMdensity(G4int idx) const
G4double GetDelta0density(G4int idx) const
G4double GetPlasmaEnergy(G4int idx) const
G4int GetElementIndex(G4int Z, G4State st=kStateUndefined) const
G4double GetX1density(G4int idx) const
G4double GetAdensity(G4int idx) const
G4int GetIndex(const G4String &matName) const
G4double GetX0density(G4int idx) const
G4double GetPressure() const
Definition: G4Material.hh:179
G4double GetDensity() const
Definition: G4Material.hh:176
const G4ElementVector * GetElementVector() const
Definition: G4Material.hh:186
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:229
G4double GetTotNbOfAtomsPerVolume() const
Definition: G4Material.hh:205
G4State GetState() const
Definition: G4Material.hh:177
G4double GetTemperature() const
Definition: G4Material.hh:178
G4double GetTotNbOfElectPerVolume() const
Definition: G4Material.hh:208
const G4double * GetVecNbOfAtomsPerVolume() const
Definition: G4Material.hh:202
const G4String & GetName() const
Definition: G4Material.hh:173
static G4NistManager * Instance()
G4double GetNominalDensity(G4int Z) const
static constexpr double classic_electr_radius
static constexpr double eV
static constexpr double hbarc_squared
static constexpr double pi
Definition: SystemOfUnits.h:55
int STP_Pressure
Definition: hepunit.py:302

References CLHEP::classic_electr_radius, CLHEP::eV, fAdensity, fAdjustmentFactor, fCdensity, fD0density, fDensityData, fMaterial, fMdensity, fMeanExcitationEnergy, fPlasmaEnergy, fX0density, fX1density, G4Log(), G4DensityEffectData::GetAdensity(), G4DensityEffectData::GetAdjustmentFactor(), G4Material::GetBaseMaterial(), G4DensityEffectData::GetCdensity(), G4DensityEffectData::GetDelta0density(), G4Material::GetDensity(), G4DensityEffectData::GetElementIndex(), G4Material::GetElementVector(), G4DensityEffectData::GetIndex(), G4DensityEffectData::GetMdensity(), G4Material::GetName(), G4NistManager::GetNominalDensity(), G4Material::GetNumberOfElements(), G4DensityEffectData::GetPlasmaEnergy(), G4Material::GetPressure(), G4Material::GetState(), G4Material::GetTemperature(), G4Material::GetTotNbOfAtomsPerVolume(), G4Material::GetTotNbOfElectPerVolume(), G4Material::GetVecNbOfAtomsPerVolume(), G4DensityEffectData::GetX0density(), G4DensityEffectData::GetX1density(), CLHEP::hbarc_squared, G4NistManager::Instance(), kStateGas, kStateLiquid, kStateSolid, NTP_Temperature, CLHEP::pi, State, source.hepunit::STP_Pressure, and twoln10.

Referenced by G4IonisParamMat().

◆ ComputeFluctModel()

void G4IonisParamMat::ComputeFluctModel ( )
private

Definition at line 393 of file G4IonisParamMat.cc.

394{
395 // compute parameters for the energy loss fluctuation model
396 // needs an 'effective Z'
397 G4double Zeff = 0.;
398 for (size_t i=0; i<fMaterial->GetNumberOfElements(); ++i) {
399 Zeff += (fMaterial->GetFractionVector())[i]
400 *((*(fMaterial->GetElementVector()))[i]->GetZ());
401 }
402 fF2fluct = (Zeff > 2.) ? 2./Zeff : 0.0;
403
404 fF1fluct = 1. - fF2fluct;
405 fEnergy2fluct = 10.*Zeff*Zeff*CLHEP::eV;
408 /fF1fluct;
411 fRateionexcfluct = 0.4;
412}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
const G4double * GetFractionVector() const
Definition: G4Material.hh:190

References CLHEP::eV, fEnergy0fluct, fEnergy1fluct, fEnergy2fluct, fF1fluct, fF2fluct, fLogEnergy1fluct, fLogEnergy2fluct, fLogMeanExcEnergy, fMaterial, fRateionexcfluct, G4Exp(), G4Log(), G4Material::GetElementVector(), G4Material::GetFractionVector(), and G4Material::GetNumberOfElements().

Referenced by G4IonisParamMat(), and SetMeanExcitationEnergy().

◆ ComputeIonParameters()

void G4IonisParamMat::ComputeIonParameters ( )
private

Definition at line 416 of file G4IonisParamMat.cc.

417{
418 // get elements in the actual material,
419 const G4ElementVector* theElementVector = fMaterial->GetElementVector() ;
420 const G4double* theAtomicNumDensityVector =
422 const G4int NumberOfElements = fMaterial->GetNumberOfElements() ;
423
424 // loop for the elements in the material
425 // to find out average values Z, vF, lF
426 G4double z(0.0), vF(0.0), lF(0.0), a23(0.0);
427
428 G4Pow* g4pow = G4Pow::GetInstance();
429 if( 1 == NumberOfElements ) {
430 const G4Element* element = (*theElementVector)[0];
431 z = element->GetZ();
432 vF= element->GetIonisation()->GetFermiVelocity();
433 lF= element->GetIonisation()->GetLFactor();
434 a23 = 1.0/g4pow->A23(element->GetN());
435
436 } else {
437 G4double norm(0.0);
438 for (G4int iel=0; iel<NumberOfElements; ++iel) {
439 const G4Element* element = (*theElementVector)[iel];
440 const G4double weight = theAtomicNumDensityVector[iel];
441 norm += weight;
442 z += element->GetZ() * weight;
443 vF += element->GetIonisation()->GetFermiVelocity() * weight;
444 lF += element->GetIonisation()->GetLFactor() * weight;
445 a23 += weight/g4pow->A23(element->GetN());
446 }
447 z /= norm;
448 vF /= norm;
449 lF /= norm;
450 a23 /= norm;
451 }
452 fZeff = z;
453 fLfactor = lF;
454 fFermiEnergy = 25.*CLHEP::keV*vF*vF;
455 fInvA23 = a23;
456}
std::vector< const G4Element * > G4ElementVector
G4double GetZ() const
Definition: G4Element.hh:131
G4IonisParamElm * GetIonisation() const
Definition: G4Element.hh:199
G4double GetN() const
Definition: G4Element.hh:135
G4double GetFermiVelocity() const
G4double GetLFactor() const
const G4double * GetAtomicNumDensityVector() const
Definition: G4Material.hh:212
Definition: G4Pow.hh:49
G4double A23(G4double A) const
Definition: G4Pow.hh:131
static constexpr double keV

References G4Pow::A23(), fFermiEnergy, fInvA23, fLfactor, fMaterial, fZeff, G4Material::GetAtomicNumDensityVector(), G4Material::GetElementVector(), G4IonisParamElm::GetFermiVelocity(), G4Pow::GetInstance(), G4Element::GetIonisation(), G4IonisParamElm::GetLFactor(), G4Element::GetN(), G4Material::GetNumberOfElements(), G4Element::GetZ(), and CLHEP::keV.

Referenced by G4IonisParamMat().

◆ ComputeMeanParameters()

void G4IonisParamMat::ComputeMeanParameters ( )
private

Definition at line 133 of file G4IonisParamMat.cc.

134{
135 // compute mean excitation energy and shell correction vector
136 fTaul = (*(fMaterial->GetElementVector()))[0]->GetIonisation()->GetTaul();
137
140
141 size_t nElements = fMaterial->GetNumberOfElements();
142 const G4ElementVector* elmVector = fMaterial->GetElementVector();
143 const G4double* nAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume();
144
146
147 // Chemical formula defines mean excitation energy
148 if(fMeanExcitationEnergy > 0.0) {
150
151 // Compute average
152 } else {
153 for (size_t i=0; i < nElements; i++) {
154 const G4Element* elm = (*elmVector)[i];
155 fLogMeanExcEnergy += nAtomsPerVolume[i]*elm->GetZ()
157 }
160 }
161
163
164 for (G4int j=0; j<=2; j++)
165 {
167
168 for (size_t k=0; k<nElements; k++) {
169 fShellCorrectionVector[j] += nAtomsPerVolume[k]
170 *(((*elmVector)[k])->GetIonisation()->GetShellCorrectionVector())[j];
171 }
173 }
174}
G4double GetMeanExcitationEnergy() const
G4double FindMeanExcitationEnergy(const G4Material *) const

References FindMeanExcitationEnergy(), fLogMeanExcEnergy, fMaterial, fMeanExcitationEnergy, fShellCorrectionVector, fTaul, G4Exp(), G4Log(), G4Material::GetElementVector(), G4Element::GetIonisation(), G4IonisParamElm::GetMeanExcitationEnergy(), G4Material::GetNumberOfElements(), G4Material::GetTotNbOfElectPerVolume(), G4Material::GetVecNbOfAtomsPerVolume(), and G4Element::GetZ().

Referenced by G4IonisParamMat().

◆ DensityCorrection()

G4double G4IonisParamMat::DensityCorrection ( G4double  x)

Definition at line 185 of file G4IonisParamMat.cc.

186{
187 return (nullptr == fDensityEffectCalc) ? GetDensityCorrection(x)
188 : fDensityEffectCalc->ComputeDensityCorrection(x);
189}
G4double GetDensityCorrection(G4double x)

References G4DensityEffectCalculator::ComputeDensityCorrection(), fDensityEffectCalc, and GetDensityCorrection().

◆ FindMeanExcitationEnergy()

G4double G4IonisParamMat::FindMeanExcitationEnergy ( const G4Material mat) const

Definition at line 553 of file G4IonisParamMat.cc.

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

References eV, fDensityData, G4Material::GetChemicalFormula(), G4DensityEffectData::GetIndex(), G4DensityEffectData::GetMeanIonisationPotential(), G4Material::GetName(), G4InuclParticleNames::name(), and numberOfMolecula.

Referenced by G4NistMaterialBuilder::BuildMaterial(), and ComputeMeanParameters().

◆ GetAdensity()

G4double G4IonisParamMat::GetAdensity ( ) const
inline

Definition at line 91 of file G4IonisParamMat.hh.

91{return fAdensity;};

References fAdensity.

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

◆ GetAdjustmentFactor()

G4double G4IonisParamMat::GetAdjustmentFactor ( ) const
inline

Definition at line 85 of file G4IonisParamMat.hh.

85{return fAdjustmentFactor;};

References fAdjustmentFactor.

◆ GetBirksConstant()

G4double G4IonisParamMat::GetBirksConstant ( ) const
inline

◆ GetCdensity()

G4double G4IonisParamMat::GetCdensity ( ) const
inline

Definition at line 87 of file G4IonisParamMat.hh.

87{return fCdensity;};

References fCdensity.

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

◆ GetD0density()

G4double G4IonisParamMat::GetD0density ( ) const
inline

Definition at line 97 of file G4IonisParamMat.hh.

97{return fD0density;};

References fD0density.

Referenced by SetDensityEffectParameters().

◆ GetDensityCorrection()

G4double G4IonisParamMat::GetDensityCorrection ( G4double  x)
inline

Definition at line 240 of file G4IonisParamMat.hh.

241{
242 // x = log10(beta*gamma)
243 G4double y = 0.0;
244 if(x < fX0density) {
245 if(fD0density > 0.0) { y = fD0density*G4Exp(twoln10*(x - fX0density)); }
246 } else if(x >= fX1density) { y = twoln10*x - fCdensity; }
248 return y;
249}

References fAdensity, fCdensity, fD0density, fMdensity, fX0density, fX1density, G4Exp(), G4Log(), and twoln10.

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

◆ GetDensityEffectCalculator()

G4DensityEffectCalculator * G4IonisParamMat::GetDensityEffectCalculator ( )
inline

Definition at line 112 of file G4IonisParamMat.hh.

113 { return fDensityEffectCalc; }

References fDensityEffectCalc.

Referenced by G4Material::CopyPointersOfBaseMaterial().

◆ GetDensityEffectData()

G4DensityEffectData * G4IonisParamMat::GetDensityEffectData ( )
static

Definition at line 178 of file G4IonisParamMat.cc.

179{
180 return fDensityData;
181}

References fDensityData.

Referenced by G4NistMessenger::SetNewValue().

◆ GetEnergy0fluct()

G4double G4IonisParamMat::GetEnergy0fluct ( ) const
inline

Definition at line 134 of file G4IonisParamMat.hh.

134{return fEnergy0fluct;};

References fEnergy0fluct.

◆ GetEnergy1fluct()

G4double G4IonisParamMat::GetEnergy1fluct ( ) const
inline

Definition at line 126 of file G4IonisParamMat.hh.

126{return fEnergy1fluct;};

References fEnergy1fluct.

◆ GetEnergy2fluct()

G4double G4IonisParamMat::GetEnergy2fluct ( ) const
inline

Definition at line 130 of file G4IonisParamMat.hh.

130{return fEnergy2fluct;};

References fEnergy2fluct.

◆ GetF1fluct()

G4double G4IonisParamMat::GetF1fluct ( ) const
inline

Definition at line 122 of file G4IonisParamMat.hh.

122{return fF1fluct;};

References fF1fluct.

◆ GetF2fluct()

G4double G4IonisParamMat::GetF2fluct ( ) const
inline

Definition at line 124 of file G4IonisParamMat.hh.

124{return fF2fluct;};

References fF2fluct.

◆ GetFermiEnergy()

G4double G4IonisParamMat::GetFermiEnergy ( ) const
inline

Definition at line 142 of file G4IonisParamMat.hh.

142{return fFermiEnergy;};

References fFermiEnergy.

Referenced by G4IonFluctuations::RelativisticFactor().

◆ GetInvA23()

G4double G4IonisParamMat::GetInvA23 ( ) const
inline

◆ GetLFactor()

G4double G4IonisParamMat::GetLFactor ( ) const
inline

Definition at line 144 of file G4IonisParamMat.hh.

144{return fLfactor;};

References fLfactor.

◆ GetLogEnergy1fluct()

G4double G4IonisParamMat::GetLogEnergy1fluct ( ) const
inline

Definition at line 128 of file G4IonisParamMat.hh.

128{return fLogEnergy1fluct;};

References fLogEnergy1fluct.

◆ GetLogEnergy2fluct()

G4double G4IonisParamMat::GetLogEnergy2fluct ( ) const
inline

Definition at line 132 of file G4IonisParamMat.hh.

132{return fLogEnergy2fluct;};

References fLogEnergy2fluct.

◆ GetLogMeanExcEnergy()

G4double G4IonisParamMat::GetLogMeanExcEnergy ( ) const
inline

Definition at line 75 of file G4IonisParamMat.hh.

75{return fLogMeanExcEnergy;};

References fLogMeanExcEnergy.

◆ GetMdensity()

G4double G4IonisParamMat::GetMdensity ( ) const
inline

Definition at line 89 of file G4IonisParamMat.hh.

89{return fMdensity;};

References fMdensity.

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

◆ GetMeanEnergyPerIonPair()

G4double G4IonisParamMat::GetMeanEnergyPerIonPair ( ) const
inline

Definition at line 158 of file G4IonisParamMat.hh.

158{return fMeanEnergyPerIon;};

References fMeanEnergyPerIon.

Referenced by G4ElectronIonPair::DumpMeanEnergyPerIonPair().

◆ GetMeanExcitationEnergy()

G4double G4IonisParamMat::GetMeanExcitationEnergy ( ) const
inline

◆ GetPlasmaEnergy()

G4double G4IonisParamMat::GetPlasmaEnergy ( ) const
inline

Definition at line 83 of file G4IonisParamMat.hh.

83{return fPlasmaEnergy;};

References fPlasmaEnergy.

Referenced by G4DensityEffectCalculator::G4DensityEffectCalculator().

◆ GetRateionexcfluct()

G4double G4IonisParamMat::GetRateionexcfluct ( ) const
inline

Definition at line 136 of file G4IonisParamMat.hh.

136{return fRateionexcfluct;};

References fRateionexcfluct.

◆ GetShellCorrectionVector()

G4double * G4IonisParamMat::GetShellCorrectionVector ( ) const
inline

Definition at line 77 of file G4IonisParamMat.hh.

References fShellCorrectionVector.

Referenced by G4EmCorrections::ShellCorrectionSTD().

◆ GetTaul()

G4double G4IonisParamMat::GetTaul ( ) const
inline

Definition at line 79 of file G4IonisParamMat.hh.

79{return fTaul;};

References fTaul.

Referenced by G4EmCorrections::ShellCorrectionSTD().

◆ GetX0density()

G4double G4IonisParamMat::GetX0density ( ) const
inline

Definition at line 93 of file G4IonisParamMat.hh.

93{return fX0density;};

References fX0density.

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

◆ GetX1density()

G4double G4IonisParamMat::GetX1density ( ) const
inline

Definition at line 95 of file G4IonisParamMat.hh.

95{return fX1density;};

References fX1density.

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

◆ GetZeffective()

G4double G4IonisParamMat::GetZeffective ( ) const
inline

◆ 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 150 of file G4IonisParamMat.hh.

150{fBirks = value;};

References fBirks.

Referenced by G4EmSaturation::InitialiseBirksCoefficient().

◆ SetDensityEffectParameters() [1/2]

void G4IonisParamMat::SetDensityEffectParameters ( const G4Material bmat)

Definition at line 508 of file G4IonisParamMat.cc.

509{
510#ifdef G4MULTITHREADED
511 G4MUTEXLOCK(&ionisMutex);
512#endif
513 const G4IonisParamMat* ipm = bmat->GetIonisation();
514 fCdensity = ipm->GetCdensity();
515 fMdensity = ipm->GetMdensity();
516 fAdensity = ipm->GetAdensity();
517 fX0density = ipm->GetX0density();
518 fX1density = ipm->GetX1density();
519 fD0density = ipm->GetD0density();
520
521 G4double corr = G4Log(bmat->GetDensity()/fMaterial->GetDensity());
522 fCdensity += corr;
523 fX0density += corr/twoln10;
524 fX1density += corr/twoln10;
525#ifdef G4MULTITHREADED
526 G4MUTEXUNLOCK(&ionisMutex);
527#endif
528}
#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
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:222

References fAdensity, fCdensity, fD0density, fMaterial, fMdensity, fX0density, fX1density, G4Log(), G4MUTEXLOCK, G4MUTEXUNLOCK, GetAdensity(), GetCdensity(), GetD0density(), G4Material::GetDensity(), G4Material::GetIonisation(), GetMdensity(), GetX0density(), GetX1density(), and twoln10.

◆ SetDensityEffectParameters() [2/2]

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

Definition at line 487 of file G4IonisParamMat.cc.

490{
491 // no check on consistence of user parameters
492#ifdef G4MULTITHREADED
493 G4MUTEXLOCK(&ionisMutex);
494#endif
495 fCdensity = cd;
496 fMdensity = md;
497 fAdensity = ad;
498 fX0density = x0;
499 fX1density = x1;
500 fD0density = d0;
501#ifdef G4MULTITHREADED
502 G4MUTEXUNLOCK(&ionisMutex);
503#endif
504}
static const G4double cd

References cd, fAdensity, fCdensity, fD0density, fMdensity, fX0density, fX1density, G4MUTEXLOCK, and G4MUTEXUNLOCK.

◆ SetMeanEnergyPerIonPair()

void G4IonisParamMat::SetMeanEnergyPerIonPair ( G4double  value)
inline

Definition at line 156 of file G4IonisParamMat.hh.

156{fMeanEnergyPerIon = value;};

References fMeanEnergyPerIon.

Referenced by G4ElectronIonPair::FindG4MeanEnergyPerIonPair().

◆ SetMeanExcitationEnergy()

void G4IonisParamMat::SetMeanExcitationEnergy ( G4double  value)

Definition at line 460 of file G4IonisParamMat.cc.

461{
462 if(value == fMeanExcitationEnergy || value <= 0.0) { return; }
463 if (G4NistManager::Instance()->GetVerbose() > 1) {
464 G4cout << "G4Material: Mean excitation energy is changed for "
465 << fMaterial->GetName()
466 << " Iold= " << fMeanExcitationEnergy/CLHEP::eV
467 << "eV; Inew= " << value/eV << " eV;"
468 << G4endl;
469 }
470
471 fMeanExcitationEnergy = value;
472
473 // add corrections to density effect
474 G4double newlog = G4Log(value);
475 G4double corr = 2*(newlog - fLogMeanExcEnergy);
476 fCdensity += corr;
477 fX0density += corr/twoln10;
478 fX1density += corr/twoln10;
479
480 // recompute parameters of fluctuation model
481 fLogMeanExcEnergy = newlog;
483}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References ComputeFluctModel(), CLHEP::eV, eV, fCdensity, fLogMeanExcEnergy, fMaterial, fMeanExcitationEnergy, fX0density, fX1density, G4cout, G4endl, G4Log(), G4Material::GetName(), G4NistManager::Instance(), and twoln10.

Referenced by G4NistMaterialBuilder::BuildMaterial(), G4Material::CopyPointersOfBaseMaterial(), DetectorConstruction::DefineMaterials(), ExN03DetectorConstruction::DefineMaterials(), and G4tgbMaterialMgr::FindOrBuildG4Material().

Field Documentation

◆ fAdensity

G4double G4IonisParamMat::fAdensity
private

◆ fAdjustmentFactor

G4double G4IonisParamMat::fAdjustmentFactor
private

◆ fBirks

G4double G4IonisParamMat::fBirks
private

Definition at line 226 of file G4IonisParamMat.hh.

Referenced by G4IonisParamMat(), GetBirksConstant(), and SetBirksConstant().

◆ fCdensity

G4double G4IonisParamMat::fCdensity
private

◆ fD0density

G4double G4IonisParamMat::fD0density
private

◆ fDensityData

G4DensityEffectData * G4IonisParamMat::fDensityData = nullptr
staticprivate

◆ fDensityEffectCalc

G4DensityEffectCalculator* G4IonisParamMat::fDensityEffectCalc
private

◆ fEnergy0fluct

G4double G4IonisParamMat::fEnergy0fluct
private

Definition at line 216 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetEnergy0fluct().

◆ fEnergy1fluct

G4double G4IonisParamMat::fEnergy1fluct
private

Definition at line 212 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetEnergy1fluct().

◆ fEnergy2fluct

G4double G4IonisParamMat::fEnergy2fluct
private

Definition at line 214 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetEnergy2fluct().

◆ fF1fluct

G4double G4IonisParamMat::fF1fluct
private

Definition at line 210 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetF1fluct().

◆ fF2fluct

G4double G4IonisParamMat::fF2fluct
private

Definition at line 211 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetF2fluct().

◆ fFermiEnergy

G4double G4IonisParamMat::fFermiEnergy
private

Definition at line 221 of file G4IonisParamMat.hh.

Referenced by ComputeIonParameters(), G4IonisParamMat(), and GetFermiEnergy().

◆ fInvA23

G4double G4IonisParamMat::fInvA23
private

Definition at line 223 of file G4IonisParamMat.hh.

Referenced by ComputeIonParameters(), G4IonisParamMat(), and GetInvA23().

◆ fLfactor

G4double G4IonisParamMat::fLfactor
private

Definition at line 222 of file G4IonisParamMat.hh.

Referenced by ComputeIonParameters(), G4IonisParamMat(), and GetLFactor().

◆ fLogEnergy1fluct

G4double G4IonisParamMat::fLogEnergy1fluct
private

Definition at line 213 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetLogEnergy1fluct().

◆ fLogEnergy2fluct

G4double G4IonisParamMat::fLogEnergy2fluct
private

Definition at line 215 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetLogEnergy2fluct().

◆ fLogMeanExcEnergy

G4double G4IonisParamMat::fLogMeanExcEnergy
private

◆ fMaterial

const G4Material* G4IonisParamMat::fMaterial
private

◆ fMdensity

G4double G4IonisParamMat::fMdensity
private

◆ fMeanEnergyPerIon

G4double G4IonisParamMat::fMeanEnergyPerIon
private

◆ fMeanExcitationEnergy

G4double G4IonisParamMat::fMeanExcitationEnergy
private

◆ fPlasmaEnergy

G4double G4IonisParamMat::fPlasmaEnergy
private

◆ fRateionexcfluct

G4double G4IonisParamMat::fRateionexcfluct
private

Definition at line 217 of file G4IonisParamMat.hh.

Referenced by ComputeFluctModel(), G4IonisParamMat(), and GetRateionexcfluct().

◆ fShellCorrectionVector

G4double* G4IonisParamMat::fShellCorrectionVector
private

◆ fTaul

G4double G4IonisParamMat::fTaul
private

Definition at line 196 of file G4IonisParamMat.hh.

Referenced by ComputeMeanParameters(), G4IonisParamMat(), and GetTaul().

◆ fX0density

G4double G4IonisParamMat::fX0density
private

◆ fX1density

G4double G4IonisParamMat::fX1density
private

◆ fZeff

G4double G4IonisParamMat::fZeff
private

Definition at line 220 of file G4IonisParamMat.hh.

Referenced by ComputeIonParameters(), G4IonisParamMat(), and GetZeffective().

◆ twoln10

G4double G4IonisParamMat::twoln10
private

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