Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-10-05 08:09:40

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/Definitions/PdgParticle.hpp"
0012 #include "Acts/Material/MaterialSlab.hpp"
0013 
0014 namespace Acts {
0015 
0016 /// Compute the mean energy loss due to ionisation and excitation.
0017 ///
0018 /// @param slab      The traversed material and its properties
0019 /// @param m         Particle mass
0020 /// @param qOverP    Particle charge divided by absolute momentum
0021 /// @param absQ      Absolute particle charge
0022 ///
0023 /// This computes the mean ionisation energy loss @f$-dE(x)@f$ of a particle
0024 /// traversing the material slab,
0025 ///
0026 /// @f[
0027 ///   -dE(x) = -\frac{dE}{dx}\, x,
0028 /// @f]
0029 ///
0030 /// where @f$-dE/dx@f$ is given by the Bethe formula
0031 /// @cite ParticleDataGroup:2018ovx (eq. 33.5), including the density-effect
0032 /// correction. The result is the magnitude of the loss (always @f$\geq 0@f$);
0033 /// The formula is valid for intermediate energies,
0034 /// roughly @f$0.1 \lesssim \beta\gamma \lesssim 1000@f$.
0035 ///
0036 /// @return Mean ionisation energy loss through the slab in native energy units
0037 /// @see @ref computeEnergyLossLandau for the most probable value,
0038 ///   @ref computeEnergyLossRadiative for radiative losses, and
0039 ///   @ref computeEnergyLossMean for the sum of both
0040 float computeEnergyLossBethe(const MaterialSlab& slab, float m, float qOverP,
0041                              float absQ);
0042 /// Derivative of the Bethe energy loss with respect to q/p.
0043 ///
0044 /// @copydoc computeEnergyLossBethe
0045 /// @return Derivative of the mean ionisation energy loss with respect to q/p
0046 float deriveEnergyLossBetheQOverP(const MaterialSlab& slab, float m,
0047                                   float qOverP, float absQ);
0048 
0049 /// Compute the most probable energy loss due to ionisation and excitation.
0050 ///
0051 /// @param slab      The traversed material and its properties
0052 /// @param m         Particle mass
0053 /// @param qOverP    Particle charge divided by absolute momentum
0054 /// @param absQ      Absolute particle charge
0055 ///
0056 /// This computes the most probable ionisation energy loss @f$-dE(x)@f$ through
0057 /// the material slab, i.e. the mode of the Landau-Vavilov-Bichsel distribution
0058 /// @cite ParticleDataGroup:2018ovx (eq. 33.12), including the density-effect
0059 /// correction. Unlike @ref computeEnergyLossBethe (which returns the mean), this is
0060 /// the most probable value, which for thin slabs is noticeably smaller than the
0061 /// mean because of the long tail of the distribution. The formula is valid for
0062 /// intermediate energies, roughly @f$0.1 \lesssim \beta\gamma \lesssim 1000@f$.
0063 ///
0064 /// @return Most probable ionisation energy loss through the slab in native
0065 ///   energy units
0066 float computeEnergyLossLandau(const MaterialSlab& slab, float m, float qOverP,
0067                               float absQ);
0068 /// Derivative of the most probable ionisation energy loss with respect to q/p.
0069 ///
0070 /// @copydoc computeEnergyLossLandau
0071 /// @return Derivative of the most probable ionisation energy loss with respect
0072 ///   to q/p
0073 float deriveEnergyLossLandauQOverP(const MaterialSlab& slab, float m,
0074                                    float qOverP, float absQ);
0075 
0076 /// Compute the Gaussian-equivalent sigma for the ionisation loss fluctuations.
0077 ///
0078 /// @see @ref computeEnergyLossBethe for parameters description
0079 ///
0080 /// This is the sigma parameter of a Gaussian distribution with the same
0081 /// full-width-half-maximum as the Landau-Vavilov-Bichsel distribution. The
0082 /// computations are valid for intermediate particle energies.
0083 /// @param slab The traversed material and its properties
0084 /// @param m Particle mass
0085 /// @param qOverP Particle charge divided by absolute momentum
0086 /// @param absQ Absolute particle charge
0087 /// @return Gaussian-equivalent sigma for energy loss fluctuations
0088 float computeEnergyLossLandauSigma(const MaterialSlab& slab, float m,
0089                                    float qOverP, float absQ);
0090 
0091 /// Compute the full with half maximum of landau energy loss distribution
0092 ///
0093 /// @param slab The traversed material and its properties
0094 /// @param m Particle mass
0095 /// @param qOverP Particle charge divided by absolute momentum
0096 /// @param absQ Absolute particle charge
0097 /// @return Full width half maximum of the Landau distribution
0098 float computeEnergyLossLandauFwhm(const MaterialSlab& slab, float m,
0099                                   float qOverP, float absQ);
0100 
0101 /// Compute the Gaussian-equivalent sigma of q/p due to ionisation fluctuations.
0102 ///
0103 /// @param slab   The traversed material and its properties
0104 /// @param m      Particle mass
0105 /// @param qOverP Particle charge divided by absolute momentum
0106 /// @param absQ   Absolute particle charge
0107 ///
0108 /// This propagates the energy-loss straggling (the Gaussian-equivalent sigma
0109 /// @f$\sigma_E@f$ from @ref computeEnergyLossLandauSigma) into a standard deviation
0110 /// on @f$q/p@f$ using the Jacobian @f$d(q/p)/dE@f$,
0111 ///
0112 /// @f[
0113 ///   \sigma_{q/p} = \left|\frac{d(q/p)}{dE}\right|\, \sigma_E .
0114 /// @f]
0115 ///
0116 /// This is the quantity used as the @f$q/p@f$ process noise in the Kalman
0117 /// fitters.
0118 ///
0119 /// @return Gaussian-equivalent standard deviation of q/p
0120 float computeEnergyLossLandauSigmaQOverP(const MaterialSlab& slab, float m,
0121                                          float qOverP, float absQ);
0122 
0123 /// Compute the mean energy loss due to radiative effects at high energies.
0124 ///
0125 /// @param slab      The traversed material and its properties
0126 /// @param absPdg    Absolute particle type PDG identifier
0127 /// @param m         Particle mass
0128 /// @param qOverP    Particle charge divided by absolute momentum
0129 /// @param absQ      Absolute particle charge
0130 ///
0131 /// This computes the mean radiative energy loss @f$-dE(x)@f$ using the
0132 /// approximation of @cite Lund:2008ad. Bremsstrahlung, scaling with
0133 /// @f$(m_e/m)^2@f$, is always included; direct @f$e^+e^-@f$ pair production and
0134 /// photo-nuclear interactions are added only for muons above @f$8\,\mathrm{GeV}@f$.
0135 /// Like @ref computeEnergyLossBethe the result is the magnitude of the loss (always
0136 /// @f$\geq 0@f$).
0137 ///
0138 /// @return Mean radiative energy loss through the slab in native energy units
0139 float computeEnergyLossRadiative(const MaterialSlab& slab, PdgParticle absPdg,
0140                                  float m, float qOverP, float absQ);
0141 /// Derivative of the mean radiative energy loss with respect to q/p.
0142 ///
0143 /// @copydoc computeEnergyLossRadiative
0144 /// @return Derivative of radiative energy loss with respect to q/p
0145 float deriveEnergyLossRadiativeQOverP(const MaterialSlab& slab,
0146                                       PdgParticle absPdg, float m, float qOverP,
0147                                       float absQ);
0148 
0149 /// Compute the combined mean energy loss.
0150 ///
0151 /// @param slab      The traversed material and its properties
0152 /// @param absPdg    Absolute particle type PDG identifier
0153 /// @param m         Particle mass
0154 /// @param qOverP    Particle charge divided by absolute momentum
0155 /// @param absQ      Absolute particle charge
0156 ///
0157 /// This computes the combined mean energy loss -dE(x) including ionisation and
0158 /// radiative effects. The computations are valid over a wide range of particle
0159 /// energies.
0160 /// @return Combined mean energy loss through the material slab
0161 float computeEnergyLossMean(const MaterialSlab& slab, PdgParticle absPdg,
0162                             float m, float qOverP, float absQ);
0163 /// Derivative of the combined mean energy loss with respect to q/p.
0164 ///
0165 /// @copydoc computeEnergyLossMean
0166 /// @return Derivative of combined mean energy loss with respect to q/p
0167 float deriveEnergyLossMeanQOverP(const MaterialSlab& slab, PdgParticle absPdg,
0168                                  float m, float qOverP, float absQ);
0169 
0170 /// Compute the combined most probably energy loss.
0171 ///
0172 /// @copydoc computeEnergyLossMean
0173 /// @return Combined most probable energy loss through the material slab
0174 float computeEnergyLossMode(const MaterialSlab& slab, PdgParticle absPdg,
0175                             float m, float qOverP, float absQ);
0176 /// Derivative of the combined most probable energy loss with respect to q/p.
0177 ///
0178 /// @copydoc computeEnergyLossMean
0179 /// @return Derivative of combined most probable energy loss with respect to q/p
0180 float deriveEnergyLossModeQOverP(const MaterialSlab& slab, PdgParticle absPdg,
0181                                  float m, float qOverP, float absQ);
0182 
0183 /// Compute the core width of the projected planar scattering distribution.
0184 ///
0185 /// @param slab      The traversed material and its properties
0186 /// @param absPdg    Absolute particle type PDG identifier
0187 /// @param m         Particle mass
0188 /// @param qOverP    Particle charge divided by absolute momentum
0189 /// @param absQ      Absolute particle charge
0190 ///
0191 /// The returned @f$\theta_0@f$ is the standard deviation of the central
0192 /// (Gaussian) part of the multiple-Coulomb-scattering angle, projected onto a
0193 /// plane. For all particles except electrons and positrons it is evaluated with
0194 /// the Highland formula @cite Highland:1975pq in the parametrisation of
0195 /// @cite ParticleDataGroup:2018ovx (eq. 33.15); for electrons and positrons the
0196 /// Rossi-Greisen form is used instead.
0197 ///
0198 /// @note This is the projected (single-plane) width; the width of the polar
0199 ///   space angle is larger by a factor @f$\sqrt{2}@f$.
0200 /// @return Projected scattering angle standard deviation @f$\theta_0@f$ in radians
0201 /// @see @ref approximateHighlandScattering for a charge- and momentum-independent
0202 ///   approximation
0203 float computeMultipleScatteringTheta0(const MaterialSlab& slab,
0204                                       PdgParticle absPdg, float m, float qOverP,
0205                                       float absQ);
0206 
0207 /// Approximate the core width of the projected planar scattering distribution
0208 /// with Highland's formula.
0209 ///
0210 /// In contrast to @ref computeMultipleScatteringTheta0, this ignores the particle
0211 /// charge and velocity (assuming a singly-charged, ultra-relativistic particle
0212 /// with @f$q^2/\beta^2 = 1@f$) and does not divide by the momentum. It therefore
0213 /// returns @f$\theta_0 \cdot p@f$ rather than @f$\theta_0@f$ itself, which is
0214 /// convenient when the momentum is not yet known.
0215 ///
0216 /// @param xOverX0  The thickness of the material in radiation lengths
0217 /// @return The projected scattering angle scaled by momentum,
0218 ///   @f$\theta_0 \cdot p@f$, in native units (radians times momentum)
0219 float approximateHighlandScattering(float xOverX0);
0220 
0221 }  // namespace Acts