English

GPU acceleration of optical photon propagation in low photon yield applications: Opticks for the Electron Ion Collider

Instrumentation and Detectors 2025-12-09 v1 High Energy Physics - Experiment Nuclear Experiment Accelerator Physics

Abstract

The bulk of time spent in the simulation of Cherenkov and other scintillation detectors is spent on optical-photon transport, i.e. ray tracing, a task that GPUs are uniquely qualified to perform. We present EIC-Opticks, a fork of Opticks, which uses event aggregation to drastically accelerate photon transport simulation for low-to-moderate photon yield experiments. During the full Geant4 Monte Carlo simulation of a given detector, optical photon simulation is performed on GPU(s) using the NVIDIA OptiX framework. We validate this approach using the ePIC pfRICH detector. We find GPU and CPU simulations in excellent agreement. For 5×1045\times 10^4 electrons with a momentum of p=5 MeV/cp=5~\mathrm{MeV}/c in the test case of the pfRICH detector, EIC-Opticks shows an order-of-magnitude speedup over multi-threaded Geant4, and a factor of up to 161±\pm3 over single-threaded execution. In the case of low-to-moderate applications event aggregation reduces the per-photon simulation time from 60μs\sim60\,\mu\mathrm{s} for single events to 20ns\sim20\,\mathrm{ns} with batching, a factor of 3000\sim3000. In order to make EIC-Opticks easily installable, we authored a Spack package that makes it possible to install it with a single command. Additionally, a Docker container is provided for users with EIC-Opticks installed. EIC-Opticks provides guardrails for common pitfalls (e.g. nested volume conversion, ray tracing setting optimization).

Keywords

Cite

@article{arxiv.2512.06061,
  title  = {GPU acceleration of optical photon propagation in low photon yield applications: Opticks for the Electron Ion Collider},
  author = {Gabor Galgoczi and Kolja Kauder and Maxim Potekhin and Sakib Rahman and Dmitri Smirnov and Torre Wenaus},
  journal= {arXiv preprint arXiv:2512.06061},
  year   = {2025}
}