00001 #ifndef _RecoVertex_TrimmedVertexFinder_H_ 00002 #define _RecoVertex_TrimmedVertexFinder_H_ 00003 00004 #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" 00005 #include "TrackingTools/TransientTrack/interface/TransientTrack.h" 00006 #include "RecoVertex/VertexPrimitives/interface/CachingVertex.h" 00007 #include "RecoVertex/VertexPrimitives/interface/VertexFitter.h" 00008 #include "RecoVertex/VertexPrimitives/interface/VertexUpdator.h" 00009 #include "RecoVertex/VertexPrimitives/interface/VertexTrackCompatibilityEstimator.h" 00010 #include <vector> 00011 00028 class TrimmedVertexFinder { 00029 00030 public: 00031 00032 typedef ReferenceCountingPointer<VertexTrack<5> > RefCountedVertexTrack; 00033 typedef ReferenceCountingPointer<LinearizedTrackState<5> > RefCountedLinearizedTrackState; 00034 00035 TrimmedVertexFinder(const VertexFitter<5> * vf, 00036 const VertexUpdator<5> * vu, 00037 const VertexTrackCompatibilityEstimator<5> * ve); 00038 00041 TrimmedVertexFinder(const TrimmedVertexFinder & other); 00042 ~TrimmedVertexFinder(); 00043 00047 std::vector<TransientVertex> 00048 vertices(std::vector<reco::TransientTrack> & remain) const; 00049 00052 float trackCompatibilityCut() const { return theMinProb; } 00053 00056 void setTrackCompatibilityCut(float cut) { theMinProb = cut; } 00057 00060 TrimmedVertexFinder * clone() const { 00061 return new TrimmedVertexFinder(*this); 00062 } 00063 00064 00065 private: 00066 00067 // finds least compatible track 00068 // returns vtxTracks.end() if all tracks are compatible 00069 // 00070 vector<RefCountedVertexTrack>::iterator theWorst( 00071 const CachingVertex<5> & vtx, 00072 std::vector<RefCountedVertexTrack> & vtxTracks, 00073 float cut) const; 00074 00075 VertexFitter<5> * theFitter; 00076 VertexUpdator<5> * theUpdator; 00077 VertexTrackCompatibilityEstimator<5> * theEstimator; 00078 float theMinProb; 00079 00080 }; 00081 00082 #endif