Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 08:01:41

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/Definitions/TrackParametrization.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 
0014 namespace Acts {
0015 class Surface;
0016 }  // namespace Acts
0017 
0018 namespace Acts::detail::sympy {
0019 
0020 /// @brief These functions perform the calculation of the Jacobians for the
0021 /// the covariance transport. This is a purely algebraic problem the
0022 /// calculations are identical for @c StraightLineStepper and @c EigenStepper.
0023 /// As a consequence the methods can be located in a separate file.
0024 
0025 /// @brief This function calculates the full transport jacobian from a bound
0026 ///        curvilinear representation to a new bound representation
0027 ///
0028 /// @note Modifications of the jacobian related to the projection onto a surface is
0029 /// considered. Since a variation of the start parameters within a given
0030 /// uncertainty would lead to a variation of the end parameters, these need to
0031 /// be propagated onto the target surface. This an approximated approach to
0032 /// treat the (assumed) small change.
0033 ///
0034 /// @param [in] geoContext The geometry Context
0035 /// @param [in] surface Target surface
0036 /// @param [in] freeParameters Free, nominal parametrisation
0037 /// @param [in] boundToFreeJacobian Jacobian from bound to free at start
0038 /// @param [in] freeTransportJacobian Transport jacobian free to free
0039 /// @param [in] freeToPathDerivatives Path length derivatives for free parameters
0040 /// @param [out] fullTransportJacobian A 6x6 transport jacobian from bound to bound
0041 ///
0042 /// @note jac(locA->locB) = jac(gloB->locB)*(1+
0043 ///       pathCorrectionFactor(gloB))*jacTransport(gloA->gloB) *jac(locA->gloA)
0044 void boundToBoundTransportJacobian(const GeometryContext& geoContext,
0045                                    const Surface& surface,
0046                                    const FreeVector& freeParameters,
0047                                    const BoundToFreeMatrix& boundToFreeJacobian,
0048                                    const FreeMatrix& freeTransportJacobian,
0049                                    FreeToBoundMatrix& freeToBoundJacobian,
0050                                    const FreeVector& freeToPathDerivatives,
0051                                    BoundMatrix& fullTransportJacobian);
0052 
0053 /// @brief This function calculates the full jacobian from a given
0054 /// bound/curvilinear parameterisation from a surface to new curvilinear
0055 /// parameterisation.
0056 ///
0057 /// @note Modifications of the jacobian related to the
0058 /// projection onto a curvilinear surface is considered. Since a variation of
0059 /// the start parameters within a given uncertainty would lead to a variation of
0060 /// the end parameters, these need to be propagated onto the target surface.
0061 /// This is an approximated approach to treat the (assumed) small change.
0062 ///
0063 /// @param [in] direction Normalised direction vector
0064 /// @param [in] boundToFreeJacobian Jacobian from bound to free at start
0065 /// @param [in] freeTransportJacobian Transport jacobian free to free
0066 /// @param [in] freeToPathDerivatives Path length derivatives for free parameters
0067 /// @param [out] fullTransportJacobian A 6x6 transport jacobian from curilinear to bound
0068 ///
0069 /// @note The parameter @p surface is only required if projected to bound
0070 /// parameters. In the case of curvilinear parameters the geometry and the
0071 /// position is known and the calculation can be simplified
0072 void boundToCurvilinearTransportJacobian(
0073     const Vector3& direction, const BoundToFreeMatrix& boundToFreeJacobian,
0074     const FreeMatrix& freeTransportJacobian,
0075     FreeToBoundMatrix& freeToBoundJacobian,
0076     const FreeVector& freeToPathDerivatives,
0077     BoundMatrix& fullTransportJacobian);
0078 
0079 }  // namespace Acts::detail::sympy