ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
|
Runge-Kutta-Nystroem stepper based on Eigen implementation for the following ODE: More...
#include <acts/blob/master/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< BoundParameters, Jacobian, double > |
using | CurvilinearState = std::tuple< CurvilinearParameters, Jacobian, double > |
using | BField = bfield_t |
Public Member Functions | |
EigenStepper (BField bField=BField()) | |
Constructor requires knowledge of the detector's magnetic field. | |
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 |
Intersection::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 BoundParameters &pars) 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. | |
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 45 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 45 of file EigenStepper.hpp
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::BField = bfield_t |
Definition at line 52 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 52 of file EigenStepper.hpp
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::BoundState = std::tuple<BoundParameters, Jacobian, double> |
Definition at line 50 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 50 of file EigenStepper.hpp
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::Covariance = BoundSymMatrix |
Definition at line 49 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 49 of file EigenStepper.hpp
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::CurvilinearState = std::tuple<CurvilinearParameters, Jacobian, double> |
Definition at line 51 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 51 of file EigenStepper.hpp
using Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::Jacobian = BoundMatrix |
Jacobian, Covariance and State defintions.
Definition at line 48 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 48 of file EigenStepper.hpp
Acts::EigenStepper< B, E, A >::EigenStepper | ( | BField | bField = BField() | ) |
Constructor requires knowledge of the detector's magnetic field.
Definition at line 12 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 12 of file EigenStepper.ipp
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
[in] | state | State that will be presented as BoundState |
[in] | surface | The surface to which we bind the state |
Definition at line 16 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 16 of file EigenStepper.ipp
References Acts::detail::boundState(), Dataset::parameters, and surface().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Charge access
state | [in] The stepping state (thread-local cache) |
Definition at line 204 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 204 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
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
[in,out] | state | State of the stepper |
Definition at line 64 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 64 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.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
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
surface_t | the Surface type |
[in,out] | state | State of the stepper |
[in] | surface | is the surface to which the covariance is forwarded to |
Definition at line 70 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 70 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.
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
[in] | state | State that will be presented as CurvilinearState |
Definition at line 29 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 29 of file EigenStepper.ipp
References Acts::detail::curvilinearState(), and Dataset::parameters.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Momentum direction accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 194 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 194 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
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
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Actual momentum accessor
state | [in] The stepping state (thread-local cache) |
Definition at line 199 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 199 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Output the Step Size - single component
state | [in,out] The stepping state (thread-local cache) |
Definition at line 262 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 262 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Overstep limit
state | [in] The stepping state (thread-local cache) |
Definition at line 269 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 269 of file EigenStepper.hpp
|
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
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Release the Step size
state | [in,out] The stepping state (thread-local cache) |
Definition at line 255 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 255 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Set Step size - explicitely 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 |
Definition at line 246 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 246 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
Acts::Result< double > Acts::EigenStepper< B, E, A >::step | ( | propagator_state_t & | state | ) | const |
Perform a Runge-Kutta track parameter propagation step
[in,out] | state | is 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 82 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 82 of file EigenStepper.ipp
References kdfinder::abs(), D(), e, Acts::UnitConstants::h, h2, max, and min.
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
inline |
Time access
state | [in] The stepping state (thread-local cache) |
Definition at line 209 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 209 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
void Acts::EigenStepper< B, E, A >::update | ( | State & | state, |
const BoundParameters & | pars | ||
) | const |
Method to update a stepper state to the some parameters
[in,out] | state | State object that will be updated |
[in] | pars | Parameters that will be written into state |
Definition at line 40 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 40 of file EigenStepper.ipp
References Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::cov, Acts::SingleTrackParameters< ChargePolicy >::covariance(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::dir, mom, Acts::SingleTrackParameters< ChargePolicy >::momentum(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::p, Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::pos, Acts::SingleTrackParameters< ChargePolicy >::position(), Acts::EigenStepper< bfield_t, extensionlist_t, auctioneer_t >::State::t, and Acts::SingleTrackParameters< ChargePolicy >::time().
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
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
[in,out] | state | State object that will be updated |
[in] | uposition | the updated position |
[in] | udirection | the updated direction |
[in] | up | the updated momentum value |
Definition at line 53 of file EigenStepper.ipp.
View newest version in sPHENIX GitHub at line 53 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::VectorHelpers::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 236 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 236 of file EigenStepper.hpp
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
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 219 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 219 of file EigenStepper.hpp
Referenced by Acts::Test::BOOST_AUTO_TEST_CASE().
|
private |
Magnetic field inside of the detector.
Definition at line 353 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 353 of file EigenStepper.hpp
|
private |
Overstep limit: could/should be dynamic.
Definition at line 356 of file EigenStepper.hpp.
View newest version in sPHENIX GitHub at line 356 of file EigenStepper.hpp