9 #include "ResonanceWidths.h"
10 #include "PythiaComplex.h"
25 const int ResonanceWidths::NPOINT = 100;
28 const double ResonanceWidths::MASSMARGIN = 0.1;
35 bool ResonanceWidths::init(Info* infoPtrIn, Settings* settingsPtrIn,
36 ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn) {
40 settingsPtr = settingsPtrIn;
41 particleDataPtr = particleDataPtrIn;
42 couplingsPtr = couplingsPtrIn;
45 minWidth = settingsPtr->parm(
"ResonanceWidths:minWidth");
46 minThreshold = settingsPtr->parm(
"ResonanceWidths:minThreshold");
49 particlePtr = particleDataPtr->particleDataEntryPtr(idRes);
50 if (particlePtr == 0) {
51 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
52 " unknown resonance identity code");
58 if (idRes == 35 || idRes == 36 || idRes == 37
59 || idRes/1000000 == 3) isGeneric =
false;
62 hasAntiRes = particlePtr->hasAnti();
63 mRes = particlePtr->m0();
64 GammaRes = particlePtr->mWidth();
68 if (GammaRes < minWidth) GammaRes = 0.1 * minWidth;
69 GamMRat = GammaRes / mRes;
76 doForceWidth = particlePtr->doForceWidth();
80 if (particlePtr == 0) infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
81 " unknown resonance identity code");
95 double openSecPos, openSecNeg;
98 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
100 onMode = particlePtr->channel(i).onMode();
101 meMode = particlePtr->channel(i).meMode();
102 mult = particlePtr->channel(i).multiplicity();
106 if ( meMode < 0 || meMode > 103 || (isGeneric && meMode < 100) ) {
107 infoPtr->errorMsg(
"Error in ResonanceWidths::init:"
108 " resonance meMode not acceptable");
115 id1 = particlePtr->channel(i).product(0);
116 id2 = particlePtr->channel(i).product(1);
121 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
125 id3 = particlePtr->channel(i).product(2);
129 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
130 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
134 mf1 = particleDataPtr->m0(id1Abs);
135 mf2 = particleDataPtr->m0(id2Abs);
136 mr1 = pow2(mf1 / mHat);
137 mr2 = pow2(mf2 / mHat);
138 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
139 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
141 mf3 = particleDataPtr->m0(id3Abs);
142 mr3 = pow2(mf3 / mHat);
150 else widNow = GammaRes * particlePtr->channel(i).bRatio();
155 if (widNow > 0.)
for (
int j = 0; j < mult; ++j) {
156 idNow = particlePtr->channel(i).product(j);
157 idAnti = (particleDataPtr->hasAnti(idNow)) ? -idNow : idNow;
160 if (idNow == 23 || abs(idNow) == 24
161 || particleDataPtr->m0(abs(idNow)) < mRes) {
162 openSecPos *= particleDataPtr->resOpenFrac(idNow);
163 openSecNeg *= particleDataPtr->resOpenFrac(idAnti);
168 particlePtr->channel(i).onShellWidth(widNow);
169 particlePtr->channel(i).openSec( idRes, openSecPos);
170 particlePtr->channel(i).openSec(-idRes, openSecNeg);
174 if (onMode == 1 || onMode == 2) widPos += widNow * openSecPos;
175 if (onMode == 1 || onMode == 3) widNeg += widNow * openSecNeg;
179 if (widTot < minWidth) {
180 particlePtr->setMayDecay(
false,
false);
181 particlePtr->setMWidth(0.,
false);
182 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
183 particlePtr->channel(i).bRatio( 0.,
false);
189 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
190 bRatio = particlePtr->channel(i).onShellWidth() / widTot;
191 particlePtr->channel(i).bRatio( bRatio,
false);
196 forceFactor = GammaRes / widTot;
197 for (
int i = 0; i < particlePtr->sizeChannels(); ++i)
198 particlePtr->channel(i).onShellWidthFactor( forceFactor);
203 particlePtr->setMWidth(widTot,
false);
208 GamMRat = GammaRes / mRes;
209 openPos = widPos / widTot;
210 openNeg = widNeg / widTot;
213 bool isHiggs = (idRes == 25 || idRes == 35 ||idRes == 36 ||idRes == 37);
214 bool clipHiggsWings = settingsPtr->flag(
"Higgs:clipWings");
215 if (isHiggs && clipHiggsWings) {
216 double mMinNow = particlePtr->mMin();
217 double mMaxNow = particlePtr->mMax();
218 double wingsFac = settingsPtr->parm(
"Higgs:wingsFac");
219 double mMinWing = mRes - wingsFac * GammaRes;
220 double mMaxWing = mRes + wingsFac * GammaRes;
221 if (mMinWing > mMinNow) particlePtr->setMMinNoChange(mMinWing);
222 if (mMaxWing < mMaxNow || mMaxNow < mMinNow)
223 particlePtr->setMMaxNoChange(mMaxWing);
235 double ResonanceWidths::width(
int idSgn,
double mHatIn,
int idInFlavIn,
236 bool openOnly,
bool setBR,
int idOutFlav1,
int idOutFlav2) {
240 idInFlav = idInFlavIn;
245 double mfSum, psOnShell;
248 for (
int i = 0; i < particlePtr->sizeChannels(); ++i) {
250 onMode = particlePtr->channel(i).onMode();
251 meMode = particlePtr->channel(i).meMode();
252 mult = particlePtr->channel(i).multiplicity();
256 if (setBR) particlePtr->channel(i).currentBR(widNow);
260 if (idOutFlav1 > 0 || idOutFlav2 > 0) {
261 if (mult > 2)
continue;
262 if (particlePtr->channel(i).product(0) != idOutFlav1)
continue;
263 if (particlePtr->channel(i).product(1) != idOutFlav2)
continue;
268 if (idSgn > 0 && onMode !=1 && onMode != 2)
continue;
269 if (idSgn < 0 && onMode !=1 && onMode != 3)
continue;
276 id1 = particlePtr->channel(i).product(0);
277 id2 = particlePtr->channel(i).product(1);
282 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
286 id3 = particlePtr->channel(i).product(2);
290 if (id3Abs > id2Abs) {swap( id2, id3); swap( id2Abs, id3Abs);}
291 if (id2Abs > id1Abs) {swap( id1, id2); swap( id1Abs, id2Abs);}
295 mf1 = particleDataPtr->m0(id1Abs);
296 mf2 = particleDataPtr->m0(id2Abs);
297 mr1 = pow2(mf1 / mHat);
298 mr2 = pow2(mf2 / mHat);
299 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
300 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
302 mf3 = particleDataPtr->m0(id3Abs);
303 mr3 = pow2(mf3 / mHat);
311 else if (meMode == 100)
312 widNow = GammaRes * particlePtr->channel(i).bRatio();
315 else if (meMode == 101) {
317 for (
int j = 0; j < mult; ++j) mfSum
318 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
319 if (mfSum + MASSMARGIN < mHat)
320 widNow = GammaRes * particlePtr->channel(i).bRatio();
324 else if ( (meMode == 102 || meMode == 103) && mult == 2) {
325 mf1 = particleDataPtr->m0( particlePtr->channel(i).product(0) );
326 mf2 = particleDataPtr->m0( particlePtr->channel(i).product(1) );
327 mr1 = pow2(mf1 / mHat);
328 mr2 = pow2(mf2 / mHat);
329 ps = (mHat < mf1 + mf2 + MASSMARGIN) ? 0.
330 : sqrtpos( pow2(1. - mr1 - mr2) - 4. * mr1 * mr2 );
331 mr1 = pow2(mf1 / mRes);
332 mr2 = pow2(mf2 / mRes);
333 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
334 sqrtpos( pow2(1.- mr1 - mr2) - 4. * mr1 * mr2) );
335 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
339 else if (meMode == 102 || meMode == 103) {
341 for (
int j = 0; j < mult; ++j) mfSum
342 += particleDataPtr->m0( particlePtr->channel(i).product(j) );
343 ps = sqrtpos(1. - mfSum / mHat);
344 psOnShell = (meMode == 102) ? 1. : max( minThreshold,
345 sqrtpos(1. - mfSum / mRes) );
346 widNow = GammaRes * particlePtr->channel(i).bRatio() * ps / psOnShell;
350 if (openOnly) widNow *= particlePtr->channel(i).openSec(idSgn);
359 if (setBR) particlePtr->channel(i).currentBR(widNow);
374 double ResonanceWidths::numInt1BW(
double mHatIn,
double m1,
double Gamma1,
375 double mMin1,
double m2,
int psMode) {
378 if (mMin1 + m2 > mHatIn)
return 0.;
382 double mG1 = m1 * Gamma1;
383 double mMax1 = mHatIn - m2;
384 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
385 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
386 double atanDif1 = atanMax1 - atanMin1;
387 double wtDif1 = atanDif1 / (M_PI * NPOINT);
390 double xStep = 1. / NPOINT;
394 double mrNow2 = pow2(m2 / mHatIn);
395 double xNow1, sNow1, mNow1, mrNow1, psNow, value;
398 for (
int ip1 = 0; ip1 < NPOINT; ++ip1) {
399 xNow1 = xStep * (ip1 + 0.5);
400 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
401 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
402 mrNow1 = pow2(mNow1 / mHatIn);
405 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
406 - 4. * mrNow1 * mrNow2);
408 if (psMode == 1) value = psNow;
409 else if (psMode == 2) value = psNow * psNow;
410 else if (psMode == 3) value = pow3(psNow);
411 else if (psMode == 5) value = psNow
412 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
413 else if (psMode == 6) value = pow3(psNow);
431 double ResonanceWidths::numInt2BW(
double mHatIn,
double m1,
double Gamma1,
432 double mMin1,
double m2,
double Gamma2,
double mMin2,
int psMode) {
435 if (mMin1 + mMin2 >= mHatIn)
return 0.;
439 double mG1 = m1 * Gamma1;
440 double mMax1 = mHatIn - mMin2;
441 double atanMin1 = atan( (mMin1 * mMin1 - s1) / mG1 );
442 double atanMax1 = atan( (mMax1 * mMax1 - s1) / mG1 );
443 double atanDif1 = atanMax1 - atanMin1;
444 double wtDif1 = atanDif1 / (M_PI * NPOINT);
446 double mG2 = m2 * Gamma2;
447 double mMax2 = mHatIn - mMin1;
448 double atanMin2 = atan( (mMin2 * mMin2 - s2) / mG2 );
449 double atanMax2 = atan( (mMax2 * mMax2 - s2) / mG2 );
450 double atanDif2 = atanMax2 - atanMin2;
451 double wtDif2 = atanDif2 / (M_PI * NPOINT);
455 bool mustDiv =
false;
457 double atanDiv1 = 0.;
458 double atanDLo1 = 0.;
459 double atanDHi1 = 0.;
463 double atanDiv2 = 0.;
464 double atanDLo2 = 0.;
465 double atanDHi2 = 0.;
468 if (m1 + m2 > mHatIn) {
470 double tmpDiv = (mHatIn - m1 - m2) / (Gamma1 + Gamma2);
471 mDiv1 = m1 + Gamma1 * tmpDiv;
472 atanDiv1 = atan( (mDiv1 * mDiv1 - s1) / mG1 );
473 atanDLo1 = atanDiv1 - atanMin1;
474 atanDHi1 = atanMax1 - atanDiv1;
475 wtDLo1 = atanDLo1 / (M_PI * NPOINT);
476 wtDHi1 = atanDHi1 / (M_PI * NPOINT);
477 mDiv2 = m2 + Gamma2 * tmpDiv;
478 atanDiv2 = atan( (mDiv2 * mDiv2 - s2) / mG2 );
479 atanDLo2 = atanDiv2 - atanMin2;
480 atanDHi2 = atanMax2 - atanDiv2;
481 wtDLo2 = atanDLo2 / (M_PI * NPOINT);
482 wtDHi2 = atanDHi2 / (M_PI * NPOINT);
486 double xStep = 1. / NPOINT;
487 int nIter = (mustDiv) ? 2 * NPOINT : NPOINT;
491 double xNow1, sNow1, mNow1, mrNow1, xNow2, sNow2, mNow2, mrNow2, psNow,
493 double wtNow1 = wtDif1;
494 double wtNow2 = wtDif2;
497 for (
int ip1 = 0; ip1 < nIter; ++ip1) {
499 xNow1 = xStep * (ip1 + 0.5);
500 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDif1);
501 }
else if (ip1 < NPOINT) {
502 xNow1 = xStep * (ip1 + 0.5);
503 sNow1 = s1 + mG1 * tan(atanMin1 + xNow1 * atanDLo1);
506 xNow1 = xStep * (ip1 - NPOINT + 0.5);
507 sNow1 = s1 + mG1 * tan(atanDiv1 + xNow1 * atanDHi1);
510 mNow1 = min( mMax1, max( mMin1, sqrtpos(sNow1) ) );
511 mrNow1 = pow2(mNow1 / mHatIn);
514 for (
int ip2 = 0; ip2 < nIter; ++ip2) {
516 xNow2 = xStep * (ip2 + 0.5);
517 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDif2);
518 }
else if (ip2 < NPOINT) {
519 xNow2 = xStep * (ip2 + 0.5);
520 sNow2 = s2 + mG2 * tan(atanMin2 + xNow2 * atanDLo2);
523 xNow2 = xStep * (ip2 - NPOINT + 0.5);
524 sNow2 = s2 + mG2 * tan(atanDiv2 + xNow2 * atanDHi2);
527 mNow2 = min( mMax2, max( mMin2, sqrtpos(sNow2) ) );
528 mrNow2 = pow2(mNow2 / mHatIn);
531 if (mNow1 + mNow2 > mHatIn)
break;
534 psNow = sqrtpos( pow2(1. - mrNow1 - mrNow2)
535 - 4. * mrNow1 * mrNow2);
537 if (psMode == 1) value = psNow;
538 else if (psMode == 2) value = psNow * psNow;
539 else if (psMode == 3) value = pow3(psNow);
540 else if (psMode == 5) value = psNow
541 * (pow2(1. - mrNow1 - mrNow2) + 8. * mrNow1 * mrNow2);
542 else if (psMode == 6) value = pow3(psNow);
543 sum += value * wtNow1 * wtNow2;
562 void ResonanceGmZ::initConstants() {
565 gmZmode = settingsPtr->mode(
"WeakZ0:gmZmode");
566 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW()
567 * couplingsPtr->cos2thetaW());
575 void ResonanceGmZ::calcPreFac(
bool calledFromInit) {
578 alpEM = couplingsPtr->alphaEM(mHat * mHat);
579 alpS = couplingsPtr->alphaS(mHat * mHat);
580 colQ = 3. * (1. + alpS / M_PI);
581 preFac = alpEM * thetaWRat * mHat / 3.;
584 if (!calledFromInit) {
590 int idInFlavAbs = abs(idInFlav);
591 if (idInFlavAbs > 0 && idInFlavAbs < 19) {
592 ei2 = couplingsPtr->ef2(idInFlavAbs);
593 eivi = couplingsPtr->efvf(idInFlavAbs);
594 vi2ai2 = couplingsPtr->vf2af2(idInFlavAbs);
598 double sH = mHat * mHat;
600 intNorm = 2. * eivi * thetaWRat * sH * (sH - m2Res)
601 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
602 resNorm = vi2ai2 * pow2(thetaWRat * sH)
603 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
612 if (gmZmode == 1) {intNorm = 0.; resNorm = 0.;}
613 if (gmZmode == 2) {gamNorm = 0.; intNorm = 0.;}
622 void ResonanceGmZ::calcWidth(
bool calledFromInit) {
625 if (ps == 0.)
return;
628 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
631 if (calledFromInit) {
634 widNow = preFac * ps * (couplingsPtr->vf2(id1Abs) * (1. + 2. * mr1)
635 + couplingsPtr->af2(id1Abs) * ps*ps);
636 if (id1Abs < 6) widNow *= colQ;
643 double kinFacV = ps * (1. + 2. * mr1);
644 double ef2 = couplingsPtr->ef2(id1Abs) * kinFacV;
645 double efvf = couplingsPtr->efvf(id1Abs) * kinFacV;
646 double vf2af2 = couplingsPtr->vf2(id1Abs) * kinFacV
647 + couplingsPtr->af2(id1Abs) * pow3(ps);
650 widNow = gamNorm * ef2 + intNorm * efvf + resNorm * vf2af2;
653 if (id1Abs < 6) widNow *= colQ;
667 void ResonanceW::initConstants() {
670 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
678 void ResonanceW::calcPreFac(
bool) {
681 alpEM = couplingsPtr->alphaEM(mHat * mHat);
682 alpS = couplingsPtr->alphaS(mHat * mHat);
683 colQ = 3. * (1. + alpS / M_PI);
684 preFac = alpEM * thetaWRat * mHat;
692 void ResonanceW::calcWidth(
bool) {
695 if (ps == 0.)
return;
698 if ( (id1Abs > 5 && id1Abs < 11) || id1Abs > 16 )
return;
703 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2));
704 if (id1Abs < 6) widNow *= colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
717 void ResonanceTop::initConstants() {
720 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW());
721 m2W = pow2(particleDataPtr->m0(24));
729 void ResonanceTop::calcPreFac(
bool) {
732 alpEM = couplingsPtr->alphaEM(mHat * mHat);
733 alpS = couplingsPtr->alphaS(mHat * mHat);
734 colQ = 1. - 2.5 * alpS / M_PI;
735 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
743 void ResonanceTop::calcWidth(
bool) {
746 if (id1Abs != 24 || id2Abs > 5)
return;
749 if (ps == 0.)
return;
751 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
754 widNow *= colQ * couplingsPtr->V2CKMid(6, id2Abs);
767 void ResonanceFour::initConstants() {
770 thetaWRat = 1. / (16. * couplingsPtr->sin2thetaW());
771 m2W = pow2(particleDataPtr->m0(24));
779 void ResonanceFour::calcPreFac(
bool) {
782 alpEM = couplingsPtr->alphaEM(mHat * mHat);
783 alpS = couplingsPtr->alphaS(mHat * mHat);
784 colQ = (idRes < 9) ? 1. - 2.5 * alpS / M_PI : 1.;
785 preFac = alpEM * thetaWRat * pow3(mHat) / m2W;
793 void ResonanceFour::calcWidth(
bool) {
796 if (id1Abs != 24 || id2Abs > 18)
return;
799 if (ps == 0.)
return;
801 * ( pow2(1. - mr2) + (1. + mr2) * mr1 - 2. * mr1 * mr1 );
804 if (idRes < 9) widNow *= colQ * couplingsPtr->V2CKMid(idRes, id2Abs);
820 const double ResonanceH::MASSMINWZ = 10.;
821 const double ResonanceH::MASSMINT = 100.;
824 const double ResonanceH::GAMMAMARGIN = 10.;
830 void ResonanceH::initConstants() {
833 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
834 useRunLoopMass = settingsPtr->flag(
"Higgs:runningLoopMass");
835 sin2tW = couplingsPtr->sin2thetaW();
836 cos2tW = 1. - sin2tW;
837 mT = particleDataPtr->m0(6);
838 mZ = particleDataPtr->m0(23);
839 mW = particleDataPtr->m0(24);
840 mHchg = particleDataPtr->m0(37);
841 GammaT = particleDataPtr->mWidth(6);
842 GammaZ = particleDataPtr->mWidth(23);
843 GammaW = particleDataPtr->mWidth(24);
858 if (higgsType == 1) {
859 coup2d = settingsPtr->parm(
"HiggsH1:coup2d");
860 coup2u = settingsPtr->parm(
"HiggsH1:coup2u");
861 coup2l = settingsPtr->parm(
"HiggsH1:coup2l");
862 coup2Z = settingsPtr->parm(
"HiggsH1:coup2Z");
863 coup2W = settingsPtr->parm(
"HiggsH1:coup2W");
864 coup2Hchg = settingsPtr->parm(
"HiggsH1:coup2Hchg");
865 }
else if (higgsType == 2) {
866 coup2d = settingsPtr->parm(
"HiggsH2:coup2d");
867 coup2u = settingsPtr->parm(
"HiggsH2:coup2u");
868 coup2l = settingsPtr->parm(
"HiggsH2:coup2l");
869 coup2Z = settingsPtr->parm(
"HiggsH2:coup2Z");
870 coup2W = settingsPtr->parm(
"HiggsH2:coup2W");
871 coup2Hchg = settingsPtr->parm(
"HiggsH2:coup2Hchg");
872 coup2H1H1 = settingsPtr->parm(
"HiggsH2:coup2H1H1");
873 coup2A3A3 = settingsPtr->parm(
"HiggsH2:coup2A3A3");
874 coup2H1Z = settingsPtr->parm(
"HiggsH2:coup2H1Z");
875 coup2A3Z = settingsPtr->parm(
"HiggsA3:coup2H2Z");
876 coup2A3H1 = settingsPtr->parm(
"HiggsH2:coup2A3H1");
877 coup2HchgW = settingsPtr->parm(
"HiggsH2:coup2HchgW");
878 }
else if (higgsType == 3) {
879 coup2d = settingsPtr->parm(
"HiggsA3:coup2d");
880 coup2u = settingsPtr->parm(
"HiggsA3:coup2u");
881 coup2l = settingsPtr->parm(
"HiggsA3:coup2l");
882 coup2Z = settingsPtr->parm(
"HiggsA3:coup2Z");
883 coup2W = settingsPtr->parm(
"HiggsA3:coup2W");
884 coup2Hchg = settingsPtr->parm(
"HiggsA3:coup2Hchg");
885 coup2H1H1 = settingsPtr->parm(
"HiggsA3:coup2H1H1");
886 coup2H1Z = settingsPtr->parm(
"HiggsA3:coup2H1Z");
887 coup2HchgW = settingsPtr->parm(
"HiggsA3:coup2Hchg");
892 int psModeT = (higgsType < 3) ? 3 : 1;
893 int psModeWZ = (higgsType < 3) ? 5 : 6;
894 mLowT = max( 2.02 * MASSMINT, 0.5 * mT);
895 mStepT = 0.01 * (3. * mT - mLowT);
896 mLowZ = max( 2.02 * MASSMINWZ, 0.5 * mZ);
897 mStepZ = 0.01 * (3. * mZ - mLowZ);
898 mLowW = max( 2.02 * MASSMINWZ, 0.5 * mW);
899 mStepW = 0.01 * (3. * mW - mLowW);
900 for (
int i = 0; i <= 100; ++i) {
901 kinFacT[i] = numInt2BW( mLowT + i * mStepT,
902 mT, GammaT, MASSMINT, mT, GammaT, MASSMINT, psModeT);
903 kinFacZ[i] = numInt2BW( mLowZ + i * mStepZ,
904 mZ, GammaZ, MASSMINWZ, mZ, GammaZ, MASSMINWZ, psModeWZ);
905 kinFacW[i] = numInt2BW( mLowW + i * mStepW,
906 mW, GammaW, MASSMINWZ, mW, GammaW, MASSMINWZ, psModeWZ);
915 void ResonanceH::calcPreFac(
bool) {
918 alpEM = couplingsPtr->alphaEM(mHat * mHat);
919 alpS = couplingsPtr->alphaS(mHat * mHat);
920 colQ = 3. * (1. + alpS / M_PI);
921 preFac = (alpEM / (8. * sin2tW)) * pow3(mHat) / pow2(mW);
928 void ResonanceH::calcWidth(
bool) {
931 if ( id2Abs == id1Abs && ( (id1Abs > 0 && id1Abs < 7)
932 || (id1Abs > 10 && id1Abs < 17) ) ) {
936 if ( (id1Abs != 6 && mHat > 2. * mf1 + MASSMARGIN)
937 || (id1Abs == 6 && mHat > 3. * mT ) ) {
939 kinFac = (higgsType < 3) ? pow3(ps) : ps;
943 else if (id1Abs == 6 && mHat > mLowT) {
944 double xTab = (mHat - mLowT) / mStepT;
945 int iTab = max( 0, min( 99,
int(xTab) ) );
946 kinFac = kinFacT[iTab]
947 * pow( kinFacT[iTab + 1] / kinFacT[iTab], xTab - iTab);
951 double coupFac = pow2(particleDataPtr->mRun(id1Abs, mHat) / mHat);
952 if (id1Abs < 7 && id1Abs%2 == 1) coupFac *= coup2d * coup2d;
953 else if (id1Abs < 7) coupFac *= coup2u * coup2u;
954 else coupFac *= coup2l * coup2l;
957 widNow = preFac * coupFac * kinFac;
958 if (id1Abs < 7) widNow *= colQ;
962 else if (id1Abs == 21 && id2Abs == 21)
963 widNow = preFac * pow2(alpS / M_PI) * eta2gg();
966 else if (id1Abs == 22 && id2Abs == 22)
967 widNow = preFac * pow2(alpEM / M_PI) * 0.5 * eta2gaga();
970 else if (id1Abs == 23 && id2Abs == 22)
971 widNow = preFac * pow2(alpEM / M_PI) * pow3(ps) * eta2gaZ();
974 else if (id1Abs == 23 && id2Abs == 23) {
976 if (mHat > 3. * mZ) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
977 else if (mHat > mLowZ) {
978 double xTab = (mHat - mLowZ) / mStepZ;
979 int iTab = max( 0, min( 99,
int(xTab) ) );
980 kinFac = kinFacZ[iTab]
981 * pow( kinFacZ[iTab + 1] / kinFacZ[iTab], xTab - iTab );
985 widNow = 0.25 * preFac * pow2(coup2Z) * kinFac;
986 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
990 else if (id1Abs == 24 && id2Abs == 24) {
992 if (mHat > 3. * mW) kinFac = (1. - 4. * mr1 + 12. * mr1 * mr1) * ps;
993 else if (mHat > mLowW) {
994 double xTab = (mHat - mLowW) / mStepW;
995 int iTab = max( 0, min( 99,
int(xTab) ) );
996 kinFac = kinFacW[iTab]
997 * pow( kinFacW[iTab + 1] / kinFacW[iTab], xTab - iTab);
1001 widNow = 0.5 * preFac * pow2(coup2W) * kinFac;
1002 if (!useCubicWidth) widNow *= pow2(mRes / mHat);
1006 else if (id1Abs == 25 && id2Abs == 25)
1007 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2H1H1);
1010 else if (id1Abs == 36 && id2Abs == 36)
1011 widNow = 0.5 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3A3);
1014 else if (id1Abs == 25 && id2Abs == 23)
1015 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1Z);
1018 else if (id1Abs == 36 && id2Abs == 23)
1019 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2A3Z);
1022 else if (id1Abs == 36 && id2Abs == 25)
1023 widNow = 0.25 * preFac * pow4(mZ / mHat) * ps * pow2(coup2A3H1);
1026 else if (id1Abs == 37 && id2Abs == 24)
1027 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2HchgW);
1036 double ResonanceH::eta2gg() {
1039 complex eta = complex(0., 0.);
1040 double mLoop, epsilon, root, rootLog;
1041 complex phi, etaNow;
1044 for (
int idNow = 3; idNow < 7; ++idNow) {
1045 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1046 : particleDataPtr->m0(idNow);
1047 epsilon = pow2(2. * mLoop / mHat);
1050 if (epsilon <= 1.) {
1051 root = sqrt(1. - epsilon);
1052 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1053 : log( (1. + root) / (1. - root) );
1054 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1055 0.5 * M_PI * rootLog );
1057 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1060 if (higgsType < 3) etaNow = -0.5 * epsilon
1061 * (complex(1., 0.) + (1. - epsilon) * phi);
1062 else etaNow = -0.5 * epsilon * phi;
1063 if (idNow%2 == 1) etaNow *= coup2d;
1064 else etaNow *= coup2u;
1069 return (pow2(eta.real()) + pow2(eta.imag()));
1078 double ResonanceH::eta2gaga() {
1081 complex eta = complex(0., 0.);
1083 double ef, mLoop, epsilon, root, rootLog;
1084 complex phi, etaNow;
1087 for (
int idLoop = 0; idLoop < 8; ++idLoop) {
1088 if (idLoop < 4) idNow = idLoop + 3;
1089 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1090 else if (idLoop < 7) idNow = 24;
1092 if (idNow == 37 && higgsType == 0)
continue;
1095 ef = (idNow < 20) ? couplingsPtr->ef(idNow) : 1.;
1096 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1097 : particleDataPtr->m0(idNow);
1098 epsilon = pow2(2. * mLoop / mHat);
1101 if (epsilon <= 1.) {
1102 root = sqrt(1. - epsilon);
1103 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1104 : log( (1. + root) / (1. - root) );
1105 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1106 0.5 * M_PI * rootLog );
1108 else phi = complex( pow2( asin(1. / sqrt(epsilon)) ), 0.);
1112 if (higgsType < 3) etaNow = -0.5 * epsilon
1113 * (complex(1., 0.) + (1. - epsilon) * phi);
1114 else etaNow = -0.5 * epsilon * phi;
1115 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * pow2(ef) * coup2d;
1116 else if (idNow < 7 ) etaNow *= 3. * pow2(ef) * coup2u;
1117 else etaNow *= pow2(ef) * coup2l;
1121 else if (idNow == 24) etaNow = (complex(0.5 + 0.75 * epsilon, 0.)
1122 + 0.75 * epsilon * (2. - epsilon) * phi) * coup2W;
1125 else etaNow = (complex(epsilon, 0.) - epsilon * epsilon * phi)
1126 * pow2(mW / mHchg) * coup2Hchg;
1131 return (pow2(eta.real()) + pow2(eta.imag()));
1140 double ResonanceH::eta2gaZ() {
1143 complex eta = complex(0., 0.);
1145 double ef, vf, mLoop, epsilon, epsPrime, root, rootLog, asinEps;
1146 complex phi, psi, phiPrime, psiPrime, fXY, f1, etaNow;
1149 for (
int idLoop = 0; idLoop < 7; ++idLoop) {
1150 if (idLoop < 4) idNow = idLoop + 3;
1151 else if (idLoop < 6) idNow = 2 * idLoop + 5;
1152 else if (idLoop < 7) idNow = 24;
1156 ef = (idNow < 20) ? couplingsPtr->ef(idNow) : 1.;
1157 vf = (idNow < 20) ? couplingsPtr->vf(idNow) : 0.;
1158 mLoop = (useRunLoopMass) ? particleDataPtr->mRun(idNow, mHat)
1159 : particleDataPtr->m0(idNow);
1160 epsilon = pow2(2. * mLoop / mHat);
1161 epsPrime = pow2(2. * mLoop / mZ);
1164 if (epsilon <= 1.) {
1165 root = sqrt(1. - epsilon);
1166 rootLog = (epsilon < 1e-4) ? log(4. / epsilon - 2.)
1167 : log( (1. + root) / (1. - root) );
1168 phi = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1169 0.5 * M_PI * rootLog );
1170 psi = 0.5 * root * complex( rootLog, -M_PI);
1172 asinEps = asin(1. / sqrt(epsilon));
1173 phi = complex( pow2(asinEps), 0.);
1174 psi = complex( sqrt(epsilon - 1.) * asinEps, 0.);
1178 if (epsPrime <= 1.) {
1179 root = sqrt(1. - epsPrime);
1180 rootLog = (epsPrime < 1e-4) ? log(4. / epsPrime - 2.)
1181 : log( (1. + root) / (1. - root) );
1182 phiPrime = complex( -0.25 * (pow2(rootLog) - pow2(M_PI)),
1183 0.5 * M_PI * rootLog );
1184 psiPrime = 0.5 * root * complex( rootLog, -M_PI);
1186 asinEps = asin(1. / sqrt(epsPrime));
1187 phiPrime = complex( pow2(asinEps), 0.);
1188 psiPrime = complex( sqrt(epsPrime - 1.) * asinEps, 0.);
1192 fXY = (epsilon * epsPrime / (8. * pow2(epsilon - epsPrime)))
1193 * ( complex(epsilon - epsPrime, 0)
1194 + epsilon * epsPrime * (phi - phiPrime)
1195 + 2. * epsilon * (psi - psiPrime) );
1196 f1 = - (epsilon * epsPrime / (2. * (epsilon - epsPrime)))
1201 etaNow = (higgsType < 3) ? -fXY + 0.25 * f1 : 0.25 * f1;
1202 if (idNow < 7 && idNow%2 == 1) etaNow *= 3. * ef * vf * coup2d;
1203 else if (idNow < 7) etaNow *= 3. * ef * vf * coup2u;
1204 else etaNow *= ef * vf * coup2l;
1207 }
else if (idNow == 24) {
1208 double coef1 = 3. - sin2tW / cos2tW;
1209 double coefXY = (1. + 2. / epsilon) * sin2tW / cos2tW
1210 - (5. + 2. / epsilon);
1211 etaNow = -cos2tW * (coef1 * f1 + coefXY * fXY) * coup2W;
1214 }
else etaNow = (1. - 2. * sin2tW) * fXY * pow2(mW / mHchg)
1220 return ( (pow2(eta.real()) + pow2(eta.imag())) / (sin2tW * cos2tW) );
1233 void ResonanceHchg::initConstants() {
1236 useCubicWidth = settingsPtr->flag(
"Higgs:cubicWidth");
1237 thetaWRat = 1. / (8. * couplingsPtr->sin2thetaW());
1238 mW = particleDataPtr->m0(24);
1239 tanBeta = settingsPtr->parm(
"HiggsHchg:tanBeta");
1240 tan2Beta = tanBeta * tanBeta;
1241 coup2H1W = settingsPtr->parm(
"HiggsHchg:coup2H1W");
1249 void ResonanceHchg::calcPreFac(
bool) {
1252 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1253 alpS = couplingsPtr->alphaS(mHat * mHat);
1254 colQ = 3. * (1. + alpS / M_PI);
1255 preFac = alpEM * thetaWRat * pow3(mHat) / pow2(mW);
1263 void ResonanceHchg::calcWidth(
bool) {
1266 if (ps == 0.)
return;
1269 if (id1Abs < 17 && (id1Abs < 7 || id1Abs > 10)) {
1270 double mRun1 = particleDataPtr->mRun(id1Abs, mHat);
1271 double mRun2 = particleDataPtr->mRun(id2Abs, mHat);
1272 double mrRunDn = pow2(mRun1 / mHat);
1273 double mrRunUp = pow2(mRun2 / mHat);
1274 if (id1Abs%2 == 0) swap( mrRunDn, mrRunUp);
1277 widNow = preFac * max( 0., (mrRunDn * tan2Beta + mrRunUp / tan2Beta)
1278 * (1. - mrRunDn - mrRunUp) - 4. *mrRunDn * mrRunUp ) * ps;
1279 if (id1Abs < 7) widNow *= colQ;
1283 else if (id1Abs == 25 && id2Abs == 24)
1284 widNow = 0.5 * preFac * pow3(ps) * pow2(coup2H1W);
1297 void ResonanceZprime::initConstants() {
1300 gmZmode = settingsPtr->mode(
"Zprime:gmZmode");
1301 sin2tW = couplingsPtr->sin2thetaW();
1302 cos2tW = 1. - sin2tW;
1303 thetaWRat = 1. / (16. * sin2tW * cos2tW);
1306 mZ = particleDataPtr->m0(23);
1307 GammaZ = particleDataPtr->mWidth(23);
1309 GamMRatZ = GammaZ / mZ;
1312 for (
int i = 0; i < 20; ++i) afZp[i] = 0.;
1313 for (
int i = 0; i < 20; ++i) vfZp[i] = 0.;
1316 afZp[1] = settingsPtr->parm(
"Zprime:ad");
1317 afZp[2] = settingsPtr->parm(
"Zprime:au");
1318 afZp[11] = settingsPtr->parm(
"Zprime:ae");
1319 afZp[12] = settingsPtr->parm(
"Zprime:anue");
1320 vfZp[1] = settingsPtr->parm(
"Zprime:vd");
1321 vfZp[2] = settingsPtr->parm(
"Zprime:vu");
1322 vfZp[11] = settingsPtr->parm(
"Zprime:ve");
1323 vfZp[12] = settingsPtr->parm(
"Zprime:vnue");
1326 if (settingsPtr->flag(
"Zprime:universality")) {
1327 for (
int i = 3; i <= 6; ++i) {
1328 afZp[i] = afZp[i-2];
1329 vfZp[i] = vfZp[i-2];
1330 afZp[i+10] = afZp[i+8];
1331 vfZp[i+10] = vfZp[i+8];
1336 afZp[3] = settingsPtr->parm(
"Zprime:as");
1337 afZp[4] = settingsPtr->parm(
"Zprime:ac");
1338 afZp[5] = settingsPtr->parm(
"Zprime:ab");
1339 afZp[6] = settingsPtr->parm(
"Zprime:at");
1340 afZp[13] = settingsPtr->parm(
"Zprime:amu");
1341 afZp[14] = settingsPtr->parm(
"Zprime:anumu");
1342 afZp[15] = settingsPtr->parm(
"Zprime:atau");
1343 afZp[16] = settingsPtr->parm(
"Zprime:anutau");
1344 vfZp[3] = settingsPtr->parm(
"Zprime:vs");
1345 vfZp[4] = settingsPtr->parm(
"Zprime:vc");
1346 vfZp[5] = settingsPtr->parm(
"Zprime:vb");
1347 vfZp[6] = settingsPtr->parm(
"Zprime:vt");
1348 vfZp[13] = settingsPtr->parm(
"Zprime:vmu");
1349 vfZp[14] = settingsPtr->parm(
"Zprime:vnumu");
1350 vfZp[15] = settingsPtr->parm(
"Zprime:vtau");
1351 vfZp[16] = settingsPtr->parm(
"Zprime:vnutau");
1355 coupZpWW = settingsPtr->parm(
"Zprime:coup2WW");
1363 void ResonanceZprime::calcPreFac(
bool calledFromInit) {
1366 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1367 alpS = couplingsPtr->alphaS(mHat * mHat);
1368 colQ = 3. * (1. + alpS / M_PI);
1369 preFac = alpEM * thetaWRat * mHat / 3.;
1372 if (!calledFromInit) {
1381 int idInFlavAbs = abs(idInFlav);
1382 if (idInFlavAbs > 0 && idInFlavAbs < 19) {
1383 double ei = couplingsPtr->ef(idInFlavAbs);
1384 double ai = couplingsPtr->af(idInFlavAbs);
1385 double vi = couplingsPtr->vf(idInFlavAbs);
1386 double api = afZp[idInFlavAbs];
1387 double vpi = vfZp[idInFlavAbs];
1390 vai2 = vi * vi + ai * ai;
1392 vaivapi = vi * vpi + ai * api;;
1393 vapi2 = vpi * vpi + api * api;
1397 double sH = mHat * mHat;
1398 double propZ = sH / ( pow2(sH - m2Z) + pow2(sH * GamMRatZ) );
1399 double propZp = sH / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1401 gamZNorm = 2. * eivi * thetaWRat * (sH - m2Z) * propZ;
1402 ZNorm = vai2 * pow2(thetaWRat) * sH * propZ;
1403 gamZpNorm = 2. * eivpi * thetaWRat * (sH - m2Res) * propZp;
1404 ZZpNorm = 2. * vaivapi * pow2(thetaWRat) * ((sH - m2Res) * (sH - m2Z)
1405 + sH * GamMRat * sH * GamMRatZ) * propZ * propZp;
1406 ZpNorm = vapi2 * pow2(thetaWRat) * sH * propZp;
1415 if (gmZmode == 1) {gamZNorm = 0; ZNorm = 0.; gamZpNorm = 0.;
1416 ZZpNorm = 0.; ZpNorm = 0.;}
1417 if (gmZmode == 2) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;
1418 ZZpNorm = 0.; ZpNorm = 0.;}
1419 if (gmZmode == 3) {gamNorm = 0.; gamZNorm = 0.; ZNorm = 0.;
1420 gamZpNorm = 0.; ZZpNorm = 0.;}
1421 if (gmZmode == 4) {gamZpNorm = 0.; ZZpNorm = 0.; ZpNorm = 0.;}
1422 if (gmZmode == 5) {gamZNorm = 0.; ZNorm = 0.; ZZpNorm = 0.;}
1423 if (gmZmode == 6) {gamNorm = 0.; gamZNorm = 0.; gamZpNorm = 0.;}
1432 void ResonanceZprime::calcWidth(
bool calledFromInit) {
1435 if (ps == 0.)
return;
1438 if (calledFromInit) {
1441 if ( id1Abs < 7 || (id1Abs > 10 && id1Abs < 17) ) {
1442 double apf = afZp[id1Abs];
1443 double vpf = vfZp[id1Abs];
1444 widNow = preFac * ps * (vpf*vpf * (1. + 2. * mr1)
1446 if (id1Abs < 7) widNow *= colQ;
1449 }
else if (id1Abs == 24) {
1450 widNow = preFac * pow2(coupZpWW * cos2tW) * pow3(ps)
1451 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1459 if ( id1Abs < 7 || (id1Abs > 10 && id1Abs < 17) ) {
1462 double ef = couplingsPtr->ef(id1Abs);
1463 double af = couplingsPtr->af(id1Abs);
1464 double vf = couplingsPtr->vf(id1Abs);
1465 double apf = afZp[id1Abs];
1466 double vpf = vfZp[id1Abs];
1469 double kinFacA = pow3(ps);
1470 double kinFacV = ps * (1. + 2. * mr1);
1471 double ef2 = ef * ef * kinFacV;
1472 double efvf = ef * vf * kinFacV;
1473 double vaf2 = vf * vf * kinFacV + af * af * kinFacA;
1474 double efvpf = ef * vpf * kinFacV;
1475 double vafvapf = vf * vpf * kinFacV + af * apf * kinFacA;
1476 double vapf2 = vpf * vpf * kinFacV + apf * apf * kinFacA;
1479 widNow = gamNorm * ef2 + gamZNorm * efvf + ZNorm * vaf2
1480 + gamZpNorm * efvpf + ZZpNorm * vafvapf + ZpNorm * vapf2;
1481 if (id1Abs < 7) widNow *= colQ;
1484 }
else if (id1Abs == 24) {
1485 widNow = ZpNorm * pow2(coupZpWW * cos2tW) * pow3(ps)
1486 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1501 void ResonanceWprime::initConstants() {
1504 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
1505 cos2tW = couplingsPtr->cos2thetaW();
1508 aqWp = settingsPtr->parm(
"Wprime:aq");
1509 vqWp = settingsPtr->parm(
"Wprime:vq");
1510 alWp = settingsPtr->parm(
"Wprime:al");
1511 vlWp = settingsPtr->parm(
"Wprime:vl");
1514 coupWpWZ = settingsPtr->parm(
"Wprime:coup2WZ");
1522 void ResonanceWprime::calcPreFac(
bool) {
1525 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1526 alpS = couplingsPtr->alphaS(mHat * mHat);
1527 colQ = 3. * (1. + alpS / M_PI);
1528 preFac = alpEM * thetaWRat * mHat;
1536 void ResonanceWprime::calcWidth(
bool) {
1539 if (ps == 0.)
return;
1542 if (id1Abs > 0 && id1Abs < 7) widNow
1543 = preFac * ps * 0.5 * ((vqWp*vqWp + aqWp * aqWp)
1544 + 6. * (vqWp*vqWp - aqWp * aqWp) * sqrt(mr1 *mr2))
1545 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
1546 * colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
1549 else if (id1Abs > 10 && id1Abs < 17) widNow
1550 = preFac * ps * 0.5 * ((vlWp*vqWp + alWp * aqWp)
1551 + 6. * (vlWp*vqWp - alWp * aqWp) * sqrt(mr1 *mr2))
1552 * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2));
1555 else if (id1Abs == 24 && id2Abs == 23) widNow
1556 = preFac * 0.25 * pow2(coupWpWZ) * cos2tW * (mr1 / mr2) * pow3(ps)
1557 * (1. + mr1*mr1 + mr2*mr2 + 10. * (mr1 + mr2 + mr1 * mr2));
1570 void ResonanceRhorizontal::initConstants() {
1573 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
1581 void ResonanceRhorizontal::calcPreFac(
bool) {
1584 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1585 alpS = couplingsPtr->alphaS(mHat * mHat);
1586 colQ = 3. * (1. + alpS / M_PI);
1587 preFac = alpEM * thetaWRat * mHat;
1595 void ResonanceRhorizontal::calcWidth(
bool) {
1598 if (ps == 0.)
return;
1601 widNow = preFac * ps * (2. - mr1 - mr2 - pow2(mr1 - mr2));
1602 if (id1Abs < 9) widNow *= colQ;
1615 void ResonanceExcited::initConstants() {
1618 Lambda = settingsPtr->parm(
"ExcitedFermion:Lambda");
1619 coupF = settingsPtr->parm(
"ExcitedFermion:coupF");
1620 coupFprime = settingsPtr->parm(
"ExcitedFermion:coupFprime");
1621 coupFcol = settingsPtr->parm(
"ExcitedFermion:coupFcol");
1622 sin2tW = couplingsPtr->sin2thetaW();
1623 cos2tW = 1. - sin2tW;
1631 void ResonanceExcited::calcPreFac(
bool) {
1634 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1635 alpS = couplingsPtr->alphaS(mHat * mHat);
1636 preFac = pow3(mHat) / pow2(Lambda);
1644 void ResonanceExcited::calcWidth(
bool) {
1647 if (ps == 0.)
return;
1650 if (id1Abs == 21) widNow = preFac * alpS * pow2(coupFcol) / 3.;
1653 else if (id1Abs == 22) {
1654 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1655 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1656 double chg = chgI3 * coupF + chgY * coupFprime;
1657 widNow = preFac * alpEM * pow2(chg) / 4.;
1661 else if (id1Abs == 23) {
1662 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
1663 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
1664 double chg = chgI3 * cos2tW * coupF - chgY * sin2tW * coupFprime;
1665 widNow = preFac * (alpEM * pow2(chg) / (8. * sin2tW * cos2tW))
1666 * ps*ps * (2. + mr1);
1670 else if (id1Abs == 24) widNow = preFac * (alpEM * pow2(coupF)
1671 / (16. * sin2tW)) * ps*ps * (2. + mr1);
1684 void ResonanceGraviton::initConstants() {
1688 eDsmbulk = settingsPtr->flag(
"ExtraDimensionsG*:SMinBulk");
1690 if (eDsmbulk) eDvlvl = settingsPtr->flag(
"ExtraDimensionsG*:VLVL");
1691 kappaMG = settingsPtr->parm(
"ExtraDimensionsG*:kappaMG");
1692 for (
int i = 0; i < 27; ++i) eDcoupling[i] = 0.;
1693 double tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gqq");
1694 for (
int i = 1; i <= 4; ++i) eDcoupling[i] = tmp_coup;
1695 eDcoupling[5] = settingsPtr->parm(
"ExtraDimensionsG*:Gbb");
1696 eDcoupling[6] = settingsPtr->parm(
"ExtraDimensionsG*:Gtt");
1697 tmp_coup = settingsPtr->parm(
"ExtraDimensionsG*:Gll");
1698 for (
int i = 11; i <= 16; ++i) eDcoupling[i] = tmp_coup;
1699 eDcoupling[21] = settingsPtr->parm(
"ExtraDimensionsG*:Ggg");
1700 eDcoupling[22] = settingsPtr->parm(
"ExtraDimensionsG*:Ggmgm");
1701 eDcoupling[23] = settingsPtr->parm(
"ExtraDimensionsG*:GZZ");
1702 eDcoupling[24] = settingsPtr->parm(
"ExtraDimensionsG*:GWW");
1703 eDcoupling[25] = settingsPtr->parm(
"ExtraDimensionsG*:Ghh");
1711 void ResonanceGraviton::calcPreFac(
bool) {
1714 alpS = couplingsPtr->alphaS(mHat * mHat);
1715 colQ = 3. * (1. + alpS / M_PI);
1716 preFac = mHat / M_PI;
1724 void ResonanceGraviton::calcWidth(
bool) {
1727 if (ps == 0.)
return;
1731 widNow = preFac * pow3(ps) * (1. + 8. * mr1 / 3.) / 320.;
1732 if (id1Abs < 9) widNow *= colQ;
1735 }
else if (id1Abs == 21) {
1736 widNow = preFac / 20.;
1737 }
else if (id1Abs == 22) {
1738 widNow = preFac / 160.;
1741 }
else if (id1Abs == 23 || id1Abs == 24) {
1744 widNow = preFac * pow(ps,5) / 480.;
1747 widNow = preFac * ps * (13. / 12. + 14. * mr1 / 3. + 4. * mr1 * mr1)
1750 if (id1Abs == 23) widNow *= 0.5;
1753 }
else if (id1Abs == 25) {
1754 widNow = preFac * pow(ps,5) / 960.;
1758 if (eDsmbulk) widNow *= 2. * pow2(eDcoupling[min( id1Abs, 26)] * mHat);
1759 else widNow *= pow2(kappaMG);
1772 void ResonanceKKgluon::initConstants() {
1775 for (
int i = 0; i < 10; ++i) { eDgv[i] = 0.; eDga[i] = 0.; }
1776 double tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgqL");
1777 double tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgqR");
1778 for (
int i = 1; i <= 4; ++i) {
1779 eDgv[i] = 0.5 * (tmp_gL + tmp_gR);
1780 eDga[i] = 0.5 * (tmp_gL - tmp_gR);
1782 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgbL");
1783 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgbR");
1784 eDgv[5] = 0.5 * (tmp_gL + tmp_gR); eDga[5] = 0.5 * (tmp_gL - tmp_gR);
1785 tmp_gL = settingsPtr->parm(
"ExtraDimensionsG*:KKgtL");
1786 tmp_gR = settingsPtr->parm(
"ExtraDimensionsG*:KKgtR");
1787 eDgv[6] = 0.5 * (tmp_gL + tmp_gR); eDga[6] = 0.5 * (tmp_gL - tmp_gR);
1788 interfMode = settingsPtr->mode(
"ExtraDimensionsG*:KKintMode");
1796 void ResonanceKKgluon::calcPreFac(
bool calledFromInit) {
1799 alpS = couplingsPtr->alphaS(mHat * mHat);
1800 preFac = alpS * mHat / 6;
1803 if (!calledFromInit) {
1805 int idInFlavAbs = abs(idInFlav);
1806 double sH = mHat * mHat;
1808 normInt = 2. * eDgv[min(idInFlavAbs, 9)] * sH * (sH - m2Res)
1809 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1810 normKK = ( pow2(eDgv[min(idInFlavAbs, 9)])
1811 + pow2(eDga[min(idInFlavAbs, 9)]) ) * sH * sH
1812 / ( pow2(sH - m2Res) + pow2(sH * GamMRat) );
1815 if (interfMode == 1) {normInt = 0.; normKK = 0.;}
1816 if (interfMode == 2) {normSM = 0.; normInt = 0.; normKK = 1.;}
1825 void ResonanceKKgluon::calcWidth(
bool calledFromInit) {
1828 if (ps == 0.)
return;
1831 if (id1Abs > 9)
return;
1833 if (calledFromInit) {
1834 widNow = preFac * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1835 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1838 widNow = normSM * ps * (1. + 2. * mr1)
1839 + normInt * ps * eDgv[min(id1Abs, 9)] * (1. + 2. * mr1)
1840 + normKK * ps * (pow2(eDgv[min(id1Abs, 9)]) * (1. + 2.*mr1)
1841 + pow2(eDga[min(id1Abs, 9)]) * (1. - 4.*mr1) );
1856 void ResonanceLeptoquark::initConstants() {
1859 kCoup = settingsPtr->parm(
"LeptoQuark:kCoup");
1862 int id1Now = particlePtr->channel(0).product(0);
1863 int id2Now = particlePtr->channel(0).product(1);
1864 if (id1Now < 1 || id1Now > 5) {
1865 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1866 " unallowed input quark flavour reset to u");
1868 particlePtr->channel(0).product(0, id1Now);
1870 if (abs(id2Now) < 11 || abs(id2Now) > 16) {
1871 infoPtr->errorMsg(
"Error in ResonanceLeptoquark::init:"
1872 " unallowed input lepton flavour reset to e-");
1874 particlePtr->channel(0).product(1, id2Now);
1878 bool changed = particlePtr->hasChanged();
1879 int chargeLQ = particleDataPtr->chargeType(id1Now)
1880 + particleDataPtr->chargeType(id2Now);
1881 particlePtr->setChargeType(chargeLQ);
1882 string nameLQ =
"LQ_" + particleDataPtr->name(id1Now) +
","
1883 + particleDataPtr->name(id2Now);
1884 particlePtr->setNames(nameLQ, nameLQ +
"bar");
1885 if (!changed) particlePtr->setHasChanged(
false);
1893 void ResonanceLeptoquark::calcPreFac(
bool) {
1896 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1897 preFac = 0.25 * alpEM * kCoup * mHat;
1905 void ResonanceLeptoquark::calcWidth(
bool) {
1908 if (ps == 0.)
return;
1911 if (id1Abs > 10 && id1Abs < 17 && id2Abs < 7) widNow = preFac * pow3(ps);
1924 void ResonanceNuRight::initConstants() {
1927 thetaWRat = 1. / (768. * M_PI * pow2(couplingsPtr->sin2thetaW()));
1928 mWR = particleDataPtr->m0(9900024);
1936 void ResonanceNuRight::calcPreFac(
bool) {
1939 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1940 alpS = couplingsPtr->alphaS(mHat * mHat);
1941 colQ = 3. * (1. + alpS / M_PI);
1942 preFac = pow2(alpEM) * thetaWRat * pow5(mHat) / pow4(max(mHat, mWR));
1950 void ResonanceNuRight::calcWidth(
bool) {
1953 if (mHat < mf1 + mf2 + mf3 + MASSMARGIN)
return;
1956 widNow = (id2Abs < 9 && id3Abs < 9)
1957 ? preFac * colQ * couplingsPtr->V2CKMid(id2, id3) : preFac;
1960 double x = (mf1 + mf2 + mf3) / mHat;
1962 double fx = 1. - 8. * x2 + 8. * pow3(x2) - pow4(x2)
1963 - 24. * pow2(x2) * log(x);
1964 double y = min( 0.999, pow2(mHat / mWR) );
1965 double fy = ( 12. * (1. - y) * log(1. - y) + 12. * y - 6. * y*y
1966 - 2.* pow3(y) ) / pow4(y);
1980 void ResonanceZRight::initConstants() {
1983 sin2tW = couplingsPtr->sin2thetaW();
1984 thetaWRat = 1. / (48. * sin2tW * (1. - sin2tW) * (1. - 2. * sin2tW) );
1992 void ResonanceZRight::calcPreFac(
bool) {
1995 alpEM = couplingsPtr->alphaEM(mHat * mHat);
1996 alpS = couplingsPtr->alphaS(mHat * mHat);
1997 colQ = 3. * (1. + alpS / M_PI);
1998 preFac = alpEM * thetaWRat * mHat;
2006 void ResonanceZRight::calcWidth(
bool) {
2009 if (ps == 0.)
return;
2015 if (id1Abs < 9 && id1Abs%2 == 1) {
2016 af = -1. + 2. * sin2tW;
2017 vf = -1. + 4. * sin2tW / 3.;
2018 }
else if (id1Abs < 9) {
2019 af = 1. - 2. * sin2tW;
2020 vf = 1. - 8. * sin2tW / 3.;
2021 }
else if (id1Abs < 19 && id1Abs%2 == 1) {
2022 af = -1. + 2. * sin2tW;
2023 vf = -1. + 4. * sin2tW;
2026 }
else if (id1Abs < 19) {
2031 af = 2. * (1. - sin2tW);
2037 widNow = preFac * (vf*vf * (1. + 2. * mr1) + af*af * ps*ps) * ps
2039 if (id1Abs < 9) widNow *= colQ;
2052 void ResonanceWRight::initConstants() {
2055 thetaWRat = 1. / (12. * couplingsPtr->sin2thetaW());
2063 void ResonanceWRight::calcPreFac(
bool) {
2066 alpEM = couplingsPtr->alphaEM(mHat * mHat);
2067 alpS = couplingsPtr->alphaS(mHat * mHat);
2068 colQ = 3. * (1. + alpS / M_PI);
2069 preFac = alpEM * thetaWRat * mHat;
2077 void ResonanceWRight::calcWidth(
bool) {
2080 if (ps == 0.)
return;
2083 widNow = preFac * (1. - 0.5 * (mr1 + mr2) - 0.5 * pow2(mr1 - mr2))
2085 if (id1Abs < 9) widNow *= colQ * couplingsPtr->V2CKMid(id1Abs, id2Abs);
2098 void ResonanceHchgchgLeft::initConstants() {
2101 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2102 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2103 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2104 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2105 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2106 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2109 gL = settingsPtr->parm(
"LeftRightSymmmetry:gL");
2110 vL = settingsPtr->parm(
"LeftRightSymmmetry:vL");
2111 mW = particleDataPtr->m0(24);
2119 void ResonanceHchgchgLeft::calcPreFac(
bool) {
2122 preFac = mHat / (8. * M_PI);
2130 void ResonanceHchgchgLeft::calcWidth(
bool) {
2133 if (ps == 0.)
return;
2136 if (id1Abs < 17 && id2Abs < 17) {
2137 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2138 if (id2Abs != id1Abs) widNow *= 2.;
2142 else if (id1Abs == 24 && id2Abs == 24)
2143 widNow = preFac * 0.5 * pow2(gL*gL * vL / mW)
2144 * (3. * mr1 + 0.25 / mr1 - 1.) * ps;
2157 void ResonanceHchgchgRight::initConstants() {
2160 yukawa[1][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHee");
2161 yukawa[2][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmue");
2162 yukawa[2][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHmumu");
2163 yukawa[3][1] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaue");
2164 yukawa[3][2] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtaumu");
2165 yukawa[3][3] = settingsPtr->parm(
"LeftRightSymmmetry:coupHtautau");
2169 gR = settingsPtr->parm(
"LeftRightSymmmetry:gR");
2177 void ResonanceHchgchgRight::calcPreFac(
bool) {
2180 preFac = mHat / (8. * M_PI);
2188 void ResonanceHchgchgRight::calcWidth(
bool) {
2191 if (ps == 0.)
return;
2194 if (id1Abs < 17 && id2Abs < 17) {
2195 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;
2196 if (id2Abs != id1Abs) widNow *= 2.;
2200 else if (id1Abs == idWR && id2Abs == idWR)
2201 widNow = preFac * pow2(yukawa[(id1Abs-9)/2][(id2Abs-9)/2]) * ps;