EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t > Class Template Reference

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

#include <acts/blob/sPHENIX/Core/include/Acts/Propagator/EigenStepper.hpp>

Classes

struct  State
 State for track parameter propagation. More...
 

Public Types

using Jacobian = BoundMatrix
 Jacobian, Covariance and State defintions.
 
using Covariance = BoundSymMatrix
 
using BoundState = std::tuple< BoundTrackParameters, Jacobian, double >
 
using CurvilinearState = std::tuple< CurvilinearTrackParameters, Jacobian, double >
 
using BField = bfield_t
 

Public Member Functions

 EigenStepper (BField bField)
 Constructor requires knowledge of the detector's magnetic field.
 
void resetState (State &state, const BoundVector &boundParams, const BoundSymMatrix &cov, const Surface &surface, const NavigationDirection navDir=forward, const double stepSize=std::numeric_limits< double >::max()) const
 Resets the state.
 
Vector3D getField (State &state, const Vector3D &pos) const
 
Vector3D position (const State &state) const
 
Vector3D direction (const State &state) const
 
double momentum (const State &state) const
 
double charge (const State &state) const
 
double time (const State &state) const
 
Intersection3D::Status updateSurfaceStatus (State &state, const Surface &surface, const BoundaryCheck &bcheck) const
 
template<typename object_intersection_t >
void updateStepSize (State &state, const object_intersection_t &oIntersection, bool release=true) const
 
void setStepSize (State &state, double stepSize, ConstrainedStep::Type stype=ConstrainedStep::actor) const
 
void releaseStepSize (State &state) const
 
std::string outputStepSize (const State &state) const
 
double overstepLimit (const State &) const
 
BoundState boundState (State &state, const Surface &surface) const
 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.
 
CurvilinearState curvilinearState (State &state) const
 This transports (if necessary) the covariance to the current position and creates a curvilinear state.
 
void update (State &state, const FreeVector &parameters, const Covariance &covariance) const
 
void update (State &state, const Vector3D &uposition, const Vector3D &udirection, double up, double time) const
 
void covarianceTransport (State &state) const
 
void covarianceTransport (State &state, const Surface &surface) const
 
template<typename propagator_state_t >
Result< double > step (propagator_state_t &state) const
 

Private Attributes

BField m_bField
 Magnetic field inside of the detector.
 
double m_overstepLimit = 100_um
 Overstep limit: could/should be dynamic.
 

Detailed Description

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
class Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_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 its momentum and B the magnetic field

Definition at line 48 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 48 of file EigenStepper.hpp

Member Typedef Documentation

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::BField = bfield_t

Definition at line 56 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 56 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::BoundState = std::tuple<BoundTrackParameters, Jacobian, double>

Definition at line 53 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 53 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::Covariance = BoundSymMatrix

Definition at line 52 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 52 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::CurvilinearState = std::tuple<CurvilinearTrackParameters, Jacobian, double>

Definition at line 55 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 55 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::Jacobian = BoundMatrix

Jacobian, Covariance and State defintions.

Definition at line 51 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 51 of file EigenStepper.hpp

Constructor & Destructor Documentation

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
Acts::EigenStepper< B, E, A >::EigenStepper ( BField  bField)

Constructor requires knowledge of the detector's magnetic field.

Definition at line 13 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 13 of file EigenStepper.ipp

Member Function Documentation

template<typename B , typename E , typename A >
auto Acts::EigenStepper< B, E, A >::boundState ( State state,
const Surface surface 
) const

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.

Create and return the bound state at the current position

Parameters
[in]stateState that will be presented as BoundState
[in]surfaceThe surface to which we bind the state
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)

Definition at line 41 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 41 of file EigenStepper.ipp

References Acts::detail::boundState(), Dataset::parameters, and surface().

+ Here is the call graph for this function:

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
double Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::charge ( const State state) const
inline

Charge access

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 221 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 221 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::q.

