9 #include "Pythia8/ParticleData.h"
10 #include "Pythia8/ResonanceWidths.h"
11 #include "Pythia8/PythiaComplex.h"
26 const int ResonanceWidths::NPOINT = 100;
29 const double ResonanceWidths::MASSMIN = 0.4;
32 const double ResonanceWidths::MASSMARGIN = 0.1;
39 bool ResonanceWidths::init(Info* infoPtrIn, Settings* settingsPtrIn,
40 ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn) {
44 settingsPtr = settingsPtrIn;
45 particleDataPtr = particleDataPtrIn;
46 couplingsPtr = couplingsPtrIn;
49 bool isInit = initBSM();
52 minWidth = settingsPtr->parm(
"ResonanceWidths:minWidth");
53 minThreshold = settingsPtr->parm(
"ResonanceWidths:minThreshold");
56 particlePtr = particleDataPtr->particleDataEntryPtr(idRes);
57 if (particlePtr == 0) {
58 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
59 " unknown resonance identity code");
65 if (idRes == 35 || idRes == 36 || idRes == 37
66 || idRes/1000000 == 3) isGeneric =
false;
69 hasAntiRes = particlePtr->hasAnti();
70 mRes = particlePtr->m0();
71 GammaRes = particlePtr->mWidth();
78 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
79 " resonance mass too small",
"for id = " + idCode.str(),
true);
84 if (GammaRes < minWidth) GammaRes = 0.1 * minWidth;
85 GamMRat = (mRes == 0.) ? 0. : GammaRes / mRes;
93 doForceWidth = particlePtr->doForceWidth();
94 if (idRes == 23 && settingsPtr->mode(
"WeakZ0:gmZmode") != 2)
96 if (idRes == 33 && settingsPtr->mode(
"Zprime:gmZmode") != 3)
102 allowCalcWidth = isInit && allowCalc();
103 if ( allowCalcWidth ) {
117 double openSecPos, openSecNeg;
120 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
122 onMode = particlePtr->channel(i).onMode();
123 meMode = particlePtr->channel(i).meMode();
124 mult = particlePtr->channel(i).multiplicity();
128 if ( meMode < 0 || meMode > 103 || (isGeneric && meMode < 100) ) {
129 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
130 " resonance meMode not acceptable");
134 if (meMode < 100 && allowCalcWidth) {
137 id1 = particlePtr->channel(i).product(0);
138 id2 = particlePtr->channel(i).product(1);
143 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
147 id3 = particlePtr->channel(i).product(2);
151 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
152 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
156 mf1 = particleDataPtr->m0(id1Abs);
157 mf2 = particleDataPtr->m0(id2Abs);
158 mr1 = pow2(mf1 / mHat);
159 mr2 = pow2(mf2 / mHat);
160 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
161 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
163 mf3 = particleDataPtr->m0(id3Abs);
164 mr3 = pow2(mf3 / mHat);
172 else widNow = GammaRes * particlePtr->channel(i).bRatio();
177 if (widNow > 0.)
for (
int j = 0; j < mult; ++j) {
178 idNow = particlePtr->channel(i).product(j);
179 idAnti = (particleDataPtr->hasAnti(idNow)) ? -idNow : idNow;
182 if (idNow == 23 || abs(idNow) == 24 || idNow == 93 || abs(idNow) == 94
183 || particleDataPtr->m0(abs(idNow)) < mRes) {
184 openSecPos *= particleDataPtr->resOpenFrac(idNow);
185 openSecNeg *= particleDataPtr->resOpenFrac(idAnti);
190 particlePtr->channel(i).onShellWidth(widNow);
191 particlePtr->channel(i).openSec( idRes, openSecPos);
192 particlePtr->channel(i).openSec(-idRes, openSecNeg);
196 if (onMode == 1 || onMode == 2) widPos += widNow * openSecPos;
197 if (onMode == 1 || onMode == 3) widNeg += widNow * openSecNeg;
201 if (widTot < minWidth) {
202 particlePtr->setMayDecay(
false,
false);
203 particlePtr->setMWidth(0.,
false);
204 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
205 particlePtr->channel(i).bRatio( 0.,
false);
211 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
212 bRatio = particlePtr->channel(i).onShellWidth() / widTot;
213 particlePtr->channel(i).bRatio( bRatio,
false);
218 forceFactor = GammaRes / widTot;
219 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
220 particlePtr->channel(i).onShellWidthFactor( forceFactor);
225 particlePtr->setMWidth(widTot,
false);
230 GamMRat = GammaRes / mRes;
231 openPos = widPos / widTot;
232 openNeg = widNeg / widTot;
235 bool isHiggs = (idRes == 25 || idRes == 35 ||idRes == 36 ||idRes == 37);
236 bool clipHiggsWings = settingsPtr->flag(
"Higgs:clipWings");
237 if (isHiggs && clipHiggsWings) {
238 double mMinNow = particlePtr->mMin();
239 double mMaxNow = particlePtr->mMax();
240 double wingsFac = settingsPtr->parm(
"Higgs:wingsFac");
241 double mMinWing = mRes - wingsFac * GammaRes;
242 double mMaxWing = mRes + wingsFac * GammaRes;
243 if (mMinWing > mMinNow) particlePtr->setMMinNoChange(mMinWing);
244 if (mMaxWing < mMaxNow || mMaxNow < mMinNow)
245 particlePtr->setMMaxNoChange(mMaxWing);
257 double ResonanceWidths::width(
int idSgn,
double mHatIn,
int idInFlavIn,
258 bool openOnly,
bool setBR,
int idOutFlav1,
int idOutFlav2) {
262 idInFlav = idInFlavIn;
263 if (allowCalcWidth) calcPreFac(
false);
267 double mfSum, psOnShell;
270 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
272 onMode = particlePtr->channel(i).onMode();
273 meMode = particlePtr->channel(i).meMode();
274 mult = particlePtr->channel(i).multiplicity();
278 if (setBR) particlePtr->channel(i).currentBR(widNow);
282 if (idOutFlav1 > 0 || idOutFlav2 > 0) {
283 if (mult > 2)
continue;
284 if (particlePtr->channel(i).product(0) != idOutFlav1)
continue;
285 if (particlePtr->channel(i).product(1) != idOutFlav2)
continue;
290 if (idSgn > 0 && onMode !=1 && onMode != 2)
continue;
291 if (idSgn < 0 && onMode !=1 && onMode != 3)
continue;
298 id1 = particlePtr->channel(i).product(0);
299 id2 = particlePtr->channel(i).product(1);
304 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
308 id3 = particlePtr->channel(i).product(2);
312 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
313 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
317 mf1 = particleDataPtr->m0(id1Abs);
318 mf2 = particleDataPtr->m0(id2Abs);
319 mr1 = pow2(mf1 / mHat);
320 mr2 = pow2(mf2 / mHat);
321 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
322 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
324 mf3 = particleDataPtr->m0(id3Abs);
325 mr3 = pow2(mf3 / mHat);
333 else if (meMode == 100)
334 widNow = GammaRes * particlePtr->channel(i).bRatio();
337 else if (meMode == 101) {
339 for (
int j = 0; j < mult; ++j) mfSum
340 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
341 if (mfSum + MASSMARGIN < mHat)
342 widNow = GammaRes * particlePtr->channel(i).bRatio();
346 else if ( (meMode == 102 || meMode == 103) && mult == 2) {
347 mf1 = particleDataPtr->m0( particlePtr->channel(i).product(0) );
348 mf2 = particleDataPtr->m0( particlePtr->channel(i).product(1) );
349 mr1 = pow2(mf1 / mHat);
350 mr2 = pow2(mf2 / mHat);
351 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
352 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
353 mr1 = pow2(mf1 / mRes);
354 mr2 = pow2(mf2 / mRes);
355 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
356 sqrtpos( pow2(1.- mr1 - mr2) - 4. * mr1 * mr2) );
357 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
361 else if (meMode == 102 || meMode == 103) {
363 for (
int j = 0; j < mult; ++j) mfSum
364 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
365 ps = sqrtpos(1. - mfSum / mHat);
366 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
367 sqrtpos(1. - mfSum / mRes) );
368 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
372 if (openOnly) widNow *= particlePtr->channel(i).openSec(idSgn);
375 if (doForceWidth) widNow *= forceFactor;
383 if (setBR) particlePtr->channel(i).currentBR(widNow);
398 double ResonanceWidths::numInt1BW(
double mHatIn,
double m1,
double Gamma1,
399 double mMin1,
double m2,
int psMode) {
402 if (mMin1 + m2 > mHatIn)
return 0.;
406 double mG1 = m1 * Gamma1;
407 double mMax1 = mHatIn - m2;
408 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
409 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
410 double atanDif1 = atanMax1 - atanMin1;
411 double wtDif1 = atanDif1 / (M_PI * NPOINT);
414 double xStep = 1. / NPOINT;
418 double mrNow2 = pow2(m2 / mHatIn);
419 double xNow1, sNow1, mNow1, mrNow1, psNow, value;
422 for (
int ip1 = 0; ip1 < NPOINT; ++ip1) {
423 xNow1 = xStep * (ip1 + 0.5);
424 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
425 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
426 mrNow1 = pow2(mNow1 / mHatIn);
429 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
430 - 4. * mrNow1 * mrNow2);
432 if (psMode == 1) value = psNow;
433 else if (psMode == 2) value = psNow * psNow;
434 else if (psMode == 3) value = pow3(psNow);
435 else if (psMode == 5) value = psNow
436 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
437 else if (psMode == 6) value = pow3(psNow);
455 double ResonanceWidths::numInt2BW(
double mHatIn,
double m1,
double Gamma1,
456 double mMin1,
double m2,
double Gamma2,
double mMin2,
int psMode) {
459 if (mMin1 + mMin2 >= mHatIn)
return 0.;
463 double mG1 = m1 * Gamma1;
464 double mMax1 = mHatIn - mMin2;
465 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
466 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
467 double atanDif1 = atanMax1 - atanMin1;
468 double wtDif1 = atanDif1 / (M_PI * NPOINT);
470 double mG2 = m2 * Gamma2;
471 double mMax2 = mHatIn - mMin1;
472 double atanMin2 = atan( (mMin2 * mMin2 - s2) / mG2 );
473 double atanMax2 = atan( (mMax2 * mMax2 - s2) / mG2 );
474 double atanDif2 = atanMax2 - atanMin2;
475 double wtDif2 = atanDif2 / (M_PI * NPOINT);
479 bool mustDiv =
false;
481 double atanDiv1 = 0.;
482 double atanDLo1 = 0.;
483 double atanDHi1 = 0.;
487 double atanDiv2 = 0.;
488 double atanDLo2 = 0.;
489 double atanDHi2 = 0.;
492 if (m1 + m2 > mHatIn) {
494 double tmpDiv = (mHatIn - m1 - m2) / (Gamma1 + Gamma2);
495 mDiv1 = m1 + Gamma1 * tmpDiv;
496 atanDiv1 = atan( (mDiv1 * mDiv1 - s1) / mG1 );
497 atanDLo1 = atanDiv1 - atanMin1;
498 atanDHi1 = atanMax1 - atanDiv1;
499 wtDLo1 = atanDLo1 / (M_PI * NPOINT);
500 wtDHi1 = atanDHi1 / (M_PI * NPOINT);
501 mDiv2 = m2 + Gamma2 * tmpDiv;
502 atanDiv2 = atan( (mDiv2 * mDiv2 - s2) / mG2 );
503 atanDLo2 = atanDiv2 - atanMin2;
504 atanDHi2 = atanMax2 - atanDiv2;
505 wtDLo2 = atanDLo2 / (M_PI * NPOINT);
506 wtDHi2 = atanDHi2 / (M_PI * NPOINT);
510 double xStep = 1. / NPOINT;
511 int nIter = (mustDiv) ? 2 * NPOINT : NPOINT;
515 double xNow1, sNow1, mNow1, mrNow1, xNow2, sNow2, mNow2, mrNow2, psNow,
517 double wtNow1 = wtDif1;
518 double wtNow2 = wtDif2;
521 for (
int ip1 = 0; ip1 < nIter; ++ip1) {
523 xNow1 = xStep * (ip1 + 0.5);
524 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
525 }
else if (ip1 < NPOINT) {
526 xNow1 = xStep * (ip1 + 0.5);
527 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDLo1);
530 xNow1 = xStep * (ip1 - NPOINT + 0.5);
531 sNow1 = s1 + mG1 * tan(atanDiv1 + xNow1 * atanDHi1);
534 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
535 mrNow1 = pow2(mNow1 / mHatIn);
538 for (
int ip2 = 0; ip2 < nIter; ++ip2) {
540 xNow2 = xStep * (ip2 + 0.5);
541 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDif2);
542 }
else if (ip2 < NPOINT) {
543 xNow2 = xStep * (ip2 + 0.5);
544 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDLo2);
547 xNow2 = xStep * (ip2 - NPOINT + 0.5);
548 sNow2 = s2 + mG2 * tan(atanDiv2 + xNow2 * atanDHi2);
551 mNow2 = min( mMax2, max( mMin2, sqrtpos(sNow2) ) );
552 mrNow2 = pow2(mNow2 / mHatIn);
555 if (mNow1 + mNow2 > mHatIn)
break;
558 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
559 - 4. * mrNow1 * mrNow2);
561 if (psMode == 1) value = psNow;
562 else if (psMode == 2) value = psNow * psNow;
563 else if (psMode == 3) value = pow3(psNow);
564 else if (psMode == 5) value = psNow
565 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
566 else if (psMode == 6) value = pow3(psNow);
567 sum += value * wtNow1 * wtNow2;
586 void ResonanceGmZ::initConstants() {
589 gmZmode = settingsPtr->mode(
"WeakZ0:gmZmode");
590 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW()
591 * couplingsPtr->cos2thetaW());
594 if (idRes == 93) gmZmode = 2;
602 void ResonanceGmZ::calcPreFac(
bool calledFromInit) {
605 alpEM = couplingsPtr->alphaEM(mHat * mHat);
606 alpS = couplingsPtr->alphaS(mHat * mHat);
607 colQ = 3. * (1. + alpS / M_PI);
608 preFac = alpEM * thetaWRat * mHat / 3.;
611 if (!calledFromInit) {
617 int idInFlavAbs = abs(idInFlav);
618 if (idInFlavAbs > 0 && idInFlavAbs < 19) {
619 ei2 = couplingsPtr->ef2(idInFlavAbs);
620 eivi = couplingsPtr->efvf(idInFlavAbs);
621 vi2ai2 = couplingsPtr->vf2af2(idInFlavAbs);
625 double sH = mHat * mHat;
627 intNorm = 2. * eivi * thetaWRat * sH * (sH - m2Res)
628 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
629 resNorm = vi2ai2 * pow2(thetaWRat * sH)
630 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
633 if (gmZmode == 1) {intNorm = 0.; resNorm = 0.;}
634 if (gmZmode == 2) {gamNorm = 0.; intNorm = 0.;}
643 void ResonanceGmZ::calcWidth(
bool calledFromInit) {
646 if (ps == 0.)
return;
649 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
652 if (calledFromInit) {
655 widNow = preFac * ps * (couplingsPtr->vf2(id1Abs) * (1. + 2. * mr1)
656 + couplingsPtr->af2(id1Abs) * ps*ps);
657 if (id1Abs < 6) widNow *= colQ;
664 double kinFacV = ps * (1. + 2. * mr1);
665 double ef2 = couplingsPtr->ef2(id1Abs) * kinFacV;
666 double efvf = couplingsPtr->efvf(id1Abs) * kinFacV;
667 double vf2af2 = couplingsPtr->vf2(id1Abs) * kinFacV
668 + couplingsPtr->af2(id1Abs) * pow3(ps);
671 widNow = gamNorm * ef2 + intNorm * efvf + resNorm * vf2af2;
674 if (id1Abs < 6) widNow *= colQ;
688 void ResonanceW::initConstants() {
691 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
699 void ResonanceW::calcPreFac(
bool) {
702 alpEM = couplingsPtr->alphaEM(mHat * mHat);
703 alpS = couplingsPtr->alphaS(mHat * mHat);
704 colQ = 3. * (1. + alpS / M_PI);
705 preFac = alpEM * thetaWRat * mHat;
713 void ResonanceW::calcWidth(
bool) {
716 if (ps == 0.)
return;
719 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
724 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2));
725 if (id1Abs < 6) widNow *= colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
738 void ResonanceTop::initConstants() {
741 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW());
742 m2W = pow2(particleDataPtr->m0(24));
745 tanBeta = settingsPtr->parm(
"HiggsHchg:tanBeta");
746 tan2Beta = tanBeta * tanBeta;
747 mbRun = particleDataPtr->mRun( 5, particleDataPtr->m0(6) );
755 void ResonanceTop::calcPreFac(
bool) {
758 alpEM = couplingsPtr->alphaEM(mHat * mHat);
759 alpS = couplingsPtr->alphaS(mHat * mHat);
760 colQ = 1. - 2.5 * alpS / M_PI;
761 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
769 void ResonanceTop::calcWidth(
bool) {
773 if (ps == 0.)
return;
776 if (id1Abs == 24 && id2Abs < 6) {
778 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
781 widNow *= colQ * couplingsPtr->V2CKMid(6, id2Abs);
784 }
else if (id1Abs == 37 && id2Abs == 5) {
785 widNow = preFac * ps * ( (1. + mr2 - mr1)
786 * (pow2(mbRun / mHat) * tan2Beta + 1. / tan2Beta)
787 + 4. * mbRun * mf2 / pow2(mHat) );
801 void ResonanceFour::initConstants() {
804 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW());
805 m2W = pow2(particleDataPtr->m0(24));
813 void ResonanceFour::calcPreFac(
bool) {
816 alpEM = couplingsPtr->alphaEM(mHat * mHat);
817 alpS = couplingsPtr->alphaS(mHat * mHat);
818 colQ = (idRes < 9) ? 1. - 2.5 * alpS / M_PI : 1.;
819 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
827 void ResonanceFour::calcWidth(
bool) {
830 if (id1Abs != 24 || id2Abs > 18)
return;
833 if (ps == 0.)
return;
835 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
838 if (idRes < 9) widNow *= colQ * couplingsPtr->V2CKMid(idRes, id2Abs);
854 const double ResonanceH::MASSMINWZ = 10.;
855 const double ResonanceH::MASSMINT = 100.;
858 const double ResonanceH::GAMMAMARGIN = 10.;
864 void ResonanceH::initConstants() {
867 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
868 useRunLoopMass = settingsPtr->flag(
"Higgs:runningLoopMass");
869 sin2tW = couplingsPtr->sin2thetaW();
870 cos2tW = 1. - sin2tW;
871 mT = particleDataPtr->m0(6);
872 mZ = particleDataPtr->m0(23);
873 mW = particleDataPtr->m0(24);
874 mHchg = particleDataPtr->m0(37);
875 GammaT = particleDataPtr->mWidth(6);
876 GammaZ = particleDataPtr->mWidth(23);
877 GammaW = particleDataPtr->mWidth(24);
880 useNLOWidths = (higgsType == 0) && settingsPtr->flag(
"HiggsSM:NLOWidths");
881 rescAlpS = 0.12833 / couplingsPtr->alphaS(125. * 125.);
897 if (higgsType == 1) {
898 coup2d = settingsPtr->parm(
"HiggsH1:coup2d");
899 coup2u = settingsPtr->parm(
"HiggsH1:coup2u");
900 coup2l = settingsPtr->parm(
"HiggsH1:coup2l");
901 coup2Z = settingsPtr->parm(
"HiggsH1:coup2Z");
902 coup2W = settingsPtr->parm(
"HiggsH1:coup2W");
903 coup2Hchg = settingsPtr->parm(
"HiggsH1:coup2Hchg");
904 }
else if (higgsType == 2) {
905 coup2d = settingsPtr->parm(
"HiggsH2:coup2d");
906 coup2u = settingsPtr->parm(
"HiggsH2:coup2u");
907 coup2l = settingsPtr->parm(
"HiggsH2:coup2l");
908 coup2Z = settingsPtr->parm(
"HiggsH2:coup2Z");
909 coup2W = settingsPtr->parm(
"HiggsH2:coup2W");
910 coup2Hchg = settingsPtr->parm(
"HiggsH2:coup2Hchg");
911 coup2H1H1 = settingsPtr->parm(
"HiggsH2:coup2H1H1");
912 coup2A3A3 = settingsPtr->parm(
"HiggsH2:coup2A3A3");
913 coup2H1Z = settingsPtr->parm(
"HiggsH2:coup2H1Z");
914 coup2A3Z = settingsPtr->parm(
"HiggsA3:coup2H2Z");
915 coup2A3H1 = settingsPtr->parm(
"HiggsH2:coup2A3H1");
916 coup2HchgW = settingsPtr->parm(
"HiggsH2:coup2HchgW");
917 }
else if (higgsType == 3) {
918 coup2d = settingsPtr->parm(
"HiggsA3:coup2d");
919 coup2u = settingsPtr->parm(
"HiggsA3:coup2u");
920 coup2l = settingsPtr->parm(
"HiggsA3:coup2l");
921 coup2Z = settingsPtr->parm(
"HiggsA3:coup2Z");
922 coup2W = settingsPtr->parm(
"HiggsA3:coup2W");
923 coup2Hchg = settingsPtr->parm(
"HiggsA3:coup2Hchg");
924 coup2H1H1 = settingsPtr->parm(
"HiggsA3:coup2H1H1");
925 coup2H1Z = settingsPtr->parm(
"HiggsA3:coup2H1Z");
926 coup2HchgW = settingsPtr->parm(
"HiggsA3:coup2Hchg");
931 int psModeT = (higgsType < 3) ? 3 : 1;
932 int psModeWZ = (higgsType < 3) ? 5 : 6;
933 mLowT = max( 2.02 * MASSMINT, 0.5 * mT);
934 mStepT = 0.01 * (3. * mT - mLowT);
935 mLowZ = max( 2.02 * MASSMINWZ, 0.5 * mZ);
936 mStepZ = 0.01 * (3. * mZ - mLowZ);
937 mLowW = max( 2.02 * MASSMINWZ, 0.5 * mW);
938 mStepW = 0.01 * (3. * mW - mLowW);
939 for (
int i = 0; i <= 100; ++i) {
940 kinFacT[i] = numInt2BW( mLowT + i * mStepT,
941 mT, GammaT, MASSMINT, mT, GammaT, MASSMINT, psModeT);
942 kinFacZ[i] = numInt2BW( mLowZ + i * mStepZ,
943 mZ, GammaZ, MASSMINWZ, mZ, GammaZ, MASSMINWZ, psModeWZ);
944 kinFacW[i] = numInt2BW( mLowW + i * mStepW,
945 mW, GammaW, MASSMINWZ, mW, GammaW, MASSMINWZ, psModeWZ);
954 void ResonanceH::calcPreFac(
bool) {
957 alpEM = couplingsPtr->alphaEM(mHat * mHat);
958 alpS = couplingsPtr->alphaS(mHat * mHat);
959 colQ = 3. * (1. + alpS / M_PI);
960 preFac = (alpEM / (8. * sin2tW)) * pow3(mHat) / pow2(mW);
961 if (useNLOWidths) rescColQ = 3. * (1. + rescAlpS * alpS / M_PI) / colQ;
969 void ResonanceH::calcWidth(
bool) {
972 if ( id2Abs == id1Abs && ( (id1Abs > 0 && id1Abs < 7)
973 || (id1Abs > 10 && id1Abs < 17) ) ) {
977 if ( (id1Abs != 6 && mHat > 2. * mf1 + MASSMARGIN)
978 || (id1Abs == 6 && mHat > 3. * mT ) ) {
980 kinFac = (higgsType < 3) ? pow3(ps) : ps;
984 else if (id1Abs == 6 && mHat > mLowT) {
985 double xTab = (mHat - mLowT) / mStepT;
986 int iTab = max( 0, min( 99,
int(xTab) ) );
987 kinFac = kinFacT[iTab]
988 * pow( kinFacT[iTab + 1] / kinFacT[iTab], xTab - iTab);
992 double coupFac = pow2(particleDataPtr->mRun(id1Abs, mHat) / mHat);
993 if (id1Abs < 7 && id1Abs%2 == 1) coupFac *= coup2d * coup2d;
994 else if (id1Abs < 7) coupFac *= coup2u * coup2u;
995 else coupFac *= coup2l * coup2l;
998 widNow = preFac * coupFac * kinFac;
999 if (id1Abs < 7) widNow *= colQ;
1003 else if (id1Abs == 21 && id2Abs == 21)
1004 widNow = preFac * pow2(alpS / M_PI) * eta2gg();
1007 else if (id1Abs == 22 && id2Abs == 22)
1008 widNow = preFac * pow2(alpEM / M_PI) * 0.5 * eta2gaga();
1011 else if (id1Abs == 23 && id2Abs == 22)
1012 widNow = preFac * pow2(alpEM / M_PI) * pow3(ps) * eta2gaZ();
1015 else if (id1Abs == 23 && id2Abs == 23) {
1017 if (mHat > 3. * mZ) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
1018 else if (mHat > mLowZ) {
1019 double xTab = (mHat - mLowZ) / mStepZ;
1020 int iTab = max( 0, min( 99,
int(xTab) ) );
1021 kinFac = kinFacZ[iTab]
1022 * pow( kinFacZ[iTab + 1] / kinFacZ[iTab], xTab - iTab );
1026 widNow = 0.25 * preFac * pow2(coup2Z) * kinFac;
1027 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
1031 else if (id1Abs == 24 && id2Abs == 24) {
1033 if (mHat > 3. * mW) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
1034 else if (mHat > mLowW) {
1035 double xTab = (mHat - mLowW) / mStepW;
1036 int iTab = max( 0, min( 99,
int(xTab) ) );
1037 kinFac = kinFacW[iTab]
1038 * pow( kinFacW[iTab + 1] / kinFacW[iTab], xTab - iTab);
1042 widNow = 0.5 * preFac * pow2(coup2W) * kinFac;
1043 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
1047 else if (id1Abs == 25 && id2Abs == 25)
1048 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2H1H1);
1051 else if (id1Abs == 36 && id2Abs == 36)
1052 widNow = 0.5 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3A3);
1055 else if (id1Abs == 25 && id2Abs == 23)
1056 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1Z);
1059 else if (id1Abs == 36 && id2Abs == 23)
1060 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2A3Z);
1063 else if (id1Abs == 36 && id2Abs == 25)
1064 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3H1);
1067 else if (id1Abs == 37 && id2Abs == 24)
1068 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2HchgW);
1073 if (id1Abs == 21 && id2Abs == 21) widNow *= 1.47 * pow2(rescAlpS);
1074 else if (id1Abs == 22 && id2Abs == 22) widNow *= 0.88;
1075 else if (id1Abs == 22 && id2Abs == 23) widNow *= 0.95;
1076 else if (id1Abs == 23 && id2Abs == 23) widNow *= 1.10;
1077 else if (id1Abs == 24 && id2Abs == 24) widNow *= 1.09;
1078 else if (id1Abs == 5 && id2Abs == 5) widNow *= 1.07 * rescColQ;
1079 else if (id1Abs == 4 && id2Abs == 4) widNow *= 0.937 * rescColQ;
1080 else if (id1Abs == 13 && id2Abs == 13) widNow *= 0.974;
1081 else if (id1Abs == 15 && id2Abs == 15) widNow *= 0.992;
1091 double ResonanceH::eta2gg() {
1094 complex eta = complex(0., 0.);
1095 double mLoop, epsilon, root, rootLog;
1096 complex phi, etaNow;
1099 for (
int idNow = 3; idNow < 7; ++idNow) {
1100 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1101 : particleDataPtr->m0(idNow);
1102 epsilon = pow2(2. * mLoop / mHat);
1105 if (epsilon <= 1.) {
1106 root = sqrt(1. - epsilon);
1107 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1108 : log( (1. + root) / (1. - root) );
1109 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1110 0.5 * M_PI * rootLog );
1112 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1115 if (higgsType < 3) etaNow = -0.5 * epsilon
1116 * (complex(1., 0.) + (1. - epsilon) * phi);
1117 else etaNow = -0.5 * epsilon * phi;
1118 if (idNow%2 == 1) etaNow *= coup2d;
1119 else etaNow *= coup2u;
1124 return (pow2(eta.real()) + pow2(eta.imag()));
1133 double ResonanceH::eta2gaga() {
1136 complex eta = complex(0., 0.);
1138 double ef, mLoop, epsilon, root, rootLog;
1139 complex phi, etaNow;
1142 for (
int idLoop = 0; idLoop < 8; ++idLoop) {
1143 if (idLoop < 4) idNow = idLoop + 3;
1144 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1145 else if (idLoop < 7) idNow = 24;
1147 if (idNow == 37 && higgsType == 0)
continue;
1150 ef = (idNow < 20) ? couplingsPtr->ef(idNow) : 1.;
1151 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1152 : particleDataPtr->m0(idNow);
1153 epsilon = pow2(2. * mLoop / mHat);
1156 if (epsilon <= 1.) {
1157 root = sqrt(1. - epsilon);
1158 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1159 : log( (1. + root) / (1. - root) );
1160 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1161 0.5 * M_PI * rootLog );
1163 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1167 if (higgsType < 3) etaNow = -0.5 * epsilon
1168 * (complex(1., 0.) + (1. - epsilon) * phi);
1169 else etaNow = -0.5 * epsilon * phi;
1170 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * pow2(ef) * coup2d;
1171 else if (idNow < 7 ) etaNow *= 3. * pow2(ef) * coup2u;
1172 else etaNow *= pow2(ef) * coup2l;
1176 else if (idNow == 24) etaNow = (complex(0.5 + 0.75 * epsilon, 0.)
1177 + 0.75 * epsilon * (2. - epsilon) * phi) * coup2W;
1180 else etaNow = (complex(epsilon, 0.) - epsilon * epsilon * phi)
1181 * pow2(mW / mHchg) * coup2Hchg;
1186 return (pow2(eta.real()) + pow2(eta.imag()));
1195 double ResonanceH::eta2gaZ() {
1198 complex eta = complex(0., 0.);
1200 double ef, vf, mLoop, epsilon, epsPrime, root, rootLog, asinEps;
1201 complex phi, psi, phiPrime, psiPrime, fXY, f1, etaNow;
1204 for (
int idLoop = 0; idLoop < 7; ++idLoop) {
1205 if (idLoop < 4) idNow = idLoop + 3;
1206 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1207 else if (idLoop < 7) idNow = 24;
1211 ef = (idNow < 20) ? couplingsPtr->ef(idNow) : 1.;
1212 vf = (idNow < 20) ? couplingsPtr->vf(idNow) : 0.;
1213 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1214 : particleDataPtr->m0(idNow);
1215 epsilon = pow2(2. * mLoop / mHat);
1216 epsPrime = pow2(2. * mLoop / mZ);
1219 if (epsilon <= 1.) {
1220 root = sqrt(1. - epsilon);
1221 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1222 : log( (1. + root) / (1. - root) );
1223 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1224 0.5 * M_PI * rootLog );
1225 psi = 0.5 * root * complex( rootLog, -M_PI);
1227 asinEps = asin(1. / sqrt(epsilon));
1228 phi = complex( pow2(asinEps), 0.);
1229 psi = complex( sqrt(epsilon - 1.) * asinEps, 0.);
1233 if (epsPrime <= 1.) {
1234 root = sqrt(1. - epsPrime);
1235 rootLog = (epsPrime < 1e-4) ? log(4. / epsPrime - 2.)
1236 : log( (1. + root) / (1. - root) );
1237 phiPrime = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1238 0.5 * M_PI * rootLog );
1239 psiPrime = 0.5 * root * complex( rootLog, -M_PI);
1241 asinEps = asin(1. / sqrt(epsPrime));
1242 phiPrime = complex( pow2(asinEps), 0.);
1243 psiPrime = complex( sqrt(epsPrime - 1.) * asinEps, 0.);
1247 fXY = (epsilon * epsPrime / (8. * pow2(epsilon - epsPrime)))
1248 * ( complex(epsilon - epsPrime, 0)
1249 + epsilon * epsPrime * (phi - phiPrime)
1250 + 2. * epsilon * (psi - psiPrime) );
1251 f1 = - (epsilon * epsPrime / (2. * (epsilon - epsPrime)))
1256 etaNow = (higgsType < 3) ? -fXY + 0.25 * f1 : 0.25 * f1;
1257 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * ef * vf * coup2d;
1258 else if (idNow < 7) etaNow *= 3. * ef * vf * coup2u;
1259 else etaNow *= ef * vf * coup2l;
1262 }
else if (idNow == 24) {
1263 double coef1 = 3. - sin2tW / cos2tW;
1264 double coefXY = (1. + 2. / epsilon) * sin2tW / cos2tW
1265 - (5. + 2. / epsilon);
1266 etaNow = -cos2tW * (coef1 * f1 + coefXY * fXY) * coup2W;
1269 }
else etaNow = (1. - 2. * sin2tW) * fXY * pow2(mW / mHchg)
1275 return ( (pow2(eta.real()) + pow2(eta.imag())) / (sin2tW * cos2tW) );
1288 void ResonanceHchg::initConstants() {
1291 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
1292 thetaWRat = 1. / (8. * couplingsPtr->sin2thetaW());
1293 mW = particleDataPtr->m0(24);
1294 tanBeta = settingsPtr->parm(
"HiggsHchg:tanBeta");
1295 tan2Beta = tanBeta * tanBeta;
1296 coup2H1W = settingsPtr->parm(
"HiggsHchg:coup2H1W");
1304 void ResonanceHchg::calcPreFac(
bool) {
1307 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1308 alpS = couplingsPtr->alphaS(mHat * mHat);
1309 colQ = 3. * (1. + alpS / M_PI);
1310 preFac = alpEM * thetaWRat * pow3(mHat) / pow2(mW);
1318 void ResonanceHchg::calcWidth(
bool) {
1321 if (ps == 0.)
return;
1324 if (id1Abs < 17 && (id1Abs < 7 || id1Abs > 10)) {
1325 double mRun1 = particleDataPtr->mRun(id1Abs, mHat);
1326 double mRun2 = particleDataPtr->mRun(id2Abs, mHat);
1327 double mrRunDn = pow2(mRun1 / mHat);
1328 double mrRunUp = pow2(mRun2 / mHat);
1329 if (id1Abs%2 == 0) swap( mrRunDn, mrRunUp);
1332 widNow = preFac * max( 0., (mrRunDn * tan2Beta + mrRunUp / tan2Beta)
1333 * (1. - mrRunDn - mrRunUp) - 4. *mrRunDn * mrRunUp ) * ps;
1334 if (id1Abs < 7) widNow *= colQ;
1338 else if (id1Abs == 25 && id2Abs == 24)
1339 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1W);
1352 void ResonanceZprime::initConstants() {
1355 gmZmode = settingsPtr->mode(
"Zprime:gmZmode");
1356 sin2tW = couplingsPtr->sin2thetaW();
1357 cos2tW = 1. - sin2tW;
1358 thetaWRat = 1. / (16. * sin2tW * cos2tW);
1361 mZ = particleDataPtr->m0(23);
1362 GammaZ = particleDataPtr->mWidth(23);
1364 GamMRatZ = GammaZ / mZ;
1367 for (
int i = 0; i < 20; ++i) afZp[i] = 0.;
1368 for (
int i = 0; i < 20; ++i) vfZp[i] = 0.;
1371 afZp[1] = settingsPtr->parm(
"Zprime:ad");
1372 afZp[2] = settingsPtr->parm(
"Zprime:au");
1373 afZp[11] = settingsPtr->parm(
"Zprime:ae");
1374 afZp[12] = settingsPtr->parm(
"Zprime:anue");
1375 vfZp[1] = settingsPtr->parm(
"Zprime:vd");
1376 vfZp[2] = settingsPtr->parm(
"Zprime:vu");
1377 vfZp[11] = settingsPtr->parm(
"Zprime:ve");
1378 vfZp[12] = settingsPtr->parm(
"Zprime:vnue");
1381 if (settingsPtr->flag(
"Zprime:universality")) {
1382 for (
int i = 3; i <= 6; ++i) {
1383 afZp[i] = afZp[i-2];
1384 vfZp[i] = vfZp[i-2];
1385 afZp[i+10] = afZp[i+8];
1386 vfZp[i+10] = vfZp[i+8];
1391 afZp[3] = settingsPtr->parm(
"Zprime:as");
1392 afZp[4] = settingsPtr->parm(
"Zprime:ac");
1393 afZp[5] = settingsPtr->parm(
"Zprime:ab");
1394 afZp[6] = settingsPtr->parm(
"Zprime:at");
1395 afZp[13] = settingsPtr->parm(
"Zprime:amu");
1396 afZp[14] = settingsPtr->parm(
"Zprime:anumu");
1397 afZp[15] = settingsPtr->parm(
"Zprime:atau");
1398 afZp[16] = settingsPtr->parm(
"Zprime:anutau");
1399 vfZp[3] = settingsPtr->parm(
"Zprime:vs");
1400 vfZp[4] = settingsPtr->parm(
"Zprime:vc");
1401 vfZp[5] = settingsPtr->parm(
"Zprime:vb");
1402 vfZp[6] = settingsPtr->parm(
"Zprime:vt");
1403 vfZp[13] = settingsPtr->parm(
"Zprime:vmu");
1404 vfZp[14] = settingsPtr->parm(
"Zprime:vnumu");
1405 vfZp[15] = settingsPtr->parm(
"Zprime:vtau");
1406 vfZp[16] = settingsPtr->parm(
"Zprime:vnutau");
1410 coupZpWW = settingsPtr->parm(
"Zprime:coup2WW");
1418 void ResonanceZprime::calcPreFac(
bool calledFromInit) {
1421 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1422 alpS = couplingsPtr->alphaS(mHat * mHat);
1423 colQ = 3. * (1. + alpS / M_PI);
1424 preFac = alpEM * thetaWRat * mHat / 3.;
1427 if (!calledFromInit) {
1436 int idInFlavAbs = abs(idInFlav);
1437 if (idInFlavAbs > 0 && idInFlavAbs < 19) {
1438 double ei = couplingsPtr->ef(idInFlavAbs);
1439 double ai = couplingsPtr->af(idInFlavAbs);
1440 double vi = couplingsPtr->vf(idInFlavAbs);
1441 double api = afZp[idInFlavAbs];
1442 double vpi = vfZp[idInFlavAbs];
1445 vai2 = vi * vi + ai * ai;
1447 vaivapi = vi * vpi + ai * api;;
1448 vapi2 = vpi * vpi + api * api;
1452 double sH = mHat * mHat;
1453 double propZ = sH / ( pow2(sH - m2Z) + pow2(sH * GamMRatZ) );
1454 double propZp = sH / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1456 gamZNorm = 2. * eivi * thetaWRat * (sH - m2Z) * propZ;
1457 ZNorm = vai2 * pow2(thetaWRat) * sH * propZ;
1458 gamZpNorm = 2. * eivpi * thetaWRat * (sH - m2Res) * propZp;
1459 ZZpNorm = 2. * vaivapi * pow2(thetaWRat) * ((sH - m2Res) * (sH - m2Z)
1460 + sH * GamMRat * sH * GamMRatZ) * propZ * propZp;
1461 ZpNorm = vapi2 * pow2(thetaWRat) * sH * propZp;
1464 if (gmZmode == 1) {gamZNorm = 0; ZNorm = 0.; gamZpNorm = 0.;
1465 ZZpNorm = 0.; ZpNorm = 0.;}
1466 if (gmZmode == 2) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;
1467 ZZpNorm = 0.; ZpNorm = 0.;}
1468 if (gmZmode == 3) {gamNorm = 0.; gamZNorm = 0.; ZNorm = 0.;
1469 gamZpNorm = 0.; ZZpNorm = 0.;}
1470 if (gmZmode == 4) {gamZpNorm = 0.; ZZpNorm = 0.; ZpNorm = 0.;}
1471 if (gmZmode == 5) {gamZNorm = 0.; ZNorm = 0.; ZZpNorm = 0.;}
1472 if (gmZmode == 6) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;}
1481 void ResonanceZprime::calcWidth(
bool calledFromInit) {
1484 if (ps == 0.)
return;
1487 if (calledFromInit) {
1490 if ( id1Abs < 7 || (id1Abs > 10 && id1Abs < 17) ) {
1491 double apf = afZp[id1Abs];
1492 double vpf = vfZp[id1Abs];
1493 widNow = preFac * ps * (vpf*vpf * (1. + 2. * mr1)
1495 if (id1Abs < 7) widNow *= colQ;
1498 }
else if (id1Abs == 24) {
1499 widNow = preFac * pow2(coupZpWW * cos2tW) * pow3(ps)
1500 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1508 if ( id1Abs < 7 || (id1Abs > 10 && id1Abs < 17) ) {
1511 double ef = couplingsPtr->ef(id1Abs);
1512 double af = couplingsPtr->af(id1Abs);
1513 double vf = couplingsPtr->vf(id1Abs);
1514 double apf = afZp[id1Abs];
1515 double vpf = vfZp[id1Abs];
1518 double kinFacA = pow3(ps);
1519 double kinFacV = ps * (1. + 2. * mr1);
1520 double ef2 = ef * ef * kinFacV;
1521 double efvf = ef * vf * kinFacV;
1522 double vaf2 = vf * vf * kinFacV + af * af * kinFacA;
1523 double efvpf = ef * vpf * kinFacV;
1524 double vafvapf = vf * vpf * kinFacV + af * apf * kinFacA;
1525 double vapf2 = vpf * vpf * kinFacV + apf * apf * kinFacA;
1528 widNow = gamNorm * ef2 + gamZNorm * efvf + ZNorm * vaf2
1529 + gamZpNorm * efvpf + ZZpNorm * vafvapf + ZpNorm * vapf2;
1530 if (id1Abs < 7) widNow *= colQ;
1533 }
else if (id1Abs == 24) {
1534 widNow = ZpNorm * pow2(coupZpWW * cos2tW) * pow3(ps)
1535 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1550 void ResonanceWprime::initConstants() {
1553 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
1554 cos2tW = couplingsPtr->cos2thetaW();
1557 aqWp = settingsPtr->parm(
"Wprime:aq");
1558 vqWp = settingsPtr->parm(
"Wprime:vq");
1559 alWp = settingsPtr->parm(
"Wprime:al");
1560 vlWp = settingsPtr->parm(
"Wprime:vl");
1563 coupWpWZ = settingsPtr->parm(
"Wprime:coup2WZ");
1571 void ResonanceWprime::calcPreFac(
bool) {
1574 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1575 alpS = couplingsPtr->alphaS(mHat * mHat);
1576 colQ = 3. * (1. + alpS / M_PI);
1577 preFac = alpEM * thetaWRat * mHat;
1585 void ResonanceWprime::calcWidth(
bool) {
1588 if (ps == 0.)
return;
1591 if (id1Abs > 0 && id1Abs < 7) widNow
1592 = preFac * ps * 0.5 * ((vqWp*vqWp + aqWp * aqWp)
1593 + 6. * (vqWp*vqWp - aqWp * aqWp) * sqrt(mr1 *mr2))
1594 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
1595 * colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
1598 else if (id1Abs > 10 && id1Abs < 17) widNow
1599 = preFac * ps * 0.5 * ((vlWp*vqWp + alWp * aqWp)
1600 + 6. * (vlWp*vqWp - alWp * aqWp) * sqrt(mr1 *mr2))
1601 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2));
1604 else if (id1Abs == 24 && id2Abs == 23) widNow
1605 = preFac * 0.25 * pow2(coupWpWZ) * cos2tW * (mr1 / mr2) * pow3(ps)
1606 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1619 void ResonanceRhorizontal::initConstants() {
1622 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
1630 void ResonanceRhorizontal::calcPreFac(
bool) {
1633 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1634 alpS = couplingsPtr->alphaS(mHat * mHat);
1635 colQ = 3. * (1. + alpS / M_PI);
1636 preFac = alpEM * thetaWRat * mHat;
1644 void ResonanceRhorizontal::calcWidth(
bool) {
1647 if (ps == 0.)
return;
1650 widNow = preFac * ps * (2. - mr1 - mr2 - pow2(mr1 - mr2));
1651 if (id1Abs < 9) widNow *= colQ;
1664 void ResonanceExcited::initConstants() {
1667 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
1668 coupF = settingsPtr->parm(
"ExcitedFermion:coupF");
1669 coupFprime = settingsPtr->parm(
"ExcitedFermion:coupFprime");
1670 coupFcol = settingsPtr->parm(
"ExcitedFermion:coupFcol");
1671 sin2tW = couplingsPtr->sin2thetaW();
1672 cos2tW = 1. - sin2tW;
1680 void ResonanceExcited::calcPreFac(
bool) {
1683 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1684 alpS = couplingsPtr->alphaS(mHat * mHat);
1685 preFac = pow3(mHat) / pow2(Lambda);
1693 void ResonanceExcited::calcWidth(
bool) {
1696 if (ps == 0.)
return;
1699 if (id1Abs == 21) widNow = preFac * alpS * pow2(coupFcol) / 3.;
1702 else if (id1Abs == 22) {
1703 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1704 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1705 double chg = chgI3 * coupF + chgY * coupFprime;
1706 widNow = preFac * alpEM * pow2(chg) / 4.;
1710 else if (id1Abs == 23) {
1711 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1712 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1713 double chg = chgI3 * cos2tW * coupF - chgY * sin2tW * coupFprime;
1714 widNow = preFac * (alpEM * pow2(chg) / (8. * sin2tW * cos2tW))
1715 * ps*ps * (2. + mr1);
1719 else if (id1Abs == 24) widNow = preFac * (alpEM * pow2(coupF)
1720 / (16. * sin2tW)) * ps*ps * (2. + mr1);
1733 void ResonanceGraviton::initConstants() {
1737 eDsmbulk = settingsPtr->flag(
"ExtraDimensionsG*:SMinBulk");
1739 if (eDsmbulk) eDvlvl = settingsPtr->flag(
"ExtraDimensionsG*:VLVL");
1740 kappaMG = settingsPtr->parm(
"ExtraDimensionsG*:kappaMG");
1741 for (
int i = 0; i < 27; ++i) eDcoupling[i] = 0.;
1742 double tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gqq");
1743 for (
int i = 1; i <= 4; ++i) eDcoupling[i] = tmp_coup;
1744 eDcoupling[5] = settingsPtr->parm(
"ExtraDimensionsG*:Gbb");
1745 eDcoupling[6] = settingsPtr->parm(
"ExtraDimensionsG*:Gtt");
1746 tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gll");
1747 for (
int i = 11; i <= 16; ++i) eDcoupling[i] = tmp_coup;
1748 eDcoupling[21] = settingsPtr->parm(
"ExtraDimensionsG*:Ggg");
1749 eDcoupling[22] = settingsPtr->parm(
"ExtraDimensionsG*:Ggmgm");
1750 eDcoupling[23] = settingsPtr->parm(
"ExtraDimensionsG*:GZZ");
1751 eDcoupling[24] = settingsPtr->parm(
"ExtraDimensionsG*:GWW");
1752 eDcoupling[25] = settingsPtr->parm(
"ExtraDimensionsG*:Ghh");
1760 void ResonanceGraviton::calcPreFac(
bool) {
1763 alpS = couplingsPtr->alphaS(mHat * mHat);
1764 colQ = 3. * (1. + alpS / M_PI);
1765 preFac = mHat / M_PI;
1773 void ResonanceGraviton::calcWidth(
bool) {
1776 if (ps == 0.)
return;
1780 widNow = preFac * pow3(ps) * (1. + 8. * mr1 / 3.) / 320.;
1781 if (id1Abs < 9) widNow *= colQ;
1784 }
else if (id1Abs == 21) {
1785 widNow = preFac / 20.;
1786 }
else if (id1Abs == 22) {
1787 widNow = preFac / 160.;
1790 }
else if (id1Abs == 23 || id1Abs == 24) {
1793 widNow = preFac * pow(ps,5) / 480.;
1796 widNow = preFac * ps * (13. / 12. + 14. * mr1 / 3. + 4. * mr1 * mr1)
1799 if (id1Abs == 23) widNow *= 0.5;
1802 }
else if (id1Abs == 25) {
1803 widNow = preFac * pow(ps,5) / 960.;
1807 if (eDsmbulk) widNow *= 2. * pow2(eDcoupling[min( id1Abs, 26)] * mHat);
1808 else widNow *= pow2(kappaMG * mHat / mRes);
1821 void ResonanceKKgluon::initConstants() {
1824 for (
int i = 0; i < 10; ++i) { eDgv[i] = 0.; eDga[i] = 0.; }
1825 double tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgqL");
1826 double tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgqR");
1827 for (
int i = 1; i <= 4; ++i) {
1828 eDgv[i] = 0.5 * (tmp_gL + tmp_gR);
1829 eDga[i] = 0.5 * (tmp_gL - tmp_gR);
1831 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgbL");
1832 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgbR");
1833 eDgv[5] = 0.5 * (tmp_gL + tmp_gR); eDga[5] = 0.5 * (tmp_gL - tmp_gR);
1834 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgtL");
1835 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgtR");
1836 eDgv[6] = 0.5 * (tmp_gL + tmp_gR); eDga[6] = 0.5 * (tmp_gL - tmp_gR);
1837 interfMode = settingsPtr->mode(
"ExtraDimensionsG*:KKintMode");
1845 void ResonanceKKgluon::calcPreFac(
bool calledFromInit) {
1848 alpS = couplingsPtr->alphaS(mHat * mHat);
1849 preFac = alpS * mHat / 6;
1852 if (!calledFromInit) {
1854 int idInFlavAbs = abs(idInFlav);
1855 double sH = mHat * mHat;
1857 normInt = 2. * eDgv[min(idInFlavAbs, 9)] * sH * (sH - m2Res)
1858 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1859 normKK = ( pow2(eDgv[min(idInFlavAbs, 9)])
1860 + pow2(eDga[min(idInFlavAbs, 9)]) ) * sH * sH
1861 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1864 if (interfMode == 1) {normInt = 0.; normKK = 0.;}
1865 if (interfMode == 2) {normSM = 0.; normInt = 0.; normKK = 1.;}
1874 void ResonanceKKgluon::calcWidth(
bool calledFromInit) {
1877 if (ps == 0.)
return;
1880 if (id1Abs > 9)
return;
1882 if (calledFromInit) {
1883 widNow = preFac * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1884 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1887 widNow = normSM * ps * (1. + 2. * mr1)
1888 + normInt * ps * eDgv[min(id1Abs, 9)] * (1. + 2. * mr1)
1889 + normKK * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1890 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1905 void ResonanceLeptoquark::initConstants() {
1908 kCoup = settingsPtr->parm(
"LeptoQuark:kCoup");
1911 int id1Now = particlePtr->channel(0).product(0);
1912 int id2Now = particlePtr->channel(0).product(1);
1913 if (id1Now < 1 || id1Now > 6) {
1914 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1915 " unallowed input quark flavour reset to u");
1917 particlePtr->channel(0).product(0, id1Now);
1919 if (abs(id2Now) < 11 || abs(id2Now) > 16) {
1920 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1921 " unallowed input lepton flavour reset to e-");
1923 particlePtr->channel(0).product(1, id2Now);
1927 bool changed = particlePtr->hasChanged();
1928 int chargeLQ = particleDataPtr->chargeType(id1Now)
1929 + particleDataPtr->chargeType(id2Now);
1930 particlePtr->setChargeType(chargeLQ);
1931 string nameLQ =
"LQ_" + particleDataPtr->name(id1Now) +
","
1932 + particleDataPtr->name(id2Now);
1933 particlePtr->setNames(nameLQ, nameLQ +
"bar");
1934 if (!changed) particlePtr->setHasChanged(
false);
1942 void ResonanceLeptoquark::calcPreFac(
bool) {
1945 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1946 preFac = 0.25 * alpEM * kCoup * mHat;
1954 void ResonanceLeptoquark::calcWidth(
bool) {
1957 if (ps == 0.)
return;
1960 if (id1Abs > 10 && id1Abs < 17 && id2Abs < 7) widNow = preFac * pow3(ps);
1973 void ResonanceNuRight::initConstants() {
1976 thetaWRat = 1. / (768. * M_PI * pow2(couplingsPtr->sin2thetaW()));
1977 mWR = particleDataPtr->m0(9900024);
1985 void ResonanceNuRight::calcPreFac(
bool) {
1988 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1989 alpS = couplingsPtr->alphaS(mHat * mHat);
1990 colQ = 3. * (1. + alpS / M_PI);
1991 preFac = pow2(alpEM) * thetaWRat * pow5(mHat) / pow4(max(mHat, mWR));
1999 void ResonanceNuRight::calcWidth(
bool) {
2002 if (mHat < mf1 + mf2 + mf3 + MASSMARGIN)
return;
2005 widNow = (id2Abs < 9 && id3Abs < 9)
2006 ? preFac * colQ * couplingsPtr->V2CKMid(id2, id3) : preFac;
2009 double x = (mf1 + mf2 + mf3) / mHat;
2011 double fx = 1. - 8. * x2 + 8. * pow3(x2) - pow4(x2)
2012 - 24. * pow2(x2) * log(x);
2013 double y = min( 0.999, pow2(mHat / mWR) );
2014 double fy = ( 12. * (1. - y) * log(1. - y) + 12. * y - 6. * y*y
2015 - 2.* pow3(y) ) / pow4(y);
2029 void ResonanceZRight::initConstants() {
2032 sin2tW = couplingsPtr->sin2thetaW();
2033 thetaWRat = 1. / (48. * sin2tW * (1. - sin2tW) * (1. - 2. * sin2tW) );
2041 void ResonanceZRight::calcPreFac(
bool) {
2044 alpEM = couplingsPtr->alphaEM(mHat * mHat);
2045 alpS = couplingsPtr->alphaS(mHat * mHat);
2046 colQ = 3. * (1. + alpS / M_PI);
2047 preFac = alpEM * thetaWRat * mHat;
2055 void ResonanceZRight::calcWidth(
bool) {
2058 if (ps == 0.)
return;
2064 if (id1Abs < 9 && id1Abs%2 == 1) {
2065 af = -1. + 2. * sin2tW;
2066 vf = -1. + 4. * sin2tW / 3.;
2067 }
else if (id1Abs < 9) {
2068 af = 1. - 2. * sin2tW;
2069 vf = 1. - 8. * sin2tW / 3.;
2070 }
else if (id1Abs < 19 && id1Abs%2 == 1) {
2071 af = -1. + 2. * sin2tW;
2072 vf = -1. + 4. * sin2tW;
2075 }
else if (id1Abs < 19) {
2080 af = 2. * (1. - sin2tW);
2086 widNow = preFac * (vf*vf * (1. + 2. * mr1) + af*af * ps*ps) * ps
2088 if (id1Abs < 9) widNow *= colQ;
2101 void ResonanceWRight::initConstants() {
2104 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
2112 void ResonanceWRight::calcPreFac(
bool) {
2115 alpEM = couplingsPtr->alphaEM(mHat * mHat);
2116 alpS = couplingsPtr->alphaS(mHat * mHat);
2117 colQ = 3. * (1. + alpS / M_PI);
2118 preFac = alpEM * thetaWRat * mHat;
2126 void ResonanceWRight::calcWidth(
bool) {
2129 if (ps == 0.)
return;
2132 widNow = preFac * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
2134 if (id1Abs < 9) widNow *= colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
2147 void ResonanceHchgchgLeft::initConstants() {
2150 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2151 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2152 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2153 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2154 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2155 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2158 gL = settingsPtr->parm(
"LeftRightSymmmetry:gL");
2159 vL = settingsPtr->parm(
"LeftRightSymmmetry:vL");
2160 mW = particleDataPtr->m0(24);
2168 void ResonanceHchgchgLeft::calcPreFac(
bool) {
2171 preFac = mHat / (8. * M_PI);
2179 void ResonanceHchgchgLeft::calcWidth(
bool) {
2182 if (ps == 0.)
return;
2185 if (id1Abs < 17 && id2Abs < 17) {
2186 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2187 if (id2Abs != id1Abs) widNow *= 2.;
2191 else if (id1Abs == 24 && id2Abs == 24)
2192 widNow = preFac * 0.5 * pow2(gL*gL * vL / mW)
2193 * (3. * mr1 + 0.25 / mr1 - 1.) * ps;
2206 void ResonanceHchgchgRight::initConstants() {
2209 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2210 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2211 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2212 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2213 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2214 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2218 gR = settingsPtr->parm(
"LeftRightSymmmetry:gR");
2226 void ResonanceHchgchgRight::calcPreFac(
bool) {
2229 preFac = mHat / (8. * M_PI);
2237 void ResonanceHchgchgRight::calcWidth(
bool) {
2240 if (ps == 0.)
return;
2243 if (id1Abs < 17 && id2Abs < 17) {
2244 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2245 if (id2Abs != id1Abs) widNow *= 2.;
2249 else if (id1Abs == idWR && id2Abs == idWR)
2250 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;