14using CLHEP::electron_mass_c2;
15using CLHEP::classic_electr_radius;
25 double I_eff,
double density,
29 mfunname(
"double e_cont_enloss(...)");
30 const double gamma_1 = Ekin / electron_mass_c2;
31 if (gamma_1 <= 0.0)
return 0.;
32 const double gamma = gamma_1 + 1.;
33 const double gamma2 = gamma * gamma;
35 const double Tcme = Ecut / electron_mass_c2;
36 const double beta =
lorbeta(gamma_1);
37 const double beta2 = beta * beta;
42 const double y = 1.0 / (1.0 + gamma);
43 const double D = std::min(Tcme, gamma_1);
44 const double D2 = 0.5 * D * D;
45 const double D3 = 2.0 * D2 * D / 3.0;
46 const double D4 = D2 * D2;
47 F = log(gamma_1 * D) -
48 beta2 * (gamma_1 + 2.0 * D -
49 y * (3.0 * D2 + y * (D - D3 + y * (D2 - gamma_1 * D3 + D4)))) /
53 const double D = std::min(Tcme, 0.5 * gamma_1);
54 F = -1.0 - beta2 + log((gamma_1 - D) * D) + gamma_1 / (gamma_1 - D) +
55 (0.5 * D * D + (1.0 + 2.0 * gamma_1) * log(1.0 - D / gamma_1)) / gamma2;
57 const double logI = log(I_eff / electron_mass_c2);
59 const double eldens = ratio_Z_to_A * Avogadro * density;
61 double C = 1.0 + 2.0 * log((I_eff / GeV) /
62 (28.8e-9 *
sqrt(density / (gram / cm3) *
63 ratio_Z_to_A * gram / mole)));
68 if (density > 0.05 * gram / cm3) {
70 if (I_eff < 1.0e-7 * GeV) {
91 double ip = long((C - 10.0) / 0.5) + 1;
101 x0 = 0.326 * C - 2.5;
106 const double xa = C / 4.606;
107 const double aa = 4.606 * (xa - x0) /
pow(x1 - x0, 3);
108 const double x = log(gamma_1 * (gamma + 1.0)) / 4.606;
112 if (x <= x1) del = del + aa *
pow(x1 - x, 3);
115 twopi * classic_electr_radius * classic_electr_radius * electron_mass_c2;
118 cons * eldens * (log(2.0 * gamma_1 + 4.0) - 2.0 * logI + F - del) / beta2;
119 return dedx > 0. ? dedx : 0.;
double lorbeta(const double gamma_1)
as function of .
DoubleAc pow(const DoubleAc &f, double p)
double e_cont_enloss(double ratio_Z_to_A, double I_eff, double density, double Ekin, double Ecut, double z)
DoubleAc sqrt(const DoubleAc &f)