Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:10:56

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