File NumericalTrackLinearizer.hpp
-
namespace Acts
Note
This file is foreseen for the
Geometry
module to replaceExtent
-
template<typename propagator_t, typename propagator_options_t = PropagatorOptions<>>
class NumericalTrackLinearizer - #include <Acts/Vertexing/NumericalTrackLinearizer.hpp>
Linearizes the track parameters at the PCA to a user-provided point (linPoint).
The track parameters are written as a function of the global 4D PCA position and the momentum of the particle at the PCA (i.e., (phi, theta, q/p)). The linearization then reads (see Eq. 5.7 in Ref(1)):
q = A (r - r_0) + B (p - p_0) + c,
where q are the Perigee parameters wrt linPoint, {r_0} r is the {initial} 4D PCA position, {p_0} p is the {initial} momentum at the PCA, and c is the constant term of the expansion. A and B are matrices of derivatives, denoted hereafter as “positionJacobian” and “momentumJacobian” respectively. Note that, unlike in Ref. (1), we add the time to the parametrization, which adds a row and a column to A and a row to B.
This class computes A and B by wiggling one of the 7 parameters at the PCA and computing the new PCA wrt linPoint. The derivatives wrt the k-th parameter pk are then calculated via
(q(p1, p2, …, pk+delta, … p7) - q(p1, p2, …, pk, … p7))/delta,
where q(p1, p2, …, pk+delta, … p7) are the new Perigee parameters (corresponding to the new PCA to linPoint). Note that p1 corresponds to the x-position of the PCA, p2 corresponds to the y-position of the PCA, etc.
Ref.(1) - CERN-THESIS-2010-027, Giacinto Piacquadio (Freiburg U.)
Note
Connection to RiddersPropagator: The RiddersPropagator does a very similar thing to what this class does, but it wiggles BoundTrackParameters (FreeTrackParameters could also be used if Propagator.hpp and Propagator.ipp were adapted to accommodate them). Here, we wiggle neither BoundTrackParameters nor FreeTrackParameters, but rather the parameters described above.
- Template Parameters
propagator_t – Propagator type
propagator_options_t – Propagator options type
Public Types
-
using Propagator_t = propagator_t
Public Functions
-
inline NumericalTrackLinearizer(const Config &config, std::unique_ptr<const Logger> _logger = getDefaultLogger("NumTrkLinProp", Logging::INFO))
Constructor.
- Parameters
config – Configuration object
_logger – Logger instance
-
Result<LinearizedTrack> linearizeTrack(const BoundTrackParameters ¶ms, const Vector4 &linPoint, const Acts::GeometryContext &gctx, const Acts::MagneticFieldContext &mctx, State&) const
Function that linearizes BoundTrackParameters at the PCA to a given Perigee surface.
Note
Transverse plane of the Perigee corresponding to
linPoint
is parallel to the global x-y plane- Parameters
params – Parameters to linearize
linPoint – Point which defines the Perigee.
gctx – Geometry context
mctx – Magnetic field context
- Returns
Linearized track
-
struct Config
- #include <Acts/Vertexing/NumericalTrackLinearizer.hpp>
Configuration struct.
Public Functions
@ Config constructor if magnetic field is present
- Parameters
bIn – The magnetic field
prop – The propagator
Config constructor without B field -> uses NullBField.
- Parameters
prop – Propagator
Public Members
-
std::shared_ptr<const MagneticFieldProvider> bField
-
ActsScalar delta = 1e-8
Setting size of the perturbation delta for calculation of numerical derivatives (i.e., f’(x) ~ (f(x+delta) - f(x)) / delta)
-
std::shared_ptr<const Propagator_t> propagator
-
ActsScalar targetTolerance = 1e-12
Tolerance determining how close we need to get to a surface to reach it during propagation.
-
struct State
- #include <Acts/Vertexing/NumericalTrackLinearizer.hpp>
State struct.
Public Functions
-
inline State(MagneticFieldProvider::Cache fieldCacheIn)
State constructor.
- Parameters
fieldCacheIn – Magnetic field cache
Public Members
-
MagneticFieldProvider::Cache fieldCache
-
inline State(MagneticFieldProvider::Cache fieldCacheIn)
-
template<typename propagator_t, typename propagator_options_t = PropagatorOptions<>>