CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/TrackingTools/TrajectoryState/src/FreeTrajectoryState.cc

Go to the documentation of this file.
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