7 using namespace Photospp;
13 inline double xlam(
double A,
double B,
double C) {
return sqrt((A - B - C) * (A - B - C) - 4.0 * B * C);}
15 inline double max(
double a,
double b)
17 return (a > b) ? a : b;
21 double angfi(
double X,
double Y)
26 if (X == 0.0 && Y == 0.0)
return 0.0;
27 if (fabs(Y) < fabs(X)) {
28 THE = atan(fabs(Y / X));
29 if (X <= 0.0) THE = PI - THE;
31 THE = acos(X / sqrt(X * X + Y * Y));
33 if (Y < 0.0) THE = 2 * PI - THE;
37 double angxy(
double X,
double Y)
42 if (X == 0.0 && Y == 0.0)
return 0.0;
44 if (fabs(Y) < fabs(X)) {
45 THE = atan(fabs(Y / X));
46 if (X <= 0.0) THE = PI - THE;
48 THE = acos(X / sqrt(X * X + Y * Y));
53 void bostd3(
double EXE,
double PVEC[4],
double QVEC[4])
61 double RPL, RMI, QPL, QMI;
65 RVEC[1 - j] = PVEC[1 - j];
66 RVEC[2 - j] = PVEC[2 - j];
67 RVEC[3 - j] = PVEC[3 - j];
68 RVEC[4 - j] = PVEC[4 - j];
69 RPL = RVEC[4 - j] + RVEC[3 - j];
70 RMI = RVEC[4 - j] - RVEC[3 - j];
73 QVEC[1 - j] = RVEC[1 - j];
74 QVEC[2 - j] = RVEC[2 - j];
75 QVEC[3 - j] = (QPL - QMI) / 2;
76 QVEC[4 - j] = (QPL + QMI) / 2;
82 void rotod3(
double ANGLE,
double PVEC[4],
double QVEC[4])
89 CS = cos(ANGLE) * PVEC[1 - j] - sin(ANGLE) * PVEC[2 - j];
90 SN = sin(ANGLE) * PVEC[1 - j] + cos(ANGLE) * PVEC[2 - j];
94 QVEC[3 - j] = PVEC[3 - j];
95 QVEC[4 - j] = PVEC[4 - j];
100 void rotod2(
double PHI,
double PVEC[4],
double QVEC[4])
110 RVEC[1 - j] = PVEC[1 - j];
111 RVEC[2 - j] = PVEC[2 - j];
112 RVEC[3 - j] = PVEC[3 - j];
113 RVEC[4 - j] = PVEC[4 - j];
115 QVEC[1 - j] = CS * RVEC[1 - j] + SN * RVEC[3 - j];
116 QVEC[2 - j] = RVEC[2 - j];
117 QVEC[3 - j] = -SN * RVEC[1 - j] + CS * RVEC[3 - j];
118 QVEC[4 - j] = RVEC[4 - j];
123 void lortra(
int KEY,
double PRM,
double PNEUTR[4],
double PNU[4],
double PAA[4],
double PP[4],
double PE[4])
135 bostd3(PRM, PNEUTR, PNEUTR);
136 bostd3(PRM, PNU , PNU);
137 bostd3(PRM, PAA , PAA);
138 bostd3(PRM, PE , PE);
139 bostd3(PRM, PP , PP);
140 }
else if (KEY == 2) {
141 rotod2(PRM, PNEUTR, PNEUTR);
142 rotod2(PRM, PNU , PNU);
143 rotod2(PRM, PAA , PAA);
144 rotod2(PRM, PE , PE);
145 rotod2(PRM, PP , PP);
146 }
else if (KEY == 3) {
147 rotod3(PRM, PNEUTR, PNEUTR);
148 rotod3(PRM, PNU , PNU);
149 rotod3(PRM, PAA , PAA);
150 rotod3(PRM, PE , PE);
151 rotod3(PRM, PP , PP);
153 printf(
" STOP IN LOTRA. WRONG KEYTRA");
158 double amast(
double VEC[4])
161 double ama = VEC[4 - i] * VEC[4 - i] - VEC[1 - i] * VEC[1 - i] - VEC[2 - i] * VEC[2 - i] - VEC[3 - i] * VEC[3 - i];
162 ama = sqrt(fabs(ama));
166 void spaj(
int KUDA,
double P2[4],
double Q2[4],
double PP[4],
double PE[4])
174 if (KLUCZ == 0)
return;
176 printf(
" %10i =====================SPAJ==================== \n", KUDA);
177 printf(
" P2 %18.13f %18.13f %18.13f %18.13f \n", P2[0], P2[1], P2[2], P2[3]);
178 printf(
" Q2 %18.13f %18.13f %18.13f %18.13f \n", Q2[0], Q2[1], Q2[2], Q2[3]);
179 printf(
" PE %18.13f %18.13f %18.13f %18.13f \n", PE[0], PE[1], PE[2], PE[3]);
180 printf(
" PP %18.13f %18.13f %18.13f %18.13f \n", PP[0], PP[1], PP[2], PP[3]);
182 for (
int k = 0; k <= 3; k++) SUM[k] = P2[k] + Q2[k] + PE[k] + PP[k];
184 printf(
"SUM %18.13f %18.13f %18.13f %18.13f \n", SUM[0], SUM[1], SUM[2], SUM[3]);
209 void partra(
int IBRAN,
double PHOT[4])
214 rotod3(-parkin.fi0, PHOT, PHOT);
215 rotod2(-parkin.th0, PHOT, PHOT);
216 bostd3(parkin.bsta, PHOT, PHOT);
217 rotod3(-parkin.fi1, PHOT, PHOT);
218 rotod2(-parkin.th1, PHOT, PHOT);
219 rotod3(-parkin.fi2, PHOT, PHOT);
222 bostd3(parkin.parneu, PHOT, PHOT);
224 bostd3(parkin.parch, PHOT, PHOT);
227 rotod3(-parkin.fi3, PHOT, PHOT);
228 rotod2(-parkin.th3, PHOT, PHOT);
229 bostd3(parkin.bpar, PHOT, PHOT);
230 rotod3(parkin.fi4, PHOT, PHOT);
231 rotod2(-parkin.th4, PHOT, PHOT);
232 rotod3(-parkin.fi5, PHOT, PHOT);
233 rotod3(parkin.fi2, PHOT, PHOT);
234 rotod2(parkin.th1, PHOT, PHOT);
235 rotod3(parkin.fi1, PHOT, PHOT);
236 bostd3(parkin.bstb, PHOT, PHOT);
237 rotod2(parkin.th0, PHOT, PHOT);
238 rotod3(parkin.fi0, PHOT, PHOT);
243 void trypar(
bool* JESLI,
double* pSTRENG,
double AMCH,
double AMEL,
double PA[4],
double PB[4],
double PE[4],
double PP[4],
246 double& STRENG = *pSTRENG;
248 double& FI0 = parkin.fi0;
249 double& FI1 = parkin.fi1;
250 double& FI2 = parkin.fi2;
251 double& FI3 = parkin.fi3;
252 double& FI4 = parkin.fi4;
253 double& FI5 = parkin.fi5;
254 double& TH0 = parkin.th0;
255 double& TH1 = parkin.th1;
256 double& TH3 = parkin.th3;
257 double& TH4 = parkin.th4;
258 double& PARNEU = parkin.parneu;
259 double& PARCH = parkin.parch;
260 double& BPAR = parkin.bpar;
261 double& BSTA = parkin.bsta;
262 double& BSTB = parkin.bstb;
264 double PNEUTR[4], PAA[4], PHOT[4], PSUM[4];
269 const double ALFINV = 137.01;
272 PA[4 - j] = max(PA[4 - j], sqrt(PA[1 - j] * PA[1 - j] + PA[2 - j] * PA[2 - j] + PA[3 - j] * PA[3 - j]));
273 PB[4 - j] = max(PB[4 - j], sqrt(PB[1 - j] * PB[1 - j] + PB[2 - j] * PB[2 - j] + PB[3 - j] * PB[3 - j]));
276 for (
int k = 0; k <= 3; k++) {
279 PSUM[k] = PA[k] + PB[k];
283 if ((PAA[4 - j] + PNEUTR[4 - j]) < 0.01) {
284 printf(
" too small energy to emit %10.7f\n", PAA[4 - j] + PNEUTR[4 - j]);
293 double X1 = PSUM[1 - j];
294 double X2 = PSUM[2 - j];
297 X2 = sqrt(PSUM[1 - j] * PSUM[1 - j] + PSUM[2 - j] * PSUM[2 - j]);
298 TH0 = angxy(X1, X2) ;
299 spaj(-2, PNEUTR, PAA, PP, PE);
300 lortra(3, -FI0, PNEUTR, VEC, PAA, PP, PE);
301 lortra(2, -TH0, PNEUTR, VEC, PAA, PP, PE);
302 rotod3(-FI0, PSUM, PSUM);
303 rotod2(-TH0, PSUM, PSUM);
304 BSTA = (PSUM[4 - j] - PSUM[3 - j]) / sqrt(PSUM[4 - j] * PSUM[4 - j] - PSUM[3 - j] * PSUM[3 - j]);
305 BSTB = (PSUM[4 - j] + PSUM[3 - j]) / sqrt(PSUM[4 - j] * PSUM[4 - j] - PSUM[3 - j] * PSUM[3 - j]);
306 lortra(1, BSTA, PNEUTR, VEC, PAA, PP, PE);
307 spaj(-1, PNEUTR, PAA, PP, PE);
308 double AMNE = amast(PNEUTR);
310 if (AMCH < 0.0) AMCH = AMEL;
311 if (AMNE < 0.0) AMNE = 0.0;
312 double AMTO = PAA[4 - j] + PNEUTR[4 - j];
317 if (STRENG == 0.0) {*JESLI =
false;
return;}
321 * 0.5 * (1.0 / PI / ALFINV) * (1.0 / PI / ALFINV)
327 * 2 * log(AMTO / AMEL / 2.0)
328 *log(AMTO / AMEL / 2.0)
329 *log((AMTO * AMTO + 2 * AMCH * AMCH) / 2.0 / AMCH / AMCH);
333 if (darkr.ifspecial == 1) {
334 if (AMEL < 0.001) PRHARD = PRHARD * darkr.NormFact;
335 else PRHARD = PRHARD * darkr.NormFmu;
343 PRHARD = PRHARD * FREJECT;
351 printf(
" stop from Photos pairs.cxx PRHARD= %18.13f \n", PRHARD);
355 double delta = AMTO * 2;
358 if (RRR[7 - j] > PRHARD) {
359 STRENG = STRENG / (1.0 - PRHARD);
373 double XMP, ALP1, ALP2, ALP;
374 if (darkr.ifspecial == 1) {
375 ALP1 = atan((4 * AMEL * AMEL - darkr.MXX * darkr.MXX) / darkr.MXX / darkr.GXX);
376 ALP2 = atan((AMTO * AMTO - darkr.MXX) / darkr.MXX / darkr.GXX);
377 ALP = ALP1 + RRR[1 - j] * (ALP2 - ALP1);
378 XMP = sqrt(darkr.MXX * darkr.MXX + darkr.MXX * darkr.GXX * tan(ALP));
381 XMP = 2.0 * AMEL * exp(RRR[1 - j] * log(AMTO / 2.0 / AMEL));
386 double XPmin = 2.0 * AMEL;
387 if (darkr.ifspecial == 1) {
388 XPmin = darkr.MXX - 5 * darkr.GXX;
389 if (XPmin < 2.0 * AMEL) XPmin = 2.0 * AMEL;
393 double XPdelta = AMTO - XPmin;
394 double XP = XPmin * exp(RRR[2 - j] * log((XPdelta + XPmin) / XPmin));
396 double XMK2 = (AMTO * AMTO + XMP * XMP) - 2.0 * AMTO * XP;
399 double eps = 4.0 * AMCH * AMCH / AMTO / AMTO;
400 if (darkr.ifspecial == 1) {
401 eps = (darkr.MXX - 5 * darkr.GXX) * (darkr.MXX - 5 * darkr.GXX) / AMTO / AMTO;
402 if (eps < 4.0 * AMCH * AMCH / AMTO / AMTO) eps = 4.0 * AMCH * AMCH / AMTO / AMTO;
405 double C1 = 1.0 + eps - eps * exp(RRR[3 - j] * log((2 + eps) / eps));
407 double FIX1 = 2.0 * PI * RRR[4 - j];
410 double C2 = 1.0 - 2.0 * RRR[5 - j];
411 double FIX2 = 2.0 * PI * RRR[6 - j];
416 JESLIK = (XP < ((AMTO * AMTO + XMP * XMP - (AMCH + AMNE) * (AMCH + AMNE)) / 2.0 / AMTO));
419 if (JESLIK) WTA = 1.0;
421 JESLIK = (XMP < (AMTO - AMNE - AMCH));
423 if (JESLIK) WTA = 1.0;
425 JESLIK = (XMP < (AMTO - AMNE - AMCH)) && (XP > XMP);
428 if (JESLIK) WTA = 1.0;
431 (XMP < (AMTO - AMNE - AMCH)) &&
433 (XP < ((AMTO * AMTO + XMP * XMP - (AMCH + AMNE) * (AMCH + AMNE)) / 2.0 / AMTO));
435 if (JESLIK) WTA = 1.0;
440 *JESLI = (RRR[7 - j] < PRHARD) &&
441 (XMP < (AMTO - AMNE - AMCH)) &&
443 (XP < ((AMTO * AMTO + XMP * XMP - (AMCH + AMNE) * (AMCH + AMNE)) / 2.0 / AMTO));
447 *JESLI = *JESLI && XP < delta;
453 double F = (AMTO * AMTO - 4.0 * AMEL * AMEL)
454 / (AMTO * AMTO - 4.0 * AMEL * AMEL) * XMP * XMP;
456 if (darkr.ifspecial == 1) F = (ALP2 - ALP1) * ((XMP * XMP - darkr.MXX * darkr.MXX) * (XMP * XMP - darkr.MXX * darkr.MXX) +
457 (darkr.MXX * darkr.GXX) * (darkr.MXX * darkr.GXX)) / (darkr.MXX * darkr.GXX);
460 double G = 2 * AMTO * XPdelta
461 / (2 * AMTO * XPdelta) * 2 * AMTO * XP;
466 / 2.0 * (1.0 + eps - C1) / 2.0;
469 / 2.0 * (1.0 + eps - C1);
471 / 2.0 * (1.0 + eps + C1);
472 H = 1. / (0.5 / H1 + 0.5 / H2);
476 double XPMAX = (AMTO * AMTO + XMP * XMP - (AMCH + AMNE) * (AMCH + AMNE)) / 2.0 / AMTO;
478 double YOT3 = F * G * H;
480 xlam(1.0, AMEL * AMEL / XMP / XMP, AMEL * AMEL / XMP / XMP) *
481 xlam(1.0, XMK2 / AMTO / AMTO, XMP * XMP / AMTO / AMTO) *
482 xlam(1.0, AMCH * AMCH / XMK2, AMNE * AMNE / XMK2)
483 / xlam(1.0, AMCH * AMCH / AMTO / AMTO, AMNE * AMNE / AMTO / AMTO);
504 X2 = sqrt(PNEUTR[1 - j] * PNEUTR[1 - j] + PNEUTR[2 - j] * PNEUTR[2 - j]) ;
506 spaj(0, PNEUTR, PAA, PP, PE);
507 lortra(3, -FI1, PNEUTR, VEC, PAA, PP, PE);
508 lortra(2, -TH1, PNEUTR, VEC, PAA, PP, PE);
513 FI2 = angfi(VEC[1 - j], VEC[2 - j]);
514 lortra(3, -FI2, PNEUTR, VEC, PAA, PP, PE);
515 spaj(1, PNEUTR, PAA, PP, PE);
521 double AMCH2 = AMCH * AMCH;
522 double AMNE2 = AMNE * AMNE;
523 double AMTOST = XMK2;
524 double QNEW = xlam(AMTOST, AMNE2, AMCH2) / sqrt(AMTOST) / 2.0;
525 double QOLD = PNEUTR[3 - j];
526 double GCHAR = (QNEW * QNEW + QOLD * QOLD + AMCH * AMCH) /
527 (QNEW * QOLD + sqrt((QNEW * QNEW + AMCH * AMCH) * (QOLD * QOLD + AMCH * AMCH)));
528 double GNEU = (QNEW * QNEW + QOLD * QOLD + AMNE * AMNE) /
529 (QNEW * QOLD + sqrt((QNEW * QNEW + AMNE * AMNE) * (QOLD * QOLD + AMNE * AMNE)));
539 if (GNEU < 1. || GCHAR < 1.) {
540 printf(
" PHOTOS TRYPAR GBOOST LT 1., LIMIT OF PHASE SPACE %18.13f %18.13f %18.13f %18.13f %18.13f %18.13f %18.13f %18.13f \n"
541 , GNEU, GCHAR, QNEW, QOLD, AMTO, AMTOST, AMNE, AMCH);
544 PARCH = GCHAR + sqrt(GCHAR * GCHAR - 1.0);
545 PARNEU = GNEU - sqrt(GNEU * GNEU - 1.0);
548 bostd3(PARNEU, VEC , VEC);
549 bostd3(PARNEU, PNEUTR, PNEUTR);
550 bostd3(PARCH, PAA , PAA);
551 spaj(2, PNEUTR, PAA, PP, PE);
554 double PMOD = xlam(XMP * XMP, AMEL * AMEL, AMEL * AMEL) / XMP / 2.0;
555 double S2 = sqrt(1.0 - C2 * C2);
556 PP[4 - j] = XMP / 2.0;
557 PP[3 - j] = PMOD * C2;
558 PP[2 - j] = PMOD * S2 * cos(FIX2);
559 PP[1 - j] = PMOD * S2 * sin(FIX2);
560 PE[4 - j] = PP[4 - j];
561 PE[3 - j] = -PP[3 - j];
562 PE[2 - j] = -PP[2 - j];
563 PE[1 - j] = -PP[1 - j];
565 double PENE = (AMTO * AMTO - XMP * XMP - XMK2) / 2.0 / sqrt(XMK2);
566 double PPED = sqrt(PENE * PENE - XMP * XMP);
569 double SINTHG = sqrt(1.0 - C1 * C1);
573 PHOT[1 - j] = PMOD * SINTHG * cos(FI3);
574 PHOT[2 - j] = PMOD * SINTHG * sin(FI3);
576 PHOT[3 - j] = -PMOD * COSTHG;
581 lortra(3, -FI3, PNEUTR, VEC, PAA, PP, PE);
582 rotod3(-FI3, PHOT, PHOT);
583 lortra(2, -TH3, PNEUTR, VEC, PAA, PP, PE);
584 rotod2(-TH3, PHOT, PHOT);
585 spaj(21, PNEUTR, PAA, PP, PE);
587 double PAIRB = PENE / XMP + PPED / XMP;
588 bostd3(PAIRB, PE, PE);
589 bostd3(PAIRB, PP, PP);
590 spaj(3, PNEUTR, PAA, PP, PE);
591 double GAMM = (PNEUTR[4 - j] + PAA[4 - j] + PP[4 - j] + PE[4 - j]) / AMTO;
597 if (GAMM > 0.9999999) GAMM = 1.0;
599 printf(
"Photos::partra: GAMM = %20.18e\n", GAMM);
600 printf(
" BELOW 0.9999999 THRESHOLD!\n");
605 BPAR = GAMM - sqrt(GAMM * GAMM - 1.0);
606 lortra(1, BPAR, PNEUTR, VEC, PAA, PP, PE);
607 bostd3(BPAR, PHOT, PHOT);
608 spaj(4, PNEUTR, PAA, PP, PE);
614 X2 = sqrt(PNEUTR[1 - j] * PNEUTR[1 - j] + PNEUTR[2 - j] * PNEUTR[2 - j]);
616 lortra(3, FI4, PNEUTR, VEC, PAA, PP, PE);
617 rotod3(FI4, PHOT, PHOT);
618 lortra(2, -TH4, PNEUTR, VEC, PAA, PP, PE);
619 rotod2(-TH4, PHOT, PHOT);
623 lortra(3, -FI5, PNEUTR, VEC, PAA, PP, PE);
624 rotod3(-FI5, PHOT, PHOT);
626 lortra(3, FI2, PNEUTR, VEC, PAA, PP, PE);
627 rotod3(FI2, PHOT, PHOT);
628 lortra(2, TH1, PNEUTR, VEC, PAA, PP, PE);
629 rotod2(TH1, PHOT, PHOT);
630 lortra(3, FI1, PNEUTR, VEC, PAA, PP, PE);
631 rotod3(FI1, PHOT, PHOT);
632 spaj(10, PNEUTR, PAA, PP, PE);
633 lortra(1, BSTB, PNEUTR, VEC, PAA, PP, PE);
634 lortra(2, TH0, PNEUTR, VEC, PAA, PP, PE);
635 lortra(3, FI0, PNEUTR, VEC, PAA, PP, PE);
636 spaj(11, PNEUTR, PAA, PP, PE);
641 double pq = PAA[3] * PP[3] - PAA[2] * PP[2] - PAA[1] * PP[1] - PAA[0] * PP[0];
642 pq = pq + PAA[3] * PE[3] - PAA[2] * PE[2] - PAA[1] * PE[1] - PAA[0] * PE[0];
644 double ppq = PNEUTR[3] * PP[3] - PNEUTR[2] * PP[2] - PNEUTR[1] * PP[1] - PNEUTR[0] * PP[0];
645 ppq = ppq + PNEUTR[3] * PE[3] - PNEUTR[2] * PE[2] - PNEUTR[1] * PE[1] - PNEUTR[0] * PE[0];
646 double pq1 = PAA[3] * PP[3] - PAA[2] * PP[2] - PAA[1] * PP[1] - PAA[0] * PP[0];
647 double pq2 = PAA[3] * PE[3] - PAA[2] * PE[2] - PAA[1] * PE[1] - PAA[0] * PE[0];
649 double ppq1 = PNEUTR[3] * PP[3] - PNEUTR[2] * PP[2] - PNEUTR[1] * PP[1] - PNEUTR[0] * PP[0];
650 double ppq2 = PNEUTR[3] * PE[3] - PNEUTR[2] * PE[2] - PNEUTR[1] * PE[1] - PNEUTR[0] * PE[0];
652 double ppp = PNEUTR[3] * PAA[3] - PNEUTR[2] * PAA[2] - PNEUTR[1] * PAA[1] - PNEUTR[0] * PAA[0];
653 double mneutr2 = PNEUTR[3] * PNEUTR[3] - PNEUTR[2] * PNEUTR[2] - PNEUTR[1] * PNEUTR[1] - PNEUTR[0] * PNEUTR[0];
654 double maa2 = PAA[3] * PAA[3] - PAA[2] * PAA[2] - PAA[1] * PAA[1] - PAA[0] * PAA[0];
656 double YOT1 = 1. / 2. / XMP / XMP / XMP / XMP *
657 (4 * (pq1 / pq - ppq1 / ppq) * (pq2 / pq - ppq2 / ppq)
658 - XMP * XMP * (AMCH2 / pq / pq + AMNE2 / ppq / ppq - ppp / pq / ppq - ppp / pq / ppq));
661 if (darkr.ifspecial == 1 && darkr.iboson == 1) {
662 YOT1 = YOT1 * XMP * XMP * XMP * XMP / ((darkr.MXX * darkr.MXX - XMP * XMP) * (darkr.MXX * darkr.MXX - XMP * XMP) + darkr.GXX *
663 darkr.GXX * darkr.MXX * darkr.MXX);
664 YOT1 = YOT1 * darkr.GXX * darkr.MXX ;
668 YOT1 = YOT1 * AMTO / sqrt(XMK2);
669 YOT1 = YOT1 * AMTO / sqrt(XMK2);
670 YOT1 = YOT1 * sqrt((AMTO * AMTO - XMK2 + 2 * AMCH * AMCH) / (AMTO * AMTO - XMK2));
671 }
else if (darkr.ifspecial == 1) {
672 double mcr = 0.5 * darkr.MXX * darkr.MXX;
673 mcr = 0.5 * XMP * XMP;
674 YOT1 = 1. / 2. / XMP / XMP / XMP / XMP *
675 (4 * (1. / (pq + mcr) - 1. / (ppq + mcr)) * (1. / (pq + mcr) - 1. / (ppq + mcr)) * (XMP * XMP + 0 * AMCH * AMCH)
676 - 4 * XMP * XMP / AMTO / AMTO * (AMCH2 / pq / pq + AMNE2 / ppq / ppq - ppp / pq / ppq - ppp / pq / ppq));
678 YOT1 = YOT1 * XMP * XMP * XMP * XMP / ((darkr.MXX * darkr.MXX - XMP * XMP) * (darkr.MXX * darkr.MXX - XMP * XMP) + darkr.GXX *
679 darkr.GXX * darkr.MXX * darkr.MXX);
680 YOT1 = YOT1 * darkr.GXX * darkr.MXX ;
681 YOT1 = YOT1 * (AMTO * AMTO - 4 * AMCH * AMCH) / (AMTO * AMTO);
682 YOT1 = YOT1 * XMK2 / (XMK2 - 4 * AMCH * AMCH);
683 YOT1 = YOT1 * AMTO / sqrt(XMK2);
684 YOT1 = YOT1 * AMTO / sqrt(XMK2);
685 YOT1 = YOT1 * sqrt((AMTO * AMTO - XMK2 + 2 * AMCH * AMCH) / (AMTO * AMTO - XMK2));
693 for (
int k = 0; k <= 3; k++) {
694 double stored = PAA[k];
699 pq = PAA[3] * PP[3] - PAA[2] * PP[2] - PAA[1] * PP[1] - PAA[0] * PP[0];
700 pq = pq + PAA[3] * PE[3] - PAA[2] * PE[2] - PAA[1] * PE[1] - PAA[0] * PE[0];
702 ppq = PNEUTR[3] * PP[3] - PNEUTR[2] * PP[2] - PNEUTR[1] * PP[1] - PNEUTR[0] * PP[0];
703 ppq = ppq + PNEUTR[3] * PE[3] - PNEUTR[2] * PE[2] - PNEUTR[1] * PE[1] - PNEUTR[0] * PE[0];
704 pq1 = PAA[3] * PP[3] - PAA[2] * PP[2] - PAA[1] * PP[1] - PAA[0] * PP[0];
705 pq2 = PAA[3] * PE[3] - PAA[2] * PE[2] - PAA[1] * PE[1] - PAA[0] * PE[0];
707 ppq1 = PNEUTR[3] * PP[3] - PNEUTR[2] * PP[2] - PNEUTR[1] * PP[1] - PNEUTR[0] * PP[0];
708 ppq2 = PNEUTR[3] * PE[3] - PNEUTR[2] * PE[2] - PNEUTR[1] * PE[1] - PNEUTR[0] * PE[0];
710 ppp = PNEUTR[3] * PAA[3] - PNEUTR[2] * PAA[2] - PNEUTR[1] * PAA[1] - PNEUTR[0] * PAA[0];
712 XMP = -(PP[0] + PE[0]) * (PP[0] + PE[0]) - (PP[1] + PE[1]) * (PP[1] + PE[1])
713 - (PP[2] + PE[2]) * (PP[2] + PE[2]) + (PP[3] + PE[3]) * (PP[3] + PE[3]);
714 XMP = sqrt(fabs(XMP));
717 double YOT1p = 1. / 2. / XMP / XMP / XMP / XMP *
718 (4 * (pq1 / pq - ppq1 / ppq) * (pq2 / pq - ppq2 / ppq)
719 - XMP * XMP * (AMCH2 / pq / pq + AMNE2 / ppq / ppq - ppp / pq / ppq - ppp / pq / ppq));
729 for (
int k = 0; k <= 3; k++) {
730 double stored = PAA[k];
736 double WT = YOT1 * YOT2 * YOT3;
738 WT = WT / 8 / FREJECT;
739 if (darkr.ifspecial == 1 && darkr.ifforce == 1 && AMEL < 0.001) {
740 darkr.Fel = max(darkr.Fel, WT);
741 darkr.Fel = std::min(darkr.Fel, 1.0);
744 if (darkr.ifspecial == 1 && darkr.ifforce == 1 && AMEL > 0.001) {
745 darkr.Fmu = max(darkr.Fmu, WT);
746 darkr.Fmu = std::min(darkr.Fmu, 1.0);
761 if (RRR[8 - j] > WT) {
static double(* randomDouble)()
Pointer to random generator function.