File NumericalTrackLinearizer.hpp¶

namespace Acts

Note

This file is foreseen for the `Geometry` module to replace `Extent`

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 &params, 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

Private Functions

inline const Logger &logger() const

Private Members

const Config m_cfg
std::unique_ptr<const Logger> m_logger
struct Config
#include <Acts/Vertexing/NumericalTrackLinearizer.hpp>

Configuration struct.

Public Functions

inline Config(std::shared_ptr<const MagneticFieldProvider> bIn, std::shared_ptr<const Propagator_t> prop)

@ Config constructor if magnetic field is present

Parameters
• bIn – The magnetic field

• prop – The propagator

inline Config(std::shared_ptr<const Propagator_t> prop)

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