1 // ResonanceWidths.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2008 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;
31 //**************************************************************************
33 // The ResonanceWidths is the base class. Also used for generic resonaces.
35 class ResonanceWidths {
40 virtual ~ResonanceWidths() {}
42 // Initialize static data members in base class.
43 static void initStatic(Info* infoPtrIn);
45 // Set up standard properties.
46 bool initBasic(int idResIn);
48 // Calculate and store partial and total widths at the nominal mass.
51 // Return identity of particle species.
52 int id() const {return idRes;}
54 // Calculate the total/open width for given mass, charge and instate.
55 double width(int idSgn, double mHatIn, int idInFlavIn = 0,
56 bool openOnly = false, bool setBR = false, int idOutFlav1 = 0,
59 // Special case to calculate open final-state width.
60 double widthOpen(int idSgn, double mHatIn, int idIn = 0) {
61 return width( idSgn, mHatIn, idIn, true, false);}
63 // Special case to store open final-state widths for channel selection.
64 double widthStore(int idSgn, double mHatIn, int idIn = 0) {
65 return width( idSgn, mHatIn, idIn, true, true);}
67 // Return fraction of width open for particle and antiparticle.
68 double openFrac(int idSgn) {return (idSgn > 0) ? openPos : openNeg;}
70 // Return forced rescaling factor of resonance width.
71 double widthRescaleFactor() {return forceFactor;}
73 // Special case to calculate one final-state width.
74 // Currently only used for Higgs -> qqbar, g g or gamma gamma.
75 double widthChan(double mHatIn, int idOutFlav1, int idOutFlav2) {
76 return width( 1, mHatIn, 0, false, false, idOutFlav1, idOutFlav2);}
83 // Static initialization data, normally only set once.
84 static int alphaSorder, alphaEMorder;
85 static double alphaSvalue, minWidth, minThreshold;
87 // Static alphaStrong and alphaElectromagnetic calculation.
88 static AlphaStrong alphaS;
89 static AlphaEM alphaEM;
91 // Constants: could only be changed in the code itself.
92 static const int NPOINT;
93 static const double MASSMARGIN;
95 // Pointer to various information on the generation.
98 // Pointer to properties of the particle species.
99 ParticleDataEntry* particlePtr;
101 // Particle properties always locally present.
102 int idRes, hasAntiRes;
104 double mRes, GammaRes, m2Res, GamMRat, openPos, openNeg, forceFactor;
106 // Properties for currently studied decay channel(s).
107 int iChannel, onMode, meMode, mult, id1, id2, id3, id1Abs,
108 id2Abs, id3Abs, idInFlav;
109 double widNow, mHat, mf1, mf2, mf3, mr1, mr2, mr3, ps, kinFac,
110 alpEM, alpS, colQ, preFac;
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);}
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.
457 // Initialize constants.
458 virtual void initConstants();
460 // Calculate various common prefactors for the current mass.
461 virtual void calcPreFac(bool = false);
463 // Caclulate width for currently considered channel.
464 virtual void calcWidth(bool = false);
468 //**************************************************************************
470 // The ResonanceLeptoquark class handles the LQ/LQbar resonance.
472 class ResonanceLeptoquark : public ResonanceWidths {
477 ResonanceLeptoquark(int idResIn) {initBasic(idResIn);}
481 // Locally stored properties and couplings.
484 // Initialize constants.
485 virtual void initConstants();
487 // Calculate various common prefactors for the current mass.
488 virtual void calcPreFac(bool = false);
490 // Caclulate width for currently considered channel.
491 virtual void calcWidth(bool = false);
495 //**************************************************************************
497 // The ResonanceNuRight class handles righthanded Majorana neutrinos.
499 class ResonanceNuRight : public ResonanceWidths {
504 ResonanceNuRight(int idResIn) {initBasic(idResIn);}
508 // Locally stored properties and couplings.
509 double thetaWRat, mWR;
511 // Initialize constants.
512 virtual void initConstants();
514 // Calculate various common prefactors for the current mass.
515 virtual void calcPreFac(bool = false);
517 // Caclulate width for currently considered channel.
518 virtual void calcWidth(bool = false);
522 //**************************************************************************
524 // The ResonanceZRight class handles the Z_R^0 resonance.
526 class ResonanceZRight : public ResonanceWidths {
531 ResonanceZRight(int idResIn) {initBasic(idResIn);}
535 // Locally stored properties and couplings.
536 double sin2tW, thetaWRat;
538 // Initialize constants.
539 virtual void initConstants();
541 // Calculate various common prefactors for the current mass.
542 virtual void calcPreFac(bool = false);
544 // Caclulate width for currently considered channel.
545 virtual void calcWidth(bool = false);
549 //**************************************************************************
551 // The ResonanceWRight class handles the W_R+- resonance.
553 class ResonanceWRight : public ResonanceWidths {
558 ResonanceWRight(int idResIn) {initBasic(idResIn);}
562 // Locally stored properties and couplings.
565 // Initialize constants.
566 virtual void initConstants();
568 // Calculate various common prefactors for the current mass.
569 virtual void calcPreFac(bool = false);
571 // Caclulate width for currently considered channel.
572 virtual void calcWidth(bool = false);
576 //**************************************************************************
578 // The ResonanceHchgchgLeft class handles the H++/H-- (left) resonance.
580 class ResonanceHchgchgLeft : public ResonanceWidths {
585 ResonanceHchgchgLeft(int idResIn) {initBasic(idResIn);}
589 // Locally stored properties and couplings.
590 double yukawa[4][4], gL, vL, mW;
592 // Initialize constants.
593 virtual void initConstants();
595 // Calculate various common prefactors for the current mass.
596 virtual void calcPreFac(bool = false);
598 // Caclulate width for currently considered channel.
599 virtual void calcWidth(bool = false);
603 //**************************************************************************
605 // The ResonanceHchgchgRight class handles the H++/H-- (right) resonance.
607 class ResonanceHchgchgRight : public ResonanceWidths {
612 ResonanceHchgchgRight(int idResIn) {initBasic(idResIn);}
616 // Locally stored properties and couplings.
618 double yukawa[4][4], gR;
620 // Initialize constants.
621 virtual void initConstants();
623 // Calculate various common prefactors for the current mass.
624 virtual void calcPreFac(bool = false);
626 // Caclulate width for currently considered channel.
627 virtual void calcWidth(bool = false);
631 //**************************************************************************
633 } // end namespace Pythia8
635 #endif // Pythia8_ResonanceWidths_H