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