Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:06:31

0001 // SigmaSUSY.h is a part of the PYTHIA event generator.
0002 // Copyright (C) 2024 Torbjorn Sjostrand.
0003 // Main authors of this file: N. Desai, P. Skands
0004 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
0005 // Please respect the MCnet Guidelines, see GUIDELINES for details.
0006 
0007 // Header file for Supersymmetric process differential cross sections.
0008 // Contains classes derived from SigmaProcess via Sigma2Process.
0009 
0010 #ifndef Pythia8_SigmaSUSY_H
0011 #define Pythia8_SigmaSUSY_H
0012 
0013 #include "Pythia8/PhaseSpace.h"
0014 #include "Pythia8/PythiaComplex.h"
0015 #include "Pythia8/SigmaProcess.h"
0016 #include "Pythia8/SusyCouplings.h"
0017 
0018 namespace Pythia8 {
0019 
0020 //==========================================================================
0021 
0022 // An intermediate class for SUSY 2 -> 2 with nontrivial decay angles.
0023 
0024 class Sigma2SUSY : public Sigma2Process {
0025 
0026 public:
0027 
0028   // Evaluate weight for decay angles.
0029   virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
0030   void setPointers(string processIn);
0031 
0032  };
0033 
0034 //==========================================================================
0035 
0036 // A derived class for q qbar -> neutralino_i neutralino_j.
0037 
0038 class Sigma2qqbar2chi0chi0 : public Sigma2SUSY {
0039 
0040 public:
0041 
0042   // Constructor.
0043   Sigma2qqbar2chi0chi0() : id3chi(), id4chi(), codeSave(), sigma0(),
0044     ui(), uj(), ti(), tj(), openFracPair() {};
0045 
0046   // Constructor.
0047   Sigma2qqbar2chi0chi0(int id3chiIn, int id4chiIn, int codeIn) : sigma0(),
0048     ui(), uj(), ti(), tj(), openFracPair() {
0049 
0050     // Save ordering indices and process code
0051     id3chi   = id3chiIn;
0052     id4chi   = id4chiIn;
0053     codeSave = codeIn;
0054 
0055 
0056     // Construct id codes from ordering indices.
0057     id3                  = 1000022;
0058     if (id3chi == 2) id3 = 1000023;
0059     if (id3chi == 3) id3 = 1000025;
0060     if (id3chi == 4) id3 = 1000035;
0061     if (id3chi == 5) id3 = 1000045;
0062     id4                  = 1000022;
0063     if (id4chi == 2) id4 = 1000023;
0064     if (id4chi == 3) id4 = 1000025;
0065     if (id4chi == 4) id4 = 1000035;
0066     if (id4chi == 5) id4 = 1000045;
0067 
0068   }
0069 
0070   // Initialize process.
0071   virtual void initProc();
0072 
0073   // Calculate flavour-independent parts of cross section.
0074   virtual void sigmaKin();
0075 
0076   // Evaluate d(sigmaHat)/d(tHat).
0077   virtual double sigmaHat();
0078 
0079   // Select flavour, colour and anticolour.
0080   virtual void setIdColAcol();
0081 
0082   // Evaluate weight for decay angles.
0083   //  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
0084 
0085   // Info on the subprocess.
0086   virtual string name()    const {return nameSave;}
0087   virtual int    code()    const {return codeSave;}
0088   virtual string inFlux()  const {return "ff";}
0089   virtual int    id3Mass() const {return abs(id3);}
0090   virtual int    id4Mass() const {return abs(id4);}
0091   virtual int    resonanceA() const {return 23;}
0092   virtual bool   isSUSY()  const {return true;}
0093   virtual double getSigma0() const {return sigma0;}
0094 
0095  protected:
0096 
0097   // Basic process information
0098   int     id3chi, id4chi, codeSave;
0099   string  nameSave;
0100 
0101   // Values stored for later use
0102   double  sigma0, ui, uj, ti, tj, openFracPair;
0103   complex propZ;
0104 
0105 };
0106 
0107 //==========================================================================
0108 
0109 // A derived class for q qbar -> neutralino_i chargino_j.
0110 
0111 class Sigma2qqbar2charchi0 : public Sigma2qqbar2chi0chi0 {
0112 
0113 public:
0114 
0115   // Constructor.
0116   Sigma2qqbar2charchi0(int id3chiIn, int id4chiIn, int codeIn) {
0117 
0118     // Save ordering indices and process code
0119     id3chi   = id3chiIn;
0120     id4chi   = id4chiIn;
0121     codeSave = codeIn;
0122 
0123     // Construct id codes from ordering indices.
0124     id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
0125     if (id3chi < 0)  id3 = -id3;
0126 
0127     id4                  = 1000022;
0128     if (id4chi == 2) id4 = 1000023;
0129     if (id4chi == 3) id4 = 1000025;
0130     if (id4chi == 4) id4 = 1000035;
0131     if (id4chi == 5) id4 = 1000045;
0132 
0133   }
0134 
0135   // Calculate flavour-independent parts of cross section.
0136   virtual void sigmaKin();
0137 
0138   // Evaluate d(sigmaHat)/d(tHat).
0139   virtual double sigmaHat();
0140 
0141   virtual int    resonanceA() const {return 24;}
0142 
0143 protected :
0144 
0145   complex propW;
0146 
0147 };
0148 
0149 //==========================================================================
0150 
0151 // A derived class for q qbar -> chargino+_i chargino-_j.
0152 
0153 class Sigma2qqbar2charchar : public Sigma2qqbar2chi0chi0 {
0154 
0155 public:
0156 
0157   // Constructor.
0158   Sigma2qqbar2charchar(int id3chiIn, int id4chiIn, int codeIn) {
0159 
0160     // Save ordering indices and process code
0161     id3chi   = id3chiIn;
0162     id4chi   = id4chiIn;
0163     codeSave = codeIn;
0164 
0165     // Construct id codes from ordering indices.
0166     id3 = (abs(id3chi) == 2) ?  1000037 :  1000024;
0167     id4 = (abs(id4chi) == 2) ? -1000037 : -1000024;
0168 
0169   }
0170 
0171   // Calculate flavour-independent parts of cross section.
0172   virtual void sigmaKin();
0173 
0174   // Evaluate d(sigmaHat)/d(tHat).
0175   virtual double sigmaHat();
0176 
0177 };
0178 
0179 //==========================================================================
0180 
0181 // A derived class for q g -> neutralino_i squark_j (and cc)
0182 
0183 class Sigma2qg2chi0squark : public Sigma2SUSY {
0184 
0185 public:
0186 
0187   // Constructor.
0188   Sigma2qg2chi0squark() : id3chi(), id4sq(), codeSave(), sigma0(),
0189     ui(), uj(), ti(), tj(), openFracPair() { };
0190 
0191   // Constructor.
0192   Sigma2qg2chi0squark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) :
0193     sigma0(), ui(), uj(), ti(), tj(), openFracPair() {
0194 
0195     // Save ordering indices and process code
0196     id3chi   = id3chiIn;
0197     id4sq    = id4sqIn;
0198     codeSave = codeIn;
0199 
0200     // Construct id codes from ordering indices.
0201     id3                  = 1000022;
0202     if (id3chi == 2) id3 = 1000023;
0203     if (id3chi == 3) id3 = 1000025;
0204     if (id3chi == 4) id3 = 1000035;
0205     if (id3chi == 5) id3 = 1000045;
0206     id4                  = 1000001 + (isUp ? 1 : 0);
0207     if (id4sq  == 2) id4 = 1000003 + (isUp ? 1 : 0);
0208     if (id4sq  == 3) id4 = 1000005 + (isUp ? 1 : 0);
0209     if (id4sq  == 4) id4 = 2000001 + (isUp ? 1 : 0);
0210     if (id4sq  == 5) id4 = 2000003 + (isUp ? 1 : 0);
0211     if (id4sq  == 6) id4 = 2000005 + (isUp ? 1 : 0);
0212 
0213   }
0214 
0215   // Initialize process.
0216   virtual void initProc();
0217 
0218   // Calculate flavour-independent parts of cross section.
0219   virtual void sigmaKin();
0220 
0221   // Evaluate d(sigmaHat)/d(tHat).
0222   virtual double sigmaHat();
0223 
0224   // Select flavour, colour and anticolour.
0225   virtual void setIdColAcol();
0226 
0227   // Info on the subprocess.
0228   virtual string name()    const {return nameSave;}
0229   virtual int    code()    const {return codeSave;}
0230   virtual string inFlux()  const {return "qg";}
0231   virtual int    id3Mass() const {return abs(id3);}
0232   virtual int    id4Mass() const {return abs(id4);}
0233   virtual bool   isSUSY()  const {return true;}
0234 
0235  protected:
0236 
0237   // Basic process information
0238   int     id3chi, id4sq, codeSave;
0239   string  nameSave;
0240 
0241   // Values stored for later use
0242   double  sigma0, ui, uj, ti, tj, openFracPair;
0243 
0244 
0245 };
0246 
0247 //==========================================================================
0248 
0249 // A derived class for q g -> chargino_i squark_j (incl cc)
0250 
0251 class Sigma2qg2charsquark : public Sigma2qg2chi0squark {
0252 
0253 public:
0254 
0255   // Constructor.
0256   Sigma2qg2charsquark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
0257 
0258     // Save ordering indices and process code
0259     id3chi   = id3chiIn;
0260     id4sq    = id4sqIn;
0261     codeSave = codeIn;
0262 
0263     // Construct id codes from ordering indices.
0264     id3Sav                       = 1000024;
0265     if (abs(id3chi) == 2) id3Sav = 1000037;
0266     if (isUp)             id3Sav = -id3Sav;
0267     id4Sav                       = 1000001 + (isUp ? 1 : 0);
0268     if (id4sq  == 2) id4Sav      = 1000003 + (isUp ? 1 : 0);
0269     if (id4sq  == 3) id4Sav      = 1000005 + (isUp ? 1 : 0);
0270     if (id4sq  == 4) id4Sav      = 2000001 + (isUp ? 1 : 0);
0271     if (id4sq  == 5) id4Sav      = 2000003 + (isUp ? 1 : 0);
0272     if (id4sq  == 6) id4Sav      = 2000005 + (isUp ? 1 : 0);
0273 
0274     // Initial values, can be swapped to charge conjugates event by event.
0275     id3 = id3Sav;
0276     id4 = id4Sav;
0277 
0278   }
0279 
0280   // Initialize process.
0281   virtual void initProc();
0282 
0283   // Calculate flavour-independent parts of cross section.
0284   virtual void sigmaKin();
0285 
0286   // Evaluate d(sigmaHat)/d(tHat).
0287   virtual double sigmaHat();
0288 
0289   // Select flavour, colour and anticolour.
0290   virtual void setIdColAcol();
0291 
0292  private:
0293 
0294   // Basic process information
0295   int id3Sav, id4Sav;
0296 
0297 };
0298 
0299 //==========================================================================
0300 
0301 // A derived class for q q' -> ~q_i ~q_j
0302 
0303 class Sigma2qq2squarksquark : public Sigma2SUSY {
0304 
0305 public:
0306 
0307   // Constructor.
0308   Sigma2qq2squarksquark() : id3Sav(), id4Sav(), codeSave(), iGen3(), iGen4(),
0309     nNeut(), isUD(), onlyQCD(), m2Glu(), sigmaChar(), sigmaNeut(), sigmaGlu(),
0310     sigmaCharNeut(), sigmaCharGlu(), sigmaNeutGlu(), openFracPair(), tGlu(),
0311     uGlu(), sumCt(), sumCu(), sumNt(), sumNu(), sumGt(), sumGu(),
0312                             sumInterference() {}
0313 
0314   // Constructor.
0315   Sigma2qq2squarksquark(int id3In, int id4In, int codeIn) : iGen3(), iGen4(),
0316     nNeut(), isUD(), onlyQCD(), m2Glu(), sigmaChar(), sigmaNeut(), sigmaGlu(),
0317     sigmaCharNeut(), sigmaCharGlu(), sigmaNeutGlu(), openFracPair(), tGlu(),
0318     uGlu(), sumCt(), sumCu(), sumNt(), sumNu(), sumGt(), sumGu(),
0319     sumInterference() {
0320 
0321     // Save ordering indices and process code
0322     id3Sav = id3In;
0323     id4Sav = id4In;
0324     codeSave = codeIn;
0325     // Initial values (flipped for c.c.)
0326     id3    = id3Sav;
0327     id4    = id4Sav;
0328 
0329   }
0330 
0331   // Initialize process.
0332   virtual void initProc();
0333 
0334   // Calculate flavour-independent parts of cross section.
0335   virtual void sigmaKin();
0336 
0337   // Evaluate d(sigmaHat)/d(tHat).
0338   virtual double sigmaHat();
0339 
0340   // Select flavour, colour and anticolour.
0341   virtual void setIdColAcol();
0342 
0343   // Info on the subprocess.
0344   virtual string name()    const {return nameSave;}
0345   virtual int    code()    const {return codeSave;}
0346   virtual string inFlux()  const {return "qq";}
0347   virtual int    id3Mass() const {return abs(id3Sav);}
0348   virtual int    id4Mass() const {return abs(id4Sav);}
0349   virtual bool   isSUSY()  const {return true;}
0350 
0351 private:
0352 
0353   // Basic process information
0354   int     id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
0355   string  nameSave;
0356   bool    isUD, onlyQCD;
0357 
0358   // Storage of mass squares
0359   double m2Glu;
0360   vector<double> m2Neut, m2Char;
0361 
0362   // Flavor-independent prefactors.
0363   double sigmaChar, sigmaNeut, sigmaGlu;
0364   double sigmaCharNeut, sigmaCharGlu, sigmaNeutGlu;
0365   double openFracPair;
0366 
0367   // Point-by-point info
0368   double tGlu, uGlu;
0369   vector<double> tNeut, uNeut, tChar, uChar;
0370   double sumCt, sumCu, sumNt, sumNu, sumGt, sumGu, sumInterference;
0371 
0372 };
0373 
0374 //==========================================================================
0375 
0376 // A derived class for q qbar' -> ~q_i ~q*_j
0377 
0378 class Sigma2qqbar2squarkantisquark : public Sigma2SUSY {
0379 
0380 public:
0381 
0382   // Constructor.
0383   Sigma2qqbar2squarkantisquark() : id3Sav(), id4Sav(), codeSave(), iGen3(),
0384     iGen4(), nNeut(), isUD(), isCC(), onlyQCD(), m2Glu(), xW(), openFracPair(),
0385     sigmaEW(), sigmaGlu(), sigmaEWG(), tGlu(), uGlu(), sumColS(), sumColT(),
0386     sumInterference(){}
0387 
0388   // Constructor.
0389   Sigma2qqbar2squarkantisquark(int id3In, int id4In, int codeIn) : iGen3(),
0390     iGen4(), nNeut(), isUD(), isCC(), onlyQCD(), m2Glu(), xW(), openFracPair(),
0391     sigmaEW(), sigmaGlu(), sigmaEWG(), tGlu(), uGlu(), sumColS(), sumColT(),
0392     sumInterference(){
0393 
0394     // Save ordering indices and process code
0395     // (always store squark first, antisquark second)
0396     id3Sav = abs(id3In);
0397     id4Sav = -abs(id4In);
0398     codeSave = codeIn;
0399     // Initial values
0400     id3    = id3Sav;
0401     id4    = id4Sav;
0402 
0403   }
0404 
0405   // Initialize process.
0406   virtual void initProc();
0407 
0408   // Calculate flavour-independent parts of cross section.
0409   virtual void sigmaKin();
0410 
0411   // Evaluate d(sigmaHat)/d(tHat).
0412   virtual double sigmaHat();
0413 
0414   // Select flavour, colour and anticolour.
0415   virtual void setIdColAcol();
0416 
0417   // Info on the subprocess.
0418   virtual string name()    const {return nameSave;}
0419   virtual int    code()    const {return codeSave;}
0420   virtual string inFlux()  const {return "qq";}
0421   virtual int    id3Mass() const {return abs(id3Sav);}
0422   virtual int    id4Mass() const {return abs(id4Sav);}
0423   virtual bool   isSUSY()  const {return true;}
0424 
0425 private:
0426 
0427   // Basic process information
0428   int     id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
0429   string  nameSave;
0430   bool    isUD, isCC, onlyQCD;
0431 
0432   // Storage of mass squares
0433   double m2Glu;
0434   vector<double> m2Neut;
0435 
0436   // Flavor-independent prefactors: EW, strong, and interference
0437   double xW;
0438   double openFracPair;
0439   double sigmaEW, sigmaGlu, sigmaEWG;
0440 
0441   // Point-by-point info
0442   double tGlu, uGlu;
0443   vector<double> tNeut, uNeut;
0444   complex propZW;
0445   double sumColS, sumColT, sumInterference;
0446 
0447 };
0448 
0449 //==========================================================================
0450 
0451 // A derived class for g g -> ~q ~q*
0452 
0453 class Sigma2gg2squarkantisquark : public Sigma2SUSY {
0454 
0455 public:
0456 
0457   // Constructor.
0458   Sigma2gg2squarkantisquark() : id3Sav(), id4Sav(), codeSave(), sigma(),
0459                                 m2Sq(), openFracPair() { }
0460 
0461   // Constructor.
0462   Sigma2gg2squarkantisquark(int id34In, int codeIn) : sigma(), m2Sq(),
0463     openFracPair() {
0464 
0465     // Save ordering indices and process code
0466     // (always store squark first, antisquark second)
0467     id3Sav = abs(id34In);
0468     id4Sav = -abs(id34In);
0469     codeSave = codeIn;
0470     // Initial values
0471     id3    = id3Sav;
0472     id4    = id4Sav;
0473 
0474   }
0475 
0476   // Initialize process.
0477   virtual void initProc();
0478 
0479   // Calculate flavour-independent parts of cross section.
0480   virtual void sigmaKin();
0481 
0482   // Evaluate d(sigmaHat)/d(tHat).
0483   virtual double sigmaHat() {return sigma;}
0484 
0485   // Select flavour, colour and anticolour.
0486   virtual void setIdColAcol();
0487 
0488   // Info on the subprocess.
0489   virtual string name()    const {return nameSave;}
0490   virtual int    code()    const {return codeSave;}
0491   virtual string inFlux()  const {return "gg";}
0492   virtual int    id3Mass() const {return abs(id3Sav);}
0493   virtual int    id4Mass() const {return abs(id4Sav);}
0494   virtual bool   isSUSY()  const {return true;}
0495 
0496 private:
0497 
0498   // Basic process information
0499   int     id3Sav, id4Sav, codeSave;
0500   string  nameSave;
0501   double sigma, m2Sq, openFracPair;
0502 
0503 
0504 };
0505 
0506 //==========================================================================
0507 
0508 // A derived class for q g -> ~q ~g
0509 
0510 class Sigma2qg2squarkgluino : public Sigma2SUSY {
0511 
0512 public:
0513 
0514   // Constructor.
0515   Sigma2qg2squarkgluino() : codeSave(), sigmaA(), sigmaB(), comFacHat(),
0516     m2Glu(), m2Sq(), openFracPair() {}
0517 
0518   // Constructor.
0519   Sigma2qg2squarkgluino(int id3In, int codeIn) : sigmaA(), sigmaB(),
0520     comFacHat(), m2Glu(), m2Sq(), openFracPair() {
0521 
0522     // Save ordering indices and process code
0523     codeSave = codeIn;
0524     // Initial values
0525     id3    = id3In;
0526     id4    = 1000021;
0527 
0528   }
0529 
0530   // Initialize process.
0531   virtual void initProc();
0532 
0533   // Calculate flavour-independent parts of cross section.
0534   virtual void sigmaKin();
0535 
0536   // Evaluate d(sigmaHat)/d(tHat).
0537   virtual double sigmaHat();
0538 
0539   // Select flavour, colour and anticolour.
0540   virtual void setIdColAcol();
0541 
0542   // Info on the subprocess.
0543   virtual string name()    const {return nameSave;}
0544   virtual int    code()    const {return codeSave;}
0545   virtual string inFlux()  const {return "qg";}
0546   virtual int    id3Mass() const {return abs(id3);}
0547   virtual int    id4Mass() const {return 1000021;}
0548   virtual bool   isSUSY()  const {return true;}
0549 
0550 private:
0551 
0552   // Basic process information
0553   int     codeSave;
0554   string  nameSave;
0555   double sigmaA, sigmaB, comFacHat, m2Glu, m2Sq, openFracPair;
0556 
0557 
0558 };
0559 
0560 //==========================================================================
0561 
0562 // A derived class for g g -> gluino gluino.
0563 
0564 class Sigma2gg2gluinogluino : public Sigma2SUSY {
0565 
0566 public:
0567 
0568   // Constructor.
0569   Sigma2gg2gluinogluino() : sigTS(), sigUS(), sigTU(), sigSum(), sigma(),
0570                             openFracPair() { }
0571 
0572   // Initialize process.
0573   virtual void initProc();
0574 
0575   // Calculate flavour-independent parts of cross section.
0576   virtual void sigmaKin();
0577 
0578   // Evaluate d(sigmaHat)/d(tHat).
0579   virtual double sigmaHat() {return sigma;}
0580 
0581   // Select flavour, colour and anticolour.
0582   virtual void setIdColAcol();
0583 
0584   // Info on the subprocess.
0585   virtual string name()    const {return "g g -> gluino gluino";}
0586   virtual int    code()    const {return 1201;}
0587   virtual string inFlux()  const {return "gg";}
0588   virtual int    id3Mass() const {return 1000021;}
0589   virtual int    id4Mass() const {return 1000021;}
0590   virtual bool   isSUSY()  const {return true;}
0591 
0592 private:
0593 
0594   // Values stored for process type and colour flow selection.
0595   double sigTS, sigUS, sigTU, sigSum, sigma, openFracPair;
0596 
0597 
0598 };
0599 
0600 //==========================================================================
0601 
0602 // A derived class for q qbar -> gluino gluino.
0603 
0604 class Sigma2qqbar2gluinogluino : public Sigma2SUSY {
0605 
0606 public:
0607 
0608   // Constructor.
0609   Sigma2qqbar2gluinogluino() : openFracPair(), s34Avg(), sigS(), tHG(), uHG(),
0610     tHG2(), uHG2() { }
0611 
0612   // Initialize process.
0613   virtual void initProc();
0614 
0615   // Calculate flavour-independent parts of cross section.
0616   virtual void sigmaKin();
0617 
0618   // Evaluate d(sigmaHat)/d(tHat).
0619   virtual double sigmaHat();
0620 
0621   // Select flavour, colour and anticolour.
0622   virtual void setIdColAcol();
0623 
0624   // Info on the subprocess.
0625   virtual string name()    const {return "q qbar -> gluino gluino";}
0626   virtual int    code()    const {return 1202;}
0627   virtual string inFlux()  const {return "qq";}
0628   virtual int    id3Mass() const {return 1000021;}
0629   virtual int    id4Mass() const {return 1000021;}
0630   virtual bool   isSUSY()  const {return true;}
0631 
0632 private:
0633 
0634   // Values stored for process type and colour flow selection.
0635   double openFracPair, s34Avg, sigS, tHG, uHG, tHG2, uHG2;
0636 
0637 };
0638 
0639 //==========================================================================
0640 
0641 class Sigma1qq2antisquark : public Sigma1Process {
0642 public:
0643 
0644   // Constructor.
0645   Sigma1qq2antisquark() : Sigma1Process(), mRes(), GammaRes(), m2Res(),
0646     sigBW(), widthOut(), codeSave(), idRes() {}
0647 
0648 
0649   Sigma1qq2antisquark(int id3In) : Sigma1Process(), mRes(), GammaRes(),
0650     m2Res(), sigBW(), widthOut(), codeSave(), idRes(id3In) {}
0651 
0652   // Initialize process.
0653   virtual void initProc();
0654 
0655   // Calculate flavour-independent parts of cross section.
0656   virtual void sigmaKin();
0657 
0658   // Evaluate d(sigmaHat)/d(tHat).
0659   virtual double sigmaHat();
0660 
0661   // Select flavour, colour and anticolour.
0662   virtual void setIdColAcol();
0663 
0664   // Info on the subprocess.
0665   virtual string name()    const {return nameSave;}
0666   virtual int    code()    const {return codeSave;}
0667   virtual string inFlux()  const {return "qq";}
0668   virtual bool   isSUSY()  const {return true;}
0669   virtual bool   isRPV()   const {return true;}
0670   virtual int    resonanceA() const {return idRes;}
0671 
0672 private:
0673 
0674   // Values stored for process type and colour flow selection.
0675   double mRes, GammaRes, m2Res, sigBW, widthOut;
0676   int    codeSave, idRes;
0677   string nameSave;
0678 
0679 };
0680 
0681 
0682 //==========================================================================
0683 
0684 // A derived class for q qbar -> neutralino_i gluino.
0685 
0686 class Sigma2qqbar2chi0gluino : public Sigma2SUSY {
0687 
0688 public:
0689 
0690   // Constructor.
0691   Sigma2qqbar2chi0gluino() : id3chi(), id4chi(), codeSave(), sigma0(), ui(),
0692     uj(), ti(), tj(), openFracPair() {};
0693 
0694   // Constructor.
0695   Sigma2qqbar2chi0gluino(int id4chiIn, int codeIn) : id3chi(), sigma0(), ui(),
0696     uj(), ti(), tj(), openFracPair() {
0697 
0698     // Save ordering indices and process code
0699     id3   = 1000021;
0700     id4chi   = id4chiIn;
0701     codeSave = codeIn;
0702 
0703 
0704     // Construct id codes from ordering indices.
0705     id4                  = 1000022;
0706     if (id4chi == 2) id4 = 1000023;
0707     if (id4chi == 3) id4 = 1000025;
0708     if (id4chi == 4) id4 = 1000035;
0709     if (id4chi == 5) id4 = 1000045;
0710 
0711   }
0712 
0713   // Initialize process.
0714   virtual void initProc();
0715 
0716   // Calculate flavour-independent parts of cross section.
0717   virtual void sigmaKin();
0718 
0719   // Evaluate d(sigmaHat)/d(tHat).
0720   virtual double sigmaHat();
0721 
0722   // Select flavour, colour and anticolour.
0723   virtual void setIdColAcol();
0724 
0725   // Evaluate weight for decay angles.
0726   //  virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
0727 
0728   // Info on the subprocess.
0729   virtual string name()    const {return nameSave;}
0730   virtual int    code()    const {return codeSave;}
0731   virtual string inFlux()  const {return "ff";}
0732   virtual int    id3Mass() const {return abs(id3);}
0733   virtual int    id4Mass() const {return abs(id4);}
0734   virtual int    resonanceA() const {return 23;}
0735   virtual bool   isSUSY()  const {return true;}
0736   virtual double getSigma0() const {return sigma0;}
0737 
0738  protected:
0739 
0740   // Basic process information
0741   int     id3chi, id4chi, codeSave;
0742   string  nameSave;
0743 
0744   // Values stored for later use
0745   double  sigma0, ui, uj, ti, tj, openFracPair;
0746 
0747 };
0748 
0749 //==========================================================================
0750 
0751 // A derived class for q qbar -> neutralino_i chargino_j.
0752 
0753 class Sigma2qqbar2chargluino : public Sigma2qqbar2chi0gluino {
0754 
0755 public:
0756 
0757   // Constructor.
0758   Sigma2qqbar2chargluino(int id4chiIn, int codeIn) {
0759 
0760     // Save ordering indices and process code
0761     id3   = 1000021;
0762     id4chi   = id4chiIn;
0763     codeSave = codeIn;
0764 
0765     // Construct id codes from ordering indices.
0766     id4 = (abs(id4chi) == 2) ? 1000037 : 1000024;
0767     if (id4chi < 0)  id4 = -id4;
0768   }
0769 
0770   // Initialize process.
0771   virtual void initProc();
0772 
0773   // Calculate flavour-independent parts of cross section.
0774   virtual void sigmaKin();
0775 
0776   // Evaluate d(sigmaHat)/d(tHat).
0777   virtual double sigmaHat();
0778 
0779   // Select flavour, colour and anticolour.
0780   virtual void setIdColAcol();
0781 
0782   virtual int    resonanceA() const {return 24;}
0783 
0784 protected :
0785 
0786   complex propW;
0787 
0788 };
0789 
0790 //==========================================================================
0791 
0792 // A derived class for q qbar' -> ~q_i ~q*_j
0793 
0794 class Sigma2qqbar2sleptonantislepton : public Sigma2qqbar2squarkantisquark {
0795 
0796 public:
0797 
0798   // Constructor.
0799   Sigma2qqbar2sleptonantislepton() : id3Sav(), id4Sav(), codeSave(), iGen3(),
0800     iGen4(), nNeut(), isUD(), xW(), openFracPair(), sigmaEW(), sumColS(),
0801     sumColT(), sumInterference() {}
0802 
0803   // Constructor.
0804   Sigma2qqbar2sleptonantislepton(int id3In, int id4In, int codeIn) : iGen3(),
0805     iGen4(), nNeut(), isUD(), xW(), openFracPair(), sigmaEW(), sumColS(),
0806     sumColT(), sumInterference() {
0807 
0808     // Save ordering indices and process code
0809     // (always store squark first, antisquark second)
0810     id3Sav = abs(id3In);
0811     id4Sav = -abs(id4In);
0812     codeSave = codeIn;
0813     // Initial values
0814     id3    = id3Sav;
0815     id4    = id4Sav;
0816   }
0817 
0818   // Initialize process.
0819   virtual void initProc();
0820 
0821   // Calculate flavour-independent parts of cross section.
0822   virtual void sigmaKin();
0823 
0824   // Evaluate d(sigmaHat)/d(tHat).
0825   virtual double sigmaHat();
0826 
0827   // Select flavour, colour and anticolour.
0828   virtual void setIdColAcol();
0829 
0830   // Info on the subprocess.
0831   virtual string name()    const {return nameSave;}
0832   virtual int    code()    const {return codeSave;}
0833   virtual string inFlux()  const {return "qq";}
0834   virtual int    id3Mass() const {return abs(id3Sav);}
0835   virtual int    id4Mass() const {return abs(id4Sav);}
0836   virtual bool   isSUSY()  const {return true;}
0837 
0838 private:
0839 
0840   // Basic process information
0841   int     id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
0842   string  nameSave;
0843   bool    isUD;
0844 
0845   // Storage of mass squares
0846   vector<double> m2Neut;
0847 
0848   // Flavor-independent prefactors: EW, strong, and interference
0849   double xW;
0850   double openFracPair;
0851   double sigmaEW;
0852 
0853   // Point-by-point info
0854   vector<double> tNeut, uNeut;
0855   complex propZW;
0856   double sumColS, sumColT, sumInterference;
0857 
0858 };
0859 
0860 //==========================================================================
0861 
0862 } // end namespace Pythia8
0863 
0864 #endif // Pythia8_SigmaSUSY_H