Go to the documentation of this file.00001 #include "TrackPropagation/RungeKutta/interface/AnalyticalErrorPropagation.h"
00002
00003 #include "TrackingTools/AnalyticalJacobians/interface/AnalyticalCurvilinearJacobian.h"
00004 #include "TrackingTools/TrajectoryState/interface/SurfaceSideDefinition.h"
00005
00006
00007
00008
00009 std::pair<TrajectoryStateOnSurface,double>
00010 AnalyticalErrorPropagation::operator()( const FreeTrajectoryState& startingState,
00011 const Surface& surface, SurfaceSideDefinition::SurfaceSide side,
00012 const GlobalTrajectoryParameters& destParameters,
00013 const double& s) const
00014 {
00015 if (startingState.hasError()) {
00016
00017
00018
00019
00020
00021
00022 GlobalPoint xStart = startingState.position();
00023 GlobalPoint xDest = destParameters.position();
00024 GlobalVector h1 = destParameters.magneticFieldInInverseGeV(xStart);
00025 GlobalVector h2 = destParameters.magneticFieldInInverseGeV(xDest);
00026 GlobalVector h = 0.5*(h1+h2);
00027
00028
00029
00030 AnalyticalCurvilinearJacobian analyticalJacobian(startingState.parameters(),
00031 destParameters.position(),
00032 destParameters.momentum(), s);
00033 AlgebraicMatrix55 jacobian(analyticalJacobian.jacobian());
00034 CurvilinearTrajectoryError cte( ROOT::Math::Similarity(jacobian, startingState.curvilinearError().matrix()));
00035 return std::pair<TrajectoryStateOnSurface,double>(TrajectoryStateOnSurface(destParameters,cte,surface,side),s);
00036 }
00037 else {
00038
00039
00040
00041 return std::pair<TrajectoryStateOnSurface,double>(TrajectoryStateOnSurface(destParameters,surface,side),s);
00042 }
00043 }
00044