1 // SigmaHiggs.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2010 Torbjorn Sjostrand.
3 // Part of code written by Marc Montull, CERN summer student 2007.
4 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
7 // Header file for Higgs process differential cross sections.
8 // Contains classes derived from SigmaProcess via Sigma2Process.
10 #ifndef Pythia8_SigmaHiggs_H
11 #define Pythia8_SigmaHiggs_H
13 #include "SigmaProcess.h"
17 //==========================================================================
19 // A derived class for f fbar -> H0 (SM), H1, H2 or A3 (BSM).
21 class Sigma1ffbar2H : public Sigma1Process {
26 Sigma1ffbar2H(int higgsTypeIn) : higgsType(higgsTypeIn) {}
28 // Initialize process.
29 virtual void initProc();
31 // Calculate flavour-independent parts of cross section.
32 virtual void sigmaKin();
34 // Evaluate sigmaHat(sHat).
35 virtual double sigmaHat();
37 // Select flavour, colour and anticolour.
38 virtual void setIdColAcol();
40 // Evaluate weight for decay angles.
41 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
43 // Info on the subprocess.
44 virtual string name() const {return nameSave;}
45 virtual int code() const {return codeSave;}
46 virtual string inFlux() const {return "ffbarSame";}
47 virtual int resonanceA() const {return idRes;}
51 // An H0, H1, H2 or A3 resonance object provides coupling
52 // and propagator expressions.
53 ParticleDataEntry* HResPtr;
54 double mRes, GammaRes, m2Res, GamMRat, sigBW, widthOut;
55 int higgsType, codeSave, idRes;
59 //==========================================================================
61 // A derived class for g g -> H0 (SM), H1, H2 or A3 (BSM).
63 class Sigma1gg2H : public Sigma1Process {
68 Sigma1gg2H(int higgsTypeIn) : higgsType(higgsTypeIn) {}
70 // Initialize process.
71 virtual void initProc();
73 // Calculate flavour-independent parts of cross section.
74 virtual void sigmaKin();
76 // Evaluate sigmaHat(sHat).
77 virtual double sigmaHat() {return sigma;}
79 // Select flavour, colour and anticolour.
80 virtual void setIdColAcol();
82 // Evaluate weight for decay angles.
83 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
85 // Info on the subprocess.
86 virtual string name() const {return nameSave ;}
87 virtual int code() const {return codeSave;}
88 virtual string inFlux() const {return "gg";}
89 virtual int resonanceA() const {return idRes;}
93 // A H0, H1, H2 or A3 resonance object provides coupling
94 // and propagator expressions.
95 ParticleDataEntry* HResPtr;
96 double mRes, GammaRes, m2Res, GamMRat, sigma;
97 int higgsType, codeSave, idRes;
101 //==========================================================================
103 // A derived class for gamma gamma -> H0 (SM Higgs), H1, H2 or A3 (BSM Higgs).
105 class Sigma1gmgm2H : public Sigma1Process {
110 Sigma1gmgm2H(int higgsTypeIn) : higgsType(higgsTypeIn) {}
112 // Initialize process.
113 virtual void initProc();
115 // Calculate flavour-independent parts of cross section.
116 virtual void sigmaKin();
118 // Evaluate sigmaHat(sHat).
119 virtual double sigmaHat() {return sigma;}
121 // Select flavour, colour and anticolour.
122 virtual void setIdColAcol();
124 // Evaluate weight for decay angles.
125 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
127 // Info on the subprocess.
128 virtual string name() const {return nameSave;}
129 virtual int code() const {return codeSave;}
130 virtual string inFlux() const {return "gmgm";}
131 virtual int resonanceA() const {return idRes;}
135 // A H0, H1, H2 or A3 resonance object provides coupling
136 // and propagator expressions.
137 ParticleDataEntry* HResPtr;
138 double mRes, GammaRes, m2Res, GamMRat, sigma;
139 int higgsType, codeSave, idRes;
143 //==========================================================================
145 // A derived class for f fbar -> H Z0.
146 // (H can be H0 SM or H1, H2, A3 from BSM).
147 class Sigma2ffbar2HZ : public Sigma2Process {
152 Sigma2ffbar2HZ(int higgsTypeIn) : higgsType(higgsTypeIn) {}
154 // Initialize process.
155 virtual void initProc();
157 // Calculate flavour-independent parts of cross section.
158 virtual void sigmaKin();
160 // Evaluate d(sigmaHat)/d(tHat).
161 virtual double sigmaHat();
163 // Select flavour, colour and anticolour.
164 virtual void setIdColAcol();
166 // Evaluate weight for decay angles.
167 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
169 // Info on the subprocess.
170 virtual string name() const {return nameSave;}
171 virtual int code() const {return codeSave;}
172 virtual string inFlux() const {return "ffbarSame";}
173 virtual bool isSChannel() const {return true;}
174 virtual int id3Mass() const {return idRes;}
175 virtual int id4Mass() const {return 23;}
176 virtual int resonanceA() const {return 23;}
177 virtual int gmZmode() const {return 2;}
181 // Store Z0 mass and width.
182 double mZ, widZ, mZS, mwZS, thetaWRat, sigma0, openFracPair, coup2Z;
183 int higgsType, codeSave, idRes;
187 //==========================================================================
189 // A derived class for f fbar -> H W+- (Standard Model Higgs).
190 // (H can be H0 SM or H1, H2, A3 from BSM).
192 class Sigma2ffbar2HW : public Sigma2Process {
197 Sigma2ffbar2HW(int higgsTypeIn) : higgsType(higgsTypeIn) {}
199 // Initialize process.
200 virtual void initProc();
202 // Calculate flavour-independent parts of cross section.
203 virtual void sigmaKin();
205 // Evaluate d(sigmaHat)/d(tHat).
206 virtual double sigmaHat();
208 // Select flavour, colour and anticolour.
209 virtual void setIdColAcol();
211 // Evaluate weight for decay angles.
212 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
214 // Info on the subprocess.
215 virtual string name() const {return nameSave;}
216 virtual int code() const {return codeSave;}
217 virtual string inFlux() const {return "ffbarChg";}
218 virtual bool isSChannel() const {return true;}
219 virtual int id3Mass() const {return idRes;}
220 virtual int id4Mass() const {return 24;}
221 virtual int resonanceA() const {return 24;}
225 // Store W+- mass and width, and couplings.
226 double mW, widW, mWS, mwWS, thetaWRat, sigma0, openFracPairPos,
227 openFracPairNeg, coup2W;
228 int higgsType, codeSave, idRes;
232 //==========================================================================
234 // A derived class for f f' -> H f f' (Z0 Z0 fusion of SM or BSM Higgs).
235 // (H can be H0 SM or H1, H2, A3 from BSM).
237 class Sigma3ff2HfftZZ : public Sigma3Process {
242 Sigma3ff2HfftZZ(int higgsTypeIn) : higgsType(higgsTypeIn) {}
244 // Initialize process.
245 virtual void initProc();
247 // Calculate flavour-independent parts of cross section.
248 virtual void sigmaKin();
250 // Evaluate sigmaHat(sHat).
251 virtual double sigmaHat();
253 // Select flavour, colour and anticolour.
254 virtual void setIdColAcol();
256 // Evaluate weight for decay angles.
257 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
259 // Info on the subprocess.
260 virtual string name() const {return nameSave;}
261 virtual int code() const {return codeSave;}
262 virtual string inFlux() const {return "ff";}
263 virtual int id3Mass() const {return idRes;}
265 // Instructions for 3-body phase space with t-channel propagators.
266 virtual int idTchan1() const {return 23;}
267 virtual int idTchan2() const {return 23;}
268 virtual double tChanFracPow1() const {return 0.05;}
269 virtual double tChanFracPow2() const {return 0.9;}
270 virtual bool useMirrorWeight() const {return true;}
274 // Store standard factors.
275 double mZS, prefac, sigma1, sigma2, openFrac, coup2Z;
276 int higgsType, codeSave, idRes;
280 //==========================================================================
282 // A derived class for f_1 f_2 -> H f_3 f_4 (W+ W- fusion of SM or BSM Higgs).
283 // (H can be H0 SM or H1, H2, A3 from BSM).
285 class Sigma3ff2HfftWW : public Sigma3Process {
290 Sigma3ff2HfftWW(int higgsTypeIn) : higgsType(higgsTypeIn) {}
292 // Initialize process.
293 virtual void initProc();
295 // Calculate flavour-independent parts of cross section.
296 virtual void sigmaKin();
298 // Evaluate sigmaHat(sHat).
299 virtual double sigmaHat();
301 // Select flavour, colour and anticolour.
302 virtual void setIdColAcol();
304 // Evaluate weight for decay angles.
305 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
307 // Info on the subprocess.
308 virtual string name() const {return nameSave;}
309 virtual int code() const {return codeSave;}
310 virtual string inFlux() const {return "ff";}
311 virtual int id3Mass() const {return idRes;}
313 // Instructions for 3-body phase space with t-channel propagators.
314 virtual int idTchan1() const {return 24;}
315 virtual int idTchan2() const {return 24;}
316 virtual double tChanFracPow1() const {return 0.05;}
317 virtual double tChanFracPow2() const {return 0.9;}
318 virtual bool useMirrorWeight() const {return true;}
322 // Store standard prefactor.
323 double mWS, prefac, sigma0, openFrac, coup2W;
324 int higgsType, codeSave, idRes;
328 //==========================================================================
330 // A derived class for g g -> H Q Qbar (Q Qbar fusion of SM or BSM Higgs).
331 // (H can be H0 SM or H1, H2, A3 from BSM).
333 class Sigma3gg2HQQbar : public Sigma3Process {
338 Sigma3gg2HQQbar(int idIn, int higgsTypeIn) : idNew(idIn),
339 higgsType(higgsTypeIn) {}
341 // Initialize process.
342 virtual void initProc();
344 // Calculate flavour-independent parts of cross section.
345 virtual void sigmaKin();
347 // Evaluate sigmaHat(sHat).
348 virtual double sigmaHat() {return sigma;}
350 // Select flavour, colour and anticolour.
351 virtual void setIdColAcol();
353 // Evaluate weight for decay angles.
354 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
356 // Info on the subprocess.
357 virtual string name() const {return nameSave;}
358 virtual int code() const {return codeSave;}
359 virtual string inFlux() const {return "gg";}
360 virtual int id3Mass() const {return idRes;}
361 virtual int id4Mass() const {return idNew;}
362 virtual int id5Mass() const {return idNew;}
364 // Instructions for 3-body phase space with t-channel propagators.
365 virtual int idTchan1() const {return idNew;}
366 virtual int idTchan2() const {return idNew;}
367 virtual double tChanFracPow1() const {return 0.4;}
368 virtual double tChanFracPow2() const {return 0.2;}
369 virtual bool useMirrorWeight() const {return false;}
373 // Store flavour-specific process information and standard prefactor.
374 double prefac, sigma, openFracTriplet, coup2Q;
375 int idNew, higgsType, codeSave, idRes;
380 //==========================================================================
382 // A derived class for q qbar -> H Q Qbar (Q Qbar fusion of SM or BSM Higgs).
383 // (H can be H0 SM or H1, H2, A3 from BSM).
385 class Sigma3qqbar2HQQbar : public Sigma3Process {
390 Sigma3qqbar2HQQbar(int idIn, int higgsTypeIn) : idNew(idIn),
391 higgsType(higgsTypeIn) {}
393 // Initialize process.
394 virtual void initProc();
396 // Calculate flavour-independent parts of cross section.
397 virtual void sigmaKin();
399 // Evaluate sigmaHat(sHat).
400 virtual double sigmaHat() {return sigma;}
402 // Select flavour, colour and anticolour.
403 virtual void setIdColAcol();
405 // Evaluate weight for decay angles.
406 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
408 // Info on the subprocess.
409 virtual string name() const {return nameSave;}
410 virtual int code() const {return codeSave;}
411 virtual string inFlux() const {return "qqbarSame";}
412 virtual int id3Mass() const {return idRes;}
413 virtual int id4Mass() const {return idNew;}
414 virtual int id5Mass() const {return idNew;}
416 // Instructions for 3-body phase space with t-channel propagators.
417 virtual int idTchan1() const {return idNew;}
418 virtual int idTchan2() const {return idNew;}
419 virtual double tChanFracPow1() const {return 0.4;}
420 virtual double tChanFracPow2() const {return 0.2;}
421 virtual bool useMirrorWeight() const {return false;}
425 // Store flavour-specific process information and standard prefactor.
426 double prefac, sigma, openFracTriplet, coup2Q;
427 int idNew, higgsType, codeSave, idRes;
432 //==========================================================================
434 // A derived class for q g -> H q (SM or BSM Higgs).
435 // (H can be H0 SM or H1, H2, A3 from BSM).
437 class Sigma2qg2Hq : public Sigma2Process {
442 Sigma2qg2Hq(int idIn, int higgsTypeIn) : idNew(idIn),
443 higgsType(higgsTypeIn) {}
445 // Initialize process.
446 virtual void initProc();
448 // Calculate flavour-independent parts of cross section.
449 virtual void sigmaKin();
451 // Evaluate sigmaHat(sHat).
452 virtual double sigmaHat();
454 // Select flavour, colour and anticolour.
455 virtual void setIdColAcol();
457 // Evaluate weight for decay angles.
458 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
460 // Info on the subprocess.
461 virtual string name() const {return nameSave;}
462 virtual int code() const {return codeSave;}
463 virtual string inFlux() const {return "qg";}
464 virtual int id3Mass() const {return idRes;}
465 virtual int id4Mass() const {return idNew;}
469 // Store flavour-specific process information and standard prefactor.
470 double m2W, thetaWRat, sigma, openFrac;
471 int idNew, higgsType, codeSave, idRes;
476 //==========================================================================
478 // A derived class for g g -> H0 g (SM or BSM Higgs via heavy top loop).
479 // (H can be H0 SM or H1, H2, A3 from BSM).
481 class Sigma2gg2Hglt : public Sigma2Process {
486 Sigma2gg2Hglt(int higgsTypeIn) : higgsType(higgsTypeIn) {}
488 // Initialize process.
489 virtual void initProc();
491 // Calculate flavour-independent parts of cross section.
492 virtual void sigmaKin();
494 // Evaluate d(sigmaHat)/d(tHat).
495 virtual double sigmaHat() {return sigma;}
497 // Select flavour, colour and anticolour.
498 virtual void setIdColAcol();
500 // Evaluate weight for decay angles.
501 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
503 // Info on the subprocess.
504 virtual string name() const {return nameSave;}
505 virtual int code() const {return codeSave;}
506 virtual string inFlux() const {return "gg";}
507 virtual int id3Mass() const {return idRes;}
511 // Store standard prefactor.
512 double widHgg, sigma, openFrac;
513 int higgsType, codeSave, idRes;
517 //==========================================================================
519 // A derived class for q g -> H q (SM or BSM Higgs via heavy top loop).
520 // (H can be H0 SM or H1, H2, A3 from BSM).
522 class Sigma2qg2Hqlt : public Sigma2Process {
527 Sigma2qg2Hqlt(int higgsTypeIn) : higgsType(higgsTypeIn) {}
529 // Initialize process.
530 virtual void initProc();
532 // Calculate flavour-independent parts of cross section.
533 virtual void sigmaKin();
535 // Evaluate d(sigmaHat)/d(tHat).
536 virtual double sigmaHat() {return sigma;}
538 // Select flavour, colour and anticolour.
539 virtual void setIdColAcol();
541 // Evaluate weight for decay angles.
542 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
544 // Info on the subprocess.
545 virtual string name() const {return nameSave;}
546 virtual int code() const {return codeSave;}
547 virtual string inFlux() const {return "qg";}
548 virtual int id3Mass() const {return idRes;}
552 // Store standard prefactor.
553 double widHgg, sigma, openFrac;
554 int higgsType, codeSave, idRes;
558 //==========================================================================
560 // A derived class for q qbar -> H g (SM or BSM Higgs via heavy top loop).
561 // (H can be H0 SM or H1, H2, A3 from BSM).
563 class Sigma2qqbar2Hglt : public Sigma2Process {
568 Sigma2qqbar2Hglt(int higgsTypeIn) : higgsType(higgsTypeIn) {}
570 // Initialize process.
571 virtual void initProc();
573 // Calculate flavour-independent parts of cross section.
574 virtual void sigmaKin();
576 // Evaluate d(sigmaHat)/d(tHat).
577 virtual double sigmaHat() {return sigma;}
579 // Select flavour, colour and anticolour.
580 virtual void setIdColAcol();
582 // Evaluate weight for decay angles.
583 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
585 // Info on the subprocess.
586 virtual string name() const {return nameSave;}
587 virtual int code() const {return codeSave;}
588 virtual string inFlux() const {return "qqbarSame";}
589 virtual int id3Mass() const {return idRes;}
593 // Store standard prefactor.
594 double widHgg, sigma, openFrac;
595 int higgsType, codeSave, idRes;
599 //==========================================================================
601 // A derived class for f fbar' -> H+-.
603 class Sigma1ffbar2Hchg : public Sigma1Process {
608 Sigma1ffbar2Hchg() {}
610 // Initialize process.
611 virtual void initProc();
613 // Calculate flavour-independent parts of cross section.
614 virtual void sigmaKin();
616 // Evaluate sigmaHat(sHat).
617 virtual double sigmaHat();
619 // Select flavour, colour and anticolour.
620 virtual void setIdColAcol();
622 // Evaluate weight for decay angles.
623 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
625 // Info on the subprocess.
626 virtual string name() const {return "f fbar' -> H+-";}
627 virtual int code() const {return 961;}
628 virtual string inFlux() const {return "ffbarChg";}
629 virtual int resonanceA() const {return 37;}
633 // A H0 resonance object provides coupling and propagator expressions.
634 ParticleDataEntry* HResPtr;
635 double mRes, GammaRes, m2Res, GamMRat, m2W, thetaWRat, tan2Beta, sigBW,
636 widthOutPos, widthOutNeg;
640 //==========================================================================
642 // A derived class for q g -> H+- q'.
644 class Sigma2qg2Hchgq : public Sigma2Process {
649 Sigma2qg2Hchgq(int idIn, int codeIn, string nameIn) : idNew(idIn),
650 codeSave(codeIn), nameSave(nameIn) {}
652 // Initialize process.
653 virtual void initProc();
655 // Calculate flavour-independent parts of cross section.
656 virtual void sigmaKin();
658 // Evaluate sigmaHat(sHat).
659 virtual double sigmaHat();
661 // Select flavour, colour and anticolour.
662 virtual void setIdColAcol();
664 // Evaluate weight for decay angles.
665 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
667 // Info on the subprocess.
668 virtual string name() const {return nameSave;}
669 virtual int code() const {return codeSave;}
670 virtual string inFlux() const {return "qg";}
671 virtual int id3Mass() const {return 37;}
672 virtual int id4Mass() const {return idNew;}
676 // Store flavour-specific process information and standard prefactor.
677 int idNew, codeSave, idOld, idUp, idDn;
679 double m2W, thetaWRat, tan2Beta, sigma, openFracPos, openFracNeg;
683 //==========================================================================
685 // A derived class for f fbar -> A0(H_3) h0(H_1) or A0(H_3) H0(H_2).
687 class Sigma2ffbar2A3H12 : public Sigma2Process {
692 Sigma2ffbar2A3H12(int higgsTypeIn) : higgsType(higgsTypeIn) {}
694 // Initialize process.
695 virtual void initProc();
697 // Calculate flavour-independent parts of cross section.
698 virtual void sigmaKin();
700 // Evaluate sigmaHat(sHat).
701 virtual double sigmaHat();
703 // Select flavour, colour and anticolour.
704 virtual void setIdColAcol();
706 // Evaluate weight for decay angles.
707 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
709 // Info on the subprocess.
710 virtual string name() const {return nameSave;}
711 virtual int code() const {return codeSave;}
712 virtual string inFlux() const {return "ffbarSame";}
713 virtual int id3Mass() const {return 36;}
714 virtual int id4Mass() const {return higgs12;}
718 // Store flavour-specific process information and standard prefactor.
719 int higgsType, higgs12, codeSave;
721 double coupZA3H12, m2Z, mGammaZ, thetaWRat, openFrac, sigma0;
725 //==========================================================================
727 // A derived class for f fbar -> H+- h0(H_1) or H+- H0(H_2).
729 class Sigma2ffbar2HchgH12 : public Sigma2Process {
734 Sigma2ffbar2HchgH12(int higgsTypeIn) : higgsType(higgsTypeIn) {}
736 // Initialize process.
737 virtual void initProc();
739 // Calculate flavour-independent parts of cross section.
740 virtual void sigmaKin();
742 // Evaluate sigmaHat(sHat).
743 virtual double sigmaHat();
745 // Select flavour, colour and anticolour.
746 virtual void setIdColAcol();
748 // Evaluate weight for decay angles.
749 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
751 // Info on the subprocess.
752 virtual string name() const {return nameSave;}
753 virtual int code() const {return codeSave;}
754 virtual string inFlux() const {return "ffbarChg";}
755 virtual int id3Mass() const {return 37;}
756 virtual int id4Mass() const {return higgs12;}
760 // Store flavour-specific process information and standard prefactor.
761 int higgsType, higgs12, codeSave;
763 double coupWHchgH12, m2W, mGammaW, thetaWRat, openFracPos, openFracNeg,
768 //==========================================================================
770 // A derived class for f fbar -> H+ H-.
772 class Sigma2ffbar2HposHneg : public Sigma2Process {
777 Sigma2ffbar2HposHneg() {}
779 // Initialize process.
780 virtual void initProc();
782 // Calculate flavour-independent parts of cross section.
783 virtual void sigmaKin();
785 // Evaluate sigmaHat(sHat).
786 virtual double sigmaHat();
788 // Select flavour, colour and anticolour.
789 virtual void setIdColAcol();
791 // Evaluate weight for decay angles.
792 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
794 // Info on the subprocess.
795 virtual string name() const {return "f fbar -> H+ H-";}
796 virtual int code() const {return 1085;}
797 virtual string inFlux() const {return "ffbarSame";}
798 virtual int id3Mass() const {return 37;}
799 virtual int id4Mass() const {return 37;}
803 // Store flavour-specific process information and standard prefactor.
804 double m2Z, mGammaZ, thetaWRat, eH, lH, openFrac, gamSig, intSig, resSig;
808 //==========================================================================
810 } // end namespace Pythia8
812 #endif // Pythia8_SigmaHiggs_H