10 #include "HEPEVT_struct.h"
11 #include "PhotosUtilities.h"
15 using namespace Photospp;
47 return Photos::IPHQRK_setQarknoEmission(0, i) && (i <= 41 || i > 100)
49 && i != 2101 && i != 3101 && i != 3201
50 && i != 1103 && i != 2103 && i != 2203
51 && i != 3103 && i != 3203 && i != 3303;
72 double PHINT(
int IDUM)
76 double EPS1[4], EPS2[4], PH[4], PL[4];
80 double XNUM1, XNUM2, XDENO, XC1, XC2;
87 for (K = 1; K <= 4; K++) {
88 PH[K - i] = pho.phep[pho.nhep - i][K - i];
93 PHOEPS(PH, EPS2, EPS1);
94 PHOEPS(PH, EPS1, EPS2);
101 for (K = pho.jdahep[1 - i][1 - i]; K <= pho.nhep - i; K++) {
105 for (L = 1; L <= 4; L++) PL[L - i] = pho.phep[K - i][L - i];
109 XC1 = - PHOCHA(pho.idhep[K - i]) *
110 (PL[1 - i] * EPS1[1 - i] + PL[2 - i] * EPS1[2 - i] + PL[3 - i] * EPS1[3 - i]) /
111 (PH[4 - i] * PL[4 - i] - PH[1 - i] * PL[1 - i] - PH[2 - i] * PL[2 - i] - PH[3 - i] * PL[3 - i]);
113 XC2 = - PHOCHA(pho.idhep[K - i]) *
114 (PL[1 - i] * EPS2[1 - i] + PL[2 - i] * EPS2[2 - i] + PL[3 - i] * EPS2[3 - i]) /
115 (PH[4 - i] * PL[4 - i] - PH[1 - i] * PL[1 - i] - PH[2 - i] * PL[2 - i] - PH[3 - i] * PL[3 - i]);
122 XDENO = XDENO + XC1 * XC1 + XC2 * XC2;
125 PHINT2 = (XNUM1 * XNUM1 + XNUM2 * XNUM2) / XDENO;
151 double PHINT1(
int IDUM)
165 double MPASQR, XX, BETA;
168 double& COSTHG = phophs.costhg;
169 double& XPHOTO = phophs.xphoto;
171 double& MCHSQR = phomom.mchsqr;
172 double& MNESQR = phomom.mnesqr;
177 for (K = pho.jdahep[1 - i][2 - i]; K >= pho.jdahep[1 - i][1 - i]; K--) {
178 if (pho.idhep[K - i] != 22) {
185 IFINT = pho.nhep > IDENT;
187 IFINT = IFINT && (IDENT - pho.jdahep[1 - i][1 - i]) == 1;
189 IFINT = IFINT && pho.idhep[pho.jdahep[1 - i][1 - i] - i] == -pho.idhep[IDENT - i];
191 IFINT = IFINT && PHOCHA(pho.idhep[IDENT - i]) != 0;
194 MPASQR = pho.phep[1 - i][5 - i] * pho.phep[1 - i][5 - i];
195 XX = 4.0 * MCHSQR / MPASQR * (1.0 - XPHOTO) / (1.0 - XPHOTO + (MCHSQR - MNESQR) / MPASQR) / (1.0 - XPHOTO +
196 (MCHSQR - MNESQR) / MPASQR);
197 BETA = sqrt(1.0 - XX);
198 PHINT = 2.0 / (1.0 + COSTHG * COSTHG * BETA * BETA);
226 double PHINT2(
int IDUM)
238 double& COSTHG = phophs.costhg;
239 double& XPHOTO = phophs.xphoto;
240 double& MCHSQR = phomom.mchsqr;
241 double& MNESQR = phomom.mnesqr;
244 double MPASQR, XX, BETA, pq1[4], pq2[4], pphot[4];
245 double SS, PP2, PP, E1, E2, q1, q2, costhe, PHINT;
251 for (K = pho.jdahep[1 - i][2 - i]; K >= pho.jdahep[1 - i][1 - i]; K--) {
252 if (pho.idhep[K - i] != 22) {
259 IFINT = pho.nhep > IDENT;
261 IFINT = IFINT && (IDENT - pho.jdahep[1 - i][1 - i]) == 1;
265 IFINT = IFINT && fabs(PHOCHA(pho.idhep[IDENT - i])) > 0.01;
267 IFINT = IFINT && fabs(PHOCHA(pho.idhep[pho.jdahep[1 - i][1 - i] - i])) > 0.01;
270 MPASQR = pho.phep[1 - i][5 - i] * pho.phep[1 - i][5 - i];
271 XX = 4.0 * MCHSQR / MPASQR * (1.0 - XPHOTO) / pow(1. - XPHOTO + (MCHSQR - MNESQR) / MPASQR, 2);
272 BETA = sqrt(1.0 - XX);
273 PHINT = 2.0 / (1.0 + COSTHG * COSTHG * BETA * BETA);
274 SS = MPASQR * (1.0 - XPHOTO);
275 PP2 = ((SS - MCHSQR - MNESQR) * (SS - MCHSQR - MNESQR) - 4 * MCHSQR * MNESQR) / SS / 4;
277 E1 = sqrt(PP2 + MCHSQR);
278 E2 = sqrt(PP2 + MNESQR);
279 PHINT = (E1 + E2) * (E1 + E2) / ((E2 + COSTHG * PP) * (E2 + COSTHG * PP) + (E1 - COSTHG * PP) * (E1 - COSTHG * PP));
282 q1 = PHOCHA(pho.idhep[pho.jdahep[1 - i][1 - i] - i]);
283 q2 = PHOCHA(pho.idhep[IDENT - i]);
284 for (k = 1; k <= 4; k++) {
285 pq1[k - i] = pho.phep[pho.jdahep[1 - i][1 - i] - i][k - i];
286 pq2[k - i] = pho.phep[pho.jdahep[1 - i][1 - i] + 1 - i][k - i];
287 pphot[k - i] = pho.phep[pho.nhep - i][k - i];
289 costhe = (pphot[1 - i] * pq1[1 - i] + pphot[2 - i] * pq1[2 - i] + pphot[3 - i] * pq1[3 - i]);
290 costhe = costhe / sqrt(pq1[1 - i] * pq1[1 - i] + pq1[2 - i] * pq1[2 - i] + pq1[3 - i] * pq1[3 - i]);
291 costhe = costhe / sqrt(pphot[1 - i] * pphot[1 - i] + pphot[2 - i] * pphot[2 - i] + pphot[3 - i] * pphot[3 - i]);
297 if (COSTHG * costhe > 0) {
299 PHINT = pow(q1 * (E2 + COSTHG * PP) - q2 * (E1 - COSTHG * PP),
300 2) / (q1 * q1 * (E2 + COSTHG * PP) * (E2 + COSTHG * PP) + q2 * q2 * (E1 - COSTHG * PP) * (E1 - COSTHG * PP));
303 PHINT = pow(q1 * (E1 - COSTHG * PP) - q2 * (E2 + COSTHG * PP),
304 2) / (q1 * q1 * (E1 - COSTHG * PP) * (E1 - COSTHG * PP) + q2 * q2 * (E2 + COSTHG * PP) * (E2 + COSTHG * PP));
342 const char eq80[81] =
"================================================================================";
343 const char X29[30] =
" ";
344 const char X23[24 ] =
" ";
345 const char X1[2] =
" ";
346 const char X2[3] =
" ";
347 const char X3[4] =
" ";
348 const char X4[5] =
" ";
349 const char X6[7] =
" ";
350 const char X7[8] =
" ";
351 FILE* PHLUN = stdout;
353 for (I = 0; I < 5; I++) SUMVEC[I] = 0.0;
356 fprintf(PHLUN,
"%s", eq80);
357 fprintf(PHLUN,
"%s Event No.: %10i\n", X29, hep.nevhep);
358 fprintf(PHLUN,
"%s Particle Parameters\n", X6);
359 fprintf(PHLUN,
"%s Nr %s Type %s Parent(s) %s Daughter(s) %s Px %s Py %s Pz %s E %s Inv. M.\n", X1, X3, X3, X2, X6, X7, X7, X7, X4);
360 for (I = 1; I <= hep.nhep; I++) {
363 if (hep.jdahep[I - i][1 - i] == 0) {
364 for (J = 1; J <= 4; J++) {
365 SUMVEC[J - i] = SUMVEC[J - i] + hep.phep[I - i][J - i];
367 if (hep.jmohep[I - i][2 - i] == 0) {
368 fprintf(PHLUN,
"%4i %7i %s %4i %s Stable %9.2f %9.2f %9.2f %9.2f %9.2f\n" , I, hep.idhep[I - i], X3, hep.jmohep[I - i][1 - i], X7,
369 hep.phep[I - i][1 - i], hep.phep[I - i][2 - i], hep.phep[I - i][3 - i], hep.phep[I - i][4 - i], hep.phep[I - i][5 - i]);
371 fprintf(PHLUN,
"%4i %7i %4i - %4i %s Stable %9.2f %9.2f %9.2f %9.2f %9.2f\n", I, hep.idhep[I - i], hep.jmohep[I - i][1 - i],
372 hep.jmohep[I - i][2 - i], X4, hep.phep[I - i][1 - i], hep.phep[I - i][2 - i], hep.phep[I - i][3 - i], hep.phep[I - i][4 - i],
373 hep.phep[I - i][5 - i]);
376 if (hep.jmohep[I - i][2 - i] == 0) {
377 fprintf(PHLUN,
"%4i %7i %s %4i %s %4i - %4i %9.2f %9.2f %9.2f %9.2f %9.2f\n" , I, hep.idhep[I - i], X3, hep.jmohep[I - i][1 - i],
378 X2, hep.jdahep[I - i][1 - i], hep.jdahep[I - i][2 - i], hep.phep[I - i][1 - i], hep.phep[I - i][2 - i], hep.phep[I - i][3 - i],
379 hep.phep[I - i][4 - i], hep.phep[I - i][5 - i]);
381 fprintf(PHLUN,
"%4i %7i %4i - %4i %4i - %4i %9.2f %9.2f %9.2f %9.2f %9.2f\n", I, hep.idhep[I - i], hep.jmohep[I - i][1 - i],
382 hep.jmohep[I - i][2 - i], hep.jdahep[I - i][1 - i], hep.jdahep[I - i][2 - i], hep.phep[I - i][1 - i], hep.phep[I - i][2 - i],
383 hep.phep[I - i][3 - i], hep.phep[I - i][4 - i], hep.phep[I - i][5 - i]);
387 SUMVEC[5 - i] = sqrt(SUMVEC[4 - i] * SUMVEC[4 - i] - SUMVEC[1 - i] * SUMVEC[1 - i] - SUMVEC[2 - i] * SUMVEC[2 - i] - SUMVEC[3 - i] *
389 fprintf(PHLUN,
"%s Vector Sum: %9.2f %9.2f %9.2f %9.2f %9.2f\n", X23, SUMVEC[1 - i], SUMVEC[2 - i], SUMVEC[3 - i], SUMVEC[4 - i],
430 void PHLUPAB(
int IPOINT)
432 char name[12] =
"/PH_HEPEVT/";
434 static int IPOIN0 = -5;
437 FILE* PHLUN = stdout;
441 phlupy.ipoin = IPOIN0;
442 phlupy.ipoinm = 400001;
445 if (IPOINT <= phlupy.ipoinm || IPOINT >= phlupy.ipoin)
return;
446 if ((
int)phnum.iev < 1000) {
447 for (I = 1; I <= 5; I++) SUM[I - i] = 0.0;
449 fprintf(PHLUN,
"EVENT NR= %i WE ARE TESTING %s at IPOINT=%i \n", (
int)phnum.iev, name, IPOINT);
450 fprintf(PHLUN,
" ID p_x p_y p_z E m ID-MO_DA1 ID-MO_DA2\n");
452 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", hep.idhep[I - i], hep.phep[I - i][1 - i], hep.phep[I - i][2 - i],
453 hep.phep[I - i][3 - i], hep.phep[I - i][4 - i], hep.phep[I - i][5 - i], hep.jdahep[I - i][1 - i], hep.jdahep[I - i][2 - i]);
455 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", hep.idhep[I - i], hep.phep[I - i][1 - i], hep.phep[I - i][2 - i],
456 hep.phep[I - i][3 - i], hep.phep[I - i][4 - i], hep.phep[I - i][5 - i], hep.jdahep[I - i][1 - i], hep.jdahep[I - i][2 - i]);
457 fprintf(PHLUN,
" \n");
458 for (I = 3; I <= hep.nhep; I++) {
459 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", hep.idhep[I - i], hep.phep[I - i][1 - i], hep.phep[I - i][2 - i],
460 hep.phep[I - i][3 - i], hep.phep[I - i][4 - i], hep.phep[I - i][5 - i], hep.jmohep[I - i][1 - i], hep.jmohep[I - i][2 - i]);
461 for (J = 1; J <= 4; J++) SUM[J - i] = SUM[J - i] + hep.phep[I - i][J - i];
465 SUM[5 - i] = sqrt(fabs(SUM[4 - i] * SUM[4 - i] - SUM[1 - i] * SUM[1 - i] - SUM[2 - i] * SUM[2 - i] - SUM[3 - i] * SUM[3 - i]));
466 fprintf(PHLUN,
" SUM %14.9f %14.9f %14.9f %14.9f %14.9f\n", SUM[1 - i], SUM[2 - i], SUM[3 - i], SUM[4 - i], SUM[5 - i]);
504 void PHLUPA(
int IPOINT)
506 char name[9] =
"/PHOEVT/";
508 static int IPOIN0 = -5;
511 FILE* PHLUN = stdout;
515 phlupy.ipoin = IPOIN0;
516 phlupy.ipoinm = 400001;
519 if (IPOINT <= phlupy.ipoinm || IPOINT >= phlupy.ipoin)
return;
520 if ((
int)phnum.iev < 1000) {
521 for (I = 1; I <= 5; I++) SUM[I - i] = 0.0;
523 fprintf(PHLUN,
"EVENT NR= %i WE ARE TESTING %s at IPOINT=%i \n", (
int)phnum.iev, name, IPOINT);
524 fprintf(PHLUN,
" ID p_x p_y p_z E m ID-MO_DA1 ID-MO_DA2\n");
526 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", pho.idhep[I - i], pho.phep[I - i][1 - i], pho.phep[I - i][2 - i],
527 pho.phep[I - i][3 - i], pho.phep[I - i][4 - i], pho.phep[I - i][5 - i], pho.jdahep[I - i][1 - i], pho.jdahep[I - i][2 - i]);
529 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", pho.idhep[I - i], pho.phep[I - i][1 - i], pho.phep[I - i][2 - i],
530 pho.phep[I - i][3 - i], pho.phep[I - i][4 - i], pho.phep[I - i][5 - i], pho.jdahep[I - i][1 - i], pho.jdahep[I - i][2 - i]);
531 fprintf(PHLUN,
" \n");
532 for (I = 3; I <= pho.nhep; I++) {
533 fprintf(PHLUN,
"%4i %14.9f %14.9f %14.9f %14.9f %14.9f %9i %9i\n", pho.idhep[I - i], pho.phep[I - i][1 - i], pho.phep[I - i][2 - i],
534 pho.phep[I - i][3 - i], pho.phep[I - i][4 - i], pho.phep[I - i][5 - i], pho.jmohep[I - i][1 - i], pho.jmohep[I - i][2 - i]);
535 for (J = 1; J <= 4; J++) SUM[J - i] = SUM[J - i] + pho.phep[I - i][J - i];
539 SUM[5 - i] = sqrt(fabs(SUM[4 - i] * SUM[4 - i] - SUM[1 - i] * SUM[1 - i] - SUM[2 - i] * SUM[2 - i] - SUM[3 - i] * SUM[3 - i]));
540 fprintf(PHLUN,
" SUM %14.9f %14.9f %14.9f %14.9f %14.9f\n", SUM[1 - i], SUM[2 - i], SUM[3 - i], SUM[4 - i], SUM[5 - i]);
564 for (K = 1; K <= 4; K++) {
565 tofrom.QQ[K - i] = 0.0;
567 for (L = hep.jdahep[hep.jmohep[hep.nhep - i][1 - i] - i][1 - i]; L <= hep.jdahep[hep.jmohep[hep.nhep - i][1 - i] - i][2 - i]; L++) {
568 for (K = 1; K <= 4; K++) {
569 tofrom.QQ[K - i] = tofrom.QQ[K - i] + hep.phep[L - i][K - i];
572 tofrom.XM = tofrom.QQ[4 - i] * tofrom.QQ[4 - i] - tofrom.QQ[3 - i] * tofrom.QQ[3 - i] - tofrom.QQ[2 - i] * tofrom.QQ[2 - i] -
573 tofrom.QQ[1 - i] * tofrom.QQ[1 - i];
574 if (tofrom.XM > 0.0) tofrom.XM = sqrt(tofrom.XM);
575 if (tofrom.XM <= 0.0)
return;
577 for (L = 1; L <= hep.nhep; L++) {
578 for (K = 1; K <= 4; K++) {
579 PP[K - i] = hep.phep[L - i][K - i];
581 bostdq(1, tofrom.QQ, PP, RR);
582 for (K = 1; K <= 4; K++) {
583 hep.phep[L - i][K - i] = RR[K - i];
589 if (fabs(hep.phep[1 - i][1 - i]) + fabs(hep.phep[1 - i][2 - i]) > 0.0) tofrom.fi1 = PHOAN1(hep.phep[1 - i][1 - i],
590 hep.phep[1 - i][2 - i]);
591 if (fabs(hep.phep[1 - i][1 - i]) + fabs(hep.phep[1 - i][2 - i]) + fabs(hep.phep[1 - i][3 - i]) > 0.0)
592 tofrom.th1 = PHOAN2(hep.phep[1 - i][3 - i],
593 sqrt(hep.phep[1 - i][1 - i] * hep.phep[1 - i][1 - i] + hep.phep[1 - i][2 - i] * hep.phep[1 - i][2 - i]));
595 for (L = 1; L <= hep.nhep; L++) {
596 for (K = 1; K <= 4; K++) {
597 RR[K - i] = hep.phep[L - i][K - i];
600 PHORO3(-tofrom.fi1, RR);
601 PHORO2(-tofrom.th1, RR);
602 for (K = 1; K <= 4; K++) {
603 hep.phep[L - i][K - i] = RR[K - i];
619 if (tofrom.XM <= 0.0)
return;
622 for (L = 1; L <= hep.nhep; L++) {
623 for (K = 1; K <= 4; K++) {
624 PP[K - i] = hep.phep[L - i][K - i];
627 PHORO2(tofrom.th1, PP);
628 PHORO3(tofrom.fi1, PP);
629 bostdq(-1, tofrom.QQ, PP, RR);
631 for (K = 1; K <= 4; K++) {
632 hep.phep[L - i][K - i] = RR[K - i];
637 void PHOcorrectDARK(
int IDaction)
643 for (L = 1; L <= hep.nhep; L++) {
644 if (hep.idhep[L - i] == darkr.IDspecial) {
646 hep.jdahep[L - i][1 - i] = L - i + 1 + 1;
647 hep.jdahep[L - i][2 - i] = L - i + 2 + 1;
648 hep.jmohep[L - i + 1][1 - i] = L - i + 1;
649 hep.jmohep[L - i + 2][1 - i] = L - i + 1;
651 hep.jmohep[L - i - 2][2 - i] = 0;
652 hep.jmohep[L - i - 1][2 - i] = 0;
653 hep.jmohep[L - i][2 - i] = 0;
655 hep.jmohep[L - i + 1][2 - i] = 0;
656 hep.jmohep[L - i + 2][2 - i] = 0;
658 hep.jdahep[ hep.jmohep[L - i][1 - i] - i ][2 - i] = hep.jdahep[ hep.jmohep[L - i][1 - i] - i ][2 - i] - 2;
718 void PHOTOS_MAKE_C(
int IPARR)
721 int IPPAR, I, J, NLAST, MOTHER;
734 if ((hep.jdahep[IPPAR - i][1 - i] == 0) || (hep.jmohep[hep.jdahep[IPPAR - i][1 - i] - i][1 - i] != IPPAR))
return;
752 if (hep.nhep > NLAST) {
753 for (I = NLAST + 1; I <= hep.nhep; I++) {
756 MOTHER = hep.jmohep[I - i][1 - i];
757 hep.jdahep[MOTHER - i][2 - i] = I;
758 for (J = 1; J <= 4; J++) {
759 hep.vhep[I - i][J - i] = hep.vhep[I - 1 - i][J - i];
798 void PHCORK(
int MODCOR)
801 double M, P2, PX, PY, PZ, E, EN, XMS;
803 FILE* PHLUN = stdout;
806 static int MODOP = 0;
807 static int IPRINT = 0;
808 static double MCUT = 0.4;
815 fprintf(PHLUN,
"Message from PHCORK(MODCOR):: initialization\n");
816 if (MODOP == 1) fprintf(PHLUN,
"MODOP=1 -- no corrections on event: DEFAULT\n");
817 else if (MODOP == 2) fprintf(PHLUN,
"MODOP=2 -- corrects Energy from mass\n");
818 else if (MODOP == 3) fprintf(PHLUN,
"MODOP=3 -- corrects mass from Energy\n");
819 else if (MODOP == 4) {
820 fprintf(PHLUN,
"MODOP=4 -- corrects Energy from mass to Mcut\n");
821 fprintf(PHLUN,
" and mass from energy above Mcut\n");
822 fprintf(PHLUN,
" Mcut=%6.3f GeV", MCUT);
823 }
else if (MODOP == 5) fprintf(PHLUN,
"MODOP=5 -- corrects Energy from mass+flow\n");
826 fprintf(PHLUN,
"PHCORK wrong MODCOR=%4i\n", MODCOR);
832 if (MODOP == 0 && MODCOR == 0) {
833 fprintf(PHLUN,
"PHCORK lack of initialization\n");
851 }
else if (MODOP == 2) {
856 for (I = 3; I <= pho.nhep; I++) {
858 PX = PX + pho.phep[I - i][1 - i];
859 PY = PY + pho.phep[I - i][2 - i];
860 PZ = PZ + pho.phep[I - i][3 - i];
862 P2 = pho.phep[I - i][1 - i] * pho.phep[I - i][1 - i] + pho.phep[I - i][2 - i] * pho.phep[I - i][2 - i] + pho.phep[I - i][3 - i] *
863 pho.phep[I - i][3 - i];
865 EN = sqrt(pho.phep[I - i][5 - i] * pho.phep[I - i][5 - i] + P2);
867 if (IPRINT == 1)fprintf(PHLUN,
"CORRECTING ENERGY OF %6i: %14.9f => %14.9f\n", I, pho.phep[I - i][4 - i], EN);
869 pho.phep[I - i][4 - i] = EN;
870 E = E + pho.phep[I - i][4 - i];
875 else if (MODOP == 5) {
880 for (I = 3; I <= pho.nhep; I++) {
881 PX = PX + pho.phep[I - i][1 - i];
882 PY = PY + pho.phep[I - i][2 - i];
883 PZ = PZ + pho.phep[I - i][3 - i];
885 P2 = pho.phep[I - i][1 - i] * pho.phep[I - i][1 - i] + pho.phep[I - i][2 - i] * pho.phep[I - i][2 - i] + pho.phep[I - i][3 - i] *
886 pho.phep[I - i][3 - i];
888 EN = sqrt(pho.phep[I - i][5 - i] * pho.phep[I - i][5 - i] + P2);
890 if (IPRINT == 1)fprintf(PHLUN,
"CORRECTING ENERGY OF %6i: %14.9f => %14.9f\n", I, pho.phep[I - i][4 - i], EN);
892 pho.phep[I - i][4 - i] = EN;
893 E = E + pho.phep[I - i][4 - i];
896 for (K = 1; K <= 4; K++) {
897 pho.phep[1 - i][K - i] = 0.0;
898 for (I = 3; I <= pho.nhep; I++) {
899 pho.phep[1 - i][K - i] = pho.phep[1 - i][K - i] + pho.phep[I - i][K - i];
902 XMS = sqrt(pho.phep[1 - i][4 - i] * pho.phep[1 - i][4 - i] - pho.phep[1 - i][3 - i] * pho.phep[1 - i][3 - i] - pho.phep[1 - i][2 -
903 i] * pho.phep[1 - i][2 - i] - pho.phep[1 - i][1 - i] * pho.phep[1 - i][1 - i]);
904 pho.phep[1 - i][5 - i] = XMS;
905 }
else if (MODOP == 3) {
911 for (I = 3; I <= pho.nhep; I++) {
913 PX = PX + pho.phep[I - i][1 - i];
914 PY = PY + pho.phep[I - i][2 - i];
915 PZ = PZ + pho.phep[I - i][3 - i];
916 E = E + pho.phep[I - i][4 - i];
918 P2 = pho.phep[I - i][1 - i] * pho.phep[I - i][1 - i] + pho.phep[I - i][2 - i] * pho.phep[I - i][2 - i] + pho.phep[I - i][3 - i] *
919 pho.phep[I - i][3 - i];
921 M = sqrt(fabs(pho.phep[I - i][4 - i] * pho.phep[I - i][4 - i] - P2));
923 if (IPRINT == 1) fprintf(PHLUN,
"CORRECTING MASS OF %6i: %14.9f => %14.9f\n", I, pho.phep[I - i][5 - i], M);
925 pho.phep[I - i][5 - i] = M;
929 }
else if (MODOP == 4) {
935 for (I = 3; I <= pho.nhep; I++) {
937 PX = PX + pho.phep[I - i][1 - i];
938 PY = PY + pho.phep[I - i][2 - i];
939 PZ = PZ + pho.phep[I - i][3 - i];
940 P2 = pho.phep[I - i][1 - i] * pho.phep[I - i][1 - i] + pho.phep[I - i][2 - i] * pho.phep[I - i][2 - i] + pho.phep[I - i][3 - i] *
941 pho.phep[I - i][3 - i];
942 M = sqrt(fabs(pho.phep[I - i][4 - i] * pho.phep[I - i][4 - i] - P2));
946 if (IPRINT == 1) fprintf(PHLUN,
"CORRECTING MASS OF %6i: %14.9f => %14.9f\n", I, pho.phep[I - i][5 - i], M);
947 pho.phep[I - i][5 - i] = M;
948 E = E + pho.phep[I - i][4 - i];
951 EN = sqrt(pho.phep[I - i][5 - i] * pho.phep[I - i][5 - i] + P2);
952 if (IPRINT == 1) fprintf(PHLUN,
"CORRECTING ENERGY OF %6i: %14.9f =>% 14.9f\n", I , pho.phep[I - i][4 - i], EN);
954 pho.phep[I - i][4 - i] = EN;
955 E = E + pho.phep[I - i][4 - i];
965 fprintf(PHLUN,
"CORRECTING MOTHER");
966 fprintf(PHLUN,
"PX:%14.9f =>%14.9f", pho.phep[1 - i][1 - i], PX - pho.phep[2 - i][1 - i]);
967 fprintf(PHLUN,
"PY:%14.9f =>%14.9f", pho.phep[1 - i][2 - i], PY - pho.phep[2 - i][2 - i]);
968 fprintf(PHLUN,
"PZ:%14.9f =>%14.9f", pho.phep[1 - i][3 - i], PZ - pho.phep[2 - i][3 - i]);
969 fprintf(PHLUN,
" E:%14.9f =>%14.9f", pho.phep[1 - i][4 - i], E - pho.phep[2 - i][4 - i]);
972 pho.phep[1 - i][1 - i] = PX - pho.phep[2 - i][1 - i];
973 pho.phep[1 - i][2 - i] = PY - pho.phep[2 - i][2 - i];
974 pho.phep[1 - i][3 - i] = PZ - pho.phep[2 - i][3 - i];
975 pho.phep[1 - i][4 - i] = E - pho.phep[2 - i][4 - i];
978 P2 = pho.phep[1 - i][1 - i] * pho.phep[1 - i][1 - i] + pho.phep[1 - i][2 - i] * pho.phep[1 - i][2 - i] + pho.phep[1 - i][3 - i] *
979 pho.phep[1 - i][3 - i];
980 if (pho.phep[1 - i][4 - i]*pho.phep[1 - i][4 - i] > P2) {
981 M = sqrt(pho.phep[1 - i][4 - i] * pho.phep[1 - i][4 - i] - P2);
982 if (IPRINT == 1)fprintf(PHLUN,
" M: %14.9f => %14.9f\n", pho.phep[1 - i][5 - i], M);
983 pho.phep[1 - i][5 - i] = M;
1018 void PHODO(
int IP,
int NCHARB,
int NEUDAU)
1021 double QNEW, QOLD, EPHOTO, PMAVIR;
1023 double CCOSTH, SSINTH, PVEC[4], PARNE;
1024 double TH3, FI3, TH4, FI4, FI5, ANGLE;
1025 int I, J, FIRST, LAST;
1026 double& COSTHG = phophs.costhg;
1027 double& SINTHG = phophs.sinthg;
1028 double& XPHOTO = phophs.xphoto;
1029 double* PNEUTR = phomom.pneutr;
1030 double& MNESQR = phomom.mnesqr;
1033 EPHOTO = XPHOTO * pho.phep[IP - i][5 - i] / 2.0;
1034 PMAVIR = sqrt(pho.phep[IP - i][5 - i] * (pho.phep[IP - i][5 - i] - 2.0 * EPHOTO));
1037 phorest.fi1 = PHOAN1(PNEUTR[1 - i], PNEUTR[2 - i]);
1041 phorest.th1 = PHOAN2(PNEUTR[3 - i], sqrt(PNEUTR[1 - i] * PNEUTR[1 - i] + PNEUTR[2 - i] * PNEUTR[2 - i]));
1042 PHORO3(-phorest.fi1, PNEUTR);
1043 PHORO2(-phorest.th1, PNEUTR);
1051 QNEW = PHOTRI(PMAVIR, PNEUTR[5 - i], pho.phep[NCHARB - i][5 - i]);
1052 QOLD = PNEUTR[3 - i];
1053 GNEUT = (QNEW * QNEW + QOLD * QOLD + MNESQR) / (QNEW * QOLD + sqrt((QNEW * QNEW + MNESQR) * (QOLD * QOLD + MNESQR)));
1056 PHOERR(4,
"PHOKIN", DATA);
1058 PARNE = GNEUT - sqrt(max(GNEUT * GNEUT - 1.0, 0.0));
1061 PHOBO3(PARNE, PNEUTR);
1064 pho.nhep = pho.nhep + 1;
1065 pho.isthep[pho.nhep - i] = 1;
1066 pho.idhep[pho.nhep - i] = 22;
1068 pho.jmohep[pho.nhep - i][1 - i] = IP;
1069 pho.jmohep[pho.nhep - i][2 - i] = 0;
1070 pho.jdahep[pho.nhep - i][1 - i] = 0;
1071 pho.jdahep[pho.nhep - i][2 - i] = 0;
1072 pho.phep[pho.nhep - i][4 - i] = EPHOTO * pho.phep[IP - i][5 - i] / PMAVIR;
1077 TH3 = PHOAN2(CCOSTH, SSINTH);
1079 pho.phep[pho.nhep - i][1 - i] = pho.phep[pho.nhep - i][4 - i] * SINTHG * cos(FI3);
1080 pho.phep[pho.nhep - i][2 - i] = pho.phep[pho.nhep - i][4 - i] * SINTHG * sin(FI3);
1083 pho.phep[pho.nhep - i][3 - i] = -pho.phep[pho.nhep - i][4 - i] * COSTHG;
1084 pho.phep[pho.nhep - i][5 - i] = 0.0;
1087 PHORO3(-FI3, PNEUTR);
1088 PHORO3(-FI3, pho.phep[pho.nhep - i]);
1089 PHORO2(-TH3, PNEUTR);
1090 PHORO2(-TH3, pho.phep[pho.nhep - i]);
1091 ANGLE = EPHOTO / pho.phep[pho.nhep - i][4 - i];
1094 PHOBO3(ANGLE, PNEUTR);
1095 PHOBO3(ANGLE, pho.phep[pho.nhep - i]);
1098 FI4 = PHOAN1(PNEUTR[1 - i], PNEUTR[2 - i]);
1099 TH4 = PHOAN2(PNEUTR[3 - i], sqrt(PNEUTR[1 - i] * PNEUTR[1 - i] + PNEUTR[2 - i] * PNEUTR[2 - i]));
1100 PHORO3(FI4, PNEUTR);
1101 PHORO3(FI4, pho.phep[pho.nhep - i]);
1103 for (I = 2; I <= 4; I++) PVEC[I - i] = 0.0;
1108 PHOBO3(ANGLE, PVEC);
1110 PHORO2(-TH4, PNEUTR);
1111 PHORO2(-TH4, pho.phep[pho.nhep - i]);
1113 FI5 = PHOAN1(PVEC[1 - i], PVEC[2 - i]);
1116 PHORO3(-FI5, PNEUTR);
1117 PHORO3(-FI5, pho.phep[pho.nhep - i]);
1118 PHORO2(phorest.th1, PNEUTR);
1119 PHORO2(phorest.th1, pho.phep[pho.nhep - i]);
1120 PHORO3(phorest.fi1, PNEUTR);
1121 PHORO3(phorest.fi1, pho.phep[pho.nhep - i]);
1124 if ((pho.jdahep[IP - i][2 - i] - pho.jdahep[IP - i][1 - i]) > 1) {
1128 LAST = pho.jdahep[IP - i][2 - i];
1129 for (I = FIRST; I <= LAST; I++) {
1130 if (I != NCHARB && (pho.jmohep[I - i][1 - i] == IP)) {
1133 PHORO3(-phorest.fi1, pho.phep[I - i]);
1134 PHORO2(-phorest.th1, pho.phep[I - i]);
1137 PHOBO3(PARNE, pho.phep[I - i]);
1140 PHORO3(-FI3, pho.phep[I - i]);
1141 PHORO2(-TH3, pho.phep[I - i]);
1144 PHOBO3(ANGLE, pho.phep[I - i]);
1147 PHORO3(FI4, pho.phep[I - i]);
1148 PHORO2(-TH4, pho.phep[I - i]);
1151 PHORO3(-FI5, pho.phep[I - i]);
1152 PHORO2(phorest.th1, pho.phep[I - i]);
1153 PHORO3(phorest.fi1, pho.phep[I - i]);
1159 for (J = 1; J <= 4; J++) pho.phep[NEUDAU - i][J - i] = PNEUTR[J - i];
1163 for (J = 1; J <= 3; J++) pho.phep[NCHARB - i][J - i] = -(pho.phep[pho.nhep - i][J - i] + PNEUTR[J - i]);
1164 pho.phep[NCHARB - i][4 - i] = pho.phep[IP - i][5 - i] - (pho.phep[pho.nhep - i][4 - i] + PNEUTR[4 - i]);
1192 void PHOBW(
double* WT)
1196 double EMU, MCHREN, BETA, COSTHG, MPASQR, XPH;
1198 if (abs(pho.idhep[1 - i]) == 24 &&
1199 abs(pho.idhep[pho.jdahep[1 - i][1 - i] - i]) >= 11 &&
1200 abs(pho.idhep[pho.jdahep[1 - i][1 - i] - i]) <= 16 &&
1201 abs(pho.idhep[pho.jdahep[1 - i][1 - i] + 1 - i]) >= 11 &&
1202 abs(pho.idhep[pho.jdahep[1 - i][1 - i] + 1 - i]) <= 16) {
1205 abs(pho.idhep[pho.jdahep[1 - i][1 - i] - i]) == 11 ||
1206 abs(pho.idhep[pho.jdahep[1 - i][1 - i] - i]) == 13 ||
1207 abs(pho.idhep[pho.jdahep[1 - i][1 - i] - i]) == 15) {
1208 I = pho.jdahep[1 - i][1 - i];
1210 I = pho.jdahep[1 - i][1 - i] + 1;
1213 EMU = pho.phep[I - i][4 - i];
1214 MCHREN = fabs(pow(pho.phep[I - i][4 - i], 2) - pow(pho.phep[I - i][3 - i], 2)
1215 - pow(pho.phep[I - i][2 - i], 2) - pow(pho.phep[I - i][1 - i], 2));
1216 BETA = sqrt(1.0 - MCHREN / pho.phep[I - i][4 - i] / pho.phep[I - i][4 - i]);
1217 COSTHG = (pho.phep[I - i][3 - i] * pho.phep[pho.nhep - i][3 - i] + pho.phep[I - i][2 - i] * pho.phep[pho.nhep - i][2 - i]
1218 + pho.phep[I - i][1 - i] * pho.phep[pho.nhep - i][1 - i]) /
1219 sqrt(pho.phep[I - i][3 - i] * pho.phep[I - i][3 - i] + pho.phep[I - i][2 - i] * pho.phep[I - i][2 - i] + pho.phep[I - i][1 - i] *
1220 pho.phep[I - i][1 - i]) /
1221 sqrt(pho.phep[pho.nhep - i][3 - i] * pho.phep[pho.nhep - i][3 - i] + pho.phep[pho.nhep - i][2 - i] * pho.phep[pho.nhep - i][2 - i] +
1222 pho.phep[pho.nhep - i][1 - i] * pho.phep[pho.nhep - i][1 - i]);
1223 MPASQR = pho.phep[1 - i][4 - i] * pho.phep[1 - i][4 - i];
1224 XPH = pho.phep[pho.nhep - i][4 - i];
1225 *WT = (*WT) * (1 - 8 * EMU * XPH * (1 - COSTHG * BETA) *
1226 (MCHREN + 2 * XPH * sqrt(MPASQR)) /
1227 (MPASQR * MPASQR) / (1 - MCHREN / MPASQR) / (4 - MCHREN / MPASQR));
1266 double PHOFAC(
int MODE)
1268 static double FF = 0.0, PRX = 0.0;
1270 if (phokey.iexp)
return 1.0;
1276 }
else if (MODE == 0) {
1277 if (phopro.irep == 0) PRX = 1.0;
1278 PRX = PRX / (1.0 - phopro.probh);
1321 double PHOCORN(
double MPASQR,
double MCHREN,
int ME)
1323 double wt1, wt2, wt3;
1324 double beta0, beta1, XX, YY, DATA;
1326 double& COSTHG = phophs.costhg;
1327 double& XPHMAX = phophs.xphmax;
1328 double& XPHOTO = phophs.xphoto;
1329 double& MCHSQR = phomom.mchsqr;
1330 double& MNESQR = phomom.mnesqr;
1336 XX = 4.0 * MCHSQR / MPASQR * (1.0 - XPHOTO) / pow(1.0 - XPHOTO + (MCHSQR - MNESQR) / MPASQR, 2);
1338 S1 = MPASQR * (1.0 - XPHOTO);
1339 beta0 = 2 * PHOTRI(1.0, sqrt(MCHSQR / MPASQR), sqrt(MNESQR / MPASQR));
1340 beta1 = 2 * PHOTRI(1.0, sqrt(MCHSQR / S1), sqrt(MNESQR / S1));
1341 wt1 = (1.0 - COSTHG * sqrt(1.0 - MCHREN))
1342 / ((1.0 + pow(1.0 - XPHOTO / XPHMAX, 2)) / 2.0) * XPHOTO;
1344 wt2 = beta1 / beta0 * XPHOTO;
1345 wt3 = beta1 * beta1 * (1.0 - COSTHG * COSTHG) * (1.0 - XPHOTO) / XPHOTO / XPHOTO
1346 / pow(1.0 + MCHSQR / S1 - MNESQR / S1 - beta1 * COSTHG, 2) / 2.0;
1347 }
else if (ME == 2) {
1348 S1 = MPASQR * (1.0 - XPHOTO);
1349 beta0 = 2 * PHOTRI(1.0, sqrt(MCHSQR / MPASQR), sqrt(MNESQR / MPASQR));
1350 beta1 = 2 * PHOTRI(1.0, sqrt(MCHSQR / S1), sqrt(MNESQR / S1));
1351 wt1 = (1.0 - COSTHG * sqrt(1.0 - MCHREN))
1352 / ((1.0 + pow(1.0 - XPHOTO / XPHMAX, 2)) / 2.0) * XPHOTO;
1354 wt2 = beta1 / beta0 * XPHOTO;
1356 wt3 = beta1 * beta1 * (1.0 - COSTHG * COSTHG) * (1.0 - XPHOTO) / XPHOTO / XPHOTO
1357 / pow(1.0 + MCHSQR / S1 - MNESQR / S1 - beta1 * COSTHG, 2) / 2.0 ;
1358 wt3 = wt3 * (1 - XPHOTO / XPHMAX + 0.5 * pow(XPHOTO / XPHMAX, 2)) / (1 - XPHOTO / XPHMAX);
1360 phocorwt.phocorwt3 = wt3;
1361 phocorwt.phocorwt2 = wt2;
1362 phocorwt.phocorwt1 = wt1;
1369 }
else if ((ME == 3) || (ME == 4) || (ME == 5)) {
1371 phwt.beta = sqrt(1.0 - XX);
1372 wt1 = (1.0 - COSTHG * sqrt(1.0 - MCHREN)) / (1.0 - COSTHG * phwt.beta);
1373 wt2 = (1.0 - XX / YY / (1.0 - phwt.beta * phwt.beta * COSTHG * COSTHG)) * (1.0 + COSTHG * phwt.beta) / 2.0;
1374 wt3 = (1.0 + pow(1.0 - XPHOTO / XPHMAX, 2) - pow(XPHOTO / XPHMAX, 3)) /
1375 (1.0 + pow(1.0 - XPHOTO / XPHMAX, 2));
1377 DATA = (ME - 1.0) / 2.0;
1378 PHOERR(6,
"PHOCORN", DATA);
1380 phwt.beta = sqrt(1.0 - XX);
1381 wt1 = (1.0 - COSTHG * sqrt(1.0 - MCHREN)) / (1.0 - COSTHG * phwt.beta);
1382 wt2 = (1.0 - XX / YY / (1.0 - phwt.beta * phwt.beta * COSTHG * COSTHG)) * (1.0 + COSTHG * phwt.beta) / 2.0;
1385 wt2 = wt2 * PHOFAC(1);
1386 PHOCOR = wt1 * wt2 * wt3;
1388 phopro.corwt = PHOCOR;
1391 PHOERR(3,
"PHOCOR", DATA);
1420 double PHOCOR(
double MPASQR,
double MCHREN,
int ME)
1422 double XX, YY, DATA;
1425 double& COSTHG = phophs.costhg;
1426 double& XPHMAX = phophs.xphmax;
1427 double& XPHOTO = phophs.xphoto;
1428 double& MCHSQR = phomom.mchsqr;
1429 double& MNESQR = phomom.mnesqr;
1434 XX = 4.0 * MCHSQR / MPASQR * (1.0 - XPHOTO) / pow((1.0 - XPHOTO + (MCHSQR - MNESQR) / MPASQR), 2);
1437 phwt.wt3 = (1.0 - XPHOTO / XPHMAX) / ((1.0 + pow((1.0 - XPHOTO / XPHMAX), 2)) / 2.0);
1438 }
else if (ME == 2) {
1439 YY = 0.5 * (1.0 - XPHOTO / XPHMAX + 1.0 / (1.0 - XPHOTO / XPHMAX));
1441 }
else if ((ME == 3) || (ME == 4) || (ME == 5)) {
1443 phwt.wt3 = (1.0 + pow(1.0 - XPHOTO / XPHMAX, 2) - pow(XPHOTO / XPHMAX, 3)) /
1444 (1.0 + pow(1.0 - XPHOTO / XPHMAX, 2));
1446 DATA = (ME - 1.0) / 2.0;
1447 PHOERR(6,
"PHOCOR", DATA);
1453 phwt.beta = sqrt(1.0 - XX);
1454 phwt.wt1 = (1.0 - COSTHG * sqrt(1.0 - MCHREN)) / (1.0 - COSTHG * phwt.beta);
1455 phwt.wt2 = (1.0 - XX / YY / (1.0 - phwt.beta * phwt.beta * COSTHG * COSTHG)) * (1.0 + COSTHG * phwt.beta) / 2.0;
1459 if (ME == 1 && IscaNLO == 1) {
1462 PHOC = PHOCORN(MPASQR, MCHREN, ME);
1467 phwt.wt2 = phwt.wt2 * PHOFAC(1);
1469 PHOC = phwt.wt1 * phwt.wt2 * phwt.wt3;
1471 phopro.corwt = PHOC;
1474 PHOERR(3,
"PHOCOR", DATA);
1496 void PHOTWO(
int MODE)
1510 IFRAD = (pho.idhep[1 - i] == 21) && (pho.idhep[2 - i] == 21);
1511 IFRAD = IFRAD || (pho.idhep[1 - i] == -pho.idhep[2 - i] && abs(pho.idhep[1 - i]) <= 6);
1512 IFRAD = IFRAD && (abs(pho.idhep[3 - i]) == 6) && (abs(pho.idhep[4 - i]) == 6);
1513 MPASQR = pow(pho.phep[1 - i][4 - i] + pho.phep[2 - i][4 - i], 2) - pow(pho.phep[1 - i][3 - i] + pho.phep[2 - i][3 - i], 2)
1514 - pow(pho.phep[1 - i][2 - i] + pho.phep[2 - i][2 - i], 2) - pow(pho.phep[1 - i][1 - i] + pho.phep[2 - i][1 - i], 2);
1515 IFRAD = IFRAD && (MPASQR > 0.0);
1518 for (I = 1; I <= 4; I++) {
1519 pho.phep[1 - i][I - i] = pho.phep[1 - i][I - i] + pho.phep[2 - i][I - i];
1521 pho.phep[1 - i][5 - i] = sqrt(MPASQR);
1523 for (I = 1; I <= 5; I++) {
1524 pho.phep[2 - i][I - i] = 0.0;
1625 void PHOIN(
int IP,
bool* BOOST,
int* NHEP0)
1627 int FIRST, LAST, I, LL, IP2, J, NA;
1630 int& nhep0 = *NHEP0;
1632 double& GAM = phocms.gam;
1633 double* BET = phocms.bet;
1637 FIRST = hep.jdahep[IP - i][1 - i];
1638 LAST = hep.jdahep[IP - i][2 - i];
1639 pho.nhep = 3 + LAST - FIRST + hep.nhep - nhep0;
1640 pho.nevhep = pho.nhep;
1643 pho.idhep[1 - i] = hep.idhep[IP - i];
1644 pho.jdahep[1 - i][1 - i] = 3;
1645 pho.jdahep[1 - i][2 - i] = 3 + LAST - FIRST;
1646 for (I = 1; I <= 5; I++) pho.phep[1 - i][I - i] = hep.phep[IP - i][I - i];
1649 IP2 = hep.jmohep[hep.jdahep[IP - i][1 - i] - i][2 - i];
1650 if ((IP2 != 0) && (IP2 != IP)) {
1651 pho.idhep[2 - i] = hep.idhep[IP2 - i];
1652 pho.jdahep[2 - i][1 - i] = 3;
1653 pho.jdahep[2 - i][2 - i] = 3 + LAST - FIRST;
1654 for (I = 1; I <= 5; I++)
1655 pho.phep[2 - i][I - i] = hep.phep[IP2 - i][I - i];
1657 pho.idhep[2 - i] = 0;
1658 for (I = 1; I <= 5; I++) pho.phep[2 - i][I - i] = 0.0;
1662 for (LL = 0; LL <= LAST - FIRST; LL++) {
1663 pho.idhep[3 + LL - i] = hep.idhep[FIRST + LL - i];
1664 pho.jmohep[3 + LL - i][1 - i] = hep.jmohep[FIRST + LL - i][1 - i];
1665 if (hep.jmohep[FIRST + LL - i][1 - i] == IP) pho.jmohep[3 + LL - i][1 - i] = 1;
1666 for (I = 1; I <= 5; I++) pho.phep[3 + LL - i][I - i] = hep.phep[FIRST + LL - i][I - i];
1669 if (hep.nhep > nhep0) {
1671 NA = 3 + LAST - FIRST;
1672 for (LL = 1; LL <= hep.nhep - nhep0; LL++) {
1673 pho.idhep[NA + LL - i] = hep.idhep[nhep0 + LL - i];
1674 pho.jmohep[NA + LL - i][1 - i] = hep.jmohep[nhep0 + LL - i][1 - i];
1675 if (hep.jmohep[nhep0 + LL - i][1 - i] == IP) pho.jmohep[NA + LL - i][1 - i] = 1;
1676 for (I = 1; I <= 5; I++) pho.phep[NA + LL - i][I - i] = hep.phep[nhep0 + LL - i][I - i];
1680 pho.jdahep[1 - i][2 - i] = 3 + LAST - FIRST + hep.nhep - nhep0;
1682 if (pho.idhep[pho.nhep - i] == 22) PHLUPA(100001);
1685 if (pho.idhep[pho.nhep - i] == 22) PHLUPA(100002);
1688 if (phokey.iftop) PHOTWO(0);
1703 if ((fabs(pho.phep[1 - i][1 - i] + fabs(pho.phep[1 - i][2 - i]) + fabs(pho.phep[1 - i][3 - i])) >
1704 pho.phep[1 - i][5 - i] * 1.E-8) && (pho.phep[1 - i][5 - i] != 0)) {
1713 for (J = 1; J <= 3; J++) BET[J - i] = -pho.phep[1 - i][J - i] / pho.phep[1 - i][5 - i];
1714 GAM = pho.phep[1 - i][4 - i] / pho.phep[1 - i][5 - i];
1715 for (I = pho.jdahep[1 - i][1 - i]; I <= pho.jdahep[1 - i][2 - i]; I++) {
1716 PB = BET[1 - i] * pho.phep[I - i][1 - i] + BET[2 - i] * pho.phep[I - i][2 - i] + BET[3 - i] * pho.phep[I - i][3 - i];
1718 J++) pho.phep[I - i][J - i] = pho.phep[I - i][J - i] + BET[J - i] * (pho.phep[I - i][4 - i] + PB / (GAM + 1.0));
1719 pho.phep[I - i][4 - i] = GAM * pho.phep[I - i][4 - i] + PB;
1723 PB = BET[1 - i] * pho.phep[I - i][1 - i] + BET[2 - i] * pho.phep[I - i][2 - i] + BET[3 - i] * pho.phep[I - i][3 - i];
1724 for (J = 1; J <= 3; J++) pho.phep[I - i][J - i] = pho.phep[I - i][J - i] + BET[J - i] * (pho.phep[I - i][4 - i] + PB / (GAM + 1.0));
1726 pho.phep[I - i][4 - i] = GAM * pho.phep[I - i][4 - i] + PB;
1731 if (phokey.iftop) PHOTWO(1);
1733 if (pho.idhep[pho.nhep - i] == 22) PHLUPA(10000);
1757 void PHOOUT(
int IP,
bool BOOST,
int nhep0)
1759 int LL, FIRST, LAST, I;
1762 double& GAM = phocms.gam;
1763 double* BET = phocms.bet;
1766 if (pho.nhep == pho.nevhep)
return;
1773 double phocms_check = fabs(1 - GAM) + fabs(BET[1 - i]) + fabs(BET[2 - i]) + fabs(BET[3 - i]);
1774 if (phocms_check > 0.001) {
1775 Log::Error() <<
"Msg. from PHOOUT: possible problems with boosting due to the rounding errors." << endl
1776 <<
"Boost parameters: (" << GAM <<
","
1777 << BET[1 - i] <<
"," << BET[2 - i] <<
"," << BET[3 - i] <<
")" << endl
1778 <<
"should be equal to: (1,0,0,0) up to at least several digits." << endl;
1780 Log::Warning() <<
"Msg. from PHOOUT: possible problems with boosting due to the rounding errors." << endl
1781 <<
"Boost parameters: (" << GAM <<
","
1782 << BET[1 - i] <<
"," << BET[2 - i] <<
"," << BET[3 - i] <<
")" << endl
1783 <<
"should be equal to: (1,0,0,0) up to at least several digits." << endl;
1786 for (J = pho.jdahep[1 - i][1 - i]; J <= pho.jdahep[1 - i][2 - i]; J++) {
1787 PB = -BET[1 - i] * pho.phep[J - i][1 - i] - BET[2 - i] * pho.phep[J - i][2 - i] - BET[3 - i] * pho.phep[J - i][3 - i];
1788 for (K = 1; K <= 3; K++) pho.phep[J - i][K - i] = pho.phep[J - i][K - i] - BET[K - i] * (pho.phep[J - i][4 - i] + PB / (GAM + 1.0));
1789 pho.phep[J - i][4 - i] = GAM * pho.phep[J - i][4 - i] + PB;
1793 for (NN = pho.nevhep + 1; NN <= pho.nhep; NN++) {
1794 PB = -BET[1 - i] * pho.phep[NN - i][1 - i] - BET[2 - i] * pho.phep[NN - i][2 - i] - BET[3 - i] * pho.phep[NN - i][3 - i];
1796 K++) pho.phep[NN - i][K - i] = pho.phep[NN - i][K - i] - BET[K - i] * (pho.phep[NN - i][4 - i] + PB / (GAM + 1.0));
1797 pho.phep[NN - i][4 - i] = GAM * pho.phep[NN][4 - i] + PB;
1802 FIRST = hep.jdahep[IP - i][1 - i];
1803 LAST = hep.jdahep[IP - i][2 - i];
1805 for (LL = 0; LL <= LAST - FIRST; LL++) {
1806 hep.idhep[FIRST + LL - i] = pho.idhep[3 + LL - i];
1807 for (I = 1; I <= 5; I++) hep.phep[FIRST + LL - i][I - i] = pho.phep[3 + LL - i][I - i];
1811 NA = 3 + LAST - FIRST;
1812 for (LL = 1; LL <= pho.nhep - NA; LL++) {
1813 hep.idhep[nhep0 + LL - i] = pho.idhep[NA + LL - i];
1814 hep.isthep[nhep0 + LL - i] = pho.isthep[NA + LL - i];
1815 hep.jmohep[nhep0 + LL - i][1 - i] = IP;
1816 hep.jmohep[nhep0 + LL - i][2 - i] = hep.jmohep[hep.jdahep[IP - i][1 - i] - i][2 - i];
1817 hep.jdahep[nhep0 + LL - i][1 - i] = 0;
1818 hep.jdahep[nhep0 + LL - i][2 - i] = 0;
1819 for (I = 1; I <= 5; I++) hep.phep[nhep0 + LL - i][I - i] = pho.phep[NA + LL - i][I - i];
1821 hep.nhep = hep.nhep + pho.nhep - pho.nevhep;
1842 void PHOCHK(
int JFIRST)
1845 int IDABS, NLAST, I;
1848 static int i = 1, IPPAR = 1;
1853 for (I = IPPAR; I <= NLAST; I++) {
1854 IDABS = abs(pho.idhep[I - i]);
1856 pho.qedrad[I - i] = pho.qedrad[I - i] && F(0, IDABS) && F(0, abs(pho.idhep[1 - i]))
1857 && (pho.idhep[2 - i] == 0);
1859 if (I > 2) pho.qedrad[I - i] = pho.qedrad[I - i] && hep.qedrad[JFIRST + I - IPPAR - 2 - i];
1868 for (K = pho.jdahep[1 - i][2 - i]; K >= pho.jdahep[1 - i][1 - i]; K--) {
1869 if (pho.idhep[K - i] != 22) {
1875 IFRAD = ((pho.idhep[1 - i] == 21) && (pho.idhep[2 - i] == 21))
1876 || ((abs(pho.idhep[1 - i]) <= 6) && (pho.idhep[2 - i] == (-pho.idhep[1 - i])));
1878 && (abs(pho.idhep[3 - i]) == 6) && (pho.idhep[4 - i] == (-pho.idhep[3 - i]))
1881 for (I = IPPAR; I <= NLAST; I++) {
1882 pho.qedrad[I - i] =
true;
1883 if (I > 2) pho.qedrad[I - i] = pho.qedrad[I - i] && hep.qedrad[JFIRST + I - IPPAR - 2 - i];
1891 for (K = pho.jdahep[1 - i][2 - i]; K >= pho.jdahep[1 - i][1 - i]; K--) {
1892 if (pho.idhep[K - i] != 22) {
1897 IFRAD = ((abs(pho.idhep[1 - i]) == 6) && (pho.idhep[2 - i] == 0));
1899 && (((abs(pho.idhep[3 - i]) == 24) && (abs(pho.idhep[4 - i]) == 5))
1900 || ((abs(pho.idhep[3 - i]) == 5) && (abs(pho.idhep[4 - i]) == 24)))
1904 for (I = IPPAR; I <= NLAST; I++) {
1905 pho.qedrad[I - i] =
true;
1906 if (I > 2) pho.qedrad[I - i] = (pho.qedrad[I - i] && hep.qedrad[JFIRST + I - IPPAR - 2 - i]);
1939 void PHOENE(
double MPASQR,
double* pMCHREN,
double* pBETA,
double* pBIGLOG,
int IDENT)
1942 double PRSOFT, PRHARD;
1947 double& MCHREN = *pMCHREN;
1948 double& BETA = *pBETA;
1949 double& BIGLOG = *pBIGLOG;
1950 int& NCHAN = phoexp.nchan;
1951 double& XPHMAX = phophs.xphmax;
1952 double& XPHOTO = phophs.xphoto;
1953 double& MCHSQR = phomom.mchsqr;
1954 double& MNESQR = phomom.mnesqr;
1957 if (XPHMAX <= phocop.xphcut) {
1963 MCHREN = 4.0 * MCHSQR / MPASQR / pow(1.0 + MCHSQR / MPASQR, 2);
1964 BETA = sqrt(1.0 - MCHREN);
1970 BIGLOG = log(MPASQR / MCHSQR * (1.0 + BETA) * (1.0 + BETA) / 4.0 *
1971 pow(1.0 + MCHSQR / MPASQR, 2));
1972 PRHARD = phocop.alpha / PI * (1.0 / BETA * BIGLOG + 2 * phokey.fint)
1973 * (log(XPHMAX / phocop.xphcut) - .75 + phocop.xphcut / XPHMAX - .25 * phocop.xphcut * phocop.xphcut / XPHMAX / XPHMAX);
1974 PRHARD = PRHARD * PHOCHA(IDENT) * PHOCHA(IDENT) * phokey.fsec;
1978 BIGLOG = log(MPASQR / MCHSQR * (1.0 + BETA) * (1.0 + BETA) / 4.0 *
1979 pow(1.0 + MCHSQR / MPASQR, 2));
1980 PRHARD = phocop.alpha / PI * (1.0 / BETA * BIGLOG) *
1981 (log(XPHMAX / phocop.xphcut) - .75 + phocop.xphcut / XPHMAX - .25 * phocop.xphcut * phocop.xphcut / XPHMAX / XPHMAX);
1982 PRHARD = PRHARD * PHOCHA(IDENT) * PHOCHA(IDENT) * phokey.fsec * phokey.fint;
1990 else if (IDME == 1) {
1991 PRHARD = PRHARD / (1.0 + 0.75 * phocop.alpha / PI);
1992 }
else if (IDME == 2) {
1995 cout <<
"problem with ME_CHANNEL IDME= " << IDME << endl;
2001 if (phopro.irep == 0) phopro.probh = 0.0;
2005 if (phoexp.expini) {
2006 phoexp.pro[NCHAN - i] = PRHARD + 0.25 * (1.0 + phokey.fint);
2009 phopro.probh = PRHARD;
2012 for (K = NCHAN; K <= phoexp.NX; K++) PRSUM = PRSUM + phoexp.pro[K - i];
2013 PRHARD = PRHARD / PRSUM;
2017 PRKILL = phoexp.pro[NCHAN - i] / PRSUM - PRHARD;
2020 PRSOFT = 1.0 - PRHARD;
2022 PRHARD = PRHARD * PHOFAC(0);
2025 phopro.probh = PRHARD;
2027 PRSOFT = 1.0 - PRHARD;
2031 if (PRSOFT < -5.0E-8) {
2033 PHOERR(2,
"PHOENE", DATA);
2038 PHOERR(2,
"PHOENE", DATA);
2047 if (RRR < PRKILL) XPHOTO = -5.0;
2054 XPHOTO = XPHOTO * XPHMAX;
2060 phopro.xf = 4.0 * MCHSQR * MPASQR / pow(MPASQR + MCHSQR - MNESQR, 2);
2088 void PHOPRE(
int IPARR,
double* pWT,
int* pNEUDAU,
int* pNCHARB)
2090 int CHAPOI[pho.nmxhep];
2091 double MINMAS, MPASQR, MCHREN;
2092 double EPS, DEL1, DEL2, DATA, BIGLOG;
2094 int IP, IPPAR, I, J, ME, NCHARG, NEUPOI, NLAST;
2100 int& NEUDAU = *pNEUDAU;
2101 int& NCHARB = *pNCHARB;
2102 double& COSTHG = phophs.costhg;
2103 double& SINTHG = phophs.sinthg;
2104 double& XPHOTO = phophs.xphoto;
2105 double& XPHMAX = phophs.xphmax;
2106 double* PNEUTR = phomom.pneutr;
2107 double& MCHSQR = phomom.mchsqr;
2108 double& MNESQR = phomom.mnesqr;
2120 if (pho.jdahep[IP - i][1 - i] == 0)
return;
2129 for (I = pho.jdahep[IP - i][1 - i]; I <= pho.jdahep[IP - i][2 - i]; I++) {
2133 IDABS = abs(pho.idhep[I - i]);
2134 if (pho.qedrad[I - pho.jdahep[IP - i][1 - i] + 3 - i]) {
2135 if (PHOCHA(pho.idhep[I - i]) != 0) {
2136 NCHARG = NCHARG + 1;
2137 if (NCHARG > pho.nmxhep) {
2139 PHOERR(1,
"PHOTOS", DATA);
2141 CHAPOI[NCHARG - i] = I;
2143 MINMAS = MINMAS + pho.phep[I - i][5 - i] * pho.phep[I - i][5 - i];
2145 MASSUM = MASSUM + pho.phep[I - i][5 - i];
2151 if ((pho.phep[IP - i][5 - i] - MASSUM) / pho.phep[IP - i][5 - i] > 2.0 * phocop.xphcut) {
2157 for (J = 1; J <= 3; J++) PNEUTR[J - i] = -pho.phep[CHAPOI[NCHARG - i] - i][J - i];
2158 PNEUTR[4 - i] = pho.phep[IP - i][5 - i] - pho.phep[CHAPOI[NCHARG - i] - i][4 - i];
2161 MPASQR = pho.phep[IP - i][5 - i] * pho.phep[IP - i][5 - i];
2162 MCHSQR = pow(pho.phep[CHAPOI[NCHARG - i] - i][5 - i], 2);
2163 if ((pho.jdahep[IP - i][2 - i] - pho.jdahep[IP - i][1 - i]) == 1) {
2164 NEUPOI = pho.jdahep[IP - i][1 - i];
2165 if (NEUPOI == CHAPOI[NCHARG - i]) NEUPOI = pho.jdahep[IP - i][2 - i];
2166 MNESQR = pho.phep[NEUPOI - i][5 - i] * pho.phep[NEUPOI - i][5 - i];
2167 PNEUTR[5 - i] = pho.phep[NEUPOI - i][5 - i];
2169 MNESQR = pow(PNEUTR[4 - i], 2) - pow(PNEUTR[1 - i], 2) - pow(PNEUTR[2 - i], 2) - pow(PNEUTR[3 - i], 2);
2170 MNESQR = max(MNESQR, MINMAS - MCHSQR);
2171 PNEUTR[5 - i] = sqrt(MNESQR);
2176 XPHMAX = (MPASQR - pow(PNEUTR[5 - i] + pho.phep[CHAPOI[NCHARG - i] - i][5 - i], 2)) / MPASQR;
2180 PHOENE(MPASQR, &MCHREN, &phwt.beta, &BIGLOG, pho.idhep[CHAPOI[NCHARG - i] - i]);
2183 if (XPHOTO < -4.0) {
2187 }
else if ((XPHOTO < phocop.xphcut) || (XPHOTO > XPHMAX)) {
2191 NCHARG = NCHARG - 1;
2192 if (NCHARG > 0) phopro.irep = phopro.irep + 1;
2193 if (NCHARG > 0)
goto label30;
2198 EPS = MCHREN / (1.0 + phwt.beta);
2209 COSTHG = (1.0 - DEL1) / phwt.beta;
2210 SINTHG = sqrt(DEL1 * DEL2 - MCHREN) / phwt.beta;
2213 SINTHG = sqrt(1.0 - COSTHG * COSTHG);
2216 if (phokey.fint > 1.0) {
2218 WGT = 1.0 / (1.0 - phwt.beta * COSTHG);
2219 WGT = WGT / (WGT + phokey.fint);
2228 COSTHG = (1.0 - DEL1) / phwt.beta;
2229 SINTHG = sqrt(DEL1 * DEL2 - MCHREN) / phwt.beta;
2235 ME = (int)(2.0 * PHOSPI(pho.idhep[CHAPOI[NCHARG - i] - i]) + 1.0);
2240 for (I = pho.jdahep[IP - i][1 - i]; I <= pho.jdahep[IP - i][2 - i]; I++) {
2241 if (I != CHAPOI[NCHARG - i]) {
2249 PHOERR(5,
"PHOKIN", DATA);
2252 NCHARB = CHAPOI[NCHARG - i];
2253 NCHARB = NCHARB - pho.jdahep[IP - i][1 - i] + 3;
2254 NEUDAU = NEUDAU - pho.jdahep[IP - i][1 - i] + 3;
2263 b = PHOCORN(MPASQR, MCHREN, ME);
2265 WT = WT / (1 - XPHOTO / XPHMAX + 0.5 * pow(XPHOTO / XPHMAX, 2)) * (1 - XPHOTO / XPHMAX) / 2;
2266 }
else if (IDME == 1) {
2268 a = PHOCOR(MPASQR, MCHREN, ME);
2269 b = PHOCORN(MPASQR, MCHREN, ME);
2271 WT = WT * phwt.wt1 * phwt.wt2 * phwt.wt3 / phocorwt.phocorwt1 / phocorwt.phocorwt2 / phocorwt.phocorwt3;
2276 a = PHOCOR(MPASQR, MCHREN, ME);
2285 DATA = pho.phep[IP - i][5 - i] - MASSUM;
2286 PHOERR(10,
"PHOTOS", DATA);
2315 void PHOMAK(
int IPPAR,
int NHEP0)
2319 int IP, NCHARG, IDME;
2330 PHOIN(IP, &BOOST, &NHEP0);
2331 PHOCHK(hep.jdahep[IP - i][1 - i]);
2333 PHOPRE(1, &WT, &NEUDAU, &NCHARB);
2335 if (WT == 0.0)
return;
2338 PHODO(1, NCHARB, NEUDAU);
2352 if (phokey.interf) WT = WT * PHINT(IDUM);
2353 if (phokey.ifw) PHOBW(&WT);
2354 }
else if (IDME == 2) {
2358 }
else if (IDME == 1) {
2360 WT = WT * PhotosMEforZ::phwtnlo();
2362 cout <<
"problem with ME_CHANNEL IDME= " << IDME << endl;
2367 WT = WT / phokey.fint;
2371 if (WT > 1.0) PHOERR(3,
"WT_INT", DATA);
2374 PHOOUT(IP, BOOST, NHEP0);
2405 int& NCHAN = phoexp.nchan;
2411 IFOUR = phokey.itre;
2418 if (hep.jdahep[ID - i][1 - i] == 0)
return;
2436 int pho_size = max(NHEP0, (hep.jdahep[ID - i][2 - i] - hep.jdahep[ID - i][1 - i] + 1) + 2);
2438 for (
int I = 0; I < pho_size; ++I) {
2439 pho.qedrad[I] =
true;
2442 double elMass = 0.000511;
2443 double muMass = 0.1057;
2444 double STRENG = 0.5;
2448 switch (Photos::momentumUnit) {
2458 Log::Error() <<
"GEV or MEV unit must be set for pair emission" << endl;
2461 PHOPAR(ID, NHEP0, 11, elMass, &STRENG);
2462 PHOPAR(ID, NHEP0, 13, muMass, &STRENG);
2467 phoexp.expini =
true;
2468 for (NCHAN = 1; NCHAN <= phoexp.NX; NCHAN++)
2469 phoexp.pro[NCHAN - i] = 0.0;
2475 phoexp.expini =
false;
2478 for (K = 1; K <= phoexp.NX; K++)PRSUM = PRSUM + phoexp.pro[K - i];
2487 for (K = 1; K <= 100; K++) {
2488 if (RN < SUM)
break;
2489 ESU = ESU * PRSUM / K;
2493 if (SUM > 1.0 - phokey.expeps)
break;
2500 if (RN >= 23.0 / 24.0) {
2505 }
else if (RN >= 17.0 / 24.0) {
2508 }
else if (RN >= 9.0 / 24.0) {
2512 }
else if (phokey.itre) {
2516 if (RN >= 5.0 / 6.0) {
2520 }
else if (RN >= 2.0 / 6.0) {
2523 }
else if (phokey.isec) {
2542 PHOPAR(ID, NHEP0, 11, elMass, &STRENG);
2543 PHOPAR(ID, NHEP0, 13, muMass, &STRENG);
2575 void PHOPAR(
int IPARR,
int NHEP0,
int idlep,
double masslep,
double* pSTRENG)
2577 double PCHAR[4], PNEU[4], PELE[4], PPOZ[4], BUF[4];
2578 int IP, IPPAR, NLAST;
2583 double& STRENG = *pSTRENG;
2589 PHOIN(IPPAR, &BOOST, &NHEP0);
2590 PHOCHK(pho.jdahep[IP][0]);
2593 if (pho.jdahep[IP][0] == 0)
return;
2594 if (pho.jdahep[IP][0] == pho.jdahep[IP][1])
return;
2597 for (
int I = pho.jdahep[IP][0] - i; I <= pho.jdahep[IP][1] - i; ++I) {
2601 if (PHOCHA(pho.idhep[I]) == 0)
continue;
2603 int IDABS = abs(pho.idhep[I]);
2608 pho.qedrad[I] = pho.qedrad[I] && F(0, IDABS) && F(0, abs(pho.idhep[1 - i]))
2609 && (pho.idhep[2 - i] == 0);
2611 if (!pho.qedrad[I])
continue;
2615 for (
int J = 0; J < 3; ++J) {
2616 PCHAR[J] = pho.phep[I][J];
2617 PNEU [J] = -pho.phep[I][J];
2621 PNEU[3] = pho.phep[IP][3] - pho.phep[I][3];
2622 PCHAR[3] = pho.phep[I][3];
2624 double AMCH = pho.phep[I][4];
2648 bool sameflav = abs(idlep) == abs(pho.idhep[I]);
2650 if (pho.idhep[I] < 0) idsign = -1;
2653 trypar(&JESLI, &STRENG, AMCH, masslep, PCHAR, PNEU, PELE, PPOZ, &sameflav);
2683 for (
int J = pho.jdahep[IP][0] - i; J <= pho.jdahep[IP][1] - i; ++J) {
2684 for (
int K = 0; K < 4; ++K) {
2685 BUF[K] = pho.phep[J][K];
2687 if (J == I) partra(1, BUF);
2688 else partra(-1, BUF);
2690 for (
int K = 0; K < 4; ++K) {
2691 pho.phep[J][K] = BUF[K];
2705 if (darkr.ifspecial == 1) {
2707 pho.nhep = pho.nhep + 1;
2708 pho.isthep[pho.nhep - i] = 2;
2709 pho.idhep [pho.nhep - i] = darkr.IDspecial;
2710 pho.jmohep[pho.nhep - i][0] = IP;
2711 pho.jmohep[pho.nhep - i][1] = 0;
2712 pho.jdahep[pho.nhep - i][0] = 0;
2713 pho.jdahep[pho.nhep - i][1] = 0;
2714 pho.qedrad[pho.nhep - i] =
false;
2716 pho.phep[pho.nhep - i][4] = sqrt(-(PELE[0] + PPOZ[0]) * (PELE[0] + PPOZ[0])
2717 - (PELE[1] + PPOZ[1]) * (PELE[1] + PPOZ[1])
2718 - (PELE[2] + PPOZ[2]) * (PELE[2] + PPOZ[2])
2719 + (PELE[3] + PPOZ[3]) * (PELE[3] + PPOZ[3]));
2725 if (darkr.ifspecial == 1) {
2726 for (
int K = 1; K <= 4; ++K) {
2727 pho.phep[pho.nhep - i][K - i] = PELE[K - i] + PPOZ[K - i];
2728 pho.vhep[pho.nhep - i][K - i] = pho.vhep[IP][K - i]
2729 + (PELE[K - i] + PPOZ[K - i]) / pho.phep[pho.nhep - i][4] * life;
2734 pho.nhep = pho.nhep + 1;
2735 pho.isthep[pho.nhep - i] = 1;
2736 pho.idhep [pho.nhep - i] = idlep * idsign;
2737 pho.jmohep[pho.nhep - i][0] = IP;
2738 pho.jmohep[pho.nhep - i][1] = 0;
2739 pho.jdahep[pho.nhep - i][0] = 0;
2740 pho.jdahep[pho.nhep - i][1] = 0;
2741 pho.qedrad[pho.nhep - i] =
false;
2744 for (
int K = 1; K <= 4; ++K) {
2745 pho.phep[pho.nhep - i][K - i] = PELE[K - i];
2746 if (darkr.ifspecial == 1)
2747 pho.vhep[pho.nhep - i][K - i] = pho.vhep[pho.nhep - i - 1][K - i];
2750 pho.phep[pho.nhep - i][4] = masslep;
2753 pho.nhep = pho.nhep + 1;
2754 pho.isthep[pho.nhep - i] = 1;
2755 pho.idhep [pho.nhep - i] = -idlep * idsign;
2756 pho.jmohep[pho.nhep - i][0] = IP;
2757 pho.jmohep[pho.nhep - i][1] = 0;
2758 pho.jdahep[pho.nhep - i][0] = 0;
2759 pho.jdahep[pho.nhep - i][1] = 0;
2760 pho.qedrad[pho.nhep - i] =
false;
2762 for (
int K = 1; K <= 4; ++K) {
2763 pho.phep[pho.nhep - i][K - i] = PPOZ[K - i];
2764 if (darkr.ifspecial == 1)
2765 pho.vhep[pho.nhep - i][K - i] = pho.vhep[pho.nhep - i - 1][K - i];
2800 pho.phep[pho.nhep - i][4] = masslep;
2804 PHOOUT(IPPAR, BOOST, NHEP0);
2805 PHOIN(IPPAR, &BOOST, &NHEP0);
static int ME_channel
Number of channel to be used - flag for fortran routines.
static void PHOBWnlo(double *WT)
static bool IfPhot
Flag for generating emission of photons.
static bool meCorrectionWtForScalar
Flag for complete effects of matrix element (in scalars decays)
static double(* randomDouble)()
Pointer to random generator function.
static bool IfPair
Flag for generating emission of pairs.
Definition of the PHOEVT common block.