From GATE 9 to 10 - Example Optical Physics#

This section walks you through Gate 9 and Gate 10 versions of a simulation file used to create optical transport dataset for training OptiGAN.

Geometry#

Gate 9#

/gate/world/geometry/setXLength       10. cm
/gate/world/geometry/setYLength       10. cm
/gate/world/geometry/setZLength       15. cm
/gate/world/setMaterial               Air

Gate 10#

sim.world.size = [10 * cm, 10 * cm, 15 * cm]

The material of the world volume is set to ‘Air’ by default.

Gate 9#

/gate/world/daughters/name                      OpticalSystem
/gate/world/daughters/insert                    box
/gate/OpticalSystem/geometry/setXLength         10. cm
/gate/OpticalSystem/geometry/setYLength         10. cm
/gate/OpticalSystem/geometry/setZLength         14.0 cm
/gate/OpticalSystem/placement/setTranslation    0 0 0.0 cm
/gate/OpticalSystem/setMaterial                 Air

Gate 10#

optical_system = sim.add_volume("Box", "optical_system")
optical_system.size = [10 * cm, 10 * cm, 14 * cm]
optical_system.material = "G4_AIR"
optical_system.translation = [0 * cm, 0 * cm, 0 * cm]

Gate 9#

/gate/OpticalSystem/daughters/name              crystal
/gate/OpticalSystem/daughters/insert            box
/gate/crystal/geometry/setXLength               3.0 mm
/gate/crystal/geometry/setYLength               3.0 mm
/gate/crystal/geometry/setZLength               3.0 mm
/gate/crystal/placement/setTranslation          0 0 10 mm
/gate/crystal/setMaterial                       BGO

Gate 10#

crystal = sim.add_volume("Box", "crystal")
crystal.mother = optical_system.name
crystal.size = [3 * mm, 3 * mm, 20 * mm]
crystal.translation = [0 * mm, 0 * mm, 10 * mm]
crystal.material = "BGO"

Gate 9#

/gate/OpticalSystem/daughters/name              grease
/gate/OpticalSystem/daughters/insert            box
/gate/grease/geometry/setXLength                3.0 mm
/gate/grease/geometry/setYLength                3.0 mm
/gate/grease/geometry/setZLength                0.015 mm
/gate/grease/setMaterial                        Epoxy
/gate/grease/placement/setTranslation           0 0 20.0075 mm

Gate 10#

grease = sim.add_volume("Box", "grease")
grease.mother = optical_system.name
grease.size = [3 * mm, 3 * mm, 0.015 * mm]
grease.material = "Epoxy"
grease.translation = [0 * mm, 0 * mm, 20.0075 * mm]

Gate 9#

/gate/OpticalSystem/daughters/name              pixel
/gate/OpticalSystem/daughters/insert            box
/gate/pixel/geometry/setXLength                 3 mm
/gate/pixel/geometry/setYLength                 3 mm
/gate/pixel/geometry/setZLength                 0.1 mm
/gate/pixel/setMaterial                         SiO2
/gate/pixel/placement/setTranslation            0 0 20.065 mm

Gate 10#

pixel = sim.add_volume("Box", "pixel")
pixel.mother = optical_system.name
pixel.size = [3 * mm, 3 * mm, 0.1 * mm]
pixel.material = "SiO2"
pixel.translation = [0 * mm, 0 * mm, 20.065 * mm]

Physics#

Gate 9#

/gate/physics/addPhysicsList emstandard_opt4
/gate/physics/addPhysicsList optical

/gate/physics/addProcess Scintillation
/gate/physics/addProcess Cerenkov e+
/gate/physics/addProcess Cerenkov e-

/gate/physics/Electron/SetCutInRegion   world 10 mm
/gate/physics/Positron/SetCutInRegion   world 10 um
/gate/physics/Electron/SetCutInRegion   crystal 10 um
/gate/physics/Positron/SetCutInRegion   crystal 10 um

/gate/physics/processList Enabled
/gate/physics/processList Initialized

Gate 10#

sim.physics_manager.physics_list_name = "G4EmStandardPhysics_option4"

# This also includes Scintillation and Cerenkov processes.
sim.physics_manager.special_physics_constructors.G4OpticalPhysics = True

sim.physics_manager.set_production_cut("world", "electron", 10 * mm)
sim.physics_manager.set_production_cut("world", "positron", 10 * um)
sim.physics_manager.set_production_cut("crystal", "electron", 10 * um)
sim.physics_manager.set_production_cut("crystal", "positron", 10 * um)

# In Gate 10, enery range limits should be set like this for scintillation.
# Reason for this is unknown.
sim.physics_manager.energy_range_min = 10 * eV
sim.physics_manager.energy_range_max = 1 * MeV

Optical Surfaces#

Gate 9#

