Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-08 09:05:35

0001 //------------------------------ -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file celeritas/em/interactor/detail/PhysicsConstants.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include "corecel/Macros.hh"
0010 #include "corecel/Types.hh"
0011 #include "corecel/math/Algorithms.hh"
0012 #include "corecel/math/Constant.hh"
0013 #include "corecel/math/UnitUtils.hh"
0014 #include "celeritas/Constants.hh"
0015 #include "celeritas/UnitTypes.hh"
0016 
0017 namespace celeritas
0018 {
0019 namespace detail
0020 {
0021 //---------------------------------------------------------------------------//
0022 //! Special partly-natural unit [MeV / len]
0023 using MevPerLen = RealQuantity<UnitDivide<units::Mev, units::Native>>;
0024 
0025 //! Migdal's constant used for Bremsstrahlung [len^3]
0026 CELER_CONSTEXPR_FUNCTION Constant migdal_constant()
0027 {
0028     using namespace constants;
0029 
0030     return 4 * pi * r_electron * ipow<2>(lambdabar_electron);
0031 }
0032 
0033 //---------------------------------------------------------------------------//
0034 /*!
0035  * Landau-Pomeranchuk-Migdal constant [MeV / len].
0036  *
0037  * This is used to calculate the LPM characteristic energy, defined as
0038  * \f$ E_\textrm{LPM} = \frac{\alpha m^2 X_0}{2 h c} \f$, where
0039  * \f$ X_0 \f$ is the radiation length of the material. Note that some papers
0040  * define \f$ E_\textrm{LPM} \f$ as a factor of two smaller and others as a
0041  * factor of 8 larger: see \cite{klein-lpm-1999}.
0042  * The Geant4 Physics Reference Manual (Eq. 10.17) \cite{g4prm} has
0043  * an extra factor of two in the denominator.
0044  */
0045 CELER_CONSTEXPR_FUNCTION MevPerLen lpm_constant()
0046 {
0047     using namespace constants;
0048 
0049     constexpr auto electron_mass_csq = electron_mass * ipow<2>(c_light);
0050 
0051     return native_value_to<MevPerLen>(alpha_fine_structure
0052                                       * ipow<2>(electron_mass_csq)
0053                                       / (2 * h_planck * c_light));
0054 }
0055 
0056 //---------------------------------------------------------------------------//
0057 // Constant functions for model limits
0058 //---------------------------------------------------------------------------//
0059 
0060 //! Maximum energy for EM models to be valid
0061 CELER_CONSTEXPR_FUNCTION units::MevEnergy high_energy_limit()
0062 {
0063     return units::MevEnergy{1e8};  //! 100 TeV
0064 }
0065 
0066 //---------------------------------------------------------------------------//
0067 }  // namespace detail
0068 }  // namespace celeritas