00001 #ifndef MultipleKinematicConstraint_H 00002 #define MultipleKinematicConstraint_H 00003 00004 #include "RecoVertex/KinematicFitPrimitives/interface/KinematicConstraint.h" 00005 #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicParticle.h" 00006 #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicVertex.h" 00007 00008 00016 class MultipleKinematicConstraint : public KinematicConstraint 00017 { 00018 public: 00019 00020 MultipleKinematicConstraint() 00021 {em = true;} 00022 00023 00028 std::pair<AlgebraicVector,AlgebraicVector> value(const AlgebraicVector& exPoint) const; 00029 00030 std::pair<AlgebraicMatrix, AlgebraicVector> derivative(const AlgebraicVector& exPoint) const; 00031 00037 std::pair<AlgebraicVector, AlgebraicVector> value(const std::vector<RefCountedKinematicParticle> par) const; 00038 00039 std::pair<AlgebraicMatrix, AlgebraicVector> derivative(const std::vector<RefCountedKinematicParticle> par) const; 00040 00041 int numberOfEquations() const; 00042 00047 void addConstraint(KinematicConstraint * newConst) const; 00048 00049 AlgebraicVector deviations(int nStates) const; 00050 00051 bool isEmpty() const 00052 {return em;} 00053 00054 MultipleKinematicConstraint * clone() const 00055 {return new MultipleKinematicConstraint(*this);} 00056 00057 private: 00058 00059 mutable std::vector<KinematicConstraint *> cts; 00060 00061 mutable bool em; 00062 }; 00063 #endif