ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
Acts::Experimental::RiddersStepper< stepper_impl_t > Class Template Referencefinal

RiddersStepper implements the Ridders method for numerical differentiation to compute the Jacobian of the bound to bound transformation. More...

#include <Acts/Propagator/RiddersStepper.hpp>

Classes

struct  Config
 Configuration struct for the RiddersStepper. More...
struct  State
 The state struct for the RiddersStepper. More...

Public Types

using BoundParameters = BoundTrackParameters
 The bound parameters type used by this stepper.
using BoundState = std::tuple<BoundParameters, Jacobian, double>
 The type of the bound state returned by the boundState method.
using Covariance = BoundMatrix
 The covariance type for the bound parameters.
using Jacobian = BoundMatrix
 The Jacobian type for the bound to bound transformation.
using Options = typename StepperImpl::Options
 The options type for the RiddersStepper.
using StepperImpl = stepper_impl_t
 The type of the underlying stepper implementation.

Public Member Functions

 RiddersStepper (const Config &config)
 Construct a RiddersStepper with the given configuration.
 RiddersStepper (std::shared_ptr< const MagneticFieldProvider > bField)
 Construct a RiddersStepper with the given magnetic field provider.
 RiddersStepper (StepperImpl stepperImpl)
 Construct a RiddersStepper with the given stepper implementation.
double absoluteMomentum (const State &state) const
 Get the absolute momentum of the primary stepper state.
