Geant4 11.1.1
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//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
27
28// 09-07-98, data moved from G4Material, M.Maire
29// 18-07-98, bug corrected in ComputeDensityEffect() for gas
30// 16-01-01, bug corrected in ComputeDensityEffect() E100eV (L.Urban)
31// 08-02-01, fShellCorrectionVector correctly handled (mma)
32// 28-10-02, add setMeanExcitationEnergy (V.Ivanchenko)
33// 06-09-04, factor 2 to shell correction term (V.Ivanchenko)
34// 10-05-05, add a missing coma in FindMeanExcitationEnergy() - Bug#746 (mma)
35// 27-09-07, add computation of parameters for ions (V.Ivanchenko)
36// 04-03-08, remove reference to G4NistManager. Add fBirks constant (mma)
37// 30-10-09, add G4DensityEffectData class and density effect computation (VI)
38
39//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
40
41#include "G4IonisParamMat.hh"
42#include "G4Material.hh"
44#include "G4AtomicShells.hh"
45#include "G4NistManager.hh"
46#include "G4Pow.hh"
47#include "G4Log.hh"
48#include "G4Exp.hh"
50#include "G4SystemOfUnits.hh"
51#include "G4AutoLock.hh"
52
53G4DensityEffectData* G4IonisParamMat::fDensityData = nullptr;
54
55namespace
56{
57 G4Mutex ionisMutex = G4MUTEX_INITIALIZER;
58}
59
60//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
61
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}
82
83//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
84
85// Fake default constructor - sets only member data and allocates memory
86// for usage restricted to object persistency
87
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}
120
121//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
122
124{
125 delete fDensityEffectCalc;
126 delete [] fShellCorrectionVector;
127 delete fDensityData;
128 fDensityData = nullptr;
129 fShellCorrectionVector = nullptr;
130 fDensityEffectCalc = nullptr;
131}
132
133//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
134
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}
149
150//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
151
152void G4IonisParamMat::ComputeMeanParameters()
153{
154 // compute mean excitation energy and shell correction vector
155 fTaul = (*(fMaterial->GetElementVector()))[0]->GetIonisation()->GetTaul();
156
157 size_t nElements = fMaterial->GetNumberOfElements();
158 const G4ElementVector* elmVector = fMaterial->GetElementVector();
159 const G4double* nAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume();
160
161 fMeanExcitationEnergy = FindMeanExcitationEnergy(fMaterial);
162 fLogMeanExcEnergy = 0.;
163
164 // Chemical formula defines mean excitation energy
165 if(fMeanExcitationEnergy > 0.0) {
166 fLogMeanExcEnergy = G4Log(fMeanExcitationEnergy);
167
168 // Compute average
169 } else {
170 for (size_t i=0; i < nElements; ++i) {
171 const G4Element* elm = (*elmVector)[i];
172 fLogMeanExcEnergy += nAtomsPerVolume[i]*elm->GetZ()
174 }
175 fLogMeanExcEnergy /= fMaterial->GetTotNbOfElectPerVolume();
176 fMeanExcitationEnergy = G4Exp(fLogMeanExcEnergy);
177 }
178
179 fShellCorrectionVector = new G4double[3];
180
181 for (G4int j=0; j<=2; ++j)
182 {
183 fShellCorrectionVector[j] = 0.;
184
185 for (size_t k=0; k<nElements; ++k) {
186 fShellCorrectionVector[j] += nAtomsPerVolume[k]
187 *(((*elmVector)[k])->GetIonisation()->GetShellCorrectionVector())[j];
188 }
189 fShellCorrectionVector[j] *= 2.0/fMaterial->GetTotNbOfElectPerVolume();
190 }
191}
192
193//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
194
196{
197 return fDensityData;
198}
199
200//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
201
202void G4IonisParamMat::ComputeDensityEffectParameters()
203{
204 G4State State = fMaterial->GetState();
205 G4double density = fMaterial->GetDensity();
206 if(nullptr == fDensityData) {
207 G4AutoLock l(&ionisMutex);
208 if(nullptr == fDensityData) {
209 fDensityData = new G4DensityEffectData();
210 }
211 l.unlock();
212 }
213
214 // Check if density effect data exist in the table
215 // R.M. Sternheimer, Atomic Data and Nuclear Data Tables, 30: 261 (1984)
216 // or is assign to one of data set in this table
217 G4int idx = fDensityData->GetIndex(fMaterial->GetName());
218 G4int nelm= (G4int)fMaterial->GetNumberOfElements();
219 G4int Z0 = ((*(fMaterial->GetElementVector()))[0])->GetZasInt();
220 const G4Material* bmat = fMaterial->GetBaseMaterial();
222
223 // arbitrary empirical limits
224 // parameterisation with very different density is not applicable
225 static const G4double corrmax = 1.;
226 static const G4double massfracmax = 0.9;
227
228 // for simple non-NIST materials
229 G4double corr = 0.0;
230
231 if(idx < 0 && 1 == nelm) {
232 G4int z = (1 == Z0 && State == kStateLiquid) ? 0 : Z0;
233 idx = fDensityData->GetElementIndex(z);
234
235 // Correction for base material or for non-nominal density
236 // Except cases of very different density defined in user code
237 if(idx >= 0 && 0 < z) {
238 G4double dens = nist->GetNominalDensity(Z0);
239 if(dens <= 0.0) { idx = -1; }
240 else {
241 corr = G4Log(dens/density);
242 if(std::abs(corr) > corrmax) { idx = -1; }
243 }
244 }
245 }
246 // for base material case
247 if(idx < 0 && nullptr != bmat) {
248 idx = fDensityData->GetIndex(bmat->GetName());
249 if(idx >= 0) {
250 corr = G4Log(bmat->GetDensity()/density);
251 if(std::abs(corr) > corrmax) { idx = -1; }
252 }
253 }
254
255 // for compound non-NIST materials with one element dominating
256 if(idx < 0 && 1 < nelm) {
257 const G4double tot = fMaterial->GetTotNbOfAtomsPerVolume();
258 for(G4int i=0; i<nelm; ++i) {
259 const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[i]/tot;
260 if(frac > massfracmax) {
261 Z0 = ((*(fMaterial->GetElementVector()))[i])->GetZasInt();
262 idx = fDensityData->GetElementIndex(Z0);
263 G4double dens = nist->GetNominalDensity(Z0);
264 if(idx >= 0 && dens > 0.0) {
265 corr = G4Log(dens/density);
266 if(std::abs(corr) > corrmax) { idx = -1; }
267 else { break; }
268 }
269 }
270 }
271 }
272 //G4cout<<"DensityEffect for "<<fMaterial->GetName()<<" "<< idx << G4endl;
273
274 if(idx >= 0) {
275
276 // Take parameters for the density effect correction from
277 // R.M. Sternheimer et al. Density Effect For The Ionization Loss
278 // of Charged Particles in Various Substances.
279 // Atom. Data Nucl. Data Tabl. 30 (1984) 261-271.
280
281 fCdensity = fDensityData->GetCdensity(idx);
282 fMdensity = fDensityData->GetMdensity(idx);
283 fAdensity = fDensityData->GetAdensity(idx);
284 fX0density = fDensityData->GetX0density(idx);
285 fX1density = fDensityData->GetX1density(idx);
286 fD0density = fDensityData->GetDelta0density(idx);
287 fPlasmaEnergy = fDensityData->GetPlasmaEnergy(idx);
288 fAdjustmentFactor = fDensityData->GetAdjustmentFactor(idx);
289
290 // parameter C is computed and not taken from Sternheimer tables
291 //fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy);
292 //G4cout << "IonisParamMat: " << fMaterial->GetName()
293 // << " Cst= " << Cdensity << " C= " << fCdensity << G4endl;
294
295 // correction on nominal density
296 fCdensity += corr;
297 fX0density += corr/twoln10;
298 fX1density += corr/twoln10;
299
300 } else {
301
302 static const G4double Cd2 =
303 4*CLHEP::pi*CLHEP::hbarc_squared*CLHEP::classic_electr_radius;
304 fPlasmaEnergy = std::sqrt(Cd2*fMaterial->GetTotNbOfElectPerVolume());
305
306 // Compute parameters for the density effect correction in DE/Dx formula.
307 // The parametrization is from R.M. Sternheimer, Phys. Rev.B,3:3681 (1971)
308 G4int icase;
309
310 fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy);
311 //
312 // condensed materials
313 //
314 if ((State == kStateSolid) || (State == kStateLiquid)) {
315
316 static const G4double E100eV = 100.*CLHEP::eV;
317 static const G4double ClimiS[] = {3.681 , 5.215 };
318 static const G4double X0valS[] = {1.0 , 1.5 };
319 static const G4double X1valS[] = {2.0 , 3.0 };
320
321 if(fMeanExcitationEnergy < E100eV) { icase = 0; }
322 else { icase = 1; }
323
324 if(fCdensity < ClimiS[icase]) { fX0density = 0.2; }
325 else { fX0density = 0.326*fCdensity - X0valS[icase]; }
326
327 fX1density = X1valS[icase]; fMdensity = 3.0;
328
329 //special: Hydrogen
330 if (1 == nelm && 1 == Z0) {
331 fX0density = 0.425; fX1density = 2.0; fMdensity = 5.949;
332 }
333 } else {
334 //
335 // gases
336 //
337 fMdensity = 3.;
338 fX1density = 4.0;
339
340 if(fCdensity <= 10.) {
341 fX0density = 1.6;
342 } else if(fCdensity <= 10.5) {
343 fX0density = 1.7;
344 } else if(fCdensity <= 11.0) {
345 fX0density = 1.8;
346 } else if(fCdensity <= 11.5) {
347 fX0density = 1.9;
348 } else if(fCdensity <= 12.25) {
349 fX0density = 2.0;
350 } else if(fCdensity <= 13.804) {
351 fX0density = 2.0;
352 fX1density = 5.0;
353 } else {
354 fX0density = 0.326*fCdensity-2.5;
355 fX1density = 5.0;
356 }
357
358 //special: Hydrogen
359 if (1 == nelm && 1 == Z0) {
360 fX0density = 1.837; fX1density = 3.0; fMdensity = 4.754;
361 }
362
363 //special: Helium
364 if (1 == nelm && 2 == Z0) {
365 fX0density = 2.191; fX1density = 3.0; fMdensity = 3.297;
366 }
367 }
368 }
369
370 // change parameters if the gas is not in STP.
371 // For the correction the density(STP) is needed.
372 // Density(STP) is calculated here :
373
374 if (State == kStateGas) {
375 G4double Pressure = fMaterial->GetPressure();
376 G4double Temp = fMaterial->GetTemperature();
377
378 G4double DensitySTP = density*STP_Pressure*Temp/(Pressure*NTP_Temperature);
379
380 G4double ParCorr = G4Log(density/DensitySTP);
381
382 fCdensity -= ParCorr;
383 fX0density -= ParCorr/twoln10;
384 fX1density -= ParCorr/twoln10;
385 }
386
387 // fAdensity parameter can be fixed for not conductive materials
388 if(0.0 == fD0density) {
389 G4double Xa = fCdensity/twoln10;
390 fAdensity = twoln10*(Xa-fX0density)
391 /std::pow((fX1density-fX0density),fMdensity);
392 }
393 /*
394 G4cout << "G4IonisParamMat: density effect data for <"
395 << fMaterial->GetName()
396 << "> " << G4endl;
397 G4cout << "Eplasma(eV)= " << fPlasmaEnergy/eV
398 << " rho= " << fAdjustmentFactor
399 << " -C= " << fCdensity
400 << " x0= " << fX0density
401 << " x1= " << fX1density
402 << " a= " << fAdensity
403 << " m= " << fMdensity
404 << G4endl;
405 */
406}
407
408//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
409
410void G4IonisParamMat::ComputeFluctModel()
411{
412 // compute parameters for the energy loss fluctuation model
413 // needs an 'effective Z'
414 G4double Zeff = 0.;
415 for (size_t i=0; i<fMaterial->GetNumberOfElements(); ++i) {
416 Zeff += (fMaterial->GetFractionVector())[i]
417 *((*(fMaterial->GetElementVector()))[i]->GetZ());
418 }
419 fF2fluct = (Zeff > 2.) ? 2./Zeff : 0.0;
420
421 fF1fluct = 1. - fF2fluct;
422 fEnergy2fluct = 10.*Zeff*Zeff*CLHEP::eV;
423 fLogEnergy2fluct = G4Log(fEnergy2fluct);
424 fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct*fLogEnergy2fluct)
425 /fF1fluct;
426 fEnergy1fluct = G4Exp(fLogEnergy1fluct);
427 fEnergy0fluct = 10.*CLHEP::eV;
428 fRateionexcfluct = 0.4;
429}
430
431//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
432
433void G4IonisParamMat::ComputeIonParameters()
434{
435 // get elements in the actual material,
436 const G4ElementVector* theElementVector = fMaterial->GetElementVector() ;
437 const G4double* theAtomicNumDensityVector =
438 fMaterial->GetAtomicNumDensityVector() ;
439 const G4int NumberOfElements = (G4int)fMaterial->GetNumberOfElements() ;
440
441 // loop for the elements in the material
442 // to find out average values Z, vF, lF
443 G4double z(0.0), vF(0.0), lF(0.0), a23(0.0);
444
445 G4Pow* g4pow = G4Pow::GetInstance();
446 if( 1 == NumberOfElements ) {
447 const G4Element* element = (*theElementVector)[0];
448 z = element->GetZ();
449 vF= element->GetIonisation()->GetFermiVelocity();
450 lF= element->GetIonisation()->GetLFactor();
451 a23 = 1.0/g4pow->A23(element->GetN());
452
453 } else {
454 G4double norm(0.0);
455 for (G4int iel=0; iel<NumberOfElements; ++iel) {
456 const G4Element* element = (*theElementVector)[iel];
457 const G4double weight = theAtomicNumDensityVector[iel];
458 norm += weight;
459 z += element->GetZ() * weight;
460 vF += element->GetIonisation()->GetFermiVelocity() * weight;
461 lF += element->GetIonisation()->GetLFactor() * weight;
462 a23 += weight/g4pow->A23(element->GetN());
463 }
464 z /= norm;
465 vF /= norm;
466 lF /= norm;
467 a23 /= norm;
468 }
469 fZeff = z;
470 fLfactor = lF;
471 fFermiEnergy = 25.*CLHEP::keV*vF*vF;
472 fInvA23 = a23;
473}
474
475//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
476
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}
501
502//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
503
505 G4double ad, G4double x0,
506 G4double x1, G4double d0)
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}
518
519//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
520
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}
542
543//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
544
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}
563
564//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
565
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}
648
649//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
650
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
Definition: G4Material.hh:110
@ kStateSolid
Definition: G4Material.hh:110
@ kStateLiquid
Definition: G4Material.hh:110
@ kStateGas
Definition: G4Material.hh:110
#define G4MUTEX_INITIALIZER
Definition: G4Threading.hh:85
#define G4MUTEXLOCK(mutex)
Definition: G4Threading.hh:251
#define G4MUTEXUNLOCK(mutex)
Definition: G4Threading.hh:254
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
#define G4endl
Definition: G4ios.hh:57
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:131
G4IonisParamElm * GetIonisation() const
Definition: G4Element.hh:198
G4int GetZasInt() const
Definition: G4Element.hh:132
G4double GetN() const
Definition: G4Element.hh:135
G4double GetFermiVelocity() const
G4double GetLFactor() const
G4double GetMeanExcitationEnergy() const
G4double GetMdensity() const
G4double GetX1density() 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
Definition: G4Material.hh:178
G4double GetDensity() const
Definition: G4Material.hh:175
const G4String & GetChemicalFormula() const
Definition: G4Material.hh:173
const G4ElementVector * GetElementVector() const
Definition: G4Material.hh:185
const G4Material * GetBaseMaterial() const
Definition: G4Material.hh:228
G4double GetTotNbOfAtomsPerVolume() const
Definition: G4Material.hh:204
G4State GetState() const
Definition: G4Material.hh:176
G4double GetTemperature() const
Definition: G4Material.hh:177
const G4Element * GetElement(G4int iel) const
Definition: G4Material.hh:197
const G4double * GetFractionVector() const
Definition: G4Material.hh:189
G4double GetTotNbOfElectPerVolume() const
Definition: G4Material.hh:207
G4IonisParamMat * GetIonisation() const
Definition: G4Material.hh:221
size_t GetNumberOfElements() const
Definition: G4Material.hh:181
const G4double * GetAtomicNumDensityVector() const
Definition: G4Material.hh:211
const G4double * GetVecNbOfAtomsPerVolume() const
Definition: G4Material.hh:201
const G4String & GetName() const
Definition: G4Material.hh:172
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