68 return 16.e-6 * std::pow(
mat.averageZ(), 0.9);
73DensityEffect(
const double zOverAtimesRho,
const double eta,
74 const double gamma,
const double I) {
81 double eplasma = 28.816e-6 * std::sqrt(1000. * zOverAtimesRho);
86 return 2. * std::log(eplasma*
eta /
I) - 1.;
93KAZ(
const double zOverAtimesRho) {
95 return 0.5 * 30.7075 * zOverAtimesRho;
100LandauMPV(
const double kazL,
const double eta2,
const double I,
101 const double beta,
const double delta) {
105 return -
kazL * (std::log(2. * s_me * eta2*kazL/(
I*
I)) + 0.2 -
119 double& sigma,
double& kazL) {
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;
130 const double gamma = E / m;
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);
144 const double eta = beta * gamma;
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)) -
154 2. * (beta * beta) - delta);
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());
181 const double eta = beta * gamma;
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)) -
192 2. * (beta * beta) - delta);
197 return kaz * (2. * std::log(2. * s_me / iPot) + 3. * std::log(gamma) - 1.95);
207 double& sigma,
double& kazL,
double path) {
210 const double E = std::sqrt(p * p + m * m);
211 const double beta = p / E;
212 const double gamma = E / m;
213 const double I = MeanExcitationEnergy(mat);
214 const double zOverAtimesRho = mat.zOverAtimesRho();
215 double kaz = KAZ(zOverAtimesRho);
216 const double eta = beta * gamma;
217 const double eta2 =
eta*
eta;
218 const double delta = DensityEffect(zOverAtimesRho,
eta, gamma,
I);
222 const double MPV = LandauMPV(kazL, eta2,
I, beta, delta);
223 sigma = 0.424 * 4. * kazL;
238 const double mfrac = s_me / m;
239 const double E = sqrt(p * p + m * m);
242 double Radiation = -E * mfrac * mfrac;
251 if ((particle ==
Trk::muon) && (E > 8000.)) {
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.);
261 sigma = sigma / mat.x0();
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) *
286 (1. + 0.038 * std::log(dInX0 / (beta * beta)));
Scalar eta() const
pseudorapidity method
Material with information about thickness of material.
A common object to be contained by.
#define ATH_ALWAYS_INLINE
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
static double dEdXBetheHeitler(const Trk::MaterialProperties &mat, double initialE, Trk::ParticleHypothesis particle)
static double dEdl_ionization(double p, const Material &mat, ParticleHypothesis particle, double &sigma, double &kazL)
dE/dl ionization energy loss per path unit
static double dEdl_radiation(double p, const Material &mat, ParticleHypothesis particle, double &sigma)
dE/dl radiation energy loss per path unit
static double dE_MPV_ionization(double p, const Trk::Material &mat, Trk::ParticleHypothesis particle, double &sigma, double &kazL, double path)
Most Propable dE ionization energly loss.
static double dEdXBetheBloch(const Trk::MaterialProperties &mat, double beta, double gamma, Trk::ParticleHypothesis particle)
dE/dl ionization energy loss per path unit
static double sigmaMS(double dInX0, double p, double beta)
multiple scattering as function of dInX0