19 double I_eff,
double density,
23 mfunname(
"double e_cont_enloss(...)");
24 double gamma = Ekin / electron_mass_c2 + 1.0;
25 double gamma2 = gamma * gamma;
26 double gamma_1 = Ekin / electron_mass_c2;
29 if (gamma_1 <= 0.0)
return dedx;
30 double Tcme = Ecut / electron_mass_c2;
31 double betta =
lorbeta(gamma_1);
32 double betta2 = betta * betta;
37 double y = 1.0 / (1.0 + gamma);
39 if (gamma_1 < Tcme) D = gamma_1;
40 double D2 = D * D / 2.0;
41 double D3 = 2.0 * D2 * D / 3.0;
43 F = log(gamma_1 * D) -
46 y * (3.0 * D2 + y * (D - D3 + y * (D2 - gamma_1 * D3 + D4)))) /
50 if (D > gamma_1 / 2.0) D = gamma_1 / 2.0;
51 F = -1.0 - betta2 + log((gamma_1 - D) * D) + gamma_1 / (gamma_1 - D) +
52 (0.5 * D * D + (1.0 + 2.0 * gamma_1) * log(1.0 - D / gamma_1)) / gamma2;
54 double logI = log(I_eff / electron_mass_c2);
62 2.0 * log((I_eff / GeV) / (28.8e-9 *
sqrt(density / (g / cm3) *
63 ratio_Z_to_A * gram / mole)));
68 if (density > 0.05 * g / cm3) {
70 if (I_eff < 1.0e-7 * GeV) {
91 double ip = long((C - 10.0) / 0.5) + 1;
94 x0 = 1.6 + 0.1 * double(ip);
101 x0 = 0.326 * C - 2.5;
106 double xa = C / 4.606;
107 double aa = 4.606 * (xa - x0) /
pow(x1 - x0, 3.0);
108 double x = log(gamma_1 * (gamma + 1.0)) / 4.606;
112 if (x <= x1) del = del + aa *
pow(x1 - x, 3.0);
114 double cons = 0.153536e-3
117 dedx = cons * eldens * (log(2.0 * gamma_1 + 4.0) - 2.0 * logI + F - del) /
119 if (dedx < 0.0) dedx = 0.0;
DoubleAc pow(const DoubleAc &f, double p)
DoubleAc sqrt(const DoubleAc &f)
double lorbeta(const double gamma_1)
double e_cont_enloss(double ratio_Z_to_A, double I_eff, double density, double Ekin, double Ecut, double z)