ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
Acts::EigenStepper< extension_t > Class Template Referencefinal

Runge-Kutta-Nystroem stepper based on Eigen implementation for the following ODE: More...

#include <Acts/Propagator/EigenStepper.hpp>

Collaboration diagram for Acts::EigenStepper< extension_t >:
[legend]

Classes

struct  Config
 Configuration for the Eigen stepper. More...
struct  Options
 Stepper options including geometry and magnetic field contexts. More...
struct  State
 State for track parameter propagation. More...

Public Types

using BoundParameters = BoundTrackParameters
 Type alias for bound track parameters.
using Covariance = BoundMatrix
 Type alias for covariance matrix.
using Jacobian = BoundMatrix
 Type alias for jacobian matrix.

Public Member Functions

 EigenStepper (const Config &config)
 Constructor with configuration.
 EigenStepper (std::shared_ptr< const MagneticFieldProvider > bField)
 Constructor requires knowledge of the detector's magnetic field.
double absoluteMomentum (const State &state) const
 Absolute momentum accessor.
Result< BoundParameters > boundParameters (const State &state, const Surface &surface) const
 Get the bound parameters at the current position.
double charge (const State &state) const
 Charge access.
const std::optional< Covariance > & covariance (const State &state) const
 Get the covariance at the anchor.
Result< Vector3 > curvature (State &state) const
 Current global geometric curvature d(direction)/ds in inverse length.
BoundParameters curvilinearParameters (const State &state) const
 Get the curvilinear parameters 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.
bool hasCovariance (const State &state) const
 Check if the state carries a covariance.
void initialize (State &state, const BoundParameters &par) const
 Initialize the stepper state from bound track parameters.
void initialize (State &state, const BoundVector &boundParams, const std::optional< BoundMatrix > &cov, ParticleHypothesis particleHypothesis, const Surface &surface) const
 Initialize the stepper state from bound parameters and surface.
State makeState (const Options &options) const
 Create a stepper state from given options.
Vector3 momentum (const State &state) const
 Momentum accessor.
std::string outputStepSize (const State &state) const
 Output the Step Size - single component.
const ParticleHypothesis & particleHypothesis (const State &state) const
 Particle hypothesis.
double pathLength (const State &state) const
 Get the path length.
Vector3 position (const State &state) const
 Global particle position accessor.
bool prepareCurvilinearState (State &state) const
 If necessary fill additional members needed for transportToCurvilinear.
double qOverP (const State &state) const
 QoP direction accessor.
void releaseStepSize (State &state, ConstrainedStep::Type stype) const
 Release the Step size.
void setCovariance (State &state, const Covariance &covariance) const
 Set the covariance at the anchor.
const StepperStatistics & statistics (const State &state) const
 Get the stepper statistics.
Result< double > step (State &state, Direction propDir, const IVolumeMaterial *material) const
 Perform a Runge-Kutta track parameter propagation step.
const ConstrainedStep & stepSize (const State &state) const
 Get the step size constraints.
double time (const State &state) const
 Time access.
