9 #include "Pythia8/SigmaDM.h"
22 void Sigma1ffbar2Zp2XX::initProc() {
25 kinMix = parm(
"Zp:kineticMixing");
26 mRes = particleDataPtr->m0(55);
27 GammaRes = particleDataPtr->mWidth(55);
29 alpEM = coupSMPtr->alphaEM(m2Res);
31 eps = parm(
"Zp:epsilon");
34 particlePtr = particleDataPtr->particleDataEntryPtr(55);
37 double mf, mr, psvec, psaxi, betaf;
38 int decMode = mode(
"Zp:decayMode");
40 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
41 int idAbs = abs( particlePtr->channel(i).product(0));
48 if (idAbs != 52 && decMode == 0) turnOff =
true;
50 else if (decMode == 1 && idAbs > 10) turnOff =
true;
51 else if (decMode > 1) {
52 if (idAbs < 10 || idAbs > 20) turnOff =
true;
54 if (decMode == 2 && idAbs %2 == 0 ) turnOff =
true;
56 if (decMode == 3 && idAbs %2 ) turnOff =
true;
59 particlePtr->channel(i).onMode(0);
65 if (abs(id1)%2 == 0) {
67 vf = eps * (2./3. + coupSMPtr->vf(2));
68 af = eps * coupSMPtr->af(2);
75 vf = eps * (-1./3. + coupSMPtr->vf(1));
76 af = eps * coupSMPtr->af(1);
85 if (idAbs > 10 && idAbs < 17) {
86 if (abs(id1)%2 == 0) {
88 vf = eps * coupSMPtr->vf(12);
89 af = eps * coupSMPtr->af(12);
96 vf = eps * (-1. + coupSMPtr->vf(11));
97 af = eps * coupSMPtr->af(11);
112 mf = particleDataPtr->m0(idAbs);
113 if (mRes > 2. * mf + MASSMARGIN) {
114 mr = pow2(mf / mRes);
115 betaf = sqrtpos(1. - 4. * mr);
116 psvec = betaf * (1. + 2. * mr);
119 double fac = (kinMix && idAbs != 52) ? 4.0 * M_PI * alpEM : pow2(gZp);
120 if (idAbs < 10) fac *= 3.0;
121 preFac += fac * (vf * vf * psvec + af * af * psaxi ) ;
132 void Sigma1ffbar2Zp2XX::sigmaKin() {
134 sigma0 = mRes / ( pow2(sH - m2Res) + pow2(mRes * GammaRes) );
142 double Sigma1ffbar2Zp2XX::sigmaHat() {
145 if (id1 + id2 != 0 || abs(id1) > 6 )
return 0.;
149 if (abs(id1)%2 == 0) {
151 vf = eps * coupSMPtr->vf(2);
152 af = eps * coupSMPtr->af(2);
159 vf = eps * coupSMPtr->vf(1);
160 af = eps * coupSMPtr->af(1);
168 double coup = pow2(gZp);
169 if (kinMix) coup = 4.0 * M_PI * alpEM;
170 double vf2af2 = coup * (vf * vf + af * af);
171 double sigma = preFac * sigma0 * vf2af2;
174 if (abs(id1) < 7) sigma /= 3;
185 void Sigma1ffbar2Zp2XX::setIdColAcol() {
189 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0);
190 else setColAcol( 0, 0, 0, 0, 0, 0);
191 if (id1 < 0) swapColAcol();
204 void Sigma2qqbar2Zpg2XXj::initProc() {
207 kinMix = flag(
"Zp:kineticMixing");
208 mRes = particleDataPtr->m0(55);
209 GammaRes = particleDataPtr->mWidth(55);
211 alpEM = coupSMPtr->alphaEM(m2Res);
212 gZp = parm(
"Zp:gZp");
213 eps = parm(
"Zp:epsilon");
216 particlePtr = particleDataPtr->particleDataEntryPtr(55);
220 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
221 int idAbs = abs( particlePtr->channel(i).product(0));
222 if (idAbs < 20) particlePtr->channel(i).onMode(0);
224 preFac = particleDataPtr->resOpenFrac(52, -52);
232 void Sigma2qqbar2Zpg2XXj::sigmaKin() {
234 double propZp = s3 / ( pow2(s3 - m2Res) + pow2(mRes * GammaRes) );
235 double alpD = pow2(gZp) / 4.0 / M_PI;
236 if (kinMix) alpD = alpEM;
237 sigma0 = (M_PI / sH2) * (alpD * alpS) * propZp
238 * (2./9.) * (tH2 + uH2 + 2. * sH * s3) / (tH * uH);
246 double Sigma2qqbar2Zpg2XXj::sigmaHat() {
249 if (id1 + id2 != 0 || abs(id1) > 6 )
return 0.;
253 if (abs(id1)%2 == 0) {
255 vf = eps * coupSMPtr->vf(2);
256 af = eps * coupSMPtr->af(2);
263 vf = eps * coupSMPtr->vf(1);
264 af = eps * coupSMPtr->af(1);
272 double vf2af2 = vf * vf + af * af;
273 double sigma = sigma0 * vf2af2 * preFac;
284 void Sigma2qqbar2Zpg2XXj::setIdColAcol() {
286 setId(id1, id2, 55, 21);
289 if (id1 > 0) setColAcol( 1, 0, 0, 2, 0, 0, 1, 2);
290 else setColAcol( 0, 2, 1, 0, 0, 0, 1, 2);
303 void Sigma2ffbar2ZpH::initProc() {
306 kinMix = flag(
"Zp:kineticMixing");
307 mRes = particleDataPtr->m0(55);
308 GammaRes = particleDataPtr->mWidth(55);
310 coupZpH = parm(
"Zp:coupH");
311 gZp = parm(
"Zp:gZp");
312 eps = parm(
"Zp:epsilon");
313 if (kinMix) coupZpH = eps;
316 particlePtr = particleDataPtr->particleDataEntryPtr(55);
319 openFrac = particleDataPtr->resOpenFrac(55, 25);
327 void Sigma2ffbar2ZpH::sigmaKin() {
329 double denom = (pow2(sH - m2Res) + pow2(mRes * GammaRes));
330 sigma0 = (M_PI / sH2) * 8. * pow2(gZp * coupZpH)
331 * (tH * uH - s3 * s4 + 2. * sH * s4);
340 double Sigma2ffbar2ZpH::sigmaHat() {
343 if (id1 + id2 != 0 )
return 0.;
346 double vf = 0., af = 0.;
347 if (abs(id1)%2 == 0) {
349 vf = eps * coupSMPtr->vf(2);
350 af = eps * coupSMPtr->af(2);
357 vf = eps * coupSMPtr->vf(1);
358 af = eps * coupSMPtr->af(1);
366 double sigma = sigma0 * (vf * vf + af * af);
367 if (abs(id1) < 9) sigma /= 3.;
381 void Sigma2ffbar2ZpH::setIdColAcol() {
383 setId(id1, id2, 55, 25);
385 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
386 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
387 if (id1 < 0) swapColAcol();
400 void Sigma1gg2S2XX::initProc() {
403 mRes = particleDataPtr->m0(54);
404 GammaRes = particleDataPtr->mWidth(54);
408 particlePtr = particleDataPtr->particleDataEntryPtr(54);
411 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
412 int idAbs = abs( particlePtr->channel(i).product(0));
413 if (idAbs != 52) particlePtr->channel(i).onMode(0);
422 void Sigma1gg2S2XX::sigmaKin() {
424 double propS = sH / ( pow2(sH - m2Res) + pow2(mRes * GammaRes) );
425 sigma0 = 8. * M_PI * propS;
433 double Sigma1gg2S2XX::sigmaHat() {
436 if (id1 != id2 || abs(id1) != 21 )
return 0.;
439 double widthIn = particlePtr->resWidthChan( mRes, 21, 21) / 64.;
442 double widthOut = particlePtr->resWidthChan( mRes, 52, -52);
445 double sigma = widthIn * sigma0 * widthOut;
456 void Sigma1gg2S2XX::setIdColAcol() {
459 setColAcol( 1, 2, 2, 1, 0, 0);
472 void Sigma2gg2Sg2XXj::initProc() {
475 mRes = particleDataPtr->m0(54);
476 GammaRes = particleDataPtr->mWidth(54);
480 particlePtr = particleDataPtr->particleDataEntryPtr(54);
483 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
484 int idAbs = abs( particlePtr->channel(i).product(0));
485 if (idAbs != 52) particlePtr->channel(i).onMode(0);
494 void Sigma2gg2Sg2XXj::sigmaKin() {
496 double wid = particlePtr->resWidthChan(m3, 21, 21);
497 sigma0 = (M_PI / sH2) * (3. / 16.) * alpS * (wid / m3)
498 * (sH2 * sH2 + tH2 * tH2 + uH2 * uH2 + pow2(sH2))
499 / (sH * tH * uH * sH);
507 double Sigma2gg2Sg2XXj::sigmaHat() {
509 return sigma0 * particlePtr->resWidthChan(mRes, 52, -52);
517 void Sigma2gg2Sg2XXj::setIdColAcol() {
519 setId(id1, id2, 54, 21);
521 if( rndmPtr->flat() < 0.5)
522 setColAcol( 1, 2, 3, 1, 0, 0, 3, 2);
524 setColAcol( 1, 2, 2, 3, 0, 0, 1, 3);
530 void Sigma2qqbar2DY::initProc() {
533 type = mode(
"DM:DYtype");
534 nplet = mode(
"DM:Nplet");
536 nameSave =
"q qbar -> Sl(DM) Sl(DM)*";
539 }
else if (type == 2) {
540 nameSave =
"q qbar -> X+ X-";
543 }
else if (type == 3) {
544 nameSave =
"q qbar -> X++ X--";
547 }
else if (type == 4) {
548 nameSave =
"q qbar' -> X2 X+ + c.c.";
557 Lambda = parm(
"DM:Lambda");
561 double mixing = vev / Lambda;
562 if (type > 1) mixing *= sqrt(2) * vev;
563 if (type > 2) mixing *= pow2(vev) / pow2(Lambda) / sqrt(12);
564 double term1 = sqrt(pow2(M2 - M1) + pow2(mixing));
565 double sin2th = 0.5 * (1 - abs(M2 - M1) / term1);
571 coupW11 = sqrt(sin2th);
572 coupW12 = sqrt(1.0 - sin2th);
579 if (type == 4 && coupW12 < coupW11) {
586 mRes = particleDataPtr->m0(23);
587 GammaRes = particleDataPtr->mWidth(23);
590 mRes = particleDataPtr->m0(24);
591 GammaRes = particleDataPtr->mWidth(24);
594 xW = coupSMPtr->sin2thetaW();
597 openFracPair = particleDataPtr->resOpenFrac(id3, id4);
602 void Sigma2qqbar2DY::sigmaKin() {
605 double sV = sH - m2Res;
606 double d = pow2(sV) + pow2(mRes * GammaRes);
607 propRes = complex( sV / d, mRes * GammaRes / d);
609 sigma0 = M_PI/(4 * sH2) * openFracPair * pow2(alpEM);
615 double Sigma2qqbar2DY::sigmaHat() {
618 if (id1 * id2 > 0)
return 0.0;
621 double facTU = uH*tH-s3*s4;
623 double eQ = (id1A%2 == 0) ? 2./3. : -1./3. ;
625 double LqZ = coupSMPtr->lf(abs(id1));
626 double RqZ = coupSMPtr->rf(abs(id1));
628 double sumColS = 0., sumColT = 0., sumInterference = 0.;
629 double LL = 0., RR = 0.;
632 if (nplet == 1) { LL = 1.0 - 2.0 * xW; RR = -2.0 * xW; }
633 if (nplet == 2 || nplet == 3) { LL = 2.0 - 2.0 * xW; RR = -2.0 * xW; }
636 if (type == 3) { LL = 4.0 - 2.0 * xW; RR = -2.0 * xW; }
639 if (abs(id1) == abs(id2) && abs(id3) == abs(id4)) {
641 CoupZ = coupSMPtr->rf(11);
646 sumColS += sigma0 * facTU / 16.0 / pow2(xW) / pow2(1.0-xW)
647 * norm(propRes) * CoupZ * ( pow2(LqZ) + pow2(RqZ) );
649 sumColS += (abs(CoupZ) > 0.0) ? 2. * pow2(eQ) * pow2(eSl) * sigma0
650 * facTU / pow2(sH) : 0.0;
652 sumInterference += eQ * eSl * sigma0 * facTU / 2.0 / xW / (1.-xW)
653 * sqrt(norm(propRes)) / sH * CoupZ * (LqZ + RqZ);
657 if (type > 1 && type < 4) {
658 double fac = (uH - s3) * (uH - s4) + (tH - s3) * (tH - s4)
660 sumColS += sigma0 * fac * norm(propRes) * (pow2(LL) + pow2(RR))
661 * ( pow2(LqZ) + pow2(RqZ) );
662 sumColS += (abs(CoupZ) > 0.0) ? 2. * pow2(eQ) * pow2(eSl) * sigma0 * fac
664 sumInterference += eQ * eSl * sigma0 * fac / 2.0 / xW / (1.-xW)
665 * sqrt(norm(propRes)) / sH * CoupZ * (LqZ + RqZ);
669 }
else if (type == 4) {
670 if (!isUD || id1 * id2 > 0)
return 0.0;
671 if (abs(id1)%2 + abs(id2)%2 != 1)
return 0.0 ;
674 double coupW = coupW11 > coupW12 ? coupW11 : coupW12;
675 double fac = pow2(coupW) * norm(propRes) / 2.0;
676 sumColS = (uH - s3) * (uH - s4) + (tH - s3) * (tH - s4) + 2 * m3 * m4 * sH;
677 sumColS *= sigma0 * fac / xW ;
683 double sigma = sumColS + sumColT + sumInterference;
691 void Sigma2qqbar2DY::setIdColAcol() {
694 int up = abs(id1)%2 == 0 ? id1 : id2;
695 if (up < 0 && abs(id3) == 57 && id4 == 58)
696 setId(id1, id2, -57, 58);
698 setId(id1, id2, id3, id4);
701 if (abs(id1) < 9) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
702 else setColAcol( 0, 0, 0, 0, 0, 0, 0, 0);
703 if (id1 < 0) swapColAcol();