60 fMeanEnergyPerIon = 0.0;
66 fAdjustmentFactor = 1.0;
70 ComputeMeanParameters();
71 ComputeDensityEffect();
73 ComputeIonParameters();
82 : fMaterial(0), fShellCorrectionVector(0)
84 fMeanExcitationEnergy = 0.0;
85 fLogMeanExcEnergy = 0.0;
94 fAdjustmentFactor = 0.0;
98 fLogEnergy1fluct = 0.0;
100 fLogEnergy2fluct = 0.0;
102 fRateionexcfluct = 0.0;
108 fMeanEnergyPerIon = 0.0;
116 if (fShellCorrectionVector) {
delete [] fShellCorrectionVector; }
117 if (fDensityData) {
delete fDensityData; }
119 fShellCorrectionVector = 0;
124 void G4IonisParamMat::ComputeMeanParameters()
129 fMeanExcitationEnergy = 0.;
130 fLogMeanExcEnergy = 0.;
141 if(fMeanExcitationEnergy > 0.0) {
142 fLogMeanExcEnergy = std::log(fMeanExcitationEnergy);
146 for (
size_t i=0; i < nElements; i++) {
148 fLogMeanExcEnergy += nAtomsPerVolume[i]*elm->
GetZ()
152 fMeanExcitationEnergy = std::exp(fLogMeanExcEnergy);
155 fShellCorrectionVector =
new G4double[3];
157 for (
G4int j=0; j<=2; j++)
159 fShellCorrectionVector[j] = 0.;
161 for (
size_t k=0; k<nElements; k++) {
162 fShellCorrectionVector[j] += nAtomsPerVolume[k]
163 *(((*elmVector)[k])->GetIonisation()->GetShellCorrectionVector())[j];
178 void G4IonisParamMat::ComputeDensityEffect()
187 if(idx < 0 && 1 == nelm) {
214 fX0density += corr/twoln10;
215 fX1density += corr/twoln10;
227 fCdensity = 1. + 2*std::log(fMeanExcitationEnergy/fPlasmaEnergy);
234 const G4double ClimiS[] = {3.681 , 5.215 };
235 const G4double X0valS[] = {1.0 , 1.5 };
236 const G4double X1valS[] = {2.0 , 3.0 };
238 if(fMeanExcitationEnergy < E100eV) { icase = 0; }
241 if(fCdensity < ClimiS[icase]) { fX0density = 0.2; }
242 else { fX0density = 0.326*fCdensity - X0valS[icase]; }
244 fX1density = X1valS[icase]; fMdensity = 3.0;
247 if (1 == nelm && 1 == Z0) {
248 fX0density = 0.425; fX1density = 2.0; fMdensity = 5.949;
256 const G4double ClimiG[] = { 10. , 10.5 , 11. , 11.5 , 12.25 , 13.804};
257 const G4double X0valG[] = { 1.6 , 1.7 , 1.8 , 1.9 , 2.0 , 2.0 };
258 const G4double X1valG[] = { 4.0 , 4.0 , 4.0 , 4.0 , 4.0 , 5.0 };
261 fX0density = 0.326*fCdensity-2.5 ; fX1density = 5.0 ; fMdensity = 3. ;
262 while((icase > 0)&&(fCdensity < ClimiG[icase])) { icase-- ; }
263 fX0density = X0valG[icase]; fX1density = X1valG[icase];
266 if (1 == nelm && 1 == Z0) {
267 fX0density = 1.837; fX1density = 3.0; fMdensity = 4.754;
271 if (1 == nelm && 2 == Z0) {
272 fX0density = 2.191; fX1density = 3.0; fMdensity = 3.297;
289 G4double ParCorr = std::log(Density/DensitySTP);
291 fCdensity -= ParCorr;
292 fX0density -= ParCorr/twoln10;
293 fX1density -= ParCorr/twoln10;
297 if(0.0 == fD0density) {
299 fAdensity = twoln10*(Xa-fX0density)
300 /std::pow((fX1density-fX0density),fMdensity);
318 void G4IonisParamMat::ComputeFluctModel()
327 if (Zeff > 2.) { fF2fluct = 2./Zeff; }
328 else { fF2fluct = 0.; }
330 fF1fluct = 1. - fF2fluct;
331 fEnergy2fluct = 10.*Zeff*Zeff*
eV;
332 fLogEnergy2fluct = std::log(fEnergy2fluct);
333 fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct*fLogEnergy2fluct)
335 fEnergy1fluct = std::exp(fLogEnergy1fluct);
336 fEnergy0fluct = 10.*
eV;
337 fRateionexcfluct = 0.4;
342 void G4IonisParamMat::ComputeIonParameters()
346 const G4double* theAtomicNumDensityVector =
354 if( 1 == NumberOfElements ) {
355 const G4Element* element = (*theElementVector)[0];
362 for (
G4int iel=0; iel<NumberOfElements; iel++)
364 const G4Element* element = (*theElementVector)[iel];
379 fFermiEnergy = 25.*
keV*vF*vF;
387 if(value == fMeanExcitationEnergy || value <= 0.0) {
return; }
389 G4cout <<
"G4Material: Mean excitation energy is changed for "
391 <<
" Iold= " << fMeanExcitationEnergy/
eV
392 <<
"eV; Inew= " << value/
eV <<
" eV;"
396 fMeanExcitationEnergy =
value;
400 G4double corr = 2*(newlog - fLogMeanExcEnergy);
402 fX0density += corr/twoln10;
403 fX1density += corr/twoln10;
406 fLogMeanExcEnergy = newlog;
418 const size_t numberOfMolecula = 54;
421 "NH_3",
"C_4H_10",
"CO_2",
"C_2H_6",
"C_7H_16",
422 "C_6H_14",
"CH_4",
"NO",
"N_2O",
"C_8H_18",
423 "C_5H_12",
"C_3H_8",
"H_2O-Gas",
426 "C_3H_6O",
"C_6H_5NH_2",
"C_6H_6",
"C_4H_9OH",
"CCl_4",
427 "C_6H_5Cl",
"CHCl_3",
"C_6H_12",
"C_6H_4Cl_2",
"C_4Cl_2H_8O",
428 "C_2Cl_2H_4",
"(C_2H_5)_2O",
"C_2H_5OH",
"C_3H_5(OH)_3",
"C_7H_16",
429 "C_6H_14",
"CH_3OH",
"C_6H_5NO_2",
"C_5H_12",
"C_3H_7OH",
430 "C_5H_5N",
"C_8H_8",
"C_2Cl_4",
"C_7H_8",
"C_2Cl_3H",
434 "C_5H_5N_5",
"C_5H_5N_5O",
"(C_6H_11NO)-nylon",
"C_25H_52",
435 "(C_2H_4)-Polyethylene",
"(C_5H_8O-2)-Polymethil_Methacrylate",
436 "(C_8H_8)-Polystyrene",
"A-150-tissue",
"Al_2O_3",
"CaF_2",
437 "LiF",
"Photo_Emulsion",
"(C_2F_4)-Teflon",
"SiO_2"
440 static G4double meanExcitation[numberOfMolecula] = {
442 53.7, 48.3, 85.0, 45.4, 49.2,
443 49.1, 41.7, 87.8, 84.9, 49.5,
446 64.2, 66.2, 63.4, 59.9, 166.3,
447 89.1, 156.0, 56.4, 106.5, 103.3,
448 111.9, 60.0, 62.9, 72.6, 54.4,
449 54.0, 67.6, 75.8, 53.6, 61.1,
450 66.2, 64.0, 159.2, 62.5, 148.1,
453 71.4, 75.0, 63.9, 48.3, 57.4,
454 74.0, 68.7, 65.1, 145.2, 166.,
455 94.0, 331.0, 99.1, 139.2
460 for(
size_t i=0; i<numberOfMolecula; i++) {
461 if(chFormula == name[i]) {
462 x = meanExcitation[i]*
eV;
473 fShellCorrectionVector = 0;
484 fMaterial = right.fMaterial;
485 fMeanExcitationEnergy = right.fMeanExcitationEnergy;
486 fLogMeanExcEnergy = right.fLogMeanExcEnergy;
487 if(fShellCorrectionVector){
delete [] fShellCorrectionVector; }
488 fShellCorrectionVector =
new G4double[3];
489 fShellCorrectionVector[0] = right.fShellCorrectionVector[0];
490 fShellCorrectionVector[1] = right.fShellCorrectionVector[1];
491 fShellCorrectionVector[2] = right.fShellCorrectionVector[2];
493 fCdensity = right.fCdensity;
494 fMdensity = right.fMdensity;
495 fAdensity = right.fAdensity;
496 fX0density = right.fX0density;
497 fX1density = right.fX1density;
498 fD0density = right.fD0density;
499 fPlasmaEnergy = right.fPlasmaEnergy;
500 fAdjustmentFactor = right.fAdjustmentFactor;
501 fF1fluct = right.fF1fluct;
502 fF2fluct = right.fF2fluct;
503 fEnergy1fluct = right.fEnergy1fluct;
504 fLogEnergy1fluct = right.fLogEnergy1fluct;
505 fEnergy2fluct = right.fEnergy2fluct;
506 fLogEnergy2fluct = right.fLogEnergy2fluct;
507 fEnergy0fluct = right.fEnergy0fluct;
508 fRateionexcfluct = right.fRateionexcfluct;
510 fFermiEnergy = right.fFermiEnergy;
511 fLfactor = right.fLfactor;
512 fInvA23 = right.fInvA23;
513 fBirks = right.fBirks;
514 fMeanEnergyPerIon = right.fMeanEnergyPerIon;
515 fDensityData = right.fDensityData;
516 twoln10 = right.twoln10;