![]() |
![]() |
00001 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h" 00002 #include "TrackingTools/AnalyticalJacobians/interface/JacobianCurvilinearToCartesian.h" 00003 #include "TrackingTools/AnalyticalJacobians/interface/JacobianCartesianToCurvilinear.h" 00004 00005 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00006 00007 #include "MagneticField/Engine/interface/MagneticField.h" 00008 00009 #include <cmath> 00010 #include<sstream> 00011 00012 // void bPoint(){} 00013 00014 void FreeTrajectoryState::missingError() const { 00015 std::stringstream form; 00016 form<< "FreeTrajectoryState: attempt to access errors when none available" << 00017 "\nCurvilinear error valid/values :"<< theCurvilinearError.valid() << "\n" 00018 << theCurvilinearError.matrix(); 00019 edm::LogWarning("FreeTrajectoryState") << "(was exception) " << form.str(); 00020 // throw TrajectoryStateException(form.str()); 00021 // bPoint(); 00022 } 00023 00024 // implementation of non-trivial methods of FreeTrajectoryState 00025 00026 // Warning: these methods violate constness 00027 00028 // convert curvilinear errors to cartesian 00029 void FreeTrajectoryState::createCartesianError(CartesianTrajectoryError & aCartesianError) const{ 00030 00031 JacobianCurvilinearToCartesian curv2Cart(theGlobalParameters); 00032 const AlgebraicMatrix65& jac = curv2Cart.jacobian(); 00033 00034 aCartesianError = 00035 ROOT::Math::Similarity(jac, theCurvilinearError.matrix()); 00036 } 00037 00038 // convert cartesian errors to curvilinear 00039 void FreeTrajectoryState::createCurvilinearError(CartesianTrajectoryError const& aCartesianError) const{ 00040 00041 JacobianCartesianToCurvilinear cart2Curv(theGlobalParameters); 00042 const AlgebraicMatrix56& jac = cart2Curv.jacobian(); 00043 00044 theCurvilinearError = 00045 ROOT::Math::Similarity(jac, aCartesianError.matrix()); 00046 00047 } 00048 00049 00050 void FreeTrajectoryState::rescaleError(double factor) { 00051 if unlikely(!hasError()) return; 00052 bool zeroField = (parameters().magneticField().nominalValue()==0); 00053 if unlikely(zeroField) theCurvilinearError.zeroFieldScaling(factor*factor); 00054 else theCurvilinearError *= (factor*factor); 00055 } 00056 00057 00058 00059 00060 00061 00062