Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 09:42:10

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 energy loss -dE(x) through a material with
0024 /// the given properties, i.e. it computes
0025 ///
0026 ///     -dE(x) = -dE/dx * x
0027 ///
0028 /// where -dE/dx is given by the Bethe formula. The computations are valid
0029 /// for intermediate particle energies.
0030 /// @return Mean energy loss through the material slab
0031 float computeEnergyLossBethe(const MaterialSlab& slab, float m, float qOverP,
0032                              float absQ);
0033 /// Derivative of the Bethe energy loss with respect to q/p.
0034 ///
0035 /// @copydoc computeEnergyLossBethe
0036 float deriveEnergyLossBetheQOverP(const MaterialSlab& slab, float m,
0037                                   float qOverP, float absQ);
0038 
0039 /// Compute the most propable energy loss due to ionisation and excitation.
0040 ///
0041 /// @copydoc computeEnergyLossBethe
0042 ///
0043 /// This computes the most probable energy loss -dE(x) through a material of
0044 /// the given properties and thickness as described by the mode of the
0045 /// Landau-Vavilov-Bichsel distribution. The computations are valid
0046 /// for intermediate particle energies.
0047 /// @return Most probable energy loss through the material slab
0048 float computeEnergyLossLandau(const MaterialSlab& slab, float m, float qOverP,
0049                               float absQ);
0050 /// Derivative of the most probable ionisation energy loss with respect to q/p.
0051 ///
0052 /// @copydoc computeEnergyLossBethe
0053 float deriveEnergyLossLandauQOverP(const MaterialSlab& slab, float m,
0054                                    float qOverP, float absQ);
0055 
0056 /// Compute the Gaussian-equivalent sigma for the ionisation loss fluctuations.
0057 ///
0058 /// @see computeEnergyLossBethe for parameters description
0059 ///
0060 /// This is the sigma parameter of a Gaussian distribution with the same
0061 /// full-width-half-maximum as the Landau-Vavilov-Bichsel distribution. The
0062 /// computations are valid for intermediate particle energies.
0063 /// @param slab The traversed material and its properties
0064 /// @param m Particle mass
0065 /// @param qOverP Particle charge divided by absolute momentum
0066 /// @param absQ Absolute particle charge
0067 /// @return Gaussian-equivalent sigma for energy loss fluctuations
0068 float computeEnergyLossLandauSigma(const MaterialSlab& slab, float m,
0069                                    float qOverP, float absQ);
0070 
0071 /// Compute the full with half maximum of landau energy loss distribution
0072 ///
0073 /// @param slab The traversed material and its properties
0074 /// @param m Particle mass
0075 /// @param qOverP Particle charge divided by absolute momentum
0076 /// @param absQ Absolute particle charge
0077 /// @return Full width half maximum of the Landau distribution
0078 float computeEnergyLossLandauFwhm(const MaterialSlab& slab, float m,
0079                                   float qOverP, float absQ);
0080 
0081 /// Compute q/p Gaussian-equivalent sigma due to ionisation loss fluctuations.
0082 ///
0083 /// @copydoc computeEnergyLossBethe
0084 float computeEnergyLossLandauSigmaQOverP(const MaterialSlab& slab, float m,
0085                                          float qOverP, float absQ);
0086 
0087 /// Compute the mean energy loss due to radiative effects at high energies.
0088 ///
0089 /// @param slab      The traversed material and its properties
0090 /// @param absPdg    Absolute particle type PDG identifier
0091 /// @param m         Particle mass
0092 /// @param qOverP    Particle charge divided by absolute momentum
0093 /// @param absQ      Absolute particle charge
0094 ///
0095 /// This computes the mean energy loss -dE(x) using an approximative formula.
0096 /// Bremsstrahlung is always included; direct e+e- pair production and
0097 /// photo-nuclear interactions only for muons.
0098 /// @return Mean radiative energy loss through the material slab
0099 float computeEnergyLossRadiative(const MaterialSlab& slab, PdgParticle absPdg,
0100                                  float m, float qOverP, float absQ);
0101 /// Derivative of the mean radiative energy loss with respect to q/p.
0102 ///
0103 /// @copydoc computeEnergyLossRadiative
0104 /// @return Derivative of radiative energy loss with respect to q/p
0105 float deriveEnergyLossRadiativeQOverP(const MaterialSlab& slab,
0106                                       PdgParticle absPdg, float m, float qOverP,
0107                                       float absQ);
0108 
0109 /// Compute the combined mean energy loss.
0110 ///
0111 /// @param slab      The traversed material and its properties
0112 /// @param absPdg    Absolute particle type PDG identifier
0113 /// @param m         Particle mass
0114 /// @param qOverP    Particle charge divided by absolute momentum
0115 /// @param absQ      Absolute particle charge
0116 ///
0117 /// This computes the combined mean energy loss -dE(x) including ionisation and
0118 /// radiative effects. The computations are valid over a wide range of particle
0119 /// energies.
0120 /// @return Combined mean energy loss through the material slab
0121 float computeEnergyLossMean(const MaterialSlab& slab, PdgParticle absPdg,
0122                             float m, float qOverP, float absQ);
0123 /// Derivative of the combined mean energy loss with respect to q/p.
0124 ///
0125 /// @copydoc computeEnergyLossMean
0126 /// @return Derivative of combined mean energy loss with respect to q/p
0127 float deriveEnergyLossMeanQOverP(const MaterialSlab& slab, PdgParticle absPdg,
0128                                  float m, float qOverP, float absQ);
0129 
0130 /// Compute the combined most probably energy loss.
0131 ///
0132 /// @copydoc computeEnergyLossMean
0133 /// @return Combined most probable energy loss through the material slab
0134 float computeEnergyLossMode(const MaterialSlab& slab, PdgParticle absPdg,
0135                             float m, float qOverP, float absQ);
0136 /// Derivative of the combined most probable energy loss with respect to q/p.
0137 ///
0138 /// @copydoc computeEnergyLossMean
0139 /// @return Derivative of combined most probable energy loss with respect to q/p
0140 float deriveEnergyLossModeQOverP(const MaterialSlab& slab, PdgParticle absPdg,
0141                                  float m, float qOverP, float absQ);
0142 
0143 /// Compute the core width of the projected planar scattering distribution.
0144 ///
0145 /// @param slab      The traversed material and its properties
0146 /// @param absPdg    Absolute particle type PDG identifier
0147 /// @param m         Particle mass
0148 /// @param qOverP    Particle charge divided by absolute momentum
0149 /// @param absQ      Absolute particle charge
0150 /// @return Core width of the scattering distribution
0151 float computeMultipleScatteringTheta0(const MaterialSlab& slab,
0152                                       PdgParticle absPdg, float m, float qOverP,
0153                                       float absQ);
0154 
0155 /// Approximate the core width of the projected planar scattering distribution
0156 /// with highland's formula.
0157 ///
0158 /// @param xOverX0  The thickness of the material in radiation lengths
0159 /// @return         The approximate scattering angle times momentum in radians*GeV
0160 float approximateHighlandScattering(float xOverX0);
0161 
0162 }  // namespace Acts