StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SigmaQCD.h
1 // SigmaQCD.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2020 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 
20 class Sigma0nonDiffractive : public Sigma0Process {
21 
22 public:
23 
24  // Constructor.
25  Sigma0nonDiffractive() {}
26 
27  // Evaluate sigma.
28  virtual double sigmaHat() {return sigmaTotPtr->sigmaND();}
29 
30  // Select flavour, colour and anticolour.
31  virtual void setIdColAcol() {}
32 
33  // Info on the subprocess.
34  virtual string name() const {return "non-diffractive";}
35  virtual int code() const {return 101;}
36  virtual bool isNonDiff() const {return true;}
37 
38 private:
39 
40 };
41 
42 //==========================================================================
43 
44 // A derived class for elastic scattering A B -> A B.
45 
46 class Sigma0AB2AB : public Sigma0Process {
47 
48 public:
49 
50  // Constructor.
51  Sigma0AB2AB() {}
52 
53  // Evaluate sigma.
54  virtual double sigmaHat() {return sigmaTotPtr->sigmaEl();}
55 
56  // Select flavour, colour and anticolour.
57  virtual void setIdColAcol();
58 
59  // Info on the subprocess.
60  virtual string name() const {return "A B -> A B elastic";}
61  virtual int code() const {return 102;}
62  virtual bool isResolved() const {return false;}
63 
64 private:
65 
66 };
67 
68 //==========================================================================
69 
70 // A derived class for single diffractive scattering A B -> X B.
71 
72 class Sigma0AB2XB : public Sigma0Process {
73 
74 public:
75 
76  // Constructor.
77  Sigma0AB2XB() {}
78 
79  // Evaluate sigma.
80  virtual double sigmaHat() {return sigmaTotPtr->sigmaXB();}
81 
82  // Select flavour, colour and anticolour.
83  virtual void setIdColAcol();
84 
85  // Info on the subprocess.
86  virtual string name() const {return "A B -> X B single diffractive";}
87  virtual int code() const {return 103;}
88  virtual bool isResolved() const {return false;}
89  virtual bool isDiffA() const {return true;};
90 
91 private:
92 
93 };
94 
95 //==========================================================================
96 
97 // A derived class for single diffractive scattering A B -> A X.
98 
99 class Sigma0AB2AX : public Sigma0Process {
100 
101 public:
102 
103  // Constructor.
104  Sigma0AB2AX() {}
105 
106  // Evaluate sigma.
107  virtual double sigmaHat() {return sigmaTotPtr->sigmaAX();}
108 
109  // Select flavour, colour and anticolour.
110  virtual void setIdColAcol();
111 
112  // Info on the subprocess.
113  virtual string name() const {return "A B -> A X single diffractive";}
114  virtual int code() const {return 104;}
115  virtual bool isResolved() const {return false;}
116  virtual bool isDiffB() const {return true;};
117 
118 private:
119 
120 };
121 
122 //==========================================================================
123 
124 // A derived class for double diffractive scattering A B -> X X.
125 
126 class Sigma0AB2XX : public Sigma0Process {
127 
128 public:
129 
130  // Constructor.
131  Sigma0AB2XX() {}
132 
133  // Evaluate sigma.
134  virtual double sigmaHat() {return sigmaTotPtr->sigmaXX();}
135 
136  // Select flavour, colour and anticolour.
137  virtual void setIdColAcol();
138 
139  // Info on the subprocess.
140  virtual string name() const {return "A B -> X X double diffractive";}
141  virtual int code() const {return 105;}
142  virtual bool isResolved() const {return false;}
143  virtual bool isDiffA() const {return true;};
144  virtual bool isDiffB() const {return true;};
145 
146 private:
147 
148 };
149 
150 //==========================================================================
151 
152 // A derived class for central diffractive scattering A B -> A X B.
153 
154 class Sigma0AB2AXB : public Sigma0Process {
155 
156 public:
157 
158  // Constructor.
159  Sigma0AB2AXB() {}
160 
161  // Evaluate sigma.
162  virtual double sigmaHat() {return sigmaTotPtr->sigmaAXB();}
163 
164  // Select flavour, colour and anticolour.
165  virtual void setIdColAcol();
166 
167  // Info on the subprocess.
168  virtual string name() const {return "A B -> A X B central diffractive";}
169  virtual int code() const {return 106;}
170  virtual int nFinal() const {return 3;}
171  virtual bool isResolved() const {return false;}
172  virtual bool isDiffC() const {return true;};
173 
174 private:
175 
176 };
177 
178 //==========================================================================
179 
180 // A derived class for g g -> g g.
181 
182 class Sigma2gg2gg : public Sigma2Process {
183 
184 public:
185 
186  // Constructor.
187  Sigma2gg2gg() : sigTS(), sigUS(), sigTU(), sigSum(), sigma() {}
188 
189  // Calculate flavour-independent parts of cross section.
190  virtual void sigmaKin();
191 
192  // Evaluate d(sigmaHat)/d(tHat).
193  virtual double sigmaHat() {return sigma;}
194 
195  // Select flavour, colour and anticolour.
196  virtual void setIdColAcol();
197 
198  // Info on the subprocess.
199  virtual string name() const {return "g g -> g g";}
200  virtual int code() const {return 111;}
201  virtual string inFlux() const {return "gg";}
202 
203 private:
204 
205  // Values stored for colour flow selection.
206  double sigTS, sigUS, sigTU, sigSum, sigma;
207 
208 };
209 
210 //==========================================================================
211 
212 // A derived class for g g -> q qbar (q = u, d, s, i.e. almost massless).
213 
214 class Sigma2gg2qqbar : public Sigma2Process {
215 
216 public:
217 
218  // Constructor.
219  Sigma2gg2qqbar() : nQuarkNew(), idNew(), mNew(), m2New(), sigTS(), sigUS(),
220  sigSum(), sigma() {}
221 
222  // Initialize process.
223  virtual void initProc();
224 
225  // Calculate flavour-independent parts of cross section.
226  virtual void sigmaKin();
227 
228  // Evaluate d(sigmaHat)/d(tHat).
229  virtual double sigmaHat() {return sigma;}
230 
231  // Select flavour, colour and anticolour.
232  virtual void setIdColAcol();
233 
234  // Info on the subprocess.
235  virtual string name() const {return "g g -> q qbar (uds)";}
236  virtual int code() const {return 112;}
237  virtual string inFlux() const {return "gg";}
238 
239 private:
240 
241  // Number of quarks to be considered in massless approximation.
242  int nQuarkNew;
243 
244  // Values stored for colour flow selection.
245  int idNew;
246  double mNew, m2New, sigTS, sigUS, sigSum, sigma;
247 
248 };
249 
250 //==========================================================================
251 
252 // A derived class for q g -> q g (q = u, d, s, c, b).
253 // Use massless approximation also for Q since no alternative.
254 
255 class Sigma2qg2qg : public Sigma2Process {
256 
257 public:
258 
259  // Constructor.
260  Sigma2qg2qg() : sigTS(), sigTU(), sigSum(), sigma() {}
261 
262  // Calculate flavour-independent parts of cross section.
263  virtual void sigmaKin();
264 
265  // Evaluate d(sigmaHat)/d(tHat).
266  virtual double sigmaHat() {return sigma;}
267 
268  // Select flavour, colour and anticolour.
269  virtual void setIdColAcol();
270 
271  // Info on the subprocess.
272  virtual string name() const {return "q g -> q g";}
273  virtual int code() const {return 113;}
274  virtual string inFlux() const {return "qg";}
275 
276 private:
277 
278  // Values stored for colour flow selection.
279  double sigTS, sigTU, sigSum, sigma;
280 
281 };
282 
283 //==========================================================================
284 
285 // A derived class for q qbar' -> q qbar' or q q' -> q q'
286 // (qbar qbar' -> qbar qbar'), q' may be same as q.
287 
288 class Sigma2qq2qq : public Sigma2Process {
289 
290 public:
291 
292  // Constructor.
293  Sigma2qq2qq() : sigT(), sigU(), sigTU(), sigST(), sigSum() {}
294 
295  // Calculate flavour-independent parts of cross section.
296  virtual void sigmaKin();
297 
298  // Evaluate d(sigmaHat)/d(tHat).
299  virtual double sigmaHat();
300 
301  // Select flavour, colour and anticolour.
302  virtual void setIdColAcol();
303 
304  // Info on the subprocess.
305  virtual string name() const {return "q q(bar)' -> q q(bar)'";}
306  virtual int code() const {return 114;}
307  virtual string inFlux() const {return "qq";}
308 
309  private:
310 
311  // Values stored for colour flow selection.
312  double sigT, sigU, sigTU, sigST, sigSum;
313 
314 };
315 
316 //==========================================================================
317 
318 // A derived class for q qbar -> g g.
319 
320 class Sigma2qqbar2gg : public Sigma2Process {
321 
322 public:
323 
324  // Constructor.
325  Sigma2qqbar2gg() : sigTS(), sigUS(), sigSum(), sigma() {}
326 
327  // Calculate flavour-independent parts of cross section.
328  virtual void sigmaKin();
329 
330  // Evaluate d(sigmaHat)/d(tHat).
331  virtual double sigmaHat() {return sigma;}
332 
333  // Select flavour, colour and anticolour.
334  virtual void setIdColAcol();
335 
336  // Info on the subprocess.
337  virtual string name() const {return "q qbar -> g g";}
338  virtual int code() const {return 115;}
339  virtual string inFlux() const {return "qqbarSame";}
340 
341  private:
342 
343  // Values stored for colour flow selection.
344  double sigTS, sigUS, sigSum, sigma;
345 
346 };
347 
348 //==========================================================================
349 
350 // A derived class for q qbar -> q' qbar'.
351 
352 class Sigma2qqbar2qqbarNew : public Sigma2Process {
353 
354 public:
355 
356  // Constructor.
357  Sigma2qqbar2qqbarNew() : nQuarkNew(), idNew(), mNew(), m2New(), sigS(),
358  sigma() {}
359 
360  // Initialize process.
361  virtual void initProc();
362 
363  // Calculate flavour-independent parts of cross section.
364  virtual void sigmaKin();
365 
366  // Evaluate d(sigmaHat)/d(tHat).
367  virtual double sigmaHat() {return sigma;}
368 
369  // Select flavour, colour and anticolour.
370  virtual void setIdColAcol();
371 
372  // Info on the subprocess.
373  virtual string name() const {return "q qbar -> q' qbar' (uds)";}
374  virtual int code() const {return 116;}
375  virtual string inFlux() const {return "qqbarSame";}
376 
377  private:
378 
379  // Number of quarks to be considered in massless approximation.
380  int nQuarkNew;
381 
382  // Values stored for colour flow selection.
383  int idNew;
384  double mNew, m2New, sigS, sigma;
385 
386 };
387 
388 //==========================================================================
389 
390 // A derived class for g g -> Q Qbar (Q = c, b or t).
391 
392 class Sigma2gg2QQbar : public Sigma2Process {
393 
394 public:
395 
396  // Constructor.
397  Sigma2gg2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
398  sigTS(), sigUS(), sigSum(), sigma(), openFracPair() {}
399 
400  // Initialize process.
401  virtual void initProc();
402 
403  // Calculate flavour-independent parts of cross section.
404  virtual void sigmaKin();
405 
406  // Evaluate d(sigmaHat)/d(tHat).
407  virtual double sigmaHat() {return sigma;}
408 
409  // Select flavour, colour and anticolour.
410  virtual void setIdColAcol();
411 
412  // Evaluate weight for W decay angles in top decay (else inactive).
413  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
414 
415  // Info on the subprocess.
416  virtual string name() const {return nameSave;}
417  virtual int code() const {return codeSave;}
418  virtual string inFlux() const {return "gg";}
419  virtual int id3Mass() const {return idNew;}
420  virtual int id4Mass() const {return idNew;}
421 
422  private:
423 
424  // Values stored for process type and colour flow selection.
425  int idNew, codeSave;
426  string nameSave;
427  double sigTS, sigUS, sigSum, sigma, openFracPair;
428 
429 };
430 
431 //==========================================================================
432 
433 // A derived class for q qbar -> Q Qbar (Q = c, b or t).
434 
435 class Sigma2qqbar2QQbar : public Sigma2Process {
436 
437 public:
438 
439  // Constructor.
440  Sigma2qqbar2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
441  sigma(), openFracPair() {}
442 
443  // Initialize process.
444  virtual void initProc();
445 
446  // Calculate flavour-independent parts of cross section.
447  virtual void sigmaKin();
448 
449  // Evaluate d(sigmaHat)/d(tHat).
450  virtual double sigmaHat() {return sigma;}
451 
452  // Select flavour, colour and anticolour.
453  virtual void setIdColAcol();
454 
455  // Evaluate weight for W decay angles in top decay (else inactive).
456  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
457 
458  // Info on the subprocess.
459  virtual string name() const {return nameSave;}
460  virtual int code() const {return codeSave;}
461  virtual string inFlux() const {return "qqbarSame";}
462  virtual int id3Mass() const {return idNew;}
463  virtual int id4Mass() const {return idNew;}
464 
465  private:
466 
467  // Values stored for process type.
468  int idNew, codeSave;
469  string nameSave;
470  double sigma, openFracPair;
471 
472 };
473 
474 //==========================================================================
475 
476 // A derived class for g g -> g g g.
477 
478 class Sigma3gg2ggg : public Sigma3Process {
479 
480 public:
481 
482  // Constructor.
483  Sigma3gg2ggg() : sigma(), pp() {}
484 
485  // Calculate flavour-independent parts of cross section.
486  virtual void sigmaKin();
487 
488  // Evaluate d(sigmaHat)/d(tHat).
489  virtual double sigmaHat() {return sigma;}
490 
491  // Select flavour, colour and anticolour.
492  virtual void setIdColAcol();
493 
494  // Info on the subprocess.
495  virtual string name() const {return "g g -> g g g";}
496  virtual int code() const {return 131;}
497  virtual int nFinal() const {return 3;}
498  virtual string inFlux() const {return "gg";}
499  virtual bool isQCD3body() const {return true;}
500 
501 private:
502 
503  // Values stored for colour flow selection.
504  double sigma;
505 
506  // Intermediate storage and calculation of four-products.
507  double pp[6][6];
508  double cycle(int i1, int i2, int i3, int i4, int i5) {return
509  pp[i1][i2] * pp[i2][i3] * pp[i3][i4] * pp[i4][i5] * pp[i5][i1];}
510 
511 };
512 
513 //==========================================================================
514 
515 // A derived class for q qbar -> g g g.
516 
517 class Sigma3qqbar2ggg : public Sigma3Process {
518 
519 public:
520 
521  // Constructor.
522  Sigma3qqbar2ggg() : config(), a(), b(), pp(), ab(), sigma() {}
523 
524  // Calculate flavour-independent parts of cross section.
525  virtual void sigmaKin();
526 
527  // Evaluate d(sigmaHat)/d(tHat).
528  virtual double sigmaHat() {return sigma;}
529 
530  // Select flavour, colour and anticolour.
531  virtual void setIdColAcol();
532 
533  // Info on the subprocess.
534  virtual string name() const {return "q qbar -> g g g";}
535  virtual int code() const {return 132;}
536  virtual int nFinal() const {return 3;}
537  virtual string inFlux() const {return "qqbarSame";}
538  virtual bool isQCD3body() const {return true;}
539 
540 protected:
541 
542  // Pick/map a random final state configuration
543  int config;
544  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
545  inline void mapFinal();
546 
547  // |M|^2 calculation
548  inline double m2Calc();
549 
550  // Four-vectors for |M|^2 calculation
551  Vec4 pCM[5];
552 
553  // Intermediate storage and calculation of four-products
554  double a[3], b[3], pp[3][3], ab[3][3];
555 
556  // Values stored for colour flow selection.
557  double sigma;
558 
559 };
560 
561 //==========================================================================
562 
563 // A derived class for q g -> q g g
564 // Derived from Sigma3qqbar2ggg
565 
566 class Sigma3qg2qgg : public Sigma3qqbar2ggg {
567 
568 public:
569 
570  // Constructor.
571  Sigma3qg2qgg() : sigma() {}
572 
573  // Calculate flavour-independent parts of cross section.
574  virtual void sigmaKin();
575 
576  // Evaluate d(sigmaHat)/d(tHat).
577  virtual double sigmaHat();
578 
579  // Select flavour, colour and anticolour.
580  virtual void setIdColAcol();
581 
582  // Info on the subprocess.
583  virtual string name() const {return "q g -> q g g";}
584  virtual int code() const {return 133;}
585  virtual int nFinal() const {return 3;}
586  virtual string inFlux() const {return "qg";}
587  virtual bool isQCD3body() const {return true;}
588 
589 private:
590 
591  // Sigma for (qg) and (gq) incoming
592  double sigma[2];
593 
594 };
595 
596 //==========================================================================
597 
598 // A derived class for g g -> q qbar g
599 // Derived from Sigma3qqbar2ggg
600 
601 class Sigma3gg2qqbarg : public Sigma3qqbar2ggg {
602 
603 public:
604 
605  // Constructor.
606  Sigma3gg2qqbarg() : nQuarkNew() {}
607 
608  // Initialize process.
609  virtual void initProc();
610 
611  // Calculate flavour-independent parts of cross section.
612  virtual void sigmaKin();
613 
614  // Select flavour, colour and anticolour.
615  virtual void setIdColAcol();
616 
617  // Info on the subprocess.
618  virtual string name() const {return "g g -> q qbar g";}
619  virtual int code() const {return 138;}
620  virtual int nFinal() const {return 3;}
621  virtual string inFlux() const {return "gg";}
622  virtual bool isQCD3body() const {return true;}
623 
624 private:
625 
626  // Number of quarks to be considered in massless approximation.
627  int nQuarkNew;
628 
629 };
630 
631 //==========================================================================
632 
633 // A derived class for q q' -> q q' g
634 
635 class Sigma3qq2qqgDiff : public Sigma3Process {
636 
637 public:
638 
639  // Constructor.
640  Sigma3qq2qqgDiff() : config(), s(), t(), u(), sp(), tp(), up(), sigma() {}
641 
642  // Calculate flavour-independent parts of cross section.
643  virtual void sigmaKin();
644 
645  // Evaluate d(sigmaHat)/d(tHat).
646  virtual double sigmaHat();
647 
648  // Select flavour, colour and anticolour.
649  virtual void setIdColAcol();
650 
651  // Info on the subprocess.
652  virtual string name() const
653  {return "q(bar) q(bar)' -> q(bar) q(bar)' g";}
654  virtual int code() const {return 134;}
655  virtual int nFinal() const {return 3;}
656  virtual string inFlux() const {return "qq";}
657  virtual bool isQCD3body() const {return true;}
658 
659 protected:
660 
661  // Pick/map a random final state configuration
662  int config;
663  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
664  inline void mapFinal();
665 
666  // |M|^2 calculation
667  inline double m2Calc();
668 
669  // Kinematic configuration
670  Vec4 pCM[5];
671 
672  // Four-products
673  double s, t, u, sp, tp, up;
674 
675  // Cross section
676  double sigma;
677 
678 };
679 
680 //==========================================================================
681 
682 // A derived class for q qbar -> q' qbar' g
683 // Derived from Sigma3qq2qqgDiff
684 
685 class Sigma3qqbar2qqbargDiff : public Sigma3qq2qqgDiff {
686 
687 public:
688 
689  // Constructor.
690  Sigma3qqbar2qqbargDiff() : nQuarkNew() {}
691 
692  // Initialize process.
693  virtual void initProc();
694 
695  // Calculate flavour-independent parts of cross section.
696  virtual void sigmaKin();
697 
698  // Evaluate d(sigmaHat)/d(tHat).
699  virtual double sigmaHat() {return sigma;}
700 
701  // Select flavour, colour and anticolour.
702  virtual void setIdColAcol();
703 
704  // Info on the subprocess.
705  virtual string name() const {return "q qbar -> q' qbar' g";}
706  virtual int code() const {return 136;}
707  virtual int nFinal() const {return 3;}
708  virtual string inFlux() const {return "qqbarSame";}
709  virtual bool isQCD3body() const {return true;}
710 
711 private:
712 
713  // Number of quarks to be considered in massless approximation.
714  int nQuarkNew;
715 
716 };
717 
718 //==========================================================================
719 
720 // A derived class for q g -> q q' qbar'
721 // Derived from Sigma3qq2qqgDiff
722 
723 class Sigma3qg2qqqbarDiff : public Sigma3qq2qqgDiff {
724 
725 public:
726 
727  // Constructor.
728  Sigma3qg2qqqbarDiff() : nQuarkNew(), sigma() {}
729 
730  // Initialize process.
731  virtual void initProc();
732 
733  // Calculate flavour-independent parts of cross section.
734  virtual void sigmaKin();
735 
736  // Evaluate d(sigmaHat)/d(tHat).
737  virtual double sigmaHat();
738 
739  // Select flavour, colour and anticolour.
740  virtual void setIdColAcol();
741 
742  // Info on the subprocess.
743  virtual string name() const {return "q g -> q q' qbar'";}
744  virtual int code() const {return 139;}
745  virtual int nFinal() const {return 3;}
746  virtual string inFlux() const {return "qg";}
747  virtual bool isQCD3body() const {return true;}
748 
749 private:
750 
751  // Number of quarks to be considered in massless approximation.
752  int nQuarkNew;
753 
754  // gq and qg incoming
755  double sigma[2];
756 
757 };
758 
759 //==========================================================================
760 
761 // A derived class for q q -> q q g
762 
763 class Sigma3qq2qqgSame : public Sigma3Process {
764 
765 public:
766 
767  // Constructor.
768  Sigma3qq2qqgSame() : config(), s(), t(), u(), sp(), tp(), up(), ssp(),
769  ttp(), uup(), s_sp(), t_tp(), u_up(), sigma() {}
770 
771  // Calculate flavour-independent parts of cross section.
772  virtual void sigmaKin();
773 
774  // Evaluate d(sigmaHat)/d(tHat).
775  virtual double sigmaHat();
776 
777  // Select flavour, colour and anticolour.
778  virtual void setIdColAcol();
779 
780  // Info on the subprocess.
781  virtual string name() const
782  {return "q(bar) q(bar) -> q(bar) q(bar) g";}
783  virtual int code() const {return 135;}
784  virtual int nFinal() const {return 3;}
785  virtual string inFlux() const {return "qq";}
786  virtual bool isQCD3body() const {return true;}
787 
788 protected:
789 
790  // Pick/map a random final state configuration
791  int config;
792  inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
793  inline void mapFinal();
794 
795  // |M|^2 calculation
796  inline double m2Calc();
797 
798  // Kinematic configuration
799  Vec4 pCM[5];
800 
801  // Four-products
802  double s, t, u, sp, tp, up;
803  double ssp, ttp, uup, s_sp, t_tp, u_up;
804 
805  // Cross section
806  double sigma;
807 
808 };
809 
810 //==========================================================================
811 
812 // A derived class for q q -> q q g
813 // Derived from Sigma3qq2qqgSame
814 
815 class Sigma3qqbar2qqbargSame : public Sigma3qq2qqgSame {
816 
817 public:
818 
819  // Constructor.
820  Sigma3qqbar2qqbargSame() {}
821 
822  // Calculate flavour-independent parts of cross section.
823  virtual void sigmaKin();
824 
825  // Evaluate d(sigmaHat)/d(tHat).
826  virtual double sigmaHat() {return sigma;}
827 
828  // Select flavour, colour and anticolour.
829  virtual void setIdColAcol();
830 
831  // Info on the subprocess.
832  virtual string name() const {return "q qbar -> q qbar g";}
833  virtual int code() const {return 137;}
834  virtual int nFinal() const {return 3;}
835  virtual string inFlux() const {return "qqbarSame";}
836  virtual bool isQCD3body() const {return true;}
837 
838 private:
839 
840 };
841 
842 //==========================================================================
843 
844 // A derived class for q g -> q qbar q; same flavour.
845 // Derived from Sigma3qq2qqgSame
846 
847 class Sigma3qg2qqqbarSame : public Sigma3qq2qqgSame {
848 
849 public:
850 
851  // Constructor.
852  Sigma3qg2qqqbarSame() : sigma() {}
853 
854  // Calculate flavour-independent parts of cross section.
855  virtual void sigmaKin();
856 
857  // Evaluate d(sigmaHat)/d(tHat).
858  virtual double sigmaHat();
859 
860  // Select flavour, colour and anticolour.
861  virtual void setIdColAcol();
862 
863  // Info on the subprocess.
864  virtual string name() const {return "q g -> q q qbar";}
865  virtual int code() const {return 140;}
866  virtual int nFinal() const {return 3;}
867  virtual string inFlux() const {return "qg";}
868  virtual bool isQCD3body() const {return true;}
869 
870 private:
871 
872  // gq and qg incoming
873  double sigma[2];
874 
875 };
876 
877 //==========================================================================
878 
879 } // end namespace Pythia8
880 
881 #endif // Pythia8_SigmaQCD_H
Definition: AgUStep.h:26