Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-13 08:53:27

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