MINT2
Calculate4BodyProps.h
Go to the documentation of this file.
1 #ifndef DALITZCALCULATEFOURBODYPROPS_HH
2 #define DALITZCALCULATEFOURBODYPROPS_HH
3 // author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
4 // status: Mon 9 Feb 2009 19:18:00 GMT
5 
6 #include "TLorentzVector.h"
7 #include <vector>
8 
10  protected:
11  bool boundaries3Body(double& s12Min
12  , double& s12Max
13  , double _s23
14  , double _mumM
15  , double _d1M
16  , double _d2M
17  , double _d3M
18  );
19  double _t01, _s12, _s23, _s34, _t40;
20  // double _m0, _m1, _m2, _m3, _m4; // m0 is mum's weight
21 
22  double m[5];
23  double stij[5][5];
24  double xij[5][5];
25 
26  // t01 = (p0 - p1)^2 = s234
27  // s12 = (p1 + p2)^2
28  // s23 = (p2 + p3)^2
29  // s34 = (p3 + p4)^2
30  // t40 = (p4 - p0)^2 = s123
31 
32 
33  // for 4 body decays:
34  // K4 := m0sq + 2(m1sq + m2sq + m3sq +m4q)
35  // = s12 + s13 + s14 + s23 + s24 + s34
36  // K4 - s12 - s23 - s34 = s13 + s14 + s24;
37  //
38  // for 3 body decays (there's no missing factor 2).
39  // K3 := m0sq + m1sq + m2sq + m3sq = s12 + s23 + s13
40  // so s13 = K3 - s12 - s23.
41  //
42 
43 
44  double _K4, _K3_12, _s124, _K3_23, _s14;
47  double _BDet;
49 
50  TLorentzVector _p1, _p2, _p3, _p4, _p0;
51 
57 
59 
60  public:
61 
62  // constructor
63  Calculate4BodyProps(double t01_in, double s12_in
64  , double s23_in, double s34_in
65  , double t40_in
66  , double m0_in
67  , double m1_in, double m2_in, double m3_in, double m4_in
68  );
69 
71  // copy constructor
73 
74  void set(double t01_in, double s12_in
75  , double s23_in, double s34_in
76  , double t40_in
77  , double m0_in
78  , double m1_in, double m2_in, double m3_in, double m4_in
79  );
80  void set(double t01_in, double s12_in
81  , double s23_in, double s34_in
82  , double t40_in
83  , double m_in[5]
84  );
85  void setWithSameMass(double t01_in, double s12_in
86  , double s23_in, double s34_in
87  , double t40_in
88  );
89  void knowNothing(); // initialises know... variables
90  // called with constructor. If called, forces re-calculation
91  // of everything.
92 
93  double pij(int i, int j); // products of 4-vectors.
94  double G(int p, int q); // Grahm determinants
95  double G(int p1, int p2, int q1, int q2);
96  double G(int p1, int p2, int p3
97  , int q1, int q2, int q3);
98  double G(int p1, int p2, int p3, int p4
99  , int q1, int q2, int q3, int q4);
100 
101  double Delta(int p1);
102  double Delta(int p1, int p2);
103  double Delta(int p1, int p2, int p3);
104  double Delta(int p1, int p2, int p3, int p4);
105 
106 
107  double m0() const{ return m[0];}
108  double m1() const{ return m[1];}
109  double m2() const{ return m[2];}
110  double m3() const{ return m[3];}
111  double m4() const{ return m[4];}
112 
113  double s12() const{ return _s12;}
114  double s23() const{ return _s23;}
115  double s34() const{ return _s34;}
116  double t01() const{ return _t01;}
117  double t40() const{ return _t40;}
118  double s123() const{ return t40();}
119  double s234() const{ return t01();}
120 
121  double m0sq() const{ return m0()*m0();}
122  double m1sq() const{ return m1()*m1();}
123  double m2sq() const{ return m2()*m2();}
124  double m3sq() const{ return m3()*m3();}
125  double m4sq() const{ return m4()*m4();}
126 
127  // sometimes it is helpful to give things
128  // just a different name (masses of "pseudo particles"):
129  double m12sq() const{ return s12();}
130  double m23sq() const{ return s23();}
131  double m34sq() const{ return s34();}
132 
133  // sij and quantities needed to calculate sij
134  double K4();
135  void calcK4();
136  double K3_12();
137  void calcK3_12();
138  double s124();
139  void calcs124();
140  double K3_23();
141  void calcK3_23();
142  double s14();
143  void calcs14();
144  double K3_34();
145  void calcK3_34();
146  double s134();
147  void calcs134();
148  double s13_plus_s24();
149  void calcs13_plus_s24();
150  double s13_minus_s24();
151  void calcs13_minus_s24();
152  double s13();
153  void calcs13();
154  double s24();
155  void calcs24();
156  double sij(int index);
157  double sij(int i, int j);
158  double sij(const std::vector<int>& indices);
159  double sijk(int i, int j, int k);
160 
161  // determinants
162  double BDet();
163  void calcBDet();
164  double Delta4_without_xij();
165  double Delta4_with_xij();
166 
167  void fill_stij(); // needed for deltas
168 
169  double Delta4();
170  void calcDelta4();
171  double Delta3();
172  void calcDelta3();
173  double Delta2();
174  void calcDelta2();
175  double Delta1();
176 
177  // the phase space factor...
178  double phaseSpaceFactor(); // =sqrt(-Delta4())
180 
181  void s12MinMax(double& mi, double& ma);
182  void s23MinMax(double& mi, double& ma);
183  void s34MinMax(double& mi, double& ma);
184  void t40MinMax(double& mi, double& ma);
185  void t01MinMax(double& mi, double& ma);
186 
187  // the actual 4-momenta - see page 208 of THE BOOK:
188  TLorentzVector p1();
189  void calcp1();
190  TLorentzVector p2();
191  void calcp2();
192  TLorentzVector p3();
193  void calcp3();
194  TLorentzVector p4();
195  void calcp4();
196  TLorentzVector p0();
197  void calcp0();
198 
199  // same 4-momenta as above, but by index:
200  TLorentzVector pVec(int i);
201 };
202 
203 #endif
204 //
TLorentzVector pVec(int i)
void set(double t01_in, double s12_in, double s23_in, double s34_in, double t40_in, double m0_in, double m1_in, double m2_in, double m3_in, double m4_in)
bool boundaries3Body(double &s12Min, double &s12Max, double _s23, double _mumM, double _d1M, double _d2M, double _d3M)
void t01MinMax(double &mi, double &ma)
void s23MinMax(double &mi, double &ma)
void setWithSameMass(double t01_in, double s12_in, double s23_in, double s34_in, double t40_in)
double pij(int i, int j)
double sijk(int i, int j, int k)
double G(int p, int q)
void s12MinMax(double &mi, double &ma)
void s34MinMax(double &mi, double &ma)
void t40MinMax(double &mi, double &ma)