PandaRoot
KinTools Namespace Reference

Functions

Double_t breakup (Double_t M, Double_t m1, Double_t m2)
 
Double_t BarrierP (Double_t q, Double_t q0, Int_t L, Double_t d=5.07)
 
Double_t Barrier (Double_t q, Int_t L, Double_t d=5.07)
 
Double_t BWGamma (Double_t m, Double_t m0, Double_t Gamma0, Double_t m1, Double_t m2, Int_t L, Double_t d=5.07)
 
TComplex BreitWigner (Double_t m, Double_t m0, Double_t Gamma0, Double_t m1, Double_t m2, Int_t L, Double_t d=5.07)
 
Double_t lambda (Double_t x, Double_t y, Double_t z)
 
Double_t simin (Int_t i, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t simax (Int_t i, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s2min (Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s2max (Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s3min (Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s3max (Double_t s1, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s1min (Double_t s2, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
Double_t s1max (Double_t s2, Double_t m0, Double_t m1, Double_t m2, Double_t m3)
 
void palette2 (Int_t mode=0)
 
Double_t Z_Ralt (Double_t s, Double_t smin, Double_t smax, Int_t J, double m_R=0., double m_ab=0., double m_c=0.)
 
Double_t Z_R (Double_t s, Double_t sab, Double_t sac, Double_t sbc, int i, Double_t mR, Int_t J, double fma, double fmb, double fmc)
 
TComplex getAmp (CRes *r, Double_t m, Double_t m1, Double_t m2, Double_t qR, Double_t qM)
 
TComplex getAmpEvt (CRes *r, double sab, double sac, double sbc, double ma, double mb, double mc)
 

Function Documentation

◆ Barrier()

Double_t KinTools::Barrier ( Double_t  q,
Int_t  L,
Double_t  d = 5.07 
)
inline

Definition at line 57 of file KinTools.h.

References sqrt().

Referenced by getAmp().

58 {
59  Double_t result = 1.0;
60 
61  Double_t z = q * q * d * d;
62 
63  switch (L) {
64  case 1: result = sqrt(2. * z / (1. + z)); break;
65 
66  case 2: result = sqrt((13. * z * z) / ((z - 3.) * (z - 3.) + 9. * z)); break;
67 
68  default: break;
69  }
70 
71  return result;
72 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ BarrierP()

Double_t KinTools::BarrierP ( Double_t  q,
Double_t  q0,
Int_t  L,
Double_t  d = 5.07 
)
inline

Definition at line 39 of file KinTools.h.

References sqrt().

Referenced by BWGamma(), and getAmp().

40 {
41  Double_t result = 1.0;
42 
43  Double_t z0 = q0 * q0 * d * d;
44  Double_t z = q * q * d * d;
45 
46  switch (L) {
47  case 1: result = sqrt((1. + z0) / (1. + z)); break;
48 
49  case 2: result = sqrt(((z0 - 3.) * (z0 - 3.) + 9. * z0) / ((z - 3.) * (z - 3.) + 9. * z)); break;
50 
51  default: break;
52  }
53 
54  return result;
55 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ breakup()

Double_t KinTools::breakup ( Double_t  M,
Double_t  m1,
Double_t  m2 
)
inline

Definition at line 26 of file KinTools.h.

References sqrt().

Referenced by BWGamma(), and getAmp().

27 {
28  Double_t sum12 = m1 + m2;
29  Double_t dif12 = m1 - m2;
30 
31  Double_t q = 0.;
32 
33  if (M > sum12)
34  q = sqrt((M * M - sum12 * sum12) * (M * M - dif12 * dif12)) / (2. * M);
35 
36  return q;
37 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ BreitWigner()

TComplex KinTools::BreitWigner ( Double_t  m,
Double_t  m0,
Double_t  Gamma0,
Double_t  m1,
Double_t  m2,
Int_t  L,
Double_t  d = 5.07 
)
inline

Definition at line 97 of file KinTools.h.

References BWGamma().

Referenced by getAmp().

98 {
99  TComplex I(0., 1.);
100  TComplex G(BWGamma(m, m0, Gamma0, m1, m2, L, d));
101 
102  TComplex BW = G / (m0 * m0 - m * m - I * m0 * G);
103 
104  return BW;
105 }
Double_t BWGamma(Double_t m, Double_t m0, Double_t Gamma0, Double_t m1, Double_t m2, Int_t L, Double_t d=5.07)
Definition: KinTools.h:74
__m128 m
Definition: P4_F32vec4.h:26

◆ BWGamma()

Double_t KinTools::BWGamma ( Double_t  m,
Double_t  m0,
Double_t  Gamma0,
Double_t  m1,
Double_t  m2,
Int_t  L,
Double_t  d = 5.07 
)
inline

Definition at line 74 of file KinTools.h.

References BarrierP(), breakup(), and m.

Referenced by BreitWigner().

75 {
76  Double_t q0 = breakup(m0, m1, m2);
77  Double_t q = breakup(m, m1, m2);
78 
79  if (0. == q)
80  return 0.;
81 
82  Double_t phsp = q / q0;
83 
84  switch (L) {
85  case 1: phsp = phsp * phsp * phsp; break;
86  case 2: phsp = phsp * phsp * phsp * phsp * phsp; break;
87  default: break;
88  }
89 
90  Double_t bar = BarrierP(q, q0, L, d);
91 
92  Double_t G = Gamma0 * phsp * (m0 / m) * bar * bar;
93 
94  return G;
95 }
__m128 m
Definition: P4_F32vec4.h:26
Double_t BarrierP(Double_t q, Double_t q0, Int_t L, Double_t d=5.07)
Definition: KinTools.h:39
Double_t breakup(Double_t M, Double_t m1, Double_t m2)
Definition: KinTools.h:26

◆ getAmp()

TComplex KinTools::getAmp ( CRes r,
Double_t  m,
Double_t  m1,
Double_t  m2,
Double_t  qR,
Double_t  qM 
)
inline

Definition at line 305 of file KinTools.h.

References Barrier(), BarrierP(), breakup(), BreitWigner(), CRes::GetCoeff(), CRes::GetG0(), CRes::GetJ(), CRes::GetM0(), and sqrt().

306 {
307  TComplex bw1 = BreitWigner(m, r->GetM0(), r->GetG0(), m1, m2, r->GetJ());
308  TComplex c = r->GetCoeff();
309  c *= 1. / sqrt(r->GetG0()); // weight taking into account width (give narrow resonances more weight)
310  Double_t bar1 = Barrier(qR, r->GetJ());
311  Double_t bar2 = BarrierP(qM, breakup(r->GetM0(), m1, m2), r->GetJ());
312  return bar1 * bar2 * c * bw1;
313 }
Int_t GetJ()
Definition: CRes.h:32
Double_t GetM0()
Definition: CRes.h:28
Double_t Barrier(Double_t q, Int_t L, Double_t d=5.07)
Definition: KinTools.h:57
__m128 m
Definition: P4_F32vec4.h:26
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
TComplex BreitWigner(Double_t m, Double_t m0, Double_t Gamma0, Double_t m1, Double_t m2, Int_t L, Double_t d=5.07)
Definition: KinTools.h:97
Double_t BarrierP(Double_t q, Double_t q0, Int_t L, Double_t d=5.07)
Definition: KinTools.h:39
Double_t breakup(Double_t M, Double_t m1, Double_t m2)
Definition: KinTools.h:26
Double_t GetG0()
Definition: CRes.h:29
TComplex GetCoeff()
Definition: CRes.h:45

◆ getAmpEvt()

TComplex KinTools::getAmpEvt ( CRes r,
double  sab,
double  sac,
double  sbc,
double  ma,
double  mb,
double  mc 
)
inline

Definition at line 315 of file KinTools.h.

References CRes::GetCoeff(), CRes::GetG0(), CRes::GetJ(), CRes::GetM0(), and sqrt().

316 {
317  double mAB2 = sab;
318  // double mBC2 = sbc;
319  // double mAC2 = sac;
320  double mA2 = ma * ma;
321  double mB2 = mb * mb;
322  double mC2 = mc * mc;
323  double mD2 = sab + sac + sbc - mA2 - mB2 - mC2;
324 
325  double mR = r->GetM0();
326  double mR2 = mR * mR;
327  double gammaR = r->GetG0();
328  // double mdenom = mR;
329 
330  double pAB = sqrt((((mAB2 - mA2 - mB2) * (mAB2 - mA2 - mB2) / 4.0) - mA2 * mB2) / (mAB2));
331  double pR = sqrt((((mR2 - mA2 - mB2) * (mR2 - mA2 - mB2) / 4.0) - mA2 * mB2) / (mR2));
332  double pD = (((mD2 - mR2 - mC2) * (mD2 - mR2 - mC2) / 4.0) - mR2 * mC2) / (mD2);
333  if (pD > 0) {
334  pD = sqrt(pD);
335  } else {
336  pD = 0;
337  }
338  double pDAB = sqrt((((mD2 - mAB2 - mC2) * (mD2 - mAB2 - mC2) / 4.0) - mAB2 * mC2) / (mD2));
339 
340  double fR = 1;
341  double fD = 1;
342  int power = 0;
343  int _spin = r->GetJ();
344  switch (_spin) {
345  case 0:
346  fR = 1.0;
347  fD = 1.0;
348  power = 1;
349  break;
350  case 1:
351  fR = sqrt(1.0 + 1.5 * 1.5 * pR * pR) / sqrt(1.0 + 1.5 * 1.5 * pAB * pAB);
352  fD = sqrt(1.0 + 5.0 * 5.0 * pD * pD) / sqrt(1.0 + 5.0 * 5.0 * pDAB * pDAB);
353  power = 3;
354  break;
355  case 2:
356  fR = sqrt((9 + 3 * pow((1.5 * pR), 2) + pow((1.5 * pR), 4)) / (9 + 3 * pow((1.5 * pAB), 2) + pow((1.5 * pAB), 4)));
357  fD = sqrt((9 + 3 * pow((5.0 * pD), 2) + pow((5.0 * pD), 4)) / (9 + 3 * pow((5.0 * pDAB), 2) + pow((5.0 * pDAB), 4)));
358  power = 5;
359  break;
360  }
361 
362  double gammaAB = gammaR * pow(pAB / pR, power) * (mR / sqrt(mAB2)) * fR * fR;
363 
364  TComplex ampl = sqrt(r->GetG0()) * r->GetCoeff() * fR * fD / (mR2 - mAB2 - TComplex(0.0, mR * gammaAB));
365 
366  return ampl;
367 }
Int_t GetJ()
Definition: CRes.h:32
Double_t GetM0()
Definition: CRes.h:28
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28
Double_t GetG0()
Definition: CRes.h:29
TComplex GetCoeff()
Definition: CRes.h:45

◆ lambda()

Double_t KinTools::lambda ( Double_t  x,
Double_t  y,
Double_t  z 
)
inline

Definition at line 107 of file KinTools.h.

Referenced by s1max(), s1min(), s2max(), s2min(), s3max(), and s3min().

108 {
109  return x * x + y * y + z * z - 2. * x * y - 2. * y * z - 2. * z * x;
110 }

◆ palette2()

void KinTools::palette2 ( Int_t  mode = 0)
inline

Definition at line 196 of file KinTools.h.

References i.

197 {
198  const int ncol = 99;
199  static Int_t col0[99], col1[99], col2[99], col3[99];
200  static Bool_t initialized = kFALSE;
201 
202  if (!initialized) {
203  {
204  Double_t blu[3] = {1, 0.2, 0};
205  Double_t red[3] = {1, 0.2, 0};
206  Double_t grn[3] = {1, 0.2, 0};
207  Double_t stp[3] = {0, 0.5, 1};
208 
209  Int_t FI = TColor::CreateGradientColorTable(3, stp, red, grn, blu, ncol);
210  for (int i = 0; i < ncol; i++)
211  col0[i] = FI + i;
212  }
213  {
214  Double_t blu2[6] = {1, 1, 1, 0, 0, 0};
215  Double_t red2[6] = {1, 0, 0, 0, 1, 1};
216  Double_t grn2[6] = {1, 0, 1, 1, 1, 0};
217  Double_t stp2[6] = {0.0, 0.12, 0.34, 0.56, 0.78, 1.0};
218 
219  Int_t FI = TColor::CreateGradientColorTable(6, stp2, red2, grn2, blu2, ncol);
220  for (int i = 0; i < ncol; i++)
221  col1[i] = FI + i;
222  }
223  {
224  Double_t blu3[5] = {0, 0, 1, 0, 0};
225  Double_t red3[5] = {0, 1, 1, 0, 0};
226  Double_t grn3[5] = {0, 0, 1, 1, 0};
227  Double_t stp3[5] = {0., 0.25, 0.5, 0.75, 1.0};
228 
229  Int_t FI = TColor::CreateGradientColorTable(5, stp3, red3, grn3, blu3, ncol);
230  for (int i = 0; i < ncol; i++)
231  col2[i] = FI + i;
232  }
233  {
234  Double_t blu4[6] = {1, 0, 0, 0, 0.06, 0};
235  Double_t red4[6] = {1, 1, 1, 0.5, 0.55, 0};
236  Double_t grn4[6] = {1, 1, 0.5, 0.25, 0.10, 0};
237  Double_t stp4[6] = {0., 0.2, 0.4, 0.60, 0.75, 1.0};
238 
239  Int_t FI = TColor::CreateGradientColorTable(6, stp4, red4, grn4, blu4, ncol);
240  for (int i = 0; i < ncol; i++)
241  col3[i] = FI + i;
242  }
243  initialized = kTRUE;
244  }
245 
246  switch (mode) {
247  case 0: gStyle->SetPalette(ncol, col0); break;
248  case 1: gStyle->SetPalette(ncol, col1); break;
249  case 2: gStyle->SetPalette(ncol, col2); break;
250  case 3: gStyle->SetPalette(56, 0); break;
251  }
252 }
unsigned int i
Definition: P4_F32vec4.h:21

◆ s1max()

Double_t KinTools::s1max ( Double_t  s2,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 186 of file KinTools.h.

References lambda(), and sqrt().

187 {
188  Double_t s = m0 * m0;
189  Double_t lamterm = sqrt(lambda(s2, s, m2 * m2)) * sqrt(lambda(s2, m1 * m1, m3 * m3));
190 
191  Double_t result = m2 * m2 + m3 * m3 + ((s - s2 - m2 * m2) * (s2 - m1 * m1 + m3 * m3) + lamterm) / (2. * s2);
192 
193  return result;
194 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ s1min()

Double_t KinTools::s1min ( Double_t  s2,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 176 of file KinTools.h.

References lambda(), and sqrt().

177 {
178  Double_t s = m0 * m0;
179  Double_t lamterm = sqrt(lambda(s2, s, m2 * m2)) * sqrt(lambda(s2, m3 * m3, m1 * m1));
180 
181  Double_t result = m2 * m2 + m3 * m3 + ((s - s2 - m2 * m2) * (s2 - m1 * m1 + m3 * m3) - lamterm) / (2. * s2);
182 
183  return result;
184 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ s2max()

Double_t KinTools::s2max ( Double_t  s1,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 146 of file KinTools.h.

References lambda(), and sqrt().

147 {
148  Double_t s = m0 * m0;
149  Double_t lamterm = sqrt(lambda(s1, s, m1 * m1)) * sqrt(lambda(s1, m2 * m2, m3 * m3));
150 
151  Double_t result = m1 * m1 + m3 * m3 + ((s - s1 - m1 * m1) * (s1 - m2 * m2 + m3 * m3) + lamterm) / (2. * s1);
152 
153  return result;
154 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ s2min()

Double_t KinTools::s2min ( Double_t  s1,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 136 of file KinTools.h.

References lambda(), and sqrt().

137 {
138  Double_t s = m0 * m0;
139  Double_t lamterm = sqrt(lambda(s1, s, m1 * m1)) * sqrt(lambda(s1, m2 * m2, m3 * m3));
140 
141  Double_t result = m1 * m1 + m3 * m3 + ((s - s1 - m1 * m1) * (s1 - m2 * m2 + m3 * m3) - lamterm) / (2. * s1);
142 
143  return result;
144 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ s3max()

Double_t KinTools::s3max ( Double_t  s1,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 166 of file KinTools.h.

References lambda(), and sqrt().

167 {
168  Double_t s = m0 * m0;
169  Double_t lamterm = sqrt(lambda(s1, s, m1 * m1)) * sqrt(lambda(s1, m3 * m3, m1 * m1));
170 
171  Double_t result = m1 * m1 + m2 * m2 + ((s - s1 - m1 * m1) * (s1 - m1 * m1 + m3 * m3) + lamterm) / (2. * s1);
172 
173  return result;
174 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ s3min()

Double_t KinTools::s3min ( Double_t  s1,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 156 of file KinTools.h.

References lambda(), and sqrt().

157 {
158  Double_t s = m0 * m0;
159  Double_t lamterm = sqrt(lambda(s1, s, m1 * m1)) * sqrt(lambda(s1, m3 * m3, m1 * m1));
160 
161  Double_t result = m1 * m1 + m2 * m2 + ((s - s1 - m1 * m1) * (s1 - m1 * m1 + m2 * m2) - lamterm) / (2. * s1);
162 
163  return result;
164 }
Double_t lambda(Double_t x, Double_t y, Double_t z)
Definition: KinTools.h:107
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28

◆ simax()

Double_t KinTools::simax ( Int_t  i,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 124 of file KinTools.h.

125 {
126  Double_t result = 0.;
127 
128  switch (i) {
129  case 1: result = (m0 - m1) * (m0 - m1); break;
130  case 2: result = (m0 - m2) * (m0 - m2); break;
131  case 3: result = (m0 - m3) * (m0 - m3); break;
132  }
133  return result;
134 }
unsigned int i
Definition: P4_F32vec4.h:21

◆ simin()

Double_t KinTools::simin ( Int_t  i,
Double_t  m0,
Double_t  m1,
Double_t  m2,
Double_t  m3 
)
inline

Definition at line 112 of file KinTools.h.

113 {
114  Double_t result = 0.;
115 
116  switch (i) {
117  case 1: result = (m2 + m3) * (m2 + m3); break;
118  case 2: result = (m1 + m3) * (m1 + m3); break;
119  case 3: result = (m1 + m2) * (m1 + m2); break;
120  }
121  return result;
122 }
unsigned int i
Definition: P4_F32vec4.h:21

◆ Z_R()

Double_t KinTools::Z_R ( Double_t  s,
Double_t  sab,
Double_t  sac,
Double_t  sbc,
int  i,
Double_t  mR,
Int_t  J,
double  fma,
double  fmb,
double  fmc 
)
inline

Definition at line 282 of file KinTools.h.

283 {
284  double res = 1.;
285 
286  if (J == 0)
287  return res;
288 
289  double mR2 = 2 * mR;
290 
291  double mA2 = fma * fma, mB2 = fmb * fmb, mC2 = fmc * fmc;
292 
293  switch (J) {
294  case 1:
295  res = sac - sbc + (s - mC2) * (mA2 - mB2) / mR2; //(mAC*mAC-mBC*mBC+((mD*mD-mC*mC)*(mB*mB-mA*mA)/(mdenom*mdenom)))
296  break;
297  case 2:
298  res = pow(sbc - sac + ((s - mC2) * (mA2 - mB2) / mR), 2) - 1. / 3. * (sab - 2 * s - 2 * mC2 + pow((s - mC2) / mR, 2)) * (sab - 2 * mA2 - 2 * mB2 + pow((mA2 - mB2) / mR, 2));
299  break;
300  }
301 
302  return res;
303 }

◆ Z_Ralt()

Double_t KinTools::Z_Ralt ( Double_t  s,
Double_t  smin,
Double_t  smax,
Int_t  J,
double  m_R = 0.,
double  m_ab = 0.,
double  m_c = 0. 
)
inline

Definition at line 254 of file KinTools.h.

References sqrt().

255 {
256  Double_t res = 1.0;
257 
258  Double_t x = (s - smin) / (smax - smin) * 2. - 1.0;
259 
260  double relcorr = 1.0, xi2 = 1.;
261 
262  if (m_R > 1e-6) {
263  xi2 = pow((m_R * m_R + m_ab * m_ab - m_c * m_c) / (2 * m_ab * m_R), 2) - 1;
264  }
265 
266  switch (J) {
267  case 1:
268  res = 3. * x * x;
269  if (m_R > 1e-6)
270  relcorr = sqrt(1. + xi2);
271  break;
272  case 2:
273  res = 5. * (x * x - 1. / 3.) * (x * x - 1. / 3.) * 9. / 4.;
274  if (m_R > 1e-6)
275  relcorr = sqrt(xi2 + 1.5);
276  break;
277  }
278 
279  return relcorr * sqrt(res); // *** new: return now sqrt(angle) to cope for computation of the intensity = amp*amp
280 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:28