File indexing completed on 2024-04-06 12:05:21
0001 #include "DataFormats/TrackingRecHit/interface/KfComponentsHolder.h"
0002 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004 #include <typeinfo>
0005
0006 template <unsigned int D>
0007 void KfComponentsHolder::genericFill_(const TrackingRecHit &hit) {
0008 typedef typename AlgebraicROOTObject<D, 5>::Matrix MatD5;
0009 typedef typename AlgebraicROOTObject<D, D>::SymMatrix SMatDD;
0010 typedef typename AlgebraicROOTObject<D>::Vector VecD;
0011
0012 params<D>() = asSVector<D>(hit.parameters());
0013 errors<D>() = asSMatrix<D>(hit.parametersError());
0014
0015 MatD5 &&H = asSMatrix<D, 5>(hit.projectionMatrix());
0016 projFunc<D>().fromH(H);
0017
0018 measuredParams<D>() = H * (*tsosLocalParameters_);
0019 measuredErrors<D>() = ROOT::Math::Similarity(H, (*tsosLocalErrors_));
0020 }
0021
0022 void KfComponentsHolder::genericFill(const TrackingRecHit &hit) {
0023 switch (hit.dimension()) {
0024 case 1:
0025 genericFill_<1>(hit);
0026 break;
0027 case 2:
0028 genericFill_<2>(hit);
0029 break;
0030 case 3:
0031 genericFill_<3>(hit);
0032 break;
0033 case 4:
0034 genericFill_<4>(hit);
0035 break;
0036 case 5:
0037 genericFill_<5>(hit);
0038 break;
0039 default:
0040 throw cms::Exception("Rec hit of invalid dimension (not 1,2,3,4,5)")
0041 << "The dimension was " << hit.dimension() << ", type is " << typeid(hit).name() << "\n";
0042 }
0043 }