10 #ifndef Pythia8_ResonanceWidths_H
11 #define Pythia8_ResonanceWidths_H
13 #include "Pythia8/Basics.h"
14 #include "Pythia8/Info.h"
15 #include "Pythia8/PythiaStdlib.h"
16 #include "Pythia8/Settings.h"
17 #include "Pythia8/StandardModel.h"
26 class ParticleDataEntry;
33 class ResonanceWidths {
38 virtual ~ResonanceWidths() {}
41 void initBasic(
int idResIn,
bool isGenericIn =
false) {
42 idRes = idResIn; isGeneric = isGenericIn;}
45 virtual bool init(Info* infoPtrIn, Settings* settingsPtrIn,
46 ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn);
49 int id()
const {
return idRes;}
52 double width(
int idSgn,
double mHatIn,
int idInFlavIn = 0,
53 bool openOnly =
false,
bool setBR =
false,
int idOutFlav1 = 0,
57 double widthOpen(
int idSgn,
double mHatIn,
int idIn = 0) {
58 return width( idSgn, mHatIn, idIn,
true,
false);}
61 double widthStore(
int idSgn,
double mHatIn,
int idIn = 0) {
62 return width( idSgn, mHatIn, idIn,
true,
true);}
65 double openFrac(
int idSgn) {
return (idSgn > 0) ? openPos : openNeg;}
68 double widthRescaleFactor() {
return forceFactor;}
72 double widthChan(
double mHatIn,
int idOutFlav1,
int idOutFlav2) {
73 return width( 1, mHatIn, 0,
false,
false, idOutFlav1, idOutFlav2);}
81 static const int NPOINT;
82 static const double MASSMIN, MASSMARGIN;
85 int idRes, hasAntiRes;
86 bool doForceWidth, isGeneric, allowCalcWidth;
87 double minWidth, minThreshold, mRes, GammaRes, m2Res, GamMRat,
88 openPos, openNeg, forceFactor;
91 int iChannel, onMode, meMode, mult, id1, id2, id3, id1Abs,
92 id2Abs, id3Abs, idInFlav;
93 double widNow, mHat, mf1, mf2, mf3, mr1, mr2, mr3, ps, kinFac,
94 alpEM, alpS, colQ, preFac;
97 ParticleDataEntry* particlePtr;
103 Settings* settingsPtr;
106 ParticleData* particleDataPtr;
109 Couplings* couplingsPtr;
112 virtual void initConstants() {}
116 virtual bool initBSM() {
return true;}
117 virtual bool allowCalc() {
return true;}
121 virtual void calcPreFac(
bool =
false) {}
125 virtual void calcWidth(
bool =
false) {}
128 double numInt1BW(
double mHatIn,
double m1,
double Gamma1,
double mMin1,
129 double m2,
int psMode = 1);
130 double numInt2BW(
double mHatIn,
double m1,
double Gamma1,
double mMin1,
131 double m2,
double Gamma2,
double mMin2,
int psMode = 1);
141 class ResonanceGeneric :
public ResonanceWidths {
146 ResonanceGeneric(
int idResIn) {initBasic(idResIn,
true);}
149 virtual bool allowCalc() {
return false;}
157 class ResonanceGmZ :
public ResonanceWidths {
162 ResonanceGmZ(
int idResIn) {initBasic(idResIn);}
168 double thetaWRat, ei2, eivi, vi2ai2, gamNorm, intNorm, resNorm;
171 virtual void initConstants();
174 virtual void calcPreFac(
bool =
false);
177 virtual void calcWidth(
bool calledFromInit =
false);
185 class ResonanceW :
public ResonanceWidths {
190 ResonanceW(
int idResIn) {initBasic(idResIn);}
195 double thetaWRat, alpEM;
198 virtual void initConstants();
201 virtual void calcPreFac(
bool =
false);
204 virtual void calcWidth(
bool =
false);
212 class ResonanceTop :
public ResonanceWidths {
217 ResonanceTop(
int idResIn) {initBasic(idResIn);}
222 double thetaWRat, m2W, tanBeta, tan2Beta, mbRun;
225 virtual void initConstants();
228 virtual void calcPreFac(
bool =
false);
231 virtual void calcWidth(
bool =
false);
239 class ResonanceFour :
public ResonanceWidths {
244 ResonanceFour(
int idResIn) {initBasic(idResIn);}
249 double thetaWRat, m2W;
252 virtual void initConstants();
255 virtual void calcPreFac(
bool =
false);
258 virtual void calcWidth(
bool =
false);
267 class ResonanceH :
public ResonanceWidths {
272 ResonanceH(
int higgsTypeIn,
int idResIn) : higgsType(higgsTypeIn)
273 {initBasic(idResIn);}
278 static const double MASSMINWZ, MASSMINT, GAMMAMARGIN;
284 bool useCubicWidth, useRunLoopMass, useNLOWidths;
285 double sin2tW, cos2tW, mT, mZ, mW, mHchg, GammaT, GammaZ, GammaW,
286 rescAlpS, rescColQ, coup2d, coup2u, coup2l, coup2Z, coup2W,
287 coup2Hchg, coup2H1H1, coup2A3A3, coup2H1Z, coup2A3Z, coup2A3H1,
288 coup2HchgW, mLowT, mStepT, mLowZ, mStepZ, mLowW, mStepW,
289 kinFacT[101], kinFacZ[101], kinFacW[101];
292 virtual void initConstants();
295 virtual void calcPreFac(
bool =
false);
298 virtual void calcWidth(
bool =
false);
315 class ResonanceHchg :
public ResonanceWidths {
320 ResonanceHchg(
int idResIn) {initBasic(idResIn);}
326 double thetaWRat, mW, tanBeta, tan2Beta, coup2H1W;
329 virtual void initConstants();
332 virtual void calcPreFac(
bool =
false);
335 virtual void calcWidth(
bool =
false);
343 class ResonanceZprime :
public ResonanceWidths {
348 ResonanceZprime(
int idResIn) {initBasic(idResIn);}
353 int gmZmode, maxZpGen;
354 double sin2tW, cos2tW, thetaWRat, mZ, GammaZ, m2Z, GamMRatZ, afZp[20],
355 vfZp[20], coupZpWW, ei2, eivi, vai2, eivpi, vaivapi, vapi2,
356 gamNorm, gamZNorm, ZNorm, gamZpNorm, ZZpNorm, ZpNorm;
359 virtual void initConstants();
362 virtual void calcPreFac(
bool =
false);
365 virtual void calcWidth(
bool calledFromInit =
false);
373 class ResonanceWprime :
public ResonanceWidths {
378 ResonanceWprime(
int idResIn) {initBasic(idResIn);}
383 double thetaWRat, cos2tW, alpEM, aqWp, vqWp, alWp, vlWp, coupWpWZ;
386 virtual void initConstants();
389 virtual void calcPreFac(
bool =
false);
392 virtual void calcWidth(
bool =
false);
400 class ResonanceRhorizontal :
public ResonanceWidths {
405 ResonanceRhorizontal(
int idResIn) {initBasic(idResIn);}
413 virtual void initConstants();
416 virtual void calcPreFac(
bool =
false);
419 virtual void calcWidth(
bool =
false);
427 class ResonanceExcited :
public ResonanceWidths {
432 ResonanceExcited(
int idResIn) {initBasic(idResIn);}
437 double Lambda, coupF, coupFprime, coupFcol, contactDec, sin2tW, cos2tW;
440 virtual void initConstants();
443 virtual void calcPreFac(
bool =
false);
446 virtual void calcWidth(
bool =
false);
454 class ResonanceGraviton :
public ResonanceWidths {
459 ResonanceGraviton(
int idResIn) {initBasic(idResIn);}
464 bool eDsmbulk, eDvlvl;
468 double eDcoupling[27];
471 virtual void initConstants();
474 virtual void calcPreFac(
bool =
false);
477 virtual void calcWidth(
bool =
false);
485 class ResonanceKKgluon :
public ResonanceWidths {
490 ResonanceKKgluon(
int idResIn) {initBasic(idResIn);}
495 double normSM, normInt, normKK;
500 double eDgv[10], eDga[10];
506 virtual void initConstants();
509 virtual void calcPreFac(
bool calledFromInit =
false);
512 virtual void calcWidth(
bool calledFromInit =
false);
520 class ResonanceLeptoquark :
public ResonanceWidths {
525 ResonanceLeptoquark(
int idResIn) {initBasic(idResIn);}
533 virtual void initConstants();
536 virtual void calcPreFac(
bool =
false);
539 virtual void calcWidth(
bool =
false);
547 class ResonanceNuRight :
public ResonanceWidths {
552 ResonanceNuRight(
int idResIn) {initBasic(idResIn);}
557 double thetaWRat, mWR;
560 virtual void initConstants();
563 virtual void calcPreFac(
bool =
false);
566 virtual void calcWidth(
bool =
false);
574 class ResonanceZRight :
public ResonanceWidths {
579 ResonanceZRight(
int idResIn) {initBasic(idResIn);}
584 double sin2tW, thetaWRat;
587 virtual void initConstants();
590 virtual void calcPreFac(
bool =
false);
593 virtual void calcWidth(
bool =
false);
601 class ResonanceWRight :
public ResonanceWidths {
606 ResonanceWRight(
int idResIn) {initBasic(idResIn);}
614 virtual void initConstants();
617 virtual void calcPreFac(
bool =
false);
620 virtual void calcWidth(
bool =
false);
628 class ResonanceHchgchgLeft :
public ResonanceWidths {
633 ResonanceHchgchgLeft(
int idResIn) {initBasic(idResIn);}
638 double yukawa[4][4], gL, vL, mW;
641 virtual void initConstants();
644 virtual void calcPreFac(
bool =
false);
647 virtual void calcWidth(
bool =
false);
655 class ResonanceHchgchgRight :
public ResonanceWidths {
660 ResonanceHchgchgRight(
int idResIn) {initBasic(idResIn);}
666 double yukawa[4][4], gR;
669 virtual void initConstants();
672 virtual void calcPreFac(
bool =
false);
675 virtual void calcWidth(
bool =
false);
683 #endif // Pythia8_ResonanceWidths_H