00001 #ifndef InvariantMassFromVertex_H 00002 #define InvariantMassFromVertex_H 00003 00004 // #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicTree.h" 00005 // #include "RecoVertex/KinematicFitPrimitives/interface/KinematicVertexFactory.h" 00006 // #include "RecoVertex/KinematicFitPrimitives/interface/VirtualKinematicParticleFactory.h" 00007 #include "RecoVertex/VertexPrimitives/interface/CachingVertex.h" 00008 // #include "RecoVertex/KinematicFitPrimitives/interface/KinematicRefittedTrackState.h" 00009 // #include "RecoVertex/KinematicFitPrimitives/interface/Matrices.h" 00010 #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h" 00011 #include "DataFormats/Math/interface/LorentzVector.h" 00012 #include "Math/Vector4D.h" 00013 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h" 00014 00020 class InvariantMassFromVertex{ 00021 00022 public: 00023 typedef ROOT::Math::PxPyPzMVector LorentzVector; 00024 00025 Measurement1D invariantMass(const CachingVertex<5>& vertex, 00026 const std::vector<double> & masses) const; 00027 00028 Measurement1D invariantMass(const CachingVertex<5>& vertex, 00029 const double mass) const; 00030 00034 LorentzVector p4 (const CachingVertex<5>& vertex, 00035 const std::vector<double> & masses) const; 00036 00040 LorentzVector p4 (const CachingVertex<5>& vertex, 00041 const double mass) const; 00042 00043 GlobalVector momentum(const CachingVertex<5>& vertex) const; 00044 00045 00046 private: 00047 00048 typedef ReferenceCountingPointer<VertexTrack<5> > RefCountedVertexTrack; 00049 typedef ReferenceCountingPointer<LinearizedTrackState<5> > RefCountedLinearizedTrackState; 00050 typedef ReferenceCountingPointer<RefittedTrackState<5> > RefCountedRefittedTrackState; 00051 00052 double uncertainty(const LorentzVector & p4, const CachingVertex<5>& vertex, 00053 const std::vector<double> & masses) const; 00054 }; 00055 00056 #endif