Parabolic Mirror Example
Upcoming in the next release.
This example builds a telescope-like optical mirror from two Geant4 G4Paraboloid
solids. A parallel bundle of optical photons enters an optical vacuum volume,
reflects from the inner surface of the mirror shell, and is collected by a small
gPhotonDetector panel near the nominal focus.
Quickstart
Copy the example to your current directory, create the geometry, and run one event:
cp -r $GEMC_HOME/examples/optical/parabolic_mirror .
cd parabolic_mirror
./parabolic_mirror.py
gemc parabolic_mirror.yaml -n=1
Geometry
The mirror is a thin boolean shell. The geometry script defines two construction operands:
- outer_dish - the outside
G4Paraboloid; - inner_dish - a slightly smaller
G4Paraboloidthat defines the empty cavity.
Both operands are published with exist set to 0. They are not placed as detector volumes, but their solids remain available to the final boolean operation:
mirror = GVolume("parabolic_dish")
mirror.mother = "optical_space"
mirror.solidsOpr = "outer_dish - inner_dish"
mirror.set_position(0, 0, mirror_z)
mirror.set_rotation(180, 0, 0)
mirror.material = "G4_Al"
mirror.mirror = "parabolic_reflector"
mirror.publish(cfg)
G4Paraboloid requires the radius at -dz to be smaller than the radius at
+dz. The final shell is rotated 180 degrees around x so the open side faces the
incoming photons.
Interactive viewer:
Mirror Surface
The mirror coating is a GMirror skin surface attached to the final boolean shell:
reflector = GMirror("parabolic_reflector")
reflector.type = "dielectric_metal"
reflector.finish = "polished"
reflector.model = "unified"
reflector.border = "SkinSurface"
reflector.photonEnergy = "2.0*eV 3.0*eV 4.0*eV 5.0*eV 6.0*eV"
reflector.reflectivity = "0.95 0.95 0.95 0.95 0.95"
reflector.publish(cfg)
mirror.mirror = "parabolic_reflector"
See the Mirrors documentation for the mirror surface fields.
Photon Detector
The detector is placed near the nominal focal point and uses gPhotonDetector:
detector = GVolume("focus_detector")
detector.make_tube(0, 60, 1, 0, 360)
detector.set_position(0, 0, focus_z)
detector.material = "opticalVacuum"
detector.digitization = "gPhotonDetector"
detector.set_identifier("panel", 1)
detector.publish(cfg)
The steering card enables optical physics and launches optical photons into the mirror aperture:
phys_list: FTFP_BERT + G4OpticalPhysics
gparticle:
- name: opticalphoton
multiplicity: 200
p: 3*eV
vz: -42*cm
delta_vx: 17*cm
delta_vy: 17*cm
Geant4 may warn that generated optical photons have zero polarization and assign a random polarization. That warning is expected for this simple source.