Physics

struct Physics

Set up physics options.

Todo:

Move optical and hadronic physics options from celeritas::GeantPhysicsOptions

Move particle data from celeritas::ImportParticle

Add function for injecting user processes for celeritas::PhysicsParams

Public Members

std::optional<EmPhysics> em = {std::in_place}

Enable electromagnetic physics.

std::optional<OpticalPhysics> optical

Enable optical photon physics.

std::optional<HadronicPhysics> hadronic

Enable hadronic physics.

std::optional<DecayPhysics> decay

Enable decay physics.

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 inp classes. The user_processes can be set externally or via FrameworkInput.geant.ignore_processes.

Public Members

std::optional<BremsProcess> brems = {std::in_place}

Bremsstrahlung process.

std::optional<PairProductionProcess> pair_production = {std::in_place}

Electron+positron pair production process.

Decay

struct DecayPhysics

Decay processes and options.

Hadronic

struct HadronicPhysics

Hadronic physics processes and options.

This can be used to enable or set up Geant4 hadronic physics.

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.

Optical photon generation

Todo:

Replace with a mapping of volume to ScintillationPhysics or CherenkovPhysics

bool cherenkov = {true}

Generate Cherenkov photons.

bool scintillation = {true}

Generate scintillation photons.

Public Functions

inline explicit operator bool() const

Whether the data are assigned.

Celeritas’ SurfacePhysics implementation is designed differently from Geant4 and is meant to reduce code branching. In Geant4 one single model (e.g. Unified) encompasses interface type (e.g. dielectric-dielectric), multiple reflection mechanisms (specular spike, specular lobe, etc.), and surface roughness types (polished or Gaussian). Celeritas describes an optical surface based on its interface type, the possible reflection mechanisms it can undergo, its roughness, and other parameters, such as detector efficiency in case it is a scoring surface for an optical detector such as a PMT or SiPM. A specific Geant4 model (e.g. Unified) is simply a specific combination of such characteristics. This “model unfolding” leads to a less simple input definition compared to Geant4, but allows for a more general surface definition system. This leads to better extensibility and reduces kernel size/complexity on the GPU.

struct SurfacePhysics

Surface physics definition.

Maps all optical surfaces with interaction models and surface parameters.

Public Functions

inline explicit operator bool() const

Whether the data are assigned.

Processes

struct BremsProcess

Construct a physics process for bremsstrahlung.

Models

struct SeltzerBergerModel

Seltzer-Berger bremsstrahlung model.

Todo:

Move sb_data from celeritas::ImportData here.

struct RelBremsModel

Relativistic bremsstrahlung model.

Public Members

bool enable_lpm = {true}

Account for LPM effect at very high energies.

struct MuBremsModel

Muon bremsstrahlung model.