PYTHIA  8.317
SigmaQCD.h
1 // SigmaQCD.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2026 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Header file for QCD process differential cross sections.
7 // Contains classes derived from SigmaProcess via Sigma(0/2)Process.
8 
9 #ifndef Pythia8_SigmaQCD_H
10 #define Pythia8_SigmaQCD_H
11 
12 #include "Pythia8/SigmaProcess.h"
13 
14 namespace Pythia8 {
15 
16 //==========================================================================
17 
18 // A derived class for minimum-bias (inelastic, nondiffractive) events.
19 
21 
22 public:
23 
24  // Constructor.
26 
27  // Evaluate sigma.
28  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaND();
29  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 1);}
30 
31  // Select flavour, colour and anticolour.
32  virtual void setIdColAcol() {}
33 
34  // Info on the subprocess.
35  virtual string name() const {return "non-diffractive";}
36  virtual int code() const {return 101;}
37  virtual bool isNonDiff() const {return true;}
38 
39 private:
40 
41 };
42 
43 //==========================================================================
44 
45 // A derived class for elastic scattering A B -> A B.
46 
47 class Sigma0AB2AB : public Sigma0Process {
48 
49 public:
50 
51  // Constructor.
53 
54  // Evaluate sigma.
55  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaEl();
56  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 2);}
57 
58  // Select flavour, colour and anticolour.
59  virtual void setIdColAcol();
60 
61  // Info on the subprocess.
62  virtual string name() const {return "A B -> A B elastic";}
63  virtual int code() const {return 102;}
64  virtual bool isResolved() const {return false;}
65 
66 private:
67 
68 };
69 
70 //==========================================================================
71 
72 // A derived class for single diffractive scattering A B -> X B.
73 
74 class Sigma0AB2XB : public Sigma0Process {
75 
76 public:
77 
78  // Constructor.
80 
81  // Evaluate sigma.
82  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaXB();
83  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 3);}
84 
85  // Select flavour, colour and anticolour.
86  virtual void setIdColAcol();
87 
88  // Info on the subprocess.
89  virtual string name() const {return "A B -> X B single diffractive";}
90  virtual int code() const {return 103;}
91  virtual bool isResolved() const {return false;}
92  virtual bool isDiffA() const {return true;};
93 
94 private:
95 
96 };
97 
98 //==========================================================================
99 
100 // A derived class for single diffractive scattering A B -> A X.
101 
102 class Sigma0AB2AX : public Sigma0Process {
103 
104 public:
105 
106  // Constructor.
108 
109  // Evaluate sigma.
110  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaAX();
111  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 4);}
112 
113  // Select flavour, colour and anticolour.
114  virtual void setIdColAcol();
115 
116  // Info on the subprocess.
117  virtual string name() const {return "A B -> A X single diffractive";}
118  virtual int code() const {return 104;}
119  virtual bool isResolved() const {return false;}
120  virtual bool isDiffB() const {return true;};
121 
122 private:
123 
124 };
125 
126 //==========================================================================
127 
128 // A derived class for double diffractive scattering A B -> X X.
129 
130 class Sigma0AB2XX : public Sigma0Process {
131 
132 public:
133 
134  // Constructor.
136 
137  // Evaluate sigma.
138  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaXX();
139  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 5);}
140 
141  // Select flavour, colour and anticolour.
142  virtual void setIdColAcol();
143 
144  // Info on the subprocess.
145  virtual string name() const {return "A B -> X X double diffractive";}
146  virtual int code() const {return 105;}
147  virtual bool isResolved() const {return false;}
148  virtual bool isDiffA() const {return true;};
149  virtual bool isDiffB() const {return true;};
150 
151 private:
152 
153 };
154 
155 //==========================================================================
156 
157 // A derived class for central diffractive scattering A B -> A X B.
158 
159 class Sigma0AB2AXB : public Sigma0Process {
160 
161 public:
162 
163  // Constructor.
165 
166  // Evaluate sigma.
167  virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaAXB();
168  return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 6);}
169 
170  // Select flavour, colour and anticolour.
171  virtual void setIdColAcol();
172 
173  // Info on the subprocess.
174  virtual string name() const {return "A B -> A X B central diffractive";}
175  virtual int code() const {return 106;}
176  virtual int nFinal() const {return 3;}
177  virtual bool isResolved() const {return false;}
178  virtual bool isDiffC() const {return true;};
179 
180 private:
181 
182 };
183 
184 //==========================================================================
185 
186 // A derived class for g g -> g g.
187 
188 class Sigma2gg2gg : public Sigma2Process {
189 
190 public:
191 
192  // Constructor.
193  Sigma2gg2gg() : sigTS(), sigUS(), sigTU(), sigSum(), sigma() {}
194 
195  // Calculate flavour-independent parts of cross section.
196  virtual void sigmaKin();
197 
198  // Evaluate d(sigmaHat)/d(tHat).
199  virtual double sigmaHat() {return sigma;}
200 
201  // Select flavour, colour and anticolour.
202  virtual void setIdColAcol();
203 
204  // Info on the subprocess.
205  virtual string name() const {return "g g -> g g";}
206  virtual int code() const {return 111;}
207  virtual string inFlux() const {return "gg";}
208 
209 private:
210 
211  // Values stored for colour flow selection.
212  double sigTS, sigUS, sigTU, sigSum, sigma;
213 
214 };
215 
216 //==========================================================================
217 
218 // A derived class for g g -> q qbar (q = u, d, s, i.e. almost massless).
219 
221 
222 public:
223 
224  // Constructor.
225  Sigma2gg2qqbar() : nQuarkNew(), idNew(), mNew(), m2New(), sigTS(), sigUS(),
226  sigSum(), sigma() {}
227 
228  // Initialize process.
229  virtual void initProc();
230 
231  // Calculate flavour-independent parts of cross section.
232  virtual void sigmaKin();
233 
234  // Evaluate d(sigmaHat)/d(tHat).
235  virtual double sigmaHat() {return sigma;}
236 
237  // Select flavour, colour and anticolour.
238  virtual void setIdColAcol();
239 
240  // Info on the subprocess.
241  virtual string name() const {return "g g -> q qbar (uds)";}
242  virtual int code() const {return 112;}
243  virtual string inFlux() const {return "gg";}
244 
245 private:
246 
247  // Number of quarks to be considered in massless approximation.
248  int nQuarkNew;
249 
250  // Values stored for colour flow selection.
251  int idNew;
252  double mNew, m2New, sigTS, sigUS, sigSum, sigma;
253 
254 };
255 
256 //==========================================================================
257 
258 // A derived class for q g -> q g (q = u, d, s, c, b).
259 // Use massless approximation also for Q since no alternative.
260 
261 class Sigma2qg2qg : public Sigma2Process {
262 
263 public:
264 
265  // Constructor.
266  Sigma2qg2qg() : sigTS(), sigTU(), sigSum(), sigma() {}
267 
268  // Calculate flavour-independent parts of cross section.
269  virtual void sigmaKin();
270 
271  // Evaluate d(sigmaHat)/d(tHat).
272  virtual double sigmaHat() {return sigma;}
273 
274  // Select flavour, colour and anticolour.
275  virtual void setIdColAcol();
276 
277  // Info on the subprocess.
278  virtual string name() const {return "q g -> q g";}
279  virtual int code() const {return 113;}
280  virtual string inFlux() const {return "qg";}
281 
282 private:
283 
284  // Values stored for colour flow selection.
285  double sigTS, sigTU, sigSum, sigma;
286 
287 };
288 
289 //==========================================================================
290 
291 // A derived class for q qbar' -> q qbar' or q q' -> q q'
292 // (qbar qbar' -> qbar qbar'), q' may be same as q.
293 
294 class Sigma2qq2qq : public Sigma2Process {
295 
296 public:
297 
298  // Constructor.
299  Sigma2qq2qq() : sigT(), sigU(), sigTU(), sigST(), sigSum() {}
300 
301  // Calculate flavour-independent parts of cross section.
302  virtual void sigmaKin();
303 
304  // Evaluate d(sigmaHat)/d(tHat).
305  virtual double sigmaHat();
306 
307  // Select flavour, colour and anticolour.
308  virtual void setIdColAcol();
309 
310  // Info on the subprocess.
311  virtual string name() const {return "q q(bar)' -> q q(bar)'";}
312  virtual int code() const {return 114;}
313  virtual string inFlux() const {return "qq";}
314 
315  private:
316 
317  // Values stored for colour flow selection.
318  double sigT, sigU, sigTU, sigST, sigSum;
319 
320 };
321 
322 //==========================================================================
323 
324 // A derived class for q qbar -> g g.
325 
327 
328 public:
329 
330  // Constructor.
331  Sigma2qqbar2gg() : sigTS(), sigUS(), sigSum(), sigma() {}
332 
333  // Calculate flavour-independent parts of cross section.
334  virtual void sigmaKin();
335 
336  // Evaluate d(sigmaHat)/d(tHat).
337  virtual double sigmaHat() {return sigma;}
338 
339  // Select flavour, colour and anticolour.
340  virtual void setIdColAcol();
341 
342  // Info on the subprocess.
343  virtual string name() const {return "q qbar -> g g";}
344  virtual int code() const {return 115;}
345  virtual string inFlux() const {return "qqbarSame";}
346 
347  private:
348 
349  // Values stored for colour flow selection.
350  double sigTS, sigUS, sigSum, sigma;
351 
352 };
353 
354 //==========================================================================
355 
356 // A derived class for q qbar -> q' qbar'.
357 
359 
360 public:
361 
362  // Constructor.
363  Sigma2qqbar2qqbarNew() : nQuarkNew(), idNew(), mNew(), m2New(), sigS(),
364  sigma() {}
365 
366  // Initialize process.
367  virtual void initProc();
368 
369  // Calculate flavour-independent parts of cross section.
370  virtual void sigmaKin();
371 
372  // Evaluate d(sigmaHat)/d(tHat).
373  virtual double sigmaHat() {return sigma;}
374 
375  // Select flavour, colour and anticolour.
376  virtual void setIdColAcol();
377 
378  // Info on the subprocess.
379  virtual string name() const {return "q qbar -> q' qbar' (uds)";}
380  virtual int code() const {return 116;}
381  virtual string inFlux() const {return "qqbarSame";}
382 
383  private:
384 
385  // Number of quarks to be considered in massless approximation.
386  int nQuarkNew;
387 
388  // Values stored for colour flow selection.
389  int idNew;
390  double mNew, m2New, sigS, sigma;
391 
392 };
393 
394 //==========================================================================
395 
396 // Auxiliary class for top threshold corrections, based on
397 // V. Fadin, V. Khoze and T. Sjostrand, Z. Phys. C48 (1990) 613.
398 
400 
401 public:
402 
403  // Trivial constructor and destructor.
405  ~TopThreshold() {}
406 
407  // Initialization setup - read in necessary settings.
408  void setup( int topModelIn, double mtIn, double gammatIn,
409  double gammatGreenIn, double thresholdRegionIn, double singletFracIn,
410  int alphasOrder, double alphasValue);
411 
412  // Cross section enhancement factor, combined.
413  double multiplySigmaBy( double mHat, double m3, double m4,
414  double m3Orig, double m4Orig, double eThr);
415 
416  // Imaginary part of Green's function for singlet state.
417  double imGreenSin(double eNow, double mtNow);
418 
419  // Imaginary part of Green's function for octet state.
420  double imGreenOct(double eNow, double mtNow);
421 
422  // Set up information to handle angular distributions in toponium decay.
423  double weightTopDecay( Event& process);
424 
425  // Matrix element for decay angles in pseudoscalar toponium-like state.
426  double matrixElementP2bbveevmumu(const Event& work,
427  int ib, int ibb, int ive, int ie, int ivm, int im);
428 
429 private:
430 
431  // Commonly available variables.
432  int topModel;
433  double mt, gammat, gammatGreen, thrRegion, singletFrac, alps;
434 
435  // Need alphaStrong with special scale.
436  AlphaStrong alphas;
437 
438  // Debug.
439  Hist wtRat;
440 
441 };
442 
443 //==========================================================================
444 
445 // A derived class for g g -> Q Qbar (Q = c, b or t).
446 
448 
449 public:
450 
451  // Constructor.
452  Sigma2gg2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
453  topModel(), topAngles(), topAnglesNow(), nameSave(), sigTS(), sigUS(),
454  sigSum(), sigma(), openFracPair(), ggSingletFrac(), eBegDamp(),
455  eEndDamp() {}
456 
457  // Initialize process.
458  virtual void initProc();
459 
460  // Calculate flavour-independent parts of cross section.
461  virtual void sigmaKin();
462 
463  // Evaluate d(sigmaHat)/d(tHat).
464  virtual double sigmaHat() {return sigma;}
465 
466  // Select flavour, colour and anticolour.
467  virtual void setIdColAcol();
468 
469  // Evaluate weight for W decay angles in top decay (else inactive).
470  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
471 
472  // Info on the subprocess.
473  virtual string name() const {return nameSave;}
474  virtual int code() const {return codeSave;}
475  virtual string inFlux() const {return "gg";}
476  virtual int id3Mass() const {return idNew;}
477  virtual int id4Mass() const {return idNew;}
478 
479  private:
480 
481  // Values stored for process type and colour flow selection.
482  int idNew, codeSave, topModel;
483  bool topAngles, topAnglesNow;
484  string nameSave;
485  double sigTS, sigUS, sigSum, sigma, openFracPair, ggSingletFrac,
486  eBegDamp, eEndDamp;
487 
488  // Class for top threshold corrections.
489  TopThreshold topThreshold;
490 
491 };
492 
493 //==========================================================================
494 
495 // A derived class for q qbar -> Q Qbar (Q = c, b or t).
496 
498 
499 public:
500 
501  // Constructor.
502  Sigma2qqbar2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
503  topModel(), topAngles(), topAnglesNow(), nameSave(), sigma(),
504  openFracPair(), qqSingletFrac(), eBegDamp(), eEndDamp() {}
505 
506  // Initialize process.
507  virtual void initProc();
508 
509  // Calculate flavour-independent parts of cross section.
510  virtual void sigmaKin();
511 
512  // Evaluate d(sigmaHat)/d(tHat).
513  virtual double sigmaHat() {return sigma;}
514 
515  // Select flavour, colour and anticolour.
516  virtual void setIdColAcol();
517 
518  // Evaluate weight for W decay angles in top decay (else inactive).
519  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
520 
521  // Info on the subprocess.
522  virtual string name() const {return nameSave;}
523  virtual int code() const {return codeSave;}
524  virtual string inFlux() const {return "qqbarSame";}
525  virtual int id3Mass() const {return idNew;}
526  virtual int id4Mass() const {return idNew;}
527 
528  private:
529 
530  // Values stored for process type.
531  int idNew, codeSave, topModel;
532  bool topAngles, topAnglesNow;
533  string nameSave;
534  double sigma, openFracPair, qqSingletFrac, eBegDamp, eEndDamp;
535 
536  // Class for top threshold corrections.
537  TopThreshold topThreshold;
538 
539 };
540 
541 //==========================================================================
542 
543 // A derived class for g g -> g g g.
544 
545 class Sigma3gg2ggg : public Sigma3Process {
546 
547 public:
548 
549  // Constructor.
550  Sigma3gg2ggg() : sigma(), pp() {}
551 
552  // Calculate flavour-independent parts of cross section.
553  virtual void sigmaKin();
554 
555  // Evaluate d(sigmaHat)/d(tHat).
556  virtual double sigmaHat() {return sigma;}
557 
558  // Select flavour, colour and anticolour.
559  virtual void setIdColAcol();
560 
561  // Info on the subprocess.
562  virtual string name() const {return "g g -> g g g";}
563  virtual int code() const {return 131;}
564  virtual int nFinal() const {return 3;}
565  virtual string inFlux() const {return "gg";}
566  virtual bool isQCD3body() const {return true;}
567 
568 private:
569 
570  // Values stored for colour flow selection.
571  double sigma;
572 
573  // Intermediate storage and calculation of four-products.
574  double pp[6][6];
575  double cycle(int i1, int i2, int i3, int i4, int i5) {return
576  pp[i1][i2] * pp[i2][i3] * pp[i3][i4] * pp[i4][i5] * pp[i5][i1];}
577 
578 };
579 
580 //==========================================================================
581 
582 // A derived class for q qbar -> g g g.
583 
585 
586 public:
587 
588  // Constructor.
589  Sigma3qqbar2ggg() : config(), a(), b(), pp(), ab(), sigma() {}
590 
591  // Calculate flavour-independent parts of cross section.
592  virtual void sigmaKin();
593 
594  // Evaluate d(sigmaHat)/d(tHat).
595  virtual double sigmaHat() {return sigma;}
596 
597  // Select flavour, colour and anticolour.
598  virtual void setIdColAcol();
599 
600  // Info on the subprocess.
601  virtual string name() const {return "q qbar -> g g g";}
602  virtual int code() const {return 132;}
603  virtual int nFinal() const {return 3;}
604  virtual string inFlux() const {return "qqbarSame";}
605  virtual bool isQCD3body() const {return true;}
606 
607 protected:
608 
609  // Pick/map a random final state configuration
610  int config;
611  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
612  inline void mapFinal();
613 
614  // |M|^2 calculation
615  inline double m2Calc();
616 
617  // Four-vectors for |M|^2 calculation
618  Vec4 pCM[5];
619 
620  // Intermediate storage and calculation of four-products
621  double a[3], b[3], pp[3][3], ab[3][3];
622 
623  // Values stored for colour flow selection.
624  double sigma;
625 
626 };
627 
628 //==========================================================================
629 
630 // A derived class for q g -> q g g
631 // Derived from Sigma3qqbar2ggg
632 
634 
635 public:
636 
637  // Constructor.
638  Sigma3qg2qgg() : sigma() {}
639 
640  // Calculate flavour-independent parts of cross section.
641  virtual void sigmaKin();
642 
643  // Evaluate d(sigmaHat)/d(tHat).
644  virtual double sigmaHat();
645 
646  // Select flavour, colour and anticolour.
647  virtual void setIdColAcol();
648 
649  // Info on the subprocess.
650  virtual string name() const {return "q g -> q g g";}
651  virtual int code() const {return 133;}
652  virtual int nFinal() const {return 3;}
653  virtual string inFlux() const {return "qg";}
654  virtual bool isQCD3body() const {return true;}
655 
656 private:
657 
658  // Sigma for (qg) and (gq) incoming
659  double sigma[2];
660 
661 };
662 
663 //==========================================================================
664 
665 // A derived class for g g -> q qbar g
666 // Derived from Sigma3qqbar2ggg
667 
669 
670 public:
671 
672  // Constructor.
673  Sigma3gg2qqbarg() : nQuarkNew() {}
674 
675  // Initialize process.
676  virtual void initProc();
677 
678  // Calculate flavour-independent parts of cross section.
679  virtual void sigmaKin();
680 
681  // Select flavour, colour and anticolour.
682  virtual void setIdColAcol();
683 
684  // Info on the subprocess.
685  virtual string name() const {return "g g -> q qbar g";}
686  virtual int code() const {return 138;}
687  virtual int nFinal() const {return 3;}
688  virtual string inFlux() const {return "gg";}
689  virtual bool isQCD3body() const {return true;}
690 
691 private:
692 
693  // Number of quarks to be considered in massless approximation.
694  int nQuarkNew;
695 
696 };
697 
698 //==========================================================================
699 
700 // A derived class for q q' -> q q' g
701 
703 
704 public:
705 
706  // Constructor.
707  Sigma3qq2qqgDiff() : config(), s(), t(), u(), sp(), tp(), up(), sigma() {}
708 
709  // Calculate flavour-independent parts of cross section.
710  virtual void sigmaKin();
711 
712  // Evaluate d(sigmaHat)/d(tHat).
713  virtual double sigmaHat();
714 
715  // Select flavour, colour and anticolour.
716  virtual void setIdColAcol();
717 
718  // Info on the subprocess.
719  virtual string name() const
720  {return "q(bar) q(bar)' -> q(bar) q(bar)' g";}
721  virtual int code() const {return 134;}
722  virtual int nFinal() const {return 3;}
723  virtual string inFlux() const {return "qq";}
724  virtual bool isQCD3body() const {return true;}
725 
726 protected:
727 
728  // Pick/map a random final state configuration
729  int config;
730  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
731  inline void mapFinal();
732 
733  // |M|^2 calculation
734  inline double m2Calc();
735 
736  // Kinematic configuration
737  Vec4 pCM[5];
738 
739  // Four-products
740  double s, t, u, sp, tp, up;
741 
742  // Cross section
743  double sigma;
744 
745 };
746 
747 //==========================================================================
748 
749 // A derived class for q qbar -> q' qbar' g
750 // Derived from Sigma3qq2qqgDiff
751 
753 
754 public:
755 
756  // Constructor.
757  Sigma3qqbar2qqbargDiff() : nQuarkNew() {}
758 
759  // Initialize process.
760  virtual void initProc();
761 
762  // Calculate flavour-independent parts of cross section.
763  virtual void sigmaKin();
764 
765  // Evaluate d(sigmaHat)/d(tHat).
766  virtual double sigmaHat() {return sigma;}
767 
768  // Select flavour, colour and anticolour.
769  virtual void setIdColAcol();
770 
771  // Info on the subprocess.
772  virtual string name() const {return "q qbar -> q' qbar' g";}
773  virtual int code() const {return 136;}
774  virtual int nFinal() const {return 3;}
775  virtual string inFlux() const {return "qqbarSame";}
776  virtual bool isQCD3body() const {return true;}
777 
778 private:
779 
780  // Number of quarks to be considered in massless approximation.
781  int nQuarkNew;
782 
783 };
784 
785 //==========================================================================
786 
787 // A derived class for q g -> q q' qbar'
788 // Derived from Sigma3qq2qqgDiff
789 
791 
792 public:
793 
794  // Constructor.
795  Sigma3qg2qqqbarDiff() : nQuarkNew(), sigma() {}
796 
797  // Initialize process.
798  virtual void initProc();
799 
800  // Calculate flavour-independent parts of cross section.
801  virtual void sigmaKin();
802 
803  // Evaluate d(sigmaHat)/d(tHat).
804  virtual double sigmaHat();
805 
806  // Select flavour, colour and anticolour.
807  virtual void setIdColAcol();
808 
809  // Info on the subprocess.
810  virtual string name() const {return "q g -> q q' qbar'";}
811  virtual int code() const {return 139;}
812  virtual int nFinal() const {return 3;}
813  virtual string inFlux() const {return "qg";}
814  virtual bool isQCD3body() const {return true;}
815 
816 private:
817 
818  // Number of quarks to be considered in massless approximation.
819  int nQuarkNew;
820 
821  // gq and qg incoming
822  double sigma[2];
823 
824 };
825 
826 //==========================================================================
827 
828 // A derived class for q q -> q q g
829 
831 
832 public:
833 
834  // Constructor.
835  Sigma3qq2qqgSame() : config(), s(), t(), u(), sp(), tp(), up(), ssp(),
836  ttp(), uup(), s_sp(), t_tp(), u_up(), sigma() {}
837 
838  // Calculate flavour-independent parts of cross section.
839  virtual void sigmaKin();
840 
841  // Evaluate d(sigmaHat)/d(tHat).
842  virtual double sigmaHat();
843 
844  // Select flavour, colour and anticolour.
845  virtual void setIdColAcol();
846 
847  // Info on the subprocess.
848  virtual string name() const
849  {return "q(bar) q(bar) -> q(bar) q(bar) g";}
850  virtual int code() const {return 135;}
851  virtual int nFinal() const {return 3;}
852  virtual string inFlux() const {return "qq";}
853  virtual bool isQCD3body() const {return true;}
854 
855 protected:
856 
857  // Pick/map a random final state configuration
858  int config;
859  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
860  inline void mapFinal();
861 
862  // |M|^2 calculation
863  inline double m2Calc();
864 
865  // Kinematic configuration
866  Vec4 pCM[5];
867 
868  // Four-products
869  double s, t, u, sp, tp, up;
870  double ssp, ttp, uup, s_sp, t_tp, u_up;
871 
872  // Cross section
873  double sigma;
874 
875 };
876 
877 //==========================================================================
878 
879 // A derived class for q q -> q q g
880 // Derived from Sigma3qq2qqgSame
881 
883 
884 public:
885 
886  // Constructor.
888 
889  // Calculate flavour-independent parts of cross section.
890  virtual void sigmaKin();
891 
892  // Evaluate d(sigmaHat)/d(tHat).
893  virtual double sigmaHat() {return sigma;}
894 
895  // Select flavour, colour and anticolour.
896  virtual void setIdColAcol();
897 
898  // Info on the subprocess.
899  virtual string name() const {return "q qbar -> q qbar g";}
900  virtual int code() const {return 137;}
901  virtual int nFinal() const {return 3;}
902  virtual string inFlux() const {return "qqbarSame";}
903  virtual bool isQCD3body() const {return true;}
904 
905 private:
906 
907 };
908 
909 //==========================================================================
910 
911 // A derived class for q g -> q qbar q; same flavour.
912 // Derived from Sigma3qq2qqgSame
913 
915 
916 public:
917 
918  // Constructor.
919  Sigma3qg2qqqbarSame() : sigma() {}
920 
921  // Calculate flavour-independent parts of cross section.
922  virtual void sigmaKin();
923 
924  // Evaluate d(sigmaHat)/d(tHat).
925  virtual double sigmaHat();
926 
927  // Select flavour, colour and anticolour.
928  virtual void setIdColAcol();
929 
930  // Info on the subprocess.
931  virtual string name() const {return "q g -> q q qbar";}
932  virtual int code() const {return 140;}
933  virtual int nFinal() const {return 3;}
934  virtual string inFlux() const {return "qg";}
935  virtual bool isQCD3body() const {return true;}
936 
937 private:
938 
939  // gq and qg incoming
940  double sigma[2];
941 
942 };
943 
944 //==========================================================================
945 
946 } // end namespace Pythia8
947 
948 #endif // Pythia8_SigmaQCD_H
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:62
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:601
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:562
Sigma2gg2qqbar()
Constructor.
Definition: SigmaQCD.h:225
TopThreshold()
Trivial constructor and destructor.
Definition: SigmaQCD.h:404
virtual void sigmaKin()
Calculate flavour-independent parts of cross section.
Definition: SigmaProcess.h:132
A derived class for q qbar -> g g g.
Definition: SigmaQCD.h:584
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:848
Sigma0AB2XB()
Constructor.
Definition: SigmaQCD.h:79
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:138
double sigmaPartial(int id1, int id2, double eCM12, double m1, double m2, int type, int mixLoHi=0)
Get partial cross sections.
Definition: SigmaLowEnergy.cc:1563
A derived class for elastic scattering A B -> A B.
Definition: SigmaQCD.h:47
Definition: SigmaQCD.h:882
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:899
Definition: StandardModel.h:23
Definition: SigmaQCD.h:914
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:145
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:652
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:513
Sigma3qq2qqgSame()
Constructor.
Definition: SigmaQCD.h:835
virtual bool isNonDiff() const
Special treatment needed for elastic and diffractive processes.
Definition: SigmaQCD.h:37
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:933
Sigma3qqbar2qqbargDiff()
Constructor.
Definition: SigmaQCD.h:757
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:280
The Event class holds all info on the generated event.
Definition: Event.h:408
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:851
A derived class for single diffractive scattering A B -> X B.
Definition: SigmaQCD.h:74
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:313
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:687
virtual double weightDecay(Event &, int, int)
Definition: SigmaProcess.h:172
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:564
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:35
Sigma3qqbar2ggg()
Constructor.
Definition: SigmaQCD.h:589
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:343
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:776
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:775
Definition: SigmaQCD.h:294
Definition: SigmaQCD.h:399
Sigma0AB2AX()
Constructor.
Definition: SigmaQCD.h:107
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:654
Rndm * rndmPtr
Pointer to the random number generator.
Definition: PhysicsBase.h:97
A derived class for g g -> q qbar (q = u, d, s, i.e. almost massless).
Definition: SigmaQCD.h:220
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:812
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:566
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:685
A derived class for g g -> g g.
Definition: SigmaQCD.h:188
Definition: SigmaQCD.h:668
A derived class for single diffractive scattering A B -> A X.
Definition: SigmaQCD.h:102
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:311
Sigma3gg2ggg()
Constructor.
Definition: SigmaQCD.h:550
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:199
Sigma3qg2qqqbarDiff()
Constructor.
Definition: SigmaQCD.h:795
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:605
Sigma0AB2AXB()
Constructor.
Definition: SigmaQCD.h:164
Sigma2gg2gg()
Constructor.
Definition: SigmaQCD.h:193
Sigma3qq2qqgDiff()
Constructor.
Definition: SigmaQCD.h:707
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:207
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:167
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:278
Definition: SigmaQCD.h:633
A derived class for double diffractive scattering A B -> X X.
Definition: SigmaQCD.h:130
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:810
A derived class for q qbar -> g g.
Definition: SigmaQCD.h:326
A derived class for g g -> g g g.
Definition: SigmaQCD.h:545
Sigma2qg2qg()
Constructor.
Definition: SigmaQCD.h:266
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:723
Definition: SigmaProcess.h:551
double s
Four-products.
Definition: SigmaQCD.h:740
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:653
Definition: SigmaProcess.h:407
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:931
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:110
Sigma3qg2qqqbarSame()
Constructor.
Definition: SigmaQCD.h:919
A derived class for g g -> Q Qbar (Q = c, b or t).
Definition: SigmaQCD.h:447
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:176
double sigmaXB() const
Integrated diffractive cross sections.
Definition: SigmaTotal.h:181
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:82
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:650
A derived class for q qbar -> Q Qbar (Q = c, b or t).
Definition: SigmaQCD.h:497
Sigma2gg2QQbar(int idIn, int codeIn)
Constructor.
Definition: SigmaQCD.h:452
Sigma2qqbar2qqbarNew()
Constructor.
Definition: SigmaQCD.h:363
Sigma2qqbar2QQbar(int idIn, int codeIn)
Constructor.
Definition: SigmaQCD.h:502
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:117
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:381
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:524
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:902
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:565
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:89
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:55
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:337
Definition: SigmaProcess.h:485
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:373
virtual int id3Mass() const
Definition: SigmaQCD.h:525
double s
Four-products.
Definition: SigmaQCD.h:869
Definition: Basics.h:490
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:934
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:935
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:272
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:724
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:903
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:522
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:241
double sigma
Values stored for colour flow selection.
Definition: SigmaQCD.h:624
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:853
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:603
A derived class for minimum-bias (inelastic, nondiffractive) events.
Definition: SigmaQCD.h:20
Sigma3qg2qgg()
Constructor.
Definition: SigmaQCD.h:638
double sigma
Cross section.
Definition: SigmaQCD.h:873
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:556
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:813
Sigma0AB2AB()
Constructor.
Definition: SigmaQCD.h:52
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:774
double weightTopDecay(Event &process, int iResBeg, int iResEnd)
Common code for top and Higgs secondary decay angular weights.
Definition: SigmaProcess.cc:555
Sigma0AB2XX()
Constructor.
Definition: SigmaQCD.h:135
A derived class for q qbar -> q' qbar'.
Definition: SigmaQCD.h:358
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:235
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:852
Definition: SigmaQCD.h:261
int config
Pick/map a random final state configuration.
Definition: SigmaQCD.h:858
Sigma2qqbar2gg()
Constructor.
Definition: SigmaQCD.h:331
Info * infoPtr
Definition: PhysicsBase.h:82
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:379
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:345
int config
Pick/map a random final state configuration.
Definition: SigmaQCD.h:610
Sigma3gg2qqbarg()
Constructor.
Definition: SigmaQCD.h:673
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:689
Definition: SigmaQCD.h:790
Sigma0nonDiffractive()
Constructor.
Definition: SigmaQCD.h:25
virtual int id3Mass() const
Definition: SigmaQCD.h:476
double sigma
Cross section.
Definition: SigmaQCD.h:743
double flat()
Generate next random number uniformly between 0 and 1.
Definition: Basics.cc:189
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:205
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:722
Sigma2qq2qq()
Constructor.
Definition: SigmaQCD.h:299
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:688
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:595
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:174
A derived class for central diffractive scattering A B -> A X B.
Definition: SigmaQCD.h:159
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:719
Definition: SigmaQCD.h:752
Sigma3qqbar2qqbargSame()
Constructor.
Definition: SigmaQCD.h:887
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaQCD.h:814
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:464
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:772
virtual void setIdColAcol()
Select flavour, colour and anticolour.
Definition: SigmaQCD.h:32
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:243
virtual double sigmaHat()
Evaluate sigma.
Definition: SigmaQCD.h:28
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaQCD.h:901
bool doVarE
Initialization data, normally only set once.
Definition: SigmaProcess.h:315
Definition: Basics.h:32
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:766
A derived class for q q' -> q q' g.
Definition: SigmaQCD.h:702
virtual void initProc()
Initialize process. Only used for some processes.
Definition: SigmaProcess.h:105
SigmaTotal * sigmaTotPtr
Pointers to the total/elastic/diffractive cross sections.
Definition: PhysicsBase.h:119
A derived class for q q -> q q g.
Definition: SigmaQCD.h:830
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat).
Definition: SigmaQCD.h:893
int idA
Information on incoming beams.
Definition: SigmaProcess.h:327
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:604
virtual string name() const
Info on the subprocess.
Definition: SigmaQCD.h:473
int config
Pick/map a random final state configuration.
Definition: SigmaQCD.h:729
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaQCD.h:475