1 // ResonanceWidths.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2010 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
6 // Header file for resonance properties: dynamical widths etc.
7 // ResonanceWidths: base class for all resonances.
8 // ResonanceGmZ, ...: derived classes for individual resonances.
10 #ifndef Pythia8_ResonanceWidths_H
11 #define Pythia8_ResonanceWidths_H
15 #include "ParticleData.h"
16 #include "PythiaStdlib.h"
18 #include "StandardModel.h"
22 //==========================================================================
24 // Forward references to ParticleData and StandardModel classes.
27 class ParticleDataEntry;
30 //==========================================================================
32 // The ResonanceWidths is the base class. Also used for generic resonaces.
34 class ResonanceWidths {
39 virtual ~ResonanceWidths() {}
41 // Set up standard properties.
42 void initBasic(int idResIn, bool isGenericIn = false) {
43 idRes = idResIn; isGeneric = isGenericIn;}
45 // Calculate and store partial and total widths at the nominal mass.
46 bool init(Info* infoPtrIn, Settings* settingsPtrIn,
47 ParticleData* particleDataPtrIn, CoupSM* coupSMPtrIn);
49 // Return identity of particle species.
50 int id() const {return idRes;}
52 // Calculate the total/open width for given mass, charge and instate.
53 double width(int idSgn, double mHatIn, int idInFlavIn = 0,
54 bool openOnly = false, bool setBR = false, int idOutFlav1 = 0,
57 // Special case to calculate open final-state width.
58 double widthOpen(int idSgn, double mHatIn, int idIn = 0) {
59 return width( idSgn, mHatIn, idIn, true, false);}
61 // Special case to store open final-state widths for channel selection.
62 double widthStore(int idSgn, double mHatIn, int idIn = 0) {
63 return width( idSgn, mHatIn, idIn, true, true);}
65 // Return fraction of width open for particle and antiparticle.
66 double openFrac(int idSgn) {return (idSgn > 0) ? openPos : openNeg;}
68 // Return forced rescaling factor of resonance width.
69 double widthRescaleFactor() {return forceFactor;}
71 // Special case to calculate one final-state width.
72 // Currently only used for Higgs -> qqbar, g g or gamma gamma.
73 double widthChan(double mHatIn, int idOutFlav1, int idOutFlav2) {
74 return width( 1, mHatIn, 0, false, false, idOutFlav1, idOutFlav2);}
81 // Constants: could only be changed in the code itself.
82 static const int NPOINT;
83 static const double MASSMARGIN;
85 // Particle properties always present.
86 int idRes, hasAntiRes;
87 bool doForceWidth, isGeneric;
88 double minWidth, minThreshold, mRes, GammaRes, m2Res, GamMRat,
89 openPos, openNeg, forceFactor;
91 // Properties for currently studied decay channel(s).
92 int iChannel, onMode, meMode, mult, id1, id2, id3, id1Abs,
93 id2Abs, id3Abs, idInFlav;
94 double widNow, mHat, mf1, mf2, mf3, mr1, mr2, mr3, ps, kinFac,
95 alpEM, alpS, colQ, preFac;
97 // Pointer to properties of the particle species.
98 ParticleDataEntry* particlePtr;
100 // Pointer to various information on the generation.
103 // Pointer to the settings database.
104 Settings* settingsPtr;
106 // Pointer to the particle data table.
107 ParticleData* particleDataPtr;
109 // Pointer to Standard Model couplings.
112 // Initialize constants.
113 virtual void initConstants() {}
115 // Calculate various common prefactors for the current mass.
116 // Optional argument calledFromInit only used for Z0.
117 virtual void calcPreFac(bool = false) {}
119 // Calculate width for currently considered channel.
120 // Optional argument calledFromInit only used for Z0.
121 virtual void calcWidth(bool = false) {}
123 // Simple routines for matrix-element integration over Breit-Wigners.
124 double numInt1BW(double mHatIn, double m1, double Gamma1, double mMin1,
125 double m2, int psMode = 1);
126 double numInt2BW(double mHatIn, double m1, double Gamma1, double mMin1,
127 double m2, double Gamma2, double mMin2, int psMode = 1);
131 //==========================================================================
133 // The ResonanceGeneric class handles a generic resonance.
134 // Only needs a constructor; for the rest uses defaults in base class.
136 class ResonanceGeneric : public ResonanceWidths {
141 ResonanceGeneric(int idResIn) {initBasic(idResIn, true);}
145 //==========================================================================
147 // The ResonanceGmZ class handles the gamma*/Z0 resonance.
149 class ResonanceGmZ : public ResonanceWidths {
154 ResonanceGmZ(int idResIn) {initBasic(idResIn);}
158 // Locally stored properties and couplings.
160 double thetaWRat, ei2, eivi, vi2ai2, gamNorm, intNorm, resNorm;
162 // Initialize constants.
163 virtual void initConstants();
165 // Calculate various common prefactors for the current mass.
166 virtual void calcPreFac(bool = false);
168 // Caclulate width for currently considered channel.
169 virtual void calcWidth(bool calledFromInit = false);
173 //==========================================================================
175 // The ResonanceW class handles the W+- resonance.
177 class ResonanceW : public ResonanceWidths {
182 ResonanceW(int idResIn) {initBasic(idResIn);}
186 // Locally stored properties and couplings.
187 double thetaWRat, alpEM;
189 // Initialize constants.
190 virtual void initConstants();
192 // Calculate various common prefactors for the current mass.
193 virtual void calcPreFac(bool = false);
195 // Caclulate width for currently considered channel.
196 virtual void calcWidth(bool = false);
200 //==========================================================================
202 // The ResonanceTop class handles the top/antitop resonance.
204 class ResonanceTop : public ResonanceWidths {
209 ResonanceTop(int idResIn) {initBasic(idResIn);}
213 // Locally stored properties and couplings.
214 double thetaWRat, m2W;
216 // Initialize constants.
217 virtual void initConstants();
219 // Calculate various common prefactors for the current mass.
220 virtual void calcPreFac(bool = false);
222 // Caclulate width for currently considered channel.
223 virtual void calcWidth(bool = false);
227 //==========================================================================
229 // The ResonanceFour class handles fourth-generation resonances.
231 class ResonanceFour : public ResonanceWidths {
236 ResonanceFour(int idResIn) {initBasic(idResIn);}
240 // Locally stored properties and couplings.
241 double thetaWRat, m2W;
243 // Initialize constants.
244 virtual void initConstants();
246 // Calculate various common prefactors for the current mass.
247 virtual void calcPreFac(bool = false);
249 // Caclulate width for currently considered channel.
250 virtual void calcWidth(bool = false);
254 //==========================================================================
256 // The ResonanceH class handles the SM and BSM Higgs resonance.
257 // higgsType = 0 : SM H; = 1: h^0/H_1; = 2 : H^0/H_2; = 3 : A^0/A_3.
259 class ResonanceH : public ResonanceWidths {
264 ResonanceH(int higgsTypeIn, int idResIn) : higgsType(higgsTypeIn)
265 {initBasic(idResIn);}
269 // Constants: could only be changed in the code itself.
270 static const double MASSMIN, GAMMAMARGIN;
272 // Higgs type in current instance.
275 // Locally stored properties and couplings.
276 bool useCubicWidth, useRunLoopMass;
277 double sin2tW, cos2tW, mT, mZ, mW, mHchg, GammaT, GammaZ, GammaW,
278 coup2d, coup2u, coup2l, coup2Z, coup2W, coup2Hchg, coup2H1H1,
279 coup2A3A3, coup2H1Z, coup2A3Z, coup2A3H1, coup2HchgW,
280 kinFacT[101], kinFacZ[101], kinFacW[101];
282 // Initialize constants.
283 virtual void initConstants();
285 // Calculate various common prefactors for the current mass.
286 virtual void calcPreFac(bool = false);
288 // Caclulate width for currently considered channel.
289 virtual void calcWidth(bool = false);
291 // Sum up loop contributions in Higgs -> g + g.
294 // Sum up loop contributions in Higgs -> gamma + gamma.
297 // Sum up loop contributions in Higgs -> gamma + Z0.
302 //==========================================================================
304 // The ResonanceHchg class handles the H+- resonance.
306 class ResonanceHchg : public ResonanceWidths {
311 ResonanceHchg(int idResIn) {initBasic(idResIn);}
315 // Locally stored properties and couplings.
317 double thetaWRat, mW, tanBeta, tan2Beta, coup2H1W;
319 // Initialize constants.
320 virtual void initConstants();
322 // Calculate various common prefactors for the current mass.
323 virtual void calcPreFac(bool = false);
325 // Caclulate width for currently considered channel.
326 virtual void calcWidth(bool = false);
330 //==========================================================================
332 // The ResonanceZprime class handles the gamma*/Z0 /Z'^0 resonance.
334 class ResonanceZprime : public ResonanceWidths {
339 ResonanceZprime(int idResIn) {initBasic(idResIn);}
343 // Locally stored properties and couplings.
345 double sin2tW, cos2tW, thetaWRat, mZ, GammaZ, m2Z, GamMRatZ, afZp[20],
346 vfZp[20], coupZpWW, ei2, eivi, vai2, eivpi, vaivapi, vapi2,
347 gamNorm, gamZNorm, ZNorm, gamZpNorm, ZZpNorm, ZpNorm;
349 // Initialize constants.
350 virtual void initConstants();
352 // Calculate various common prefactors for the current mass.
353 virtual void calcPreFac(bool = false);
355 // Caclulate width for currently considered channel.
356 virtual void calcWidth(bool calledFromInit = false);
360 //==========================================================================
362 // The ResonanceWprime class handles the W'+- resonance.
364 class ResonanceWprime : public ResonanceWidths {
369 ResonanceWprime(int idResIn) {initBasic(idResIn);}
373 // Locally stored properties and couplings.
374 double thetaWRat, cos2tW, alpEM, aqWp, vqWp, alWp, vlWp, coupWpWZ;
376 // Initialize constants.
377 virtual void initConstants();
379 // Calculate various common prefactors for the current mass.
380 virtual void calcPreFac(bool = false);
382 // Caclulate width for currently considered channel.
383 virtual void calcWidth(bool = false);
387 //==========================================================================
389 // The ResonanceRhorizontal class handles the R^0 resonance.
391 class ResonanceRhorizontal : public ResonanceWidths {
396 ResonanceRhorizontal(int idResIn) {initBasic(idResIn);}
400 // Locally stored properties and couplings.
403 // Initialize constants.
404 virtual void initConstants();
406 // Calculate various common prefactors for the current mass.
407 virtual void calcPreFac(bool = false);
409 // Caclulate width for currently considered channel.
410 virtual void calcWidth(bool = false);
414 //==========================================================================
416 // The ResonanceExcited class handles excited-fermion resonances.
418 class ResonanceExcited : public ResonanceWidths {
423 ResonanceExcited(int idResIn) {initBasic(idResIn);}
427 // Locally stored properties and couplings.
428 double Lambda, coupF, coupFprime, coupFcol, sin2tW, cos2tW;
430 // Initialize constants.
431 virtual void initConstants();
433 // Calculate various common prefactors for the current mass.
434 virtual void calcPreFac(bool = false);
436 // Caclulate width for currently considered channel.
437 virtual void calcWidth(bool = false);
441 //==========================================================================
443 // The ResonanceGraviton class handles the excited Graviton resonance.
445 class ResonanceGraviton : public ResonanceWidths {
450 ResonanceGraviton(int idResIn) {initBasic(idResIn);}
454 // Locally stored properties and couplings.
458 // Couplings between graviton and SM (map from particle id to coupling).
459 double m_coupling[26];
461 // Initialize constants.
462 virtual void initConstants();
464 // Calculate various common prefactors for the current mass.
465 virtual void calcPreFac(bool = false);
467 // Caclulate width for currently considered channel.
468 virtual void calcWidth(bool = false);
472 //==========================================================================
474 // The ResonanceKKgluon class handles the excited kk-gluon resonance.
476 class ResonanceKKgluon : public ResonanceWidths {
481 ResonanceKKgluon(int idResIn) {initBasic(idResIn);}
485 // Locally stored properties and couplings.
488 // Couplings between KK gluon and SM (map from particle id to coupling).
489 double m_coupling[10];
491 // Initialize constants.
492 virtual void initConstants();
494 // Calculate various common prefactors for the current mass.
495 virtual void calcPreFac(bool = false);
497 // Caclulate width for currently considered channel.
498 virtual void calcWidth(bool = false);
503 //==========================================================================
505 // The ResonanceLeptoquark class handles the LQ/LQbar resonance.
507 class ResonanceLeptoquark : public ResonanceWidths {
512 ResonanceLeptoquark(int idResIn) {initBasic(idResIn);}
516 // Locally stored properties and couplings.
519 // Initialize constants.
520 virtual void initConstants();
522 // Calculate various common prefactors for the current mass.
523 virtual void calcPreFac(bool = false);
525 // Caclulate width for currently considered channel.
526 virtual void calcWidth(bool = false);
530 //==========================================================================
532 // The ResonanceNuRight class handles righthanded Majorana neutrinos.
534 class ResonanceNuRight : public ResonanceWidths {
539 ResonanceNuRight(int idResIn) {initBasic(idResIn);}
543 // Locally stored properties and couplings.
544 double thetaWRat, mWR;
546 // Initialize constants.
547 virtual void initConstants();
549 // Calculate various common prefactors for the current mass.
550 virtual void calcPreFac(bool = false);
552 // Caclulate width for currently considered channel.
553 virtual void calcWidth(bool = false);
557 //==========================================================================
559 // The ResonanceZRight class handles the Z_R^0 resonance.
561 class ResonanceZRight : public ResonanceWidths {
566 ResonanceZRight(int idResIn) {initBasic(idResIn);}
570 // Locally stored properties and couplings.
571 double sin2tW, thetaWRat;
573 // Initialize constants.
574 virtual void initConstants();
576 // Calculate various common prefactors for the current mass.
577 virtual void calcPreFac(bool = false);
579 // Caclulate width for currently considered channel.
580 virtual void calcWidth(bool = false);
584 //==========================================================================
586 // The ResonanceWRight class handles the W_R+- resonance.
588 class ResonanceWRight : public ResonanceWidths {
593 ResonanceWRight(int idResIn) {initBasic(idResIn);}
597 // Locally stored properties and couplings.
600 // Initialize constants.
601 virtual void initConstants();
603 // Calculate various common prefactors for the current mass.
604 virtual void calcPreFac(bool = false);
606 // Caclulate width for currently considered channel.
607 virtual void calcWidth(bool = false);
611 //==========================================================================
613 // The ResonanceHchgchgLeft class handles the H++/H-- (left) resonance.
615 class ResonanceHchgchgLeft : public ResonanceWidths {
620 ResonanceHchgchgLeft(int idResIn) {initBasic(idResIn);}
624 // Locally stored properties and couplings.
625 double yukawa[4][4], gL, vL, mW;
627 // Initialize constants.
628 virtual void initConstants();
630 // Calculate various common prefactors for the current mass.
631 virtual void calcPreFac(bool = false);
633 // Caclulate width for currently considered channel.
634 virtual void calcWidth(bool = false);
638 //==========================================================================
640 // The ResonanceHchgchgRight class handles the H++/H-- (right) resonance.
642 class ResonanceHchgchgRight : public ResonanceWidths {
647 ResonanceHchgchgRight(int idResIn) {initBasic(idResIn);}
651 // Locally stored properties and couplings.
653 double yukawa[4][4], gR;
655 // Initialize constants.
656 virtual void initConstants();
658 // Calculate various common prefactors for the current mass.
659 virtual void calcPreFac(bool = false);
661 // Caclulate width for currently considered channel.
662 virtual void calcWidth(bool = false);
666 //==========================================================================
668 } // end namespace Pythia8
670 #endif // Pythia8_ResonanceWidths_H