Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-31 08:19:20

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 #include "Acts/EventData/BoundTrackParameters.hpp"
0012 #include "Acts/EventData/detail/CorrectedTransformationFreeToBound.hpp"
0013 
0014 #include <tuple>
0015 
0016 namespace Acts {
0017 class Surface;
0018 }
0019 
0020 namespace Acts::detail::sympy {
0021 
0022 /// @brief These functions perform the transport of a covariance matrix using
0023 /// given Jacobians. The required data is provided by the stepper object
0024 /// with some additional data. Since this is a purely algebraic problem the
0025 /// calculations are identical for @c StraightLineStepper and @c EigenStepper.
0026 /// As a consequence the methods can be located in a separate file.
0027 
0028 /// Create and return the bound state at the current position
0029 ///
0030 /// @brief It does not check if the transported state is at the surface, this
0031 ///        needs to be guaranteed by the propagator
0032 ///
0033 /// @param [in] geoContext The geometry context
0034 /// @param [in, out] boundCovariance The covariance matrix of the state
0035 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0036 /// @param [in, out] freeToPathDerivatives Path length derivatives of the free,
0037 ///        nominal parameters
0038 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0039 ///        parametrisation to free parameters
0040 /// @param [in, out] freeParameters Free, nominal parametrisation
0041 /// @param [in] particleHypothesis Particle hypothesis
0042 /// @param [in] covTransport Decision whether the covariance transport should be
0043 ///        performed
0044 /// @param [in] accumulatedPath Propagated distance
0045 /// @param [in] surface Target surface on which the state is represented
0046 /// @param [in] freeToBoundCorrection Correction for non-linearity effect during
0047 ///        transform from free to bound
0048 ///
0049 /// @return A bound state:
0050 ///   - the parameters at the surface
0051 ///   - the stepwise jacobian towards it (from last bound)
0052 ///   - and the path length (from start - for ordering)
0053 Result<std::tuple<BoundTrackParameters, BoundMatrix, double>> boundState(
0054     const GeometryContext& geoContext, const Surface& surface,
0055     BoundMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0056     FreeVector& freeToPathDerivatives, BoundToFreeMatrix& boundToFreeJacobian,
0057     const std::optional<FreeMatrix>& additionalFreeCovariance,
0058     FreeVector& freeParameters, const ParticleHypothesis& particleHypothesis,
0059     bool covTransport, double accumulatedPath,
0060     const FreeToBoundCorrection& freeToBoundCorrection);
0061 
0062 /// Create and return a curvilinear state at the current position
0063 ///
0064 /// @brief This creates a curvilinear state.
0065 ///
0066 /// @param [in, out] boundCovariance The covariance matrix of the state
0067 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0068 /// @param [in, out] freeToPathDerivatives Path length derivatives of the free,
0069 ///        nominal parameters
0070 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0071 ///        parametrisation to free parameters
0072 /// @param [in] freeParameters Free, nominal parametrisation
0073 /// @param [in] particleHypothesis Particle hypothesis
0074 /// @param [in] covTransport Decision whether the covariance transport should be
0075 ///        performed
0076 /// @param [in] accumulatedPath Propagated distance
0077 ///
0078 /// @return A curvilinear state:
0079 ///   - the curvilinear parameters at given position
0080 ///   - the stepweise jacobian towards it (from last bound)
0081 ///   - and the path length (from start - for ordering)
0082 std::tuple<BoundTrackParameters, BoundMatrix, double> curvilinearState(
0083     BoundMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0084     FreeVector& freeToPathDerivatives, BoundToFreeMatrix& boundToFreeJacobian,
0085     const std::optional<FreeMatrix>& additionalFreeCovariance,
0086     const FreeVector& freeParameters,
0087     const ParticleHypothesis& particleHypothesis, bool covTransport,
0088     double accumulatedPath);
0089 
0090 /// @brief Method for on-demand covariance transport of a bound/curvilinear to
0091 ///        another bound representation.
0092 ///
0093 /// @param [in] geoContext The geometry context
0094 /// @param [in] surface is the surface to which the covariance is forwarded to
0095 /// @param [in, out] boundCovariance The covariance matrix of the state
0096 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0097 /// @param [in, out] freeToPathDerivatives Path length derivatives
0098 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0099 ///        parametrisation to free parameters
0100 /// @param [in, out] freeParameters Free, nominal parametrisation
0101 /// @param [in] freeToBoundCorrection Correction for non-linearity effect during
0102 ///        transform from free to bound
0103 ///
0104 /// @note No check is done if the position is actually on the surface
0105 ///
0106 void transportCovarianceToBound(
0107     const GeometryContext& geoContext, const Surface& surface,
0108     BoundMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0109     FreeVector& freeToPathDerivatives, BoundToFreeMatrix& boundToFreeJacobian,
0110     const std::optional<FreeMatrix>& additionalFreeCovariance,
0111     FreeVector& freeParameters,
0112     const FreeToBoundCorrection& freeToBoundCorrection);
0113 
0114 /// @brief Method for on-demand covariance transport of a bound/curvilinear
0115 ///        to a new curvilinear representation.
0116 ///
0117 /// @param [in, out] boundCovariance The covariance matrix of the state
0118 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0119 /// @param [in, out] freeToPathDerivatives Path length derivatives
0120 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0121 ///        parametrisation to free parameters
0122 /// @param [in] direction Normalised direction vector
0123 ///
0124 void transportCovarianceToCurvilinear(
0125     BoundMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0126     FreeVector& freeToPathDerivatives, BoundToFreeMatrix& boundToFreeJacobian,
0127     const std::optional<FreeMatrix>& additionalFreeCovariance,
0128     const Vector3& direction);
0129 
0130 }  // namespace Acts::detail::sympy