|
ACTS
Experiment-independent tracking
|
Stepper based on a single-component stepper, but can handle Multi-Component Tracks (e.g., for the GSF). More...
#include <Acts/Propagator/MultiStepperLoop.hpp>
Classes | |
| struct | Config |
| struct | Options |
| struct | State |
Public Types | |
| using | BoundState |
| Define an own bound state. | |
| using | ComponentProxy |
| A proxy struct which allows access to a single component of the multi-component state. | |
| using | ConstComponentProxy |
| A proxy struct which allows access to a single component of the multi-component state. | |
| using | Reducer = component_reducer_t |
| The reducer type. | |
| using | SingleConfig = typename SingleStepper::Config |
| Typedef to the Config of the single component Stepper. | |
| using | SingleOptions = typename SingleStepper::Options |
| Typedef to the Single-Component Stepper Options. | |
| using | SingleState = typename SingleStepper::State |
| Typedef to the State of the single component Stepper. | |
| using | SingleStepper = single_stepper_t |
| Typedef to the Single-Component Eigen Stepper. | |
Public Member Functions | |
| MultiStepperLoop (const Config &config, std::unique_ptr< const Logger > logger=getDefaultLogger("MultiStepperLoop", Logging::INFO)) | |
| Constructor from a configuration and optionally provided Logger. | |
| MultiStepperLoop (std::shared_ptr< const MagneticFieldProvider > bField, std::unique_ptr< const Logger > logger=getDefaultLogger("GSF", Logging::INFO)) | |
| Constructor from a magnetic field and a optionally provided Logger TODO this requires that every stepper can be constructed like this... | |
| double | absoluteMomentum (const State &state) const |
| Absolute momentum accessor. | |
| Result< ComponentProxy > | addComponent (State &state, const BoundTrackParameters &pars, double weight) const |
| Add a component to the Multistepper. | |
| Result< BoundState > | boundState (State &state, const Surface &surface, bool transportCov=true, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const |
| Create and return the bound state at the current position. | |
| double | charge (const State &state) const |
| Charge access. | |
| void | clearComponents (State &state) const |
| Reset the number of components. | |
| auto | componentIterable (State &state) const |
| Creates an iterable which can be plugged into a range-based for-loop to iterate over components. | |
| auto | constComponentIterable (const State &state) const |
| Creates an constant iterable which can be plugged into a range-based for-loop to iterate over components. | |
| BoundState | curvilinearState (State &state, bool transportCov=true) const |
| Create and return a curvilinear state at the current position. | |
| Vector3 | direction (const State &state) const |
| Momentum direction accessor. | |
| Result< Vector3 > | getField (State &state, const Vector3 &pos) const |
| Get the field for the stepping, it checks first if the access is still within the Cell, and updates the cell if necessary. | |
| double | getStepSize (const State &state, ConstrainedStep::Type stype) const |
| Get the step size. | |
| void | initialize (State &state, const MultiComponentBoundTrackParameters &par) const |
| Initialize the stepper state from multi-component bound track parameters. | |
| State | makeState (const Options &options) const |
| Create a state object for multi-stepping. | |
| Vector3 | momentum (const State &state) const |
| Momentum accessor. | |
| std::size_t | numberComponents (const State &state) const |
| Get the number of components. | |
| std::string | outputStepSize (const State &state) const |
| Output the Step Size of all components into one std::string. | |
| ParticleHypothesis | particleHypothesis (const State &state) const |
| Particle hypothesis. | |
| Vector3 | position (const State &state) const |
| Global particle position accessor. | |
| bool | prepareCurvilinearState (State &state) const |
| If necessary fill additional members needed for curvilinearState. | |
| double | qOverP (const State &state) const |
| QoP access. | |
| void | releaseStepSize (State &state, ConstrainedStep::Type stype) const |
| Release the step-size for all components. | |
| void | removeMissedComponents (State &state) const |
| Remove missed components from the component state. | |
| void | reweightComponents (State &state) const |
| Reweight the components. | |
| Result< double > | step (State &state, Direction propDir, const IVolumeMaterial *material) const |
| Perform a Runge-Kutta track parameter propagation step. | |
| double | time (const State &state) const |
| Time access. | |
| void | transportCovarianceToBound (State &state, const Surface &surface, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const |
| Method for on-demand transport of the covariance to a new curvilinear frame at current position, or direction of the state. | |
| void | transportCovarianceToCurvilinear (State &state) const |
| Method for on-demand transport of the covariance to a new curvilinear frame at current position, or direction of the state. | |
| template<typename object_intersection_t> | |
| void | updateStepSize (State &state, const object_intersection_t &oIntersection, Direction direction, ConstrainedStep::Type stype) const |
| Update step size. | |
| void | updateStepSize (State &state, double stepSize, ConstrainedStep::Type stype) const |
| Update step size - explicitly with a double. | |
| IntersectionStatus | updateSurfaceStatus (State &state, const Surface &surface, std::uint8_t index, Direction navDir, const BoundaryTolerance &boundaryTolerance, double surfaceTolerance, ConstrainedStep::Type stype, const Logger &logger=getDummyLogger()) const |
| Update surface status. | |
Static Public Attributes | |
| static constexpr int | maxComponents = std::numeric_limits<int>::max() |
| How many components can this stepper manage? | |
Stepper based on a single-component stepper, but can handle Multi-Component Tracks (e.g., for the GSF).
Internally, this only manages a vector of states of the single stepper. This simplifies implementation, but has several drawbacks:
| sstepper_t | The single-component stepper type to use |
| component_reducer_t | How to map the multi-component state to a single component |
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::BoundState |
Define an own bound state.
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::ComponentProxy |
A proxy struct which allows access to a single component of the multi-component state.
It has the semantics of a mutable reference, i.e. it requires a mutable reference of the single-component state it represents
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::ConstComponentProxy |
A proxy struct which allows access to a single component of the multi-component state.
It has the semantics of a const reference, i.e. it requires a const reference of the single-component state it represents
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::Reducer = component_reducer_t |
The reducer type.
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::SingleConfig = typename SingleStepper::Config |
Typedef to the Config of the single component Stepper.
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::SingleOptions = typename SingleStepper::Options |
Typedef to the Single-Component Stepper Options.
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::SingleState = typename SingleStepper::State |
Typedef to the State of the single component Stepper.
| using Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::SingleStepper = single_stepper_t |
Typedef to the Single-Component Eigen Stepper.
|
explicit |
Constructor from a magnetic field and a optionally provided Logger TODO this requires that every stepper can be constructed like this...
| bField | Magnetic field provider to use for propagation |
| logger | Logger instance for debugging output |
|
explicit |
Constructor from a configuration and optionally provided Logger.
| config | Configuration object containing stepper settings |
| logger | Logger instance for debugging output |
| double Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::absoluteMomentum | ( | const State & | state | ) | const |
Absolute momentum accessor.
| state | [in] The stepping state (thread-local cache) |
| Result< ComponentProxy > Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::addComponent | ( | State & | state, |
| const BoundTrackParameters & | pars, | ||
| double | weight ) const |
Add a component to the Multistepper.
| [in,out] | state | The stepping state (thread-local cache) |
| [in] | pars | Parameters of the component to add |
| [in] | weight | Weight of the component to add |
| Result< BoundState > Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::boundState | ( | State & | state, |
| const Surface & | surface, | ||
| bool | transportCov = true, | ||
| const FreeToBoundCorrection & | freeToBoundCorrection = FreeToBoundCorrection(false) ) const |
Create and return the bound state at the current position.
This transports (if necessary) the covariance to the surface and creates a bound state. It does not check if the transported state is at the surface, this needs to be guaranteed by the propagator.
| [in] | state | State that will be presented as BoundState |
| [in] | surface | The surface to which we bind the state |
| [in] | transportCov | Flag steering covariance transport |
| [in] | freeToBoundCorrection | Flag steering non-linear correction during global to local correction |
| double Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::charge | ( | const State & | state | ) | const |
Charge access.
| state | [in] The stepping state (thread-local cache) |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::clearComponents | ( | State & | state | ) | const |
Reset the number of components.
| [in,out] | state | The stepping state (thread-local cache) |
| auto Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::componentIterable | ( | State & | state | ) | const |
Creates an iterable which can be plugged into a range-based for-loop to iterate over components.
| state | Multi-component stepper state to iterate over |
| auto Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::constComponentIterable | ( | const State & | state | ) | const |
Creates an constant iterable which can be plugged into a range-based for-loop to iterate over components.
| state | Multi-component stepper state to iterate over (const) |
| BoundState Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::curvilinearState | ( | State & | state, |
| bool | transportCov = true ) const |
Create and return a curvilinear state at the current position.
This transports (if necessary) the covariance to the current position and creates a curvilinear state.
| [in] | state | State that will be presented as CurvilinearState |
| [in] | transportCov | Flag steering covariance transport |
| Vector3 Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::direction | ( | const State & | state | ) | const |
Momentum direction accessor.
| state | [in] The stepping state (thread-local cache) |
| Result< Vector3 > Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::getField | ( | State & | state, |
| const Vector3 & | pos ) const |
Get the field for the stepping, it checks first if the access is still within the Cell, and updates the cell if necessary.
| [in,out] | state | is the propagation state associated with the track the magnetic field cell is used (and potentially updated) |
| [in] | pos | is the field position |
| double Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::getStepSize | ( | const State & | state, |
| ConstrainedStep::Type | stype ) const |
Get the step size.
| state | [in] The stepping state (thread-local cache) |
| stype | [in] The step size type to be returned |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::initialize | ( | State & | state, |
| const MultiComponentBoundTrackParameters & | par ) const |
Initialize the stepper state from multi-component bound track parameters.
| state | The stepper state to initialize |
| par | The multi-component bound track parameters |
| State Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::makeState | ( | const Options & | options | ) | const |
Create a state object for multi-stepping.
| options | The propagation options |
| Vector3 Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::momentum | ( | const State & | state | ) | const |
Momentum accessor.
| state | [in] The stepping state (thread-local cache) |
| std::size_t Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::numberComponents | ( | const State & | state | ) | const |
Get the number of components.
| state | [in,out] The stepping state (thread-local cache) |
| std::string Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::outputStepSize | ( | const State & | state | ) | const |
Output the Step Size of all components into one std::string.
| state | [in,out] The stepping state (thread-local cache) |
| ParticleHypothesis Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::particleHypothesis | ( | const State & | state | ) | const |
Particle hypothesis.
| state | [in] The stepping state (thread-local cache) |
| Vector3 Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::position | ( | const State & | state | ) | const |
Global particle position accessor.
| state | [in] The stepping state (thread-local cache) |
| bool Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::prepareCurvilinearState | ( | State & | state | ) | const |
If necessary fill additional members needed for curvilinearState.
Compute path length derivatives in case they have not been computed yet, which is the case if no step has been executed yet.
| [in,out] | state | The stepping state (thread-local cache) |
| double Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::qOverP | ( | const State & | state | ) | const |
QoP access.
| state | [in] The stepping state (thread-local cache) |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::releaseStepSize | ( | State & | state, |
| ConstrainedStep::Type | stype ) const |
Release the step-size for all components.
| state | [in,out] The stepping state (thread-local cache) | |
| [in] | stype | The step size type to be released |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::removeMissedComponents | ( | State & | state | ) | const |
Remove missed components from the component state.
| state | [in,out] The stepping state (thread-local cache) |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::reweightComponents | ( | State & | state | ) | const |
Reweight the components.
| [in,out] | state | The stepping state (thread-local cache) |
| Result< double > Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::step | ( | State & | state, |
| Direction | propDir, | ||
| const IVolumeMaterial * | material ) const |
Perform a Runge-Kutta track parameter propagation step.
| [in,out] | state | The state of the stepper |
| propDir | is the direction of propagation | |
| material | is the material properties |
The state contains the desired step size. It can be negative during backwards track propagation, and since we're using an adaptive algorithm, it can be modified by the stepper class during propagation.
| double Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::time | ( | const State & | state | ) | const |
Time access.
| state | [in] The stepping state (thread-local cache) |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::transportCovarianceToBound | ( | State & | state, |
| const Surface & | surface, | ||
| const FreeToBoundCorrection & | freeToBoundCorrection = FreeToBoundCorrection(false) ) const |
Method for on-demand transport of the covariance to a new curvilinear frame at current position, or direction of the state.
| surface_t | the Surface type |
| [in,out] | state | State of the stepper |
| [in] | surface | is the surface to which the covariance is forwarded |
| [in] | freeToBoundCorrection | Flag steering non-linear correction during global to local correction to |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::transportCovarianceToCurvilinear | ( | State & | state | ) | const |
Method for on-demand transport of the covariance to a new curvilinear frame at current position, or direction of the state.
| [in,out] | state | State of the stepper |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::updateStepSize | ( | State & | state, |
| const object_intersection_t & | oIntersection, | ||
| Direction | direction, | ||
| ConstrainedStep::Type | stype ) const |
Update step size.
This method intersects the provided surface and update the navigation step estimation accordingly (hence it changes the state). It also returns the status of the intersection to trigger onSurface in case the surface is reached.
| state | [in,out] The stepping state (thread-local cache) |
| oIntersection | [in] The ObjectIntersection to layer, boundary, etc |
| direction | [in] The propagation direction |
| stype | [in] The step size type to be set |
| void Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::updateStepSize | ( | State & | state, |
| double | stepSize, | ||
| ConstrainedStep::Type | stype ) const |
Update step size - explicitly with a double.
| state | [in,out] The stepping state (thread-local cache) |
| stepSize | [in] The step size value |
| stype | [in] The step size type to be set |
| IntersectionStatus Acts::MultiStepperLoop< single_stepper_t, component_reducer_t >::updateSurfaceStatus | ( | State & | state, |
| const Surface & | surface, | ||
| std::uint8_t | index, | ||
| Direction | navDir, | ||
| const BoundaryTolerance & | boundaryTolerance, | ||
| double | surfaceTolerance, | ||
| ConstrainedStep::Type | stype, | ||
| const Logger & | logger = getDummyLogger() ) const |
Update surface status.
It checks the status to the reference surface & updates the step size accordingly
| [in,out] | state | The stepping state (thread-local cache) |
| [in] | surface | The surface provided |
| [in] | index | The surface intersection index |
| [in] | navDir | The navigation direction |
| [in] | boundaryTolerance | The boundary check for this status update |
| [in] | surfaceTolerance | Surface tolerance used for intersection |
| [in] | stype | The step size type to be set |
| [in] | logger | A Logger instance |
|
staticconstexpr |
How many components can this stepper manage?