feat: Synthetic space point event generator in Fatras - #5806
Draft
andiwand wants to merge 1 commit into
Draft
Conversation
This was referenced Jul 30, 2026
Contributor
andiwand
force-pushed
the
feat-fatras-synthetic-generator
branch
2 times, most recently
from
July 31, 2026 12:38
c40136a to
287ff47
Compare
Contributor
Public API surface diff+188 added, 0 breaking. ➕ Added public APINew types / aliases / enums / variables / concepts (27)
New call signatures (incl. defaulted-arg overloads) (36)
New public data members (125)
|
andiwand
force-pushed
the
feat-fatras-synthetic-generator
branch
6 times, most recently
from
August 6, 2026 13:16
ef56322 to
820479f
Compare
`ActsFatras::Synthetic` is a second, much smaller fast simulation that shares none of the Fatras machinery: no tracking geometry, no propagator, no input data. It fills an `Acts::SpacePointContainer` directly and makes an ATLAS-like pile-up of 200 in tens of milliseconds, which is what a seeding benchmark needs and what the propagator-based simulation cannot provide. Space points carry the layer and the particle they came from, so a caller needs no truth matching. The geometry is cylinders at a fixed radius and discs at a fixed z as plain structs, so a helix crosses every surface in closed form. The restriction is on the shape alone: every cylinder has its own half-length and every disc its own rings, so a real endcap is described as the staggered discs and rings it is. Surfaces carry the material their detector's map reports, banded along the coordinate they extend in, and that material is the whole of the physics model: `x/X0` scatters and makes electrons, `x/L0` makes nuclear products, and the slab takes the energy. Nothing is fitted on top of it. Both material effects displace the *measured* position of a hit and leave the trajectory a nominal helix -- a scatter by the angle times the lever arm, energy loss by half the curvature change times that lever arm squared -- which is what gives a seed the spread a seeder cuts on at a fraction of the cost of stepping. It is deliberately coarse: a tool for throughput and combinatorics studies rather than for physics performance. The Generic pixel description ships with it; the descriptions of real detectors and the configurations fitted to them follow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CMdYgLmPKFybPzSr8wZxhd
andiwand
force-pushed
the
feat-fatras-synthetic-generator
branch
from
August 7, 2026 14:38
820479f to
a4f0dca
Compare
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




ActsFatras::Syntheticis a second, much smaller fast simulation that sharesnone of the Fatras machinery: no tracking geometry, no propagator, no input
data. It fills an
Acts::SpacePointContainerdirectly and makes an ATLAS-likepile-up of 200 in tens of milliseconds, which is what a seeding benchmark needs
and what the propagator-based simulation cannot provide. Space points carry the
layer and the particle they came from, so a caller needs no truth matching.
The geometry is cylinders at a fixed radius and discs at a fixed z as plain
structs, so a helix crosses every surface in closed form. The restriction is on
the shape alone: every cylinder has its own half-length and every disc its own
rings, so a real endcap is described as the staggered discs and rings it is.
Surfaces carry the material their detector's map reports, banded along the
coordinate they extend in, and that material is the whole of the physics model:
x/X0scatters and makes electrons,x/L0makes nuclear products, and the slabtakes the energy. Nothing is fitted on top of it.
Both material effects displace the measured position of a hit and leave the
trajectory a nominal helix -- a scatter by the angle times the lever arm, energy
loss by half the curvature change times that lever arm squared -- which is what
gives a seed the spread a seeder cuts on at a fraction of the cost of stepping.
It is deliberately coarse: a tool for throughput and combinatorics studies
rather than for physics performance. The Generic pixel description ships with
it; the descriptions of real detectors and the configurations fitted to them
follow.
--- END COMMIT MESSAGE ---
What ships here, and what follows
This PR is the generator and the Generic pixel description, with default
settings that belong to no detector in particular. The two real detector
descriptions and the configurations fitted to them were split out into their own
branches, which is what took this from 5.8k lines to 4.9k.
The fits are what says the model works, so, as evidence rather than as content
of this PR: each configuration is fitted against a full simulation of its
detector -- the ITk pixels against a GNN4ITk Athena dump, the ODD pixels against
ColliderML -- on one half of the sample and scored on the other. On the held-out
half, per event and normalised to the reference:
Surface positions and material are read out of the detector description rather
than fitted; the beam spot, the primary spectrum and the two secondary rates are
what the fit sets.
Where the lines go
EventGenerator,detail/{PrimaryGenerator,ParticlePropagator,Helix,Propagation,Sampling,GeneratorScratch}DetectorLayout,Helix,Propagation,EventGeneratorDetectorLayout, its builder and the Generic descriptionEventConfigSeedingTruthdocs/groups/fatras.md,Fatras/README.md,namespaces.doxEventCsvWriterSyntheticEventSix public headers --
DetectorLayout,EventConfig,EventGenerator,SyntheticEvent,SeedingTruth,EventCsvWriter-- and everything else underdetail/, which the documentation build excludes. The helix, the intersections,the samplers and the two halves of the generator are implementation.
The stack
and the documentation
feat-fatras-synthetic-itk-layout-- the ITk pixel description and theconfiguration fitted to it
feat-fatras-synthetic-odd-layout-- the same for the Open Data DetectormakeLayoutFromTrackingGeometry, which derives a layout from anyActs::TrackingGeometry, plus the python bindingsEach branch is one commit and includes the ones below it. 2 and 3 have no PR
yet; 4 and 5 sit on 3 and are independent of each other. ITk comes before the
ODD because the ODD's structure test is written against it.
Notes for review
Cost. About 120 ms per event for 236k space points on the ITk pixel layout
(branch 2 above), single threaded on a laptop
RelWithDebInfobuild. At a fixedspace point count, six times the surfaces costs about twelve percent more, the
per-surface work being an intersection with an early exit -- so resolving an
endcap into its real rings is affordable.
Precision. The intersection formulas are written in the cancellation-free
form throughout and
makeHelixFromPointrecoversd0in double. Both areload-bearing: the direct form of the turning angle rounds to one above about
30 GeV and misses the intersection outright, and a float
d0loses three digitsthere.
HelixTestspins both down.Scope. Deliberately coarse in its physics, and meant for throughput and
combinatorics studies rather than physics performance. It does not replace the
propagator-based Fatras and shares none of its machinery. The known gaps are the
ODD's secondary momentum and its forward production, and the spectrum below the
100 MeV the references stop recording at; they are documented next to the
configurations they belong to, on branch 3.
ACTS_BUILD_FATRASis implied byACTS_BUILD_UNITTESTS, since the unit tests ofthe generator live in the Fatras test tree.