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 = settingsPtr->parm(
"ExcitedFermion:Lambda");
41 coupFcol = settingsPtr->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.;
106 int sideIn = (process[3].idAbs() < 20) ? 1 : 2;
107 int sideOut = (process[6].idAbs() < 20) ? 1 : 2;
108 double eps = (sideIn == sideOut) ? 1. : -1.;
111 double mr1 = pow2(process[6].m()) / sH;
112 double mr2 = pow2(process[7].m()) / sH;
113 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
116 double cosThe = (process[3].p() - process[4].p())
117 * (process[7].p() - process[6].p()) / (sH * betaf);
122 int idBoson = (sideOut == 1) ? process[7].idAbs() : process[6].idAbs();
123 if (idBoson == 21 || idBoson == 22) {
124 wt = 1. + eps * cosThe;
126 }
else if (idBoson == 23 || idBoson == 24) {
127 double mrB = (sideOut == 1) ? mr2 : mr1;
128 double ratB = (1. - 0.5 * mrB) / (1 + 0.5 * mrB);
129 wt = 1. + eps * cosThe * ratB;
147 void Sigma1lgm2lStar::initProc() {
150 idRes = 4000000 + idl;
151 codeSave = 4000 + idl;
152 if (idl == 11) nameSave =
"e gamma -> e^*";
153 else if (idl == 13) nameSave =
"mu gamma -> mu^*";
154 else nameSave =
"tau gamma -> tau^*";
157 mRes = particleDataPtr->m0(idRes);
158 GammaRes = particleDataPtr->mWidth(idRes);
160 GamMRat = GammaRes / mRes;
163 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
164 double coupF = settingsPtr->parm(
"ExcitedFermion:coupF");
165 double coupFp = settingsPtr->parm(
"ExcitedFermion:coupFprime");
166 coupChg = -0.5 * coupF - 0.5 * coupFp;
169 qStarPtr = particleDataPtr->particleDataEntryPtr(idRes);
177 void Sigma1lgm2lStar::sigmaKin() {
180 widthIn = pow3(mH) * alpEM * pow2(coupChg) / pow2(Lambda);
183 sigBW = M_PI/ ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
191 double Sigma1lgm2lStar::sigmaHat() {
194 int idlNow = (id2 == 22) ? id1 : id2;
195 if (abs(idlNow) != idl)
return 0.;
198 return widthIn * sigBW * qStarPtr->resWidthOpen(idlNow, mH);
206 void Sigma1lgm2lStar::setIdColAcol() {
209 int idlNow = (id2 == 22) ? id1 : id2;
210 int idlStar = (idlNow > 0) ? idRes : -idRes;
211 setId( id1, id2, idlStar);
214 setColAcol( 0, 0, 0, 0, 0, 0);
222 double Sigma1lgm2lStar::weightDecay(
Event& process,
int iResBeg,
226 if (iResBeg != 5 || iResEnd != 5)
return 1.;
229 int sideIn = (process[3].idAbs() < 20) ? 1 : 2;
230 int sideOut = (process[6].idAbs() < 20) ? 1 : 2;
231 double eps = (sideIn == sideOut) ? 1. : -1.;
234 double mr1 = pow2(process[6].m()) / sH;
235 double mr2 = pow2(process[7].m()) / sH;
236 double betaf = sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2);
239 double cosThe = (process[3].p() - process[4].p())
240 * (process[7].p() - process[6].p()) / (sH * betaf);
245 int idBoson = (sideOut == 1) ? process[7].idAbs() : process[6].idAbs();
247 wt = 1. + eps * cosThe;
249 }
else if (idBoson == 23 || idBoson == 24) {
250 double mrB = (sideOut == 1) ? mr2 : mr1;
251 double ratB = (1. - 0.5 * mrB) / (1 + 0.5 * mrB);
252 wt = 1. + eps * cosThe * ratB;
270 void Sigma2qq2qStarq::initProc() {
273 idRes = 4000000 + idq;
274 codeSave = 4020 + idq;
275 if (idq == 1) nameSave =
"q q -> d^* q";
276 else if (idq == 2) nameSave =
"q q -> u^* q";
277 else if (idq == 3) nameSave =
"q q -> s^* q";
278 else if (idq == 4) nameSave =
"q q -> c^* q";
279 else nameSave =
"q q -> b^* q";
282 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
283 preFac = M_PI / pow4(Lambda);
286 openFracPos = particleDataPtr->resOpenFrac( idRes);
287 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
295 void Sigma2qq2qStarq::sigmaKin() {
298 sigmaA = preFac * (1. - s3 / sH);
299 sigmaB = preFac * (-uH) * (sH + tH) / sH2;
307 double Sigma2qq2qStarq::sigmaHat() {
310 int id1Abs = abs(id1);
311 int id2Abs = abs(id2);
312 double open1 = (id1 > 0) ? openFracPos : openFracNeg;
313 double open2 = (id2 > 0) ? openFracPos : openFracNeg;
316 if (id1Abs == idq) sigma += (4./3.) * sigmaA * open1;
317 if (id2Abs == idq) sigma += (4./3.) * sigmaA * open2;
318 }
else if (id1Abs == idq && id2 == -id1)
319 sigma = (8./3.) * sigmaB * (open1 + open2);
320 else if (id2 == -id1) sigma = sigmaB * (open1 + open2);
321 else if (id1Abs == idq) sigma = sigmaB * open1;
322 else if (id2Abs == idq) sigma = sigmaB * open2;
333 void Sigma2qq2qStarq::setIdColAcol() {
336 int idAbs1 = abs(id1);
337 int idAbs2 = abs(id2);
340 if (idAbs1 == idq) open1 = (id1 > 0) ? openFracPos : openFracNeg;
341 if (idAbs2 == idq) open2 = (id2 > 0) ? openFracPos : openFracNeg;
342 if (open1 == 0. && open2 == 0.) {
343 open1 = (id1 > 0) ? openFracPos : openFracNeg;
344 open2 = (id2 > 0) ? openFracPos : openFracNeg;
346 bool excite1 = (open1 > 0.);
347 if (open1 > 0. && open2 > 0.) excite1
348 = (rndmPtr->flat() * (open1 + open2) < open1);
352 id3 = (id1 > 0) ? idRes : -idRes;
355 if ((idAbs1 == idAbs2) && (id1 * id2 < 0)) {
356 id4 = (id3 > 0) ? -idq : idq;
358 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
359 else setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
360 if (id1 < 0) swapColAcol();
362 id3 = (id2 > 0) ? idRes : -idRes;
365 if ((idAbs1 == idAbs2) && (id1 * id2 < 0)) {
366 id4 = (id3 > 0) ? -idq : idq;
369 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
370 else setColAcol( 1, 0, 0, 2, 0, 2, 1, 0);
371 if (id1 < 0) swapColAcol();
373 setId( id1, id2, id3, id4);
383 double Sigma2qq2qStarq::weightDecay(
Event& process,
int iResBeg,
387 if (iResBeg != 5 && iResEnd != 5)
return 1.;
390 double mr1 = pow2(process[7].m() / process[5].m());
391 double mr2 = pow2(process[8].m() / process[5].m());
394 int idAbs3 = process[7].idAbs();
395 Vec4 pQStarCom = (idAbs3 < 20) ? process[7].p() : process[8].p();
396 pQStarCom.bstback(process[5].p());
397 double cosThe = costheta(pQStarCom, process[5].p());
401 int idBoson = (idAbs3 < 20) ? process[8].idAbs() : process[7].idAbs();
402 if (idBoson == 21 || idBoson == 22) {
403 wt = 0.5 * (1. + cosThe);
404 }
else if (idBoson == 23 || idBoson == 24) {
405 double mrB = (idAbs3 < 20) ? mr2 : mr1;
406 double kTrm = 0.5 * (mrB * (1. - cosThe));
407 wt = (1. + cosThe + kTrm) / (2 + mrB);
423 void Sigma2qqbar2lStarlbar::initProc() {
426 idRes = 4000000 + idl;
427 codeSave = 4020 + idl;
428 if (idl == 11) nameSave =
"q qbar -> e^*+- e^-+";
429 else if (idl == 12) nameSave =
"q qbar -> nu_e^* nu_ebar";
430 else if (idl == 13) nameSave =
"q qbar -> mu^*+- mu^-+";
431 else if (idl == 14) nameSave =
"q qbar -> nu_mu^* nu_mubar";
432 else if (idl == 15) nameSave =
"q qbar -> tau^*+- tau^-+";
433 else nameSave =
"q qbar -> nu_tau^* nu_taubar";
436 openFracPos = particleDataPtr->resOpenFrac( idRes);
437 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
440 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
441 preFac = (M_PI / pow4(Lambda)) * (openFracPos + openFracNeg) / 3.;
449 void Sigma2qqbar2lStarlbar::sigmaKin() {
452 sigma = preFac * (-uH) * (sH + tH) / sH2;
460 void Sigma2qqbar2lStarlbar::setIdColAcol() {
463 if (rndmPtr->flat() * (openFracPos + openFracNeg) < openFracPos) {
464 setId( id1, id2, idRes, -idl);
465 if (id1 < 0) swapTU =
true;
467 setId( id1, id2, -idRes, idl);
468 if (id1 > 0) swapTU =
true;
472 if (id1 > 0) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
473 else setColAcol( 0, 1, 1, 0, 0, 0, 0, 0);
483 double Sigma2qqbar2lStarlbar::weightDecay(
Event& process,
int iResBeg,
487 if (iResBeg != 5 && iResEnd != 5)
return 1.;
490 double mr1 = pow2(process[7].m() / process[5].m());
491 double mr2 = pow2(process[8].m() / process[5].m());
494 int idAbs3 = process[7].idAbs();
495 Vec4 pLStarCom = (idAbs3 < 20) ? process[7].p() : process[8].p();
496 pLStarCom.bstback(process[5].p());
497 double cosThe = costheta(pLStarCom, process[5].p());
501 int idBoson = (idAbs3 < 20) ? process[8].idAbs() : process[7].idAbs();
503 wt = 0.5 * (1. + cosThe);
504 }
else if (idBoson == 23 || idBoson == 24) {
505 double mrB = (idAbs3 < 20) ? mr2 : mr1;
506 double kTrm = 0.5 * (mrB * (1. - cosThe));
507 wt = (1. + cosThe + kTrm) / (2 + mrB);
523 void Sigma2QCqq2qq::initProc() {
525 qCLambda2 = settingsPtr->parm(
"ContactInteractions:Lambda");
526 qCetaLL = settingsPtr->mode(
"ContactInteractions:etaLL");
527 qCetaRR = settingsPtr->mode(
"ContactInteractions:etaRR");
528 qCetaLR = settingsPtr->mode(
"ContactInteractions:etaLR");
529 qCLambda2 *= qCLambda2;
537 void Sigma2QCqq2qq::sigmaKin() {
540 sigT = (4./9.) * (sH2 + uH2) / tH2;
541 sigU = (4./9.) * (sH2 + tH2) / uH2;
542 sigTU = - (8./27.) * sH2 / (tH * uH);
543 sigST = - (8./27.) * uH2 / (sH * tH);
545 sigQCSTU = sH2 * (1 / tH + 1 / uH);
546 sigQCUTS = uH2 * (1 / tH + 1 / sH);
554 double Sigma2QCqq2qq::sigmaHat() {
566 sigSum = 0.5 * (sigT + sigU + sigTU);
569 sigQCLL = (8./9.) * alpS * (qCetaLL/qCLambda2) * sigQCSTU
570 + (8./3.) * pow2(qCetaLL/qCLambda2) * sH2;
571 sigQCRR = (8./9.) * alpS * (qCetaRR/qCLambda2) * sigQCSTU
572 + (8./3.) * pow2(qCetaRR/qCLambda2) * sH2;
573 sigQCLR = 2. * (uH2 + tH2) * pow2(qCetaLR/qCLambda2);
580 }
else if (id2 == -id1) {
583 sigSum = sigT + sigST;
586 sigQCLL = (8./9.) * alpS * (qCetaLL/qCLambda2) * sigQCUTS
587 + (5./3.) * pow2(qCetaLL/qCLambda2) * uH2;
588 sigQCRR = (8./9.) * alpS * (qCetaRR/qCLambda2) * sigQCUTS
589 + (5./3.) * pow2(qCetaRR/qCLambda2) * uH2;
590 sigQCLR = 2. * sH2 * pow2(qCetaLR/qCLambda2);
600 sigQCLL = pow2(qCetaLL/qCLambda2) * sH2;
601 sigQCRR = pow2(qCetaRR/qCLambda2) * sH2;
602 sigQCLR = 2 * pow2(qCetaLR/qCLambda2) * uH2;
604 sigQCLL = pow2(qCetaLL/qCLambda2) * uH2;
605 sigQCRR = pow2(qCetaRR/qCLambda2) * uH2;
606 sigQCLR = 2 * pow2(qCetaLR/qCLambda2) * sH2;
611 double sigma = (M_PI/sH2) * ( pow2(alpS) * sigSum
612 + sigQCLL + sigQCRR + sigQCLR );
621 void Sigma2QCqq2qq::setIdColAcol() {
624 setId( id1, id2, id1, id2);
627 if (id1 * id2 > 0) setColAcol( 1, 0, 2, 0, 2, 0, 1, 0);
628 else setColAcol( 1, 0, 0, 1, 2, 0, 0, 2);
629 if (id2 == id1 && (sigT + sigU) * rndmPtr->flat() > sigT)
630 setColAcol( 1, 0, 2, 0, 1, 0, 2, 0);
631 if (id1 < 0) swapColAcol();
644 void Sigma2QCqqbar2qqbar::initProc() {
646 qCnQuarkNew = settingsPtr->mode(
"ContactInteractions:nQuarkNew");
647 qCLambda2 = settingsPtr->parm(
"ContactInteractions:Lambda");
648 qCetaLL = settingsPtr->mode(
"ContactInteractions:etaLL");
649 qCetaRR = settingsPtr->mode(
"ContactInteractions:etaRR");
650 qCetaLR = settingsPtr->mode(
"ContactInteractions:etaLR");
651 qCLambda2 *= qCLambda2;
659 void Sigma2QCqqbar2qqbar::sigmaKin() {
662 idNew = 1 + int( qCnQuarkNew * rndmPtr->flat() );
663 mNew = particleDataPtr->m0(idNew);
669 if (sH > 4. * m2New) {
670 sigS = (4./9.) * (tH2 + uH2) / sH2;
671 sigQC = pow2(qCetaLL/qCLambda2) * uH2
672 + pow2(qCetaRR/qCLambda2) * uH2
673 + 2 * pow2(qCetaLR/qCLambda2) * tH2;
677 sigma = (M_PI / sH2) * qCnQuarkNew * ( pow2(alpS) * sigS + sigQC);
685 void Sigma2QCqqbar2qqbar::setIdColAcol() {
688 id3 = (id1 > 0) ? idNew : -idNew;
689 setId( id1, id2, id3, -id3);
692 setColAcol( 1, 0, 0, 2, 1, 0, 0, 2);
693 if (id1 < 0) swapColAcol();
706 void Sigma2QCffbar2llbar::initProc() {
708 qCLambda2 = settingsPtr->parm(
"ContactInteractions:Lambda");
709 qCetaLL = settingsPtr->mode(
"ContactInteractions:etaLL");
710 qCetaRR = settingsPtr->mode(
"ContactInteractions:etaRR");
711 qCetaLR = settingsPtr->mode(
"ContactInteractions:etaLR");
712 qCLambda2 *= qCLambda2;
715 if (idNew == 11) nameNew =
"f fbar -> (QC) -> e- e+";
716 if (idNew == 13) nameNew =
"f fbar -> (QC) -> mu- mu+";
717 if (idNew == 15) nameNew =
"f fbar -> (QC) -> tau- tau+";
720 qCmNew = particleDataPtr->m0(idNew);
721 qCmNew2 = qCmNew * qCmNew;
722 qCmZ = particleDataPtr->m0(23);
724 qCGZ = particleDataPtr->mWidth(23);
733 void Sigma2QCffbar2llbar::sigmaKin() {
736 double denomPropZ = pow2(sH - qCmZ2) + qCmZ2 * qCGZ2;
737 qCrePropZ = (sH - qCmZ2) / denomPropZ;
738 qCimPropZ = -qCmZ * qCGZ / denomPropZ;
741 if (sH > 4. * qCmNew2) sigma0 = 1./(16. * M_PI * sH2);
749 double Sigma2QCffbar2llbar::sigmaHat() {
752 int idAbs = abs(id1);
755 double tmPe2QfQl = 4. * M_PI * alpEM * couplingsPtr->ef(idAbs)
756 * couplingsPtr->ef(idNew);
757 double tmPgvf = 0.25 * couplingsPtr->vf(idAbs);
758 double tmPgaf = 0.25 * couplingsPtr->af(idAbs);
759 double tmPgLf = tmPgvf + tmPgaf;
760 double tmPgRf = tmPgvf - tmPgaf;
761 double tmPgvl = 0.25 * couplingsPtr->vf(idNew);
762 double tmPgal = 0.25 * couplingsPtr->af(idNew);
763 double tmPgLl = tmPgvl + tmPgal;
764 double tmPgRl = tmPgvl - tmPgal;
765 double tmPe2s2c2 = 4. * M_PI * alpEM
766 / (couplingsPtr->sin2thetaW() * couplingsPtr->cos2thetaW());
770 complex meLL(0., 0.);
771 complex meRR(0., 0.);
772 complex meLR(0., 0.);
773 complex meRL(0., 0.);
776 meLL = tmPe2QfQl * qCPropGm
777 + tmPe2s2c2 * tmPgLf * tmPgLl * (qCrePropZ + I * qCimPropZ)
778 + 4. * M_PI * qCetaLL / qCLambda2;
779 meRR = tmPe2QfQl * qCPropGm
780 + tmPe2s2c2 * tmPgRf * tmPgRl * (qCrePropZ + I * qCimPropZ)
781 + 4. * M_PI * qCetaRR / qCLambda2;
782 meLR = tmPe2QfQl * qCPropGm
783 + tmPe2s2c2 * tmPgLf * tmPgRl * (qCrePropZ + I * qCimPropZ)
784 + 4. * M_PI * qCetaLR / qCLambda2;
785 meRL = tmPe2QfQl * qCPropGm
786 + tmPe2s2c2 * tmPgRf * tmPgLl * (qCrePropZ + I * qCimPropZ)
787 + 4. * M_PI * qCetaLR / qCLambda2;
789 double sigma = sigma0 * uH2 * real(meLL*conj(meLL));
790 sigma += sigma0 * uH2 * real(meRR*conj(meRR));
791 sigma += sigma0 * tH2 * real(meLR*conj(meLR));
792 sigma += sigma0 * tH2 * real(meRL*conj(meRL));
795 if (idAbs < 9) sigma /= 3.;
804 void Sigma2QCffbar2llbar::setIdColAcol() {
807 setId(id1, id2, idNew, -idNew);
813 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
814 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
815 if (id1 < 0) swapColAcol();