Skip to content

feat: Add TrackExtrapolationAlgorithm - #5842

Draft
andiwand wants to merge 2 commits into
acts-project:mainfrom
andiwand:track-extrapolation-algorithm
Draft

feat: Add TrackExtrapolationAlgorithm#5842
andiwand wants to merge 2 commits into
acts-project:mainfrom
andiwand:track-extrapolation-algorithm

Conversation

@andiwand

@andiwand andiwand commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Moves the track parameters of a track container onto a common surface,
typically a perigee, on Acts::extrapolateTrackToReferenceSurface.

That is what makes a seed estimate comparable to truth. The estimate sits on
the bottom space point's sensor, where the truth reference has to be carried
from the production vertex through the bending in between, so the comparison
belongs on a perigee.

The track states are copied over unchanged, so they keep the parameters on their own
surfaces and the output has the same layering a fitter produces. Tracks whose
extrapolation fails are dropped, so any truth matching has to run downstream.

--- END COMMIT MESSAGE ---

Third of four, see #5845 for the review order. Used by #5721, nothing else in
the repository calls it yet.

Notes

  • Config::strategy picks the starting track state. A track that carries
    parameters on only some of its states has to use first or last;
    firstOrLast intersects both ends, and
    Acts::findTrackStateForExtrapolation asserts on a state that has neither
    smoothed nor filtered parameters. That is the case for the seed tracks of
    feat: Add SeedsToTracks to Examples #5845, which is why the helper in feat: Write seed parameter performance from addSeeding #5721 passes first.
  • Acts::TrackExtrapolationStrategy gets python bindings here.
  • The track states are copied into the output container rather than shared,
    because Acts::TrackContainer requires the track and the track state backend
    to be read-only or read-write together.
  • Acts::TrackProxy::copyFrom cannot do that copy: it copies every state with
    a hardcoded TrackStatePropMask::All, which throws for a state that holds no
    parameters at all - every state of a seed track except the innermost. The
    states are copied with their own mask instead. Passing
    srcTrackState.getMask() there would fix it in Core, kept out of this PR so
    it stays free of Core changes.

@github-actions github-actions Bot added Infrastructure Changes to build tools, continous integration, ... Component - Examples Affects the Examples module labels Aug 7, 2026
andiwand and others added 2 commits August 7, 2026 13:40
`RootTrackFitterPerformanceWriter` compares the track parameters at the track
reference surface to truth. Nothing in that is specific to a fitter, the same
comparison applies to a seed estimate, so the name is widened:

- `TrackFitterPerformanceCollector` -> `TrackParameterPerformanceCollector`
- `RootTrackFitterPerformanceWriter` -> `RootTrackParameterPerformanceWriter`
- `PythonTrackFitterPerformanceWriter` -> `PythonTrackParameterPerformanceWriter`

The old python names stay as deprecated aliases, as done for
`TrackFinderPerformanceWriter` in acts-project#5775.

`ResPlotTool::Config::paramNames` becomes settable from python, since `d0`/`z0`
only hold on a perigee.

No histogram changes, so the physmon references stay valid.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FxPc2jP43AQuQKz8c4qsaC
Moves the track parameters of a track container onto a common surface,
typically a perigee, on `Acts::extrapolateTrackToReferenceSurface`. That is
where a seed estimate has to be compared to truth: the estimate sits on the
bottom space point's sensor, and expressing the truth particle there means
intersecting it on a straight line, which ignores the bending in between.

The track states are carried over, so they keep the parameters on their own
surfaces and the output has the same layering a fitter produces.

Tracks whose extrapolation fails are dropped, hence the truth matching has to
run downstream of this.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FxPc2jP43AQuQKz8c4qsaC
@andiwand
andiwand force-pushed the track-extrapolation-algorithm branch from 24905ce to b824efa Compare August 7, 2026 11:41
@github-actions github-actions Bot added this to the next milestone Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Public API surface diff

No change to the public API surface. ✅

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

📊: Physics performance monitoring for b824efa

Full contents

physmon summary

❗️: Downstream build failure

  • eic-shell EICrecon (cc @acts-project/epic-contacts)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component - Examples Affects the Examples module Infrastructure Changes to build tools, continous integration, ...

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant