Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-07 10:11:32

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/g4/SupportedEmStandardPhysics.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <G4VPhysicsConstructor.hh>
0010 
0011 #include "celeritas/ext/GeantPhysicsOptions.hh"
0012 
0013 class G4ParticleDefinition;
0014 
0015 namespace celeritas
0016 {
0017 //---------------------------------------------------------------------------//
0018 /*!
0019  * Construct G4EmStandardPhysics processes that are implemented in Celeritas.
0020  *
0021  * This physics list is targeted at HEP experiments and reproduces most of the
0022  * Geant4 G4EmStandardPhysics.
0023  *
0024  * Limitations:
0025  * - No support for generic ions
0026  * - No hadronic EM interactions
0027  * - Wentzel VI MSC is not supported
0028  * - No polarized gamma processes
0029  *
0030  * Electron/positron processes:
0031  *
0032  * | Processes                    | Model classes                |
0033  * | ---------------------------- | ---------------------------- |
0034  * | Pair annihilation            | G4eeToTwoGammaModel          |
0035  * | Ionization                   | G4MollerBhabhaModel          |
0036  * | Bremsstrahlung (low E)       | G4SeltzerBergerModel         |
0037  * | Bremsstrahlung (high E)      | G4eBremsstrahlungRelModel    |
0038  * | Coulomb scattering           | G4eCoulombScatteringModel    |
0039  * | Multiple scattering (low E)  | G4UrbanMscModel              |
0040  * | Multiple scattering (high E) | G4WentzelVIModel             |
0041  * | Electro nuclear              | G4ElectroVDNuclearModel      |
0042  *
0043  * Gamma processes:
0044  *
0045  * | Processes            | Model classes                 |
0046  * | -------------------- | ----------------------------- |
0047  * | Compton scattering   | G4KleinNishinaCompton         |
0048  * | Photoelectric effect | G4LivermorePhotoElectricModel |
0049  * | Rayleigh scattering  | G4LivermoreRayleighModel      |
0050  * | Gamma conversion     | G4PairProductionRelModel      |
0051  * | Gamma nuclear        | QGSP/Bertini/LEND
0052  *
0053  * If the \c gamma_general option is enabled, we create a single unified
0054  * \c G4GammaGeneralProcess process, which embeds these other processes and
0055  * calculates a combined total cross section. It's faster in Geant4 but
0056  * shouldn't result in statistically different answers.
0057  *
0058  * Muon processes are disabled by default:
0059  *
0060  * | Processes                    | Model classes                |
0061  * | ---------------------------- | ---------------------------- |
0062  * | Pair production              | G4MuPairProductionModel      |
0063  * | Ionization (low E, mu-)      | G4ICRU73QOModel              |
0064  * | Ionization (low E, mu+)      | G4BraggModel                 |
0065  * | Ionization (high E)          | G4MuBetheBlochModel          |
0066  * | Bremsstrahlung               | G4MuBremsstrahlungModel      |
0067  * | Coulomb scattering           | G4eCoulombScatteringModel    |
0068  * | Multiple scattering          | G4WentzelVIModel             |
0069  *
0070  * \warning For muon-catalyzed fusion physics, the \c G4MuonMinusAtomicCapture
0071  * , which is a \c G4VRestProcess with \c G4ProcessType::fHadronic , is added
0072  * for \c mu- and is the exception to the EM-only rule. It does not require
0073  * importing any cross section tables, but its inclusion enables muCF physics.
0074  * This design decision may need revisiting in the future.
0075  *
0076  * \note Prior to version 11.1.0, Geant4 used the \c G4BetheBlochModel for muon
0077  * ionization between 200 keV and 1 GeV and the \c G4MuBetheBlochModel above 1
0078  * GeV. Since version 11.1.0, the \c G4MuBetheBlochModel is used for all
0079  * energies above 200 keV.
0080  */
0081 class SupportedEmStandardPhysics : public G4VPhysicsConstructor
0082 {
0083   public:
0084     //!@{
0085     //! \name Type aliases
0086     using Options = GeantPhysicsOptions;
0087     //!@}
0088 
0089   public:
0090     // Set up during construction
0091     explicit SupportedEmStandardPhysics(Options const& options);
0092 
0093     // Set up minimal EM particle list
0094     void ConstructParticle() override;
0095     // Set up process list
0096     void ConstructProcess() override;
0097 
0098   private:
0099     Options options_;
0100 
0101     // Add EM processes for photons
0102     void add_gamma_processes();
0103     // Add EM processes for electrons and positrons
0104     void add_e_processes(G4ParticleDefinition* p);
0105     // Add EM processes for muons
0106     void add_mu_processes(G4ParticleDefinition* p);
0107 };
0108 
0109 //---------------------------------------------------------------------------//
0110 }  // namespace celeritas