File RiddersPropagator.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

template<typename propagator_t>
class RiddersPropagator
#include <Acts/Propagator/RiddersPropagator.hpp>

This class performs the Ridders algorithm to estimate the propagation of the covariance to a certain point in space.

The algorithm is based on the small deviations of the start parameters based on their uncertainty at the beginning of the propgation. This deviation is represented here by a vector of relative deviations of these parameters and fix for all parameters. So, a common choice has to be found that is able to actually fit into the order of magnitude of the uncertainty of each parameter. Using these deviations, the propagation is repeated multiple times and the final covariance matrix at a given target surface is afterwards evaluated by first order derivatives of the final state parameters wrt. the inital parameters. Therefore this evaluation represents a first order approximation of the transport jacobian. Since performing multiple propagations and a numerical evaluation of the covariance requires more time than a single propagation towards a target + a common propagation of the covariance, this class just serves to verify the results of the latter classes.

Public Functions

inline RiddersPropagator(propagator_t &propagator)

Constructor using a propagator.

Parameters

propagator[in] Underlying propagator that will be used

template<typename stepper_t, typename navigator_t = detail::VoidNavigator>
inline RiddersPropagator(stepper_t stepper, navigator_t navigator = navigator_t())

Constructor building a propagator.

Template Parameters
  • stepper_t – Type of the stepper

  • navigator_t – Type of the navigator

Parameters
  • stepper[in] Stepper that will be used

  • navigator[in] Navigator that will be used

template<typename parameters_t, typename propagator_options_t>
Result<action_list_t_result_t<CurvilinearTrackParameters, typename propagator_options_t::action_list_type>> propagate(const parameters_t &start, const propagator_options_t &options) const

Propagation method targeting curvilinear parameters.

Template Parameters
  • parameters_t – Type of the start parameters

  • propagator_options_t – Type of the propagator options

Parameters
  • start[in] Start parameters

  • options[in] Options of the propagations

Returns

Result of the propagation

template<typename parameters_t, typename propagator_options_t>
Result<action_list_t_result_t<BoundTrackParameters, typename propagator_options_t::action_list_type>> propagate(const parameters_t &start, const Surface &target, const propagator_options_t &options) const

Propagation method targeting bound parameters.

Note

If the target surface is a disc, the resulting covariance may be inconsistent. In this case a zero matrix is returned.

Template Parameters
  • parameters_t – Type of the start parameters

  • propagator_options_t – Type of the propagator options

Parameters
  • start[in] Start parameters

  • target[in] The target surface

  • options[in] Options of the propagations

Returns

Result of the propagation

Private Types

using action_list_t_result_t = typename result_type_helper<parameters_t, action_list_t>::type

Short-hand type definition for propagation result derived from an action list.

Template Parameters
  • parameters_t – Type of the final track parameters

  • action_list_t – List of propagation action types

using Covariance = BoundSymMatrix
using Jacobian = BoundMatrix

Private Functions

Covariance calculateCovariance(const std::array<std::vector<BoundVector>, eBoundSize> &derivatives, const Covariance &startCov, const std::vector<double> &deviations) const

This function propagates the covariance matrix.

Parameters
  • derivatives[in] Slopes of each modification of the parameters

  • startCov[in] Starting covariance

  • deviations[in] Vector of deviations

Returns

Propagated covariance matrix

BoundVector fitLinear(const std::vector<BoundVector> &values, const std::vector<double> &deviations) const

This function fits a linear function through the final state parametrisations.

Parameters
  • values[in] Vector containing the final state parametrisations

  • deviations[in] Vector of deviations

Returns

Vector containing the linear fit

bool inconsistentDerivativesOnDisc(const std::vector<BoundVector> &derivatives) const

This function tests whether the variations on a disc as target surface lead to results on different sides wrt the center of the disc.

This would lead to a flip of the phi value on the surface and therewith to a huge variance in that parameter. It can only occur in this algorithm since the ridders algorithm is unaware of the target surface.

Parameters

derivatives[in] Derivatives of a single parameter

Returns

Boolean result whether a phi jump occured

template<typename options_t, typename parameters_t>
std::vector<BoundVector> wiggleDimension(const options_t &options, const parameters_t &startPars, const unsigned int param, const Surface &target, const BoundVector &nominal, const std::vector<double> &deviations) const

This function wiggles one dimension of the starting parameters, performs the propagation to a surface and collects for each change of the start parameters the slope.

Template Parameters
  • options_t – PropagatorOptions object

  • parameters+t – Type of the parameters to start the propagation with

Parameters
  • options[in] Options do define how to wiggle

  • startPars[in] Start parameters that are modified

  • param[in] Index to get the parameter that will be modified

  • target[in] Target surface

  • nominal[in] Nominal end parameters

  • deviations[in] Vector of deviations

Returns

Vector containing each slope

Private Members

propagator_t m_propagator

Propagator.

template<typename parameters_t, typename action_list_t>
struct result_type_helper

Helper struct determining the result’s type.

This helper struct provides type definitions to extract the correct propagation result type from a given TrackParameter type and an ActionList.

Note

The result_type_helper struct and the action_list_t_result_t are here to allow a look’n’feel of this class like the Propagator itself

Template Parameters
  • parameters_t – Type of final track parameters

  • action_list_t – List of propagation action types

Public Types

using this_result_type = PropagatorResult<parameters_t, args...>

Propagation result type for an arbitrary list of additional propagation results.

Template Parameters

args – Parameter pack specifying additional propagation results

using type = typename action_list_t::template result_type<this_result_type>

Propagation result type derived from a given action list.