Analysis Software
Documentation for sPHENIX simulation software
|
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 definitions. | |
using | Covariance = BoundSquareMatrix |
using | BoundState = std::tuple< BoundTrackParameters, Jacobian, double > |
using | CurvilinearState = std::tuple< CurvilinearTrackParameters, Jacobian, double > |
Public Member Functions | |
EigenStepper (std::shared_ptr< const MagneticFieldProvider > bField, double overstepLimit=100 *UnitConstants::um) | |
Constructor requires knowledge of the detector's magnetic field. | |
State | makeState (std::reference_wrapper< const GeometryContext > gctx, std::reference_wrapper< const MagneticFieldContext > mctx, const BoundTrackParameters &par, double ssize=std::numeric_limits< double >::max()) const |
void | resetState (State &state, const BoundVector &boundParams, const BoundSquareMatrix &cov, const Surface &surface, const double stepSize=std::numeric_limits< double >::max()) const |
Resets the state. | |
Result< Vector3 > | getField (State &state, const Vector3 &pos) const |
Vector3 | position (const State &state) const |
Vector3 | direction (const State &state) const |
double | qOverP (const State &state) const |
double | absoluteMomentum (const State &state) const |
Vector3 | momentum (const State &state) const |
double | charge (const State &state) const |
const ParticleHypothesis & | particleHypothesis (const State &state) const |
double | time (const State &state) const |
Intersection3D::Status | updateSurfaceStatus (State &state, const Surface &surface, Direction navDir, const BoundaryCheck &bcheck, ActsScalar surfaceTolerance=s_onSurfaceTolerance, const Logger &logger=getDummyLogger()) const |
template<typename object_intersection_t > | |
void | updateStepSize (State &state, const object_intersection_t &oIntersection, Direction, bool release=true) const |
void | setStepSize (State &state, double stepSize, ConstrainedStep::Type stype=ConstrainedStep::actor, bool release=true) const |
double | getStepSize (const State &state, ConstrainedStep::Type stype) const |
void | releaseStepSize (State &state) const |
std::string | outputStepSize (const State &state) const |
double | overstepLimit (const State &state) const |
Result< BoundState > | boundState (State &state, const Surface &surface, bool transportCov=true, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) 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, bool transportCov=true) const |
This transports (if necessary) the covariance to the current position and creates a curvilinear state. | |
void | update (State &state, const FreeVector &freeParams, const BoundVector &boundParams, const Covariance &covariance, const Surface &surface) const |
void | update (State &state, const Vector3 &uposition, const Vector3 &udirection, double qOverP, double time) const |
void | transportCovarianceToCurvilinear (State &state) const |
void | transportCovarianceToBound (State &state, const Surface &surface, const FreeToBoundCorrection &freeToBoundCorrection=FreeToBoundCorrection(false)) const |
template<typename propagator_state_t , typename navigator_t > | |
Result< double > | step (propagator_state_t &state, const navigator_t &navigator) const |
void | setIdentityJacobian (State &state) const |
Protected Attributes | |
std::shared_ptr< const MagneticFieldProvider > | m_bField |
Magnetic field inside of the detector. | |
double | m_overstepLimit |
Overstep limit. | |
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
Definition at line 49 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 49 of file EigenStepper.hpp
using Acts::EigenStepper< extensionlist_t, auctioneer_t >::BoundState = std::tuple<BoundTrackParameters, Jacobian, double> |
Definition at line 54 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 54 of file EigenStepper.hpp
using Acts::EigenStepper< extensionlist_t, auctioneer_t >::Covariance = BoundSquareMatrix |
Definition at line 53 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 53 of file EigenStepper.hpp
using Acts::EigenStepper< extensionlist_t, auctioneer_t >::CurvilinearState = std::tuple<CurvilinearTrackParameters, Jacobian, double> |
Definition at line 56 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 56 of file EigenStepper.hpp
using Acts::EigenStepper< extensionlist_t, auctioneer_t >::Jacobian = BoundMatrix |
Jacobian, Covariance and State definitions.
Definition at line 52 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 52 of file EigenStepper.hpp
Acts::EigenStepper< E, A >::EigenStepper | ( | std::shared_ptr< const MagneticFieldProvider > | bField, |
double | overstepLimit = 100 * UnitConstants::um |
||
) |
Constructor requires knowledge of the detector's magnetic field.
Definition at line 14 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 14 of file EigenStepper.ipp
|
inline |
Absolute momentum accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 208 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 208 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::particleHypothesis(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::qOverP().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::momentum().
auto Acts::EigenStepper< E, A >::boundState | ( | State & | state, |
const Surface & | surface, | ||
bool | transportCov = true , |
||
const FreeToBoundCorrection & | freeToBoundCorrection = FreeToBoundCorrection(false) |
||
) | 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
[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 | Correction for non-linearity effect during transform from free to bound |
Definition at line 49 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 49 of file EigenStepper.ipp
References Acts::detail::boundState(), filter::state, and writeMapConfig::surface.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), and test_component_bound_state().
|
inline |
Charge access
state | [in] The stepping state (thread-local cache) |
Definition at line 222 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 222 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::particleHypothesis(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::qOverP().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
auto Acts::EigenStepper< E, A >::curvilinearState | ( | State & | state, |
bool | transportCov = true |
||
) | 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
[in] | state | State that will be presented as CurvilinearState |
[in] | transportCov | Flag steering covariance transport |
Definition at line 61 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 61 of file EigenStepper.ipp
References Acts::detail::curvilinearState(), and filter::state.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Momentum direction accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 196 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 196 of file EigenStepper.hpp
References Acts::eFreeDir0, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::momentum().
|
inline |
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 |
Definition at line 181 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 181 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::fieldCache, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::m_bField.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Get the step size
state | [in] The stepping state (thread-local cache) |
stype | [in] The step size type to be returned |
Definition at line 291 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 291 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::stepSize, and Acts::ConstrainedStep::value().
auto Acts::EigenStepper< E, A >::makeState | ( | std::reference_wrapper< const GeometryContext > | gctx, |
std::reference_wrapper< const MagneticFieldContext > | mctx, | ||
const BoundTrackParameters & | par, | ||
double | ssize = std::numeric_limits<double>::max() |
||
) | const |
Definition at line 19 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 19 of file EigenStepper.ipp
References gctx.
|
inline |
Momentum accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 215 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 215 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::absoluteMomentum(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::direction().
|
inline |
Output the Step Size - single component
state | [in,out] The stepping state (thread-local cache) |
Definition at line 305 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 305 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::stepSize, and Acts::ConstrainedStep::toString().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Overstep limit
state | The stepping state (thread-local cache) |
Definition at line 312 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 312 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::m_overstepLimit.
|
inline |
Particle hypothesis
state | [in] The stepping state (thread-local cache) |
Definition at line 229 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 229 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::particleHypothesis.
Referenced by Acts::EigenStepper< extensionlist_t, auctioneer_t >::absoluteMomentum(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::charge().
|
inline |
Global particle position accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 189 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 189 of file EigenStepper.hpp
References Acts::eFreePos0, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
QoP direction accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 203 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 203 of file EigenStepper.hpp
References Acts::eFreeQOverP, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars.
Referenced by Acts::EigenStepper< extensionlist_t, auctioneer_t >::absoluteMomentum(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::charge().
|
inline |
Release the Step size
state | [in,out] The stepping state (thread-local cache) |
Definition at line 298 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 298 of file EigenStepper.hpp
References Acts::ConstrainedStep::actor, Acts::ConstrainedStep::release(), and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::stepSize.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< E, A >::resetState | ( | State & | state, |
const BoundVector & | boundParams, | ||
const BoundSquareMatrix & | cov, | ||
const Surface & | surface, | ||
const double | stepSize = std::numeric_limits<double>::max() |
||
) | const |
Resets the state.
[in,out] | state | State of the stepper |
[in] | boundParams | Parameters in bound parametrisation |
[in] | cov | Covariance matrix |
[in] | surface | The reference surface of the bound parameters |
[in] | stepSize | Step size |
Definition at line 27 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 27 of file EigenStepper.ipp
References Acts::Surface::boundToFreeJacobian(), Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::derivative, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::geoContext, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacobian, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacToGlobal, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacTransport, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pathAccumulated, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::stepSize, Acts::detail::transformBoundToFreeParameters(), and Acts::KalmanVertexTrackUpdater::update().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< E, A >::setIdentityJacobian | ( | State & | state | ) | const |
Method that reset the Jacobian to the Identity for when no bound state are available
[in,out] | state | State of the stepper |
Definition at line 274 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 274 of file EigenStepper.ipp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacobian.
|
inline |
Set 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 |
release | [in] Do we release the step size? |
Definition at line 280 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 280 of file EigenStepper.hpp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::previousStepSize, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::stepSize, Acts::ConstrainedStep::update(), and Acts::ConstrainedStep::value().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
Acts::Result< double > Acts::EigenStepper< E, A >::step | ( | propagator_state_t & | state, |
const navigator_t & | navigator | ||
) | const |
Perform a Runge-Kutta track parameter propagation step
[in,out] | state | the propagation state |
[in] | navigator | the navigator of the propagation |
Definition at line 112 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 112 of file EigenStepper.ipp
References Acts::UnitConstants::e, Acts::eFreeDir0, Acts::eFreePos0, f, ckf::field, h, h2, Acts::UnitConstants::min, Acts::Test::pos, and position.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), test_component_bound_state(), test_multi_stepper_surface_status_update(), and test_multi_stepper_vs_eigen_stepper().
|
inline |
Time access
state | [in] The stepping state (thread-local cache) |
Definition at line 236 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 236 of file EigenStepper.hpp
References Acts::eFreeTime, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< E, A >::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 to |
[in] | freeToBoundCorrection | Correction for non-linearity effect during transform from free to bound |
Definition at line 101 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 101 of file EigenStepper.ipp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::cov, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::derivative, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::geoContext, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacobian, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacToGlobal, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacTransport, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars, writeMapConfig::surface, and Acts::detail::transportCovarianceToBound().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< E, A >::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 |
Definition at line 93 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 93 of file EigenStepper.ipp
References Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::cov, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::derivative, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacobian, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacToGlobal, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacTransport, and Acts::detail::transportCovarianceToCurvilinear().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), and test_multi_stepper_vs_eigen_stepper().
void Acts::EigenStepper< E, A >::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
[in,out] | state | State object that will be updated |
[in] | freeParams | Free parameters that will be written into state |
[in] | boundParams | Corresponding bound parameters used to update jacToGlobal in state |
[in] | covariance | The covariance that will be written into state |
[in] | surface | The surface used to update the jacToGlobal |
Definition at line 71 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 71 of file EigenStepper.ipp
References Acts::Surface::boundToFreeJacobian(), Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::cov, covariance(), Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::geoContext, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::jacToGlobal, and Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< E, A >::update | ( | State & | state, |
const Vector3 & | uposition, | ||
const Vector3 & | udirection, | ||
double | qOverP, | ||
double | time | ||
) | const |
Method to update the stepper state
[in,out] | state | State object that will be updated |
[in] | uposition | the updated position |
[in] | udirection | the updated direction |
[in] | qOverP | the updated qOverP value |
[in] | time | the updated time value |
Definition at line 83 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 83 of file EigenStepper.ipp
References Acts::eFreeDir0, Acts::eFreePos0, Acts::eFreeQOverP, Acts::eFreeTime, Acts::EigenStepper< extensionlist_t, auctioneer_t >::State::pars, and Acts::Test::time.
|
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.
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 269 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 269 of file EigenStepper.hpp
References filter::state.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
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] | navDir | The navigation direction |
[in] | bcheck | The boundary check for this status update |
[in] | surfaceTolerance | Surface tolerance used for intersection |
[in] | logger | A Logger instance |
Definition at line 249 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 249 of file EigenStepper.hpp
References logger(), Acts::Test::navDir, filter::state, and writeMapConfig::surface.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE(), and test_component_bound_state().
|
protected |
Magnetic field inside of the detector.
Definition at line 417 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 417 of file EigenStepper.hpp
Referenced by Acts::EigenStepper< extensionlist_t, auctioneer_t >::getField().
|
protected |
Overstep limit.
Definition at line 420 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 420 of file EigenStepper.hpp
Referenced by Acts::EigenStepper< extensionlist_t, auctioneer_t >::overstepLimit().