File indexing completed on 2024-04-06 12:31:43
0001 #ifndef AnalyticalErrorPropagation_H
0002 #define AnalyticalErrorPropagation_H
0003
0004 #include "FWCore/Utilities/interface/Visibility.h"
0005 #include "FWCore/Utilities/interface/Likely.h"
0006 #include "TrackingTools/AnalyticalJacobians/interface/AnalyticalCurvilinearJacobian.h"
0007 #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
0008 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0009 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0010 #include "TrackingTools/TrajectoryState/interface/SurfaceSideDefinition.h"
0011
0012 class Surface;
0013
0014 inline std::pair<TrajectoryStateOnSurface, double> analyticalErrorPropagation(
0015 const FreeTrajectoryState& startingState,
0016 const Surface& surface,
0017 SurfaceSideDefinition::SurfaceSide side,
0018 const GlobalTrajectoryParameters& destParameters,
0019 const double& s) {
0020 if UNLIKELY (!startingState.hasError())
0021
0022 return std::pair<TrajectoryStateOnSurface, double>(TrajectoryStateOnSurface(destParameters, surface, side), s);
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 AnalyticalCurvilinearJacobian analyticalJacobian(
0038 startingState.parameters(), destParameters.position(), destParameters.momentum(), s);
0039 auto const& jacobian = analyticalJacobian.jacobian();
0040 return std::pair<TrajectoryStateOnSurface, double>(
0041 TrajectoryStateOnSurface(
0042 destParameters, ROOT::Math::Similarity(jacobian, startingState.curvilinearError().matrix()), surface, side),
0043 s);
0044 }
0045
0046 #endif