9 #include "Pythia8/SigmaCompositeness.h"
22 void Sigma1qg2qStar::initProc() {
25 idRes = 4000000 + idq;
26 codeSave = 4000 + idq;
27 if (idq == 1) nameSave =
"d g -> d^*";
28 else if (idq == 2) nameSave =
"u g -> u^*";
29 else if (idq == 3) nameSave =
"s g -> s^*";
30 else if (idq == 4) nameSave =
"c g -> c^*";
31 else nameSave =
"b g -> b^*";
34 mRes = particleDataPtr->m0(idRes);
35 GammaRes = particleDataPtr->mWidth(idRes);
37 GamMRat = GammaRes / mRes;
40 Lambda = parm(
"ExcitedFermion:Lambda");
41 coupFcol = parm(
"ExcitedFermion:coupFcol");
44 qStarPtr = particleDataPtr->particleDataEntryPtr(idRes);
52 void Sigma1qg2qStar::sigmaKin() {
55 widthIn = pow3(mH) * alpS * pow2(coupFcol) / (3. * pow2(Lambda));
58 sigBW = M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
66 double Sigma1qg2qStar::sigmaHat() {
69 int idqNow = (id2 == 21) ? id1 : id2;
70 if (abs(idqNow) != idq)
return 0.;
73 return widthIn * sigBW * qStarPtr->resWidthOpen(idqNow, mH);
81 void Sigma1qg2qStar::setIdColAcol() {
84 int idqNow = (id2 == 21) ? id1 : id2;
85 int idqStar = (idqNow > 0) ? idRes : -idRes;
86 setId( id1, id2, idqStar);
89 if (id1 == idqNow) setColAcol( 1, 0, 2, 1, 2, 0);
90 else setColAcol( 2, 1, 1, 0, 2, 0);
91 if (idqNow < 0) swapColAcol();
99 double Sigma1qg2qStar::weightDecay(
Event& process,
int iResBeg,
103 if (iResBeg != 5 || iResEnd != 5)
return 1.;
104 if (process[5].daughter1() != 6 || process[5].daughter2() != 7)
return 1.;
107 int sideIn = (process[3].idAbs() < 20) ? 1 : 2;
108 int sideOut = (process[6].idAbs() < 20) ? 1 : 2;
109 double eps = (sideIn == sideOut) ? 1. : -1.;
112 double mr1 = pow2(process[6].m()) / sH;
113 double mr2 = pow2(process[7].m()) / sH;
114 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
117 double cosThe = (process[3].p() - process[4].p())
118 * (process[7].p() - process[6].p()) / (sH * betaf);
123 int idBoson = (sideOut == 1) ? process[7].idAbs() : process[6].idAbs();
124 if (idBoson == 21 || idBoson == 22) {
125 wt = 1. + eps * cosThe;
127 }
else if (idBoson == 23 || idBoson == 24) {
128 double mrB = (sideOut == 1) ? mr2 : mr1;
129 double ratB = (1. - 0.5 * mrB) / (1 + 0.5 * mrB);
130 wt = 1. + eps * cosThe * ratB;
148 void Sigma1lgm2lStar::initProc() {
151 idRes = 4000000 + idl;
152 codeSave = 4000 + idl;
153 if (idl == 11) nameSave =
"e gamma -> e^*";
154 else if (idl == 13) nameSave =
"mu gamma -> mu^*";
155 else nameSave =
"tau gamma -> tau^*";
158 mRes = particleDataPtr->m0(idRes);
159 GammaRes = particleDataPtr->mWidth(idRes);
161 GamMRat = GammaRes / mRes;
164 Lambda = parm(
"ExcitedFermion:Lambda");
165 double coupF = parm(
"ExcitedFermion:coupF");
166 double coupFp = parm(
"ExcitedFermion:coupFprime");
167 coupChg = -0.5 * coupF - 0.5 * coupFp;
170 qStarPtr = particleDataPtr->particleDataEntryPtr(idRes);
178 void Sigma1lgm2lStar::sigmaKin() {
181 widthIn = pow3(mH) * alpEM * pow2(coupChg) / pow2(Lambda);
184 sigBW = M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
192 double Sigma1lgm2lStar::sigmaHat() {
195 int idlNow = (id2 == 22) ? id1 : id2;
196 if (abs(idlNow) != idl)
return 0.;
199 return widthIn * sigBW * qStarPtr->resWidthOpen(idlNow, mH);
207 void Sigma1lgm2lStar::setIdColAcol() {
210 int idlNow = (id2 == 22) ? id1 : id2;
211 int idlStar = (idlNow > 0) ? idRes : -idRes;
212 setId( id1, id2, idlStar);
215 setColAcol( 0, 0, 0, 0, 0, 0);
223 double Sigma1lgm2lStar::weightDecay(
Event& process,
int iResBeg,
227 if (iResBeg != 5 || iResEnd != 5)
return 1.;
228 if (process[5].daughter1() != 6 || process[5].daughter2() != 7)
return 1.;
231 int sideIn = (process[3].idAbs() < 20) ? 1 : 2;
232 int sideOut = (process[6].idAbs() < 20) ? 1 : 2;
233 double eps = (sideIn == sideOut) ? 1. : -1.;
236 double mr1 = pow2(process[6].m()) / sH;
237 double mr2 = pow2(process[7].m()) / sH;
238 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
241 double cosThe = (process[3].p() - process[4].p())
242 * (process[7].p() - process[6].p()) / (sH * betaf);
247 int idBoson = (sideOut == 1) ? process[7].idAbs() : process[6].idAbs();
249 wt = 1. + eps * cosThe;
251 }
else if (idBoson == 23 || idBoson == 24) {
252 double mrB = (sideOut == 1) ? mr2 : mr1;
253 double ratB = (1. - 0.5 * mrB) / (1 + 0.5 * mrB);
254 wt = 1. + eps * cosThe * ratB;
272 void Sigma2qq2qStarq::initProc() {
275 idRes = 4000000 + idq;
276 codeSave = 4020 + idq;
277 if (idq == 1) nameSave =
"q q -> d^* q";
278 else if (idq == 2) nameSave =
"q q -> u^* q";
279 else if (idq == 3) nameSave =
"q q -> s^* q";
280 else if (idq == 4) nameSave =
"q q -> c^* q";
281 else nameSave =
"q q -> b^* q";
284 Lambda = parm(
"ExcitedFermion:Lambda");
285 preFac = M_PI / pow4(Lambda);
288 openFracPos = particleDataPtr->resOpenFrac( idRes);
289 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
297 void Sigma2qq2qStarq::sigmaKin() {
300 sigmaA = preFac * (1. - s3 / sH);
301 sigmaB = preFac * (-uH) * (sH + tH) / sH2;
309 double Sigma2qq2qStarq::sigmaHat() {
312 int id1Abs = abs(id1);
313 int id2Abs = abs(id2);
314 double open1 = (id1 > 0) ? openFracPos : openFracNeg;
315 double open2 = (id2 > 0) ? openFracPos : openFracNeg;
318 if (id1Abs == idq) sigma += (4./3.) * sigmaA * open1;
319 if (id2Abs == idq) sigma += (4./3.) * sigmaA * open2;
320 }
else if (id1Abs == idq && id2 == -id1)
321 sigma = (8./3.) * sigmaB * (open1 + open2);
322 else if (id2 == -id1) sigma = sigmaB * (open1 + open2);
323 else if (id1Abs == idq) sigma = sigmaB * open1;
324 else if (id2Abs == idq) sigma = sigmaB * open2;
335 void Sigma2qq2qStarq::setIdColAcol() {
338 int idAbs1 = abs(id1);
339 int idAbs2 = abs(id2);
342 if (idAbs1 == idq) open1 = (id1 > 0) ? openFracPos : openFracNeg;
343 if (idAbs2 == idq) open2 = (id2 > 0) ? openFracPos : openFracNeg;
344 if (open1 == 0. && open2 == 0.) {
345 open1 = (id1 > 0) ? openFracPos : openFracNeg;
346 open2 = (id2 > 0) ? openFracPos : openFracNeg;
348 bool excite1 = (open1 > 0.);
349 if (open1 > 0. && open2 > 0.) excite1
350 = (rndmPtr->flat() * (open1 + open2) < open1);
354 id3 = (id1 > 0) ? idRes : -idRes;
357 if ((idAbs1 == idAbs2) && (id1 * id2 < 0)) {
358 id4 = (id3 > 0) ? -idq : idq;
360 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
361 else setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
362 if (id1 < 0) swapColAcol();
364 id3 = (id2 > 0) ? idRes : -idRes;
367 if ((idAbs1 == idAbs2) && (id1 * id2 < 0)) {
368 id4 = (id3 > 0) ? -idq : idq;
371 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
372 else setColAcol( 1, 0, 0, 2, 0, 2, 1, 0);
373 if (id1 < 0) swapColAcol();
375 setId( id1, id2, id3, id4);
385 double Sigma2qq2qStarq::weightDecay(
Event& process,
int iResBeg,
389 if (iResBeg != 5 || iResEnd != 6)
return 1.;
392 double mr1 = pow2(process[7].m() / process[5].m());
393 double mr2 = pow2(process[8].m() / process[5].m());
396 int idAbs3 = process[7].idAbs();
399 Vec4 pQStarCom = (idAbs3 < 20) ? process[8].p() : process[7].p();
400 pQStarCom.bstback(process[5].p());
401 double cosThe = costheta(pQStarCom, process[5].p());
405 int idBoson = (idAbs3 < 20) ? process[8].idAbs() : process[7].idAbs();
406 if (idBoson == 21 || idBoson == 22) {
407 wt = 0.5 * (1. + cosThe);
408 }
else if (idBoson == 23 || idBoson == 24) {
409 double mrB = (idAbs3 < 20) ? mr2 : mr1;
410 double kTrm = 0.5 * (mrB * (1. - cosThe));
411 wt = (1. + cosThe + kTrm) / (2 + mrB);
427 void Sigma2qqbar2lStarlbar::initProc() {
430 idRes = 4000000 + idl;
431 codeSave = 4020 + idl;
432 if (idl == 11) nameSave =
"q qbar -> e^*+- e^-+";
433 else if (idl == 12) nameSave =
"q qbar -> nu_e^* nu_ebar";
434 else if (idl == 13) nameSave =
"q qbar -> mu^*+- mu^-+";
435 else if (idl == 14) nameSave =
"q qbar -> nu_mu^* nu_mubar";
436 else if (idl == 15) nameSave =
"q qbar -> tau^*+- tau^-+";
437 else nameSave =
"q qbar -> nu_tau^* nu_taubar";
440 openFracPos = particleDataPtr->resOpenFrac( idRes);
441 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
444 Lambda = parm(
"ExcitedFermion:Lambda");
445 preFac = (M_PI / pow4(Lambda)) * (openFracPos + openFracNeg) / 3.;
453 void Sigma2qqbar2lStarlbar::sigmaKin() {
456 sigma = preFac * (-uH) * (sH + tH) / sH2;
464 void Sigma2qqbar2lStarlbar::setIdColAcol() {
467 if (rndmPtr->flat() * (openFracPos + openFracNeg) < openFracPos) {
468 setId( id1, id2, idRes, -idl);
469 if (id1 < 0) swapTU =
true;
471 setId( id1, id2, -idRes, idl);
472 if (id1 > 0) swapTU =
true;
476 if (id1 > 0) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
477 else setColAcol( 0, 1, 1, 0, 0, 0, 0, 0);
487 double Sigma2qqbar2lStarlbar::weightDecay(
Event& process,
int iResBeg,
491 if (iResBeg != 5 || iResEnd != 6)
return 1.;
494 double mr1 = pow2(process[7].m() / process[5].m());
495 double mr2 = pow2(process[8].m() / process[5].m());
498 int idAbs3 = process[7].idAbs();
501 Vec4 pLStarCom = (idAbs3 < 20) ? process[8].p() : process[7].p();
502 pLStarCom.bstback(process[5].p());
503 double cosThe = costheta(pLStarCom, process[5].p());
507 int idBoson = (idAbs3 < 20) ? process[8].idAbs() : process[7].idAbs();
509 wt = 0.5 * (1. + cosThe);
510 }
else if (idBoson == 23 || idBoson == 24) {
511 double mrB = (idAbs3 < 20) ? mr2 : mr1;
512 double kTrm = 0.5 * (mrB * (1. - cosThe));
513 wt = (1. + cosThe + kTrm) / (2 + mrB);
530 void Sigma2qqbar2lStarlStarBar::initProc() {
533 idRes = 4000000 + idl;
534 codeSave = 4040 + idl;
535 if (idl == 11) nameSave =
"q qbar -> e^*+- e^*-+";
536 else if (idl == 12) nameSave =
"q qbar -> nu_e^* nu_e^*bar";
537 else if (idl == 13) nameSave =
"q qbar -> mu^*+- mu^*-+";
538 else if (idl == 14) nameSave =
"q qbar -> nu_mu^* nu_mu^*bar";
539 else if (idl == 15) nameSave =
"q qbar -> tau^*+- tau^*-+";
540 else nameSave =
"q qbar -> nu_tau^* nu_tau^*bar";
543 openFracPos = particleDataPtr->resOpenFrac( idRes);
544 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
547 Lambda = parm(
"ExcitedFermion:Lambda");
548 preFac = (M_PI / pow4(Lambda)) * openFracPos * openFracNeg / 12.;
556 void Sigma2qqbar2lStarlStarBar::sigmaKin() {
559 sigma = preFac * 2. * (tH2 + uH2 + sH * (s3 + s4) - 2. * s3 * s4) / sH2;
567 void Sigma2qqbar2lStarlStarBar::setIdColAcol() {
570 setId( id1, id2, idRes, -idRes);
573 if (id1 > 0) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
574 else setColAcol( 0, 1, 1, 0, 0, 0, 0, 0);
582 double Sigma2qqbar2lStarlStarBar::weightDecay(
Event& process,
int iResBeg,
586 if (iResBeg != 5 || iResEnd != 6)
return 1.;
590 for (
int iResNow = iResBeg; iResNow <= iResEnd; ++iResNow) {
591 int iDau1 = process[iResNow].daughter1();
592 int iDau2 = process[iResNow].daughter2();
593 if (iDau2 != iDau1 + 1)
continue;
596 double mr1 = pow2(process[iDau1].m() / process[iResNow].m());
597 double mr2 = pow2(process[iDau2].m() / process[iResNow].m());
600 int idAbs3 = process[iDau1].idAbs();
601 Vec4 pLStarCom = (idAbs3 < 20) ? process[iDau2].p() : process[iDau1].p();
602 pLStarCom.bstback(process[iResNow].p());
603 double cosThe = costheta(pLStarCom, process[iResNow].p());
606 int idBoson = (idAbs3 < 20) ? process[iDau2].idAbs()
607 : process[iDau1].idAbs();
609 wt *= 0.5 * (1. + cosThe);
610 }
else if (idBoson == 23 || idBoson == 24) {
611 double mrB = (idAbs3 < 20) ? mr2 : mr1;
612 double kTrm = 0.5 * (mrB * (1. - cosThe));
613 wt *= (1. + cosThe + kTrm) / (2 + mrB);
631 void Sigma2QCqq2qq::initProc() {
633 qCLambda2 = parm(
"ContactInteractions:Lambda");
634 qCetaLL = mode(
"ContactInteractions:etaLL");
635 qCetaRR = mode(
"ContactInteractions:etaRR");
636 qCetaLR = mode(
"ContactInteractions:etaLR");
637 qCLambda2 *= qCLambda2;
645 void Sigma2QCqq2qq::sigmaKin() {
648 sigT = (4./9.) * (sH2 + uH2) / tH2;
649 sigU = (4./9.) * (sH2 + tH2) / uH2;
650 sigTU = - (8./27.) * sH2 / (tH * uH);
651 sigST = - (8./27.) * uH2 / (sH * tH);
653 sigQCSTU = sH2 * (1 / tH + 1 / uH);
654 sigQCUTS = uH2 * (1 / tH + 1 / sH);
662 double Sigma2QCqq2qq::sigmaHat() {
674 sigSum = 0.5 * (sigT + sigU + sigTU);
677 sigQCLL = (8./9.) * alpS * (qCetaLL/qCLambda2) * sigQCSTU
678 + (8./3.) * pow2(qCetaLL/qCLambda2) * sH2;
679 sigQCRR = (8./9.) * alpS * (qCetaRR/qCLambda2) * sigQCSTU
680 + (8./3.) * pow2(qCetaRR/qCLambda2) * sH2;
681 sigQCLR = 2. * (uH2 + tH2) * pow2(qCetaLR/qCLambda2);
688 }
else if (id2 == -id1) {
691 sigSum = sigT + sigST;
694 sigQCLL = (8./9.) * alpS * (qCetaLL/qCLambda2) * sigQCUTS
695 + (5./3.) * pow2(qCetaLL/qCLambda2) * uH2;
696 sigQCRR = (8./9.) * alpS * (qCetaRR/qCLambda2) * sigQCUTS
697 + (5./3.) * pow2(qCetaRR/qCLambda2) * uH2;
698 sigQCLR = 2. * sH2 * pow2(qCetaLR/qCLambda2);
708 sigQCLL = pow2(qCetaLL/qCLambda2) * sH2;
709 sigQCRR = pow2(qCetaRR/qCLambda2) * sH2;
710 sigQCLR = 2 * pow2(qCetaLR/qCLambda2) * uH2;
712 sigQCLL = pow2(qCetaLL/qCLambda2) * uH2;
713 sigQCRR = pow2(qCetaRR/qCLambda2) * uH2;
714 sigQCLR = 2 * pow2(qCetaLR/qCLambda2) * sH2;
719 double sigma = (M_PI/sH2) * ( pow2(alpS) * sigSum
720 + sigQCLL + sigQCRR + sigQCLR );
729 void Sigma2QCqq2qq::setIdColAcol() {
732 setId( id1, id2, id1, id2);
735 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
736 else setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
737 if (id2 == id1 && (sigT + sigU) * rndmPtr->flat() > sigT)
738 setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
739 if (id1 < 0) swapColAcol();
752 void Sigma2QCqqbar2qqbar::initProc() {
754 qCnQuarkNew = mode(
"ContactInteractions:nQuarkNew");
755 qCLambda2 = parm(
"ContactInteractions:Lambda");
756 qCetaLL = mode(
"ContactInteractions:etaLL");
757 qCetaRR = mode(
"ContactInteractions:etaRR");
758 qCetaLR = mode(
"ContactInteractions:etaLR");
759 qCLambda2 *= qCLambda2;
767 void Sigma2QCqqbar2qqbar::sigmaKin() {
770 idNew = 1 + int( qCnQuarkNew * rndmPtr->flat() );
771 mNew = particleDataPtr->m0(idNew);
777 if (sH > 4. * m2New) {
778 sigS = (4./9.) * (tH2 + uH2) / sH2;
779 sigQC = pow2(qCetaLL/qCLambda2) * uH2
780 + pow2(qCetaRR/qCLambda2) * uH2
781 + 2 * pow2(qCetaLR/qCLambda2) * tH2;
785 sigma = (M_PI / sH2) * qCnQuarkNew * ( pow2(alpS) * sigS + sigQC);
793 void Sigma2QCqqbar2qqbar::setIdColAcol() {
796 id3 = (id1 > 0) ? idNew : -idNew;
797 setId( id1, id2, id3, -id3);
800 setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
801 if (id1 < 0) swapColAcol();
814 void Sigma2QCffbar2llbar::initProc() {
816 qCLambda2 = parm(
"ContactInteractions:Lambda");
817 qCetaLL = mode(
"ContactInteractions:etaLL");
818 qCetaRR = mode(
"ContactInteractions:etaRR");
819 qCetaLR = mode(
"ContactInteractions:etaLR");
820 qCetaRL = mode(
"ContactInteractions:etaRL");
821 qCLambda2 *= qCLambda2;
824 if (idNew == 11) nameNew =
"f fbar -> (QC) -> e- e+";
825 if (idNew == 13) nameNew =
"f fbar -> (QC) -> mu- mu+";
826 if (idNew == 15) nameNew =
"f fbar -> (QC) -> tau- tau+";
829 qCmNew = particleDataPtr->m0(idNew);
830 qCmNew2 = qCmNew * qCmNew;
831 qCmZ = particleDataPtr->m0(23);
833 qCGZ = particleDataPtr->mWidth(23);
842 void Sigma2QCffbar2llbar::sigmaKin() {
845 double denomPropZ = pow2(sH - qCmZ2) + qCmZ2 * qCGZ2;
846 qCrePropZ = (sH - qCmZ2) / denomPropZ;
847 qCimPropZ = -qCmZ * qCGZ / denomPropZ;
850 if (sH > 4. * qCmNew2) sigma0 = 1./(16. * M_PI * sH2);
858 double Sigma2QCffbar2llbar::sigmaHat() {
861 int idAbs = abs(id1);
864 double tmPe2QfQl = 4. * M_PI * alpEM * coupSMPtr->ef(idAbs)
865 * coupSMPtr->ef(idNew);
866 double tmPgvf = 0.25 * coupSMPtr->vf(idAbs);
867 double tmPgaf = 0.25 * coupSMPtr->af(idAbs);
868 double tmPgLf = tmPgvf + tmPgaf;
869 double tmPgRf = tmPgvf - tmPgaf;
870 double tmPgvl = 0.25 * coupSMPtr->vf(idNew);
871 double tmPgal = 0.25 * coupSMPtr->af(idNew);
872 double tmPgLl = tmPgvl + tmPgal;
873 double tmPgRl = tmPgvl - tmPgal;
874 double tmPe2s2c2 = 4. * M_PI * alpEM
875 / (coupSMPtr->sin2thetaW() * coupSMPtr->cos2thetaW());
879 complex meLL(0., 0.);
880 complex meRR(0., 0.);
881 complex meLR(0., 0.);
882 complex meRL(0., 0.);
885 meLL = tmPe2QfQl * qCPropGm
886 + tmPe2s2c2 * tmPgLf * tmPgLl * (qCrePropZ + I * qCimPropZ)
887 + 4. * M_PI * qCetaLL / qCLambda2;
888 meRR = tmPe2QfQl * qCPropGm
889 + tmPe2s2c2 * tmPgRf * tmPgRl * (qCrePropZ + I * qCimPropZ)
890 + 4. * M_PI * qCetaRR / qCLambda2;
891 meLR = tmPe2QfQl * qCPropGm
892 + tmPe2s2c2 * tmPgLf * tmPgRl * (qCrePropZ + I * qCimPropZ)
893 + 4. * M_PI * qCetaLR / qCLambda2;
894 meRL = tmPe2QfQl * qCPropGm
895 + tmPe2s2c2 * tmPgRf * tmPgLl * (qCrePropZ + I * qCimPropZ)
896 + 4. * M_PI * qCetaRL / qCLambda2;
898 double sigma = sigma0 * uH2 * real(meLL*conj(meLL));
899 sigma += sigma0 * uH2 * real(meRR*conj(meRR));
900 sigma += sigma0 * tH2 * real(meLR*conj(meLR));
901 sigma += sigma0 * tH2 * real(meRL*conj(meRL));
904 if (idAbs < 9) sigma /= 3.;
913 void Sigma2QCffbar2llbar::setIdColAcol() {
916 setId(id1, id2, idNew, -idNew);
922 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
923 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
924 if (id1 < 0) swapColAcol();