73 DensityEffect(
const double zOverAtimesRho,
const double eta,
74 const double gamma,
const double I) {
81 double eplasma = 28.816e-6 * std::sqrt(1000. * zOverAtimesRho);
93 KAZ(
const double zOverAtimesRho) {
95 return 0.5 * 30.7075 * zOverAtimesRho;
100 LandauMPV(
const double kazL,
const double eta2,
const double I,
101 const double beta,
const double delta) {
123 if (
mat.averageZ() < 1) {
127 const double mfrac = s_me /
m;
128 const double E = std::sqrt(
p *
p +
m *
m);
129 const double beta =
p /
E;
131 const double I = MeanExcitationEnergy(
mat);
132 const double zOverAtimesRho =
mat.zOverAtimesRho();
133 double kaz = KAZ(zOverAtimesRho);
134 double Ionization = 0.;
140 Ionization = -kaz * (2. *
log(2. * s_me /
I) + 3. *
log(
gamma) - 1.95);
145 const double eta2 = eta*eta;
146 const double delta = DensityEffect(zOverAtimesRho, eta,
gamma,
I);
149 2. *
eta2 * s_me / (1. + 2. *
gamma * mfrac + mfrac * mfrac);
153 Ionization = -kaz * (
std::log(2. * s_me *
eta2 * tMax / (
I *
I)) -
157 const double MPV = LandauMPV(kaz,
eta2,
I,
beta, delta);
158 constexpr
double factor = (1. / 3.59524);
159 sigma = -(Ionization - MPV) * factor;
172 if (
mat.averageZ() == 0. ||
mat.zOverAtimesRho() == 0.) {
175 const double iPot = 16.e-6 *
std::pow(
mat.averageZ(), 0.9);
177 const double zOverAtimesRho =
mat.zOverAtimesRho();
178 double kaz = KAZ(
mat.zOverAtimesRho());
182 const double eta2 = eta*eta;
183 double delta = DensityEffect(zOverAtimesRho, eta,
gamma, iPot);
185 double mfrac = s_me /
m;
187 double tMax = 2. *
eta2 * s_me / (1. + 2. *
gamma * mfrac + mfrac * mfrac);
191 return kaz * (
std::log(2. * s_me *
eta2 * tMax / (iPot * iPot)) -
210 const double E = std::sqrt(
p *
p +
m *
m);
211 const double beta =
p /
E;
213 const double I = MeanExcitationEnergy(
mat);
214 const double zOverAtimesRho =
mat.zOverAtimesRho();
215 double kaz = KAZ(zOverAtimesRho);
217 const double eta2 = eta*eta;
218 const double delta = DensityEffect(zOverAtimesRho, eta,
gamma,
I);
238 const double mfrac = s_me /
m;
239 const double E = sqrt(
p *
p +
m *
m);
242 double Radiation = -
E * mfrac * mfrac;
253 Radiation += 0.5345 - 6.803e-5 *
E - 2.278e-11 *
E *
E +
254 9.899e-18 *
E *
E *
E;
255 sigma += (0.1828 - 3.966e-3 * std::sqrt(
E) + 2.151e-5 *
E);
257 Radiation += 2.986 - 9.253e-5 *
E;
258 sigma += 17.73 + 2.409e-5 * (
E - 1000000.);
263 return Radiation /
mat.x0();
274 return initialE /
mat.x0() * mfrac;
280 if (dInX0 == 0. ||
p == 0. ||
beta == 0.) {
285 return 13.6 * std::sqrt(dInX0) / (
beta *
p) *