Optical physics¶
As with EM physics, the optical physics models in Celeritas are closely related to those in Geant4. Unlike Geant4, optical photon generation and stepping in Celeritas takes place in a drastically different manner.
Here is a flowchart depicting the creation of optical photons in the optical tracking loop:
flowchart TB gun["Gun or external"] geant4-direct["Direct Geant4 offload"] geant4-scint["Geant4 scintillation"] geant4-ceren["Geant4 cherenkov"] classDef not-impl stroke-width:2px,stroke-dasharray: 5 5 class geant4-direct,geant4-scint,geant4-ceren not-impl subgraph main-celeritas-loop["Main celeritas loop"] offload-gather scintillation-offload cherenkov-offload end offload-gather -->|pre-step| scintillation-offload offload-gather -->|pre-step| cherenkov-offload subgraph photon-gen["Optical photon generation"] scintillation-gen cherenkov-gen end scintillation-offload -->|generator dist| scintillation-gen cherenkov-offload -->|generator dist| cherenkov-gen geant4-scint -->|generator dist| scintillation-gen geant4-ceren -->|generator dist| cherenkov-gen photons["Optical tracking loop"] gun -->|inits| photons geant4-direct -->|inits| photons scintillation-gen -->|inits| photons cherenkov-gen -->|inits| photons
Optical materials¶
Each “physics material” (see celeritas::ImportPhysMaterial
) can
have an associated “optical material.” When importing from Geant4, each optical
material corresponds to a single “geometry material” (see
celeritas::ImportGeoMaterial
) that has a RINDEX
material
property, and all physical materials that use the geometry material share
the same optical material.
-
class MaterialParams : public celeritas::ParamsDataInterface<MaterialParamsData>¶
Manage properties for optical materials.
Each “physics material” (the combination of a geometry-specified material and a user-specified region) can map to a single optical material. Many materials—especially those in mechanical structures and components not optically connected to the detector—may have no optical properties at all.
Optical volume properties are imported from Geant4 into the
ImportData
container. Theceleritas::MaterialParams
class loads the mapping ofPhysMatId
toOptMatId
and makes it accessible via the main loop’s material view. By combining that with theGeoMaterialParams
which maps volumes toPhysMatId
, this class maps the geometry volumes to optical materials for use in the optical tracking loop.When surface models are implemented, surface properties will also be added to this class.
Offloading¶
During the main stepping loop, the celeritas::OpticalCollector
class adds a pre-step hook to store each track’s speed, position, time, and
material; at the end of the step, the track’s updated properties and
within-step energy distribution are used to “offload” optical photons by
generating distribution parameters to be sampled in the stepping loop. The
generator distribution data is analogous to the “genstep” data structure in
Opticks [Blyth, 2019].
-
class OpticalCollector¶
Generate and track optical photons.
This class is the interface between the main stepping loop and the photon stepping loop and constructs kernel actions for:
gathering the pre-step data needed to generate the optical distributions,
generating the scintillation and Cherenkov optical distributions at the end of the step, and
launching the photon stepping loop.
The photon stepping loop will then generate optical primaries.
The “collector” (TODO: rename?) will “own” the optical state data and optical params since it’s the only thing that launches the optical stepping loop.
- Todo:
This doesn’t do anything but set up the optical tracking loop: move to
setup
namespace
-
class CherenkovOffload¶
Sample the number of Cherenkov photons to be generated.
This populates the
GeneratorDistributionData
used by theCherenkovGenerator
to generate optical photons using post-step and cached pre-step data.The number of photons is sampled from a Poisson distribution with a mean
\[ \langle n \rangle = \ell_\text{step} \difd{N}{x} \]
-
class ScintillationOffload¶
Sample the number of scintillation photons to be generated.
This populates the
GeneratorDistributionData
used by theScintillationGenerator
to generate optical photons using post-step and cached pre-step data.The mean number of photons is a product of the energy deposition and a material-dependent yield fraction (photons per MeV). The actual number of photons sampled is determined by sampling:
for large (n > 10) mean yield, from a Gaussian distribution with a material-dependent spread, or
for small yields, from a Poisson distribution.
-
struct GeneratorDistributionData¶
Input data for sampling optical photons.
This contains all the data needed to sample optical photons directly generated by tracks in the main stepping loop.
Generating¶
Depending on the process that emitted a photon, the generator classes sample from the distribution of photons specified by the generator distribution to create optical photon initializers which are analogous to secondary particles in Geant4.
-
class CherenkovGenerator¶
Sample Cherenkov photons from a generator distribution.
Cherenkov radiation is emitted when a charged particle passes through a dielectric medium faster than the speed of light in that medium. Photons are emitted on the surface of a cone, with the cone angle, \( \theta \), measured with respect to the incident particle direction. As the particle slows down, the cone angle and the number of emitted photons decreases and the frequency of the emitted photons increases.
An incident charged particle with speed \( \beta \) will emit photons at an angle \( \theta \) given by \( \cos\theta = 1 / (\beta n) \) where \( n \) is the index of refraction of the matarial. The photon energy \( \epsilon \) is sampled from the PDF
\[ f(\epsilon) = \left[1 - \frac{1}{n^2(\epsilon)\beta^2}\right] \]
-
class ScintillationGenerator¶
Sample scintillation photons from optical property data and step data.
The optical photons are generated evenly along the step and are emitted uniformly over the entire solid angle with a random linear polarization. The photon energy is calculated by the scintillation emission wavelength
\[ E = \frac{hc}{\lambda}, \]Note
This performs the same sampling routine as in G4Scintillation class of the Geant4 release 11.2 with some modifications.
Volumetric processes¶
Like other particles, optical photons undergo stochastic interactions inside optical materials.
-
class AbsorptionModel : public celeritas::optical::Model¶
Set up and launch the optical absorption model interaction.
-
class RayleighModel : public celeritas::optical::Model¶
Set up and launch the optical Rayleigh scattering model interaction.
-
class RayleighMfpCalculator¶
Calculate the Rayleigh MFP for a given set of material properties.
Uses the Einstein-Smoluchowski formula to calculate the mean free path at a given energy. In [Landau and L\'ıfsh\'ıts, 1884] , the mean free path is given by equation (120.2):
\[ l^{-1} = \frac{1}{6\pi} k^4 \rho k_B T \left(\frac{\partial \rho}{\partial P}\right)_T \left(\frac{\partial \varepsilon}{\partial \rho}\right)_T^2 \]\[ \left(\frac{\partial \rho}{\partial P}\right)_T = \rho \beta_T. \]\[ \frac{\varepsilon - 1}{\varepsilon + 2} = A \rho \]\[ \left(\frac{\partial \varepsilon}{\partial \rho}\right)_T = \frac{(\varepsilon - 1)(\varepsilon + 2)}{3\rho}. \]\[ l^{-1} = \frac{k_B T \beta_T}{6\pi} \left(\frac{E}{\hbar c}\right)^4 \left[ \frac{(\varepsilon - 1)(\varepsilon + 2)}{3} \right]^2. \]The scale factor is a unitless user customizable factor that is multiplied to the inverse MFP.
Surface processes¶
Optical photons also have special interactions at material boundaries. These boundaries are imported from Geant4 using the “skin” (boundary between two logical volumes) and “border” (the one-sided boundary exiting one physical volume and entering another) surface definitions that specify properties of a volume’s outer surface or of the surface between two specific volumes.
Given a pair of (old, new) physical volumes (P0, P1) corresponding to logical volumes (L0, L1), the surface properties are determined in decreasing precedence:
Ordered (P0, P1) border surface
Skin surface of L1 if it’s the daughter of L0
Skin surface of L0
Skin surface of L1