]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA8/pythia8140/include/ResonanceWidths.h
Use kPyMbDefault as example.
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8140 / include / ResonanceWidths.h
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.
5
6 // Header file for resonance properties: dynamical widths etc. 
7 // ResonanceWidths: base class for all resonances.
8 // ResonanceGmZ, ...: derived classes for individual resonances.
9
10 #ifndef Pythia8_ResonanceWidths_H
11 #define Pythia8_ResonanceWidths_H
12
13 #include "Basics.h"
14 #include "Info.h"
15 #include "ParticleData.h"
16 #include "PythiaStdlib.h"
17 #include "Settings.h"
18 #include "StandardModel.h"
19
20 namespace Pythia8 {
21
22 //==========================================================================
23
24 // Forward references to ParticleData and StandardModel classes.
25 class DecayChannel;
26 class ParticleData;
27 class ParticleDataEntry;
28 class CoupSM;
29   
30 //==========================================================================
31
32 // The ResonanceWidths is the base class. Also used for generic resonaces.
33
34 class ResonanceWidths {
35
36 public: 
37
38   // Destructor.
39   virtual ~ResonanceWidths() {}
40
41   // Set up standard properties.
42   void initBasic(int idResIn, bool isGenericIn = false) {
43     idRes = idResIn; isGeneric = isGenericIn;}
44  
45   // Calculate and store partial and total widths at the nominal mass. 
46   bool init(Info* infoPtrIn, Settings* settingsPtrIn,
47     ParticleData* particleDataPtrIn, CoupSM* coupSMPtrIn);
48
49   // Return identity of particle species.
50   int id() const {return idRes;}
51  
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, 
55     int idOutFlav2 = 0); 
56
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);}  
60
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);}  
64
65   // Return fraction of width open for particle and antiparticle.
66   double openFrac(int idSgn) {return (idSgn > 0) ? openPos : openNeg;}
67
68   // Return forced rescaling factor of resonance width.
69   double widthRescaleFactor() {return forceFactor;} 
70
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);}  
75
76 protected:
77
78   // Constructor.
79   ResonanceWidths() {}
80
81   // Constants: could only be changed in the code itself.
82   static const int    NPOINT;
83   static const double MASSMARGIN;
84
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;
90
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; 
96
97   // Pointer to properties of the particle species.
98   ParticleDataEntry* particlePtr;
99
100   // Pointer to various information on the generation.
101   Info*         infoPtr;
102
103   // Pointer to the settings database.
104   Settings*     settingsPtr;
105
106   // Pointer to the particle data table.
107   ParticleData* particleDataPtr;
108
109   // Pointer to Standard Model couplings.
110   CoupSM*       coupSMPtr;
111  
112   // Initialize constants.
113   virtual void initConstants() {} 
114  
115   // Calculate various common prefactors for the current mass.
116   // Optional argument calledFromInit only used for Z0.
117   virtual void calcPreFac(bool = false) {}
118
119   // Calculate width for currently considered channel.
120   // Optional argument calledFromInit only used for Z0.
121   virtual void calcWidth(bool = false) {}
122
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);
128
129 };
130   
131 //==========================================================================
132
133 // The ResonanceGeneric class handles a generic resonance.
134 // Only needs a constructor; for the rest uses defaults in base class. 
135
136 class ResonanceGeneric : public ResonanceWidths {
137
138 public:
139
140   // Constructor. 
141   ResonanceGeneric(int idResIn) {initBasic(idResIn, true);} 
142
143 };
144   
145 //==========================================================================
146
147 // The ResonanceGmZ class handles the gamma*/Z0 resonance.
148
149 class ResonanceGmZ : public ResonanceWidths {
150
151 public:
152
153   // Constructor. 
154   ResonanceGmZ(int idResIn) {initBasic(idResIn);} 
155
156 private: 
157
158   // Locally stored properties and couplings.
159   int    gmZmode;
160   double thetaWRat, ei2, eivi, vi2ai2, gamNorm, intNorm, resNorm;
161  
162   // Initialize constants.
163   virtual void initConstants(); 
164  
165   // Calculate various common prefactors for the current mass.
166   virtual void calcPreFac(bool = false);
167
168   // Caclulate width for currently considered channel.
169   virtual void calcWidth(bool calledFromInit = false);
170
171 };
172   
173 //==========================================================================
174
175 // The ResonanceW class handles the W+- resonance.
176
177 class ResonanceW : public ResonanceWidths {
178
179 public:
180
181   // Constructor. 
182   ResonanceW(int idResIn) {initBasic(idResIn);} 
183
184 private: 
185
186   // Locally stored properties and couplings.
187   double thetaWRat, alpEM;
188  
189   // Initialize constants.
190   virtual void initConstants(); 
191  
192   // Calculate various common prefactors for the current mass.
193   virtual void calcPreFac(bool = false);
194
195   // Caclulate width for currently considered channel.
196   virtual void calcWidth(bool = false);
197
198 };
199   
200 //==========================================================================
201
202 // The ResonanceTop class handles the top/antitop resonance.
203
204 class ResonanceTop : public ResonanceWidths {
205
206 public:
207
208   // Constructor. 
209   ResonanceTop(int idResIn) {initBasic(idResIn);} 
210  
211 private: 
212
213   // Locally stored properties and couplings.
214   double thetaWRat, m2W;
215  
216   // Initialize constants.
217   virtual void initConstants(); 
218  
219   // Calculate various common prefactors for the current mass.
220   virtual void calcPreFac(bool = false);
221
222   // Caclulate width for currently considered channel.
223   virtual void calcWidth(bool = false);
224
225 };
226   
227 //==========================================================================
228
229 // The ResonanceFour class handles fourth-generation resonances.
230
231 class ResonanceFour : public ResonanceWidths {
232
233 public:
234
235   // Constructor. 
236   ResonanceFour(int idResIn) {initBasic(idResIn);} 
237  
238 private: 
239
240   // Locally stored properties and couplings.
241   double thetaWRat, m2W;
242  
243   // Initialize constants.
244   virtual void initConstants(); 
245  
246   // Calculate various common prefactors for the current mass.
247   virtual void calcPreFac(bool = false);
248
249   // Caclulate width for currently considered channel.
250   virtual void calcWidth(bool = false);
251
252 };
253   
254 //==========================================================================
255
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.
258
259 class ResonanceH : public ResonanceWidths {
260
261 public:
262
263   // Constructor. 
264   ResonanceH(int higgsTypeIn, int idResIn) : higgsType(higgsTypeIn)
265     {initBasic(idResIn);} 
266
267 private: 
268
269   // Constants: could only be changed in the code itself.
270   static const double MASSMIN, GAMMAMARGIN;
271
272   // Higgs type in current instance.
273   int    higgsType;
274
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];
281  
282   // Initialize constants.
283   virtual void initConstants(); 
284  
285   // Calculate various common prefactors for the current mass.
286   virtual void calcPreFac(bool = false);
287
288   // Caclulate width for currently considered channel.
289   virtual void calcWidth(bool = false);
290
291   // Sum up loop contributions in Higgs -> g + g.
292   double eta2gg();
293
294   // Sum up loop contributions in Higgs -> gamma + gamma.
295   double eta2gaga();
296
297   // Sum up loop contributions in Higgs -> gamma + Z0.
298   double eta2gaZ();
299
300 };
301   
302 //==========================================================================
303
304 // The ResonanceHchg class handles the H+- resonance.
305
306 class ResonanceHchg : public ResonanceWidths {
307
308 public:
309
310   // Constructor. 
311   ResonanceHchg(int idResIn) {initBasic(idResIn);} 
312
313 private: 
314
315   // Locally stored properties and couplings.
316   bool   useCubicWidth; 
317   double thetaWRat, mW, tanBeta, tan2Beta, coup2H1W;
318  
319   // Initialize constants.
320   virtual void initConstants(); 
321  
322   // Calculate various common prefactors for the current mass.
323   virtual void calcPreFac(bool = false);
324
325   // Caclulate width for currently considered channel.
326   virtual void calcWidth(bool = false);
327
328 };
329   
330 //==========================================================================
331
332 // The ResonanceZprime class handles the gamma*/Z0 /Z'^0 resonance.
333
334 class ResonanceZprime : public ResonanceWidths {
335
336 public:
337
338   // Constructor. 
339   ResonanceZprime(int idResIn) {initBasic(idResIn);} 
340
341 private: 
342
343   // Locally stored properties and couplings.
344   int    gmZmode;
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;
348  
349   // Initialize constants.
350   virtual void initConstants(); 
351  
352   // Calculate various common prefactors for the current mass.
353   virtual void calcPreFac(bool = false);
354
355   // Caclulate width for currently considered channel.
356   virtual void calcWidth(bool calledFromInit = false);
357
358 };
359   
360 //==========================================================================
361
362 // The ResonanceWprime class handles the W'+- resonance.
363
364 class ResonanceWprime : public ResonanceWidths {
365
366 public:
367
368   // Constructor. 
369   ResonanceWprime(int idResIn) {initBasic(idResIn);} 
370
371 private: 
372
373   // Locally stored properties and couplings.
374   double thetaWRat, cos2tW, alpEM, aqWp, vqWp, alWp, vlWp, coupWpWZ;
375  
376   // Initialize constants.
377   virtual void initConstants(); 
378  
379   // Calculate various common prefactors for the current mass.
380   virtual void calcPreFac(bool = false);
381
382   // Caclulate width for currently considered channel.
383   virtual void calcWidth(bool = false);
384
385 };
386   
387 //==========================================================================
388
389 // The ResonanceRhorizontal class handles the R^0 resonance.
390
391 class ResonanceRhorizontal : public ResonanceWidths {
392
393 public:
394
395   // Constructor. 
396   ResonanceRhorizontal(int idResIn) {initBasic(idResIn);} 
397
398 private: 
399
400   // Locally stored properties and couplings.
401   double thetaWRat;
402  
403   // Initialize constants.
404   virtual void initConstants(); 
405  
406   // Calculate various common prefactors for the current mass.
407   virtual void calcPreFac(bool = false);
408
409   // Caclulate width for currently considered channel.
410   virtual void calcWidth(bool = false);
411
412 };
413    
414 //==========================================================================
415
416 // The ResonanceExcited class handles excited-fermion resonances.
417
418 class ResonanceExcited : public ResonanceWidths {
419
420 public:
421
422   // Constructor. 
423   ResonanceExcited(int idResIn) {initBasic(idResIn);} 
424
425 private: 
426
427   // Locally stored properties and couplings.
428   double Lambda, coupF, coupFprime, coupFcol, sin2tW, cos2tW;
429  
430   // Initialize constants.
431   virtual void initConstants(); 
432  
433   // Calculate various common prefactors for the current mass.
434   virtual void calcPreFac(bool = false);
435
436   // Caclulate width for currently considered channel.
437   virtual void calcWidth(bool = false);
438
439 };
440   
441 //==========================================================================
442
443 // The ResonanceGraviton class handles the excited Graviton resonance.
444
445 class ResonanceGraviton : public ResonanceWidths {
446
447 public:
448
449   // Constructor. 
450   ResonanceGraviton(int idResIn) {initBasic(idResIn);} 
451  
452 private: 
453
454   // Locally stored properties and couplings.
455   bool   m_smbulk;
456   double kappaMG;
457  
458   // Couplings between graviton and SM (map from particle id to coupling).
459   double m_coupling[26];
460
461   // Initialize constants.
462   virtual void initConstants(); 
463  
464   // Calculate various common prefactors for the current mass.
465   virtual void calcPreFac(bool = false);
466
467   // Caclulate width for currently considered channel.
468   virtual void calcWidth(bool = false);
469
470 };
471
472 //==========================================================================
473
474 // The ResonanceKKgluon class handles the excited kk-gluon resonance.
475
476 class ResonanceKKgluon : public ResonanceWidths {
477
478 public:
479
480   // Constructor. 
481   ResonanceKKgluon(int idResIn) {initBasic(idResIn);} 
482  
483 private: 
484
485   // Locally stored properties and couplings.
486   bool   m_smbulk;
487
488   // Couplings between KK gluon and SM (map from particle id to coupling).
489   double m_coupling[10];
490
491   // Initialize constants.
492   virtual void initConstants(); 
493  
494   // Calculate various common prefactors for the current mass.
495   virtual void calcPreFac(bool = false);
496
497   // Caclulate width for currently considered channel.
498   virtual void calcWidth(bool = false);
499
500 };
501
502
503 //==========================================================================
504
505 // The ResonanceLeptoquark class handles the LQ/LQbar resonance.
506
507 class ResonanceLeptoquark : public ResonanceWidths {
508
509 public:
510
511   // Constructor. 
512   ResonanceLeptoquark(int idResIn) {initBasic(idResIn);} 
513
514 private: 
515
516   // Locally stored properties and couplings.
517   double kCoup;
518  
519   // Initialize constants.
520   virtual void initConstants(); 
521  
522   // Calculate various common prefactors for the current mass.
523   virtual void calcPreFac(bool = false);
524
525   // Caclulate width for currently considered channel.
526   virtual void calcWidth(bool = false);
527
528 };
529
530 //==========================================================================
531
532 // The ResonanceNuRight class handles righthanded Majorana neutrinos.
533
534 class ResonanceNuRight : public ResonanceWidths {
535
536 public:
537
538   // Constructor. 
539   ResonanceNuRight(int idResIn) {initBasic(idResIn);} 
540
541 private: 
542
543   // Locally stored properties and couplings.
544   double thetaWRat, mWR;
545  
546   // Initialize constants.
547   virtual void initConstants(); 
548  
549   // Calculate various common prefactors for the current mass.
550   virtual void calcPreFac(bool = false);
551
552   // Caclulate width for currently considered channel.
553   virtual void calcWidth(bool = false);
554
555 };
556   
557 //==========================================================================
558
559 // The ResonanceZRight class handles the Z_R^0 resonance.
560
561 class ResonanceZRight : public ResonanceWidths {
562
563 public:
564
565   // Constructor. 
566   ResonanceZRight(int idResIn) {initBasic(idResIn);} 
567
568 private: 
569
570   // Locally stored properties and couplings.
571   double sin2tW, thetaWRat;
572  
573   // Initialize constants.
574   virtual void initConstants(); 
575  
576   // Calculate various common prefactors for the current mass.
577   virtual void calcPreFac(bool = false);
578
579   // Caclulate width for currently considered channel.
580   virtual void calcWidth(bool = false);
581
582 };
583   
584 //==========================================================================
585
586 // The ResonanceWRight class handles the W_R+- resonance.
587
588 class ResonanceWRight : public ResonanceWidths {
589
590 public:
591
592   // Constructor. 
593   ResonanceWRight(int idResIn) {initBasic(idResIn);} 
594   
595 private: 
596
597   // Locally stored properties and couplings.
598   double thetaWRat;
599  
600   // Initialize constants.
601   virtual void initConstants(); 
602  
603   // Calculate various common prefactors for the current mass.
604   virtual void calcPreFac(bool = false);
605
606   // Caclulate width for currently considered channel.
607   virtual void calcWidth(bool = false);
608
609 };
610   
611 //==========================================================================
612
613 // The ResonanceHchgchgLeft class handles the H++/H-- (left) resonance.
614
615 class ResonanceHchgchgLeft : public ResonanceWidths {
616
617 public:
618
619   // Constructor. 
620   ResonanceHchgchgLeft(int idResIn) {initBasic(idResIn);} 
621  
622 private: 
623
624   // Locally stored properties and couplings.
625   double yukawa[4][4], gL, vL, mW;
626  
627   // Initialize constants.
628   virtual void initConstants(); 
629  
630   // Calculate various common prefactors for the current mass.
631   virtual void calcPreFac(bool = false);
632
633   // Caclulate width for currently considered channel.
634   virtual void calcWidth(bool = false);
635
636 };
637    
638 //==========================================================================
639
640 // The ResonanceHchgchgRight class handles the H++/H-- (right) resonance.
641
642 class ResonanceHchgchgRight : public ResonanceWidths {
643
644 public:
645
646   // Constructor. 
647   ResonanceHchgchgRight(int idResIn) {initBasic(idResIn);} 
648  
649 private: 
650
651   // Locally stored properties and couplings.
652   int    idWR;
653   double yukawa[4][4], gR;
654  
655   // Initialize constants.
656   virtual void initConstants(); 
657  
658   // Calculate various common prefactors for the current mass.
659   virtual void calcPreFac(bool = false);
660
661   // Caclulate width for currently considered channel.
662   virtual void calcWidth(bool = false);
663
664 };
665   
666 //==========================================================================
667
668 } // end namespace Pythia8
669
670 #endif // Pythia8_ResonanceWidths_H