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

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
struct  Options
struct  State
 State for track parameter propagation. More...

Public Types

using BoundState = std::tuple<BoundTrackParameters, Jacobian, double>
 Type alias for bound state tuple containing parameters, jacobian, and path length.
using Covariance = BoundSquareMatrix
 Type alias for covariance matrix (bound square matrix).
using Jacobian = BoundMatrix
 Jacobian, Covariance and State definitions.

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< BoundStateboundState (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.
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< Vector3getField (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 BoundTrackParameters &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 ParticleHypothesisparticleHypothesis (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 direction accessor.
void releaseStepSize (State &state, ConstrainedStep::Type stype) const
 Release the Step size.
void setIdentityJacobian (State &state) const
 Method that reset the Jacobian to the Identity for when no bound state are available.
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.
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
 Update surface status.

Protected Attributes

std::shared_ptr< const MagneticFieldProviderm_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

Member Typedef Documentation

◆ BoundState

template<typename extension_t = EigenStepperDefaultExtension>
using Acts::EigenStepper< extension_t >::BoundState = std::tuple<BoundTrackParameters, Jacobian, double>

Type alias for bound state tuple containing parameters, jacobian, and path length.

◆ Covariance

template<typename extension_t = EigenStepperDefaultExtension>
using Acts::EigenStepper< extension_t >::Covariance = BoundSquareMatrix

Type alias for covariance matrix (bound square matrix).

◆ Jacobian

template<typename extension_t = EigenStepperDefaultExtension>
using Acts::EigenStepper< extension_t >::Jacobian = BoundMatrix

Jacobian, Covariance and State definitions.

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

◆ boundState()

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

Parameters
[in]stateState that will be presented as BoundState
[in]surfaceThe surface to which we bind the state
[in]transportCovFlag steering covariance transport
[in]freeToBoundCorrectionCorrection for non-linearity effect during transform from free to bound
Returns
A bound state:
  • the parameters at the surface
  • the stepwise jacobian towards it (from last bound)
  • and the path length (from start - for ordering)

◆ 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

◆ curvilinearState()

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

Parameters
[in]stateState that will be presented as CurvilinearState
[in]transportCovFlag steering covariance transport
Returns
A curvilinear state:
  • the curvilinear parameters at given position
  • the stepweise jacobian towards it (from last bound)
  • and the path length (from start - for ordering)

◆ 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

◆ initialize() [1/2]

template<typename extension_t = EigenStepperDefaultExtension>
void Acts::EigenStepper< extension_t >::initialize ( State & state,
const BoundTrackParameters & 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

◆ 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 curvilinearState.

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

◆ setIdentityJacobian()

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

Method that reset the Jacobian to the Identity for when no bound state are available.

Parameters
[in,out]stateState of the stepper

◆ 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.

◆ 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

◆ transportCovarianceToBound()

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

Template Parameters
surface_tthe Surface type
Parameters
[in,out]stateState of the stepper
[in]surfaceis the surface to which the covariance is forwarded to
[in]freeToBoundCorrectionCorrection for non-linearity effect during transform from free to bound
Note
no check is done if the position is actually on the surface

◆ transportCovarianceToCurvilinear()

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

Parameters
[in,out]stateState of the stepper

◆ 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.

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
[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

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
Returns
Status of the intersection indicating whether surface was reached

Member Data Documentation

◆ m_bField

template<typename extension_t = EigenStepperDefaultExtension>
std::shared_ptr<const MagneticFieldProvider> Acts::EigenStepper< extension_t >::m_bField
protected

Magnetic field inside of the detector.