mt2  8bbb7ce09375b7fc0edeb89e1fe1dbb76bbd0555
mt2.hpp
Go to the documentation of this file.
1 #ifndef H_MT2
2 #define H_MT2
3 
4 #include "TLorentzVector.h"
5 
6 class MT2{
7 public:
8  MT2() = default;
9  MT2(const MT2 &) = default;
10  MT2& operator=(const MT2 &) = default;
11  MT2(MT2 &&) = default;
12  MT2& operator=(MT2 &&) = default;
13  ~MT2() = default;
14 
15  void SetTestMass(double test_mass);
16 
17  void SetMomenta(const TLorentzVector &visible_A,
18  const TLorentzVector &visible_B,
19  double invisible_px, double invisible_py);
20  void SetMomenta(double visible_mass_a, double visible_px_a, double visible_py_a,
21  double visible_mass_b, double visible_px_b, double visible_py_b,
22  double invisible_px, double invisible_py);
23 
24  double GetMT2() const;
25  double GetTrialMT2(double invisible_px_a,
26  double invisible_py_a) const;
27 
28  void GetInvisibleMomenta(TLorentzVector &invisible_a,
29  TLorentzVector &invisible_b) const;
30  void GetInvisibleMomenta(double &invisible_px_a,
31  double &invisible_py_a,
32  double &invisible_px_b,
33  double &invisible_py_b) const;
34 
35  double IsUnbalanced() const;
36 
37 private:
38  double mA_, xA_, yA_;
39  double mB_, xB_, yB_;
40  double m_, x_, y_;
41 
42  mutable double deltaX_, deltaY_, mt2_, unbalanced_;
44 
47 
48  void TransformMomenta();
49  static void Rotate(double &x, double &y, double phi);
50 
51  void ComputeMT2() const;
52  void ComputeUnbalancedMT2(double &lower_bound, double &upper_bound) const;
53  static double ComputeMT(double m1, double x1, double y1,
54  double m2, double x2, double y2);
55  void ComputeMomenta() const;
56 
57  unsigned GetNumSolutions(double mt) const;
58  void GetCoefficients(double mt,
59  long double &c4,
60  long double &c3,
61  long double &c2,
62  long double &c1,
63  long double &c0) const;
64 };
65 
66 #endif
double mA_
Definition: mt2.hpp:38
double rotation_angle_
Definition: mt2.hpp:45
double x_
Definition: mt2.hpp:40
void ComputeMomenta() const
Definition: mt2.cpp:193
void SetMomenta(const TLorentzVector &visible_A, const TLorentzVector &visible_B, double invisible_px, double invisible_py)
Definition: mt2.cpp:15
double deltaX_
Definition: mt2.hpp:42
double xB_
Definition: mt2.hpp:39
double xA_
Definition: mt2.hpp:38
double GetMT2() const
Definition: mt2.cpp:47
static void Rotate(double &x, double &y, double phi)
Definition: mt2.cpp:120
void ComputeUnbalancedMT2(double &lower_bound, double &upper_bound) const
Definition: mt2.cpp:148
double mt2_
Definition: mt2.hpp:42
double y_
Definition: mt2.hpp:40
Definition: mt2.hpp:6
bool sides_swapped_
Definition: mt2.hpp:46
bool cached_mt2_
Definition: mt2.hpp:43
double yB_
Definition: mt2.hpp:39
MT2()=default
void GetInvisibleMomenta(TLorentzVector &invisible_a, TLorentzVector &invisible_b) const
Definition: mt2.cpp:66
double IsUnbalanced() const
Definition: mt2.cpp:100
double yA_
Definition: mt2.hpp:38
void GetCoefficients(double mt, long double &c4, long double &c3, long double &c2, long double &c1, long double &c0) const
Definition: mt2.cpp:259
void TransformMomenta()
Definition: mt2.cpp:105
double deltaY_
Definition: mt2.hpp:42
double m_
Definition: mt2.hpp:40
bool cached_momenta_
Definition: mt2.hpp:43
double GetTrialMT2(double invisible_px_a, double invisible_py_a) const
Definition: mt2.cpp:52
static double ComputeMT(double m1, double x1, double y1, double m2, double x2, double y2)
Definition: mt2.cpp:188
void ComputeMT2() const
Definition: mt2.cpp:127
unsigned GetNumSolutions(double mt) const
Definition: mt2.cpp:252
double mB_
Definition: mt2.hpp:39
~MT2()=default
MT2 & operator=(const MT2 &)=default
void SetTestMass(double test_mass)
Definition: mt2.cpp:9
double unbalanced_
Definition: mt2.hpp:42