Cherenkov CO2 radiator + spherical mirror
Scope
Three volumes inside a 1 m × 1 m × 1 m CO2 (1 atm) radiator box: the gas itself, a spherical-mirror cap with R = 80 cm, and a flat photon sensor sitting at the mirror focal plane. A 1 GeV e⁻ pencil beam enters the gas on the z-axis, emits Cherenkov light, the mirror focuses it onto the sensor. The mirror is tilted 45° around the beam-transverse axis so the sensor catches the focused light off the beam path.
Goals were narrow and incremental: verify the Cherenkov ring image at the mirror focal point; iterate the geometry to compactify it, tilt it, parameterize it; finally take a 1000-event production sample and characterise the image on the sensor.
Final geometry
beam ─► │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
e⁻ 1 GeV │ CO₂ 1 atm (gas mother volume, 1 m × 1 m × 1 m) │
vertex │ │
(0,0,−80) │ ┌── spherical mirror cap, R = 80 cm, ──┐ │
│ │ apex on beam axis at (0, 0, +40), │ │
│ │ tilted +45° about x, │ │
│ │ sphere centre at (0,+56.57,−16.57) ╲ │
│ ╲ │
│ ╲ sensor │
│ photons reflect upward ───────────► ╱ at │
│ ╱ (0,+40, │
│ ╱ +40) │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
z=−50 z=0 z=+50
| Parameter | Value | Notes |
|---|---|---|
| Radiator material | SL_LGCCgas | CO₂ 1 atm, ρ = 1.842 × 10⁻³ g/cm³; n ≈ 1.000418 across 2 – 6.2 eV |
| Radiator size | 100 × 100 × 100 cm | centred at world origin |
| Mirror radius of curvature | R = 80 cm | focal length f = R/2 = 40 cm |
| Mirror cap | half-angle 10° | rim radius ≈ 14 cm, ≈ 1 cm Al shell |
| Mirror reflectivity | ≈ 0.87 (peak) | SoLID LGC_Mirror curve |
| Mirror tilt | +45° about +x | chief reflected ray → +y |
| Sensor size | 15 × 15 × 0.1 cm | thin Box, face perpendicular to chief reflected ray |
| Sensor position | (0, +40, +40) cm | at the chief-ray geometric focus |
| Cherenkov half-angle | θC ≈ 1.66° | arccos(1/n) for β ≈ 1 |
| Predicted ring radius | f · tan θC ≈ 1.16 cm | ideal, paraxial |
Progress timeline
solid_gemc/analysis/hgc_study/cherenkov.
First run with HALL_MATERIAL = G4_Galactic produced
zero back-reflected photons and zero mirror
hits — Geant4 kills optical photons at the gas/world boundary
when the world material has no refractive index.
f · tan θC = 80 · tan 1.66° ≈
2.32 cm. 50-event smoke ran in < 1 s.
root to
daughter-of-co2_radiator; R halved. Focal point
now on-axis at (0, 0, 0). GUI verified.
+45*deg crashed
Geant4's overlap check: the apex landed at world (0, +113, +40)
instead of (0, 0, +40). gemc applies the rotation
string with an inverted sign relative to the obvious
reading. Flipping to -45*deg fixed it; all
volumes pass overlap. Saved as workspace memory so the next
rotation we write doesn't repeat the mistake.
geometry/hgc_moved/. One knob
($mirror_R_cm, $mirror_tilt_deg)
now drives all the derived placements + the rotation string.
Generated files pass overlap check; smoke ran clean.
Results
1000 events, 1 GeV e⁻ pencil beam, tilted-mirror geometry.
| Quantity | Value |
|---|---|
| Optical-photon sensor hits (total) | 105 861 |
| Mean photons / event | 105.9 |
| RMS | 10.2 |
| Image type at sensor | astigmatic diamond (not a ring) |
| Tangential-focus separation | ±2 cm in xlocal |
| Sagittal extent | ≈ ±1 cm in ylocal |
| gemc wall time | 11.8 s |
f · tan θC.
Off-axis tilt is what introduces the astigmatism above.
Source: runs/20260512-045625/h_xy.png.
What this study taught
-
HALL_MATERIAL must support optical physics.
G4_Galacticsilently kills photons at the gas/world boundary. UseAir_Optfor any setup where photons must leave the radiator to reach a mirror / sensor. -
gemc rotation strings carry an inverted sign.
Listing
"+45*deg 0 0"in the rotation column appliesRx(-45°)to the daughter. Encoded in the Perl pipeline so callers think in physical degrees and the inversion lives in one place. - An off-axis spherical mirror is astigmatic. The clean Cherenkov ring at on-axis focus is replaced by a diamond-shaped pattern at 45° tilt. Moving the readout off the beam path costs image quality; correcting it needs parabolic / composite optics (no Geant4 primitive — would require a CAD import).
- Parameterised geometry pays back fast. The Perl pipeline removed the manual sphere-centre calculation, which I'd already done by hand twice with one mistake. After conversion, sweeping R or the tilt is a single-line edit.
Note for future runs: the sensor sits inside
the gas radiator (daughter of co2_radiator), so
forward Cherenkov photons emitted upstream of z = +40 can in
principle hit it on the way to the mirror. In the tilted geometry
the sensor is far off-axis at y = +40 cm, so the Cherenkov cone
(half-angle 1.66°, max transverse displacement ≈ 1.2 cm) cannot
reach it directly — all sensor hits are post-mirror.
Reproduce
# from the workspace root # 1. edit physics knobs at the top of: # cherenkov_co2_mirror/geometry/cherenkov_co2_box_geometry.pl # (R, tilt, apex, sensor size — derived quantities recompute) # 2. regenerate the TEXT factory files solid-gemc-run exec "cd cherenkov_co2_mirror/geometry && \ ./cherenkov_co2_box.pl config_cherenkov_co2_box.dat" # 3. run the simulation RUN=cherenkov_co2_mirror/analysis/runs/$(date -u +%Y%m%d-%H%M%S) mkdir -p $RUN cp cherenkov_co2_mirror/analysis/cherenkov_co2_box.gcard $RUN/gcard.gcard cp cherenkov_co2_mirror/geometry/cherenkov_co2_box__bank.txt $RUN/ solid-gemc-run exec "solid_gemc $(readlink -f $RUN/gcard.gcard) \ -N=1000 -OUTPUT=evio,$(readlink -f $RUN)/out.evio" # 4. convert EVIO → ROOT solid-gemc-run exec "cd $RUN && evio2root -INPUTF=out.evio -B='cherenkov_co2_box'" # 5. plot solid-gemc-run exec "root -l -b -q \ cherenkov_co2_mirror/analysis/analyze_cherenkov.C\(\\\"$(readlink -f $RUN)/out.root\\\",\\\"$(readlink -f $RUN)\\\"\)" # 6. (optional) PDF → PNG, since ROOT's PNG output is disabled in this container ( cd $RUN && pdftoppm -png -r 120 h_nphoton.pdf h_nphoton && \ pdftoppm -png -r 120 h_xy.pdf h_xy )
File map
cherenkov_co2_mirror/ ├── CLAUDE.md project rules (loaded by Claude Code) ├── log.md chronological project log ├── result.md human-readable summary of notable runs ├── report.html this file │ ├── geometry/ │ ├── config_cherenkov_co2_box.dat factory + variation │ ├── cherenkov_co2_box.pl master perl script │ ├── cherenkov_co2_box_geometry.pl PHYSICS KNOBS HERE (R, tilt, apex, ...) │ ├── cherenkov_co2_box_materials.pl SL_LGCCgas (CO2 1 atm + optical) │ ├── cherenkov_co2_box_mirror.pl cherenkov_mirror surface │ ├── cherenkov_co2_box_hit.pl solid_hgc hit definition │ ├── cherenkov_co2_box_bank.pl solid_hgc output-bank layout │ ├── cherenkov_co2_box__*.txt generated; do not edit │ └── .baseline/ stash of hand-edited TEXT files (reference) │ └── analysis/ ├── cherenkov_co2_box.gcard runtime options for solid_gemc ├── cherenkov.vis Geant4 vis macro for the GUI ├── analyze_cherenkov.C ROOT macro: 1D N_ph + 2D hit map ├── inspect.C tiny ROOT macro to list TTrees └── runs/ ├── 20260512-045152/ G4_Galactic; failed (kept for reference) ├── 20260512-045625/ on-axis, R=160, 50 evts — clean ring └── 20260512-151035/ tilted, R=80, 1000 evts — astigmatic image
Generated 2026-05-12; report refreshed 2026-05-14. Sourced from
log.md + result.md + the runs under
analysis/runs/.