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.1;
32 const double ResonanceWidths::MASSMARGIN = 0.1;
39 bool ResonanceWidths::init(Info* infoPtrIn) {
43 settingsPtr = infoPtr->settingsPtr;
44 particleDataPtr = infoPtr->particleDataPtr;
45 coupSMPtr = infoPtr->coupSMPtr;
46 coupSUSYPtr = infoPtr->coupSUSYPtr;
49 bool isInit = initBSM();
52 minWidth = settingsPtr->parm(
"ResonanceWidths:minWidth");
53 minThreshold = settingsPtr->parm(
"ResonanceWidths:minThreshold");
56 particlePtr = particleDataPtr->particleDataEntryPtr(idRes);
57 if (particlePtr->id() == 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 stringstream ssIdRes;
130 ssIdRes <<
"for " << idRes;
131 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
132 " resonance meMode not acceptable", ssIdRes.str());
136 if (meMode < 100 && allowCalcWidth) {
139 id1 = particlePtr->channel(i).product(0);
140 id2 = particlePtr->channel(i).product(1);
145 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
149 id3 = particlePtr->channel(i).product(2);
153 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
154 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
158 mf1 = particleDataPtr->m0(id1Abs);
159 mf2 = particleDataPtr->m0(id2Abs);
160 mr1 = pow2(mf1 / mHat);
161 mr2 = pow2(mf2 / mHat);
162 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
163 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
165 mf3 = particleDataPtr->m0(id3Abs);
166 mr3 = pow2(mf3 / mHat);
167 ps = (mHat < mf1 + mf2 + mf3 + MASSMARGIN) ? 0. : 1.;
176 else widNow = GammaRes * particlePtr->channel(i).bRatio();
181 if (widNow > 0.)
for (
int j = 0; j < mult; ++j) {
182 idNow = particlePtr->channel(i).product(j);
183 idAnti = (particleDataPtr->hasAnti(idNow)) ? -idNow : idNow;
186 if (idNow == 23 || abs(idNow) == 24 || idNow == 93 || abs(idNow) == 94
187 || particleDataPtr->m0(abs(idNow)) < mRes) {
188 openSecPos *= particleDataPtr->resOpenFrac(idNow);
189 openSecNeg *= particleDataPtr->resOpenFrac(idAnti);
194 particlePtr->channel(i).onShellWidth(widNow);
195 particlePtr->channel(i).openSec( idRes, openSecPos);
196 particlePtr->channel(i).openSec(-idRes, openSecNeg);
200 if (onMode == 1 || onMode == 2) widPos += widNow * openSecPos;
201 if (onMode == 1 || onMode == 3) widNeg += widNow * openSecNeg;
205 if (widTot < minWidth) {
206 particlePtr->setMayDecay(
false,
false);
207 particlePtr->setMWidth(0.,
false);
208 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
209 particlePtr->channel(i).bRatio( 0.,
false);
216 if (particlePtr->tauCalc()) {
217 double decayLength = HBARC * FM2MM / widTot;
218 particlePtr->setTau0(decayLength,
false);
223 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
224 bRatio = particlePtr->channel(i).onShellWidth() / widTot;
225 particlePtr->channel(i).bRatio( bRatio,
false);
230 forceFactor = GammaRes / widTot;
231 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
232 particlePtr->channel(i).onShellWidthFactor( forceFactor);
237 particlePtr->setMWidth(widTot,
false);
242 GamMRat = GammaRes / mRes;
243 openPos = widPos / widTot;
244 openNeg = widNeg / widTot;
247 bool isHiggs = (idRes == 25 || idRes == 35 ||idRes == 36 ||idRes == 37);
248 bool clipHiggsWings = settingsPtr->flag(
"Higgs:clipWings");
249 if (isHiggs && clipHiggsWings) {
250 double mMinNow = particlePtr->mMin();
251 double mMaxNow = particlePtr->mMax();
252 double wingsFac = settingsPtr->parm(
"Higgs:wingsFac");
253 double mMinWing = mRes - wingsFac * GammaRes;
254 double mMaxWing = mRes + wingsFac * GammaRes;
255 if (mMinWing > mMinNow) particlePtr->setMMinNoChange(mMinWing);
256 if (mMaxWing < mMaxNow || mMaxNow < mMinNow)
257 particlePtr->setMMaxNoChange(mMaxWing);
269 double ResonanceWidths::width(
int idSgn,
double mHatIn,
int idInFlavIn,
270 bool openOnly,
bool setBR,
int idOutFlav1,
int idOutFlav2) {
274 idInFlav = idInFlavIn;
275 if (allowCalcWidth) calcPreFac(
false);
279 double mfSum, psOnShell;
282 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
284 onMode = particlePtr->channel(i).onMode();
285 meMode = particlePtr->channel(i).meMode();
286 mult = particlePtr->channel(i).multiplicity();
290 if (setBR) particlePtr->channel(i).currentBR(widNow);
294 if (idOutFlav1 > 0 || idOutFlav2 > 0) {
295 if (mult > 2)
continue;
296 if (particlePtr->channel(i).product(0) != idOutFlav1)
continue;
297 if (particlePtr->channel(i).product(1) != idOutFlav2)
continue;
302 if (idSgn > 0 && onMode !=1 && onMode != 2)
continue;
303 if (idSgn < 0 && onMode !=1 && onMode != 3)
continue;
310 id1 = particlePtr->channel(i).product(0);
311 id2 = particlePtr->channel(i).product(1);
316 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
320 id3 = particlePtr->channel(i).product(2);
324 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
325 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
329 mf1 = particleDataPtr->m0(id1Abs);
330 mf2 = particleDataPtr->m0(id2Abs);
331 mr1 = pow2(mf1 / mHat);
332 mr2 = pow2(mf2 / mHat);
333 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
334 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
336 mf3 = particleDataPtr->m0(id3Abs);
337 mr3 = pow2(mf3 / mHat);
338 ps = (mHat < mf1 + mf2 + mf3 + MASSMARGIN) ? 0. : 1.;
346 else if (meMode == 100)
347 widNow = GammaRes * particlePtr->channel(i).bRatio();
350 else if (meMode == 101) {
352 for (
int j = 0; j < mult; ++j) mfSum
353 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
354 if (mfSum + MASSMARGIN < mHat)
355 widNow = GammaRes * particlePtr->channel(i).bRatio();
359 else if ( (meMode == 102 || meMode == 103) && mult == 2) {
360 mf1 = particleDataPtr->m0( particlePtr->channel(i).product(0) );
361 mf2 = particleDataPtr->m0( particlePtr->channel(i).product(1) );
362 mr1 = pow2(mf1 / mHat);
363 mr2 = pow2(mf2 / mHat);
364 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
365 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
366 mr1 = pow2(mf1 / mRes);
367 mr2 = pow2(mf2 / mRes);
368 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
369 sqrtpos( pow2(1.- mr1 - mr2) - 4. * mr1 * mr2) );
370 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
374 else if (meMode == 102 || meMode == 103) {
376 for (
int j = 0; j < mult; ++j) mfSum
377 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
378 ps = sqrtpos(1. - mfSum / mHat);
379 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
380 sqrtpos(1. - mfSum / mRes) );
381 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
385 if (openOnly) widNow *= particlePtr->channel(i).openSec(idSgn);
388 if (doForceWidth) widNow *= forceFactor;
396 if (setBR) particlePtr->channel(i).currentBR(widNow);
411 double ResonanceWidths::numInt1BW(
double mHatIn,
double m1,
double Gamma1,
412 double mMin1,
double m2,
int psMode) {
415 if (mMin1 + m2 > mHatIn)
return 0.;
419 double mG1 = m1 * Gamma1;
420 double mMax1 = mHatIn - m2;
421 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
422 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
423 double atanDif1 = atanMax1 - atanMin1;
424 double wtDif1 = atanDif1 / (M_PI * NPOINT);
427 double xStep = 1. / NPOINT;
431 double mrNow2 = pow2(m2 / mHatIn);
432 double xNow1, sNow1, mNow1, mrNow1, psNow, value;
435 for (
int ip1 = 0; ip1 < NPOINT; ++ip1) {
436 xNow1 = xStep * (ip1 + 0.5);
437 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
438 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
439 mrNow1 = pow2(mNow1 / mHatIn);
442 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
443 - 4. * mrNow1 * mrNow2);
445 if (psMode == 1) value = psNow;
446 else if (psMode == 2) value = psNow * psNow;
447 else if (psMode == 3) value = pow3(psNow);
448 else if (psMode == 5) value = psNow
449 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
450 else if (psMode == 6) value = pow3(psNow);
468 double ResonanceWidths::numInt2BW(
double mHatIn,
double m1,
double Gamma1,
469 double mMin1,
double m2,
double Gamma2,
double mMin2,
int psMode) {
472 if (mMin1 + mMin2 >= mHatIn)
return 0.;
476 double mG1 = m1 * Gamma1;
477 double mMax1 = mHatIn - mMin2;
478 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
479 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
480 double atanDif1 = atanMax1 - atanMin1;
481 double wtDif1 = atanDif1 / (M_PI * NPOINT);
483 double mG2 = m2 * Gamma2;
484 double mMax2 = mHatIn - mMin1;
485 double atanMin2 = atan( (mMin2 * mMin2 - s2) / mG2 );
486 double atanMax2 = atan( (mMax2 * mMax2 - s2) / mG2 );
487 double atanDif2 = atanMax2 - atanMin2;
488 double wtDif2 = atanDif2 / (M_PI * NPOINT);
492 bool mustDiv =
false;
494 double atanDiv1 = 0.;
495 double atanDLo1 = 0.;
496 double atanDHi1 = 0.;
500 double atanDiv2 = 0.;
501 double atanDLo2 = 0.;
502 double atanDHi2 = 0.;
505 if (m1 + m2 > mHatIn) {
507 double tmpDiv = (mHatIn - m1 - m2) / (Gamma1 + Gamma2);
508 mDiv1 = m1 + Gamma1 * tmpDiv;
509 atanDiv1 = atan( (mDiv1 * mDiv1 - s1) / mG1 );
510 atanDLo1 = atanDiv1 - atanMin1;
511 atanDHi1 = atanMax1 - atanDiv1;
512 wtDLo1 = atanDLo1 / (M_PI * NPOINT);
513 wtDHi1 = atanDHi1 / (M_PI * NPOINT);
514 mDiv2 = m2 + Gamma2 * tmpDiv;
515 atanDiv2 = atan( (mDiv2 * mDiv2 - s2) / mG2 );
516 atanDLo2 = atanDiv2 - atanMin2;
517 atanDHi2 = atanMax2 - atanDiv2;
518 wtDLo2 = atanDLo2 / (M_PI * NPOINT);
519 wtDHi2 = atanDHi2 / (M_PI * NPOINT);
523 double xStep = 1. / NPOINT;
524 int nIter = (mustDiv) ? 2 * NPOINT : NPOINT;
528 double xNow1, sNow1, mNow1, mrNow1, xNow2, sNow2, mNow2, mrNow2, psNow,
530 double wtNow1 = wtDif1;
531 double wtNow2 = wtDif2;
534 for (
int ip1 = 0; ip1 < nIter; ++ip1) {
536 xNow1 = xStep * (ip1 + 0.5);
537 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
538 }
else if (ip1 < NPOINT) {
539 xNow1 = xStep * (ip1 + 0.5);
540 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDLo1);
543 xNow1 = xStep * (ip1 - NPOINT + 0.5);
544 sNow1 = s1 + mG1 * tan(atanDiv1 + xNow1 * atanDHi1);
547 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
548 mrNow1 = pow2(mNow1 / mHatIn);
551 for (
int ip2 = 0; ip2 < nIter; ++ip2) {
553 xNow2 = xStep * (ip2 + 0.5);
554 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDif2);
555 }
else if (ip2 < NPOINT) {
556 xNow2 = xStep * (ip2 + 0.5);
557 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDLo2);
560 xNow2 = xStep * (ip2 - NPOINT + 0.5);
561 sNow2 = s2 + mG2 * tan(atanDiv2 + xNow2 * atanDHi2);
564 mNow2 = min( mMax2, max( mMin2, sqrtpos(sNow2) ) );
565 mrNow2 = pow2(mNow2 / mHatIn);
568 if (mNow1 + mNow2 > mHatIn)
break;
571 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
572 - 4. * mrNow1 * mrNow2);
574 if (psMode == 1) value = psNow;
575 else if (psMode == 2) value = psNow * psNow;
576 else if (psMode == 3) value = pow3(psNow);
577 else if (psMode == 5) value = psNow
578 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
579 else if (psMode == 6) value = pow3(psNow);
580 sum += value * wtNow1 * wtNow2;
599 void ResonanceGmZ::initConstants() {
602 gmZmode = settingsPtr->mode(
"WeakZ0:gmZmode");
603 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW()
604 * coupSMPtr->cos2thetaW());
607 if (idRes == 93) gmZmode = 2;
615 void ResonanceGmZ::calcPreFac(
bool calledFromInit) {
618 alpEM = coupSMPtr->alphaEM(mHat * mHat);
619 alpS = coupSMPtr->alphaS(mHat * mHat);
620 colQ = 3. * (1. + alpS / M_PI);
621 preFac = alpEM * thetaWRat * mHat / 3.;
624 if (!calledFromInit) {
630 int idInFlavAbs = abs(idInFlav);
631 if (idInFlavAbs > 0 && idInFlavAbs < 19) {
632 ei2 = coupSMPtr->ef2(idInFlavAbs);
633 eivi = coupSMPtr->efvf(idInFlavAbs);
634 vi2ai2 = coupSMPtr->vf2af2(idInFlavAbs);
638 double sH = mHat * mHat;
640 intNorm = 2. * eivi * thetaWRat * sH * (sH - m2Res)
641 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
642 resNorm = vi2ai2 * pow2(thetaWRat * sH)
643 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
646 if (gmZmode == 1) {intNorm = 0.; resNorm = 0.;}
647 if (gmZmode == 2) {gamNorm = 0.; intNorm = 0.;}
656 void ResonanceGmZ::calcWidth(
bool calledFromInit) {
659 if (ps == 0.)
return;
662 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
665 if (calledFromInit) {
668 widNow = preFac * ps * (coupSMPtr->vf2(id1Abs) * (1. + 2. * mr1)
669 + coupSMPtr->af2(id1Abs) * ps*ps);
670 if (id1Abs < 6) widNow *= colQ;
677 double kinFacV = ps * (1. + 2. * mr1);
678 double ef2 = coupSMPtr->ef2(id1Abs) * kinFacV;
679 double efvf = coupSMPtr->efvf(id1Abs) * kinFacV;
680 double vf2af2 = coupSMPtr->vf2(id1Abs) * kinFacV
681 + coupSMPtr->af2(id1Abs) * pow3(ps);
684 widNow = gamNorm * ef2 + intNorm * efvf + resNorm * vf2af2;
687 if (id1Abs < 6) widNow *= colQ;
701 void ResonanceW::initConstants() {
704 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
712 void ResonanceW::calcPreFac(
bool) {
715 alpEM = coupSMPtr->alphaEM(mHat * mHat);
716 alpS = coupSMPtr->alphaS(mHat * mHat);
717 colQ = 3. * (1. + alpS / M_PI);
718 preFac = alpEM * thetaWRat * mHat;
726 void ResonanceW::calcWidth(
bool) {
729 if (ps == 0.)
return;
732 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
737 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2));
738 if (id1Abs < 6) widNow *= colQ * coupSMPtr->V2CKMid(id1Abs, id2Abs);
751 void ResonanceTop::initConstants() {
754 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW());
755 m2W = pow2(particleDataPtr->m0(24));
758 tanBeta = settingsPtr->parm(
"HiggsHchg:tanBeta");
759 tan2Beta = tanBeta * tanBeta;
760 mbRun = particleDataPtr->mRun( 5, particleDataPtr->m0(6) );
768 void ResonanceTop::calcPreFac(
bool) {
771 alpEM = coupSMPtr->alphaEM(mHat * mHat);
772 alpS = coupSMPtr->alphaS(mHat * mHat);
773 colQ = 1. - 2.5 * alpS / M_PI;
774 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
782 void ResonanceTop::calcWidth(
bool) {
786 if (ps == 0.)
return;
789 if (id1Abs == 24 && id2Abs < 6) {
791 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
794 widNow *= colQ * coupSMPtr->V2CKMid(6, id2Abs);
797 }
else if (id1Abs == 37 && id2Abs == 5) {
798 widNow = preFac * ps * ( (1. + mr2 - mr1)
799 * (pow2(mbRun / mHat) * tan2Beta + 1. / tan2Beta)
800 + 4. * mbRun * mf2 / pow2(mHat) );
814 void ResonanceFour::initConstants() {
817 thetaWRat = 1. / (16. * coupSMPtr->sin2thetaW());
818 m2W = pow2(particleDataPtr->m0(24));
826 void ResonanceFour::calcPreFac(
bool) {
829 alpEM = coupSMPtr->alphaEM(mHat * mHat);
830 alpS = coupSMPtr->alphaS(mHat * mHat);
831 colQ = (idRes < 9) ? 1. - 2.5 * alpS / M_PI : 1.;
832 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
840 void ResonanceFour::calcWidth(
bool) {
843 if (id1Abs != 24 || id2Abs > 18)
return;
846 if (ps == 0.)
return;
848 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
851 if (idRes < 9) widNow *= colQ * coupSMPtr->V2CKMid(idRes, id2Abs);
867 const double ResonanceH::MASSMINWZ = 10.;
868 const double ResonanceH::MASSMINT = 100.;
871 const double ResonanceH::GAMMAMARGIN = 10.;
877 void ResonanceH::initConstants() {
880 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
881 useRunLoopMass = settingsPtr->flag(
"Higgs:runningLoopMass");
882 sin2tW = coupSMPtr->sin2thetaW();
883 cos2tW = 1. - sin2tW;
884 mT = particleDataPtr->m0(6);
885 mZ = particleDataPtr->m0(23);
886 mW = particleDataPtr->m0(24);
887 mHchg = particleDataPtr->m0(37);
888 GammaT = particleDataPtr->mWidth(6);
889 GammaZ = particleDataPtr->mWidth(23);
890 GammaW = particleDataPtr->mWidth(24);
893 useNLOWidths = (higgsType == 0) && settingsPtr->flag(
"HiggsSM:NLOWidths");
894 rescAlpS = 0.12833 / coupSMPtr->alphaS(125. * 125.);
910 if (higgsType == 1) {
911 coup2d = settingsPtr->parm(
"HiggsH1:coup2d");
912 coup2u = settingsPtr->parm(
"HiggsH1:coup2u");
913 coup2l = settingsPtr->parm(
"HiggsH1:coup2l");
914 coup2Z = settingsPtr->parm(
"HiggsH1:coup2Z");
915 coup2W = settingsPtr->parm(
"HiggsH1:coup2W");
916 coup2Hchg = settingsPtr->parm(
"HiggsH1:coup2Hchg");
917 }
else if (higgsType == 2) {
918 coup2d = settingsPtr->parm(
"HiggsH2:coup2d");
919 coup2u = settingsPtr->parm(
"HiggsH2:coup2u");
920 coup2l = settingsPtr->parm(
"HiggsH2:coup2l");
921 coup2Z = settingsPtr->parm(
"HiggsH2:coup2Z");
922 coup2W = settingsPtr->parm(
"HiggsH2:coup2W");
923 coup2Hchg = settingsPtr->parm(
"HiggsH2:coup2Hchg");
924 coup2H1H1 = settingsPtr->parm(
"HiggsH2:coup2H1H1");
925 coup2A3A3 = settingsPtr->parm(
"HiggsH2:coup2A3A3");
926 coup2H1Z = settingsPtr->parm(
"HiggsH2:coup2H1Z");
927 coup2A3Z = settingsPtr->parm(
"HiggsA3:coup2H2Z");
928 coup2A3H1 = settingsPtr->parm(
"HiggsH2:coup2A3H1");
929 coup2HchgW = settingsPtr->parm(
"HiggsH2:coup2HchgW");
930 }
else if (higgsType == 3) {
931 coup2d = settingsPtr->parm(
"HiggsA3:coup2d");
932 coup2u = settingsPtr->parm(
"HiggsA3:coup2u");
933 coup2l = settingsPtr->parm(
"HiggsA3:coup2l");
934 coup2Z = settingsPtr->parm(
"HiggsA3:coup2Z");
935 coup2W = settingsPtr->parm(
"HiggsA3:coup2W");
936 coup2Hchg = settingsPtr->parm(
"HiggsA3:coup2Hchg");
937 coup2H1H1 = settingsPtr->parm(
"HiggsA3:coup2H1H1");
938 coup2H1Z = settingsPtr->parm(
"HiggsA3:coup2H1Z");
939 coup2HchgW = settingsPtr->parm(
"HiggsA3:coup2HchgW");
944 int psModeT = (higgsType < 3) ? 3 : 1;
945 int psModeWZ = (higgsType < 3) ? 5 : 6;
946 mLowT = max( 2.02 * MASSMINT, 0.5 * mT);
947 mStepT = 0.01 * (3. * mT - mLowT);
948 mLowZ = max( 2.02 * MASSMINWZ, 0.5 * mZ);
949 mStepZ = 0.01 * (3. * mZ - mLowZ);
950 mLowW = max( 2.02 * MASSMINWZ, 0.5 * mW);
951 mStepW = 0.01 * (3. * mW - mLowW);
952 for (
int i = 0; i <= 100; ++i) {
953 kinFacT[i] = numInt2BW( mLowT + i * mStepT,
954 mT, GammaT, MASSMINT, mT, GammaT, MASSMINT, psModeT);
955 kinFacZ[i] = numInt2BW( mLowZ + i * mStepZ,
956 mZ, GammaZ, MASSMINWZ, mZ, GammaZ, MASSMINWZ, psModeWZ);
957 kinFacW[i] = numInt2BW( mLowW + i * mStepW,
958 mW, GammaW, MASSMINWZ, mW, GammaW, MASSMINWZ, psModeWZ);
967 void ResonanceH::calcPreFac(
bool) {
970 alpEM = coupSMPtr->alphaEM(mHat * mHat);
971 alpS = coupSMPtr->alphaS(mHat * mHat);
972 colQ = 3. * (1. + alpS / M_PI);
973 preFac = (alpEM / (8. * sin2tW)) * pow3(mHat) / pow2(mW);
974 if (useNLOWidths) rescColQ = 3. * (1. + rescAlpS * alpS / M_PI) / colQ;
982 void ResonanceH::calcWidth(
bool) {
985 if ( id2Abs == id1Abs && ( (id1Abs > 0 && id1Abs < 7)
986 || (id1Abs > 10 && id1Abs < 17) ) ) {
990 if ( (id1Abs != 6 && mHat > 2. * mf1 + MASSMARGIN)
991 || (id1Abs == 6 && mHat > 3. * mT ) ) {
993 kinFac = (higgsType < 3) ? pow3(ps) : ps;
997 else if (id1Abs == 6 && mHat > mLowT) {
998 double xTab = (mHat - mLowT) / mStepT;
999 int iTab = max( 0, min( 99,
int(xTab) ) );
1000 kinFac = kinFacT[iTab]
1001 * pow( kinFacT[iTab + 1] / kinFacT[iTab], xTab - iTab);
1005 double coupFac = pow2(particleDataPtr->mRun(id1Abs, mHat) / mHat);
1006 if (id1Abs < 7 && id1Abs%2 == 1) coupFac *= coup2d * coup2d;
1007 else if (id1Abs < 7) coupFac *= coup2u * coup2u;
1008 else coupFac *= coup2l * coup2l;
1011 widNow = preFac * coupFac * kinFac;
1012 if (id1Abs < 7) widNow *= colQ;
1016 else if (id1Abs == 21 && id2Abs == 21)
1017 widNow = preFac * pow2(alpS / M_PI) * eta2gg();
1020 else if (id1Abs == 22 && id2Abs == 22)
1021 widNow = preFac * pow2(alpEM / M_PI) * 0.5 * eta2gaga();
1024 else if (id1Abs == 23 && id2Abs == 22)
1025 widNow = preFac * pow2(alpEM / M_PI) * pow3(ps) * eta2gaZ();
1028 else if (id1Abs == 23 && id2Abs == 23) {
1030 if (mHat > 3. * mZ) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
1031 else if (mHat > mLowZ) {
1032 double xTab = (mHat - mLowZ) / mStepZ;
1033 int iTab = max( 0, min( 99,
int(xTab) ) );
1034 kinFac = kinFacZ[iTab]
1035 * pow( kinFacZ[iTab + 1] / kinFacZ[iTab], xTab - iTab );
1039 widNow = 0.25 * preFac * pow2(coup2Z) * kinFac;
1040 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
1044 else if (id1Abs == 24 && id2Abs == 24) {
1046 if (mHat > 3. * mW) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
1047 else if (mHat > mLowW) {
1048 double xTab = (mHat - mLowW) / mStepW;
1049 int iTab = max( 0, min( 99,
int(xTab) ) );
1050 kinFac = kinFacW[iTab]
1051 * pow( kinFacW[iTab + 1] / kinFacW[iTab], xTab - iTab);
1055 widNow = 0.5 * preFac * pow2(coup2W) * kinFac;
1056 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
1060 else if (id1Abs == 25 && id2Abs == 25)
1061 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2H1H1);
1064 else if (id1Abs == 36 && id2Abs == 36)
1065 widNow = 0.5 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3A3);
1068 else if (id1Abs == 25 && id2Abs == 23)
1069 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1Z);
1072 else if (id1Abs == 36 && id2Abs == 23)
1073 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2A3Z);
1076 else if (id1Abs == 36 && id2Abs == 25)
1077 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3H1);
1080 else if (id1Abs == 37 && id2Abs == 24)
1081 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2HchgW);
1086 if (id1Abs == 21 && id2Abs == 21) widNow *= 1.47 * pow2(rescAlpS);
1087 else if (id1Abs == 22 && id2Abs == 22) widNow *= 0.88;
1088 else if (id1Abs == 22 && id2Abs == 23) widNow *= 0.95;
1089 else if (id1Abs == 23 && id2Abs == 23) widNow *= 1.10;
1090 else if (id1Abs == 24 && id2Abs == 24) widNow *= 1.09;
1091 else if (id1Abs == 5 && id2Abs == 5) widNow *= 1.07 * rescColQ;
1092 else if (id1Abs == 4 && id2Abs == 4) widNow *= 0.937 * rescColQ;
1093 else if (id1Abs == 13 && id2Abs == 13) widNow *= 0.974;
1094 else if (id1Abs == 15 && id2Abs == 15) widNow *= 0.992;
1104 double ResonanceH::eta2gg() {
1107 complex eta = complex(0., 0.);
1108 double mLoop, epsilon, root, rootLog;
1109 complex phi, etaNow;
1112 for (
int idNow = 3; idNow < 7; ++idNow) {
1113 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1114 : particleDataPtr->m0(idNow);
1115 epsilon = pow2(2. * mLoop / mHat);
1118 if (epsilon <= 1.) {
1119 root = sqrt(1. - epsilon);
1120 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1121 : log( (1. + root) / (1. - root) );
1122 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1123 0.5 * M_PI * rootLog );
1125 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1128 if (higgsType < 3) etaNow = -0.5 * epsilon
1129 * (complex(1., 0.) + (1. - epsilon) * phi);
1130 else etaNow = -0.5 * epsilon * phi;
1131 if (idNow%2 == 1) etaNow *= coup2d;
1132 else etaNow *= coup2u;
1137 return (pow2(eta.real()) + pow2(eta.imag()));
1146 double ResonanceH::eta2gaga() {
1149 complex eta = complex(0., 0.);
1151 double ef, mLoop, epsilon, root, rootLog;
1152 complex phi, etaNow;
1155 for (
int idLoop = 0; idLoop < 8; ++idLoop) {
1156 if (idLoop < 4) idNow = idLoop + 3;
1157 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1158 else if (idLoop < 7) idNow = 24;
1160 if (idNow == 37 && higgsType == 0)
continue;
1163 ef = (idNow < 20) ? coupSMPtr->ef(idNow) : 1.;
1164 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1165 : particleDataPtr->m0(idNow);
1166 epsilon = pow2(2. * mLoop / mHat);
1169 if (epsilon <= 1.) {
1170 root = sqrt(1. - epsilon);
1171 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1172 : log( (1. + root) / (1. - root) );
1173 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1174 0.5 * M_PI * rootLog );
1176 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1180 if (higgsType < 3) etaNow = -0.5 * epsilon
1181 * (complex(1., 0.) + (1. - epsilon) * phi);
1182 else etaNow = -0.5 * epsilon * phi;
1183 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * pow2(ef) * coup2d;
1184 else if (idNow < 7 ) etaNow *= 3. * pow2(ef) * coup2u;
1185 else etaNow *= pow2(ef) * coup2l;
1189 else if (idNow == 24) etaNow = (complex(0.5 + 0.75 * epsilon, 0.)
1190 + 0.75 * epsilon * (2. - epsilon) * phi) * coup2W;
1193 else etaNow = (complex(epsilon, 0.) - epsilon * epsilon * phi)
1194 * pow2(mW / mHchg) * coup2Hchg;
1199 return (pow2(eta.real()) + pow2(eta.imag()));
1208 double ResonanceH::eta2gaZ() {
1211 complex eta = complex(0., 0.);
1213 double ef, vf, mLoop, epsilon, epsPrime, root, rootLog, asinEps;
1214 complex phi, psi, phiPrime, psiPrime, fXY, f1, etaNow;
1217 for (
int idLoop = 0; idLoop < 8; ++idLoop) {
1218 if (idLoop < 4) idNow = idLoop + 3;
1219 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1220 else if (idLoop < 7) idNow = 24;
1222 if (idNow == 37 && higgsType == 0)
continue;
1225 ef = (idNow < 20) ? coupSMPtr->ef(idNow) : 1.;
1226 vf = (idNow < 20) ? coupSMPtr->vf(idNow) : 0.;
1227 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1228 : particleDataPtr->m0(idNow);
1229 epsilon = pow2(2. * mLoop / mHat);
1230 epsPrime = pow2(2. * mLoop / mZ);
1233 if (epsilon <= 1.) {
1234 root = sqrt(1. - epsilon);
1235 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1236 : log( (1. + root) / (1. - root) );
1237 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1238 0.5 * M_PI * rootLog );
1239 psi = 0.5 * root * complex( rootLog, -M_PI);
1241 asinEps = asin(1. / sqrt(epsilon));
1242 phi = complex( pow2(asinEps), 0.);
1243 psi = complex( sqrt(epsilon - 1.) * asinEps, 0.);
1247 if (epsPrime <= 1.) {
1248 root = sqrt(1. - epsPrime);
1249 rootLog = (epsPrime < 1e-4) ? log(4. / epsPrime - 2.)
1250 : log( (1. + root) / (1. - root) );
1251 phiPrime = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1252 0.5 * M_PI * rootLog );
1253 psiPrime = 0.5 * root * complex( rootLog, -M_PI);
1255 asinEps = asin(1. / sqrt(epsPrime));
1256 phiPrime = complex( pow2(asinEps), 0.);
1257 psiPrime = complex( sqrt(epsPrime - 1.) * asinEps, 0.);
1261 fXY = (epsilon * epsPrime / (8. * pow2(epsilon - epsPrime)))
1262 * ( complex(epsilon - epsPrime, 0)
1263 + epsilon * epsPrime * (phi - phiPrime)
1264 + 2. * epsilon * (psi - psiPrime) );
1265 f1 = - (epsilon * epsPrime / (2. * (epsilon - epsPrime)))
1270 etaNow = (higgsType < 3) ? -fXY + 0.25 * f1 : 0.25 * f1;
1271 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * ef * vf * coup2d;
1272 else if (idNow < 7) etaNow *= 3. * ef * vf * coup2u;
1273 else etaNow *= ef * vf * coup2l;
1276 }
else if (idNow == 24) {
1277 double coef1 = 3. - sin2tW / cos2tW;
1278 double coefXY = (1. + 2. / epsilon) * sin2tW / cos2tW
1279 - (5. + 2. / epsilon);
1280 etaNow = -cos2tW * (coef1 * f1 + coefXY * fXY) * coup2W;
1283 }
else etaNow = (1. - 2. * sin2tW) * fXY * pow2(mW / mHchg)
1289 return ( (pow2(eta.real()) + pow2(eta.imag())) / (sin2tW * cos2tW) );
1302 void ResonanceHchg::initConstants() {
1305 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
1306 thetaWRat = 1. / (8. * coupSMPtr->sin2thetaW());
1307 mW = particleDataPtr->m0(24);
1308 tanBeta = settingsPtr->parm(
"HiggsHchg:tanBeta");
1309 tan2Beta = tanBeta * tanBeta;
1310 coup2H1W = settingsPtr->parm(
"HiggsHchg:coup2H1W");
1318 void ResonanceHchg::calcPreFac(
bool) {
1321 alpEM = coupSMPtr->alphaEM(mHat * mHat);
1322 alpS = coupSMPtr->alphaS(mHat * mHat);
1323 colQ = 3. * (1. + alpS / M_PI);
1324 preFac = alpEM * thetaWRat * pow3(mHat) / pow2(mW);
1332 void ResonanceHchg::calcWidth(
bool) {
1335 if (ps == 0.)
return;
1338 if (id1Abs < 17 && (id1Abs < 7 || id1Abs > 10)) {
1339 double mRun1 = particleDataPtr->mRun(id1Abs, mHat);
1340 double mRun2 = particleDataPtr->mRun(id2Abs, mHat);
1341 double mrRunDn = pow2(mRun1 / mHat);
1342 double mrRunUp = pow2(mRun2 / mHat);
1343 if (id1Abs%2 == 0) swap( mrRunDn, mrRunUp);
1346 widNow = preFac * max( 0., (mrRunDn * tan2Beta + mrRunUp / tan2Beta)
1347 * (1. - mrRunDn - mrRunUp) - 4. *mrRunDn * mrRunUp ) * ps;
1348 if (id1Abs < 7) widNow *= colQ;
1352 else if (id1Abs == 25 && id2Abs == 24)
1353 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1W);
1366 void ResonanceZprime::initConstants() {
1369 gmZmode = settingsPtr->mode(
"Zprime:gmZmode");
1370 sin2tW = coupSMPtr->sin2thetaW();
1371 cos2tW = 1. - sin2tW;
1372 thetaWRat = 1. / (16. * sin2tW * cos2tW);
1375 mZ = particleDataPtr->m0(23);
1376 GammaZ = particleDataPtr->mWidth(23);
1378 GamMRatZ = GammaZ / mZ;
1381 for (
int i = 0; i < 20; ++i) afZp[i] = 0.;
1382 for (
int i = 0; i < 20; ++i) vfZp[i] = 0.;
1385 afZp[1] = settingsPtr->parm(
"Zprime:ad");
1386 afZp[2] = settingsPtr->parm(
"Zprime:au");
1387 afZp[11] = settingsPtr->parm(
"Zprime:ae");
1388 afZp[12] = settingsPtr->parm(
"Zprime:anue");
1389 vfZp[1] = settingsPtr->parm(
"Zprime:vd");
1390 vfZp[2] = settingsPtr->parm(
"Zprime:vu");
1391 vfZp[11] = settingsPtr->parm(
"Zprime:ve");
1392 vfZp[12] = settingsPtr->parm(
"Zprime:vnue");
1395 bool coupZp2gen4 = settingsPtr->flag(
"Zprime:coup2gen4");
1396 maxZpGen = (coupZp2gen4) ? 8 : 6;
1399 if (settingsPtr->flag(
"Zprime:universality")) {
1400 for (
int i = 3; i <= maxZpGen; ++i) {
1401 afZp[i] = afZp[i-2];
1402 vfZp[i] = vfZp[i-2];
1403 afZp[i+10] = afZp[i+8];
1404 vfZp[i+10] = vfZp[i+8];
1409 afZp[3] = settingsPtr->parm(
"Zprime:as");
1410 afZp[4] = settingsPtr->parm(
"Zprime:ac");
1411 afZp[5] = settingsPtr->parm(
"Zprime:ab");
1412 afZp[6] = settingsPtr->parm(
"Zprime:at");
1413 afZp[13] = settingsPtr->parm(
"Zprime:amu");
1414 afZp[14] = settingsPtr->parm(
"Zprime:anumu");
1415 afZp[15] = settingsPtr->parm(
"Zprime:atau");
1416 afZp[16] = settingsPtr->parm(
"Zprime:anutau");
1417 vfZp[3] = settingsPtr->parm(
"Zprime:vs");
1418 vfZp[4] = settingsPtr->parm(
"Zprime:vc");
1419 vfZp[5] = settingsPtr->parm(
"Zprime:vb");
1420 vfZp[6] = settingsPtr->parm(
"Zprime:vt");
1421 vfZp[13] = settingsPtr->parm(
"Zprime:vmu");
1422 vfZp[14] = settingsPtr->parm(
"Zprime:vnumu");
1423 vfZp[15] = settingsPtr->parm(
"Zprime:vtau");
1424 vfZp[16] = settingsPtr->parm(
"Zprime:vnutau");
1426 afZp[7] = settingsPtr->parm(
"Zprime:abPrime");
1427 afZp[8] = settingsPtr->parm(
"Zprime:atPrime");
1428 vfZp[7] = settingsPtr->parm(
"Zprime:vbPrime");
1429 vfZp[8] = settingsPtr->parm(
"Zprime:vtPrime");
1430 afZp[17] = settingsPtr->parm(
"Zprime:atauPrime");
1431 afZp[18] = settingsPtr->parm(
"Zprime:anutauPrime");
1432 vfZp[17] = settingsPtr->parm(
"Zprime:vtauPrime");
1433 vfZp[18] = settingsPtr->parm(
"Zprime:vnutauPrime");
1438 coupZpWW = settingsPtr->parm(
"Zprime:coup2WW");
1446 void ResonanceZprime::calcPreFac(
bool calledFromInit) {
1449 alpEM = coupSMPtr->alphaEM(mHat * mHat);
1450 alpS = coupSMPtr->alphaS(mHat * mHat);
1451 colQ = 3. * (1. + alpS / M_PI);
1452 preFac = alpEM * thetaWRat * mHat / 3.;
1455 if (!calledFromInit) {
1464 int idInFlavAbs = abs(idInFlav);
1465 if ( (idInFlavAbs > 0 && idInFlavAbs <= maxZpGen)
1466 || (idInFlavAbs > 10 && idInFlavAbs <= maxZpGen + 10) ) {
1467 double ei = coupSMPtr->ef(idInFlavAbs);
1468 double ai = coupSMPtr->af(idInFlavAbs);
1469 double vi = coupSMPtr->vf(idInFlavAbs);
1470 double api = afZp[idInFlavAbs];
1471 double vpi = vfZp[idInFlavAbs];
1474 vai2 = vi * vi + ai * ai;
1476 vaivapi = vi * vpi + ai * api;;
1477 vapi2 = vpi * vpi + api * api;
1481 double sH = mHat * mHat;
1482 double propZ = sH / ( pow2(sH - m2Z) + pow2(sH * GamMRatZ) );
1483 double propZp = sH / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1485 gamZNorm = 2. * eivi * thetaWRat * (sH - m2Z) * propZ;
1486 ZNorm = vai2 * pow2(thetaWRat) * sH * propZ;
1487 gamZpNorm = 2. * eivpi * thetaWRat * (sH - m2Res) * propZp;
1488 ZZpNorm = 2. * vaivapi * pow2(thetaWRat) * ((sH - m2Res) * (sH - m2Z)
1489 + sH * GamMRat * sH * GamMRatZ) * propZ * propZp;
1490 ZpNorm = vapi2 * pow2(thetaWRat) * sH * propZp;
1493 if (gmZmode == 1) {gamZNorm = 0; ZNorm = 0.; gamZpNorm = 0.;
1494 ZZpNorm = 0.; ZpNorm = 0.;}
1495 if (gmZmode == 2) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;
1496 ZZpNorm = 0.; ZpNorm = 0.;}
1497 if (gmZmode == 3) {gamNorm = 0.; gamZNorm = 0.; ZNorm = 0.;
1498 gamZpNorm = 0.; ZZpNorm = 0.;}
1499 if (gmZmode == 4) {gamZpNorm = 0.; ZZpNorm = 0.; ZpNorm = 0.;}
1500 if (gmZmode == 5) {gamZNorm = 0.; ZNorm = 0.; ZZpNorm = 0.;}
1501 if (gmZmode == 6) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;}
1510 void ResonanceZprime::calcWidth(
bool calledFromInit) {
1513 if (ps == 0.)
return;
1516 if (calledFromInit) {
1519 if ( id1Abs <= maxZpGen || (id1Abs > 10 && id1Abs <= maxZpGen + 10) ) {
1520 double apf = afZp[id1Abs];
1521 double vpf = vfZp[id1Abs];
1522 widNow = preFac * ps * (vpf*vpf * (1. + 2. * mr1)
1524 if (id1Abs < 9) widNow *= colQ;
1527 }
else if (id1Abs == 24) {
1528 widNow = preFac * pow2(coupZpWW * cos2tW) * pow3(ps)
1529 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1537 if ( id1Abs <= maxZpGen || (id1Abs > 10 && id1Abs <= maxZpGen + 10) ) {
1540 double ef = coupSMPtr->ef(id1Abs);
1541 double af = coupSMPtr->af(id1Abs);
1542 double vf = coupSMPtr->vf(id1Abs);
1543 double apf = afZp[id1Abs];
1544 double vpf = vfZp[id1Abs];
1547 double kinFacA = pow3(ps);
1548 double kinFacV = ps * (1. + 2. * mr1);
1549 double ef2 = ef * ef * kinFacV;
1550 double efvf = ef * vf * kinFacV;
1551 double vaf2 = vf * vf * kinFacV + af * af * kinFacA;
1552 double efvpf = ef * vpf * kinFacV;
1553 double vafvapf = vf * vpf * kinFacV + af * apf * kinFacA;
1554 double vapf2 = vpf * vpf * kinFacV + apf * apf * kinFacA;
1557 widNow = gamNorm * ef2 + gamZNorm * efvf + ZNorm * vaf2
1558 + gamZpNorm * efvpf + ZZpNorm * vafvapf + ZpNorm * vapf2;
1559 if (id1Abs < 9) widNow *= colQ;
1562 }
else if (id1Abs == 24) {
1563 widNow = ZpNorm * pow2(coupZpWW * cos2tW) * pow3(ps)
1564 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1579 void ResonanceWprime::initConstants() {
1582 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
1583 cos2tW = coupSMPtr->cos2thetaW();
1586 aqWp = settingsPtr->parm(
"Wprime:aq");
1587 vqWp = settingsPtr->parm(
"Wprime:vq");
1588 alWp = settingsPtr->parm(
"Wprime:al");
1589 vlWp = settingsPtr->parm(
"Wprime:vl");
1592 coupWpWZ = settingsPtr->parm(
"Wprime:coup2WZ");
1600 void ResonanceWprime::calcPreFac(
bool) {
1603 alpEM = coupSMPtr->alphaEM(mHat * mHat);
1604 alpS = coupSMPtr->alphaS(mHat * mHat);
1605 colQ = 3. * (1. + alpS / M_PI);
1606 preFac = alpEM * thetaWRat * mHat;
1614 void ResonanceWprime::calcWidth(
bool) {
1617 if (ps == 0.)
return;
1620 if (id1Abs > 0 && id1Abs < 9) widNow
1621 = preFac * ps * 0.5 * ((vqWp*vqWp + aqWp * aqWp)
1622 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
1623 + 3. * (vqWp*vqWp - aqWp * aqWp) * sqrt(mr1 * mr2))
1624 * colQ * coupSMPtr->V2CKMid(id1Abs, id2Abs);
1627 else if (id1Abs > 10 && id1Abs < 19) widNow
1628 = preFac * ps * 0.5 * ((vlWp*vlWp + alWp * alWp)
1629 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
1630 + 3. * (vlWp*vlWp - alWp * alWp) * sqrt(mr1 * mr2));
1633 else if (id1Abs == 24 && id2Abs == 23) widNow
1634 = preFac * 0.25 * pow2(coupWpWZ) * cos2tW * (mr1 / mr2) * pow3(ps)
1635 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1648 void ResonanceRhorizontal::initConstants() {
1651 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
1659 void ResonanceRhorizontal::calcPreFac(
bool) {
1662 alpEM = coupSMPtr->alphaEM(mHat * mHat);
1663 alpS = coupSMPtr->alphaS(mHat * mHat);
1664 colQ = 3. * (1. + alpS / M_PI);
1665 preFac = alpEM * thetaWRat * mHat;
1673 void ResonanceRhorizontal::calcWidth(
bool) {
1676 if (ps == 0.)
return;
1679 widNow = preFac * ps * (2. - mr1 - mr2 - pow2(mr1 - mr2));
1680 if (id1Abs < 9) widNow *= colQ;
1693 void ResonanceExcited::initConstants() {
1696 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
1697 coupF = settingsPtr->parm(
"ExcitedFermion:coupF");
1698 coupFprime = settingsPtr->parm(
"ExcitedFermion:coupFprime");
1699 coupFcol = settingsPtr->parm(
"ExcitedFermion:coupFcol");
1700 contactDec = settingsPtr->parm(
"ExcitedFermion:contactDec");
1701 sin2tW = coupSMPtr->sin2thetaW();
1702 cos2tW = 1. - sin2tW;
1710 void ResonanceExcited::calcPreFac(
bool) {
1713 alpEM = coupSMPtr->alphaEM(mHat * mHat);
1714 alpS = coupSMPtr->alphaS(mHat * mHat);
1715 preFac = pow3(mHat) / pow2(Lambda);
1723 void ResonanceExcited::calcWidth(
bool) {
1726 if (ps == 0.)
return;
1729 if (id1Abs == 21) widNow = preFac * alpS * pow2(coupFcol) / 3.;
1732 else if (id1Abs == 22) {
1733 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1734 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1735 double chg = chgI3 * coupF + chgY * coupFprime;
1736 widNow = preFac * alpEM * pow2(chg) / 4.;
1740 else if (id1Abs == 23) {
1741 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1742 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1743 double chg = chgI3 * cos2tW * coupF - chgY * sin2tW * coupFprime;
1744 widNow = preFac * (alpEM * pow2(chg) / (8. * sin2tW * cos2tW))
1745 * ps*ps * (2. + mr1);
1749 else if (id1Abs == 24) widNow = preFac * (alpEM * pow2(coupF)
1750 / (16. * sin2tW)) * ps*ps * (2. + mr1);
1754 if (id1Abs < 17 && id2Abs < 17 && id3Abs > 0 && id3Abs < 17 ) {
1755 widNow = preFac * pow2(contactDec * mHat) / (pow2(Lambda) * 96. * M_PI);
1756 if (mHat < mf1 + mf2 + mf3 ) widNow = 0.;
1757 if (id3Abs < 10) widNow *= 3.;
1758 if (id1Abs == id2Abs && id1Abs == id3Abs) {
1759 if (idRes - 4000000 < 10) widNow *= 4./3.;
1768 if ( (id1Abs == id2Abs && id1Abs != id3Abs)
1769 || (id1Abs == id3Abs && id1Abs != id2Abs) ) a2 = 4. * mr1;
1770 else if (id2Abs == id3Abs && id2Abs != id1Abs) a2 = 4. * mr2;
1772 widNow *= sqrt(1. - a2) * ( 1. - (7./2.) * a2 - (1./8.) * pow2(a2)
1773 - (3./16.) * pow3(a2) ) + 3. * pow2(a2) * (1. - (1./16.) * pow2(a2))
1774 * log( sqrt(1./a2) * (1. + sqrt(1. - a2)) ) ;
1789 void ResonanceGraviton::initConstants() {
1793 eDsmbulk = settingsPtr->flag(
"ExtraDimensionsG*:SMinBulk");
1795 if (eDsmbulk) eDvlvl = settingsPtr->flag(
"ExtraDimensionsG*:VLVL");
1796 kappaMG = settingsPtr->parm(
"ExtraDimensionsG*:kappaMG");
1797 for (
int i = 0; i < 27; ++i) eDcoupling[i] = 0.;
1798 double tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gqq");
1799 for (
int i = 1; i <= 4; ++i) eDcoupling[i] = tmp_coup;
1800 eDcoupling[5] = settingsPtr->parm(
"ExtraDimensionsG*:Gbb");
1801 eDcoupling[6] = settingsPtr->parm(
"ExtraDimensionsG*:Gtt");
1802 tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gll");
1803 for (
int i = 11; i <= 16; ++i) eDcoupling[i] = tmp_coup;
1804 eDcoupling[21] = settingsPtr->parm(
"ExtraDimensionsG*:Ggg");
1805 eDcoupling[22] = settingsPtr->parm(
"ExtraDimensionsG*:Ggmgm");
1806 eDcoupling[23] = settingsPtr->parm(
"ExtraDimensionsG*:GZZ");
1807 eDcoupling[24] = settingsPtr->parm(
"ExtraDimensionsG*:GWW");
1808 eDcoupling[25] = settingsPtr->parm(
"ExtraDimensionsG*:Ghh");
1816 void ResonanceGraviton::calcPreFac(
bool) {
1819 alpS = coupSMPtr->alphaS(mHat * mHat);
1820 colQ = 3. * (1. + alpS / M_PI);
1821 preFac = mHat / M_PI;
1829 void ResonanceGraviton::calcWidth(
bool) {
1832 if (ps == 0.)
return;
1836 widNow = preFac * pow3(ps) * (1. + 8. * mr1 / 3.) / 320.;
1837 if (id1Abs < 9) widNow *= colQ;
1840 }
else if (id1Abs == 21) {
1841 widNow = preFac / 20.;
1842 }
else if (id1Abs == 22) {
1843 widNow = preFac / 160.;
1846 }
else if (id1Abs == 23 || id1Abs == 24) {
1849 widNow = preFac * pow(ps,5) / 480.;
1852 widNow = preFac * ps * (13. / 12. + 14. * mr1 / 3. + 4. * mr1 * mr1)
1855 if (id1Abs == 23) widNow *= 0.5;
1858 }
else if (id1Abs == 25) {
1859 widNow = preFac * pow(ps,5) / 960.;
1863 if (eDsmbulk) widNow *= 2. * pow2(eDcoupling[min( id1Abs, 26)] * mHat);
1864 else widNow *= pow2(kappaMG * mHat / mRes);
1877 void ResonanceKKgluon::initConstants() {
1880 for (
int i = 0; i < 10; ++i) { eDgv[i] = 0.; eDga[i] = 0.; }
1881 double tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgqL");
1882 double tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgqR");
1883 for (
int i = 1; i <= 4; ++i) {
1884 eDgv[i] = 0.5 * (tmp_gL + tmp_gR);
1885 eDga[i] = 0.5 * (tmp_gL - tmp_gR);
1887 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgbL");
1888 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgbR");
1889 eDgv[5] = 0.5 * (tmp_gL + tmp_gR); eDga[5] = 0.5 * (tmp_gL - tmp_gR);
1890 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgtL");
1891 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgtR");
1892 eDgv[6] = 0.5 * (tmp_gL + tmp_gR); eDga[6] = 0.5 * (tmp_gL - tmp_gR);
1893 interfMode = settingsPtr->mode(
"ExtraDimensionsG*:KKintMode");
1901 void ResonanceKKgluon::calcPreFac(
bool calledFromInit) {
1904 alpS = coupSMPtr->alphaS(mHat * mHat);
1905 preFac = alpS * mHat / 6;
1908 if (!calledFromInit) {
1910 int idInFlavAbs = abs(idInFlav);
1911 double sH = mHat * mHat;
1913 normInt = 2. * eDgv[min(idInFlavAbs, 9)] * sH * (sH - m2Res)
1914 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1915 normKK = ( pow2(eDgv[min(idInFlavAbs, 9)])
1916 + pow2(eDga[min(idInFlavAbs, 9)]) ) * sH * sH
1917 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1920 if (interfMode == 1) {normInt = 0.; normKK = 0.;}
1921 if (interfMode == 2) {normSM = 0.; normInt = 0.; normKK = 1.;}
1930 void ResonanceKKgluon::calcWidth(
bool calledFromInit) {
1933 if (ps == 0.)
return;
1936 if (id1Abs > 9)
return;
1938 if (calledFromInit) {
1939 widNow = preFac * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1940 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1943 widNow = normSM * ps * (1. + 2. * mr1)
1944 + normInt * ps * eDgv[min(id1Abs, 9)] * (1. + 2. * mr1)
1945 + normKK * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1946 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1961 void ResonanceLeptoquark::initConstants() {
1964 kCoup = settingsPtr->parm(
"LeptoQuark:kCoup");
1967 int id1Now = particlePtr->channel(0).product(0);
1968 int id2Now = particlePtr->channel(0).product(1);
1969 if (id1Now < 1 || id1Now > 6) {
1970 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1971 " unallowed input quark flavour reset to u");
1973 particlePtr->channel(0).product(0, id1Now);
1975 if (abs(id2Now) < 11 || abs(id2Now) > 16) {
1976 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1977 " unallowed input lepton flavour reset to e-");
1979 particlePtr->channel(0).product(1, id2Now);
1983 bool changed = particlePtr->hasChanged();
1984 int chargeLQ = particleDataPtr->chargeType(id1Now)
1985 + particleDataPtr->chargeType(id2Now);
1986 particlePtr->setChargeType(chargeLQ);
1987 string nameLQ =
"LQ_" + particleDataPtr->name(id1Now) +
","
1988 + particleDataPtr->name(id2Now);
1989 particlePtr->setNames(nameLQ, nameLQ +
"bar");
1990 if (!changed) particlePtr->setHasChanged(
false);
1998 void ResonanceLeptoquark::calcPreFac(
bool) {
2001 alpEM = coupSMPtr->alphaEM(mHat * mHat);
2002 preFac = 0.25 * alpEM * kCoup * mHat;
2010 void ResonanceLeptoquark::calcWidth(
bool) {
2013 if (ps == 0.)
return;
2016 if (id1Abs > 10 && id1Abs < 17 && id2Abs < 7) widNow = preFac * pow3(ps);
2029 void ResonanceNuRight::initConstants() {
2032 thetaWRat = 1. / (768. * M_PI * pow2(coupSMPtr->sin2thetaW()));
2033 mWR = particleDataPtr->m0(9900024);
2041 void ResonanceNuRight::calcPreFac(
bool) {
2044 alpEM = coupSMPtr->alphaEM(mHat * mHat);
2045 alpS = coupSMPtr->alphaS(mHat * mHat);
2046 colQ = 3. * (1. + alpS / M_PI);
2047 preFac = pow2(alpEM) * thetaWRat * pow5(mHat) / pow4(max(mHat, mWR));
2055 void ResonanceNuRight::calcWidth(
bool) {
2058 if (mHat < mf1 + mf2 + mf3 + MASSMARGIN)
return;
2061 widNow = (id2Abs < 9 && id3Abs < 9)
2062 ? preFac * colQ * coupSMPtr->V2CKMid(id2, id3) : preFac;
2065 double x = (mf1 + mf2 + mf3) / mHat;
2067 double fx = 1. - 8. * x2 + 8. * pow3(x2) - pow4(x2)
2068 - 24. * pow2(x2) * log(x);
2069 double y = min( 0.999, pow2(mHat / mWR) );
2070 double fy = ( 12. * (1. - y) * log(1. - y) + 12. * y - 6. * y*y
2071 - 2.* pow3(y) ) / pow4(y);
2085 void ResonanceZRight::initConstants() {
2088 sin2tW = coupSMPtr->sin2thetaW();
2089 thetaWRat = 1. / (48. * sin2tW * (1. - sin2tW) * (1. - 2. * sin2tW) );
2097 void ResonanceZRight::calcPreFac(
bool) {
2100 alpEM = coupSMPtr->alphaEM(mHat * mHat);
2101 alpS = coupSMPtr->alphaS(mHat * mHat);
2102 colQ = 3. * (1. + alpS / M_PI);
2103 preFac = alpEM * thetaWRat * mHat;
2111 void ResonanceZRight::calcWidth(
bool) {
2114 if (ps == 0.)
return;
2120 if (id1Abs < 9 && id1Abs%2 == 1) {
2121 af = -1. + 2. * sin2tW;
2122 vf = -1. + 4. * sin2tW / 3.;
2123 }
else if (id1Abs < 9) {
2124 af = 1. - 2. * sin2tW;
2125 vf = 1. - 8. * sin2tW / 3.;
2126 }
else if (id1Abs < 19 && id1Abs%2 == 1) {
2127 af = -1. + 2. * sin2tW;
2128 vf = -1. + 4. * sin2tW;
2131 }
else if (id1Abs < 19) {
2136 af = 2. * (1. - sin2tW);
2142 widNow = preFac * (vf*vf * (1. + 2. * mr1) + af*af * ps*ps) * ps
2144 if (id1Abs < 9) widNow *= colQ;
2157 void ResonanceWRight::initConstants() {
2160 thetaWRat = 1. / (12. * coupSMPtr->sin2thetaW());
2168 void ResonanceWRight::calcPreFac(
bool) {
2171 alpEM = coupSMPtr->alphaEM(mHat * mHat);
2172 alpS = coupSMPtr->alphaS(mHat * mHat);
2173 colQ = 3. * (1. + alpS / M_PI);
2174 preFac = alpEM * thetaWRat * mHat;
2182 void ResonanceWRight::calcWidth(
bool) {
2185 if (ps == 0.)
return;
2188 widNow = preFac * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
2190 if (id1Abs < 9) widNow *= colQ * coupSMPtr->V2CKMid(id1Abs, id2Abs);
2203 void ResonanceHchgchgLeft::initConstants() {
2206 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2207 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2208 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2209 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2210 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2211 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2214 gL = settingsPtr->parm(
"LeftRightSymmmetry:gL");
2215 vL = settingsPtr->parm(
"LeftRightSymmmetry:vL");
2216 mW = particleDataPtr->m0(24);
2224 void ResonanceHchgchgLeft::calcPreFac(
bool) {
2227 preFac = mHat / (8. * M_PI);
2235 void ResonanceHchgchgLeft::calcWidth(
bool) {
2238 if (ps == 0.)
return;
2241 if (id1Abs < 17 && id2Abs < 17) {
2242 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2243 if (id2Abs != id1Abs) widNow *= 2.;
2247 else if (id1Abs == 24 && id2Abs == 24)
2248 widNow = preFac * 0.5 * pow2(gL*gL * vL / mW)
2249 * (3. * mr1 + 0.25 / mr1 - 1.) * ps;
2262 void ResonanceHchgchgRight::initConstants() {
2265 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2266 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2267 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2268 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2269 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2270 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2274 gR = settingsPtr->parm(
"LeftRightSymmmetry:gR");
2282 void ResonanceHchgchgRight::calcPreFac(
bool) {
2285 preFac = mHat / (8. * M_PI);
2293 void ResonanceHchgchgRight::calcWidth(
bool) {
2296 if (ps == 0.)
return;
2299 if (id1Abs < 17 && id2Abs < 17) {
2300 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2301 if (id2Abs != id1Abs) widNow *= 2.;
2305 else if (id1Abs == idWR && id2Abs == idWR)
2306 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;