9 #include "Pythia8/SigmaEW.h"
22 void Sigma2qg2qgamma::sigmaKin() {
25 sigUS = (1./3.) * (sH2 + uH2) / (-sH * uH);
28 sigma0 = (M_PI/sH2) * alpS * alpEM * sigUS;
36 double Sigma2qg2qgamma::sigmaHat() {
39 int idNow = (id2 == 21) ? id1 : id2;
40 double eNow = coupSMPtr->ef( abs(idNow) );
41 return sigma0 * pow2(eNow);
49 void Sigma2qg2qgamma::setIdColAcol() {
52 id3 = (id1 == 21) ? 22 : id1;
53 id4 = (id2 == 21) ? 22 : id2;
54 setId( id1, id2, id3, id4);
57 setColAcol( 1, 0, 2, 1, 2, 0, 0, 0);
58 if (id1 == 21) swapCol1234();
59 if (id1 < 0 || id2 < 0) swapColAcol();
72 void Sigma2qqbar2ggamma::sigmaKin() {
75 double sigTU = (8./9.) * (tH2 + uH2) / (tH * uH);
78 sigma0 = (M_PI/sH2) * alpS * alpEM * sigTU;
86 double Sigma2qqbar2ggamma::sigmaHat() {
89 double eNow = coupSMPtr->ef( abs(id1) );
90 return sigma0 * pow2(eNow);
98 void Sigma2qqbar2ggamma::setIdColAcol() {
101 setId( id1, id2, 21, 22);
104 setColAcol( 1, 0, 0, 2, 1, 2, 0, 0);
105 if (id1 < 0) swapColAcol();
119 void Sigma2gg2ggamma::initProc() {
122 int nQuarkLoop = mode(
"PromptPhoton:nQuarkLoop");
125 chargeSum = - 1./3. + 2./3. - 1./3.;
126 if (nQuarkLoop >= 4) chargeSum += 2./3.;
127 if (nQuarkLoop >= 5) chargeSum -= 1./3.;
128 if (nQuarkLoop >= 6) chargeSum += 2./3.;
136 void Sigma2gg2ggamma::sigmaKin() {
139 double logST = log( -sH / tH );
140 double logSU = log( -sH / uH );
141 double logTU = log( tH / uH );
144 double b0stuRe = 1. + (tH - uH) / sH * logTU
145 + 0.5 * (tH2 + uH2) / sH2 * (pow2(logTU) + pow2(M_PI));
147 double b0tsuRe = 1. + (sH - uH) / tH * logSU
148 + 0.5 * (sH2 + uH2) / tH2 * pow2(logSU);
149 double b0tsuIm = -M_PI * ( (sH - uH) / tH + (sH2 + uH2) / tH2 * logSU);
150 double b0utsRe = 1. + (sH - tH) / uH * logST
151 + 0.5 * (sH2 + tH2) / uH2 * pow2(logST);
152 double b0utsIm = -M_PI * ( (sH - tH) / uH + (sH2 + tH2) / uH2 * logST);
153 double b1stuRe = -1.;
155 double b2stuRe = -1.;
159 double sigBox = pow2(b0stuRe) + pow2(b0stuIm) + pow2(b0tsuRe)
160 + pow2(b0tsuIm) + pow2(b0utsRe) + pow2(b0utsIm) + 4. * pow2(b1stuRe)
161 + 4. * pow2(b1stuIm) + pow2(b2stuRe) + pow2(b2stuIm);
164 sigma = (5. / (192. * M_PI * sH2)) * pow2(chargeSum)
165 * pow3(alpS) * alpEM * sigBox;
173 void Sigma2gg2ggamma::setIdColAcol() {
176 setId( id1, id2, 21, 22);
177 setColAcol( 1, 2, 2, 3, 1, 3, 0, 0);
178 if (rndmPtr->flat() > 0.5) swapColAcol();
191 void Sigma2ffbar2gammagamma::sigmaKin() {
194 sigTU = 2. * (tH2 + uH2) / (tH * uH);
197 sigma0 = (M_PI/sH2) * pow2(alpEM) * 0.5 * sigTU;
205 double Sigma2ffbar2gammagamma::sigmaHat() {
208 double eNow = coupSMPtr->ef( abs(id1) );
209 double colFac = (abs(id1) < 9) ? 1. / 3. : 1.;
210 return sigma0 * pow4(eNow) * colFac;
218 void Sigma2ffbar2gammagamma::setIdColAcol() {
221 setId( id1, id2, 22, 22);
224 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
225 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
226 if (id1 < 0) swapColAcol();
240 void Sigma2gg2gammagamma::initProc() {
243 int nQuarkLoop = mode(
"PromptPhoton:nQuarkLoop");
246 charge2Sum = 1./9. + 4./9. + 1./9.;
247 if (nQuarkLoop >= 4) charge2Sum += 4./9.;
248 if (nQuarkLoop >= 5) charge2Sum += 1./9.;
249 if (nQuarkLoop >= 6) charge2Sum += 4./9.;
257 void Sigma2gg2gammagamma::sigmaKin() {
260 double logST = log( -sH / tH );
261 double logSU = log( -sH / uH );
262 double logTU = log( tH / uH );
265 double b0stuRe = 1. + (tH - uH) / sH * logTU
266 + 0.5 * (tH2 + uH2) / sH2 * (pow2(logTU) + pow2(M_PI));
268 double b0tsuRe = 1. + (sH - uH) / tH * logSU
269 + 0.5 * (sH2 + uH2) / tH2 * pow2(logSU);
270 double b0tsuIm = -M_PI * ( (sH - uH) / tH + (sH2 + uH2) / tH2 * logSU);
271 double b0utsRe = 1. + (sH - tH) / uH * logST
272 + 0.5 * (sH2 + tH2) / uH2 * pow2(logST);
273 double b0utsIm = -M_PI * ( (sH - tH) / uH + (sH2 + tH2) / uH2 * logST);
274 double b1stuRe = -1.;
276 double b2stuRe = -1.;
280 double sigBox = pow2(b0stuRe) + pow2(b0stuIm) + pow2(b0tsuRe)
281 + pow2(b0tsuIm) + pow2(b0utsRe) + pow2(b0utsIm) + 4. * pow2(b1stuRe)
282 + 4. * pow2(b1stuIm) + pow2(b2stuRe) + pow2(b2stuIm);
285 sigma = (0.5 / (16. * M_PI * sH2)) * pow2(charge2Sum)
286 * pow2(alpS) * pow2(alpEM) * sigBox;
294 void Sigma2gg2gammagamma::setIdColAcol() {
297 setId( id1, id2, 22, 22);
298 setColAcol( 1, 2, 2, 1, 0, 0, 0, 0);
312 void Sigma2ff2fftgmZ::initProc() {
315 gmZmode = mode(
"WeakZ0:gmZmode");
316 mZ = particleDataPtr->m0(23);
318 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
319 * coupSMPtr->cos2thetaW());
327 void Sigma2ff2fftgmZ::sigmaKin() {
330 double sigma0 = (M_PI / sH2) * pow2(alpEM);
333 sigmagmgm = sigma0 * 2. * (sH2 + uH2) / tH2;
334 sigmagmZ = sigma0 * 4. * thetaWRat * sH2 / (tH * (tH - mZS));
335 sigmaZZ = sigma0 * 2. * pow2(thetaWRat) * sH2 / pow2(tH - mZS);
336 if (gmZmode == 1) {sigmagmZ = 0.; sigmaZZ = 0.;}
337 if (gmZmode == 2) {sigmagmgm = 0.; sigmagmZ = 0.;}
345 double Sigma2ff2fftgmZ::sigmaHat() {
348 int id1Abs = abs(id1);
349 double e1 = coupSMPtr->ef(id1Abs);
350 double v1 = coupSMPtr->vf(id1Abs);
351 double a1 = coupSMPtr->af(id1Abs);
352 int id2Abs = abs(id2);
353 double e2 = coupSMPtr->ef(id2Abs);
354 double v2 = coupSMPtr->vf(id2Abs);
355 double a2 = coupSMPtr->af(id2Abs);
358 double epsi = (id1 * id2 > 0) ? 1. : -1.;
361 double sigma = sigmagmgm * pow2(e1 * e2)
362 + sigmagmZ * e1 * e2 * (v1 * v2 * (1. + uH2 / sH2)
363 + a1 * a2 * epsi * (1. - uH2 / sH2))
364 + sigmaZZ * ((v1*v1 + a1*a1) * (v2*v2 + a2*a2) * (1. + uH2 / sH2)
365 + 4. * v1 * a1 * v2 * a2 * epsi * (1. - uH2 / sH2));
368 if (id1Abs == 12 || id1Abs == 14 || id1Abs == 16) sigma *= 2.;
369 if (id2Abs == 12 || id2Abs == 14 || id2Abs == 16) sigma *= 2.;
380 void Sigma2ff2fftgmZ::setIdColAcol() {
383 setId( id1, id2, id1, id2);
386 if (abs(id1) < 9 && abs(id2) < 9 && id1*id2 > 0)
387 setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
388 else if (abs(id1) < 9 && abs(id2) < 9)
389 setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
390 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 0, 1, 0, 0, 0);
391 else if (abs(id2) < 9) setColAcol( 0, 0, 1, 0, 0, 0, 1, 0);
392 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
393 if ( (abs(id1) < 9 && id1 < 0) || (abs(id1) > 10 && id2 < 0) )
408 void Sigma2ff2fftW::initProc() {
411 mW = particleDataPtr->m0(24);
413 thetaWRat = 1. / (4. * coupSMPtr->sin2thetaW());
421 void Sigma2ff2fftW::sigmaKin() {
424 sigma0 = (M_PI / sH2) * pow2(alpEM * thetaWRat)
425 * 4. * sH2 / pow2(tH - mWS);
433 double Sigma2ff2fftW::sigmaHat() {
436 int id1Abs = abs(id1);
437 int id2Abs = abs(id2);
438 if ( (id1Abs%2 == id2Abs%2 && id1 * id2 > 0)
439 || (id1Abs%2 != id2Abs%2 && id1 * id2 < 0) )
return 0.;
442 double sigma = sigma0;
443 if (id1 * id2 < 0) sigma *= uH2 / sH2;
446 sigma *= coupSMPtr->V2CKMsum(id1Abs) * coupSMPtr->V2CKMsum(id2Abs);
449 if (id1Abs == 12 || id1Abs == 14 || id1Abs == 16) sigma *= 2.;
450 if (id2Abs == 12 || id2Abs == 14 || id2Abs == 16) sigma *= 2.;
461 void Sigma2ff2fftW::setIdColAcol() {
464 id3 = coupSMPtr->V2CKMpick(id1);
465 id4 = coupSMPtr->V2CKMpick(id2);
466 setId( id1, id2, id3, id4);
469 if (abs(id1) < 9 && abs(id2) < 9 && id1*id2 > 0)
470 setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
471 else if (abs(id1) < 9 && abs(id2) < 9)
472 setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
473 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 0, 1, 0, 0, 0);
474 else if (abs(id2) < 9) setColAcol( 0, 0, 1, 0, 0, 0, 1, 0);
475 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
476 if ( (abs(id1) < 9 && id1 < 0) || (abs(id1) > 10 && id2 < 0) )
492 void Sigma2qq2QqtW::initProc() {
495 nameSave =
"q q -> Q q (t-channel W+-)";
496 if (idNew == 4) nameSave =
"q q -> c q (t-channel W+-)";
497 if (idNew == 5) nameSave =
"q q -> b q (t-channel W+-)";
498 if (idNew == 6) nameSave =
"q q -> t q (t-channel W+-)";
499 if (idNew == 7) nameSave =
"q q -> b' q (t-channel W+-)";
500 if (idNew == 8) nameSave =
"q q -> t' q (t-channel W+-)";
503 mW = particleDataPtr->m0(24);
505 thetaWRat = 1. / (4. * coupSMPtr->sin2thetaW());
508 openFracPos = particleDataPtr->resOpenFrac(idNew);
509 openFracNeg = particleDataPtr->resOpenFrac(-idNew);
517 void Sigma2qq2QqtW::sigmaKin() {
520 sigma0 = (M_PI / sH2) * pow2(alpEM * thetaWRat) * 4. / pow2(tH - mWS);
528 double Sigma2qq2QqtW::sigmaHat() {
531 int id1Abs = abs(id1);
532 int id2Abs = abs(id2);
533 bool diff12 = (id1Abs%2 != id2Abs%2);
534 if ( (!diff12 && id1 * id2 > 0)
535 || ( diff12 && id1 * id2 < 0) )
return 0.;
538 double sigma = sigma0;
539 sigma *= (id1 * id2 > 0) ? sH * (sH - s3) : uH * (uH - s3);
542 double openFrac1 = (id1 > 0) ? openFracPos : openFracNeg;
543 double openFrac2 = (id2 > 0) ? openFracPos : openFracNeg;
546 bool diff1N = (id1Abs%2 != idNew%2);
547 bool diff2N = (id2Abs%2 != idNew%2);
548 if (diff1N && diff2N)
549 sigma *= ( coupSMPtr->V2CKMid(id1Abs, idNew) * openFrac1
550 * coupSMPtr->V2CKMsum(id2Abs) + coupSMPtr->V2CKMsum(id1Abs)
551 * coupSMPtr->V2CKMid(id2Abs, idNew) * openFrac2 );
553 sigma *= coupSMPtr->V2CKMid(id1Abs, idNew) * openFrac1
554 * coupSMPtr->V2CKMsum(id2Abs);
556 sigma *= coupSMPtr->V2CKMsum(id1Abs)
557 * coupSMPtr->V2CKMid(id2Abs, idNew) * openFrac2;
561 if (id1Abs == 12 || id1Abs == 14 || id1Abs == 16) sigma *= 2.;
562 if (id2Abs == 12 || id2Abs == 14 || id2Abs == 16) sigma *= 2.;
573 void Sigma2qq2QqtW::setIdColAcol() {
576 int id1Abs = abs(id1);
577 int id2Abs = abs(id2);
579 if ( (id1Abs + idNew)%2 == 1 && (id2Abs + idNew)%2 == 1 ) {
580 double prob1 = coupSMPtr->V2CKMid(id1Abs, idNew)
581 * coupSMPtr->V2CKMsum(id2Abs);
582 prob1 *= (id1 > 0) ? openFracPos : openFracNeg;
583 double prob2 = coupSMPtr->V2CKMid(id2Abs, idNew)
584 * coupSMPtr->V2CKMsum(id1Abs);
585 prob2 *= (id2 > 0) ? openFracPos : openFracNeg;
586 if (prob2 > rndmPtr->flat() * (prob1 + prob2)) side = 2;
588 else if ((id2Abs + idNew)%2 == 1) side = 2;
593 id3 = (id1 > 0) ? idNew : -idNew;
594 id4 = coupSMPtr->V2CKMpick(id2);
595 setId( id1, id2, id3, id4);
599 id3 = coupSMPtr->V2CKMpick(id1);
600 id4 = (id2 > 0) ? idNew : -idNew;
601 setId( id1, id2, id4, id3);
605 if (side == 1 && id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
606 else if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
607 else if (side == 1) setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
608 else setColAcol( 1, 0, 0, 2, 0, 2, 1, 0);
609 if (id1 < 0) swapColAcol();
617 double Sigma2qq2QqtW::weightDecay(
Event& process,
int iResBeg,
621 if (idNew == 6 && process[process[iResBeg].mother1()].idAbs() == 6)
622 return weightTopDecay( process, iResBeg, iResEnd);
636 void Sigma1ffbar2gmZ::initProc() {
639 gmZmode = mode(
"WeakZ0:gmZmode");
642 mRes = particleDataPtr->m0(23);
643 GammaRes = particleDataPtr->mWidth(23);
645 GamMRat = GammaRes / mRes;
646 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
647 * coupSMPtr->cos2thetaW());
650 particlePtr = particleDataPtr->particleDataEntryPtr(23);
658 void Sigma1ffbar2gmZ::sigmaKin() {
661 double colQ = 3. * (1. + alpS / M_PI);
668 double mf, mr, psvec, psaxi, betaf, ef2, efvf, vf2af2, colf;
671 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
672 idAbs = abs( particlePtr->channel(i).product(0) );
675 if ( (idAbs > 0 && idAbs < 6) || ( idAbs > 10 && idAbs < 17)) {
676 mf = particleDataPtr->m0(idAbs);
679 if (mH > 2. * mf + MASSMARGIN) {
681 betaf = sqrtpos(1. - 4. * mr);
682 psvec = betaf * (1. + 2. * mr);
686 ef2 = coupSMPtr->ef2(idAbs) * psvec;
687 efvf = coupSMPtr->efvf(idAbs) * psvec;
688 vf2af2 = coupSMPtr->vf2(idAbs) * psvec
689 + coupSMPtr->af2(idAbs) * psaxi;
690 colf = (idAbs < 6) ? colQ : 1.;
693 onMode = particlePtr->channel(i).onMode();
694 if (onMode == 1 || onMode == 2) {
695 gamSum += colf * ef2;
696 intSum += colf * efvf;
697 resSum += colf * vf2af2;
706 gamProp = 4. * M_PI * pow2(alpEM) / (3. * sH);
707 intProp = gamProp * 2. * thetaWRat * sH * (sH - m2Res)
708 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
709 resProp = gamProp * pow2(thetaWRat * sH)
710 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
713 if (gmZmode == 1) {intProp = 0.; resProp = 0.;}
714 if (gmZmode == 2) {gamProp = 0.; intProp = 0.;}
722 double Sigma1ffbar2gmZ::sigmaHat() {
725 int idAbs = abs(id1);
726 double sigma = coupSMPtr->ef2(idAbs) * gamProp * gamSum
727 + coupSMPtr->efvf(idAbs) * intProp * intSum
728 + coupSMPtr->vf2af2(idAbs) * resProp * resSum;
731 if (idAbs < 9) sigma /= 3.;
740 void Sigma1ffbar2gmZ::setIdColAcol() {
743 setId( id1, id2, 23);
746 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
747 else setColAcol( 0, 0, 0, 0, 0, 0);
748 if (id1 < 0) swapColAcol();
756 double Sigma1ffbar2gmZ::weightDecay(
Event& process,
int iResBeg,
760 if (iResBeg != 5 || iResEnd != 5)
return 1.;
763 int idInAbs = process[3].idAbs();
764 double ei = coupSMPtr->ef(idInAbs);
765 double vi = coupSMPtr->vf(idInAbs);
766 double ai = coupSMPtr->af(idInAbs);
767 int idOutAbs = process[6].idAbs();
768 double ef = coupSMPtr->ef(idOutAbs);
769 double vf = coupSMPtr->vf(idOutAbs);
770 double af = coupSMPtr->af(idOutAbs);
773 double mf = process[6].m();
774 double mr = mf*mf / sH;
775 double betaf = sqrtpos(1. - 4. * mr);
778 double coefTran = ei*ei * gamProp * ef*ef + ei * vi * intProp * ef * vf
779 + (vi*vi + ai*ai) * resProp * (vf*vf + pow2(betaf) * af*af);
780 double coefLong = 4. * mr * ( ei*ei * gamProp * ef*ef
781 + ei * vi * intProp * ef * vf + (vi*vi + ai*ai) * resProp * vf*vf );
782 double coefAsym = betaf * ( ei * ai * intProp * ef * af
783 + 4. * vi * ai * resProp * vf * af );
786 if (process[3].
id() * process[6].id() < 0) coefAsym = -coefAsym;
789 double cosThe = (process[3].p() - process[4].p())
790 * (process[7].p() - process[6].p()) / (sH * betaf);
791 double wtMax = 2. * (coefTran + abs(coefAsym));
792 double wt = coefTran * (1. + pow2(cosThe))
793 + coefLong * (1. - pow2(cosThe)) + 2. * coefAsym * cosThe;
809 void Sigma1ffbar2W::initProc() {
812 mRes = particleDataPtr->m0(24);
813 GammaRes = particleDataPtr->mWidth(24);
815 GamMRat = GammaRes / mRes;
816 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
819 particlePtr = particleDataPtr->particleDataEntryPtr(24);
827 void Sigma1ffbar2W::sigmaKin() {
830 double sigBW = 12. * M_PI / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
831 double preFac = alpEM * thetaWRat * mH;
832 sigma0Pos = preFac * sigBW * particlePtr->resWidthOpen(24, mH);
833 sigma0Neg = preFac * sigBW * particlePtr->resWidthOpen(-24, mH);
841 double Sigma1ffbar2W::sigmaHat() {
844 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
845 double sigma = (idUp > 0) ? sigma0Pos : sigma0Neg;
846 if (abs(id1) < 9) sigma *= coupSMPtr->V2CKMid(abs(id1), abs(id2)) / 3.;
857 void Sigma1ffbar2W::setIdColAcol() {
860 int sign = 1 - 2 * (abs(id1)%2);
861 if (id1 < 0) sign = -sign;
862 setId( id1, id2, 24 * sign);
865 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
866 else setColAcol( 0, 0, 0, 0, 0, 0);
867 if (id1 < 0) swapColAcol();
875 double Sigma1ffbar2W::weightDecay(
Event& process,
int iResBeg,
879 if (iResBeg != 5 || iResEnd != 5)
return 1.;
882 double mr1 = pow2(process[6].m()) / sH;
883 double mr2 = pow2(process[7].m()) / sH;
884 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
887 double eps = (process[3].id() * process[6].id() > 0) ? 1. : -1.;
890 double cosThe = (process[3].p() - process[4].p())
891 * (process[7].p() - process[6].p()) / (sH * betaf);
893 double wt = pow2(1. + betaf * eps * cosThe) - pow2(mr1 - mr2);
909 void Sigma2ffbar2ffbarsgm::sigmaKin() {
912 double colQ = 1. + (alpS / M_PI);
913 double flavWt = 3. + colQ * 11. / 3.;
914 double flavRndm = rndmPtr->flat() * flavWt;
916 if (flavRndm < 1.) idNew = 11;
917 else if (flavRndm < 2.) idNew = 13;
920 flavRndm = 3. * (flavRndm - 3.) / colQ;
921 if (flavRndm < 4.) idNew = 2;
922 else if (flavRndm < 8.) idNew = 4;
923 else if (flavRndm < 9.) idNew = 1;
924 else if (flavRndm < 10.) idNew = 3;
927 double mNew = particleDataPtr->m0(idNew);
928 double m2New = mNew*mNew;
935 if (sH > 4. * m2New) {
936 double beta = sqrt(1. - 4. * m2New / sH);
937 sigS = beta * (2.* (tH2 + uH2) + 4. * (1. - beta * beta) * tH * uH)
942 sigma0 = (M_PI/sH2) * pow2(alpEM) * sigS * flavWt;
950 double Sigma2ffbar2ffbarsgm::sigmaHat() {
953 double eNow = coupSMPtr->ef( abs(id1) );
954 double sigma = sigma0 * pow2(eNow);
955 if (abs(id1) < 9) sigma /= 3.;
966 void Sigma2ffbar2ffbarsgm::setIdColAcol() {
969 id3 = (id1 > 0) ? idNew : -idNew;
970 setId( id1, id2, id3, -id3);
973 if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
974 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
975 else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
976 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
977 if (id1 < 0) swapColAcol();
991 void Sigma2ffbar2ffbarsgmZ::initProc() {
994 gmZmode = mode(
"WeakZ0:gmZmode");
997 mRes = particleDataPtr->m0(23);
998 GammaRes = particleDataPtr->mWidth(23);
1000 GamMRat = GammaRes / mRes;
1001 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
1002 * coupSMPtr->cos2thetaW());
1005 particlePtr = particleDataPtr->particleDataEntryPtr(23);
1013 void Sigma2ffbar2ffbarsgmZ::sigmaKin() {
1016 colQ = 3. * (1. + alpS / M_PI);
1037 double mf, mr, betaf, ef, vf, af, colf, gamTf, gamLf, intTf, intLf,
1038 intAf, resTf, resLf, resAf;
1041 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
1042 onMode = particlePtr->channel(i).onMode();
1043 idAbs = abs( particlePtr->channel(i).product(0) );
1046 if ( (onMode == 1 || onMode == 2) && ((idAbs > 0 && idAbs < 6)
1047 || ( idAbs > 10 && idAbs < 17)) ) {
1048 mf = particleDataPtr->m0(idAbs);
1051 if (mH > 2. * mf + MASSMARGIN) {
1053 betaf = sqrtpos(1. - 4. * mr);
1056 ef = coupSMPtr->ef(idAbs);
1057 vf = coupSMPtr->vf(idAbs);
1058 af = coupSMPtr->af(idAbs);
1059 colf = (idAbs < 6) ? colQ : 1.;
1060 gamTf = colf * ef * ef * betaf;
1061 gamLf = gamTf * 4. * mr;
1062 intTf = colf * ef * vf * betaf;
1063 intLf = intTf * 4. * mr;
1064 intAf = colf * ef * af * betaf;
1065 resTf = colf * (vf * vf * betaf + af * af * pow3(betaf));
1066 resLf = colf * vf * vf * betaf * 4. * mr;
1067 resAf = colf * vf * af * betaf * 4.;
1070 idVec.push_back(idAbs);
1071 gamT.push_back(gamTf);
1072 gamL.push_back(gamLf);
1073 intT.push_back(intTf);
1074 intL.push_back(intLf);
1075 intA.push_back(intAf);
1076 resT.push_back(resTf);
1077 resL.push_back(resLf);
1078 resA.push_back(resAf);
1094 gamProp = M_PI * pow2(alpEM) / sH2;
1095 intProp = gamProp * 2. * thetaWRat * sH * (sH - m2Res)
1096 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1097 resProp = gamProp * pow2(thetaWRat * sH)
1098 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1101 if (gmZmode == 1) {intProp = 0.; resProp = 0.;}
1102 if (gmZmode == 2) {gamProp = 0.; intProp = 0.;}
1105 cThe = (tH - uH) / sH;
1113 double Sigma2ffbar2ffbarsgmZ::sigmaHat() {
1116 int id1Abs = abs(id1);
1117 double ei = coupSMPtr->ef(id1Abs);
1118 double vi = coupSMPtr->vf(id1Abs);
1119 double ai = coupSMPtr->af(id1Abs);
1122 double coefT = ei*ei * gamProp * gamSumT + ei*vi * intProp * intSumT
1123 + (vi*vi + ai*ai) * resProp * resSumT;
1124 double coefL = ei*ei * gamProp * gamSumL + ei*vi * intProp * intSumL
1125 + (vi*vi + ai*ai) * resProp * resSumL;
1126 double coefA = ei*ai * intProp * intSumA + vi*ai * resProp * resSumA;
1129 double sigma = coefT * (1. + pow2(cThe)) + coefL * (1. - pow2(cThe))
1130 + 2. * coefA * cThe;
1131 if (id1Abs < 9) sigma /= 3.;
1140 void Sigma2ffbar2ffbarsgmZ::setIdColAcol() {
1143 int id1Abs = abs(id1);
1144 double ei = coupSMPtr->ef(id1Abs);
1145 double vi = coupSMPtr->vf(id1Abs);
1146 double ai = coupSMPtr->af(id1Abs);
1150 for (
int i = 0; i < int(idVec.size()); ++i) {
1151 double coefT = ei*ei * gamProp * gamT[i] + ei*vi * intProp * intT[i]
1152 + (vi*vi + ai*ai) * resProp * resT[i];
1153 double coefL = ei*ei * gamProp * gamL[i] + ei*vi * intProp * intL[i]
1154 + (vi*vi + ai*ai) * resProp * resL[i];
1155 double coefA = ei*ai * intProp * intA[i] + vi*ai * resProp * resA[i];
1156 double sigma = coefT * (1. + pow2(cThe)) + coefL * (1. - pow2(cThe))
1157 + 2. * coefA * cThe;
1158 sigTLA.push_back(sigma);
1162 int idNew = idVec[ rndmPtr->pick(sigTLA) ];
1163 id3 = (id1 > 0) ? idNew : -idNew;
1164 setId( id1, id2, id3, -id3);
1167 if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1168 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1169 else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1170 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1171 if (id1 < 0) swapColAcol();
1185 void Sigma2ffbar2ffbarsW::initProc() {
1188 mRes = particleDataPtr->m0(24);
1189 GammaRes = particleDataPtr->mWidth(24);
1191 GamMRat = GammaRes / mRes;
1192 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
1195 particlePtr = particleDataPtr->particleDataEntryPtr(24);
1203 void Sigma2ffbar2ffbarsW::sigmaKin() {
1206 double sigBW = 12. * M_PI / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1207 double preFac = alpEM * thetaWRat * mH;
1208 sigma0 = preFac * sigBW * particlePtr->resWidthOpen(24, mH);
1211 sigma0 *= 3. * uH2 / (sH2 * sH);
1214 if (!particlePtr->preparePick(24, mH)) {
1218 DecayChannel& channel = particlePtr->pickChannel();
1219 id3New = channel.product(0);
1220 id4New = channel.product(1);
1228 double Sigma2ffbar2ffbarsW::sigmaHat() {
1231 double sigma = sigma0;
1232 if (abs(id1) < 9) sigma *= coupSMPtr->V2CKMid(abs(id1), abs(id2)) / 3.;
1243 void Sigma2ffbar2ffbarsW::setIdColAcol() {
1246 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
1247 id3 = (idUp > 0) ? id3New : -id3New;
1248 id4 = (idUp > 0) ? id4New : -id4New;
1249 if (id1 * id3 < 0) swap(id3, id4);
1250 setId( id1, id2, id3, id4);
1253 if (abs(id1) < 9 && abs(id3) < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1254 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1255 else if (abs(id3) < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1256 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1257 if (id1 < 0) swapColAcol();
1270 void Sigma2ffbar2FFbarsgmZ::initProc() {
1273 nameSave =
"f fbar -> F Fbar (s-channel gamma*/Z0)";
1274 if (idNew == 4) nameSave =
"f fbar -> c cbar (s-channel gamma*/Z0)";
1275 if (idNew == 5) nameSave =
"f fbar -> b bbar (s-channel gamma*/Z0)";
1276 if (idNew == 6) nameSave =
"f fbar -> t tbar (s-channel gamma*/Z0)";
1277 if (idNew == 7) nameSave =
"f fbar -> b' b'bar (s-channel gamma*/Z0)";
1278 if (idNew == 8) nameSave =
"f fbar -> t' t'bar (s-channel gamma*/Z0)";
1279 if (idNew == 15) nameSave =
"f fbar -> tau+ tau- (s-channel gamma*/Z0)";
1280 if (idNew == 17) nameSave =
"f fbar -> tau'+ tau'- (s-channel gamma*/Z0)";
1282 nameSave =
"f fbar -> nu'_tau nu'bar_tau (s-channel gamma*/Z0)";
1285 gmZmode = mode(
"WeakZ0:gmZmode");
1288 mRes = particleDataPtr->m0(23);
1289 GammaRes = particleDataPtr->mWidth(23);
1291 GamMRat = GammaRes / mRes;
1292 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
1293 * coupSMPtr->cos2thetaW());
1296 ef = coupSMPtr->ef(idNew);
1297 vf = coupSMPtr->vf(idNew);
1298 af = coupSMPtr->af(idNew);
1301 openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
1309 void Sigma2ffbar2FFbarsgmZ::sigmaKin() {
1313 if (mH < m3 + m4 + MASSMARGIN) {
1319 double s34Avg = 0.5 * (s3 + s4) - 0.25 * pow2(s3 - s4) / sH;
1321 betaf = sqrtpos(1. - 4. * mr);
1324 double colF = (idNew < 9) ? 3. * (1. + alpS / M_PI) : 1.;
1327 cosThe = (tH - uH) / (betaf * sH);
1330 gamProp = colF * M_PI * pow2(alpEM) / sH2;
1331 intProp = gamProp * 2. * thetaWRat * sH * (sH - m2Res)
1332 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1333 resProp = gamProp * pow2(thetaWRat * sH)
1334 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1337 if (gmZmode == 1) {intProp = 0.; resProp = 0.;}
1338 if (gmZmode == 2) {gamProp = 0.; intProp = 0.;}
1346 double Sigma2ffbar2FFbarsgmZ::sigmaHat() {
1349 if (!isPhysical)
return 0.;
1352 int idAbs = abs(id1);
1353 double ei = coupSMPtr->ef(idAbs);
1354 double vi = coupSMPtr->vf(idAbs);
1355 double ai = coupSMPtr->af(idAbs);
1358 double coefTran = ei*ei * gamProp * ef*ef + ei * vi * intProp * ef * vf
1359 + (vi*vi + ai*ai) * resProp * (vf*vf + pow2(betaf) * af*af);
1360 double coefLong = 4. * mr * ( ei*ei * gamProp * ef*ef
1361 + ei * vi * intProp * ef * vf + (vi*vi + ai*ai) * resProp * vf*vf );
1362 double coefAsym = betaf * ( ei * ai * intProp * ef * af
1363 + 4. * vi * ai * resProp * vf * af );
1366 double sigma = coefTran * (1. + pow2(cosThe))
1367 + coefLong * (1. - pow2(cosThe)) + 2. * coefAsym * cosThe;
1370 sigma *= openFracPair;
1373 if (idAbs < 9) sigma /= 3.;
1382 void Sigma2ffbar2FFbarsgmZ::setIdColAcol() {
1385 id3 = (id1 > 0) ? idNew : -idNew;
1386 setId( id1, id2, id3, -id3);
1389 if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1390 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1391 else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1392 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1393 if (id1 < 0) swapColAcol();
1401 double Sigma2ffbar2FFbarsgmZ::weightDecay(
Event& process,
int iResBeg,
1405 if (idNew == 6 && process[process[iResBeg].mother1()].idAbs() == 6)
1406 return weightTopDecay( process, iResBeg, iResEnd);
1420 void Sigma2ffbar2FfbarsW::initProc() {
1423 nameSave =
"f fbar -> F fbar (s-channel W+-)";
1424 if (idNew == 4) nameSave =
"f fbar -> c qbar (s-channel W+-)";
1425 if (idNew == 5) nameSave =
"f fbar -> b qbar (s-channel W+-)";
1426 if (idNew == 6) nameSave =
"f fbar -> t qbar (s-channel W+-)";
1427 if (idNew == 7) nameSave =
"f fbar -> b' qbar (s-channel W+-)";
1428 if (idNew == 8) nameSave =
"f fbar -> t' qbar (s-channel W+-)";
1429 if (idNew == 7 && idNew2 == 6)
1430 nameSave =
"f fbar -> b' tbar (s-channel W+-)";
1431 if (idNew == 8 && idNew2 == 7)
1432 nameSave =
"f fbar -> t' b'bar (s-channel W+-)";
1433 if (idNew == 15 || idNew == 16)
1434 nameSave =
"f fbar -> tau nu_taubar (s-channel W+-)";
1435 if (idNew == 17 || idNew == 18)
1436 nameSave =
"f fbar -> tau' nu'_taubar (s-channel W+-)";
1439 mRes = particleDataPtr->m0(24);
1440 GammaRes = particleDataPtr->mWidth(24);
1442 GamMRat = GammaRes / mRes;
1443 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
1447 if ( (idNew == 6 || idNew == 8) && idNew2 == 0 ) idPartner = 5;
1450 V2New = (idNew < 9) ? coupSMPtr->V2CKMsum(idNew) : 1.;
1451 if (idNew2 != 0) V2New = coupSMPtr->V2CKMid(idNew, idNew2);
1454 openFracPos = particleDataPtr->resOpenFrac( idNew, -idNew2);
1455 openFracNeg = particleDataPtr->resOpenFrac(-idNew, idNew2);
1463 void Sigma2ffbar2FfbarsW::sigmaKin() {
1467 if (mH < m3 + m4 + MASSMARGIN) {
1473 double mr1 = s3 / sH;
1474 double mr2 = s4 / sH;
1475 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
1478 double cosThe = (tH - uH) / (betaf * sH);
1481 double sigBW = 9. * M_PI * pow2(alpEM * thetaWRat)
1482 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1485 double colF = (idNew < 9) ? 3. * (1. + alpS / M_PI) * V2New : 1.;
1488 double wt = pow2(1. + betaf * cosThe) - pow2(mr1 - mr2);
1491 sigma0 = sigBW * colF * wt;
1499 double Sigma2ffbar2FfbarsW::sigmaHat() {
1502 if (!isPhysical)
return 0.;
1505 double sigma = sigma0;
1506 if (abs(id1) < 9) sigma *= coupSMPtr->V2CKMid(abs(id1), abs(id2)) / 3.;
1509 int idSame = ((abs(id1) + idNew)%2 == 0) ? id1 : id2;
1510 sigma *= (idSame > 0) ? openFracPos : openFracNeg;
1521 void Sigma2ffbar2FfbarsW::setIdColAcol() {
1525 id4 = (idNew2 != 0) ? idNew2 : coupSMPtr->V2CKMpick(idNew);
1527 int idInUp = (abs(id1)%2 == 0) ? id1 : id2;
1528 if (idInUp > 0) id4 = -id4;
1531 int idInDn = (abs(id1)%2 == 1) ? id1 : id2;
1532 if (idInDn > 0) id4 = -id4;
1535 setId( id1, id2, id3, id4);
1538 if (id1 * id3 < 0) swapTU =
true;
1541 if (abs(id1) < 9 && idNew < 9) setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
1542 else if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1543 else if (idNew < 9) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
1544 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1545 if (id1 < 0) swapCol12();
1546 if (id3 < 0) swapCol34();
1554 double Sigma2ffbar2FfbarsW::weightDecay(
Event& process,
int iResBeg,
1558 if (idNew == 6 && process[process[iResBeg].mother1()].idAbs() == 6)
1559 return weightTopDecay( process, iResBeg, iResEnd);
1573 void Sigma2ffbargmZWgmZW::setupProd(
Event& process,
int i1,
int i2,
1574 int i3,
int i4,
int i5,
int i6) {
1577 pRot[1] = process[i1].p();
1578 pRot[2] = process[i2].p();
1579 pRot[3] = process[i3].p();
1580 pRot[4] = process[i4].p();
1581 pRot[5] = process[i5].p();
1582 pRot[6] = process[i6].p();
1585 bool smallPT =
false;
1588 double thetaNow = acos(2. * rndmPtr->flat() - 1.);
1589 double phiNow = 2. * M_PI * rndmPtr->flat();
1590 for (
int i = 1; i <= 6; ++i) {
1591 pRot[i].rot( thetaNow, phiNow);
1592 if (pRot[i].pT2() < 1e-4 * pRot[i].pAbs2()) smallPT =
true;
1597 for (
int i = 1; i < 6; ++i) {
1598 for (
int j = i + 1; j <= 6; ++j) {
1600 sqrt( (pRot[i].e() - pRot[i].pz()) * (pRot[j].e() + pRot[j].pz())
1601 / pRot[i].pT2() ) * complex( pRot[i].px(), pRot[i].py() )
1602 - sqrt( (pRot[i].e() + pRot[i].pz()) * (pRot[j].e() - pRot[j].pz())
1603 / pRot[j].pT2() ) * complex( pRot[j].px(), pRot[j].py() );
1604 hC[i][j] = conj( hA[i][j] );
1606 hA[i][j] *= complex( 0., 1.);
1607 hC[i][j] *= complex( 0., 1.);
1609 hA[j][i] = - hA[i][j];
1610 hC[j][i] = - hC[i][j];
1620 complex Sigma2ffbargmZWgmZW::fGK(
int j1,
int j2,
int j3,
int j4,
int j5,
1623 return 4. * hA[j1][j3] * hC[j2][j6]
1624 * ( hA[j1][j5] * hC[j1][j4] + hA[j3][j5] * hC[j3][j4] );
1632 double Sigma2ffbargmZWgmZW::xiGK(
double tHnow,
double uHnow) {
1634 return - 4. * s3 * s4 + tHnow * (3. * tHnow + 4. * uHnow)
1635 + tHnow * tHnow * ( tHnow * uHnow / (s3 * s4)
1636 - 2. * (1. / s3 + 1./s4) * (tHnow + uHnow)
1637 + 2. * (s3 / s4 + s4 / s3) );
1645 double Sigma2ffbargmZWgmZW::xjGK(
double tHnow,
double uHnow) {
1647 return 8. * pow2(s3 + s4) - 8. * (s3 + s4) * (tHnow + uHnow)
1648 - 6. * tHnow * uHnow - 2. * tHnow * uHnow * ( tHnow * uHnow
1649 / (s3 * s4) - 2. * (1. / s3 + 1. / s4) * (tHnow + uHnow)
1650 + 2. * (s3 / s4 + s4 / s3) );
1663 void Sigma2ffbar2gmZgmZ::initProc() {
1666 gmZmode = mode(
"WeakZ0:gmZmode");
1669 mRes = particleDataPtr->m0(23);
1670 GammaRes = particleDataPtr->mWidth(23);
1672 GamMRat = GammaRes / mRes;
1673 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
1674 * coupSMPtr->cos2thetaW());
1677 particlePtr = particleDataPtr->particleDataEntryPtr(23);
1685 void Sigma2ffbar2gmZgmZ::sigmaKin() {
1688 sigma0 = (M_PI / sH2) * pow2(alpEM) * 0.5
1689 * ( (tH2 + uH2 + 2. * (s3 + s4) * sH) / (tH * uH)
1690 - s3 * s4 * (1./tH2 + 1./uH2) );
1693 double alpEM3 = coupSMPtr->alphaEM(s3);
1694 double alpS3 = coupSMPtr->alphaS(s3);
1695 double colQ3 = 3. * (1. + alpS3 / M_PI);
1696 double alpEM4 = coupSMPtr->alphaEM(s4);
1697 double alpS4 = coupSMPtr->alphaS(s4);
1698 double colQ4 = 3. * (1. + alpS4 / M_PI);
1708 double mf, mr, psvec, psaxi, betaf, ef2, efvf, vf2af2, colf;
1711 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
1712 int idAbs = abs( particlePtr->channel(i).product(0) );
1715 if ( (idAbs > 0 && idAbs < 6) || ( idAbs > 10 && idAbs < 17)) {
1716 mf = particleDataPtr->m0(idAbs);
1717 onMode = particlePtr->channel(i).onMode();
1720 if (m3 > 2. * mf + MASSMARGIN) {
1722 betaf = sqrtpos(1. - 4. * mr);
1723 psvec = betaf * (1. + 2. * mr);
1724 psaxi = pow3(betaf);
1727 ef2 = coupSMPtr->ef2(idAbs) * psvec;
1728 efvf = coupSMPtr->efvf(idAbs) * psvec;
1729 vf2af2 = coupSMPtr->vf2(idAbs) * psvec
1730 + coupSMPtr->af2(idAbs) * psaxi;
1731 colf = (idAbs < 6) ? colQ3 : 1.;
1734 if (onMode == 1 || onMode == 2) {
1735 gamSum3 += colf * ef2;
1736 intSum3 += colf * efvf;
1737 resSum3 += colf * vf2af2;
1742 if (m4 > 2. * mf + MASSMARGIN) {
1744 betaf = sqrtpos(1. - 4. * mr);
1745 psvec = betaf * (1. + 2. * mr);
1746 psaxi = pow3(betaf);
1749 ef2 = coupSMPtr->ef2(idAbs) * psvec;
1750 efvf = coupSMPtr->efvf(idAbs) * psvec;
1751 vf2af2 = coupSMPtr->vf2(idAbs) * psvec
1752 + coupSMPtr->af2(idAbs) * psaxi;
1753 colf = (idAbs < 6) ? colQ4 : 1.;
1756 if (onMode == 1 || onMode == 2) {
1757 gamSum4 += colf * ef2;
1758 intSum4 += colf * efvf;
1759 resSum4 += colf * vf2af2;
1768 gamProp3 = 4. * alpEM3 / (3. * M_PI * s3);
1769 intProp3 = gamProp3 * 2. * thetaWRat * s3 * (s3 - m2Res)
1770 / ( pow2(s3 - m2Res) + pow2(s3 * GamMRat) );
1771 resProp3 = gamProp3 * pow2(thetaWRat * s3)
1772 / ( pow2(s3 - m2Res) + pow2(s3 * GamMRat) );
1775 if (gmZmode == 1) {intProp3 = 0.; resProp3 = 0.;}
1776 if (gmZmode == 2) {gamProp3 = 0.; intProp3 = 0.;}
1779 gamProp4 = 4. * alpEM4 / (3. * M_PI * s4);
1780 intProp4 = gamProp4 * 2. * thetaWRat * s4 * (s4 - m2Res)
1781 / ( pow2(s4 - m2Res) + pow2(s4 * GamMRat) );
1782 resProp4 = gamProp4 * pow2(thetaWRat * s4)
1783 / ( pow2(s4 - m2Res) + pow2(s4 * GamMRat) );
1786 if (gmZmode == 1) {intProp4 = 0.; resProp4 = 0.;}
1787 if (gmZmode == 2) {gamProp4 = 0.; intProp4 = 0.;}
1795 double Sigma2ffbar2gmZgmZ::sigmaHat() {
1798 int idAbs = abs(id1);
1799 double ei = 0.5 * coupSMPtr->ef(idAbs);
1800 double li = coupSMPtr->lf(idAbs);
1801 double ri = coupSMPtr->rf(idAbs);
1804 double left3 = ei * ei * gamProp3 * gamSum3
1805 + ei * li * intProp3 * intSum3
1806 + li * li * resProp3 * resSum3;
1807 double right3 = ei * ei * gamProp3 * gamSum3
1808 + ei * ri * intProp3 * intSum3
1809 + ri * ri * resProp3 * resSum3;
1810 double left4 = ei * ei * gamProp4 * gamSum4
1811 + ei * li * intProp4 * intSum4
1812 + li * li * resProp4 * resSum4;
1813 double right4 = ei * ei * gamProp4 * gamSum4
1814 + ei * ri * intProp4 * intSum4
1815 + ri * ri * resProp4 * resSum4;
1818 double sigma = sigma0 * (left3 * left4 + right3 * right4);
1821 sigma /= (runBW3 * runBW4);
1824 if (idAbs < 9) sigma /= 3.;
1833 void Sigma2ffbar2gmZgmZ::setIdColAcol() {
1836 setId( id1, id2, 23, 23);
1839 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
1840 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
1841 if (id1 < 0) swapColAcol();
1850 double Sigma2ffbar2gmZgmZ::weightDecayFlav(
Event& process) {
1853 i1 = (process[3].id() < 0) ? 3 : 4;
1855 i3 = (process[7].id() > 0) ? 7 : 8;
1857 i5 = (process[9].id() > 0) ? 9 : 10;
1861 int idAbs = process[i1].idAbs();
1862 double ei = 0.5 * coupSMPtr->ef(idAbs);
1863 double li = coupSMPtr->lf(idAbs);
1864 double ri = coupSMPtr->rf(idAbs);
1865 idAbs = process[i3].idAbs();
1866 double e3 = 0.5 * coupSMPtr->ef(idAbs);
1867 double l3 = coupSMPtr->lf(idAbs);
1868 double r3 = coupSMPtr->rf(idAbs);
1869 idAbs = process[i5].idAbs();
1870 double e4 = 0.5 * coupSMPtr->ef(idAbs);
1871 double l4 = coupSMPtr->lf(idAbs);
1872 double r4 = coupSMPtr->rf(idAbs);
1875 c3LL = ei * ei * gamProp3 * e3 * e3
1876 + ei * li * intProp3 * e3 * l3
1877 + li * li * resProp3 * l3 * l3;
1878 c3LR = ei * ei * gamProp3 * e3 * e3
1879 + ei * li * intProp3 * e3 * r3
1880 + li * li * resProp3 * r3 * r3;
1881 c3RL = ei * ei * gamProp3 * e3 * e3
1882 + ei * ri * intProp3 * e3 * l3
1883 + ri * ri * resProp3 * l3 * l3;
1884 c3RR = ei * ei * gamProp3 * e3 * e3
1885 + ei * ri * intProp3 * e3 * r3
1886 + ri * ri * resProp3 * r3 * r3;
1887 c4LL = ei * ei * gamProp4 * e4 * e4
1888 + ei * li * intProp4 * e4 * l4
1889 + li * li * resProp4 * l4 * l4;
1890 c4LR = ei * ei * gamProp4 * e4 * e4
1891 + ei * li * intProp4 * e4 * r4
1892 + li * li * resProp4 * r4 * r4;
1893 c4RL = ei * ei * gamProp4 * e4 * e4
1894 + ei * ri * intProp4 * e4 * l4
1895 + ri * ri * resProp4 * l4 * l4;
1896 c4RR = ei * ei * gamProp4 * e4 * e4
1897 + ei * ri * intProp4 * e4 * r4
1898 + ri * ri * resProp4 * r4 * r4;
1901 flavWt = (c3LL + c3LR) * (c4LL + c4LR) + (c3RL + c3RR) * (c4RL + c4RR);
1902 double flavWtMax = (c3LL + c3LR + c3RL + c3RR) * (c4LL + c4LR + c4RL + c4RR);
1905 return flavWt / flavWtMax;
1913 double Sigma2ffbar2gmZgmZ::weightDecay(
Event& process,
int iResBeg,
1917 if (iResBeg != 5 || iResEnd != 6)
return 1.;
1920 setupProd( process, i1, i2, i3, i4, i5, i6);
1925 if (process[3].
id() > 0) swap( tHres, uHres);
1928 double fGK135 = norm( fGK( 1, 2, 3, 4, 5, 6) / tHres
1929 + fGK( 1, 2, 5, 6, 3, 4) / uHres );
1930 double fGK145 = norm( fGK( 1, 2, 4, 3, 5, 6) / tHres
1931 + fGK( 1, 2, 5, 6, 4, 3) / uHres );
1932 double fGK136 = norm( fGK( 1, 2, 3, 4, 6, 5) / tHres
1933 + fGK( 1, 2, 6, 5, 3, 4) / uHres );
1934 double fGK146 = norm( fGK( 1, 2, 4, 3, 6, 5) / tHres
1935 + fGK( 1, 2, 6, 5, 4, 3) / uHres );
1936 double fGK253 = norm( fGK( 2, 1, 5, 6, 3, 4) / tHres
1937 + fGK( 2, 1, 3, 4, 5, 6) / uHres );
1938 double fGK263 = norm( fGK( 2, 1, 6, 5, 3, 4) / tHres
1939 + fGK( 2, 1, 3, 4, 6, 5) / uHres );
1940 double fGK254 = norm( fGK( 2, 1, 5, 6, 4, 3) / tHres
1941 + fGK( 2, 1, 4, 3, 5, 6) / uHres );
1942 double fGK264 = norm( fGK( 2, 1, 6, 5, 4, 3) / tHres
1943 + fGK( 2, 1, 4, 3, 6, 5) / uHres );
1946 double wt = c3LL * c4LL * fGK135 + c3LR * c4LL * fGK145
1947 + c3LL * c4LR * fGK136 + c3LR * c4LR * fGK146
1948 + c3RL * c4RL * fGK253 + c3RR * c4RL * fGK263
1949 + c3RL * c4RR * fGK254 + c3RR * c4RR * fGK264;
1950 double wtMax = 16. * s3 * s4 * flavWt
1951 * ( (tHres*tHres + uHres*uHres + 2. * sH * (s3 + s4)) / (tHres * uHres)
1952 - s3 * s4 * (1. / (tHres*tHres) + 1. / (uHres*uHres)) );
1968 void Sigma2ffbar2ZW::initProc() {
1971 mW = particleDataPtr->m0(24);
1972 widW = particleDataPtr->mWidth(24);
1974 mwWS = pow2(mW * widW);
1977 lun = (hasLeptonBeams) ? coupSMPtr->lf(12) : coupSMPtr->lf(2);
1978 lde = (hasLeptonBeams) ? coupSMPtr->lf(11) : coupSMPtr->lf(1);
1981 sin2thetaW = coupSMPtr->sin2thetaW();
1982 cos2thetaW = coupSMPtr->cos2thetaW();
1983 thetaWRat = 1. / (4. * cos2thetaW);
1984 cotT = sqrt(cos2thetaW / sin2thetaW);
1985 thetaWpt = (9. - 8. * sin2thetaW) / 4.;
1986 thetaWmm = (8. * sin2thetaW - 6.) / 4.;
1989 openFracPos = particleDataPtr->resOpenFrac(23, 24);
1990 openFracNeg = particleDataPtr->resOpenFrac(23, -24);
1998 void Sigma2ffbar2ZW::sigmaKin() {
2025 double resBW = 1. / (pow2(sH - mWS) + mwWS);
2026 sigma0 = (M_PI / sH2) * 0.5 * pow2(alpEM / sin2thetaW);
2027 sigma0 *= sH * resBW * (thetaWpt * pT2 + thetaWmm * (s3 + s4))
2028 + (sH - mWS) * resBW * sH * (pT2 - s3 - s4) * (lun / tH - lde / uH)
2029 + thetaWRat * sH * pT2 * ( lun*lun / tH2 + lde*lde / uH2 )
2030 + 2. * thetaWRat * sH * (s3 + s4) * lun * lde / (tH * uH);
2032 sigma0 = max(0., sigma0);
2040 double Sigma2ffbar2ZW::sigmaHat() {
2043 double sigma = sigma0;
2044 if (abs(id1) < 9) sigma *= coupSMPtr->V2CKMid(abs(id1), abs(id2)) / 3.;
2047 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
2048 sigma *= (idUp > 0) ? openFracPos : openFracNeg;
2059 void Sigma2ffbar2ZW::setIdColAcol() {
2062 int sign = 1 - 2 * (abs(id1)%2);
2063 if (id1 < 0) sign = -sign;
2064 setId( id1, id2, 23, 24 * sign);
2068 if (abs(id1)%2 == 1) swapTU =
true;
2071 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2072 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2073 if (id1 < 0) swapColAcol();
2081 double Sigma2ffbar2ZW::weightDecay(
Event& process,
int iResBeg,
int iResEnd) {
2084 if (iResBeg != 5 || iResEnd != 6)
return 1.;
2088 int i1 = (process[3].id() < 0) ? 3 : 4;
2090 int i3 = (process[9].id() > 0) ? 9 : 10;
2092 int i5 = (process[7].id() > 0) ? 7 : 8;
2096 setupProd( process, i1, i2, i3, i4, i5, i6);
2101 if (process[i2].
id()%2 == 1) swap( tHres, uHres);
2104 int idAbs = process[i1].idAbs();
2105 double ai = coupSMPtr->af(idAbs);
2106 double li1 = coupSMPtr->lf(idAbs);
2107 idAbs = process[i2].idAbs();
2108 double li2 = coupSMPtr->lf(idAbs);
2109 idAbs = process[i5].idAbs();
2110 double l4 = coupSMPtr->lf(idAbs);
2111 double r4 = coupSMPtr->rf(idAbs);
2114 double Wint = cos2thetaW * (sH - mWS) / (pow2(sH - mWS) + mwWS);
2117 double aWZ = li2 / tHres - 2. * Wint * ai;
2118 double bWZ = li1 / uHres + 2. * Wint * ai;
2119 double fGK135 = norm( aWZ * fGK( 1, 2, 3, 4, 5, 6)
2120 + bWZ * fGK( 1, 2, 5, 6, 3, 4) );
2121 double fGK136 = norm( aWZ * fGK( 1, 2, 3, 4, 6, 5)
2122 + bWZ * fGK( 1, 2, 6, 5, 3, 4) );
2123 double xiT = xiGK( tHres, uHres);
2124 double xiU = xiGK( uHres, tHres);
2125 double xjTU = xjGK( tHres, uHres);
2128 double wt = l4*l4 * fGK135 + r4*r4 * fGK136;
2129 double wtMax = 4. * s3 * s4 * (l4*l4 + r4*r4)
2130 * (aWZ * aWZ * xiT + bWZ * bWZ * xiU + aWZ * bWZ * xjTU);
2146 void Sigma2ffbar2WW::initProc() {
2149 mZ = particleDataPtr->m0(23);
2150 widZ = particleDataPtr->mWidth(23);
2152 mwZS = pow2(mZ * widZ);
2153 thetaWRat = 1. / (4. * coupSMPtr->sin2thetaW());
2156 openFracPair = particleDataPtr->resOpenFrac(24, -24);
2164 void Sigma2ffbar2WW::sigmaKin() {
2167 sigma0 = (M_PI / sH2) * pow2(alpEM);
2170 double Zprop = sH2 / (pow2(sH - mZS) + mwZS);
2171 double Zint = Zprop * (1. - mZS / sH);
2175 cgZ = thetaWRat * Zint;
2176 cZZ = 0.5 * pow2(thetaWRat) * Zprop;
2178 cfZ = pow2(thetaWRat) * Zint;
2179 cff = pow2(thetaWRat);
2182 double rat34 = sH * (2. * (s3 + s4) + pT2) / (s3 * s4);
2183 double lambdaS = pow2(sH - s3 - s4) - 4. * s3 * s4;
2184 double intA = (sH - s3 - s4) * rat34 / sH;
2185 double intB = 4. * (s3 + s4 - pT2);
2186 gSS = (lambdaS * rat34 + 12. * sH * pT2) / sH2;
2187 gTT = rat34 + 4. * sH * pT2 / tH2;
2188 gST = intA + intB / tH;
2189 gUU = rat34 + 4. * sH * pT2 / uH2;
2190 gSU = intA + intB / uH;
2198 double Sigma2ffbar2WW::sigmaHat() {
2201 int idAbs = abs(id1);
2202 double ei = coupSMPtr->ef(idAbs);
2203 double vi = coupSMPtr->vf(idAbs);
2204 double ai = coupSMPtr->af(idAbs);
2207 double sigma = sigma0;
2208 sigma *= (idAbs%2 == 1)
2209 ? (cgg * ei*ei + cgZ * ei * vi + cZZ * (vi*vi + ai*ai)) * gSS
2210 + (cfg * ei + cfZ * (vi + ai)) * gST + cff * gTT
2211 : (cgg * ei*ei + cgZ * ei * vi + cZZ * (vi*vi + ai*ai)) * gSS
2212 - (cfg * ei + cfZ * (vi + ai)) * gSU + cff * gUU;
2215 if (idAbs < 9) sigma /= 3.;
2216 sigma *= openFracPair;
2225 void Sigma2ffbar2WW::setIdColAcol() {
2228 setId( id1, id2, -24, 24);
2231 if (id1 < 0) swapTU =
true;
2234 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2235 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2236 if (id1 < 0) swapColAcol();
2244 double Sigma2ffbar2WW::weightDecay(
Event& process,
int iResBeg,
int iResEnd) {
2247 if (iResBeg != 5 || iResEnd != 6)
return 1.;
2251 int i1 = (process[3].id() < 0) ? 3 : 4;
2253 int i3 = (process[7].id() > 0) ? 7 : 8;
2255 int i5 = (process[9].id() > 0) ? 9 : 10;
2259 setupProd( process, i1, i2, i3, i4, i5, i6);
2266 int idAbs = process[i1].idAbs();
2267 double ai = coupSMPtr->af(idAbs);
2268 double li = coupSMPtr->lf(idAbs);
2269 double ri = coupSMPtr->rf(idAbs);
2272 double Zint = mZS * (sH - mZS) / (pow2(sH - mZS) + mwZS);
2275 double dWW = (li * Zint + ai) / sH;
2276 double aWW = dWW + 0.5 * (ai + 1.) / tHres;
2277 double bWW = dWW + 0.5 * (ai - 1.) / uHres;
2278 double cWW = ri * Zint / sH;
2279 double fGK135 = norm( aWW * fGK( 1, 2, 3, 4, 5, 6)
2280 - bWW * fGK( 1, 2, 5, 6, 3, 4) );
2281 double fGK253 = norm( cWW * ( fGK( 2, 1, 5, 6, 3, 4)
2282 - fGK( 2, 1, 3, 4, 5, 6) ) );
2283 double xiT = xiGK( tHres, uHres);
2284 double xiU = xiGK( uHres, tHres);
2285 double xjTU = xjGK( tHres, uHres);
2288 double wt = fGK135 + fGK253;
2289 double wtMax = 4. * s3 * s4
2290 * ( aWW * aWW * xiT + bWW * bWW * xiU - aWW * bWW * xjTU
2291 + cWW * cWW * (xiT + xiU - xjTU) );
2306 void Sigma2ffbargmZggm::initProc() {
2309 gmZmode = mode(
"WeakZ0:gmZmode");
2312 mRes = particleDataPtr->m0(23);
2313 GammaRes = particleDataPtr->mWidth(23);
2315 GamMRat = GammaRes / mRes;
2316 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
2317 * coupSMPtr->cos2thetaW());
2320 particlePtr = particleDataPtr->particleDataEntryPtr(23);
2328 void Sigma2ffbargmZggm::flavSum() {
2331 double alpSZ = coupSMPtr->alphaS(s3);
2332 double colQZ = 3. * (1. + alpSZ / M_PI);
2339 double mf, mr, psvec, psaxi, betaf, ef2, efvf, vf2af2, colf;
2342 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
2343 int idAbs = abs( particlePtr->channel(i).product(0) );
2346 if ( (idAbs > 0 && idAbs < 6) || ( idAbs > 10 && idAbs < 17)) {
2347 mf = particleDataPtr->m0(idAbs);
2350 if (m3 > 2. * mf + MASSMARGIN) {
2352 betaf = sqrtpos(1. - 4. * mr);
2353 psvec = betaf * (1. + 2. * mr);
2354 psaxi = pow3(betaf);
2357 ef2 = coupSMPtr->ef2(idAbs) * psvec;
2358 efvf = coupSMPtr->efvf(idAbs) * psvec;
2359 vf2af2 = coupSMPtr->vf2(idAbs) * psvec
2360 + coupSMPtr->af2(idAbs) * psaxi;
2361 colf = (idAbs < 6) ? colQZ : 1.;
2364 onMode = particlePtr->channel(i).onMode();
2365 if (onMode == 1 || onMode == 2) {
2366 gamSum += colf * ef2;
2367 intSum += colf * efvf;
2368 resSum += colf * vf2af2;
2384 void Sigma2ffbargmZggm::propTerm() {
2387 gamProp = 4. * alpEM / (3. * M_PI * s3);
2388 intProp = gamProp * 2. * thetaWRat * s3 * (s3 - m2Res)
2389 / ( pow2(s3 - m2Res) + pow2(s3 * GamMRat) );
2390 resProp = gamProp * pow2(thetaWRat * s3)
2391 / ( pow2(s3 - m2Res) + pow2(s3 * GamMRat) );
2394 if (gmZmode == 1) {intProp = 0.; resProp = 0.;}
2395 if (gmZmode == 2) {gamProp = 0.; intProp = 0.;}
2403 double Sigma2ffbargmZggm::weightDecay(
Event& process,
int iResBeg,
2407 if (iResBeg != 5 || iResEnd != 6)
return 1.;
2412 int i3 = (process[7].id() > 0) ? 7 : 8;
2416 if (process[3].idAbs() < 20 && process[4].idAbs() < 20) {
2417 i1 = (process[3].id() < 0) ? 3 : 4;
2421 }
else if (process[3].idAbs() < 20) {
2422 i1 = (process[3].id() < 0) ? 3 : 6;
2425 i1 = (process[4].id() < 0) ? 4 : 6;
2430 int id1Abs = process[i1].idAbs();
2431 double ei = 0.5 * coupSMPtr->ef(id1Abs);
2432 double li = coupSMPtr->lf(id1Abs);
2433 double ri = coupSMPtr->rf(id1Abs);
2434 int id3Abs = process[i3].idAbs();
2435 double ef = 0.5 * coupSMPtr->ef(id3Abs);
2436 double lf = coupSMPtr->lf(id3Abs);
2437 double rf = coupSMPtr->rf(id3Abs);
2440 double clilf = ei*ei * gamProp * ef*ef + ei*li * intProp * ef*lf
2441 + li*li * resProp * lf*lf;
2442 double clirf = ei*ei * gamProp * ef*ef + ei*li * intProp * ef*rf
2443 + li*li * resProp * rf*rf;
2444 double crilf = ei*ei * gamProp * ef*ef + ei*ri * intProp * ef*lf
2445 + ri*ri * resProp * lf*lf;
2446 double crirf = ei*ei * gamProp * ef*ef + ei*ri * intProp * ef*rf
2447 + ri*ri * resProp * rf*rf;
2450 double p13 = process[i1].p() * process[i3].p();
2451 double p14 = process[i1].p() * process[i4].p();
2452 double p23 = process[i2].p() * process[i3].p();
2453 double p24 = process[i2].p() * process[i4].p();
2456 double wt = (clilf + crirf) * (p13*p13 + p24*p24)
2457 + (clirf + crilf) * (p14*p14 + p23*p23) ;
2458 double wtMax = (clilf + clirf + crilf + crirf)
2459 * (pow2(p13 + p14) + pow2(p23 + p24));
2462 return (wt / wtMax);
2475 void Sigma2qqbar2gmZg::sigmaKin() {
2478 sigma0 = (M_PI / sH2) * (alpEM * alpS)
2479 * (2./9.) * (tH2 + uH2 + 2. * sH * s3) / (tH * uH);
2493 double Sigma2qqbar2gmZg::sigmaHat() {
2496 int idAbs = abs(id1);
2497 double sigma = sigma0
2498 * ( coupSMPtr->ef2(idAbs) * gamProp * gamSum
2499 + coupSMPtr->efvf(idAbs) * intProp * intSum
2500 + coupSMPtr->vf2af2(idAbs) * resProp * resSum);
2514 void Sigma2qqbar2gmZg::setIdColAcol() {
2517 setId( id1, id2, 23, 21);
2520 setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
2521 if (id1 < 0) swapColAcol();
2534 void Sigma2qg2gmZq::sigmaKin() {
2537 sigma0 = (M_PI / sH2) * (alpEM * alpS)
2538 * (1./12.) * (sH2 + uH2 + 2. * tH * s3) / (-sH * uH);
2552 double Sigma2qg2gmZq::sigmaHat() {
2555 int idAbs = (id2 == 21) ? abs(id1) : abs(id2);
2556 double sigma = sigma0
2557 * ( coupSMPtr->ef2(idAbs) * gamProp * gamSum
2558 + coupSMPtr->efvf(idAbs) * intProp * intSum
2559 + coupSMPtr->vf2af2(idAbs) * resProp * resSum);
2573 void Sigma2qg2gmZq::setIdColAcol() {
2576 int idq = (id2 == 21) ? id1 : id2;
2577 setId( id1, id2, 23, idq);
2580 swapTU = (id2 == 21);
2583 if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
2584 else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
2585 if (idq < 0) swapColAcol();
2598 void Sigma2ffbar2gmZgm::sigmaKin() {
2601 sigma0 = (M_PI / sH2) * (alpEM*alpEM)
2602 * 0.5 * (tH2 + uH2 + 2. * sH * s3) / (tH * uH);
2617 double Sigma2ffbar2gmZgm::sigmaHat() {
2620 int idAbs = abs(id1);
2621 double sigma = sigma0 * coupSMPtr->ef2(idAbs)
2622 * ( coupSMPtr->ef2(idAbs) * gamProp * gamSum
2623 + coupSMPtr->efvf(idAbs) * intProp * intSum
2624 + coupSMPtr->vf2af2(idAbs) * resProp * resSum);
2630 if (idAbs < 9) sigma /= 3.;
2639 void Sigma2ffbar2gmZgm::setIdColAcol() {
2642 setId( id1, id2, 23, 22);
2645 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2646 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2647 if (id1 < 0) swapColAcol();
2660 void Sigma2fgm2gmZf::sigmaKin() {
2663 sigma0 = (M_PI / sH2) * (alpEM*alpEM)
2664 * 0.5 * (sH2 + uH2 + 2. * tH * s3) / (- sH * uH);
2678 double Sigma2fgm2gmZf::sigmaHat() {
2681 int idAbs = (id2 == 22) ? abs(id1) : abs(id2);
2682 double sigma = sigma0 * coupSMPtr->ef2(idAbs)
2683 * ( coupSMPtr->ef2(idAbs) * gamProp * gamSum
2684 + coupSMPtr->efvf(idAbs) * intProp * intSum
2685 + coupSMPtr->vf2af2(idAbs) * resProp * resSum);
2699 void Sigma2fgm2gmZf::setIdColAcol() {
2702 int idq = (id2 == 22) ? id1 : id2;
2703 setId( id1, id2, 23, idq);
2706 swapTU = (id2 == 22);
2709 if (abs(id1) < 9) setColAcol( 1, 0, 0, 0, 0, 0, 1, 0);
2710 else if (abs(id2) < 9) setColAcol( 0, 0, 1, 0, 0, 0, 1, 0);
2711 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2712 if (idq < 0) swapColAcol();
2725 double Sigma2ffbarWggm::weightDecay(
Event& process,
int iResBeg,
2729 if (iResBeg != 5 || iResEnd != 6)
return 1.;
2734 int i3 = (process[7].id() > 0) ? 7 : 8;
2738 if (process[3].idAbs() < 20 && process[4].idAbs() < 20) {
2739 i1 = (process[3].id() < 0) ? 3 : 4;
2743 }
else if (process[3].idAbs() < 20) {
2744 i1 = (process[3].id() < 0) ? 3 : 6;
2747 i1 = (process[4].id() < 0) ? 4 : 6;
2752 double p13 = process[i1].p() * process[i3].p();
2753 double p14 = process[i1].p() * process[i4].p();
2754 double p23 = process[i2].p() * process[i3].p();
2755 double p24 = process[i2].p() * process[i4].p();
2758 double wt = pow2(p13) + pow2(p24);
2759 double wtMax = pow2(p13 + p14) + pow2(p23 + p24);
2762 return (wt / wtMax);
2775 void Sigma2qqbar2Wg::initProc() {
2778 openFracPos = particleDataPtr->resOpenFrac(24);
2779 openFracNeg = particleDataPtr->resOpenFrac(-24);
2787 void Sigma2qqbar2Wg::sigmaKin() {
2790 sigma0 = (M_PI / sH2) * (alpEM * alpS / coupSMPtr->sin2thetaW())
2791 * (2./9.) * (tH2 + uH2 + 2. * sH * s3) / (tH * uH);
2799 double Sigma2qqbar2Wg::sigmaHat() {
2802 double sigma = sigma0 * coupSMPtr->V2CKMid(abs(id1), abs(id2));
2803 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
2804 sigma *= (idUp > 0) ? openFracPos : openFracNeg;
2815 void Sigma2qqbar2Wg::setIdColAcol() {
2818 int sign = 1 - 2 * (abs(id1)%2);
2819 if (id1 < 0) sign = -sign;
2820 setId( id1, id2, 24 * sign, 21);
2823 setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
2824 if (id1 < 0) swapColAcol();
2837 void Sigma2qg2Wq::initProc() {
2840 openFracPos = particleDataPtr->resOpenFrac(24);
2841 openFracNeg = particleDataPtr->resOpenFrac(-24);
2849 void Sigma2qg2Wq::sigmaKin() {
2852 sigma0 = (M_PI / sH2) * (alpEM * alpS / coupSMPtr->sin2thetaW())
2853 * (1./12.) * (sH2 + uH2 + 2. * tH * s3) / (-sH * uH);
2861 double Sigma2qg2Wq::sigmaHat() {
2864 int idAbs = (id2 == 21) ? abs(id1) : abs(id2);
2865 double sigma = sigma0 * coupSMPtr->V2CKMsum(idAbs);
2866 int idUp = (id2 == 21) ? id1 : id2;
2867 if (idAbs%2 == 1) idUp = -idUp;
2868 sigma *= (idUp > 0) ? openFracPos : openFracNeg;
2879 void Sigma2qg2Wq::setIdColAcol() {
2882 int idq = (id2 == 21) ? id1 : id2;
2883 int sign = 1 - 2 * (abs(idq)%2);
2884 if (idq < 0) sign = -sign;
2885 id4 = coupSMPtr->V2CKMpick(idq);
2888 setId( id1, id2, 24 * sign, id4);
2891 swapTU = (id2 == 21);
2894 if (id2 == 21) setColAcol( 1, 0, 2, 1, 0, 0, 2, 0);
2895 else setColAcol( 2, 1, 1, 0, 0, 0, 2, 0);
2896 if (idq < 0) swapColAcol();
2909 void Sigma2ffbar2Wgm::initProc() {
2912 openFracPos = particleDataPtr->resOpenFrac(24);
2913 openFracNeg = particleDataPtr->resOpenFrac(-24);
2921 void Sigma2ffbar2Wgm::sigmaKin() {
2924 sigma0 = (M_PI / sH2) * (alpEM*alpEM / coupSMPtr->sin2thetaW())
2925 * 0.5 * (tH2 + uH2 + 2. * sH * s3) / (tH * uH);
2932 double Sigma2ffbar2Wgm::sigmaHat() {
2935 int id1Abs = abs(id1);
2936 int id2Abs = abs(id2);
2937 double chgUp = (id1Abs > 10) ? 0. : 2./3.;
2938 double sigma = sigma0 * pow2( chgUp - tH / (tH + uH) );
2941 if (id1Abs < 9) sigma *= coupSMPtr->V2CKMid(id1Abs, id2Abs) / 3.;
2942 int idUp = (abs(id1)%2 == 0) ? id1 : id2;
2943 sigma *= (idUp > 0) ? openFracPos : openFracNeg;
2954 void Sigma2ffbar2Wgm::setIdColAcol() {
2957 int sign = 1 - 2 * (abs(id1)%2);
2958 if (id1 < 0) sign = -sign;
2959 setId( id1, id2, 24 * sign, 22);
2962 swapTU = (sign * id1 > 0);
2965 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
2966 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
2967 if (id1 < 0) swapColAcol();
2980 void Sigma2fgm2Wf::initProc() {
2983 openFracPos = particleDataPtr->resOpenFrac(24);
2984 openFracNeg = particleDataPtr->resOpenFrac(-24);
2992 void Sigma2fgm2Wf::sigmaKin() {
2995 sigma0 = (M_PI / sH2) * (alpEM*alpEM / coupSMPtr->sin2thetaW())
2996 * 0.5 * (sH2 + uH2 + 2. * tH * s3) / (pT2 * s3 - sH * uH);
3004 double Sigma2fgm2Wf::sigmaHat() {
3007 int idAbs = (id2 == 22) ? abs(id1) : abs(id2);
3008 double charge = (idAbs > 10) ? 1. : ( (idAbs%2 == 1) ? 1./3. : 2./3. );
3009 double sigma = sigma0 * pow2( charge - sH / (sH + uH) );
3012 sigma *= coupSMPtr->V2CKMsum(idAbs);
3013 int idUp = (id2 == 22) ? id1 : id2;
3014 if (idAbs%2 == 1) idUp = -idUp;
3015 sigma *= (idUp > 0) ? openFracPos : openFracNeg;
3026 void Sigma2fgm2Wf::setIdColAcol() {
3029 int idq = (id2 == 22) ? id1 : id2;
3030 int sign = 1 - 2 * (abs(idq)%2);
3031 if (idq < 0) sign = -sign;
3032 id4 = coupSMPtr->V2CKMpick(idq);
3035 setId( id1, id2, 24 * sign, id4);
3038 swapTU = (id2 == 22);
3041 if (abs(id1) < 9) setColAcol( 1, 0, 0, 0, 0, 0, 1, 0);
3042 else if (abs(id2) < 9) setColAcol( 0, 0, 1, 0, 0, 0, 1, 0);
3043 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
3044 if (idq < 0) swapColAcol();
3057 void Sigma2gmgm2ffbar::initProc() {
3060 nameSave =
"gamma gamma -> f fbar";
3061 if (idNew == 1) nameSave =
"gamma gamma -> q qbar (uds)";
3062 if (idNew == 4) nameSave =
"gamma gamma -> c cbar";
3063 if (idNew == 5) nameSave =
"gamma gamma -> b bbar";
3064 if (idNew == 6) nameSave =
"gamma gamma -> t tbar";
3065 if (idNew == 11) nameSave =
"gamma gamma -> e+ e-";
3066 if (idNew == 13) nameSave =
"gamma gamma -> mu+ mu-";
3067 if (idNew == 15) nameSave =
"gamma gamma -> tau+ tau-";
3071 if (idNew > 3) idMass = idNew;
3075 if (idNew == 1) ef4 = 3. * (pow4(2./3.) + 2. * pow4(1./3.));
3076 if (idNew == 4 || idNew == 6) ef4 = 3. * pow4(2./3.);
3077 if (idNew == 5) ef4 = 3. * pow4(1./3.);
3080 openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
3088 void Sigma2gmgm2ffbar::sigmaKin() {
3092 double rId = 18. * rndmPtr->flat();
3094 if (rId > 1.) idNow = 2;
3095 if (rId > 17.) idNow = 3;
3096 s34Avg = pow2(particleDataPtr->m0(idNow));
3099 s34Avg = 0.5 * (s3 + s4) - 0.25 * pow2(s3 - s4) / sH;
3103 double tHQ = -0.5 * (sH - tH + uH);
3104 double uHQ = -0.5 * (sH + tH - uH);
3105 double tHQ2 = tHQ * tHQ;
3106 double uHQ2 = uHQ * uHQ;
3109 if (sH < 4. * s34Avg) sigTU = 0.;
3110 else sigTU = 2. * ( tHQ2 + uHQ2 + 4. * s34Avg * sH
3111 * (1. - s34Avg * sH / (tHQ * uHQ) ) ) / (tHQ * uHQ);
3114 sigma = (M_PI / sH2) * pow2(alpEM) * ef4 * sigTU * openFracPair;
3122 void Sigma2gmgm2ffbar::setIdColAcol() {
3125 setId( id1, id2, idNow, -idNow);
3128 if (idNow < 10) setColAcol( 0, 0, 0, 0, 1, 0, 0, 1);
3129 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
3142 void Sigma2ggm2qqbar::initProc() {
3145 if (inFluxSave ==
"ggm") {
3146 nameSave =
"g gamma -> q qbar";
3147 if (idNew == 1) nameSave =
"g gamma -> q qbar (uds)";
3148 if (idNew == 4) nameSave =
"g gamma -> c cbar";
3149 if (idNew == 5) nameSave =
"g gamma -> b bbar";
3150 if (idNew == 6) nameSave =
"g gamma -> t tbar";
3151 }
else if (inFluxSave ==
"gmg") {
3152 nameSave =
"gamma g -> q qbar";
3153 if (idNew == 1) nameSave =
"gamma g -> q qbar (uds)";
3154 if (idNew == 4) nameSave =
"gamma g -> c cbar";
3155 if (idNew == 5) nameSave =
"gamma g -> b bbar";
3156 if (idNew == 6) nameSave =
"gamma g -> t tbar";
3161 if (idNew > 3) idMass = idNew;
3165 if (idNew == 1) ef2 = pow2(2./3.) + 2. * pow2(1./3.);
3166 if (idNew == 4 || idNew == 6) ef2 = pow2(2./3.);
3167 if (idNew == 5) ef2 = pow2(1./3.);
3170 openFracPair = particleDataPtr->resOpenFrac(idNew, -idNew);
3178 void Sigma2ggm2qqbar::sigmaKin() {
3182 double rId = 6. * rndmPtr->flat();
3184 if (rId > 1.) idNow = 2;
3185 if (rId > 5.) idNow = 3;
3186 s34Avg = pow2(particleDataPtr->m0(idNow));
3189 s34Avg = 0.5 * (s3 + s4) - 0.25 * pow2(s3 - s4) / sH;
3193 double tHQ = -0.5 * (sH - tH + uH);
3194 double uHQ = -0.5 * (sH + tH - uH);
3195 double tHQ2 = tHQ * tHQ;
3196 double uHQ2 = uHQ * uHQ;
3199 if (sH < 4. * s34Avg) sigTU = 0.;
3200 else sigTU = ( tHQ2 + uHQ2
3201 + 4. * s34Avg * sH * (1. - s34Avg * sH / (tHQ * uHQ) ) ) / (tHQ * uHQ);
3204 sigma = (M_PI/sH2) * alpS * alpEM * ef2 * sigTU * openFracPair;
3212 void Sigma2ggm2qqbar::setIdColAcol() {
3215 setId( id1, id2, idNow, -idNow);
3218 setColAcol( 1, 2, 0, 0, 1, 0, 0, 2);
3219 if (id1 == 22) setColAcol( 0, 0, 1, 2, 1, 0, 0, 2);
3232 void Sigma2qgm2qg::initProc() {
3235 if (inFluxSave ==
"qgm") nameSave =
"q gamma -> q g (udscb)";
3236 if (inFluxSave ==
"gmq") nameSave =
"gamma q -> q g (udscb)";
3244 void Sigma2qgm2qg::sigmaKin() {
3247 sigUS = (8./3.) * (sH2 + uH2) / (-sH * uH);
3250 sigma0 = (M_PI/sH2) * alpS * alpEM * sigUS;
3258 double Sigma2qgm2qg::sigmaHat() {
3261 int idNow = (id2 == 22) ? id1 : id2;
3262 double eNow = coupSMPtr->ef( abs(idNow) );
3263 return sigma0 * pow2(eNow);
3271 void Sigma2qgm2qg::setIdColAcol() {
3274 id3 = (id1 == 22) ? 21 : id1;
3275 id4 = (id2 == 22) ? 21 : id2;
3276 setId( id1, id2, id3, id4);
3279 setColAcol( 1, 0, 0, 0, 2, 0, 1, 2);
3280 if (id1 == 22) swapCol1234();
3281 if (id1 < 0 || id2 < 0) swapColAcol();
3294 void Sigma2qgm2qgm::initProc() {
3297 if (inFluxSave ==
"qgm") nameSave =
"q gamma -> q gamma (udscb)";
3298 if (inFluxSave ==
"gmq") nameSave =
"gamma q -> q gamma (udscb)";
3306 void Sigma2qgm2qgm::sigmaKin() {
3309 sigUS = 2. * (sH2 + uH2) / (-sH * uH);
3312 sigma0 = (M_PI/sH2) * pow2(alpEM) * sigUS;
3320 double Sigma2qgm2qgm::sigmaHat() {
3323 int idNow = (id2 == 22) ? id1 : id2;
3324 double eNow = coupSMPtr->ef( abs(idNow) );
3325 return sigma0 * pow4(eNow);
3333 void Sigma2qgm2qgm::setIdColAcol() {
3336 id3 = (id1 == 22) ? 22 : id1;
3337 id4 = (id2 == 22) ? 22 : id2;
3338 setId( id1, id2, id3, id4);
3341 if (id2 == 22) setColAcol( 1, 0, 0, 0, 1, 0, 0, 0);
3342 if (id1 == 22) setColAcol( 0, 0, 1, 0, 0, 0, 1, 0);
3343 if (id1 < 0 || id2 < 0) swapColAcol();