LCOV - code coverage report
Current view: top level - PYTHIA8/pythia8210dev/include/Pythia8 - SigmaQCD.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 173 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 244 0.0 %

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

Generated by: LCOV version 1.11