Back to home page

Project CMSSW displayed by LXR

 
 

    


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     // return state without errors
0022     return std::pair<TrajectoryStateOnSurface, double>(TrajectoryStateOnSurface(destParameters, surface, side), s);
0023 
0024   //
0025   // compute jacobian
0026   //
0027 
0028   // FIXME: Compute mean B field between startingState and destParameters and pass it to analyticalJacobian
0029   //GlobalPoint xStart = startingState.position();
0030   //GlobalPoint xDest = destParameters.position();
0031   //GlobalVector h1  = destParameters.magneticFieldInInverseGeV(xStart);
0032   //GlobalVector h2  = destParameters.magneticFieldInInverseGeV(xDest);
0033   //GlobalVector h = 0.5*(h1+h2);
0034   //LogDebug("RungeKutta") << "AnalyticalErrorPropagation: The Fields are: " << h1 << ", " << h2 << ", " << h ;
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