In a liquid-argon time-projection chamber the charge readout gives a track's shape but not its position along the drift direction; the light seen by the PMTs does. The usual fix is a gradient-descent fit per event against a photon library. ReconNN reads the track and the PMT pattern and answers in one forward pass, about 300× faster on an A100, and can train without position labels through the collaboration's differentiable forward model. Built in 2024 within the US–Japan CIDeR-ML collaboration.
- ~300×faster than per-event fitting (0.06 vs 17 s per 100 events)
- 1.20 vs 1.19light-pattern residual, ReconNN vs optimiser
- 8,000Slurm jobs, 2,000 concurrent, WCSim production
Why
The collaboration's XOptimizer fits each event's drift offset dx with Adam, up to 500 steps after a coarse scan. At ~17 s per 100 events on an A100 a 100k-event sample takes hours, and the landscape is unfriendly: several tracks have more than one basin, so results depend on configuration (one track gave a residual of 46 with default settings, 1.2 with tuned ones). Amortised inference pays that cost once, at training time.

How
Each event is a variable-length point cloud, ~1.1–1.3k points of (x, y, z, charge), plus a 180-channel PMT vector. I tried three cloud encoders, a chain-graph GCN (245k parameters), a 1-D CNN over a 400-point resample with global average pooling (279k) and a MinkowskiEngine sparse 3-D CNN (419k), each fused with an MLP over the PMT vector to regress dx, trained on 10k simulated ICARUS events.
The part that matters is cycle training: shift the track by the predicted dx, drop points that leave the detector, push it through the differentiable photon library, and score the predicted PMT pattern against the observed one with a Poisson negative log-likelihood. The library's custom autograd carries the gradient back into the network. Batching the forward model made the loss ~30× faster; a track-normalisation fix removed the need for a labelled warm-up.
Results
Inference takes ~0.06 s per 100 events versus ~17 s for the optimiser's defaults (~300×; ~130× against a tuned ~8 s). On a typical track the cycle-trained GNN matches the optimiser's light-pattern fit, rms 1.20 versus 1.19, but its position error is 0.33 cm versus 0.023 cm. That gap is the honest headline: label-trained test rms is 5.14 cm against a ~1 mm goal, and some tracks miss by tens of centimetres. A fast first guess, not yet the final fit.


Monte-Carlo production
For the Water-Cherenkov effort I ran the WCSim campaign behind its optical surrogate model: Slurm arrays of 8,000 jobs, 2,000 concurrent, 150 events × 200k photons each, across SLAC S3DF, Compute Canada Cedar and NERSC, porting the production framework to Shifter. WCSim uses one core, so 8-core requests ran at 12.5% CPU; one core per job fixed that, and S3DF then delivered 2,500 files an hour with no timeouts.
What I did. Sole developer of ReconNN, every commit: encoders, data pipeline, cycle-training loop and the XOptimizer comparison. The forward model, photon library, toy Monte Carlo and XOptimizer are collaboration code (siren-pfmatch, photonlib) I built on. For Water-Cherenkov I was computing co-lead with Kazuhiro Terao, whose production framework I ran. No paper; five collaboration talks, including at the University of Tokyo.
US–Japan CIDeR-ML collaboration (SLAC, Kavli IPMU / U. Tokyo, Tufts, Tokyo Tech, Minnesota); organisation chart: "Computing (Zhe, Kazu)". Numbers from my close-out talk (8 Aug 2024), the repository notebooks and my MC-production reports (Feb–Mar 2024).