acts-project / acts

Experiment-independent toolkit for (charged) particle track reconstruction in (high energy) physics experiments implemented in modern C++
https://acts.readthedocs.io
Mozilla Public License 2.0
102 stars 164 forks source link

Multiple context references are in flight for track fitters and finder #3383

Open andiwand opened 1 month ago

andiwand commented 1 month ago

After https://github.com/acts-project/acts/pull/3181 we have multiple context references in flight for track fitting and finding as they are bound in the algorithm options and propagation options.

https://github.com/acts-project/acts/blob/05c0ebde4aa83baea3c716a3c79cf8481b65817b/Core/include/Acts/TrackFitting/KalmanFitter.hpp#L126-L130 (context if part of KalmanFitterOptions and PropagatorPlainOptions)

This is not necessarily bad as it consumed little space but might be a source of errors as users could provide two different context objects for a single track fit.

A proposed solution is to decouple the options from the context and always provide context references explicitly as a parameters and never bind to them inside options. This also has the benefit of not making the options non-copyable (in case of a reference) or non-movable (in case of a reference wrapper) or to deal with potentially uninitialized pointers to context objects. A series of PRs are open to showcase these proposed changes:

One downside of this solution is that we potentially end up with a bunch of function parameters. This could be mitigated by binding multiple context objects into a tuple-like struct.

Apart from that it becomes very clear which parts of the code require a context and how this is passed down.

paulgessinger commented 1 month ago

We could introduce a non-null pointer wrapper that is both movable and copyable.

github-actions[bot] commented 2 weeks ago

This issue/PR has been automatically marked as stale because it has not had recent activity. The stale label will be removed if any interaction occurs.