Result< Jacobian > transportToBound (State &state, const Surface &surface, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const
 Transport the covariance to a surface at the current position.
Jacobian transportToCurvilinear (State &state) const
 Transport the covariance to the curvilinear frame at the current position.
void update (State &state, const FreeVector &freeParams, const BoundVector &boundParams, const Covariance &covariance, const Surface &surface) const
 Method to update a stepper state to the some parameters.
void update (State &state, const Vector3 &uposition, const Vector3 &udirection, double qOverP, double time) const
 Method to update the stepper state.
void updateStepSize (State &state, const NavigationTarget &target, 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 propDir, const BoundaryTolerance &boundaryTolerance, double surfaceTolerance, ConstrainedStep::Type stype, const Logger &logger=getDummyLogger(), const Vector3 &curvature=Vector3::Zero()) const
 Update surface status.

Protected Attributes

std::shared_ptr< const MagneticFieldProvider > m_bField
 Magnetic field inside of the detector.

Detailed Description

template<typename extension_t = EigenStepperDefaultExtension>
class Acts::EigenStepper< extension_t >

Runge-Kutta-Nystroem stepper based on Eigen implementation for the following ODE:

r = (x,y,z) ... global position T = (Ax,Ay,Az) ... momentum direction (normalized)

dr/ds = T dT/ds = q/p * (T x B)

with s being the arc length of the track, q the charge of the particle, p the momentum magnitude and B the magnetic field

Constructor & Destructor Documentation

◆ EigenStepper() [1/2]

template<typename extension_t = EigenStepperDefaultExtension>
Acts::EigenStepper< extension_t >::EigenStepper ( std::shared_ptr< const MagneticFieldProvider > bField)
explicit

Constructor requires knowledge of the detector's magnetic field.

Parameters
bFieldThe magnetic field provider

◆ EigenStepper() [2/2]

template<typename extension_t = EigenStepperDefaultExtension>
Acts::EigenStepper< extension_t >::EigenStepper ( const Config & config)
explicit

Constructor with configuration.

Parameters
[in]configThe configuration of the stepper

Member Function Documentation

◆ absoluteMomentum()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::absoluteMomentum ( const State & state) const

Absolute momentum accessor.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Absolute momentum magnitude

◆ boundParameters()

template<typename extension_t = EigenStepperDefaultExtension>
Result< BoundParameters > Acts::EigenStepper< extension_t >::boundParameters ( const State & state,
const Surface & surface ) const

Get the bound parameters at the current position.

The parameters carry the covariance at the anchor if the state has one.

Note
It does not check if the state is on surface or anchored on it
Parameters
[in]stateThe stepping state (thread-local cache)
[in]surfaceThe surface of the parameters
Returns
The bound parameters, or a failure if the position cannot be expressed on surface

◆ charge()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::charge ( const State & state) const

Charge access.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Electric charge of the particle

◆ covariance()

template<typename extension_t = EigenStepperDefaultExtension>
const std::optional< Covariance > & Acts::EigenStepper< extension_t >::covariance ( const State & state) const

Get the covariance at the anchor.

The anchor is the frame of the last initialization, transport or update.

Parameters
state[in] The stepping state (thread-local cache)
Returns
The covariance at the anchor, or no value if the state does not carry a covariance

◆ curvature()

template<typename extension_t = EigenStepperDefaultExtension>
Result< Vector3 > Acts::EigenStepper< extension_t >::curvature ( State & state) const

Current global geometric curvature d(direction)/ds in inverse length.

Unchanged under propagation reversal; reflects current momentum and field.

Parameters
stateStepping state; the field cache may be updated
Returns
Curvature vector, or a field lookup error

◆ curvilinearParameters()

template<typename extension_t = EigenStepperDefaultExtension>
BoundParameters Acts::EigenStepper< extension_t >::curvilinearParameters ( const State & state) const

Get the curvilinear parameters at the current position.

The parameters carry the covariance at the anchor if the state has one.

Parameters
[in]stateThe stepping state (thread-local cache)
Returns
The curvilinear parameters

◆ direction()

template<typename extension_t = EigenStepperDefaultExtension>
Vector3 Acts::EigenStepper< extension_t >::direction ( const State & state) const

Momentum direction accessor.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Current normalized direction vector

◆ getField()

template<typename extension_t = EigenStepperDefaultExtension>
Result< Vector3 > Acts::EigenStepper< extension_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.

Parameters
[in,out]stateis the propagation state associated with the track the magnetic field cell is used (and potentially updated)
[in]posis the field position
Returns
Magnetic field vector at the given position or error

◆ getStepSize()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::getStepSize ( const State & state,
ConstrainedStep::Type stype ) const

Get the step size.

Parameters
state[in] The stepping state (thread-local cache)
stype[in] The step size type to be returned
Returns
Current step size for the specified constraint type

◆ hasCovariance()

template<typename extension_t = EigenStepperDefaultExtension>
bool Acts::EigenStepper< extension_t >::hasCovariance ( const State & state) const

Check if the state carries a covariance.

Parameters
state[in] The stepping state (thread-local cache)
Returns
True if the covariance is transported

◆ initialize() [1/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::initialize ( State & state,
const BoundParameters & par ) const

Initialize the stepper state from bound track parameters.

Parameters
stateStepper state to initialize
parBound track parameters to initialize from

◆ initialize() [2/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::initialize ( State & state,
const BoundVector & boundParams,
const std::optional< BoundMatrix > & cov,
ParticleHypothesis particleHypothesis,
const Surface & surface ) const

Initialize the stepper state from bound parameters and surface.

Parameters
stateStepper state to initialize
boundParamsVector of bound track parameters
covOptional covariance matrix
particleHypothesisParticle hypothesis for the track
surfaceSurface associated with the parameters

◆ makeState()

template<typename extension_t = EigenStepperDefaultExtension>
State Acts::EigenStepper< extension_t >::makeState ( const Options & options) const

Create a stepper state from given options.

Parameters
optionsConfiguration options for the stepper state
Returns
Initialized stepper state object

◆ momentum()

template<typename extension_t = EigenStepperDefaultExtension>
Vector3 Acts::EigenStepper< extension_t >::momentum ( const State & state) const

Momentum accessor.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Current momentum vector

◆ outputStepSize()

template<typename extension_t = EigenStepperDefaultExtension>
std::string Acts::EigenStepper< extension_t >::outputStepSize ( const State & state) const

Output the Step Size - single component.

Parameters
state[in,out] The stepping state (thread-local cache)
Returns
String representation of the current step size

◆ particleHypothesis()

template<typename extension_t = EigenStepperDefaultExtension>
const ParticleHypothesis & Acts::EigenStepper< extension_t >::particleHypothesis ( const State & state) const

Particle hypothesis.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Reference to the particle hypothesis used

◆ pathLength()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::pathLength ( const State & state) const

Get the path length.

Parameters
state[in] The stepping state (thread-local cache)
Returns
The path length since the last initialization

◆ position()

template<typename extension_t = EigenStepperDefaultExtension>
Vector3 Acts::EigenStepper< extension_t >::position ( const State & state) const

Global particle position accessor.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Current global position vector

◆ prepareCurvilinearState()

template<typename extension_t = EigenStepperDefaultExtension>
bool Acts::EigenStepper< extension_t >::prepareCurvilinearState ( State & state) const

If necessary fill additional members needed for transportToCurvilinear.

Compute path length derivatives in case they have not been computed yet, which is the case if no step has been executed yet.

Parameters
[in,out]stateThe state of the stepper
Returns
true if nothing is missing after this call, false otherwise.

◆ qOverP()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::qOverP ( const State & state) const

QoP direction accessor.

Parameters
state[in] The stepping state (thread-local cache)
Returns
Charge over momentum (q/p) value

◆ releaseStepSize()

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::releaseStepSize ( State & state,
ConstrainedStep::Type stype ) const

Release the Step size.

Parameters
state[in,out] The stepping state (thread-local cache)
[in]stypeThe step size type to be released

◆ setCovariance()

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::setCovariance ( State & state,
const Covariance & covariance ) const

Set the covariance at the anchor.

The state must already carry a covariance, because the stepper only transports the Jacobian while it has one.

Parameters
[in,out]stateThe stepping state (thread-local cache)
[in]covarianceThe new covariance at the anchor
Exceptions
std::logic_errorif the state does not carry a covariance

◆ statistics()

template<typename extension_t = EigenStepperDefaultExtension>
const StepperStatistics & Acts::EigenStepper< extension_t >::statistics ( const State & state) const

Get the stepper statistics.

Parameters
state[in] The stepping state (thread-local cache)
Returns
The statistics since the last initialization

◆ step()

template<typename extension_t = EigenStepperDefaultExtension>
Result< double > Acts::EigenStepper< extension_t >::step ( State & state,
Direction propDir,
const IVolumeMaterial * material ) const

Perform a Runge-Kutta track parameter propagation step.

Parameters
[in,out]stateState of the stepper
propDiris the direction of propagation
materialis the optional volume material we are stepping through.
Returns
the result of the step
Note
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.

◆ stepSize()

template<typename extension_t = EigenStepperDefaultExtension>
const ConstrainedStep & Acts::EigenStepper< extension_t >::stepSize ( const State & state) const

Get the step size constraints.

Parameters
state[in] The stepping state (thread-local cache)
Returns
The step size constraints

◆ time()

template<typename extension_t = EigenStepperDefaultExtension>
double Acts::EigenStepper< extension_t >::time ( const State & state) const

Time access.

Parameters
state[in] The stepping state (thread-local cache)
Returns
The time coordinate from the free parameters vector

◆ transportToBound()

template<typename extension_t = EigenStepperDefaultExtension>
Result< Jacobian > Acts::EigenStepper< extension_t >::transportToBound ( State & state,
const Surface & surface,
const FreeToBoundCorrection & freeToBoundCorrection = FreeToBoundCorrection(false) ) const

Transport the covariance to a surface at the current position.

This anchors the state on surface. Without a covariance the state does not change. The state must be on surface, and it stays unchanged if it is not.

Parameters
[in,out]stateState of the stepper
[in]surfaceThe surface to transport the covariance to
[in]freeToBoundCorrectionCorrection for non-linearity effect during transform from free to bound
Returns
The jacobian from the previous anchor to surface, or a failure if the state is not on surface

◆ transportToCurvilinear()

template<typename extension_t = EigenStepperDefaultExtension>
Jacobian Acts::EigenStepper< extension_t >::transportToCurvilinear ( State & state) const

Transport the covariance to the curvilinear frame at the current position.

This anchors the state on the curvilinear frame. Without a covariance the state does not change.

Parameters
[in,out]stateState of the stepper
Returns
The jacobian from the previous anchor to the curvilinear frame

◆ update() [1/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::update ( State & state,
const FreeVector & freeParams,
const BoundVector & boundParams,
const Covariance & covariance,
const Surface & surface ) const

Method to update a stepper state to the some parameters.

This anchors the state on surface.

Parameters
[in,out]stateState object that will be updated
[in]freeParamsFree parameters that will be written into state
[in]boundParamsCorresponding bound parameters used to update jacToGlobal in state
[in]covarianceThe covariance that will be written into state if the state carries a covariance
[in]surfaceThe surface used to update the jacToGlobal

◆ update() [2/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::update ( State & state,
const Vector3 & uposition,
const Vector3 & udirection,
double qOverP,
double time ) const

Method to update the stepper state.

Parameters
[in,out]stateState object that will be updated
[in]upositionthe updated position
[in]udirectionthe updated direction
[in]qOverPthe updated qOverP value
[in]timethe updated time value

◆ updateStepSize() [1/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::updateStepSize ( State & state,
const NavigationTarget & target,
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.

Parameters
state[in,out] The stepping state (thread-local cache)
target[in] The NavigationTarget
direction[in] The propagation direction
stype[in] The step size type to be set

◆ updateStepSize() [2/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::updateStepSize ( State & state,
double stepSize,
ConstrainedStep::Type stype ) const

Update step size - explicitly with a double.

Parameters
state[in,out] The stepping state (thread-local cache)
stepSize[in] The step size value
stype[in] The step size type to be set

◆ updateSurfaceStatus()

template<typename extension_t = EigenStepperDefaultExtension>
IntersectionStatus Acts::EigenStepper< extension_t >::updateSurfaceStatus ( State & state,
const Surface & surface,
std::uint8_t index,
Direction propDir,
const BoundaryTolerance & boundaryTolerance,
double surfaceTolerance,
ConstrainedStep::Type stype,
const Logger & logger = getDummyLogger(),
const Vector3 & curvature = Vector3::Zero() ) const

Update surface status.

It checks the status to the reference surface & updates the step size accordingly

Parameters
[in,out]stateThe stepping state (thread-local cache)
[in]surfaceThe surface provided
[in]indexThe surface intersection index
[in]propDirThe propagation direction
[in]boundaryToleranceThe boundary check for this status update
[in]surfaceToleranceSurface tolerance used for intersection
[in]stypeThe step size type to be set
[in]loggerA Logger instance
curvatureGlobal geometric curvature for the crossing estimate
Returns
Status of the intersection indicating whether surface was reached