Physics¶
Note
For discussion of model and process naming, see issue 1562 .
The selection and data used to create physics classes will be defined underneath this struct.
-
struct Physics
Set up physics options.
- Todo:
Move optical and hadronic physics options from
celeritas::GeantPhysicsOptionsMove particle data from
celeritas::ImportParticleAdd function for injecting user processes for
celeritas::PhysicsParamsMove
OpticalGeneratortoOpticalGenPhysicsor elsewhere
- Todo:
How to better group these, especially when adding hadronic/photonuclear/decay/…?
Public Members
-
EmPhysics em
Physics that applies to offloaded EM particles.
-
MucfPhysics mucf
Muon-catalyzed fusion physics.
-
OpticalPhysics optical
Physics for optical photons.
Electromagnetic¶
-
struct EmPhysics
Electromagnetic physics processes and options.
- Todo:
The ProcessBuilder is the “general” process builder type and should be refactored once import data is moved into the
inpclasses. Theuser_processescan be set externally or viaFrameworkInput.geant.ignore_processes.
Public Members
-
BremsstrahlungProcess brems
Bremsstrahlung process.
-
PairProductionProcess pair_production
Electron+positron pair production process.
-
PhotoelectricProcess photoelectric
Photoelectric effect.
-
AtomicRelaxation atomic_relaxation
Atomic relaxation.
-
ProcessBuilderMap user_processes
Add custom user processes.
Optical¶
Optical photon generation is a part of the standard stepping loop that manages
EM, decay, and hadronic physics, but its transport has its own separate
stepping loop, where surface physics is the most complex part. Therefore, the
OpticalPhysics input includes optical photon generation processes (such as
Cherenkov and scintillation) and surface physics information. The latter
describing how optical photons should interact with it.
-
struct OpticalPhysics
Optical physics processes, options, and surface definitions.
If scintillation or Cherenkov is enabled, optical photons will be generated.
- Todo:
Move cherenkov/scintillation to a OpticalGenPhysics class.
Optical photon generation from EM particles
- Todo:
Replace with physics input data
-
bool cherenkov = {false}
Generate Cherenkov photons.
-
bool scintillation = {false}
Generate scintillation photons.
Public Functions
-
inline explicit operator bool() const
Whether optical physics is enabled.
Bulk physics¶
-
struct OpticalBulkPhysics
Optical physics for bulk materials.
Each optical material can have one or more model that applies to it.
Public Functions
-
inline explicit operator bool() const
Whether optical physics is enabled.
Public Members
-
OpticalBulkModel<OpticalBulkAbsorption, IMC::absorption> absorption
Absorption models for all materials.
-
OpticalBulkModel<ImportMie, IMC::mie> mie
Mie scattering models for materials.
-
OpticalBulkModel<ImportOpticalRayleigh, IMC::rayleigh> rayleigh
Rayleigh scattering models for all materials.
-
OpticalBulkModel<ImportWavelengthShift, IMC::wls> wls
WLS models (TODO: merge into a single WLS with arbitrary components)
-
inline explicit operator bool() const
Surface physics¶
Celeritas’ surface physics implementation is designed differently from Geant4 and is meant to reduce code complexity and improve extensibility. In Geant4, a single model (e.g. “unified”) is a hard-coded combination of:
surface roughness types (e.g., polished or Gaussian),
reflectivity calculation (whether to use a grid or not), and
interaction description (e.g. dielectric-dielectric).
Celeritas separates these out into fully configurable surface physics inputs, so that a given surface ID must be present in three separate surface models. This “model unfolding” leads to a less simple input definition compared to Geant4, but it allows for user-extensible surface physics models. See Optical properties for further details of the importing.
-
struct OpticalSurfacePhysics
Surface physics definition.
Maps all optical surfaces with interaction models and surface parameters.
Interstitial materials are the interstitial materials per geometric surface. The last entry is used as the default surface.
Public Members
-
RoughnessModels roughness
Microfacet distribution models.
-
ReflectivityModels reflectivity
Reflectivity models.
-
InteractionModels interaction
Reflection+refraction+absorption models.
-
RoughnessModels roughness
-
struct GridReflection
Model reflectivity as a user-prescribed function of energy.
As per Geant4 conventions:
Reflectivity is the probability that a photon undergoes its usual surface interaction.
Transmittance is the probability that a photon crosses the surface without change.
Efficiency is the quantum efficiency of a detector at the surface. It is the probability that a photon absorbed will be registered by the detector.
Only reflectivity and transmittance are defined by the user, while the remaining probability is the chance for the photon to be absorbed. If the photon is absorbed and an efficiency grid is defined, then the efficiency probability is used to determine if the photon is detected.
The reflectivity and transmittance grids are sampled together and must sum to between 0 and 1 at every grid point.
The efficiency grid is sampled independently (if provided), and must be in the range [0,1].
-
struct SmearRoughness
Global surface normal with smearing.
Roughness range is \( [0, 1] \), where 0 is specular and 1 is diffuse. This parameter is the complement of the polish as defined in Geant4:
.roughness = 1 - GetPolish();
See
celeritas::optical::SmearRoughnessSampler.Note
This model is used by the GLISUR subroutine in Geant3 and the corresponding “glisur” surface model in Geant4.
Public Members
-
double roughness = {-1}
Scale from 0 = specular to 1 = diffuse.
-
double roughness = {-1}
-
struct GaussianRoughness
Approximate the microfacet normal distributions as Gaussian.
See
celeritas::optical::GaussianRoughnessSampler.Note
This model is used by the “unified” surface model in Geant4.
Public Members
-
double sigma_alpha = {0}
Standard deviation of the microfacet slope distribution.
-
double sigma_alpha = {0}
-
struct ReflectionForm
Parameterization of the UNIFIED reflection model.
The reflection grids store the probability of each angular distribution in the UNIFIED model:
specular_spike: Reflection probability at the average surface normal.specular_lobe: Reflection probability at the micro facet normal.backscatter: Probability of backscattering after reflecting within a deep groove.
The sum of all three parameters must be <= 1 at every grid point, with the remainder being the probability of diffuse scattering.
- Todo:
We could require these to all be on the same energy grid for improved performance and error checking.
Public Members
-
ReflectionGrids reflection_grids
Probability of reflection for each reflection mode.
Public Static Functions
-
static inline ReflectionForm from_spike()
Return a specular spike reflection form.
-
static inline ReflectionForm from_lobe()
Return a specular lobe reflection form.
-
static inline ReflectionForm from_lambertian()
Return a Lambertian (diffuse) reflection form.
-
static inline ReflectionForm from_mode(Mode only_mode)
Construct a reflection form with only one active grid.
-
struct DielectricInteraction
Analytic interactions between dielectric and dielectric or metal materials.
Public Members
-
ReflectionForm reflection
Exiting angular distributions.
-
bool is_metal = {false}
Whether the interface is dielectric-dielectric or dielectric-metal.
Public Static Functions
-
static inline DielectricInteraction from_dielectric(ReflectionForm r)
Return a dielectric-dielectric interaction.
-
static inline DielectricInteraction from_metal(ReflectionForm r)
Return a dielectric-metal interaction.
-
ReflectionForm reflection
Processes¶
-
struct BremsstrahlungProcess
Construct a physics process for bremsstrahlung.
Public Functions
-
inline explicit operator bool() const
TODO: macroscopic xs tables.
Whether process has data and is to be used
Public Members
-
SeltzerBergerModel sb
Lower-energy electron/positron.
-
RelBremsModel rel
High-energy electron/positron.
-
MuBremsModel mu
Muon (-/+)
-
inline explicit operator bool() const
-
struct PairProductionProcess
Construct a physics process for electron/positron pair production.
Public Functions
-
inline explicit operator bool() const
Whether process has data and is to be used.
Public Members
-
BetheHeitlerProductionModel bethe_heitler
Pair production from gammas.
-
MuPairProductionModel mu
Pair production from muons.
-
inline explicit operator bool() const
-
struct PhotoelectricProcess
Construct a physics process for photoelectric effect.
Public Functions
-
inline explicit operator bool() const
Whether process has data and is to be used.
-
inline explicit operator bool() const
-
struct AtomicRelaxation
Emit fluorescence photons/auger electrons from atomic de-excitation.
- Todo:
Since multiple processes can cause the loss of a bound electron, we should have a separate “deexcitation” process that manages this efficiently. (Or perhaps a “generator” class to emit many simultaneously.)
Public Functions
-
inline explicit operator bool() const
True if data is assigned.
Public Members
-
std::map<AtomicNumber, ImportAtomicRelaxation> atomic_xs
Differential cross sections [(log MeV, unitless) -> millibarn].
Models¶
-
struct SeltzerBergerModel
Seltzer-Berger bremsstrahlung model.
Public Functions
-
inline explicit operator bool() const
TODO: microscopic elemental xs tables.
Whether model has data and is to be used
Public Members
-
std::map<AtomicNumber, inp::TwodGrid> atomic_xs
Differential cross sections [(log MeV, unitless) -> millibarn].
-
inline explicit operator bool() const
-
struct RelBremsModel
Relativistic bremsstrahlung model.
Public Functions
-
inline explicit operator bool() const
Whether model has data and is to be used.
Public Members
-
bool enable_lpm = {true}
Account for LPM effect at very high energies.
-
inline explicit operator bool() const
-
struct MuBremsModel
Muon bremsstrahlung model.
Public Functions
-
inline explicit operator bool() const
Whether model has data and is to be used.
-
inline explicit operator bool() const
-
struct BetheHeitlerProductionModel
Bethe-Heitler relativistic pair production from gammas.
Public Functions
-
inline explicit operator bool() const
Whether model has data and is to be used.
-
inline explicit operator bool() const
-
struct MuPairProductionModel
Pair production from muons.
Public Functions
-
inline explicit operator bool() const
True if data is assigned.
Public Members
-
MuPairProductionEnergyTransferTable muppet_table
Grid for sampling the energy of the electron-positron.
-
inline explicit operator bool() const
-
struct LivermorePhotoModel
Livermore photoelectric effect model.
Public Functions
-
inline explicit operator bool() const
Whether model has data and is to be used.
Public Members
-
std::map<AtomicNumber, LivermoreXs> atomic_xs
Tabulated microsopic cross sections [MeV -> b].
-
inline explicit operator bool() const
Grids¶
Tabulated physics data such as cross sections or energy loss are stored on increasing, sorted 1D or 2D grids. Both linear and spline interpolation are supported.
-
struct Grid
A grid of increasing, sorted 1D data.
This is used to store tabulated physics data such as cross sections or energy loss.
Public Static Functions
-
static inline Grid from_constant(double y)
Construct a grid with a constant value for all real numbers.
-
static inline Grid from_constant(double y)
-
struct UniformGrid
A uniform grid of increasing, sorted 1D data.
-
struct TwodGrid
An increasing, sorted 2D grid with node-centered data.
Data is interpolated linearly and indexed as ‘[x][y]’.
-
struct Interpolation
Interpolation options for the physics grids.
orderis only used forpoly_splineinterpolation andbcis only used forcubic_splineinterpolation.- Todo:
Let’s just use “Geant4 spline” and linear interpolation, and maybe it shouldn’t be inside every single grid?
Public Members
-
size_type order = {1}
Polynomial order for spline interpolation.
-
BC bc = {BC::geant}
Boundary conditions for calculating cubic spline second derivatives.