Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-20 07:58:15

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/TrackParameters.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] freeTransportJacobian Global jacobian since the last reset
0037 /// @param [in, out] freeToPathDerivatives Path length derivatives of the free,
0038 ///        nominal parameters
0039 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0040 ///        parametrisation to free parameters
0041 /// @param [in, out] freeParameters Free, nominal parametrisation
0042 /// @param [in] particleHypothesis Particle hypothesis
0043 /// @param [in] covTransport Decision whether the covariance transport should be
0044 ///        performed
0045 /// @param [in] accumulatedPath Propagated distance
0046 /// @param [in] surface Target surface on which the state is represented
0047 /// @param [in] freeToBoundCorrection Correction for non-linearity effect during
0048 ///        transform from free to bound
0049 ///
0050 /// @return A bound state:
0051 ///   - the parameters at the surface
0052 ///   - the stepwise jacobian towards it (from last bound)
0053 ///   - and the path length (from start - for ordering)
0054 Result<std::tuple<BoundTrackParameters, BoundMatrix, double>> boundState(
0055     const GeometryContext& geoContext, const Surface& surface,
0056     BoundSquareMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0057     FreeMatrix& freeTransportJacobian, FreeVector& freeToPathDerivatives,
0058     BoundToFreeMatrix& boundToFreeJacobian,
0059     const std::optional<FreeMatrix>& additionalFreeCovariance,
0060     FreeVector& freeParameters, const ParticleHypothesis& particleHypothesis,
0061     bool covTransport, double accumulatedPath,
0062     const FreeToBoundCorrection& freeToBoundCorrection);
0063 
0064 /// Create and return a curvilinear state at the current position
0065 ///
0066 /// @brief This creates a curvilinear state.
0067 ///
0068 /// @param [in, out] boundCovariance The covariance matrix of the state
0069 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0070 /// @param [in, out] freeTransportJacobian Global jacobian since the last reset
0071 /// @param [in, out] freeToPathDerivatives Path length derivatives of the free,
0072 ///        nominal parameters
0073 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0074 ///        parametrisation to free parameters
0075 /// @param [in] freeParameters Free, nominal parametrisation
0076 /// @param [in] particleHypothesis Particle hypothesis
0077 /// @param [in] covTransport Decision whether the covariance transport should be
0078 ///        performed
0079 /// @param [in] accumulatedPath Propagated distance
0080 ///
0081 /// @return A curvilinear state:
0082 ///   - the curvilinear parameters at given position
0083 ///   - the stepweise jacobian towards it (from last bound)
0084 ///   - and the path length (from start - for ordering)
0085 std::tuple<BoundTrackParameters, BoundMatrix, double> curvilinearState(
0086     BoundSquareMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0087     FreeMatrix& transportJacobian, FreeVector& freeToPathDerivatives,
0088     BoundToFreeMatrix& boundToFreeJacobian,
0089     const std::optional<FreeMatrix>& additionalFreeCovariance,
0090     const FreeVector& freeParameters,
0091     const ParticleHypothesis& particleHypothesis, bool covTransport,
0092     double accumulatedPath);
0093 
0094 /// @brief Method for on-demand covariance transport of a bound/curvilinear to
0095 ///        another bound representation.
0096 ///
0097 /// @param [in] geoContext The geometry context
0098 /// @param [in] surface is the surface to which the covariance is forwarded to
0099 /// @param [in, out] boundCovariance The covariance matrix of the state
0100 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0101 /// @param [in, out] freeTransportJacobian Global jacobian since the last reset
0102 /// @param [in, out] freeToPathDerivatives Path length derivatives
0103 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0104 ///        parametrisation to free parameters
0105 /// @param [in, out] freeParameters Free, nominal parametrisation
0106 /// @param [in] freeToBoundCorrection Correction for non-linearity effect during
0107 ///        transform from free to bound
0108 ///
0109 /// @note No check is done if the position is actually on the surface
0110 ///
0111 void transportCovarianceToBound(
0112     const GeometryContext& geoContext, const Surface& surface,
0113     BoundSquareMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0114     FreeMatrix& freeTransportJacobian, FreeVector& freeToPathDerivatives,
0115     BoundToFreeMatrix& boundToFreeJacobian,
0116     const std::optional<FreeMatrix>& additionalFreeCovariance,
0117     FreeVector& freeParameters,
0118     const FreeToBoundCorrection& freeToBoundCorrection);
0119 
0120 /// @brief Method for on-demand covariance transport of a bound/curvilinear
0121 ///        to a new curvilinear representation.
0122 ///
0123 /// @param [in, out] boundCovariance The covariance matrix of the state
0124 /// @param [in, out] fullTransportJacobian Full jacobian since the last reset
0125 /// @param [in, out] freeTransportJacobian Global jacobian since the last reset
0126 /// @param [in, out] freeToPathDerivatives Path length derivatives
0127 /// @param [in, out] boundToFreeJacobian Projection jacobian of the last bound
0128 ///        parametrisation to free parameters
0129 /// @param [in] direction Normalised direction vector
0130 ///
0131 void transportCovarianceToCurvilinear(
0132     BoundSquareMatrix& boundCovariance, BoundMatrix& fullTransportJacobian,
0133     FreeMatrix& freeTransportJacobian, FreeVector& freeToPathDerivatives,
0134     BoundToFreeMatrix& boundToFreeJacobian,
0135     const std::optional<FreeMatrix>& additionalFreeCovariance,
0136     const Vector3& direction);
0137 
0138 }  // namespace Acts::detail::sympy