/gate/crystal/surfaces/name                        surface1
/gate/crystal/surfaces/insert                      OpticalSystem
/gate/crystal/surfaces/surface1/setSurface         Customized3_LUT

Gate 10#

opt_surf_optical_system_to_crystal = sim.physics_manager.add_optical_surface(
    volume_from="optical_system",
    volume_to="crystal",
    g4_surface_name="Customized3_LUT",
)

Gate 9#

/gate/OpticalSystem/surfaces/name                  surface2
/gate/OpticalSystem/surfaces/insert                crystal
/gate/OpticalSystem/surfaces/surface2/setSurface   Customized3_LUT

Gate 10#

opt_surf_crystal_to_optical_system = sim.physics_manager.add_optical_surface(
    "crystal", "optical_system", "Customized3_LUT"
)

Gate 9#

/gate/crystal/surfaces/name                  surface5
/gate/crystal/surfaces/insert                grease
/gate/crystal/surfaces/surface5/setSurface   Customized2_LUT

Gate 10#

opt_surf_grease_to_crystal = sim.physics_manager.add_optical_surface("grease", "crystal", "Customized2_LUT")

Gate 9#

/gate/grease/surfaces/name                   surface6
/gate/grease/surfaces/insert                 crystal
/gate/grease/surfaces/surface6/setSurface    Customized2_LUT

Gate 10#

opt_surf_crystal_to_grease = sim.physics_manager.add_optical_surface("crystal", "grease", "Customized2_LUT")

Gate 9#

/gate/grease/surfaces/name                     Detection1
/gate/grease/surfaces/insert                   pixel
/gate/grease/surfaces/Detection1/setSurface    Customized4_LUT

Gate 10#

opt_surface_pixel_to_grease = sim.physics_manager.add_optical_surface("pixel", "grease", "Customized4_LUT")

Gate 9#

/gate/pixel/surfaces/name                       Detection2
/gate/pixel/surfaces/insert                     grease
/gate/pixel/surfaces/Detection2/setSurface      Customized4_LUT

Gate 10#

opt_surf_grease_to_pixel = sim.physics_manager.add_optical_surface("grease", "pixel", "Customized4_LUT")

Electron Source#

Gate 9#

/gate/source/addSource                   Mysource
/gate/source/Mysource/gps/particle       e-
/gate/source/Mysource/gps/energytype       Mono
/gate/source/Mysource/gps/type             Volume
/gate/source/Mysource/gps/shape            Sphere
/gate/source/Mysource/gps/radius           0. mm
/gate/source/Mysource/setActivity          1000 becquerel
/gate/source/Mysource/gps/monoenergy       420 keV
/gate/source/Mysource/gps/centre           0 0 19 mm

/gate/source/Mysource/gps/ang/type iso
/gate/source/Mysource/gps/ang/mintheta 163. deg
/gate/source/Mysource/gps/ang/maxtheta 165. deg

Gate 10#

source = sim.add_source("GenericSource", "my_source")
source.particle = "e-"
source.energy.type = "mono"
source.energy.mono = 420 * keV
source.position.type = "sphere"
source.position.radius = 0 * mm
source.activity = 1000 * Bq
source.direction.type = "iso"
source.direction.theta = [163 * deg, 165 * deg]
source.direction.phi = [100 * deg, 110 * deg]
source.position.translation = [0 * mm, 0 * mm, 19 * mm]

Actor#

Gate 9#

/gate/actor/addActor PhaseSpaceActor MyActor
/gate/actor/MyActor/attachTo pixel

/gate/actor/MyActor/enableTime true
/gate/actor/MyActor/enableLocalTime true
/gate/actor/MyActor/enableTimeFromBeginOfEvent true
/gate/actor/MyActor/enableTProd true
/gate/actor/MyActor/enableTOut true
/gate/actor/MyActor/enableTrackLength true
/gate/actor/MyActor/enableEmissionPoint true
/gate/actor/MyActor/enableElectronicDEDX true
/gate/actor/MyActor/save ./output/{NameOutputSimu}/MyActorPixel_In.root

Gate 10#

phase = sim.add_actor("PhaseSpaceActor", "Phase")
phase.attached_to = pixel.name
phase.output_filename = "test075_optigan_create_dataset_first_phase_space_with_track_volume.root"
phase.attributes = [
    "EventID",
    "ParticleName",
    "Position",
    "TrackID",
    "ParentID",
    "Direction",
    "KineticEnergy",
    "PreKineticEnergy",
    "PostKineticEnergy",
    "TotalEnergyDeposit",
    "LocalTime",
    "GlobalTime",
    "TimeFromBeginOfEvent",
    "StepLength",
    "TrackCreatorProcess",
    "TrackLength",
    "TrackVolumeName",
    "PDGCode",
]