File indexing completed on 2024-04-06 12:29:13
0001 #ifndef MultipleKinematicConstraint_H
0002 #define MultipleKinematicConstraint_H
0003
0004 #include "RecoVertex/KinematicFitPrimitives/interface/KinematicConstraint.h"
0005 #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicParticle.h"
0006 #include "RecoVertex/KinematicFitPrimitives/interface/RefCountedKinematicVertex.h"
0007
0008
0009
0010
0011
0012
0013
0014
0015 class MultipleKinematicConstraint : public KinematicConstraint {
0016 public:
0017 MultipleKinematicConstraint() { em = true; }
0018
0019
0020
0021
0022
0023 std::pair<AlgebraicVector, AlgebraicVector> value(const AlgebraicVector &exPoint) const override;
0024
0025 std::pair<AlgebraicMatrix, AlgebraicVector> derivative(const AlgebraicVector &exPoint) const override;
0026
0027
0028
0029
0030
0031
0032 std::pair<AlgebraicVector, AlgebraicVector> value(const std::vector<RefCountedKinematicParticle> &par) const override;
0033
0034 std::pair<AlgebraicMatrix, AlgebraicVector> derivative(
0035 const std::vector<RefCountedKinematicParticle> &par) const override;
0036
0037 int numberOfEquations() const override;
0038
0039
0040
0041
0042
0043 void addConstraint(KinematicConstraint *newConst) const;
0044
0045 AlgebraicVector deviations(int nStates) const override;
0046
0047 bool isEmpty() const { return em; }
0048
0049 MultipleKinematicConstraint *clone() const override { return new MultipleKinematicConstraint(*this); }
0050
0051 private:
0052 mutable std::vector<KinematicConstraint *> cts;
0053
0054 mutable bool em;
0055 };
0056 #endif