CMS 3D CMS Logo

BPHKinematicFit.h
Go to the documentation of this file.
1 #ifndef HeavyFlavorAnalysis_RecoDecay_BPHKinematicFit_h
2 #define HeavyFlavorAnalysis_RecoDecay_BPHKinematicFit_h
3 
12 //----------------------
13 // Base Class Headers --
14 //----------------------
16 
17 //------------------------------------
18 // Collaborating Class Declarations --
19 //------------------------------------
22 
25 
26 //---------------
27 // C++ Headers --
28 //---------------
29 #include <map>
30 
31 // ---------------------
32 // -- Class Interface --
33 // ---------------------
34 
35 class BPHKinematicFit : public virtual BPHDecayVertex {
36 public:
43  ~BPHKinematicFit() override;
44 
48  void setConstraint(double mass, double sigma);
51  double constrMass() const;
52  double constrSigma() const;
53 
55  virtual const std::vector<RefCountedKinematicParticle>& kinParticles() const;
56  virtual std::vector<RefCountedKinematicParticle> kinParticles(const std::vector<std::string>& names) const;
57 
59  virtual const RefCountedKinematicTree& kinematicTree() const;
60  virtual const RefCountedKinematicTree& kinematicTree(const std::string& name, double mass, double sigma) const;
61  virtual const RefCountedKinematicTree& kinematicTree(const std::string& name, double mass) const;
62  virtual const RefCountedKinematicTree& kinematicTree(const std::string& name, KinematicConstraint* kc) const;
63  virtual const RefCountedKinematicTree& kinematicTree(const std::string& name,
65 
67  virtual void resetKinematicFit() const;
68 
69  // get current particle
70  virtual bool isEmpty() const;
71  virtual bool isValidFit() const;
72  virtual const RefCountedKinematicParticle currentParticle() const;
73  virtual const RefCountedKinematicVertex currentDecayVertex() const;
74  virtual ParticleMass mass() const;
75 
77  virtual const math::XYZTLorentzVector& p4() const;
78 
79 protected:
80  // constructors
82  // pointer used to retrieve informations from other bases
83  BPHKinematicFit(const BPHKinematicFit* ptr);
84 
88  virtual void addK(const std::string& name, const reco::Candidate* daug, double mass = -1.0, double sigma = -1.0);
91  virtual void addK(const std::string& name,
92  const reco::Candidate* daug,
93  const std::string& searchList,
94  double mass = -1.0,
95  double sigma = -1.0);
97  virtual void addK(const std::string& name, const BPHRecoConstCandPtr& comp);
98 
99  // utility function used to cash reconstruction results
100  void setNotUpdated() const override;
101 
102 private:
103  // mass constraint
104  double massConst;
105  double massSigma;
106 
107  // map linking daughters to mass sigma
108  std::map<const reco::Candidate*, double> dMSig;
109 
110  // reconstruction results cache
111  mutable bool oldKPs;
112  mutable bool oldFit;
113  mutable bool oldMom;
114  mutable std::map<const reco::Candidate*, RefCountedKinematicParticle> kinMap;
115  mutable std::vector<RefCountedKinematicParticle> allParticles;
118 
119  // build kin particles, perform the fit and compute the total momentum
120  virtual void buildParticles() const;
121  virtual void fitMomentum() const;
122 };
123 
124 #endif
virtual const math::XYZTLorentzVector & p4() const
compute total momentum after the fit
virtual void buildParticles() const
virtual void addK(const std::string &name, const reco::Candidate *daug, double mass=-1.0, double sigma=-1.0)
BPHGenericPtr< const BPHRecoCandidate >::type BPHRecoConstCandPtr
double ParticleMass
Definition: ParticleMass.h:4
virtual bool isEmpty() const
virtual ParticleMass mass() const
const std::string names[nVars_]
virtual const RefCountedKinematicParticle currentParticle() const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
double constrSigma() const
std::map< const reco::Candidate *, RefCountedKinematicParticle > kinMap
double constrMass() const
retrieve the constraint
virtual void fitMomentum() const
virtual const RefCountedKinematicTree & kinematicTree() const
perform the kinematic fit and get the result
std::map< const reco::Candidate *, double > dMSig
virtual const RefCountedKinematicVertex currentDecayVertex() const
virtual const std::vector< RefCountedKinematicParticle > & kinParticles() const
get kinematic particles
void setNotUpdated() const override
virtual void resetKinematicFit() const
reset the kinematic fit
std::vector< RefCountedKinematicParticle > allParticles
virtual bool isValidFit() const
RefCountedKinematicTree kinTree
void setConstraint(double mass, double sigma)
apply a mass constraint
math::XYZTLorentzVector totalMomentum
~BPHKinematicFit() override