Result< BoundStateboundState (State &state, const Surface &surface, bool transportCovariance=true, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const
 Compute the bound state.
double charge (const State &state) const
 Get the charge of the primary stepper state.
BoundState curvilinearState (State &state, bool transportCovariance=true) const
 Compute the curvilinear state.
Vector3 direction (const State &state) const
 Get the direction of the primary stepper state.
Result< Vector3getField (State &state, const Vector3 &position) const
 Get the magnetic field at the given position for the primary stepper state.
double getStepSize (const State &state, ConstrainedStep::Type stype) const
 Get the step size for the given constrained step type.
void initialize (State &state, const BoundParameters &boundParameters) const
 Initialize the state of the RiddersStepper based on the given bound parameters.
void initialize (State &state, const BoundVector &boundVector, const std::optional< BoundMatrix > &covariance, ParticleHypothesis particleHypothesis, const Surface &surface) const
 Initialize the state of the RiddersStepper based on the given bound vector and covariance.
State makeState (const Options &options) const
 Create a new state for the RiddersStepper based on the given options.
Vector3 momentum (const State &state) const
 Get the momentum vector of the primary stepper state.
std::string outputStepSize (const State &state) const
 Get a string representation of the step size constraints.
const ParticleHypothesisparticleHypothesis (const State &state) const
 Get the particle hypothesis of the primary stepper state.
Vector3 position (const State &state) const
 Get the position of the primary stepper state.
bool prepareCurvilinearState (State &state) const
 Prepare the stepper for the curvilinear transformation.
double qOverP (const State &state) const
 Get the charge over momentum of the primary stepper state.
void releaseStepSize (State &state, ConstrainedStep::Type stype) const
 Release the step size for the given constrained step type.
Result< double > step (State &state, Direction propagationDirection, const IVolumeMaterial *material) const
 Perform a step.
double time (const State &state) const
 Get the time of the primary stepper state.
void transportCovarianceToBound (State &state, const Surface &surface, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const
 Transport the covariance to bound parameters.
void transportCovarianceToCurvilinear (State &state) const
 Transport the covariance to curvilinear parameters.
void update (State &state, const FreeVector &, const BoundVector &boundParams, const BoundMatrix &covariance, const Surface &surface) const
 Update the state of the RiddersStepper.
void update (State &state, const Vector3 &position, const Vector3 &direction, double qOverP, double time) const
 Update the state of the RiddersStepper.
void updateStepSize (State &state, const NavigationTarget &target, Direction direction, ConstrainedStep::Type stype) const
 Update the step size based on the given navigation target, direction, and constrained step type.
void updateStepSize (State &state, double stepSize, ConstrainedStep::Type stype) const
 Update the step size based on the given step size and constrained step type.
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 the surface status of the primary and secondary stepper states based on the given surface and navigation direction.

Detailed Description

template<Concepts::SingleStepper stepper_impl_t>
class Acts::Experimental::RiddersStepper< stepper_impl_t >

RiddersStepper implements the Ridders method for numerical differentiation to compute the Jacobian of the bound to bound transformation.

It uses a primary stepper to perform the nominal step and multiple secondary steppers with varied initial conditions to compute the Jacobian columns. The variations are generated based on the input covariance and a configurable variation generator.

Template Parameters
stepper_impl_tthe type of the underlying stepper implementation

Constructor & Destructor Documentation

◆ RiddersStepper() [1/3]

template<Concepts::SingleStepper stepper_impl_t>
Acts::Experimental::RiddersStepper< stepper_impl_t >::RiddersStepper ( StepperImpl stepperImpl)
explicit

Construct a RiddersStepper with the given stepper implementation.

Parameters
stepperImplthe underlying stepper implementation

◆ RiddersStepper() [2/3]

template<Concepts::SingleStepper stepper_impl_t>
Acts::Experimental::RiddersStepper< stepper_impl_t >::RiddersStepper ( std::shared_ptr< const MagneticFieldProvider > bField)
explicit

Construct a RiddersStepper with the given magnetic field provider.

Parameters
bFieldthe magnetic field provider

◆ RiddersStepper() [3/3]

template<Concepts::SingleStepper stepper_impl_t>
Acts::Experimental::RiddersStepper< stepper_impl_t >::RiddersStepper ( const Config & config)
explicit

Construct a RiddersStepper with the given configuration.

Parameters
configthe configuration for the RiddersStepper

Member Function Documentation

◆ absoluteMomentum()

template<Concepts::SingleStepper stepper_impl_t>
double Acts::Experimental::RiddersStepper< stepper_impl_t >::absoluteMomentum ( const State & state) const

Get the absolute momentum of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the absolute momentum of the primary stepper state

◆ boundState()

template<Concepts::SingleStepper stepper_impl_t>
Result< BoundState > Acts::Experimental::RiddersStepper< stepper_impl_t >::boundState ( State & state,
const Surface & surface,
bool transportCovariance = true,
const FreeToBoundCorrection & freeToBoundCorrection = FreeToBoundCorrection(false) ) const

Compute the bound state.

Parameters
statethe state of the RiddersStepper
surfacethe surface
transportCovarianceflag indicating whether to transport the covariance to the bound parameters
freeToBoundCorrectionthe correction
Returns
the bound state

◆ charge()

template<Concepts::SingleStepper stepper_impl_t>
double Acts::Experimental::RiddersStepper< stepper_impl_t >::charge ( const State & state) const

Get the charge of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the charge of the primary stepper state

◆ curvilinearState()

template<Concepts::SingleStepper stepper_impl_t>
BoundState Acts::Experimental::RiddersStepper< stepper_impl_t >::curvilinearState ( State & state,
bool transportCovariance = true ) const

Compute the curvilinear state.

Parameters
statethe state of the RiddersStepper
transportCovarianceflag indicating whether to transport the covariance to the curvilinear parameters
Returns
the curvilinear state

◆ direction()

template<Concepts::SingleStepper stepper_impl_t>
Vector3 Acts::Experimental::RiddersStepper< stepper_impl_t >::direction ( const State & state) const

Get the direction of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the direction of the primary stepper state

◆ getField()

template<Concepts::SingleStepper stepper_impl_t>
Result< Vector3 > Acts::Experimental::RiddersStepper< stepper_impl_t >::getField ( State & state,
const Vector3 & position ) const

Get the magnetic field at the given position for the primary stepper state.

Parameters
statethe state of the RiddersStepper
positionthe position at which to get the magnetic field
Returns
the magnetic field at the given position for the primary stepper state

◆ getStepSize()

template<Concepts::SingleStepper stepper_impl_t>
double Acts::Experimental::RiddersStepper< stepper_impl_t >::getStepSize ( const State & state,
ConstrainedStep::Type stype ) const

Get the step size for the given constrained step type.

Parameters
statethe state of the RiddersStepper
stypethe type of the constrained step for which to get the step size
Returns
the step size of the primary stepper state for the given constrained step type

◆ initialize() [1/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::initialize ( State & state,
const BoundParameters & boundParameters ) const

Initialize the state of the RiddersStepper based on the given bound parameters.

Parameters
statethe state
boundParametersthe bound parameters to initialize the state with

◆ initialize() [2/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::initialize ( State & state,
const BoundVector & boundVector,
const std::optional< BoundMatrix > & covariance,
ParticleHypothesis particleHypothesis,
const Surface & surface ) const

Initialize the state of the RiddersStepper based on the given bound vector and covariance.

Parameters
statethe state
boundVectorthe bound vector to initialize the state with
covariancethe covariance of the bound parameters, used to generate the variations for the secondary steppers
particleHypothesisthe particle hypothesis
surfacethe surface on which the bound parameters are defined

◆ makeState()

template<Concepts::SingleStepper stepper_impl_t>
State Acts::Experimental::RiddersStepper< stepper_impl_t >::makeState ( const Options & options) const

Create a new state for the RiddersStepper based on the given options.

Parameters
optionsthe options
Returns
a new state for the RiddersStepper

◆ momentum()

template<Concepts::SingleStepper stepper_impl_t>
Vector3 Acts::Experimental::RiddersStepper< stepper_impl_t >::momentum ( const State & state) const

Get the momentum vector of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the momentum vector of the primary stepper state

◆ outputStepSize()

template<Concepts::SingleStepper stepper_impl_t>
std::string Acts::Experimental::RiddersStepper< stepper_impl_t >::outputStepSize ( const State & state) const

Get a string representation of the step size constraints.

Parameters
statethe state of the RiddersStepper
Returns
a string representation of the step size constraints

◆ particleHypothesis()

template<Concepts::SingleStepper stepper_impl_t>
const ParticleHypothesis & Acts::Experimental::RiddersStepper< stepper_impl_t >::particleHypothesis ( const State & state) const

Get the particle hypothesis of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the particle hypothesis of the primary stepper state

◆ position()

template<Concepts::SingleStepper stepper_impl_t>
Vector3 Acts::Experimental::RiddersStepper< stepper_impl_t >::position ( const State & state) const

Get the position of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the position of the primary stepper state

◆ prepareCurvilinearState()

template<Concepts::SingleStepper stepper_impl_t>
bool Acts::Experimental::RiddersStepper< stepper_impl_t >::prepareCurvilinearState ( State & state) const

Prepare the stepper for the curvilinear transformation.

Parameters
statethe state of the RiddersStepper
Returns
true if the preparation was successful for all stepper states, false otherwise

◆ qOverP()

template<Concepts::SingleStepper stepper_impl_t>
double Acts::Experimental::RiddersStepper< stepper_impl_t >::qOverP ( const State & state) const

Get the charge over momentum of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the charge over momentum of the primary stepper state

◆ releaseStepSize()

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::releaseStepSize ( State & state,
ConstrainedStep::Type stype ) const

Release the step size for the given constrained step type.

Parameters
statethe state of the RiddersStepper
stypethe type of the constrained step for which to release the step size

◆ step()

template<Concepts::SingleStepper stepper_impl_t>
Result< double > Acts::Experimental::RiddersStepper< stepper_impl_t >::step ( State & state,
Direction propagationDirection,
const IVolumeMaterial * material ) const

Perform a step.

Parameters
statethe state of the RiddersStepper
propagationDirectionthe direction
materialthe material
Returns
a result containing the step length or an error if the step failed

◆ time()

template<Concepts::SingleStepper stepper_impl_t>
double Acts::Experimental::RiddersStepper< stepper_impl_t >::time ( const State & state) const

Get the time of the primary stepper state.

Parameters
statethe state of the RiddersStepper
Returns
the time of the primary stepper state

◆ transportCovarianceToBound()

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::transportCovarianceToBound ( State & state,
const Surface & surface,
const FreeToBoundCorrection & freeToBoundCorrection = FreeToBoundCorrection(false) ) const

Transport the covariance to bound parameters.

Parameters
statethe state of the RiddersStepper
surfacethe surface
freeToBoundCorrectionthe correction

◆ transportCovarianceToCurvilinear()

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::transportCovarianceToCurvilinear ( State & state) const

Transport the covariance to curvilinear parameters.

Parameters
statethe state of the RiddersStepper

◆ update() [1/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::update ( State & state,
const FreeVector & ,
const BoundVector & boundParams,
const BoundMatrix & covariance,
const Surface & surface ) const

Update the state of the RiddersStepper.

Parameters
statethe state of the RiddersStepper
boundParamsthe bound vector
covariancethe covariance of the bound parameters
surfacethe surface on which the bound parameters are defined

◆ update() [2/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::update ( State & state,
const Vector3 & position,
const Vector3 & direction,
double qOverP,
double time ) const

Update the state of the RiddersStepper.

Parameters
statethe state of the RiddersStepper
positionthe position
directionthe direction
qOverPthe charge over momentum
timethe time

◆ updateStepSize() [1/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::updateStepSize ( State & state,
const NavigationTarget & target,
Direction direction,
ConstrainedStep::Type stype ) const

Update the step size based on the given navigation target, direction, and constrained step type.

Parameters
statethe state of the RiddersStepper
targetthe navigation target
directionthe direction
stypethe type of the constrained step

◆ updateStepSize() [2/2]

template<Concepts::SingleStepper stepper_impl_t>
void Acts::Experimental::RiddersStepper< stepper_impl_t >::updateStepSize ( State & state,
double stepSize,
ConstrainedStep::Type stype ) const

Update the step size based on the given step size and constrained step type.

Parameters
statethe state of the RiddersStepper
stepSizethe step size
stypethe type of the constrained step

◆ updateSurfaceStatus()

template<Concepts::SingleStepper stepper_impl_t>
IntersectionStatus Acts::Experimental::RiddersStepper< stepper_impl_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 the surface status of the primary and secondary stepper states based on the given surface and navigation direction.

Parameters
statethe state of the RiddersStepper
surfacethe surface
indexthe index of the surface
navDirthe navigation direction
boundaryTolerancethe boundary tolerance
surfaceTolerancethe surface tolerance
stypethe type of the constrained step
loggerthe logger
Returns
the overall intersection status after updating the surface status for the primary and secondary stepper states