8 #include "TLorentzVector.h"
28 void PHOB(
int MODE,
double PBOOS1[4],
double vec[4])
30 double BET1[3], GAM1, PB;
35 PB = sqrt(PBOOS1[4 - j0] * PBOOS1[4 - j0] - PBOOS1[3 - j0] * PBOOS1[3 - j0] - PBOOS1[2 - j0] * PBOOS1[2 - j0] - PBOOS1[1 - j0] *
37 for (J = 1; J < 4; J++) {
38 if (MODE == 1) BET1[J - j0] = -PBOOS1[J - j0] / PB;
39 else BET1[J - j0] = PBOOS1[J - j0] / PB;
42 GAM1 = PBOOS1[4 - j0] / PB;
47 PB = BET1[1 - j0] * vec[1 - j0] + BET1[2 - j0] * vec[2 - j0] + BET1[3 - j0] * vec[3 - j0];
49 for (J = 1; J < 4; J++) vec[J - j0] = vec[J - j0] + BET1[J - j0] * (vec[4 - j0] + PB / (GAM1 + 1.0));
50 vec[4 - j0] = GAM1 * vec[4 - j0] + PB;
54 void coutLorentzVector(
const TLorentzVector& p4,
bool inMeV =
false)
56 double factor = (inMeV) ? 1000. : 1;
57 TString units = (inMeV) ?
"MeV" :
"GeV";
59 cout << Form(
"M,E,Rho,Theta,Phi,X,Y,Z (%s) = ", units.Data())
60 << Form(
"% 10.5f", p4.M() / factor) <<
" "
61 << Form(
"% 10.5f", p4.E() / factor) <<
" "
62 << Form(
"% 10.5f", p4.Rho() / factor) <<
" "
63 << Form(
"% 10.5f", p4.Theta() * (180. / acos(-1.))) <<
" "
64 << Form(
"% 10.5f", p4.Phi() * (180. / acos(-1.))) <<
" "
65 << Form(
"% 10.5f", p4.Px() / factor) <<
" "
66 << Form(
"% 10.5f", p4.Py() / factor) <<
" "
67 << Form(
"% 10.5f", p4.Pz() / factor) <<
" "
70 double dilog(
double X)
73 double Z, T, S, Y, B, A, di;
74 Z = -1.64493406684822;
75 if (X < -1.0)
goto case1;
76 if (X <= 0.5)
goto case2;
77 if (X == 1.0)
goto case3;
78 if (X <= 2.0)
goto case4;
83 Z = Z - 0.5 * log(abs(X)) * log(abs(X));
91 di = 1.64493406684822;
96 Z = 1.64493406684822 - log(X) * log(abs(T));
98 Y = 2.66666666666666 * T + 0.66666666666666;
99 B = 0.000000000000001;
100 A = Y * B + 0.000000000000004;
101 B = Y * A - B + 0.000000000000011;
102 A = Y * B - A + 0.000000000000037;
103 B = Y * A - B + 0.000000000000121;
104 A = Y * B - A + 0.000000000000398;
105 B = Y * A - B + 0.000000000001312;
106 A = Y * B - A + 0.000000000004342;
107 B = Y * A - B + 0.000000000014437;
108 A = Y * B - A + 0.000000000048274;
109 B = Y * A - B + 0.000000000162421;
110 A = Y * B - A + 0.000000000550291;
111 B = Y * A - B + 0.000000001879117;
112 A = Y * B - A + 0.000000006474338;
113 B = Y * A - B + 0.000000022536705;
114 A = Y * B - A + 0.000000079387055;
115 B = Y * A - B + 0.000000283575385;
116 A = Y * B - A + 0.000001029904264;
117 B = Y * A - B + 0.000003816329463;
118 A = Y * B - A + 0.000014496300557;
119 B = Y * A - B + 0.000056817822718;
120 A = Y * B - A + 0.000232002196094;
121 B = Y * A - B + 0.001001627496164;
122 A = Y * B - A + 0.004686361959447;
123 B = Y * A - B + 0.024879322924228;
124 A = Y * B - A + 0.166073032927855;
125 A = Y * A - B + 1.93506430086996;
126 di = S * T * (A - B) + Z;
133 void eepi_(
const double& m_dark,
const double& dark_width,
const double& Mlep,
const double& Mpion,
134 const double* pt,
const double* pn,
const double* p1,
const double* p2,
const double* p3,
135 double& amplit,
double* hv,
int& iflag)
138 (Mlep < 0.1) ? e_all++ : m_all++;
142 p23[3] = p3[3] + p2[3];
143 p23[2] = p3[2] + p2[2];
144 p23[1] = p3[1] + p2[1];
145 p23[0] = p3[0] + p2[0];
146 double m2ee = p23[3] * p23[3] - p23[2] * p23[2] - p23[1] * p23[1] - p23[0] * p23[0];
149 col[3] = p1[3] * p23[3];
150 col[2] = p1[2] * p23[2];
151 col[1] = p1[1] * p23[1];
152 col[0] = p1[0] * p23[0];
153 double pk = col[3] - col[2] - col[1] - col[0];
156 ptk[3] = pt[3] * p23[3];
157 ptk[2] = pt[2] * p23[2];
158 ptk[1] = pt[1] * p23[1];
159 ptk[0] = pt[0] * p23[0];
160 double ptp23 = ptk[3] - ptk[2] - ptk[1] - ptk[0];
163 kpn[3] = pn[3] * p23[3];
164 kpn[2] = pn[2] * p23[2];
165 kpn[1] = pn[1] * p23[1];
166 kpn[0] = pn[0] * p23[0];
167 double pnk = kpn[3] - kpn[2] - kpn[1] - kpn[0];
170 ptq[3] = pn[3] * pt[3];
171 ptq[2] = pn[2] * pt[2];
172 ptq[1] = pn[1] * pt[1];
173 ptq[0] = pn[0] * pt[0];
174 double ptpn = ptq[3] - ptq[2] - ptq[1] - ptq[0];
177 pp[3] = p2[3] * p3[3];
178 pp[2] = p2[2] * p3[2];
179 pp[1] = p2[1] * p3[1];
180 pp[0] = p2[0] * p3[0];
181 double p2p3 = pp[3] - pp[2] - pp[1] - pp[0];
184 tmp[3] = p2[3] * pt[3];
185 tmp[2] = p2[2] * pt[2];
186 tmp[1] = p2[1] * pt[1];
187 tmp[0] = p2[0] * pt[0];
188 double p2pt = tmp[3] - tmp[2] - tmp[1] - tmp[0];
189 tmp[3] = p3[3] * pt[3];
190 tmp[2] = p3[2] * pt[2];
191 tmp[1] = p3[1] * pt[1];
192 tmp[0] = p3[0] * pt[0];
193 double p3pt = tmp[3] - tmp[2] - tmp[1] - tmp[0];
194 tmp[3] = p2[3] * pn[3];
195 tmp[2] = p2[2] * pn[2];
196 tmp[1] = p2[1] * pn[1];
197 tmp[0] = p2[0] * pn[0];
198 double p2pn = tmp[3] - tmp[2] - tmp[1] - tmp[0];
199 tmp[3] = p3[3] * pn[3];
200 tmp[2] = p3[2] * pn[2];
201 tmp[1] = p3[1] * pn[1];
202 tmp[0] = p3[0] * pn[0];
203 double p3pn = tmp[3] - tmp[2] - tmp[1] - tmp[0];
204 tmp[3] = p2[3] * p1[3];
205 tmp[2] = p2[2] * p1[2];
206 tmp[1] = p2[1] * p1[1];
207 tmp[0] = p2[0] * p1[0];
208 double p2p1 = tmp[3] - tmp[2] - tmp[1] - tmp[0];
209 tmp[3] = p3[3] * p1[3];
210 tmp[2] = p3[2] * p1[2];
211 tmp[1] = p3[1] * p1[1];
212 tmp[0] = p3[0] * p1[0];
213 double p3p1 = tmp[3] - tmp[2] - tmp[1] - tmp[0];
214 tmp[3] = p1[3] * pn[3];
215 tmp[2] = p1[2] * pn[2];
216 tmp[1] = p1[1] * pn[1];
217 tmp[0] = p1[0] * pn[0];
218 double p1pn = tmp[3] - tmp[2] - tmp[1] - tmp[0];
219 tmp[3] = p1[3] * pt[3];
220 tmp[2] = p1[2] * pt[2];
221 tmp[1] = p1[1] * pt[1];
222 tmp[0] = p1[0] * pt[0];
223 double p1pt = tmp[3] - tmp[2] - tmp[1] - tmp[0];
225 double ptsq = pt[3] * pt[3] - pt[2] * pt[2] - pt[1] * pt[1] - pt[0] * pt[0];
226 double p1sq = p1[3] * p1[3] - p1[2] * p1[2] - p1[1] * p1[1] - p1[0] * p1[0];
230 d1 = m2ee - 2.*ptp23;
232 double c1, c2, c3, c4, c5, c6, c7, c8, c9, a;
234 a = (p2p3 + Mlep * Mlep);
236 c1 = p2pt * p3pn + p3pt * p2pn - p2p3 * ptpn - ptpn * a;
238 c1 = -(c1 * 2. + 4.*a * ptpn) * m2ee / d1 / d1;
240 c2 = p2p1 * p3pn + p2pn * p3p1 - p1pn * a;
241 c2 = c2 * 4.*ptp23 / d1 / d2;
243 c3 = p2pt * p3pn + p2pn * p3pt - ptpn * a;
244 c3 = c3 * 4.*ptp23 / d1 / d1;
247 c4 = 2.*p2p3 - 4.* a;
248 c4 = -c4 * 2.*pnk * ptp23 / d1 / d1;
250 c5 = p2p1 * p3pt + p2pt * p3p1 - p1pt * a;
251 c5 = -c5 * 4.*pnk / d1 / d2;
253 c6 = 2.*p2pt * p3pt - ptsq * a;
254 c6 = -c6 * 4.*pnk / d1 / d1;
256 c7 = p2p1 * p3pt + p2pt * p3p1 - p1pt * a;
257 c7 = c7 * 8.*ptpn / d1 / d2;
259 c8 = 2.*p2p1 * p3p1 - p1sq * a;
260 c8 = c8 * 4.*ptpn / d2 / d2;
262 c9 = 2.*p2pt * p3pt - ptsq * a;
263 c9 = c9 * 4.*ptpn / d1 / d1;
265 double wigner = (m2ee - m_dark * m_dark) * (m2ee - m_dark * m_dark) + m_dark * m_dark * dark_width * dark_width;
267 amplit = (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 + c9) / wigner;
274 if (amplit < 0.0 && iflag == 0) {
276 (Mlep < 0.1) ? e_neg++ : m_neg++;
308 double pt_new[4], pn_new[4], p1_new[4], p2_new[4], p3_new[4];
309 for (
int i = 0; i < 4 ; i++) {
316 pn_new[3] = sqrt(pn[2] * pn[2] + pn[1] * pn[1] + pn[0] * pn[0]);
317 p1_new[3] = sqrt(Mpion * Mpion + p1[2] * p1[2] + p1[1] * p1[1] + p1[0] * p1[0]);
318 p2_new[3] = sqrt(Mlep * Mlep + p2[2] * p2[2] + p2[1] * p2[1] + p2[0] * p2[0]);
319 p3_new[3] = sqrt(Mlep * Mlep + p3[2] * p3[2] + p3[1] * p3[1] + p3[0] * p3[0]);
320 for (
int i = 0; i < 4 ; i++) {
321 pt_new[i] = pn_new[i] + p1_new[i] + p2_new[i] + p3_new[i];
324 PHOB(1, pt_new, pn_new);
325 PHOB(1, pt_new, p1_new);
326 PHOB(1, pt_new, p2_new);
327 PHOB(1, pt_new, p3_new);
336 double amplit_redone;
338 eepi_(m_dark, dark_width, Mlep, Mpion, pt_new, pn_new, p1_new, p2_new, p3_new, amplit_redone, hv, iflag);
357 void eemu_(
const double& m_dark,
const double& dark_width,
const double& Mtau,
358 const double* pt,
const double* pn,
const double* p1,
const double* p2,
const double* p3,
const double* p4,
359 double& amplit,
double* hv)
364 p34[3] = p3[3] + p4[3];
365 p34[2] = p3[2] + p4[2];
366 p34[1] = p3[1] + p4[1];
367 p34[0] = p3[0] + p4[0];
370 col[3] = p2[3] * p34[3];
371 col[2] = p2[2] * p34[2];
372 col[1] = p2[1] * p34[1];
373 col[0] = p2[0] * p34[0];
375 double pk = col[3] - col[2] - col[1] - col[0];
376 double m2ee = p34[3] * p34[3] - p34[2] * p34[2] - p34[1] * p34[1] - p34[0] * p34[0];
379 ptk[3] = pt[3] * p34[3];
380 ptk[2] = pt[2] * p34[2];
381 ptk[1] = pt[1] * p34[1];
382 ptk[0] = pt[0] * p34[0];
384 double ptp34 = ptk[3] - ptk[2] - ptk[1] - ptk[0];
387 PP[3] = p2[3] / (pk + m2ee / 2.) - pt[3] / (ptp34 - m2ee / 2.);
388 PP[2] = p2[2] / (pk + m2ee / 2.) - pt[2] / (ptp34 - m2ee / 2.);
389 PP[1] = p2[1] / (pk + m2ee / 2.) - pt[1] / (ptp34 - m2ee / 2.);
390 PP[0] = p2[0] / (pk + m2ee / 2.) - pt[0] / (ptp34 - m2ee / 2.);
393 PPsq = PP[3] * PP[3] - PP[2] * PP[2] - PP[1] * PP[1] - PP[0] * PP[0];
396 p3PP = p3[3] * PP[3] - p3[2] * PP[2] - p3[1] * PP[1] - p3[0] * PP[0];
399 p4PP = p4[3] * PP[3] - p4[2] * PP[2] - p4[1] * PP[1] - p4[0] * PP[0];
401 double wigner = (m2ee - m_dark * m_dark) * (m2ee - m_dark * m_dark) + m_dark * m_dark * dark_width * dark_width;
403 double ampser = (4.*p3PP * p4PP - m2ee * PPsq) / (2.*wigner) ;
405 double ak0 = 0.001 * Mtau;
410 amplit = nunul_(Mtau, p2, pn, p1, ak0, hv) * ampser;
414 double nunul_(
const double& Mtau,
const double* pl,
const double* pnu,
const double* pnl,
double ak0,
double* hv)
418 double Msq = Mtau * Mtau;
420 double rxnl[3], rxnu[3], rxl[3];
425 for (
int i = 0; i < 3; i++) {
426 rxnl[i] = pr[3] * pnl[3] - pr[2] * pnl[2] - pr[1] * pnl[1] - pr[0] * pnl[0];
427 rxnu[i] = pr[3] * pnu[3] - pr[2] * pnu[2] - pr[1] * pnu[1] - pr[0] * pnu[0];
428 rxl[i] = pr[3] * pl[3] - pr[2] * pl[2] - pr[1] * pl[1] - pr[0] * pl[0];
431 double u0, u3, w3, w0, up, um, wp, wm, yu, yw, eps2, eps, y, al;
433 u3 = sqrt(pl[0] * pl[0] + pl[1] * pl[1] + pl[2] * pl[2]) / Mtau;
435 w0 = (pnu[3] + pnl[3]) / Mtau;
440 yu = log(up / um) / 2.;
441 if (isnan(yu) || isinf(yu)) yu = 0;
442 yw = log(wp / wm) / 2.;
443 if (isnan(yw) || isinf(yw)) yw = 0;
444 eps2 = u0 * u0 - u3 * u3;
446 y = w0 * w0 - w3 * w3;
450 double f0, fp, fm, f3;
451 f0 = 2.*u0 / u3 * (dilog(1.0 - (um * wm / (up * wp))) - dilog(1.0 - wm / wp)
452 + dilog(1.0 - um / up) - 2.*yu + 2.*log(up) * (yw + yu))
453 + 1.0 / y * (2.*u3 * yu + (1.0 - eps2 - 2 * y) * log(eps)) + 2.0 - 4.*(u0 / u3 * yu - 1.0) * log(2.*al);
454 fp = yu / (2 * u3) * (1. + (1. - eps2) / y) + log(eps) / y;
455 fm = yu / (2 * u3) * (1. - (1. - eps2) / y) - log(eps) / y;
456 f3 = eps2 * (fp + fm) / 2.;
459 double lxnl, lxnu, nuxnl, mxnl, mxnu, mxl;
460 lxnu = pl[3] * pnu[3] - pl[2] * pnu[2] - pl[1] * pnu[1] - pl[0] * pnu[0];
461 lxnl = pl[3] * pnl[3] - pl[2] * pnl[2] - pl[1] * pnl[1] - pl[0] * pnl[0];
462 nuxnl = pnu[3] * pnl[3] - pnu[2] * pnl[2] - pnu[1] * pnl[1] - pnu[0] * pnl[0];
464 mxnu = Mtau * pnu[3];
465 mxnl = Mtau * pnl[3];
470 xm3 = -(f0 * lxnu * mxnl + fp * eps2 * mxnu * mxnl + fm * lxnu * lxnl + f3 * Msq * nuxnl);
471 if (isnan(xm3) || isinf(xm3)) xm3 = 0.0;
472 am3 = Mnu * xm3 * c3;
475 double brak, gv, ga, born, xm3pol[3], am3pol[3], bornp[3];
478 brak = (gv + ga) * (gv + ga) * mxl * nuxnl
479 + (gv - ga) * (gv - ga) * mxnl * lxnu
480 - (gv * gv - ga * ga) * Mtau * Mnu * lxnl;
482 for (
int i = 0; i < 3; i++) {
483 xm3pol[i] = -(f0 * lxnu * rxnl[i] + fp * eps2 * mxnu * rxnl[i]
484 + fm * lxnu * (lxnl + (rxnl[i] * mxl - mxnl * rxl[i]) / Msq)
485 + f3 * (Msq * nuxnl + mxnu * rxnl[i] - rxnu[i] * mxnl));
486 if (isnan(xm3pol[i]) || isinf(xm3pol[i])) xm3pol[i] = 0.0;
487 am3pol[i] = Mnu * xm3pol[i] * c3;
489 bornp[i] = born + ((gv + ga) * (gv + ga) * Mtau * nuxnl * pl[i]
490 - (gv + ga) * (gv + ga) * Mtau * lxnu * pnu[i]
491 + (gv * gv - ga * ga) * Mnu * mxnl * pl[i]
492 - (gv * gv - ga * ga) * Mnu * mxl * pnu[i]);
493 hv[i] = (bornp[i] + am3pol[i]) / (born + am3) - 1.0;
498 if (isnan(tbh) || isinf(tbh)) {
503 if (tbh / born < 0.1) {