00001 #ifndef KalmanVertexUpdator_H 00002 #define KalmanVertexUpdator_H 00003 00004 #include "RecoVertex/VertexPrimitives/interface/VertexUpdator.h" 00005 #include "RecoVertex/KalmanVertexFit/interface/KVFHelper.h" 00006 00012 template <unsigned int N> 00013 class KalmanVertexUpdator: public VertexUpdator<N> { 00014 00015 public: 00016 00017 typedef typename CachingVertex<N>::RefCountedVertexTrack RefCountedVertexTrack; 00018 typedef typename VertexTrack<N>::RefCountedLinearizedTrackState RefCountedLinearizedTrackState; 00019 00025 CachingVertex<N> add(const CachingVertex<N> & oldVertex, 00026 const RefCountedVertexTrack track) const; 00027 00033 CachingVertex<N> remove(const CachingVertex<N> & oldVertex, 00034 const RefCountedVertexTrack track) const; 00035 00040 VertexUpdator<N> * clone() const 00041 { 00042 return new KalmanVertexUpdator(* this); 00043 } 00044 00049 CachingVertex<N> update(const CachingVertex<N> & oldVertex, 00050 const RefCountedVertexTrack track, float weight, 00051 int sign ) const; 00052 00053 VertexState positionUpdate (const VertexState & oldVertex, 00054 const RefCountedLinearizedTrackState linearizedTrack, 00055 const float weight, int sign) const; 00056 00057 std::pair <bool, double> chi2Increment(const VertexState & oldVertex, 00058 const VertexState & newVertexState, 00059 const RefCountedLinearizedTrackState linearizedTrack, 00060 float weight) const; 00061 00062 private: 00063 00064 typedef ROOT::Math::SVector<double,N> AlgebraicVectorN; 00065 typedef ROOT::Math::SVector<double,N-2> AlgebraicVectorM; 00066 typedef ROOT::Math::SMatrix<double,N,3,ROOT::Math::MatRepStd<double,N,3> > AlgebraicMatrixN3; 00067 typedef ROOT::Math::SMatrix<double,N,N-2,ROOT::Math::MatRepStd<double,N,N-2> > AlgebraicMatrixNM; 00068 typedef ROOT::Math::SMatrix<double,N-2,3,ROOT::Math::MatRepStd<double,N-2,3> > AlgebraicMatrixM3; 00069 typedef ROOT::Math::SMatrix<double,N,N,ROOT::Math::MatRepSym<double,N> > AlgebraicSymMatrixNN; 00070 typedef ROOT::Math::SMatrix<double,N+1,N+1,ROOT::Math::MatRepSym<double,N+1> > AlgebraicSymMatrixOO; 00071 typedef ROOT::Math::SMatrix<double,N+1,N+1,ROOT::Math::MatRepStd<double,N+1,N+1> > AlgebraicMatrixOO; 00072 typedef ROOT::Math::SMatrix<double,N-2,N-2,ROOT::Math::MatRepSym<double,N-2> > AlgebraicSymMatrixMM; 00073 00074 KVFHelper<N> helper; 00075 00076 }; 00077 00078 #endif