00001 #include "DataFormats/TrackingRecHit/interface/KfComponentsHolder.h" 00002 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" 00003 #include "FWCore/Utilities/interface/Exception.h" 00004 00005 template<unsigned int D> 00006 void KfComponentsHolder::genericFill_(const TrackingRecHit &hit) { 00007 typedef typename AlgebraicROOTObject<D,5>::Matrix MatD5; 00008 typedef typename AlgebraicROOTObject<D,D>::SymMatrix SMatDD; 00009 typedef typename AlgebraicROOTObject<D>::Vector VecD; 00010 00011 params<D>() = asSVector<D>(hit.parameters()); 00012 errors<D>() = asSMatrix<D>(hit.parametersError()); 00013 projection<D>() = asSMatrix<D,5>(hit.projectionMatrix()); 00014 00015 const MatD5 & H = projection<D>(); 00016 00017 measuredParams<D>() = H * (*tsosLocalParameters_); 00018 measuredErrors<D>() = ROOT::Math::Similarity(H, (*tsosLocalErrors_)); 00019 } 00020 00021 void KfComponentsHolder::genericFill(const TrackingRecHit &hit) { 00022 switch (hit.dimension()) { 00023 case 1: genericFill_<1>(hit); break; 00024 case 2: genericFill_<2>(hit); break; 00025 case 3: genericFill_<3>(hit); break; 00026 case 4: genericFill_<4>(hit); break; 00027 case 5: genericFill_<5>(hit); break; 00028 default: 00029 throw cms::Exception("Rec hit of invalid dimension (not 1,2,3,4,5)") << 00030 "The dimension was " << hit.dimension() << 00031 ", type is " << typeid(hit).name() << "\n"; 00032 } 00033 00034 } 00035