9 #include "Pythia8/SigmaLeftRightSym.h"
22 void Sigma1ffbar2ZRight::initProc() {
26 mRes = particleDataPtr->m0(idZR);
27 GammaRes = particleDataPtr->mWidth(idZR);
29 GamMRat = GammaRes / mRes;
30 sin2tW = couplingsPtr->sin2thetaW();
33 ZRPtr = particleDataPtr->particleDataEntryPtr(idZR);
41 void Sigma1ffbar2ZRight::sigmaKin() {
44 double sigBW = 12. * M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
45 double widthOut = ZRPtr->resWidthOpen(idZR, mH);
48 double preFac = alpEM * mH / ( 48. * sin2tW * (1. - sin2tW)
49 * (1. - 2. * sin2tW) );
50 sigma0 = preFac * sigBW * widthOut;
58 double Sigma1ffbar2ZRight::sigmaHat() {
64 if (idAbs < 9 && idAbs%2 == 1) {
65 af = -1. + 2. * sin2tW;
66 vf = -1. + 4. * sin2tW / 3.;
67 }
else if (idAbs < 9) {
68 af = 1. - 2. * sin2tW;
69 vf = 1. - 8. * sin2tW / 3.;
70 }
else if (idAbs < 19 && idAbs%2 == 1) {
71 af = -1. + 2. * sin2tW;
72 vf = -1. + 4. * sin2tW;
76 double sigma = (vf*vf + af*af) * sigma0;
77 if (idAbs < 9) sigma /= 3.;
86 void Sigma1ffbar2ZRight::setIdColAcol() {
89 setId( id1, id2, idZR);
92 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
93 else setColAcol( 0, 0, 0, 0, 0, 0);
94 if (id1 < 0) swapColAcol();
102 double Sigma1ffbar2ZRight::weightDecay(
Event& process,
int iResBeg,
106 int idMother = process[process[iResBeg].mother1()].idAbs();
110 return weightTopDecay( process, iResBeg, iResEnd);
113 if (iResBeg != 5 || iResEnd != 5)
return 1.;
116 double ai, vi, af, vf;
117 int idInAbs = process[3].idAbs();
118 if (idInAbs < 9 && idInAbs%2 == 1) {
119 ai = -1. + 2. * sin2tW;
120 vi = -1. + 4. * sin2tW / 3.;
121 }
else if (idInAbs < 9) {
122 ai = 1. - 2. * sin2tW;
123 vi = 1. - 8. * sin2tW / 3.;
125 ai = -1. + 2. * sin2tW;
126 vi = -1. + 4. * sin2tW;
128 int idOutAbs = process[6].idAbs();
129 if (idOutAbs < 9 && idOutAbs%2 == 1) {
130 af = -1. + 2. * sin2tW;
131 vf = -1. + 4. * sin2tW / 3.;
132 }
else if (idOutAbs < 9) {
133 af = 1. - 2. * sin2tW;
134 vf = 1. - 8. * sin2tW / 3.;
136 af = -1. + 2. * sin2tW;
137 vf = -1. + 4. * sin2tW;
141 double mr1 = pow2(process[6].m()) / sH;
142 double mr2 = pow2(process[7].m()) / sH;
143 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
144 double cosThe = (process[3].p() - process[4].p())
145 * (process[7].p() - process[6].p()) / (sH * betaf);
148 double wt1 = (vi*vi + ai*ai) * (vf*vf + af*af * betaf*betaf);
149 double wt2 = (1. - betaf*betaf) * (vi*vi + ai*ai) * vf*vf;
150 double wt3 = betaf * 4. * vi * ai * vf * af;
151 if (process[3].
id() * process[6].id() < 0) wt3 = -wt3;
152 double wt = wt1 * (1. + cosThe*cosThe) + wt2 * (1. - cosThe*cosThe)
154 double wtMax = 2. * (wt1 + abs(wt3));
170 void Sigma1ffbar2WRight::initProc() {
174 mRes = particleDataPtr->m0(idWR);
175 GammaRes = particleDataPtr->mWidth(idWR);
177 GamMRat = GammaRes / mRes;
178 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
181 particlePtr = particleDataPtr->particleDataEntryPtr(idWR);
189 void Sigma1ffbar2WRight::sigmaKin() {
192 double colQ = 3. * (1. + alpS / M_PI);
195 double widOutPos = 0.;
196 double widOutNeg = 0.;
197 int id1Now, id2Now, id1Abs, id2Abs, id1Neg, id2Neg, onMode;
198 double widNow, widSecPos, widSecNeg, mf1, mf2, mr1, mr2, kinFac;
201 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
202 id1Now = particlePtr->channel(i).product(0);
203 id2Now = particlePtr->channel(i).product(1);
204 id1Abs = abs(id1Now);
205 id2Abs = abs(id2Now);
208 mf1 = particleDataPtr->m0(id1Abs);
209 mf2 = particleDataPtr->m0(id2Abs);
210 if (mH > mf1 + mf2 + MASSMARGIN) {
211 mr1 = pow2(mf1 / mH);
212 mr2 = pow2(mf2 / mH);
213 kinFac = (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
214 * sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
218 if (id1Abs < 9) widNow *= colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
221 id1Neg = (id1Abs < 19) ? -id1Now : id1Abs;
222 id2Neg = (id2Abs < 19) ? -id2Now : id2Abs;
223 widSecPos = particleDataPtr->resOpenFrac(id1Now, id2Now);
224 widSecNeg = particleDataPtr->resOpenFrac(id1Neg, id2Neg);
227 onMode = particlePtr->channel(i).onMode();
228 if (onMode == 1 || onMode == 2) widOutPos += widNow * widSecPos;
229 if (onMode == 1 || onMode == 3) widOutNeg += widNow * widSecNeg;
236 double sigBW = 12. * M_PI * pow2(alpEM * thetaWRat) * sH
237 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
238 sigma0Pos = sigBW * widOutPos;
239 sigma0Neg = sigBW * widOutNeg;
247 double Sigma1ffbar2WRight::sigmaHat() {
250 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
251 double sigma = (idUp > 0) ? sigma0Pos : sigma0Neg;
252 if (abs(id1) < 9) sigma *= couplingsPtr->V2CKMid(abs(id1), abs(id2)) / 3.;
263 void Sigma1ffbar2WRight::setIdColAcol() {
266 int sign = (abs(id1)%2 == 0) ? 1 : -1;
267 if (id1 < 0) sign = -sign;
268 setId( id1, id2, idWR * sign);
271 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
272 else setColAcol( 0, 0, 0, 0, 0, 0);
273 if (id1 < 0) swapColAcol();
281 double Sigma1ffbar2WRight::weightDecay(
Event& process,
int iResBeg,
285 int idMother = process[process[iResBeg].mother1()].idAbs();
289 return weightTopDecay( process, iResBeg, iResEnd);
292 if (iResBeg != 5 || iResEnd != 5)
return 1.;
295 double mr1 = pow2(process[6].m()) / sH;
296 double mr2 = pow2(process[7].m()) / sH;
297 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
300 double eps = (process[3].id() * process[6].id() > 0) ? 1. : -1.;
303 double cosThe = (process[3].p() - process[4].p())
304 * (process[7].p() - process[6].p()) / (sH * betaf);
306 double wt = pow2(1. + betaf * eps * cosThe) - pow2(mr1 - mr2);
322 void Sigma1ll2Hchgchg::initProc() {
325 if (leftRight == 1) {
328 nameSave =
"l l -> H_L^++--";
332 nameSave =
"l l -> H_R^++--";
336 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
337 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
338 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
339 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
340 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
341 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
344 mRes = particleDataPtr->m0(idHLR);
345 GammaRes = particleDataPtr->mWidth(idHLR);
347 GamMRat = GammaRes / mRes;
350 particlePtr = particleDataPtr->particleDataEntryPtr(idHLR);
358 double Sigma1ll2Hchgchg::sigmaHat() {
361 if (id1 * id2 < 0)
return 0.;
362 int id1Abs = abs(id1);
363 int id2Abs = abs(id2);
364 if (id1Abs != 11 && id1Abs != 13 && id1Abs != 15)
return 0.;
365 if (id2Abs != 11 && id2Abs != 13 && id2Abs != 15)
return 0.;
368 double sigBW = 8. * M_PI / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
369 double widIn = pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2])
371 int idSgn = (id1 < 0) ? idHLR : -idHLR;
372 double widOut = particlePtr->resWidthOpen( idSgn, mH);
375 return widIn * sigBW * widOut;
383 void Sigma1ll2Hchgchg::setIdColAcol() {
386 int idSgn = (id1 < 0) ? idHLR : -idHLR;
387 setId( id1, id2, idSgn);
390 setColAcol( 0, 0, 0, 0, 0, 0);
398 double Sigma1ll2Hchgchg::weightDecay(
Event& process,
int iResBeg,
402 int idMother = process[process[iResBeg].mother1()].idAbs();
406 return weightTopDecay( process, iResBeg, iResEnd);
423 void Sigma2lgm2Hchgchgl::initProc() {
426 idHLR = (leftRight == 1) ? 9900041 : 9900042;
427 codeSave = (leftRight == 1) ? 3122 : 3142;
428 if (idLep == 13) codeSave += 1;
429 if (idLep == 15) codeSave += 2;
430 if (codeSave == 3122) nameSave =
"l^+- gamma -> H_L^++-- e^-+";
431 else if (codeSave == 3123) nameSave =
"l^+- gamma -> H_L^++-- mu^-+";
432 else if (codeSave == 3124) nameSave =
"l^+- gamma -> H_L^++-- tau^-+";
433 else if (codeSave == 3142) nameSave =
"l^+- gamma -> H_R^++-- e^-+";
434 else if (codeSave == 3143) nameSave =
"l^+- gamma -> H_R^++-- mu^-+";
435 else nameSave =
"l^+- gamma -> H_R^++-- tau^-+";
439 yukawa[1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
440 yukawa[2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
441 yukawa[3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
442 }
else if (idLep == 13) {
443 yukawa[1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
444 yukawa[2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
445 yukawa[3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
447 yukawa[1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
448 yukawa[2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
449 yukawa[3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
453 openFracPos = particleDataPtr->resOpenFrac( idHLR);
454 openFracNeg = particleDataPtr->resOpenFrac(-idHLR);
462 double Sigma2lgm2Hchgchgl::sigmaHat() {
465 int idIn = (id2 == 22) ? id1 : id2;
466 int idInAbs = abs(idIn);
467 if (idInAbs != 11 && idInAbs != 13 && idInAbs != 15)
return 0.;
470 double s1 = pow2( particleDataPtr->m0(idInAbs) );
473 double smm1 = 8. * (sH + tH - s3) * (sH + tH - 2. * s3 - s1 - s4)
475 double smm2 = 2. * ( (2. * s3 - 3. * s1) * s4 + (s1 - 2. * s4) * tH
476 - (tH - s4) * sH ) / pow2(tH - s4);
477 double smm3 = 2. * ( (2. * s3 - 3. * s4 + tH) * s1
478 - (2. * s1 - s4 + tH) * sH ) / pow2(sH - s1);
479 double smm12 = 4. * ( (2. * s1 - s4 - 2. * s3 + tH) * sH
480 + (tH - 3. * s3 - 3. * s4) * tH + (2. * s3 - 2. * s1
481 + 3. * s4) * s3 ) / ( (uH - s3) * (tH - s4) );
482 double smm13 = -4. * ( (tH + s1 - 2. * s4) * tH - (s3 + 3. * s1 - 2. * s4)
483 * s3 + (s3 + 3. * s1 + tH) * sH - pow2(tH - s3 + sH) )
484 / ( (uH - s3) * (sH - s1) );
485 double smm23 = -4. * ( (s1 - s4 + s3) * tH - s3*s3 + s3 * (s1 + s4)
486 - 3. * s1 * s4 - (s1 - s4 - s3 + tH) * sH)
487 / ( (sH - s1) * (tH - s4) );
488 double sigma = alpEM * pow2(sH / (sH - s1) ) * (smm1 + smm2 + smm3
489 + smm12 + smm13 + smm23) / (4. * sH2);
492 sigma *= pow2(yukawa[(idInAbs-9)/2]);
493 sigma *= (idIn < 0) ? openFracPos : openFracNeg;
504 void Sigma2lgm2Hchgchgl::setIdColAcol() {
507 int idIn = (id2 == 22) ? id1 : id2;
508 int idSgn = (idIn < 0) ? idHLR : -idHLR;
509 int idOut = (idIn < 0) ? idLep : -idLep;
510 setId( id1, id2, idSgn, idOut);
513 if (id1 == 22) swapTU =
true;
516 setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
524 double Sigma2lgm2Hchgchgl::weightDecay(
Event& process,
int iResBeg,
528 int idMother = process[process[iResBeg].mother1()].idAbs();
532 return weightTopDecay( process, iResBeg, iResEnd);
548 void Sigma3ff2HchgchgfftWW::initProc() {
551 if (leftRight == 1) {
554 nameSave =
"f_1 f_2 -> H_L^++-- f_3 f_4 (W+- W+- fusion)";
558 nameSave =
"f_1 f_2 -> H_R^++-- f_3 f_4 (W+- W+- fusion)";
562 double mW = particleDataPtr->m0(24);
563 double mWR = particleDataPtr->m0(9900024);
564 mWS = (leftRight == 1) ? pow2(mW) : pow2(mWR);
565 double gL = settingsPtr->parm(
"LeftRightSymmmetry:gL");
566 double gR = settingsPtr->parm(
"LeftRightSymmmetry:gR");
567 double vL = settingsPtr->parm(
"LeftRightSymmmetry:vL");
568 prefac = (leftRight == 1) ? pow2(pow4(gL) * vL)
569 : 2. * pow2(pow3(gR) * mWR);
571 openFracPos = particleDataPtr->resOpenFrac( idHLR);
572 openFracNeg = particleDataPtr->resOpenFrac(-idHLR);
580 void Sigma3ff2HchgchgfftWW::sigmaKin() {
583 double pp12 = 0.5 * sH;
584 double pp14 = 0.5 * mH * p4cm.pNeg();
585 double pp15 = 0.5 * mH * p5cm.pNeg();
586 double pp24 = 0.5 * mH * p4cm.pPos();
587 double pp25 = 0.5 * mH * p5cm.pPos();
588 double pp45 = p4cm * p5cm;
591 double propT = 1. / ( (2. * pp14 + mWS) * (2. * pp25 + mWS) );
592 double propU = 1. / ( (2. * pp24 + mWS) * (2. * pp15 + mWS) );
593 sigma0TU = prefac * pp12 * pp45 * pow2(propT + propU);
594 sigma0T = prefac * pp12 * pp45 * 2. * pow2(propT);
602 double Sigma3ff2HchgchgfftWW::sigmaHat() {
605 int id1Abs = abs(id1);
606 int id2Abs = abs(id2);
607 if ( leftRight == 2 && (id1Abs > 10 || id2Abs > 10) )
return 0.;
610 int chg1 = (( id1Abs%2 == 0 && id1 > 0)
611 || (id1Abs%2 == 1 && id1 < 0) ) ? 1 : -1;
612 int chg2 = (( id2Abs%2 == 0 && id2 > 0)
613 || (id2Abs%2 == 1 && id2 < 0) ) ? 1 : -1;
614 if (abs(chg1 + chg2) != 2)
return 0.;
617 double sigma = (id2 == id1 && id1Abs > 10) ? sigma0TU : sigma0T;
618 sigma *= couplingsPtr->V2CKMsum(id1Abs)
619 * couplingsPtr->V2CKMsum(id2Abs);
622 sigma *= (chg1 + chg2 == 2) ? openFracPos : openFracNeg;
625 if (id1Abs == 12 || id1Abs == 14 || id1Abs == 16) sigma *= 2.;
626 if (id2Abs == 12 || id2Abs == 14 || id2Abs == 16) sigma *= 2.;
637 void Sigma3ff2HchgchgfftWW::setIdColAcol() {
640 int id1Abs = abs(id1);
641 int id2Abs = abs(id2);
642 id4 = couplingsPtr->V2CKMpick(id1);
643 id5 = couplingsPtr->V2CKMpick(id2);
646 id3 = (( id1Abs%2 == 0 && id1 > 0) || (id1Abs%2 == 1 && id1 < 0) )
648 setId( id1, id2, id3, id4, id5);
651 if (id1Abs < 9 && id2Abs < 9 && id1*id2 > 0)
652 setColAcol( 1, 0, 2, 0, 0, 0, 1, 0, 2, 0);
653 else if (id1Abs < 9 && id2Abs < 9)
654 setColAcol( 1, 0, 0, 2, 0, 0, 1, 0, 0, 2);
655 else if (id1Abs < 9) setColAcol( 1, 0, 0, 0, 0, 0, 1, 0, 0, 0);
656 else if (id2Abs < 9) setColAcol( 0, 0, 1, 0, 0, 0, 0, 0, 1, 0);
657 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
658 if ( (id1Abs < 9 && id1 < 0) || (id1Abs > 10 && id2 < 0) )
667 double Sigma3ff2HchgchgfftWW::weightDecay(
Event& process,
int iResBeg,
671 int idMother = process[process[iResBeg].mother1()].idAbs();
675 return weightTopDecay( process, iResBeg, iResEnd);
691 void Sigma2ffbar2HchgchgHchgchg::initProc() {
694 if (leftRight == 1) {
697 nameSave =
"f fbar -> H_L^++ H_L^--";
701 nameSave =
"f fbar -> H_R^++ H_R^--";
705 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
706 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
707 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
708 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
709 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
710 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
713 mRes = particleDataPtr->m0(23);
714 GammaRes = particleDataPtr->mWidth(23);
716 GamMRat = GammaRes / mRes;
717 sin2tW = couplingsPtr->sin2thetaW();
718 preFac = (1. - 2. * sin2tW) / ( 8. * sin2tW * (1. - sin2tW) );
721 openFrac = particleDataPtr->resOpenFrac( idHLR, -idHLR);
729 double Sigma2ffbar2HchgchgHchgchg::sigmaHat() {
732 int idAbs = abs(id1);
733 double ei = couplingsPtr->ef(idAbs);
734 double vi = couplingsPtr->vf(idAbs);
735 double ai = couplingsPtr->af(idAbs);
738 double resProp = 1. / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
739 double sigma = 8. * pow2(alpEM) * ei*ei / sH2;
740 if (leftRight == 1) sigma += 8. * pow2(alpEM)
741 * (2. * ei * vi * preFac * (sH - m2Res) * resProp / sH
742 + (vi * vi + ai * ai) * pow2(preFac) * resProp);
745 if (idAbs == 11 || idAbs == 13 || idAbs == 15) {
747 if (idAbs == 11) yuk2Sum
748 = pow2(yukawa[1][1]) + pow2(yukawa[2][1]) + pow2(yukawa[3][1]);
749 else if (idAbs == 13) yuk2Sum
750 = pow2(yukawa[2][1]) + pow2(yukawa[2][2]) + pow2(yukawa[3][2]);
752 = pow2(yukawa[3][1]) + pow2(yukawa[3][2]) + pow2(yukawa[3][3]);
753 yuk2Sum /= 4. * M_PI;
754 sigma += 8. * alpEM * ei * yuk2Sum / (sH * tH)
755 + 4. * pow2(yuk2Sum) / tH2;
756 if (leftRight == 1) sigma += 8. * alpEM * (vi + ai) * yuk2Sum
757 * preFac * (sH - m2Res) * resProp / tH;
761 sigma *= M_PI * (tH * uH - s3 * s4) / sH2;
762 if (idAbs < 9) sigma /= 3.;
773 void Sigma2ffbar2HchgchgHchgchg::setIdColAcol() {
776 setId( id1, id2, idHLR, -idHLR);
779 if (id1 > 0) swapTU =
true;
782 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
783 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
784 if (id1 < 0) swapColAcol();
792 double Sigma2ffbar2HchgchgHchgchg::weightDecay(
Event& process,
793 int iResBeg,
int iResEnd) {
796 int idMother = process[process[iResBeg].mother1()].idAbs();
800 return weightTopDecay( process, iResBeg, iResEnd);