Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4IonisParamMat.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25
26// 09-07-98, data moved from G4Material, M.Maire
27// 18-07-98, bug corrected in ComputeDensityEffect() for gas
28// 16-01-01, bug corrected in ComputeDensityEffect() E100eV (L.Urban)
29// 08-02-01, fShellCorrectionVector correctly handled (mma)
30// 28-10-02, add setMeanExcitationEnergy (V.Ivanchenko)
31// 06-09-04, factor 2 to shell correction term (V.Ivanchenko)
32// 10-05-05, add a missing coma in FindMeanExcitationEnergy() - Bug#746 (mma)
33// 27-09-07, add computation of parameters for ions (V.Ivanchenko)
34// 04-03-08, remove reference to G4NistManager. Add fBirks constant (mma)
35// 30-10-09, add G4DensityEffectData class and density effect computation (VI)
36
37#include "G4IonisParamMat.hh"
38
39#include "G4AtomicShells.hh"
40#include "G4AutoLock.hh"
42#include "G4Exp.hh"
43#include "G4Log.hh"
44#include "G4Material.hh"
45#include "G4NistManager.hh"
47#include "G4Pow.hh"
48#include "G4SystemOfUnits.hh"
49
50G4DensityEffectData* G4IonisParamMat::fDensityData = nullptr;
51
52namespace
53{
54 G4Mutex ionisMutex = G4MUTEX_INITIALIZER;
55}
56
57//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
58
59G4IonisParamMat::G4IonisParamMat(const G4Material* material) : fMaterial(material)
60{
61 fBirks = 0.;
62 fMeanEnergyPerIon = 0.0;
63 twoln10 = 2. * G4Pow::GetInstance()->logZ(10);
64
65 // minimal set of default parameters for density effect
66 fCdensity = 0.0;
67 fD0density = 0.0;
68 fAdjustmentFactor = 1.0;
69 if (fDensityData == nullptr) {
70 fDensityData = new G4DensityEffectData();
71 }
72 fDensityEffectCalc = nullptr;
73
74 // compute parameters
75 ComputeMeanParameters();
76 ComputeDensityEffectParameters();
77 ComputeFluctModel();
78 ComputeIonParameters();
79}
80
81//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
82
84{
85 delete fDensityEffectCalc;
86 delete[] fShellCorrectionVector;
87 delete fDensityData;
88 fDensityData = nullptr;
89 fShellCorrectionVector = nullptr;
90 fDensityEffectCalc = nullptr;
91}
92
93//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
94
96{
97 // x = log10(beta*gamma)
98 G4double y = 0.0;
99 if (x < fX0density) {
100 if (fD0density > 0.0) {
101 y = fD0density * G4Exp(twoln10 * (x - fX0density));
102 }
103 }
104 else if (x >= fX1density) {
105 y = twoln10 * x - fCdensity;
106 }
107 else {
108 y = twoln10 * x - fCdensity + fAdensity * G4Exp(G4Log(fX1density - x) * fMdensity);
109 }
110 return y;
111}
112
113//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
114
115void G4IonisParamMat::ComputeMeanParameters()
116{
117 // compute mean excitation energy and shell correction vector
118 fTaul = (*(fMaterial->GetElementVector()))[0]->GetIonisation()->GetTaul();
119
120 std::size_t nElements = fMaterial->GetNumberOfElements();
121 const G4ElementVector* elmVector = fMaterial->GetElementVector();
122 const G4double* nAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume();
123
124 fMeanExcitationEnergy = FindMeanExcitationEnergy(fMaterial);
125 fLogMeanExcEnergy = 0.;
126
127 // Chemical formula defines mean excitation energy
128 if (fMeanExcitationEnergy > 0.0) {
129 fLogMeanExcEnergy = G4Log(fMeanExcitationEnergy);
130
131 // Compute average
132 }
133 else {
134 for (std::size_t i = 0; i < nElements; ++i) {
135 const G4Element* elm = (*elmVector)[i];
136 fLogMeanExcEnergy +=
137 nAtomsPerVolume[i] * elm->GetZ() * G4Log(elm->GetIonisation()->GetMeanExcitationEnergy());
138 }
139 fLogMeanExcEnergy /= fMaterial->GetTotNbOfElectPerVolume();
140 fMeanExcitationEnergy = G4Exp(fLogMeanExcEnergy);
141 }
142
143 fShellCorrectionVector = new G4double[3];
144
145 for (G4int j = 0; j <= 2; ++j) {
146 fShellCorrectionVector[j] = 0.;
147
148 for (std::size_t k = 0; k < nElements; ++k) {
149 fShellCorrectionVector[j] +=
150 nAtomsPerVolume[k] * (((*elmVector)[k])->GetIonisation()->GetShellCorrectionVector())[j];
151 }
152 fShellCorrectionVector[j] *= 2.0 / fMaterial->GetTotNbOfElectPerVolume();
153 }
154}
155
156//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
157
161
162//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
163
164void G4IonisParamMat::ComputeDensityEffectParameters()
165{
166 G4State State = fMaterial->GetState();
167 G4double density = fMaterial->GetDensity();
168
169 // Check if density effect data exist in the table
170 // R.M. Sternheimer, Atomic Data and Nuclear Data Tables, 30: 261 (1984)
171 // or is assign to one of data set in this table
172 G4int idx = fDensityData->GetIndex(fMaterial->GetName());
173 auto nelm = (G4int)fMaterial->GetNumberOfElements();
174 G4int Z0 = ((*(fMaterial->GetElementVector()))[0])->GetZasInt();
175 const G4Material* bmat = fMaterial->GetBaseMaterial();
177
178 // arbitrary empirical limits
179 // parameterisation with very different density is not applicable
180 static const G4double corrmax = 1.;
181 static const G4double massfracmax = 0.9;
182
183 // for simple non-NIST materials
184 G4double corr = 0.0;
185
186 if (idx < 0 && 1 == nelm) {
187 G4int z = (1 == Z0 && State == kStateLiquid) ? 0 : Z0;
188 idx = fDensityData->GetElementIndex(z);
189
190 // Correction for base material or for non-nominal density
191 // Except cases of very different density defined in user code
192 if (idx >= 0 && 0 < z) {
193 G4double dens = nist->GetNominalDensity(Z0);
194 if (dens <= 0.0) {
195 idx = -1;
196 }
197 else {
198 corr = G4Log(dens / density);
199 if (std::abs(corr) > corrmax) {
200 idx = -1;
201 }
202 }
203 }
204 }
205 // for base material case
206 if (idx < 0 && nullptr != bmat) {
207 idx = fDensityData->GetIndex(bmat->GetName());
208 if (idx >= 0) {
209 corr = G4Log(bmat->GetDensity() / density);
210 if (std::abs(corr) > corrmax) {
211 idx = -1;
212 }
213 }
214 }
215
216 // for compound non-NIST materials with one element dominating
217 if (idx < 0 && 1 < nelm) {
218 const G4double tot = fMaterial->GetTotNbOfAtomsPerVolume();
219 for (G4int i = 0; i < nelm; ++i) {
220 const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[i] / tot;
221 if (frac > massfracmax) {
222 Z0 = ((*(fMaterial->GetElementVector()))[i])->GetZasInt();
223 idx = fDensityData->GetElementIndex(Z0);
224 G4double dens = nist->GetNominalDensity(Z0);
225 if (idx >= 0 && dens > 0.0) {
226 corr = G4Log(dens / density);
227 if (std::abs(corr) > corrmax) {
228 idx = -1;
229 }
230 else {
231 break;
232 }
233 }
234 }
235 }
236 }
237
238 if (idx >= 0) {
239 // Take parameters for the density effect correction from
240 // R.M. Sternheimer et al. Density Effect For The Ionization Loss
241 // of Charged Particles in Various Substances.
242 // Atom. Data Nucl. Data Tabl. 30 (1984) 261-271.
243
244 fCdensity = fDensityData->GetCdensity(idx);
245 fMdensity = fDensityData->GetMdensity(idx);
246 fAdensity = fDensityData->GetAdensity(idx);
247 fX0density = fDensityData->GetX0density(idx);
248 fX1density = fDensityData->GetX1density(idx);
249 fD0density = fDensityData->GetDelta0density(idx);
250 fPlasmaEnergy = fDensityData->GetPlasmaEnergy(idx);
251 fAdjustmentFactor = fDensityData->GetAdjustmentFactor(idx);
252
253 // parameter C is computed and not taken from Sternheimer tables
254 // fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy);
255 // G4cout << "IonisParamMat: " << fMaterial->GetName()
256 // << " Cst= " << Cdensity << " C= " << fCdensity << G4endl;
257
258 // correction on nominal density
259 fCdensity += corr;
260 fX0density += corr / twoln10;
261 fX1density += corr / twoln10;
262 }
263 else {
264 static const G4double Cd2 = 4 * CLHEP::pi * CLHEP::hbarc_squared * CLHEP::classic_electr_radius;
265 fPlasmaEnergy = std::sqrt(Cd2 * fMaterial->GetTotNbOfElectPerVolume());
266
267 // Compute parameters for the density effect correction in DE/Dx formula.
268 // The parametrization is from R.M. Sternheimer, Phys. Rev.B,3:3681 (1971)
269 G4int icase;
270
271 fCdensity = 1. + 2 * G4Log(fMeanExcitationEnergy / fPlasmaEnergy);
272 //
273 // condensed materials
274 //
275 if ((State == kStateSolid) || (State == kStateLiquid)) {
276 static const G4double E100eV = 100. * CLHEP::eV;
277 static const G4double ClimiS[] = {3.681, 5.215};
278 static const G4double X0valS[] = {1.0, 1.5};
279 static const G4double X1valS[] = {2.0, 3.0};
280
281 if (fMeanExcitationEnergy < E100eV) {
282 icase = 0;
283 }
284 else {
285 icase = 1;
286 }
287
288 if (fCdensity < ClimiS[icase]) {
289 fX0density = 0.2;
290 }
291 else {
292 fX0density = 0.326 * fCdensity - X0valS[icase];
293 }
294
295 fX1density = X1valS[icase];
296 fMdensity = 3.0;
297
298 // special: Hydrogen
299 if (1 == nelm && 1 == Z0) {
300 fX0density = 0.425;
301 fX1density = 2.0;
302 fMdensity = 5.949;
303 }
304 }
305 else {
306 //
307 // gases
308 //
309 fMdensity = 3.;
310 fX1density = 4.0;
311
312 if (fCdensity <= 10.) {
313 fX0density = 1.6;
314 }
315 else if (fCdensity <= 10.5) {
316 fX0density = 1.7;
317 }
318 else if (fCdensity <= 11.0) {
319 fX0density = 1.8;
320 }
321 else if (fCdensity <= 11.5) {
322 fX0density = 1.9;
323 }
324 else if (fCdensity <= 12.25) {
325 fX0density = 2.0;
326 }
327 else if (fCdensity <= 13.804) {
328 fX0density = 2.0;
329 fX1density = 5.0;
330 }
331 else {
332 fX0density = 0.326 * fCdensity - 2.5;
333 fX1density = 5.0;
334 }
335
336 // special: Hydrogen
337 if (1 == nelm && 1 == Z0) {
338 fX0density = 1.837;
339 fX1density = 3.0;
340 fMdensity = 4.754;
341 }
342
343 // special: Helium
344 if (1 == nelm && 2 == Z0) {
345 fX0density = 2.191;
346 fX1density = 3.0;
347 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 Pressure = fMaterial->GetPressure();
358 G4double Temp = fMaterial->GetTemperature();
359
360 G4double DensitySTP = density * STP_Pressure * Temp / (Pressure * NTP_Temperature);
361
362 G4double ParCorr = G4Log(density / DensitySTP);
363
364 fCdensity -= ParCorr;
365 fX0density -= ParCorr / twoln10;
366 fX1density -= ParCorr / twoln10;
367 }
368
369 // fAdensity parameter can be fixed for not conductive materials
370 if (0.0 == fD0density) {
371 G4double Xa = fCdensity / twoln10;
372 fAdensity = twoln10 * (Xa - fX0density) / std::pow((fX1density - fX0density), fMdensity);
373 }
374}
375
376//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
377
378void G4IonisParamMat::ComputeFluctModel()
379{
380 // compute parameters for the energy loss fluctuation model
381 // needs an 'effective Z'
382 G4double Zeff = 0.;
383 for (std::size_t i = 0; i < fMaterial->GetNumberOfElements(); ++i) {
384 Zeff += (fMaterial->GetFractionVector())[i] * (*(fMaterial->GetElementVector()))[i]->GetZ();
385 }
386 fF2fluct = (Zeff > 2.) ? 2. / Zeff : 0.0;
387
388 fF1fluct = 1. - fF2fluct;
389 fEnergy2fluct = 10. * Zeff * Zeff * CLHEP::eV;
390 fLogEnergy2fluct = G4Log(fEnergy2fluct);
391 fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct * fLogEnergy2fluct) / fF1fluct;
392 fEnergy1fluct = G4Exp(fLogEnergy1fluct);
393 fEnergy0fluct = 10. * CLHEP::eV;
394 fRateionexcfluct = 0.4;
395}
396
397//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
398
399void G4IonisParamMat::ComputeIonParameters()
400{
401 // get elements in the actual material,
402 const G4ElementVector* theElementVector = fMaterial->GetElementVector();
403 const G4double* theAtomicNumDensityVector = fMaterial->GetAtomicNumDensityVector();
404 const auto NumberOfElements = (G4int)fMaterial->GetNumberOfElements();
405
406 // loop for the elements in the material
407 // to find out average values Z, vF, lF
408 G4double z(0.0), vF(0.0), lF(0.0), a23(0.0);
409
410 G4Pow* g4pow = G4Pow::GetInstance();
411 if (1 == NumberOfElements) {
412 const G4Element* element = (*theElementVector)[0];
413 z = element->GetZ();
414 vF = element->GetIonisation()->GetFermiVelocity();
415 lF = element->GetIonisation()->GetLFactor();
416 a23 = 1.0 / g4pow->A23(element->GetN());
417 }
418 else {
419 G4double norm(0.0);
420 for (G4int iel = 0; iel < NumberOfElements; ++iel) {
421 const G4Element* element = (*theElementVector)[iel];
422 const G4double weight = theAtomicNumDensityVector[iel];
423 norm += weight;
424 z += element->GetZ() * weight;
425 vF += element->GetIonisation()->GetFermiVelocity() * weight;
426 lF += element->GetIonisation()->GetLFactor() * weight;
427 a23 += weight / g4pow->A23(element->GetN());
428 }
429 z /= norm;
430 vF /= norm;
431 lF /= norm;
432 a23 /= norm;
433 }
434 fZeff = z;
435 fLfactor = lF;
436 fFermiEnergy = 25. * CLHEP::keV * vF * vF;
437 fInvA23 = a23;
438}
439
440//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
441
443{
444 if (value == fMeanExcitationEnergy || value <= 0.0) {
445 return;
446 }
447 if (G4NistManager::Instance()->GetVerbose() > 1) {
448 G4cout << "G4Material: Mean excitation energy is changed for " << fMaterial->GetName()
449 << " Iold= " << fMeanExcitationEnergy / CLHEP::eV << "eV; Inew= " << value / eV << " eV;"
450 << G4endl;
451 }
452
453 fMeanExcitationEnergy = value;
454
455 // add corrections to density effect
456 G4double newlog = G4Log(value);
457 G4double corr = 2 * (newlog - fLogMeanExcEnergy);
458 fCdensity += corr;
459 fX0density += corr / twoln10;
460 fX1density += corr / twoln10;
461
462 // recompute parameters of fluctuation model
463 fLogMeanExcEnergy = newlog;
464 ComputeFluctModel();
465}
466
467//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
468
470 G4double cd, G4double md, G4double ad, G4double x0, G4double x1, G4double d0)
471{
472 // no check on consistence of user parameters
473 G4AutoLock l(&ionisMutex);
474 fCdensity = cd;
475 fMdensity = md;
476 fAdensity = ad;
477 fX0density = x0;
478 fX1density = x1;
479 fD0density = d0;
480 l.unlock();
481}
482
483//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
484
486{
487 G4AutoLock l(&ionisMutex);
488 const G4IonisParamMat* ipm = bmat->GetIonisation();
489 fCdensity = ipm->GetCdensity();
490 fMdensity = ipm->GetMdensity();
491 fAdensity = ipm->GetAdensity();
492 fX0density = ipm->GetX0density();
493 fX1density = ipm->GetX1density();
494 fD0density = ipm->GetD0density();
495
496 G4double corr = G4Log(bmat->GetDensity() / fMaterial->GetDensity());
497 fCdensity += corr;
498 fX0density += corr / twoln10;
499 fX1density += corr / twoln10;
500 l.unlock();
501}
502
503//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
504
506{
507 if (val) {
508 if (nullptr == fDensityEffectCalc) {
509 G4int n = 0;
510 for (std::size_t i = 0; i < fMaterial->GetNumberOfElements(); ++i) {
511 const G4int Z = fMaterial->GetElement((G4int)i)->GetZasInt();
513 }
514 // The last level is the conduction level. If this is *not* a conductor,
515 // make a dummy conductor level with zero electrons in it.
516 fDensityEffectCalc = new G4DensityEffectCalculator(fMaterial, n);
517 }
518 }
519 else {
520 delete fDensityEffectCalc;
521 fDensityEffectCalc = nullptr;
522 }
523}
524
525//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
526
528{
529 G4double res = 0.0;
530 // data from density effect data
531 if (fDensityData != nullptr) {
532 G4int idx = fDensityData->GetIndex(mat->GetName());
533 if (idx >= 0) {
534 res = fDensityData->GetMeanIonisationPotential(idx);
535 }
536 }
537
538 // The data on mean excitation energy for compaunds
539 // from "Stopping Powers for Electrons and Positrons"
540 // ICRU Report N#37, 1984 (energy in eV)
541 // this value overwrites Density effect data
542 G4String chFormula = mat->GetChemicalFormula();
543 if (! chFormula.empty()) {
544 static const size_t numberOfMolecula = 54;
545 // clang-format off
546 static const G4String name[numberOfMolecula] = {
547 // gas 0 - 12
548 "NH_3", "C_4H_10", "CO_2", "C_2H_6", "C_7H_16-Gas",
549 // "G4_AMMONIA", "G4_BUTANE","G4_CARBON_DIOXIDE","G4_ETHANE", "G4_N-HEPTANE"
550 "C_6H_14-Gas", "CH_4", "NO", "N_2O", "C_8H_18-Gas",
551 // "G4_N-HEXANE" , "G4_METHANE", "x", "G4_NITROUS_OXIDE", "G4_OCTANE"
552 "C_5H_12-Gas", "C_3H_8", "H_2O-Gas",
553 // "G4_N-PENTANE", "G4_PROPANE", "G4_WATER_VAPOR"
554
555 // liquid 13 - 39
556 "C_3H_6O", "C_6H_5NH_2", "C_6H_6", "C_4H_9OH", "CCl_4",
557 //"G4_ACETONE","G4_ANILINE","G4_BENZENE","G4_N-BUTYL_ALCOHOL","G4_CARBON_TETRACHLORIDE"
558 "C_6H_5Cl", "CHCl_3", "C_6H_12", "C_6H_4Cl_2", "C_4Cl_2H_8O",
559 //"G4_CHLOROBENZENE","G4_CHLOROFORM","G4_CYCLOHEXANE","G4_1,2-DICHLOROBENZENE",
560 //"G4_DICHLORODIETHYL_ETHER"
561 "C_2Cl_2H_4", "(C_2H_5)_2O", "C_2H_5OH", "C_3H_5(OH)_3","C_7H_16",
562 //"G4_1,2-DICHLOROETHANE","G4_DIETHYL_ETHER","G4_ETHYL_ALCOHOL","G4_GLYCEROL","G4_N-HEPTANE"
563 "C_6H_14", "CH_3OH", "C_6H_5NO_2","C_5H_12", "C_3H_7OH",
564 //"G4_N-HEXANE","G4_METHANOL","G4_NITROBENZENE","G4_N-PENTANE","G4_N-PROPYL_ALCOHOL",
565 "C_5H_5N", "C_8H_8", "C_2Cl_4", "C_7H_8", "C_2Cl_3H",
566 //"G4_PYRIDINE","G4_POLYSTYRENE","G4_TETRACHLOROETHYLENE","G4_TOLUENE","G4_TRICHLOROETHYLENE"
567 "H_2O", "C_8H_10",
568 // "G4_WATER", "G4_XYLENE"
569
570 // solid 40 - 53
571 "C_5H_5N_5", "C_5H_5N_5O", "(C_6H_11NO)-nylon", "C_25H_52",
572 // "G4_ADENINE", "G4_GUANINE", "G4_NYLON-6-6", "G4_PARAFFIN"
573 "(C_2H_4)-Polyethylene", "(C_5H_8O_2)-Polymethil_Methacrylate",
574 // "G4_ETHYLENE", "G4_PLEXIGLASS"
575 "(C_8H_8)-Polystyrene", "A-150-tissue", "Al_2O_3", "CaF_2",
576 // "G4_POLYSTYRENE", "G4_A-150_TISSUE", "G4_ALUMINUM_OXIDE", "G4_CALCIUM_FLUORIDE"
577 "LiF", "Photo_Emulsion", "(C_2F_4)-Teflon", "SiO_2"
578 // "G4_LITHIUM_FLUORIDE", "G4_PHOTO_EMULSION", "G4_TEFLON", "G4_SILICON_DIOXIDE"
579 } ;
580
581 static const G4double meanExcitation[numberOfMolecula] = {
582
583 53.7, 48.3, 85.0, 45.4, 49.2,
584 49.1, 41.7, 87.8, 84.9, 49.5,
585 48.2, 47.1, 71.6,
586
587 64.2, 66.2, 63.4, 59.9, 166.3,
588 89.1, 156.0, 56.4, 106.5, 103.3,
589 111.9, 60.0, 62.9, 72.6, 54.4,
590 54.0, 67.6, 75.8, 53.6, 61.1,
591 66.2, 64.0, 159.2, 62.5, 148.1,
592 75.0, 61.8,
593
594 71.4, 75.0, 63.9, 48.3, 57.4,
595 74.0, 68.7, 65.1, 145.2, 166.,
596 94.0, 331.0, 99.1, 139.2
597 };
598 // clang-format on
599
600 for (std::size_t i = 0; i < numberOfMolecula; ++i) {
601 if (chFormula == name[i]) {
602 res = meanExcitation[i] * CLHEP::eV;
603 break;
604 }
605 }
606 }
607 return res;
608}
std::vector< const G4Element * > G4ElementVector
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
#define State(X)
G4double G4Log(G4double x)
Definition G4Log.hh:227
G4State
@ kStateSolid
@ kStateLiquid
@ kStateGas
#define G4MUTEX_INITIALIZER
std::mutex G4Mutex
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4int GetNumberOfShells(G4int Z)
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 GetMeanIonisationPotential(G4int idx) const
G4double GetX1density(G4int idx) const
G4double GetAdensity(G4int idx) const
G4int GetIndex(const G4String &matName) const
G4double GetX0density(G4int idx) const
G4double GetZ() const
Definition G4Element.hh:119
G4IonisParamElm * GetIonisation() const
Definition G4Element.hh:171
G4int GetZasInt() const
Definition G4Element.hh:120
G4double GetN() const
Definition G4Element.hh:123
G4double GetFermiVelocity() const
G4double GetLFactor() const
G4double GetMeanExcitationEnergy() const
G4double GetMdensity() const
G4double GetX1density() const
G4double * GetShellCorrectionVector() const
G4double GetX0density() const
G4double GetCdensity() const
void SetDensityEffectParameters(G4double cd, G4double md, G4double ad, G4double x0, G4double x1, G4double d0)
static G4DensityEffectData * GetDensityEffectData()
G4double FindMeanExcitationEnergy(const G4Material *) const
void ComputeDensityEffectOnFly(G4bool)
G4double GetD0density() const
G4IonisParamMat(const G4Material *)
G4double GetAdensity() const
G4double GetDensityCorrection(G4double x) const
void SetMeanExcitationEnergy(G4double value)
G4double GetPressure() const
G4double GetDensity() const
const G4String & GetChemicalFormula() const
const G4ElementVector * GetElementVector() const
const G4Material * GetBaseMaterial() const
G4double GetTotNbOfAtomsPerVolume() const
G4State GetState() const
G4double GetTemperature() const
const G4Element * GetElement(G4int iel) const
const G4double * GetFractionVector() const
G4double GetTotNbOfElectPerVolume() const
G4IonisParamMat * GetIonisation() const
const G4double * GetAtomicNumDensityVector() const
const G4double * GetVecNbOfAtomsPerVolume() const
std::size_t GetNumberOfElements() const
const G4String & GetName() const
static G4NistManager * Instance()
G4double GetNominalDensity(G4int Z) const
Definition G4Pow.hh:49
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4double logZ(G4int Z) const
Definition G4Pow.hh:137
G4double A23(G4double A) const
Definition G4Pow.hh:131