Optical Properties
Optical properties are attached to a GMaterial instance.
They enable Geant4 to simulate Cherenkov radiation, scintillation, Rayleigh scattering,
and photon boundary interactions (reflection, refraction, absorption).
Several energy-dependent quantities can be defined:
photonEnergy — [required]
photonEnergy is the energy axis for all other optical properties. It must be set whenever
any optical field is used:
mat.photonEnergy = "2.0*eV 3.0*eV 4.0*eV 5.0*eV"
Values are space-separated strings with Geant4 units (*eV, *keV, *MeV).
Values must be in strictly increasing order — Geant4 interpolates between them and
will produce undefined behaviour if the energy axis is unsorted.
To convert from photon wavelength to energy:
E (eV) = 1240 / λ (nm)
For example, 400 nm (blue) ≈ 3.1 eV; 700 nm (red) ≈ 1.77 eV.
Index of refraction
Set indexOfRefraction to enable Cherenkov radiation and optical photon refraction at boundaries.
mat.photonEnergy = "2.0*eV 3.0*eV 4.0*eV 5.0*eV"
mat.indexOfRefraction = "1.458 1.466 1.476 1.490"
Maps to the Geant4 property RINDEX.
See the Cherenkov example for a complete setup using three gas radiators with different refractive indices.
Absorption length
absorptionLength controls how far optical photons travel before being absorbed.
Values carry length units (*m, *cm, *mm):
mat.absorptionLength = "3*m 3*m 3*m 3*m"
Maps to the Geant4 property ABSLENGTH
Scintillation properties
Scintillators emit optical photons when charged particles deposit energy. Geant4 models two emission time components: fast (prompt) and slow (delayed).
Energy-dependent fields
| Field | Geant4 key | Description |
|---|---|---|
fastcomponent |
SCINTILLATIONCOMPONENT1 | Relative emission spectrum of the fast component |
slowcomponent |
SCINTILLATIONCOMPONENT2 | Relative emission spectrum of the slow component |
mat.photonEnergy = "2.0*eV 2.5*eV 3.0*eV 3.5*eV 4.0*eV"
mat.fastcomponent = "1.0 0.9 0.8 0.7 0.6"
mat.slowcomponent = "0.5 0.4 0.3 0.2 0.1"
Values are relative (not absolute); Geant4 normalises them internally.
Scalar fields
| Field | Geant4 key | Unit | Description |
|---|---|---|---|
scintillationyield |
SCINTILLATIONYIELD | photons/MeV | Mean light yield per deposited MeV |
resolutionscale |
RESOLUTIONSCALE | — | Width of the photon-count distribution: values < 1 give sub-Poisson (Fano factor); values > 1 model impurity-broadened crystals |
fasttimeconstant |
SCINTILLATIONTIMECONSTANT1 | ns | Decay time constant of the fast component |
slowtimeconstant |
SCINTILLATIONTIMECONSTANT2 | ns | Decay time constant of the slow component |
yieldratio |
SCINTILLATIONYIELD1 | — | Fraction of total yield emitted by the fast component (0–1) |
birksConstant |
— | mm/MeV | Birks quenching parameter (see note below) |
Note
Scalar properties set to 0 are silently skipped — Geant4’s AddConstProperty is not called.
Use a small non-zero value if you intentionally want to set a property to zero.
Note
birksConstant is applied via G4Material::GetIonisation()->SetBirksConstant(), not through
the optical properties table. It quenches the scintillation yield for high-dE/dx particles
(Birks’ law).
Complete NaI-like scintillator
scint = GMaterial("my_scintillator")
scint.density = 3.67
scint.addNAtoms("Na", 1)
scint.addNAtoms("I", 1)
scint.photonEnergy = "2.0*eV 2.5*eV 3.0*eV 3.5*eV 4.0*eV"
scint.fastcomponent = "1.0 0.9 0.8 0.7 0.6"
scint.slowcomponent = "0.5 0.4 0.3 0.2 0.1"
scint.scintillationyield = 1000
scint.resolutionscale = 1.0
scint.fasttimeconstant = 6
scint.slowtimeconstant = 88
scint.yieldratio = 0.8
scint.birksConstant = 0.00152
scint.publish(cfg)
Reflectivity and efficiency
These properties model the behaviour of optical photons at a dielectric–metal boundary
(e.g. a mirror or a PMT photocathode). At such a boundary there is no refraction; the photon is
either reflected or absorbed with efficiency.
| Field | Geant4 key | Description |
|---|---|---|
reflectivity |
REFLECTIVITY | Fraction of photons reflected |
efficiency |
EFFICIENCY | Absorption probability for photons that are not reflected; models quantum efficiency for photosensors |
mat.reflectivity = "0.85 0.87 0.90 0.88 0.85"
mat.efficiency = "0.20 0.22 0.25 0.23 0.20"
These properties are most useful when the material is assigned to an optical surface
(G4OpticalSurface) defined in the geometry. For bulk material, absorptionLength is more
appropriate.
Rayleigh scattering
rayleigh defines the Rayleigh scattering attenuation length as a function of photon energy.
Values carry length units:
mat.rayleigh = "50*cm 45*cm 40*cm 35*cm 30*cm"
Maps to the Geant4 property RAYLEIGH
Physics list requirement
Optical photon tracking requires an optical physics constructor. Add G4OpticalPhysics to the
physics list in the YAML file:
phys_list: FTFP_BERT + G4OpticalPhysics
phys_list
The physics list can be selected using the option
gemc -phys_list <value>where
<value>can be a combination of the Geant4 physics constructors separated by the+sign. For examplegemc -phys_list="FTFP_BERT + G4NeutronCrossSectionXS"To see a list of the available Geant4 constructors:
gemc -showPhysics
Simulation
Working examples
- Materials example — scintillation and index-of-refraction definitions side by side
- Cherenkov example — full optical simulation with three gas radiators