template<typename B , typename E , typename A >
void Acts::EigenStepper< B, E, A >::covarianceTransport ( 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
Returns
the full transport jacobian

Definition at line 88 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 88 of file EigenStepper.ipp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::cov, Acts::detail::covarianceTransport(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::derivative, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacobian, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacToGlobal, and Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacTransport.

+ Here is the call graph for this function:

template<typename B , typename E , typename A >
void Acts::EigenStepper< B, E, A >::covarianceTransport ( State state,
const Surface surface 
) 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
Note
no check is done if the position is actually on the surface

Definition at line 94 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 94 of file EigenStepper.ipp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::cov, Acts::detail::covarianceTransport(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::derivative, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::geoContext, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacobian, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacToGlobal, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::jacTransport, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::p, Dataset::parameters, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::pos, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::q, and Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::t.

+ Here is the call graph for this function:

template<typename B , typename E , typename A >
auto Acts::EigenStepper< B, E, A >::curvilinearState ( State state) const

This transports (if necessary) the covariance to the current position and creates a curvilinear state.

Create and return a curvilinear state at the current position

Parameters
[in]stateState that will be presented as CurvilinearState
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)

Definition at line 54 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 54 of file EigenStepper.ipp

References Acts::detail::curvilinearState(), and Dataset::parameters.

+ Here is the call graph for this function:

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
Vector3D Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::direction ( const State state) const
inline

Momentum direction accessor

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 211 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 211 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
Vector3D Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::getField ( State state,
const Vector3D pos 
) const
inline

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

Definition at line 198 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 198 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::fieldCache.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
double Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::momentum ( const State state) const
inline

Actual momentum accessor

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 216 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 216 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::p.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
std::string Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::outputStepSize ( const State state) const
inline

Output the Step Size - single component

Parameters
state[in,out] The stepping state (thread-local cache)

Definition at line 279 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 279 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::stepSize, and Acts::ConstrainedStep::toString().

+ Here is the call graph for this function:

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
double Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::overstepLimit ( const State ) const
inline

Overstep limit

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 286 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 286 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
Vector3D Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::position ( const State state) const
inline

Global particle position accessor

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 206 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 206 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::pos.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
void Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::releaseStepSize ( State state) const
inline

Release the Step size

Parameters
state[in,out] The stepping state (thread-local cache)

Definition at line 272 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 272 of file EigenStepper.hpp

References Acts::ConstrainedStep::actor, Acts::ConstrainedStep::release(), and Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::stepSize.

+ Here is the call graph for this function:

template<typename B , typename E , typename A >
void Acts::EigenStepper< B, E, A >::resetState ( State state,
const BoundVector boundParams,
const BoundSymMatrix cov,
const Surface surface,
const NavigationDirection  navDir = forward,
const double  stepSize = std::numeric_limits<double>::max() 
) const
template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
void Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::setStepSize ( State state,
double  stepSize,
ConstrainedStep::Type  stype = ConstrainedStep::actor 
) const
inline

Set Step size - explicitely 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

Definition at line 263 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 263 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::previousStepSize, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::stepSize, and Acts::ConstrainedStep::update().

+ Here is the call graph for this function:

template<typename B , typename E , typename A >
template<typename propagator_state_t >
Acts::Result< double > Acts::EigenStepper< B, E, A >::step ( propagator_state_t &  state) const

Perform a Runge-Kutta track parameter propagation step

Parameters
[in,out]stateis the propagation state associated with the track parameters that are being propagated.
                 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.  

Definition at line 106 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 106 of file EigenStepper.ipp

References kdfinder::abs(), Acts::UnitConstants::e, Acts::UnitConstants::h, h2, max, and min.

+ Here is the call graph for this function:

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
double Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::time ( const State state) const
inline

Time access

Parameters
state[in] The stepping state (thread-local cache)

Definition at line 226 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 226 of file EigenStepper.hpp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::t.

template<typename B , typename E , typename A >
void Acts::EigenStepper< B, E, A >::update ( State state,
const FreeVector parameters,
const Covariance covariance 
) const

Method to update a stepper state to the some parameters

Parameters
[in,out]stateState object that will be updated
[in]parsParameters that will be written into state

Definition at line 65 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 65 of file EigenStepper.ipp

References kdfinder::abs(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::cov, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir, Acts::eFreeDir0, Acts::eFreePos0, Acts::eFreeQOverP, Acts::eFreeTime, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::p, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::pos, and Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::t.

+ Here is the call graph for this function:

template<typename B , typename E , typename A >
void Acts::EigenStepper< B, E, A >::update ( State state,
const Vector3D uposition,
const Vector3D udirection,
double  up,
double  time 
) const

Method to update momentum, direction and p

Parameters
[in,out]stateState object that will be updated
[in]upositionthe updated position
[in]udirectionthe updated direction
[in]upthe updated momentum value

Definition at line 77 of file EigenStepper.ipp.

View newest version in sPHENIX GitHub at line 77 of file EigenStepper.ipp

References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::p, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::pos, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::t, and Acts::Test::time.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
template<typename object_intersection_t >
void Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::updateStepSize ( State state,
const object_intersection_t &  oIntersection,
bool  release = true 
) const
inline

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)
oIntersection[in] The ObjectIntersection to layer, boundary, etc
release[in] boolean to trigger step size release

Definition at line 253 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 253 of file EigenStepper.hpp

References conf::release.

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
Intersection3D::Status Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::updateSurfaceStatus ( State state,
const Surface surface,
const BoundaryCheck bcheck 
) const
inline

Update surface status

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

Parameters
state[in,out] The stepping state (thread-local cache)
surface[in] The surface provided
bcheck[in] The boundary check for this status update

Definition at line 236 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 236 of file EigenStepper.hpp

References surface().

+ Here is the call graph for this function:

Member Data Documentation

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
BField Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::m_bField
private

Magnetic field inside of the detector.

Definition at line 371 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 371 of file EigenStepper.hpp

template<typename bfield_t, typename extensionlist_t = StepperExtensionList<DefaultExtension>, typename auctioneer_t = detail::VoidAuctioneer>
double Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::m_overstepLimit = 100_um
private

Overstep limit: could/should be dynamic.

Definition at line 374 of file EigenStepper.hpp.

View newest version in sPHENIX GitHub at line 374 of file EigenStepper.hpp


The documentation for this class was generated from the following files: