Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 08:54:44

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/inp/Physics.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <optional>
0010 #include <string>
0011 #include <vector>
0012 
0013 #include "corecel/Types.hh"
0014 #include "celeritas/Types.hh"
0015 #include "celeritas/phys/AtomicNumber.hh"
0016 
0017 #include "PhysicsProcess.hh"
0018 #include "ProcessBuilder.hh"
0019 
0020 namespace celeritas
0021 {
0022 namespace inp
0023 {
0024 //---------------------------------------------------------------------------//
0025 /*!
0026  * Electromagnetic physics processes and options.
0027  *
0028  * \todo The ProcessBuilder is the "general" process builder type and should be
0029  * refactored once import data is moved into the `inp` classes. The \c
0030  * user_processes can be set externally or via
0031  * \c FrameworkInput.geant.ignore_processes.
0032  */
0033 struct EmPhysics
0034 {
0035     //! Bremsstrahlung process
0036     std::optional<BremsProcess> brems{std::in_place};
0037     //! Electron+positron pair production process
0038     std::optional<PairProductionProcess> pair_production{std::in_place};
0039 
0040     //!@{
0041     //! \name Energy loss and slowing down
0042 
0043     // TODO: currently eloss fluctuations are set up via geant importer, then
0044     // read into ImportEmParams
0045 #if 0
0046      //! Energy loss fluctuations
0047      bool eloss_fluct{true};
0048 #endif
0049     //
0050     //!@}
0051 
0052     //!
0053     ProcessBuilderMap user_processes;
0054 };
0055 
0056 //---------------------------------------------------------------------------//
0057 /*!
0058  * Optical physics processes and options.
0059  */
0060 struct OpticalPhysics
0061 {
0062 };
0063 
0064 //---------------------------------------------------------------------------//
0065 /*!
0066  * Hadronic physics processes and options.
0067  *
0068  * This can be used to enable or set up Geant4 hadronic physics.
0069  */
0070 struct HadronicPhysics
0071 {
0072 };
0073 
0074 //---------------------------------------------------------------------------//
0075 /*!
0076  * Decay processes and options.
0077  */
0078 struct DecayPhysics
0079 {
0080 };
0081 
0082 //---------------------------------------------------------------------------//
0083 /*!
0084  * Set up physics options.
0085  *
0086  * \todo Move optical and hadronic physics options from
0087  *       \c celeritas::GeantPhysicsOptions
0088  * \todo Move particle data from \c celeritas::ImportParticle
0089  * \todo Add function for injecting user processes for
0090  *       \c celeritas::PhysicsParams
0091  */
0092 struct Physics
0093 {
0094     //! Enable electromagnetic physics
0095     std::optional<EmPhysics> em{std::in_place};
0096 
0097     //! Enable optical photon physics
0098     std::optional<OpticalPhysics> optical;
0099 
0100     //! Enable hadronic physics
0101     std::optional<HadronicPhysics> hadronic;
0102 
0103     //! Enable decay physics
0104     std::optional<DecayPhysics> decay;
0105 };
0106 
0107 //---------------------------------------------------------------------------//
0108 }  // namespace inp
0109 }  // namespace celeritas