29 Logger::print(0,
"%20.20s INFO: Creating extended Dalitz phase space for mother mass in range (%f,%f) and daughters of masses %f, %f, %f\n",
37 m_MinAB = TMath::Power(m_a + m_b, 2);
39 m_MinBC = TMath::Power(m_b + m_c, 2);
54 if (m_d < m_d_min || m_d >
m_d_max)
return 0;
56 Double_t m_d2 = m_d*m_d;
59 Double_t minAB = TMath::Power(
m_a +
m_b, 2);
60 Double_t maxAB = TMath::Power(m_d -
m_c, 2);
61 Double_t minBC = TMath::Power(
m_b +
m_c, 2);
62 Double_t maxBC = TMath::Power(m_d -
m_a, 2);
66 if (m2ab < minAB || m2ab > maxAB || m2bc < minBC || m2bc > maxBC)
return 0;
70 Double_t eb = (m2ab -
m_a2 +
m_b2)/2./TMath::Sqrt(m2ab);
71 Double_t ec = (m_d2 - m2ab -
m_c2)/2./TMath::Sqrt(m2ab);
73 Double_t p2b = TMath::Power(eb, 2) -
m_b2;
74 Double_t p2c = TMath::Power(ec, 2) -
m_c2;
76 if (p2c<0 || p2b<0)
return 0;
80 Double_t m2bc_max = TMath::Power(eb+ec, 2) - TMath::Power(sqrt(p2b) - sqrt(p2c), 2);
81 Double_t m2bc_min = TMath::Power(eb+ec, 2) - TMath::Power(sqrt(p2b) + sqrt(p2c), 2);
83 if (m2bc < m2bc_min || m2bc > m2bc_max)
return 0;
113 Double_t* lower, Double_t* upper) {
121 Double_t m_d2 = m_d*m_d;
122 Double_t m2bc = x[2];
126 Double_t minBC = TMath::Power(
m_b +
m_c, 2);
127 Double_t maxBC = TMath::Power(m_d -
m_a, 2);
129 if (m2bc < minBC || m2bc > maxBC)
return 0;
131 Double_t eb = (m2bc +
m_b2 -
m_c2)/2./TMath::Sqrt(m2bc);
132 Double_t ea = (m_d2 - m2bc -
m_a2)/2./TMath::Sqrt(m2bc);
134 Double_t p2b = TMath::Power(eb, 2) -
m_b2;
135 Double_t p2a = TMath::Power(ea, 2) -
m_a2;
137 if (p2a<0 || p2b<0)
return 0;
141 *upper = TMath::Power(ea+eb, 2) - TMath::Power(sqrt(p2a) - sqrt(p2b), 2);
142 *lower = TMath::Power(ea+eb, 2) - TMath::Power(sqrt(p2a) + sqrt(p2b), 2);
148 Double_t m_d2 = m_d*m_d;
149 Double_t m2ab = x[1];
151 Double_t minAB = TMath::Power(
m_a +
m_b, 2);
152 Double_t maxAB = TMath::Power(m_d -
m_c, 2);
156 if (m2ab < minAB || m2ab > maxAB)
return 0;
158 Double_t eb = (m2ab -
m_a2 +
m_b2)/2./TMath::Sqrt(m2ab);
159 Double_t ec = (m_d2 - m2ab -
m_c2)/2./TMath::Sqrt(m2ab);
161 Double_t p2b = TMath::Power(eb, 2) -
m_b2;
162 Double_t p2c = TMath::Power(ec, 2) -
m_c2;
164 if (p2c<0 || p2b<0)
return 0;
168 *upper = TMath::Power(eb+ec, 2) - TMath::Power(sqrt(p2b) - sqrt(p2c), 2);
169 *lower = TMath::Power(eb+ec, 2) - TMath::Power(sqrt(p2b) + sqrt(p2c), 2);
Double_t m_a
Mass of the particle A.
char m_name[256]
Phase space name.
Double_t m_MinAB
Lower limit of AB invariant mass values.
Bool_t limits(UInt_t var, std::vector< Double_t > &x, Double_t *lower, Double_t *upper)
Return limits (lower and upper) for the variable at the certain point of the phase space...
Double_t m_b
Mass of the particle B.
void print(int level, const char *format,...)
Double_t m_a2
Squared mass of the particle A.
Double_t m_b2
Squared mass of the particle B.
virtual ~ExtendedDalitzPhaseSpace()
Destructor.
Double_t m_SqSum
Sum of squared masses of daughter particles.
Double_t m_MinBC
Lower limit of BC invariant mass values.
Abstract class which defines phase space interface.
Double_t m_MaxAB
Upper limit of AB invariant mass values.
Double_t m_MaxBC
Upper limit of BC invariant mass values.
Double_t m_d_max
Maximum mass of the mother particle.
ExtendedDalitzPhaseSpace(const char *phaseSpaceName, Double_t mDmin, Double_t mDmax, Double_t mA, Double_t mB, Double_t mC)
Constructor.
Double_t m_c
Mass of the particle C.
Bool_t withinLimits(std::vector< Double_t > &x)
Check if the point is within the phase space limits.
Double_t m_c2
Squared mass of the particle C.
Double_t lowerLimit(UInt_t var)
Get lower limit.
Double_t upperLimit(UInt_t var)
Get upper limit.
Double_t m_d_min
Minimum mass of the mother particle.