Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4IonisParamElm.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//
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"
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
66 fMeanExcitationEnergy =
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
111 G4double rate = fMeanExcitationEnergy/electron_mass_c2 ;
112 G4double w = fTaul*(fTaul+2.) ;
113 fBetheBlochLow = (fTaul+1.)*(fTaul+1.)*std::log(2.*w/rate)/w - 1. ;
114 fBetheBlochLow = 2.*fZ*twopi_mc2_rcl2*fBetheBlochLow ;
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{
143 fZ=fZ3=fZZ3=flogZ3=fTau0=fTaul=fBetheBlochLow=fAlow=fBlow=fClow
144 =fMeanExcitationEnergy=fVFermi=fLFactor=0.0;
145}
146
147//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
148
149G4IonisParamElm::~G4IonisParamElm() { delete[] fShellCorrectionVector; }
150
151//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
G4IonisParamElm(G4double Z)
G4double GetMeanIonisationEnergy(G4int Z) const
static G4NistManager * Instance()
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double logZ(G4int Z) const
Definition: G4Pow.hh:137
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
int G4lrint(double ad)
Definition: templates.hh:134