00001 #ifndef KinematicVertex_H 00002 #define KinematicVertex_H 00003 00004 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h" 00005 #include "RecoVertex/VertexPrimitives/interface/CachingVertex.h" 00006 #include "RecoVertex/VertexPrimitives/interface/VertexState.h" 00007 class KinematicTree; 00008 00020 class KinematicVertex : public ReferenceCounted 00021 { 00022 public: 00023 00024 friend class KinematicTree; 00025 00030 KinematicVertex(); 00031 00032 00037 KinematicVertex(const VertexState state, float totalChiSq, float degreesOfFr); 00038 00043 KinematicVertex(const VertexState state, 00044 const ReferenceCountingPointer<KinematicVertex> prVertex, 00045 float totalChiSq, float degreesOfFr); 00046 00050 KinematicVertex(const CachingVertex<6>& vertex); 00051 00052 00053 virtual ~KinematicVertex(); 00054 00060 bool operator==(const KinematicVertex& other)const; 00061 00062 bool operator==(ReferenceCountingPointer<KinematicVertex> other)const; 00063 00070 bool operator<(const KinematicVertex& other)const; 00082 bool vertexIsValid() const; 00083 00089 KinematicTree * correspondingTree() const; 00090 00094 ReferenceCountingPointer<KinematicVertex> vertexBeforeConstraint() const; 00095 00096 00097 VertexState vertexState() const; 00098 00099 GlobalPoint position() const; 00100 00101 GlobalError error() const; 00102 00103 float chiSquared() const; 00104 00105 float degreesOfFreedom() const; 00106 00107 private: 00108 00109 void setTreePointer(KinematicTree * tr) const; 00110 00111 //kinematic tree this 00112 //vertex belongs to (can be 0) 00113 mutable KinematicTree * tree; 00114 mutable bool vl; 00115 00116 VertexState theState; 00117 // GlobalPoint theVertexPosition; 00118 // GlobalError theVPositionError; 00119 float theChiSquared; 00120 float theNDF; 00121 mutable ReferenceCountingPointer<KinematicVertex> pVertex; 00122 }; 00123 00124 #endif