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

          Line data    Source code
       1             : // SigmaEW.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 electroweak process differential cross sections.
       7             : // Contains classes derived from SigmaProcess via Sigma(1/2)Process.
       8             : 
       9             : #ifndef Pythia8_SigmaEW_H
      10             : #define Pythia8_SigmaEW_H
      11             : 
      12             : #include "Pythia8/PythiaComplex.h"
      13             : #include "Pythia8/SigmaProcess.h"
      14             : 
      15             : namespace Pythia8 {
      16             : 
      17             : 
      18             : //==========================================================================
      19             : 
      20             : // A derived class for q g -> q gamma (q = u, d, s, c, b).
      21             : // Use massless approximation also for Q since no alternative.
      22             : 
      23           0 : class Sigma2qg2qgamma : public Sigma2Process {
      24             : 
      25             : public:
      26             : 
      27             :   // Constructor.
      28           0 :   Sigma2qg2qgamma() {}
      29             : 
      30             :   // Calculate flavour-independent parts of cross section.
      31             :   virtual void sigmaKin();
      32             : 
      33             :   // Evaluate d(sigmaHat)/d(tHat).
      34             :   virtual double sigmaHat();
      35             : 
      36             :   // Select flavour, colour and anticolour.
      37             :   virtual void setIdColAcol();
      38             : 
      39             :   // Info on the subprocess.
      40           0 :   virtual string name()   const {return "q g -> q gamma (udscb)";}
      41           0 :   virtual int    code()   const {return 201;}
      42           0 :   virtual string inFlux() const {return "qg";}
      43             : 
      44             : private:
      45             : 
      46             :   // Values stored for later use.
      47             :   double sigUS, sigma0;
      48             : 
      49             : };
      50             : 
      51             : //==========================================================================
      52             : 
      53             : // A derived class for q qbar -> g gamma.
      54             : 
      55           0 : class Sigma2qqbar2ggamma : public Sigma2Process {
      56             : 
      57             : public:
      58             : 
      59             :   // Constructor.
      60           0 :   Sigma2qqbar2ggamma() {}
      61             : 
      62             :   // Calculate flavour-independent parts of cross section.
      63             :   virtual void sigmaKin();
      64             : 
      65             :   // Evaluate d(sigmaHat)/d(tHat).
      66             :   virtual double sigmaHat();
      67             : 
      68             :   // Select flavour, colour and anticolour.
      69             :   virtual void setIdColAcol();
      70             : 
      71             :   // Info on the subprocess.
      72           0 :   virtual string name()   const {return "q qbar -> g gamma";}
      73           0 :   virtual int    code()   const {return 202;}
      74           0 :   virtual string inFlux() const {return "qqbarSame";}
      75             : 
      76             : private:
      77             : 
      78             :   // Values stored for later use.
      79             :   double sigma0;
      80             : 
      81             : };
      82             : 
      83             : //==========================================================================
      84             : 
      85             : // A derived class for g g -> g gamma.
      86             : 
      87           0 : class Sigma2gg2ggamma : public Sigma2Process {
      88             : 
      89             : public:
      90             : 
      91             :   // Constructor.
      92           0 :   Sigma2gg2ggamma() {}
      93             : 
      94             :   // Initialize process.
      95             :   virtual void initProc();
      96             : 
      97             :   // Calculate flavour-independent parts of cross section.
      98             :   virtual void sigmaKin();
      99             : 
     100             :   // Evaluate d(sigmaHat)/d(tHat).
     101           0 :   virtual double sigmaHat() {return sigma;}
     102             : 
     103             :   // Select flavour, colour and anticolour.
     104             :   virtual void setIdColAcol();
     105             : 
     106             :   // Info on the subprocess.
     107           0 :   virtual string name()   const {return "g g -> g gamma";}
     108           0 :   virtual int    code()   const {return 203;}
     109           0 :   virtual string inFlux() const {return "gg";}
     110             : 
     111             : private:
     112             : 
     113             :   // Values stored for later use.
     114             :   double chargeSum, sigma;
     115             : 
     116             : };
     117             : 
     118             : //==========================================================================
     119             : 
     120             : // A derived class for f fbar -> gamma gamma.
     121             : 
     122           0 : class Sigma2ffbar2gammagamma : public Sigma2Process {
     123             : 
     124             : public:
     125             : 
     126             :   // Constructor.
     127           0 :   Sigma2ffbar2gammagamma() {}
     128             : 
     129             :   // Calculate flavour-independent parts of cross section.
     130             :   virtual void sigmaKin();
     131             : 
     132             :   // Evaluate d(sigmaHat)/d(tHat).
     133             :   virtual double sigmaHat();
     134             : 
     135             :   // Select flavour, colour and anticolour.
     136             :   virtual void setIdColAcol();
     137             : 
     138             :   // Info on the subprocess.
     139           0 :   virtual string name()   const {return "f fbar -> gamma gamma";}
     140           0 :   virtual int    code()   const {return 204;}
     141           0 :   virtual string inFlux() const {return "ffbarSame";}
     142             : 
     143             : private:
     144             : 
     145             :   // Values stored for later use.
     146             :   double sigTU, sigma0;
     147             : 
     148             : };
     149             : 
     150             : //==========================================================================
     151             : 
     152             : // A derived class for g g -> gamma gamma.
     153             : 
     154           0 : class Sigma2gg2gammagamma : public Sigma2Process {
     155             : 
     156             : public:
     157             : 
     158             :   // Constructor.
     159           0 :   Sigma2gg2gammagamma() {}
     160             : 
     161             :   // Initialize process.
     162             :   virtual void initProc();
     163             : 
     164             :   // Calculate flavour-independent parts of cross section.
     165             :   virtual void sigmaKin();
     166             : 
     167             :   // Evaluate d(sigmaHat)/d(tHat).
     168           0 :   virtual double sigmaHat() {return sigma;}
     169             : 
     170             :   // Select flavour, colour and anticolour.
     171             :   virtual void setIdColAcol();
     172             : 
     173             :   // Info on the subprocess.
     174           0 :   virtual string name()   const {return "g g -> gamma gamma";}
     175           0 :   virtual int    code()   const {return 205;}
     176           0 :   virtual string inFlux() const {return "gg";}
     177             : 
     178             : private:
     179             : 
     180             :   double charge2Sum, sigma;
     181             : 
     182             : };
     183             : 
     184             : //==========================================================================
     185             : 
     186             : // A derived class for f f' -> f f' via t-channel gamma*/Z0 exchange.
     187             : 
     188           0 : class Sigma2ff2fftgmZ : public Sigma2Process {
     189             : 
     190             : public:
     191             : 
     192             :   // Constructor.
     193           0 :   Sigma2ff2fftgmZ() {}
     194             : 
     195             :   // Initialize process.
     196             :   virtual void initProc();
     197             : 
     198             :   // Calculate flavour-independent parts of cross section.
     199             :   virtual void sigmaKin();
     200             : 
     201             :   // Evaluate sigmaHat(sHat).
     202             :   virtual double sigmaHat();
     203             : 
     204             :   // Select flavour, colour and anticolour.
     205             :   virtual void setIdColAcol();
     206             : 
     207             :   // Info on the subprocess.
     208           0 :   virtual string name()   const {return "f f' -> f f' (t-channel gamma*/Z0)";}
     209           0 :   virtual int    code()   const {return 211;}
     210           0 :   virtual string inFlux() const {return "ff";}
     211             : 
     212             : private:
     213             : 
     214             :   //  Z parameters for propagator.
     215             :   int    gmZmode;
     216             :   double mZ, mZS, thetaWRat, sigmagmgm, sigmagmZ, sigmaZZ;
     217             : 
     218             : };
     219             : 
     220             : //==========================================================================
     221             : 
     222             : // A derived class for f_1 f_2 -> f_3 f_4 via t-channel W+- exchange.
     223             : 
     224           0 : class Sigma2ff2fftW : public Sigma2Process {
     225             : 
     226             : public:
     227             : 
     228             :   // Constructor.
     229           0 :   Sigma2ff2fftW() {}
     230             : 
     231             :   // Initialize process.
     232             :   virtual void initProc();
     233             : 
     234             :   // Calculate flavour-independent parts of cross section.
     235             :   virtual void sigmaKin();
     236             : 
     237             :   // Evaluate sigmaHat(sHat).
     238             :   virtual double sigmaHat();
     239             : 
     240             :   // Select flavour, colour and anticolour.
     241             :   virtual void setIdColAcol();
     242             : 
     243             :   // Info on the subprocess.
     244           0 :   virtual string name()   const {return "f_1 f_2 -> f_3 f_4 (t-channel W+-)";}
     245           0 :   virtual int    code()   const {return 212;}
     246           0 :   virtual string inFlux() const {return "ff";}
     247             : 
     248             : private:
     249             : 
     250             :   //  W parameters for propagator.
     251             :   double mW, mWS, thetaWRat, sigma0;
     252             : 
     253             : };
     254             : 
     255             : //==========================================================================
     256             : 
     257             : // A derived class for q q' -> Q q" via t-channel W+- exchange.
     258             : // Related to Sigma2ff2fftW class, but with massive matrix elements.
     259             : 
     260           0 : class Sigma2qq2QqtW : public Sigma2Process {
     261             : 
     262             : public:
     263             : 
     264             :   // Constructor.
     265           0 :   Sigma2qq2QqtW(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
     266             : 
     267             :   // Initialize process.
     268             :   virtual void initProc();
     269             : 
     270             :   // Calculate flavour-independent parts of cross section.
     271             :   virtual void sigmaKin();
     272             : 
     273             :   // Evaluate sigmaHat(sHat).
     274             :   virtual double sigmaHat();
     275             : 
     276             :   // Select flavour, colour and anticolour.
     277             :   virtual void setIdColAcol();
     278             : 
     279             :   // Evaluate weight for W decay angles in top decay (else inactive).
     280             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     281             : 
     282             :   // Info on the subprocess.
     283           0 :   virtual string name()    const {return nameSave;}
     284           0 :   virtual int    code()    const {return codeSave;}
     285           0 :   virtual string inFlux()  const {return "ff";}
     286           0 :   virtual int    id3Mass() const {return idNew;}
     287             : 
     288             : private:
     289             : 
     290             :   // Values stored for process type. W parameters for propagator.
     291             :   int    idNew, codeSave;
     292             :   string nameSave;
     293             :   double mW, mWS, thetaWRat, sigma0, openFracPos, openFracNeg;
     294             : 
     295             : };
     296             : 
     297             : //==========================================================================
     298             : 
     299             : // A derived class for f fbar -> gamma*/Z0.
     300             : 
     301           0 : class Sigma1ffbar2gmZ : public Sigma1Process {
     302             : 
     303             : public:
     304             : 
     305             :   // Constructor.
     306           0 :   Sigma1ffbar2gmZ() {}
     307             : 
     308             :   // Initialize process.
     309             :   virtual void initProc();
     310             : 
     311             :   // Calculate flavour-independent parts of cross section.
     312             :   virtual void sigmaKin();
     313             : 
     314             :   // Evaluate sigmaHat(sHat).
     315             :   virtual double sigmaHat();
     316             : 
     317             :   // Select flavour, colour and anticolour.
     318             :   virtual void setIdColAcol();
     319             : 
     320             :   // Evaluate weight for Z decay angle.
     321             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     322             : 
     323             :   // Info on the subprocess.
     324           0 :   virtual string name()       const {return "f fbar -> gamma*/Z0";}
     325           0 :   virtual int    code()       const {return 221;}
     326           0 :   virtual string inFlux()     const {return "ffbarSame";}
     327           0 :   virtual int    resonanceA() const {return 23;}
     328             : 
     329             : private:
     330             : 
     331             :   // Parameters set at initialization or for each new event.
     332             :   int    gmZmode;
     333             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat,
     334             :          gamSum, intSum, resSum, gamProp, intProp, resProp;
     335             : 
     336             :   // Pointer to properties of the particle species, to access decay channels.
     337             :   ParticleDataEntry* particlePtr;
     338             : 
     339             : };
     340             : 
     341             : //==========================================================================
     342             : 
     343             : // A derived class for f fbar' -> W+-.
     344             : 
     345           0 : class Sigma1ffbar2W : public Sigma1Process {
     346             : 
     347             : public:
     348             : 
     349             :   // Constructor.
     350           0 :   Sigma1ffbar2W() {}
     351             : 
     352             :   // Initialize process.
     353             :   virtual void initProc();
     354             : 
     355             :   // Calculate flavour-independent parts of cross section.
     356             :   virtual void sigmaKin();
     357             : 
     358             :   // Evaluate sigmaHat(sHat).
     359             :   virtual double sigmaHat();
     360             : 
     361             :   // Select flavour, colour and anticolour.
     362             :   virtual void setIdColAcol();
     363             : 
     364             :   // Evaluate weight for W decay angle.
     365             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     366             : 
     367             :   // Info on the subprocess.
     368           0 :   virtual string name()       const {return "f fbar' -> W+-";}
     369           0 :   virtual int    code()       const {return 222;}
     370           0 :   virtual string inFlux()     const {return "ffbarChg";}
     371           0 :   virtual int    resonanceA() const {return 24;}
     372             : 
     373             : private:
     374             : 
     375             :   // Parameters set at initialization.
     376             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0Pos, sigma0Neg;
     377             : 
     378             :   // Pointer to properties of the particle species, to access decay channels.
     379             :   ParticleDataEntry* particlePtr;
     380             : 
     381             : };
     382             : 
     383             : //==========================================================================
     384             : 
     385             : // A derived class for f fbar -> gamma* -> f' fbar', summed over light f'.
     386             : // Allows pT-ordered evolution for multiparton interactions.
     387             : 
     388           0 : class Sigma2ffbar2ffbarsgm : public Sigma2Process {
     389             : 
     390             : public:
     391             : 
     392             :   // Constructor.
     393           0 :   Sigma2ffbar2ffbarsgm() {}
     394             : 
     395             :   // Calculate flavour-independent parts of cross section.
     396             :   virtual void sigmaKin();
     397             : 
     398             :   // Evaluate sigmaHat(sHat).
     399             :   virtual double sigmaHat();
     400             : 
     401             :   // Select flavour, colour and anticolour.
     402             :   virtual void setIdColAcol();
     403             : 
     404             :   // Info on the subprocess.
     405             :   virtual string name()       const {
     406           0 :     return "f fbar -> f' fbar' (s-channel gamma*)";}
     407           0 :   virtual int    code()       const {return 223;}
     408           0 :   virtual string inFlux()     const {return "ffbarSame";}
     409           0 :   virtual bool   isSChannel() const {return true;}
     410             : 
     411             : private:
     412             : 
     413             :   // Values stored for later use.
     414             :   int    idNew;
     415             :   double sigma0;
     416             : 
     417             : };
     418             : 
     419             : //==========================================================================
     420             : 
     421             : // A derived class for f fbar -> gamma*/Z0 -> f' fbar', summed over light f.
     422             : 
     423           0 : class Sigma2ffbar2ffbarsgmZ : public Sigma2Process {
     424             : 
     425             : public:
     426             : 
     427             :   // Constructor.
     428           0 :   Sigma2ffbar2ffbarsgmZ() {}
     429             : 
     430             :   // Initialize process.
     431             :   virtual void initProc();
     432             : 
     433             :   // Calculate flavour-independent parts of cross section.
     434             :   virtual void sigmaKin();
     435             : 
     436             :   // Evaluate sigmaHat(sHat).
     437             :   virtual double sigmaHat();
     438             : 
     439             :   // Select flavour, colour and anticolour.
     440             :   virtual void setIdColAcol();
     441             : 
     442             :   // Info on the subprocess.
     443             :   virtual string name()       const {
     444           0 :     return "f fbar -> f' fbar' (s-channel gamma*/Z0)";}
     445           0 :   virtual int    code()       const {return 224;}
     446           0 :   virtual string inFlux()     const {return "ffbarSame";}
     447           0 :   virtual bool   isSChannel() const {return true;}
     448           0 :   virtual int    idSChannel() const {return 23;}
     449           0 :   virtual int    resonanceA() const {return 23;}
     450             : 
     451             : private:
     452             : 
     453             :   // Parameters set at initialization or for each new event.
     454             :   int    gmZmode;
     455             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat, colQ,
     456             :          gamSumT, gamSumL, intSumT, intSumL, intSumA, resSumT, resSumL,
     457             :          resSumA, gamProp, intProp, resProp, cThe;
     458             :   vector<int> idVec;
     459             :   vector<double> gamT, gamL, intT, intL, intA, resT, resL, resA, sigTLA;
     460             : 
     461             :   // Pointer to properties of the particle species, to access decay channels.
     462             :   ParticleDataEntry* particlePtr;
     463             : 
     464             : };
     465             : 
     466             : //==========================================================================
     467             : 
     468             : // A derived class for f_1 fbar_2 -> W+- -> f_3 fbar_4, summed over light f.
     469             : 
     470           0 : class Sigma2ffbar2ffbarsW : public Sigma2Process {
     471             : 
     472             : public:
     473             : 
     474             :   // Constructor.
     475           0 :   Sigma2ffbar2ffbarsW() {}
     476             : 
     477             :   // Initialize process.
     478             :   virtual void initProc();
     479             : 
     480             :   // Calculate flavour-independent parts of cross section.
     481             :   virtual void sigmaKin();
     482             : 
     483             :   // Evaluate sigmaHat(sHat).
     484             :   virtual double sigmaHat();
     485             : 
     486             :   // Select flavour, colour and anticolour.
     487             :   virtual void setIdColAcol();
     488             : 
     489             :   // Info on the subprocess.
     490             :   virtual string name()       const {
     491           0 :     return "f_1 fbar_2 -> f_3 fbar_4 (s-channel W+-)";}
     492           0 :   virtual int    code()       const {return 225;}
     493           0 :   virtual string inFlux()     const {return "ffbarChg";}
     494           0 :   virtual bool   isSChannel() const {return true;}
     495           0 :   virtual int    idSChannel() const {return 24;}
     496           0 :   virtual int    resonanceA() const {return 24;}
     497             : 
     498             : private:
     499             : 
     500             :   // Parameters set at initialization or stored for later use.
     501             :   int    id3New, id4New;
     502             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0;
     503             : 
     504             :   // Pointer to properties of the particle species, to access decay channels.
     505             :   ParticleDataEntry* particlePtr;
     506             : 
     507             : };
     508             : 
     509             : //==========================================================================
     510             : 
     511             : // A derived class for f fbar -> gamma*/Z0 -> F Fbar, for one heavy F.
     512             : // Allows pT cuts as for other 2 -> 2 processes.
     513             : 
     514           0 : class Sigma2ffbar2FFbarsgmZ : public Sigma2Process {
     515             : 
     516             : public:
     517             : 
     518             :   // Constructor.
     519           0 :   Sigma2ffbar2FFbarsgmZ(int idIn, int codeIn) : idNew(idIn),
     520           0 :     codeSave(codeIn) {}
     521             : 
     522             :   // Initialize process.
     523             :   virtual void initProc();
     524             : 
     525             :   // Calculate flavour-independent parts of cross section.
     526             :   virtual void sigmaKin();
     527             : 
     528             :   // Evaluate sigmaHat(sHat).
     529             :   virtual double sigmaHat();
     530             : 
     531             :   // Select flavour, colour and anticolour.
     532             :   virtual void setIdColAcol();
     533             : 
     534             :   // Evaluate weight for W decay angles in top decay (else inactive).
     535             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     536             : 
     537             :   // Info on the subprocess.
     538           0 :   virtual string name()       const {return nameSave;}
     539           0 :   virtual int    code()       const {return codeSave;}
     540           0 :   virtual string inFlux()     const {return "ffbarSame";}
     541           0 :   virtual bool   isSChannel() const {return true;}
     542           0 :   virtual int    id3Mass()    const {return idNew;}
     543           0 :   virtual int    id4Mass()    const {return idNew;}
     544           0 :   virtual int    resonanceA() const {return 23;}
     545             : 
     546             : private:
     547             : 
     548             :   // Values stored for process type. Z parameters for propagator.
     549             :   int    idNew, codeSave, gmZmode;
     550             :   string nameSave;
     551             :   bool   isPhysical;
     552             :   double ef, vf, af, mRes, GammaRes, m2Res, GamMRat, thetaWRat,
     553             :          mr, betaf, cosThe, gamProp, intProp, resProp, openFracPair;
     554             : 
     555             : };
     556             : 
     557             : //==========================================================================
     558             : 
     559             : // A derived class for f fbar' -> W+- -> F fbar", for one or two heavy F.
     560             : // Allows pT cuts as for other 2 -> 2 processes.
     561             : 
     562           0 : class Sigma2ffbar2FfbarsW : public Sigma2Process {
     563             : 
     564             : public:
     565             : 
     566             :   // Constructor.
     567           0 :   Sigma2ffbar2FfbarsW(int idIn, int idIn2, int codeIn) : idNew(idIn),
     568           0 :     idNew2(idIn2), codeSave(codeIn) {}
     569             : 
     570             :   // Initialize process.
     571             :   virtual void initProc();
     572             : 
     573             :   // Calculate flavour-independent parts of cross section.
     574             :   virtual void sigmaKin();
     575             : 
     576             :   // Evaluate sigmaHat(sHat).
     577             :   virtual double sigmaHat();
     578             : 
     579             :   // Select flavour, colour and anticolour.
     580             :   virtual void setIdColAcol();
     581             : 
     582             :   // Evaluate weight for W decay angles in top decay (else inactive).
     583             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     584             : 
     585             :   // Info on the subprocess.
     586           0 :   virtual string name()       const {return nameSave;}
     587           0 :   virtual int    code()       const {return codeSave;}
     588           0 :   virtual string inFlux()     const {return "ffbarChg";}
     589           0 :   virtual bool   isSChannel() const {return true;}
     590           0 :   virtual int    id3Mass()    const {return idNew;}
     591           0 :   virtual int    id4Mass()    const {return idPartner;}
     592           0 :   virtual int    resonanceA() const {return 24;}
     593             : 
     594             : private:
     595             : 
     596             :   // Values stored for process type. W parameters for propagator.
     597             :   int    idNew, idNew2, codeSave, idPartner;
     598             :   string nameSave;
     599             :   bool   isPhysical;
     600             :   double V2New, mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0,
     601             :          openFracPos, openFracNeg;
     602             : 
     603             : };
     604             : 
     605             : //==========================================================================
     606             : 
     607             : // An intermediate class for f fbar -> gamma*/Z0/W+- gamma*/Z0/W-+.
     608             : 
     609           0 : class Sigma2ffbargmZWgmZW : public Sigma2Process {
     610             : 
     611             : public:
     612             : 
     613             :   // Constructor.
     614           0 :   Sigma2ffbargmZWgmZW() {}
     615             : 
     616             : protected:
     617             : 
     618             :   // Internal products.
     619             :   Vec4    pRot[7];
     620             :   complex hA[7][7];
     621             :   complex hC[7][7];
     622             : 
     623             :   // Calculate and store internal products.
     624             :   void setupProd( Event& process, int i1, int i2, int i3, int i4,
     625             :     int i5, int i6);
     626             : 
     627             :   // Evaluate the F function of Gunion and Kunszt.
     628             :   complex fGK(int i1, int i2, int i3, int i4, int i5, int i6);
     629             : 
     630             :   // Evaluate the Xi function of Gunion and Kunszt.
     631             :   double xiGK( double tHnow, double uHnow);
     632             : 
     633             :   // Evaluate the Xj function of Gunion and Kunszt.
     634             :   double xjGK( double tHnow, double uHnow);
     635             : 
     636             : private:
     637             : 
     638             : };
     639             : 
     640             : //==========================================================================
     641             : 
     642             : // A derived class for f fbar -> gamma*/Z0 gamma*/Z0.
     643             : 
     644           0 : class Sigma2ffbar2gmZgmZ : public Sigma2ffbargmZWgmZW {
     645             : 
     646             : public:
     647             : 
     648             :   // Constructor.
     649           0 :   Sigma2ffbar2gmZgmZ() {}
     650             : 
     651             :   // Initialize process.
     652             :   virtual void initProc();
     653             : 
     654             :   // Calculate flavour-independent parts of cross section.
     655             :   virtual void sigmaKin();
     656             : 
     657             :   // Evaluate d(sigmaHat)/d(tHat).
     658             :   virtual double sigmaHat();
     659             : 
     660             :   // Select flavour, colour and anticolour.
     661             :   virtual void setIdColAcol();
     662             : 
     663             :   // Evaluate weight for simultaneous flavour choices.
     664             :   virtual double weightDecayFlav( Event& process);
     665             : 
     666             :   // Evaluate weight for decay angles of the two gamma*/Z0.
     667             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     668             : 
     669             :   // Info on the subprocess.
     670           0 :   virtual string name()    const {return "f fbar -> gamma*/Z0 gamma*/Z0";}
     671           0 :   virtual int    code()    const {return 231;}
     672           0 :   virtual string inFlux()  const {return "ffbarSame";}
     673           0 :   virtual int    id3Mass() const {return 23;}
     674           0 :   virtual int    id4Mass() const {return 23;}
     675             : 
     676             : private:
     677             : 
     678             :   // Parameters set at initialization or for each new event.
     679             :   int    gmZmode, i1, i2, i3, i4, i5, i6;
     680             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0,
     681             :          gamSum3, intSum3, resSum3, gamProp3, intProp3, resProp3,
     682             :          gamSum4, intSum4, resSum4, gamProp4, intProp4, resProp4,
     683             :          c3LL, c3LR, c3RL, c3RR, c4LL, c4LR, c4RL, c4RR, flavWt;
     684             : 
     685             :   // Pointer to properties of the particle species, to access decay channels.
     686             :   ParticleDataEntry* particlePtr;
     687             : 
     688             : };
     689             : 
     690             : //==========================================================================
     691             : 
     692             : // A derived class for f fbar' -> Z0 W+-. (Here pure Z0, unfortunately.)
     693             : 
     694           0 : class Sigma2ffbar2ZW : public Sigma2ffbargmZWgmZW {
     695             : 
     696             : public:
     697             : 
     698             :   // Constructor.
     699           0 :   Sigma2ffbar2ZW() {}
     700             : 
     701             :   // Initialize process.
     702             :   virtual void initProc();
     703             : 
     704             :   // Calculate flavour-independent parts of cross section.
     705             :   virtual void sigmaKin();
     706             : 
     707             :   // Evaluate d(sigmaHat)/d(tHat).
     708             :   virtual double sigmaHat();
     709             : 
     710             :   // Select flavour, colour and anticolour.
     711             :   virtual void setIdColAcol();
     712             : 
     713             :   // Evaluate weight for Z0 and W+- decay angles.
     714             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     715             : 
     716             :   // Info on the subprocess.
     717           0 :   virtual string name()       const {return "f fbar' -> Z0 W+- (no gamma*!)";}
     718           0 :   virtual int    code()       const {return 232;}
     719           0 :   virtual string inFlux()     const {return "ffbarChg";}
     720           0 :   virtual int    id3Mass()    const {return 23;}
     721           0 :   virtual int    id4Mass()    const {return 24;}
     722           0 :   virtual int    resonanceA() const {return 24;}
     723             : 
     724             : private:
     725             : 
     726             :   // Store W+- mass and width, and couplings.
     727             :   double mW, widW, mWS, mwWS, sin2thetaW, cos2thetaW, thetaWRat, cotT,
     728             :          thetaWpt, thetaWmm, lun, lde, sigma0, openFracPos, openFracNeg;
     729             : 
     730             : };
     731             : 
     732             : //==========================================================================
     733             : 
     734             : // A derived class for f fbar -> W+ W-.
     735             : 
     736           0 : class Sigma2ffbar2WW : public Sigma2ffbargmZWgmZW {
     737             : 
     738             : public:
     739             : 
     740             :   // Constructor.
     741           0 :   Sigma2ffbar2WW() {}
     742             : 
     743             :   // Initialize process.
     744             :   virtual void initProc();
     745             : 
     746             :   // Calculate flavour-independent parts of cross section.
     747             :   virtual void sigmaKin();
     748             : 
     749             :   // Evaluate d(sigmaHat)/d(tHat).
     750             :   virtual double sigmaHat();
     751             : 
     752             :   // Select flavour, colour and anticolour.
     753             :   virtual void setIdColAcol();
     754             : 
     755             :   // Evaluate weight for W+ and W- decay angles.
     756             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     757             : 
     758             :   // Info on the subprocess.
     759           0 :   virtual string name()       const {return "f fbar -> W+ W-";}
     760           0 :   virtual int    code()       const {return 233;}
     761           0 :   virtual string inFlux()     const {return "ffbarSame";}
     762           0 :   virtual int    id3Mass()    const {return 24;}
     763           0 :   virtual int    id4Mass()    const {return -24;}
     764           0 :   virtual int    resonanceA() const {return 23;}
     765             : 
     766             : private:
     767             : 
     768             :   // Store Z0 mass and width.
     769             :   double mZ, widZ, mZS, mwZS, thetaWRat, sigma0, cgg, cgZ, cZZ, cfg,
     770             :     cfZ, cff, gSS, gTT, gST, gUU, gSU, openFracPair;
     771             : 
     772             : };
     773             : 
     774             : //==========================================================================
     775             : 
     776             : // An intermediate class for f fbar -> gamma*/Z0 g/gamma and permutations.
     777             : 
     778           0 : class Sigma2ffbargmZggm : public Sigma2Process {
     779             : 
     780             : public:
     781             : 
     782             :   // Constructor.
     783           0 :   Sigma2ffbargmZggm() {}
     784             : 
     785             :   // Initialize process.
     786             :   virtual void initProc();
     787             : 
     788             :   // Evaluate weight for gamma&/Z0 decay angle.
     789             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     790             : 
     791             : protected:
     792             : 
     793             :   // Parameters set at initialization or for each new event.
     794             :   int    gmZmode;
     795             :   double mRes, GammaRes, m2Res, GamMRat, thetaWRat,
     796             :          gamSum, intSum, resSum, gamProp, intProp, resProp;
     797             : 
     798             :   // Evaluate current sum of flavour couplings times phase space.
     799             :   void flavSum();
     800             : 
     801             :   // Evaluate current propagator terms of cross section.
     802             :   void propTerm();
     803             : 
     804             : private:
     805             : 
     806             :   // Pointer to properties of the particle species, to access decay channels.
     807             :   ParticleDataEntry* particlePtr;
     808             : 
     809             : };
     810             : 
     811             : //==========================================================================
     812             : 
     813             : // A derived class for q qbar -> gamma*/Z0 g.
     814             : 
     815           0 : class Sigma2qqbar2gmZg : public Sigma2ffbargmZggm {
     816             : 
     817             : public:
     818             : 
     819             :   // Constructor.
     820           0 :   Sigma2qqbar2gmZg() {}
     821             : 
     822             :   // Calculate flavour-independent parts of cross section.
     823             :   virtual void sigmaKin();
     824             : 
     825             :   // Evaluate d(sigmaHat)/d(tHat).
     826             :   virtual double sigmaHat();
     827             : 
     828             :   // Select flavour, colour and anticolour.
     829             :   virtual void setIdColAcol();
     830             : 
     831             :   // Info on the subprocess.
     832           0 :   virtual string name()    const {return "q qbar -> gamma*/Z0 g";}
     833           0 :   virtual int    code()    const {return 241;}
     834           0 :   virtual string inFlux()  const {return "qqbarSame";}
     835           0 :   virtual int    id3Mass() const {return 23;}
     836             : 
     837             : private:
     838             : 
     839             :   // Values stored for later use.
     840             :   double sigma0;
     841             : 
     842             : };
     843             : 
     844             : //==========================================================================
     845             : 
     846             : // A derived class for q g -> gamma*/Z0 q.
     847             : 
     848           0 : class Sigma2qg2gmZq : public Sigma2ffbargmZggm {
     849             : 
     850             : public:
     851             : 
     852             :   // Constructor.
     853           0 :   Sigma2qg2gmZq() {}
     854             : 
     855             :   // Calculate flavour-independent parts of cross section.
     856             :   virtual void sigmaKin();
     857             : 
     858             :   // Evaluate d(sigmaHat)/d(tHat).
     859             :   virtual double sigmaHat();
     860             : 
     861             :   // Select flavour, colour and anticolour.
     862             :   virtual void setIdColAcol();
     863             : 
     864             :   // Info on the subprocess.
     865           0 :   virtual string name()    const {return "q g-> gamma*/Z0 q";}
     866           0 :   virtual int    code()    const {return 242;}
     867           0 :   virtual string inFlux()  const {return "qg";}
     868           0 :   virtual int    id3Mass() const {return 23;}
     869             : 
     870             : private:
     871             : 
     872             :   // Values stored for later use.
     873             :   double sigma0;
     874             : 
     875             : };
     876             : 
     877             : //==========================================================================
     878             : 
     879             : // A derived class for f fbar' -> gamma*/Z0 gamma.
     880             : 
     881           0 : class Sigma2ffbar2gmZgm : public Sigma2ffbargmZggm {
     882             : 
     883             : public:
     884             : 
     885             :   // Constructor.
     886           0 :   Sigma2ffbar2gmZgm() {}
     887             : 
     888             :   // Calculate flavour-independent parts of cross section.
     889             :   virtual void sigmaKin();
     890             : 
     891             :   // Evaluate d(sigmaHat)/d(tHat).
     892             :   virtual double sigmaHat();
     893             : 
     894             :   // Select flavour, colour and anticolour.
     895             :   virtual void setIdColAcol();
     896             : 
     897             :   // Info on the subprocess.
     898           0 :   virtual string name()    const {return "f fbar -> gamma*/Z0 gamma";}
     899           0 :   virtual int    code()    const {return 243;}
     900           0 :   virtual string inFlux()  const {return "ffbarSame";}
     901           0 :   virtual int    id3Mass() const {return 23;}
     902             : 
     903             : private:
     904             : 
     905             :   // Values stored for later use.
     906             :   double sigma0;
     907             : 
     908             : };
     909             : 
     910             : //==========================================================================
     911             : 
     912             : // A derived class for f gamma -> gamma*/Z0 f.
     913             : 
     914           0 : class Sigma2fgm2gmZf : public Sigma2ffbargmZggm {
     915             : 
     916             : public:
     917             : 
     918             :   // Constructor.
     919           0 :   Sigma2fgm2gmZf() {}
     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           0 :   virtual string name()    const {return "f gamma -> gamma*/Z0 f";}
     932           0 :   virtual int    code()    const {return 244;}
     933           0 :   virtual string inFlux()  const {return "fgm";}
     934           0 :   virtual int    id3Mass() const {return 23;}
     935             : 
     936             : private:
     937             : 
     938             :   // Values stored for later use.
     939             :   double sigma0;
     940             : 
     941             : };
     942             : 
     943             : //==========================================================================
     944             : 
     945             : // An intermediate class for f fbar -> W+- g/gamma and permutations.
     946             : 
     947           0 : class Sigma2ffbarWggm : public Sigma2Process {
     948             : 
     949             : public:
     950             : 
     951             :   // Constructor.
     952           0 :   Sigma2ffbarWggm() {}
     953             : 
     954             :   // Evaluate weight for gamma&/Z0 decay angle.
     955             :   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
     956             : 
     957             : private:
     958             : 
     959             : };
     960             : 
     961             : //==========================================================================
     962             : 
     963             : // A derived class for q qbar' -> W+- g.
     964             : 
     965           0 : class Sigma2qqbar2Wg : public Sigma2ffbarWggm {
     966             : 
     967             : public:
     968             : 
     969             :   // Constructor.
     970           0 :   Sigma2qqbar2Wg() {}
     971             : 
     972             :   // Initialize process.
     973             :   virtual void initProc();
     974             : 
     975             :   // Calculate flavour-independent parts of cross section.
     976             :   virtual void sigmaKin();
     977             : 
     978             :   // Evaluate d(sigmaHat)/d(tHat).
     979             :   virtual double sigmaHat();
     980             : 
     981             :   // Select flavour, colour and anticolour.
     982             :   virtual void setIdColAcol();
     983             : 
     984             :   // Info on the subprocess.
     985           0 :   virtual string name()    const {return "q qbar' -> W+- g";}
     986           0 :   virtual int    code()    const {return 251;}
     987           0 :   virtual string inFlux()  const {return "ffbarChg";}
     988           0 :   virtual int    id3Mass() const {return 24;}
     989             : 
     990             : private:
     991             : 
     992             :   // Values stored for later use.
     993             :   double sigma0, openFracPos, openFracNeg;
     994             : 
     995             : };
     996             : 
     997             : //==========================================================================
     998             : 
     999             : // A derived class for q g -> W+- q'.
    1000             : 
    1001           0 : class Sigma2qg2Wq : public Sigma2ffbarWggm {
    1002             : 
    1003             : public:
    1004             : 
    1005             :   // Constructor.
    1006           0 :   Sigma2qg2Wq() {}
    1007             : 
    1008             :   // Initialize process.
    1009             :   virtual void initProc();
    1010             : 
    1011             :   // Calculate flavour-independent parts of cross section.
    1012             :   virtual void sigmaKin();
    1013             : 
    1014             :   // Evaluate d(sigmaHat)/d(tHat).
    1015             :   virtual double sigmaHat();
    1016             : 
    1017             :   // Select flavour, colour and anticolour.
    1018             :   virtual void setIdColAcol();
    1019             : 
    1020             :   // Info on the subprocess.
    1021           0 :   virtual string name()    const {return "q g-> W+- q'";}
    1022           0 :   virtual int    code()    const {return 252;}
    1023           0 :   virtual string inFlux()  const {return "qg";}
    1024           0 :   virtual int    id3Mass() const {return 24;}
    1025             : 
    1026             : private:
    1027             : 
    1028             :   // Values stored for later use.
    1029             :   double sigma0, openFracPos, openFracNeg;
    1030             : 
    1031             : };
    1032             : 
    1033             : //==========================================================================
    1034             : 
    1035             : // A derived class for f fbar' -> W+- gamma.
    1036             : 
    1037           0 : class Sigma2ffbar2Wgm : public Sigma2ffbarWggm {
    1038             : 
    1039             : public:
    1040             : 
    1041             :   // Constructor.
    1042           0 :   Sigma2ffbar2Wgm() {}
    1043             : 
    1044             :   // Initialize process.
    1045             :   virtual void initProc();
    1046             : 
    1047             :   // Calculate flavour-independent parts of cross section.
    1048             :   virtual void sigmaKin();
    1049             : 
    1050             :   // Evaluate d(sigmaHat)/d(tHat).
    1051             :   virtual double sigmaHat();
    1052             : 
    1053             :   // Select flavour, colour and anticolour.
    1054             :   virtual void setIdColAcol();
    1055             : 
    1056             :   // Info on the subprocess.
    1057           0 :   virtual string name()    const {return "f fbar' -> W+- gamma";}
    1058           0 :   virtual int    code()    const {return 253;}
    1059           0 :   virtual string inFlux()  const {return "ffbarChg";}
    1060           0 :   virtual int    id3Mass() const {return 24;}
    1061             : 
    1062             : private:
    1063             : 
    1064             :   // Values stored for later use.
    1065             :   double sigma0, openFracPos, openFracNeg;
    1066             : 
    1067             : };
    1068             : 
    1069             : //==========================================================================
    1070             : 
    1071             : // A derived class for f gamma -> W+- f'.
    1072             : 
    1073           0 : class Sigma2fgm2Wf : public Sigma2ffbarWggm {
    1074             : 
    1075             : public:
    1076             : 
    1077             :   // Constructor.
    1078           0 :   Sigma2fgm2Wf() {}
    1079             : 
    1080             :   // Initialize process.
    1081             :   virtual void initProc();
    1082             : 
    1083             :   // Calculate flavour-independent parts of cross section.
    1084             :   virtual void sigmaKin();
    1085             : 
    1086             :   // Evaluate d(sigmaHat)/d(tHat).
    1087             :   virtual double sigmaHat();
    1088             : 
    1089             :   // Select flavour, colour and anticolour.
    1090             :   virtual void setIdColAcol();
    1091             : 
    1092             :   // Info on the subprocess.
    1093           0 :   virtual string name()    const {return "f gamma -> W+- f'";}
    1094           0 :   virtual int    code()    const {return 254;}
    1095           0 :   virtual string inFlux()  const {return "fgm";}
    1096           0 :   virtual int    id3Mass() const {return 24;}
    1097             : 
    1098             : private:
    1099             : 
    1100             :   // Values stored for later use.
    1101             :   double sigma0, openFracPos, openFracNeg;
    1102             : 
    1103             : };
    1104             : //==========================================================================
    1105             : 
    1106             : // A derived class for gamma gamma -> f fbar.
    1107             : 
    1108           0 : class Sigma2gmgm2ffbar : public Sigma2Process {
    1109             : 
    1110             : public:
    1111             : 
    1112             :   // Constructor.
    1113           0 :   Sigma2gmgm2ffbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
    1114             : 
    1115             :   // Initialize process.
    1116             :   virtual void initProc();
    1117             : 
    1118             :   // Calculate flavour-independent parts of cross section.
    1119             :   virtual void sigmaKin();
    1120             : 
    1121             :   // Evaluate d(sigmaHat)/d(tHat).
    1122           0 :   virtual double sigmaHat() {return sigma;}
    1123             : 
    1124             :   // Select flavour, colour and anticolour.
    1125             :   virtual void setIdColAcol();
    1126             : 
    1127             :   // Info on the subprocess.
    1128           0 :   virtual string name()    const {return nameSave;}
    1129           0 :   virtual int    code()    const {return codeSave;}
    1130           0 :   virtual string inFlux()  const {return "gmgm";}
    1131           0 :   virtual int    id3Mass() const {return idMass;}
    1132           0 :   virtual int    id4Mass() const {return idMass;}
    1133             : 
    1134             : private:
    1135             : 
    1136             :   // Member variables.
    1137             :   int    idNew, codeSave, idMass, idNow;
    1138             :   string nameSave;
    1139             :   double ef4, s34Avg, sigTU, sigma, openFracPair;
    1140             : 
    1141             : };
    1142             : 
    1143             : //==========================================================================
    1144             : 
    1145             : } // end namespace Pythia8
    1146             : 
    1147             : #endif // Pythia8_SigmaEW_H

Generated by: LCOV version 1.11