File MultiComponentBoundTrackParameters.hpp

namespace Acts

Note

This file is foreseen for the Geometry module to replace Extent

template<typename charge_t>
class MultiComponentBoundTrackParameters
#include <Acts/EventData/MultiComponentBoundTrackParameters.hpp>

This class is only a light wrapper arround a surface and a vector of parameters.

Its main purpose is to provide many constructors for the underlying vector. Most accessors are generated from the SingleBoundTrackParameters equivalent and thus may be expensive

Note

This class holds shared ownership on its reference surface.

Note

The accessors for parameters, covariance, position, etc. are the weighted means of the components.

Note

If all covariances are zero, the accessor for the total covariance does return std::nullopt; TODO Add constructor from range and projector maybe?

Template Parameters

charge_t – Helper type to interpret the particle charge/momentum

Public Types

using CovarianceMatrix = typename SingleParameters::CovarianceMatrix
using ParametersVector = typename SingleParameters::ParametersVector
using Scalar = typename SingleParameters::Scalar

Public Functions

template<typename covariance_t>
inline MultiComponentBoundTrackParameters(std::shared_ptr<const Surface> surface, const std::vector<std::tuple<double, BoundVector, covariance_t>> &cmps, ActsScalar q)

Construct from multiple components with charge scalar q.

template<typename covariance_t, typename T = charge_t, std::enable_if_t<std::is_default_constructible_v<T>, int> = 0>
inline MultiComponentBoundTrackParameters(std::shared_ptr<const Surface> surface, const std::vector<std::tuple<double, BoundVector, covariance_t>> &cmps)

Construct from multiple components with charge_t.

inline MultiComponentBoundTrackParameters(std::shared_ptr<const Surface> surface, const BoundVector &params, ActsScalar q, std::optional<BoundSymMatrix> cov = std::nullopt)

Construct from a parameters vector on the surface and particle charge.

In principle, only the charge magnitude is needed her to allow unambigous extraction of the absolute momentum. The particle charge is required as an input here to be consistent with the other constructors below that that also take the charge as an input. The charge sign is only used in debug builds to check for consistency with the q/p parameter.

Parameters
  • surface – Reference surface the parameters are defined on

  • params – Bound parameters vector

  • q – Particle charge

  • cov – Bound parameters covariance matrix

template<typename T = charge_t, std::enable_if_t<std::is_default_constructible_v<T>, int> = 0>
inline MultiComponentBoundTrackParameters(std::shared_ptr<const Surface> surface, const BoundVector &params, std::optional<BoundSymMatrix> cov = std::nullopt)

Construct from a parameters vector on the surface.

This constructor is only available if there are no potential charge ambiguities, i.e. the charge type is default-constructible.

Parameters
  • surface – Reference surface the parameters are defined on

  • params – Bound parameters vector

  • cov – Bound parameters covariance matrix

MultiComponentBoundTrackParameters() = delete

Parameters are not default constructible due to the charge type.

MultiComponentBoundTrackParameters(const MultiComponentBoundTrackParameters&) = default
MultiComponentBoundTrackParameters(MultiComponentBoundTrackParameters&&) = default
~MultiComponentBoundTrackParameters() = default
inline Scalar absoluteMomentum() const

Absolute momentum.

inline Scalar charge() const

Particle electric charge.

inline const auto &components() const

Access the parameters.

inline std::optional<CovarianceMatrix> covariance() const

Optional covariance matrix.

inline Vector4 fourPosition(const GeometryContext &geoCtx) const

Space-time position four-vector.

Parameters

geoCtx[in] Geometry context for the local-to-global transformation

inline Vector3 momentum() const

Momentum three-vector.

MultiComponentBoundTrackParameters &operator=(const MultiComponentBoundTrackParameters&) = default
MultiComponentBoundTrackParameters &operator=(MultiComponentBoundTrackParameters&&) = default
inline std::pair<double, SingleParameters> operator[](std::size_t i) const

Get the weight and a SingleBoundTrackParameters object for one component.

inline ParametersVector parameters() const

Parameters vector.

inline Vector3 position(const GeometryContext &geoCtx) const

Spatial position three-vector.

Parameters

geoCtx[in] Geometry context for the local-to-global transformation

inline const Surface &referenceSurface() const

Reference surface onto which the parameters are bound.

inline Scalar time() const

Time coordinate.

inline Scalar transverseMomentum() const

Transverse momentum.

inline Vector3 unitDirection() const

Unit direction three-vector, i.e.

the normalized momentum three-vector.

Private Types

using SingleParameters = SingleBoundTrackParameters<charge_t>

Private Functions

template<typename projector_t>
inline auto reduce(projector_t &&proj) const

Helper function to reduce the component vector to a single representation.

Private Members

charge_t m_chargeInterpreter
std::vector<std::tuple<double, BoundVector, std::optional<BoundSymMatrix>>> m_components
std::shared_ptr<const Surface> m_surface