Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:31:16

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/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 = Quantity<UnitDivide<units::Mev, units::Native>>;
0024 
0025 //! Migdal's constant used for Bremsstrahlung [len^3]
0026 CELER_CONSTEXPR_FUNCTION real_type 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 S. Klein, Suppression of bremsstrahlung and pair
0042  * production due to environmental factors, Rev. Mod. Phys. 71 (1999)
0043  * 1501-1538). The Geant4 Physics Reference Manual (Eq. 10.17) has an
0044  * extra factor of two in the denominator.
0045  */
0046 CELER_CONSTEXPR_FUNCTION MevPerLen lpm_constant()
0047 {
0048     using namespace constants;
0049 
0050     constexpr real_type 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 the SeltzerBerger model - TODO: make this configurable
0062 CELER_CONSTEXPR_FUNCTION units::MevEnergy seltzer_berger_upper_limit()
0063 {
0064     return units::MevEnergy{1e3};  //! 1 GeV
0065 }
0066 
0067 //! Maximum energy for EM models to be valid
0068 CELER_CONSTEXPR_FUNCTION units::MevEnergy high_energy_limit()
0069 {
0070     return units::MevEnergy{1e8};  //! 100 TeV
0071 }
0072 
0073 //---------------------------------------------------------------------------//
0074 }  // namespace detail
0075 }  // namespace celeritas