83{
84 if(p == lastPart && material == lastMat && kineticEnergy == lastKinEnergy)
85 return effCharge;
86
87 lastPart = p;
88 lastMat = material;
89 lastKinEnergy = kineticEnergy;
90
94 chargeCorrection = 1.0;
95 if(Zi <= 1) { return effCharge; }
96
97
98
99
100
101
102 G4double reducedEnergy = kineticEnergy * CLHEP::proton_mass_c2/mass;
103
104
105
106
107 if(reducedEnergy > effCharge*energyHighLimit ) {
108 return effCharge;
109 }
111 reducedEnergy = std::max(reducedEnergy,energyLowLimit);
112
113
114 if( Zi <= 2 ) {
115
117 {0.2865,0.1266,-0.001429,0.02402,-0.01135,0.001475};
118
122 for (
G4int i=1; i<6; ++i) {
123 y *= Q;
124 x += y * c[i] ;
125 }
127
130 G4double tt = ( 0.007 + 0.00005 * z );
131 if(tq2 < 0.2) { tt *= (1.0 - tq2 + 0.5*tq2*tq2); }
132 else { tt *=
G4Exp(-tq2); }
133
134 effCharge *= (1.0 + tt) * std::sqrt(ex);
135
136
137 } else {
138
141
142
146 G4double vF = std::sqrt(eF/energyBohr);
147
149
150 ? vF * std::sqrt(v1sq) * ( 1.0 + 0.2/v1sq ) / zi23
151
152 : 0.692308 * vF * (1.0 + 0.666666*v1sq + v1sq*v1sq/15.0) / zi23;
153
155
156 G4double q = std::max(1.0 -
G4Exp( 0.803*y3 - 1.3167*y3*y3 - 0.38157*y
157 - 0.008983*y*y), minCharge/effCharge);
158
159
162 G4double sq = 1.0 + ( 0.18 + 0.0015 * z )*
G4Exp(-tq2)/ (Zi*Zi);
163
164
165
166
167
168
172
173 effCharge *= q;
174 chargeCorrection = sq * (1.0 + xx);
175 }
176
177
178
179 return effCharge;
180}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
G4double GetZeffective() const
G4double GetFermiEnergy() const
G4IonisParamMat * GetIonisation() const
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4double Z13(G4int Z) const
G4double A23(G4double A) const