ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonisParamElm.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonisParamElm.cc
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 //
27 //
28 //
29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
30 //
31 // 09-07-98, data moved from G4Element. M.Maire
32 // 22-11-00, tabulation of ionisation potential from
33 // the ICRU Report N#37. V.Ivanchenko
34 // 08-03-01, correct handling of fShellCorrectionVector. M.Maire
35 // 17-10-02, Fix excitation energy interpolation. V.Ivanchenko
36 // 06-09-04, Update calculated values after any change of ionisation
37 // potential change. V.Ivanchenko
38 // 29-04-10, Using G4Pow and mean ionisation energy from NIST V.Ivanchenko
39 // 27.10.11: new scheme for G4Exception (mma)
40 //
41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
42 
43 #include "G4IonisParamElm.hh"
44 #include "G4NistManager.hh"
45 #include "G4Pow.hh"
46 #include "G4PhysicalConstants.hh"
47 #include "G4SystemOfUnits.hh"
48 
49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
50 
52 {
53  G4int Z = G4lrint(AtomNumber);
54  if (Z < 1) {
55  G4Exception("G4IonisParamElm::G4IonisParamElm()", "mat501", FatalException,
56  "It is not allowed to create an Element with Z<1");
57  }
58  G4Pow* g4pow = G4Pow::GetInstance();
59 
60  // some basic functions of the atomic number
61  fZ = Z;
62  fZ3 = g4pow->Z13(Z);
63  fZZ3 = fZ3*g4pow->Z13(Z+1);
64  flogZ3 = g4pow->logZ(Z)/3.;
65 
68 
69  // compute parameters for ion transport
70  // The aproximation from:
71  // J.F.Ziegler, J.P. Biersack, U. Littmark
72  // The Stopping and Range of Ions in Matter,
73  // Vol.1, Pergamon Press, 1985
74  // Fast ions or hadrons
75 
76  G4int iz = Z - 1;
77  if(91 < iz) { iz = 91; }
78 
79  static const G4double vFermi[92] = {
80  1.0309, 0.15976, 0.59782, 1.0781, 1.0486, 1.0, 1.058, 0.93942, 0.74562, 0.3424,
81  0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712,
82  0.81707, 0.9943, 1.1423, 1.2381, 1.1222, 0.92705, 1.0047, 1.2, 1.0661, 0.97411,
83  0.84912, 0.95, 1.0903, 1.0429, 0.49715, 0.37755, 0.35211, 0.57801, 0.77773, 1.0207,
84  1.029, 1.2542, 1.122, 1.1241, 1.0882, 1.2709, 1.2542, 0.90094, 0.74093, 0.86054,
85  0.93155, 1.0047, 0.55379, 0.43289, 0.32636, 0.5131, 0.695, 0.72591, 0.71202, 0.67413,
86  0.71418, 0.71453, 0.5911, 0.70263, 0.68049, 0.68203, 0.68121, 0.68532, 0.68715, 0.61884,
87  0.71801, 0.83048, 1.1222, 1.2381, 1.045, 1.0733, 1.0953, 1.2381, 1.2879, 0.78654,
88  0.66401, 0.84912, 0.88433, 0.80746, 0.43357, 0.41923, 0.43638, 0.51464, 0.73087, 0.81065,
89  1.9578, 1.0257} ;
90 
91  static const G4double lFactor[92] = {
92  1.0, 1.0, 1.1, 1.06, 1.01, 1.03, 1.04, 0.99, 0.95, 0.9,
93  0.82, 0.81, 0.83, 0.88, 1.0, 0.95, 0.97, 0.99, 0.98, 0.97,
94  0.98, 0.97, 0.96, 0.93, 0.91, 0.9, 0.88, 0.9, 0.9, 0.9,
95  0.9, 0.85, 0.9, 0.9, 0.91, 0.92, 0.9, 0.9, 0.9, 0.9,
96  0.9, 0.88, 0.9, 0.88, 0.88, 0.9, 0.9, 0.88, 0.9, 0.9,
97  0.9, 0.9, 0.96, 1.2, 0.9, 0.88, 0.88, 0.85, 0.9, 0.9,
98  0.92, 0.95, 0.99, 1.03, 1.05, 1.07, 1.08, 1.1, 1.08, 1.08,
99  1.08, 1.08, 1.09, 1.09, 1.1, 1.11, 1.12, 1.13, 1.14, 1.15,
100  1.17, 1.2, 1.18, 1.17, 1.17, 1.16, 1.16, 1.16, 1.16, 1.16,
101  1.16, 1.16} ;
102 
103  fVFermi = vFermi[iz];
104  fLFactor = lFactor[iz];
105 
106  // obsolete parameters for ionisation
107  fTau0 = 0.1*fZ3*MeV/proton_mass_c2;
108  fTaul = 2.*MeV/proton_mass_c2;
109 
110  // compute the Bethe-Bloch formula for energy = fTaul*particle mass
112  G4double w = fTaul*(fTaul+2.) ;
113  fBetheBlochLow = (fTaul+1.)*(fTaul+1.)*std::log(2.*w/rate)/w - 1. ;
115 
116  fClow = std::sqrt(fTaul)*fBetheBlochLow;
117  fAlow = 6.458040 * fClow/fTau0;
118  G4double Taum = 0.035*fZ3*MeV/proton_mass_c2;
119  fBlow =-3.229020*fClow/(fTau0*std::sqrt(Taum));
120 
121  // Shell correction parameterization
122  fShellCorrectionVector = new G4double[3]; //[3]
123  rate = 0.001*fMeanExcitationEnergy/eV;
124  G4double rate2 = rate*rate;
125  /*
126  fShellCorrectionVector[0] = ( 1.10289e5 + 5.14781e8*rate)*rate2 ;
127  fShellCorrectionVector[1] = ( 7.93805e3 - 2.22565e7*rate)*rate2 ;
128  fShellCorrectionVector[2] = (-9.92256e1 + 2.10823e5*rate)*rate2 ;
129  */
130  fShellCorrectionVector[0] = ( 0.422377 + 3.858019*rate)*rate2 ;
131  fShellCorrectionVector[1] = ( 0.0304043 - 0.1667989*rate)*rate2 ;
132  fShellCorrectionVector[2] = (-0.00038106 + 0.00157955*rate)*rate2 ;
133 }
134 
135 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
136 
137 // Fake default constructor - sets only member data and allocates memory
138 // for usage restricted to object persistency
139 
141  : fShellCorrectionVector(nullptr)
142 {
145 }
146 
147 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
148 
150 {
152 }
153 
154 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....