Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/Pythia8/SigmaOnia.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // SigmaOnia.h is a part of the PYTHIA event generator.
0002 // Copyright (C) 2024 Torbjorn Sjostrand.
0003 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
0004 // Please respect the MCnet Guidelines, see GUIDELINES for details.
0005 
0006 // Header file for charmonia/bottomonia process differential cross sections.
0007 // Contains classes derived from SigmaProcess via Sigma2Process.
0008 
0009 #ifndef Pythia8_SigmaOnia_H
0010 #define Pythia8_SigmaOnia_H
0011 
0012 #include "Pythia8/SigmaProcess.h"
0013 
0014 namespace Pythia8 {
0015 
0016 //==========================================================================
0017 
0018 // A helper class used to check onia settings. Used for the parton shower
0019 // and hard process.
0020 
0021 class OniaSetup {
0022 
0023 protected:
0024 
0025   // Constructors.
0026   OniaSetup() = default;
0027   OniaSetup(Info* infoPtrIn, int flavourIn, string pre = "");
0028 
0029   // Intialise and check settings.
0030   void initStates(string wave, const vector<int> &states,
0031     vector<int> &jnums, bool &valid, bool duplicate = true);
0032   void initSettings(string wave, unsigned int size,
0033     const vector<string> &names, vector< vector<double> > &pvecs, bool &valid);
0034   void initSettings(string wave, unsigned int size,
0035     const vector<string> &names, vector< vector<bool> > &fvecs, bool &valid);
0036 
0037   // Stored pointers.
0038   Info* infoPtr = {};
0039   Logger* loggerPtr = {};
0040   Settings* settingsPtr = {};
0041   ParticleData* particleDataPtr = {};
0042 
0043   // Stored vectors of settings.
0044   vector<int> states3S1, states3PJ, spins3S1, spins3PJ;
0045   vector<string> meNames3S1, meNames3PJ;
0046   vector< vector<double> > mes3S1, mes3PJ;
0047 
0048   // Stored validity and production flags.
0049   bool onia{}, onia3S1{}, onia3PJ{}, oniaFlavour{},
0050     valid3S1{true}, valid3PJ{true};
0051   int flavour{};
0052   string cat, key;
0053 
0054   // Stored parameters.
0055   double mSplit{};
0056 
0057 };
0058 
0059 //==========================================================================
0060 
0061 // A helper class used to setup the onia processes.
0062 
0063 class SigmaOniaSetup : public OniaSetup {
0064 
0065 public:
0066 
0067   // Constructors.
0068   SigmaOniaSetup() = default;
0069   SigmaOniaSetup(Info* infoPtrIn, int flavourIn);
0070 
0071   // Initialise the SigmaProcesses for gg, qg, qqbar.
0072   void setupSigma2gg(vector<SigmaProcessPtr> &procs, bool oniaIn = false);
0073   void setupSigma2qg(vector<SigmaProcessPtr> &procs, bool oniaIn = false);
0074   void setupSigma2qq(vector<SigmaProcessPtr> &procs, bool oniaIn = false);
0075 
0076 private:
0077 
0078   // Additional stored validity and production flags.
0079   bool onia3DJ{true}, valid3DJ{true}, validDbl3S1{true};
0080 
0081   // Stored vectors of settings.
0082   vector<int> states3DJ, spins3DJ, states1Dbl3S1, states2Dbl3S1, spins1Dbl3S1,
0083     spins2Dbl3S1;
0084   vector<string> meNames3DJ, meNamesDbl3S1;
0085   vector< vector<double> > mes3DJ, mesDbl3S1;
0086   vector<string> ggNames3S1, qgNames3S1, qqNames3S1,
0087     ggNames3PJ, qgNames3PJ, qqNames3PJ, ggNames3DJ, qgNames3DJ, qqNames3DJ,
0088     dblNames3S1;
0089   vector< vector<bool> > ggs3S1, qgs3S1, qqs3S1, ggs3PJ, qgs3PJ, qqs3PJ,
0090     ggs3DJ, qgs3DJ, qqs3DJ, dbls3S1;
0091 
0092 };
0093 
0094 //==========================================================================
0095 
0096 // A derived class for g g -> QQbar[3S1(1)] g (Q = c or b).
0097 
0098 class Sigma2gg2QQbar3S11g : public Sigma2Process {
0099 
0100 public:
0101 
0102   // Constructor.
0103   Sigma2gg2QQbar3S11g(int idHadIn, double oniumMEIn, int codeIn) :
0104     idHad(abs(idHadIn)), codeSave(codeIn), oniumME(oniumMEIn), sigma() {}
0105 
0106   // Initialize process.
0107   virtual void initProc();
0108 
0109   // Calculate flavour-independent parts of cross section.
0110   virtual void sigmaKin();
0111 
0112   // Evaluate d(sigmaHat)/d(tHat).
0113   virtual double sigmaHat() {return sigma;}
0114 
0115   // Select flavour, colour and anticolour.
0116   virtual void setIdColAcol();
0117 
0118   // Info on the subprocess.
0119   virtual string name()    const {return nameSave;}
0120   virtual int    code()    const {return codeSave;}
0121   virtual string inFlux()  const {return "gg";}
0122   virtual int    id3Mass() const {return idHad;}
0123 
0124  private:
0125 
0126   // Values stored for process type and colour flow selection.
0127   int    idHad, codeSave;
0128   string nameSave;
0129   double oniumME, sigma;
0130 
0131 };
0132 
0133 //==========================================================================
0134 
0135 // A derived class for g g -> QQbar[3S1(1)] gamma (Q = c or b).
0136 
0137 class Sigma2gg2QQbar3S11gm : public Sigma2Process {
0138 
0139 public:
0140 
0141   // Constructor.
0142   Sigma2gg2QQbar3S11gm(int idHadIn, double oniumMEIn, int codeIn) :
0143     idHad(abs(idHadIn)), codeSave(codeIn), qEM2(), oniumME(oniumMEIn),
0144     sigma() {}
0145 
0146   // Initialize process.
0147   virtual void initProc();
0148 
0149   // Calculate flavour-independent parts of cross section.
0150   virtual void sigmaKin();
0151 
0152   // Evaluate d(sigmaHat)/d(tHat).
0153   virtual double sigmaHat() {return sigma;}
0154 
0155   // Select flavour, colour and anticolour.
0156   virtual void setIdColAcol();
0157 
0158   // Info on the subprocess.
0159   virtual string name()    const {return nameSave;}
0160   virtual int    code()    const {return codeSave;}
0161   virtual string inFlux()  const {return "gg";}
0162   virtual int    id3Mass() const {return idHad;}
0163 
0164  private:
0165 
0166   // Values stored for process type and colour flow selection.
0167   int    idHad, codeSave;
0168   string nameSave;
0169   double qEM2, oniumME, sigma;
0170 
0171 };
0172 
0173 //==========================================================================
0174 
0175 // A derived class for g g -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
0176 
0177 class Sigma2gg2QQbar3PJ1g : public Sigma2Process {
0178 
0179 public:
0180 
0181   // Constructor.
0182   Sigma2gg2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
0183     idHad(idHadIn), jSave(jIn), codeSave(codeIn), oniumME(oniumMEIn), sigma()
0184     {}
0185 
0186   // Initialize process.
0187   virtual void initProc();
0188 
0189   // Calculate flavour-independent parts of cross section.
0190   virtual void sigmaKin();
0191 
0192   // Evaluate d(sigmaHat)/d(tHat).
0193   virtual double sigmaHat() {return sigma;}
0194 
0195   // Select flavour, colour and anticolour.
0196   virtual void setIdColAcol();
0197 
0198   // Info on the subprocess.
0199   virtual string name()    const {return nameSave;}
0200   virtual int    code()    const {return codeSave;}
0201   virtual string inFlux()  const {return "gg";}
0202   virtual int    id3Mass() const {return idHad;}
0203 
0204 protected:
0205 
0206   // Name pre-, post-, and mid-fix.
0207   virtual string namePrefix()  const {return "g g";}
0208   virtual string namePostfix() const {return "g";}
0209   string nameMidfix() const {return (codeSave - codeSave%100)/100
0210       == 4 ? "ccbar" : "bbbar";}
0211 
0212   // Values stored for process type and colour flow selection.
0213   int    idHad, jSave, codeSave;
0214   string nameSave;
0215   double oniumME, sigma;
0216 
0217 };
0218 
0219 //==========================================================================
0220 
0221 // A derived class for q g -> QQbar[3PJ(1)] q (Q = c or b, J = 0, 1 or 2).
0222 
0223 class Sigma2qg2QQbar3PJ1q : public Sigma2gg2QQbar3PJ1g {
0224 
0225 public:
0226 
0227   // Constructor.
0228   Sigma2qg2QQbar3PJ1q(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
0229     Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
0230 
0231   // Calculate flavour-independent parts of cross section.
0232   virtual void sigmaKin();
0233 
0234   // Select flavour, colour and anticolour.
0235   virtual void setIdColAcol();
0236 
0237   // Info on the subprocess.
0238   virtual string inFlux()  const {return "qg";}
0239 
0240 protected:
0241 
0242   // Name pre- and post-fix.
0243   string namePrefix()  const {return "q g";}
0244   string namePostfix() const {return "q";}
0245 
0246 };
0247 
0248 //==========================================================================
0249 
0250 // A derived class for q qbar -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
0251 
0252 class Sigma2qqbar2QQbar3PJ1g : public Sigma2gg2QQbar3PJ1g {
0253 
0254 public:
0255 
0256   // Constructor.
0257   Sigma2qqbar2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
0258     Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
0259 
0260   // Calculate flavour-independent parts of cross section.
0261   virtual void sigmaKin();
0262 
0263   // Select flavour, colour and anticolour.
0264   virtual void setIdColAcol();
0265 
0266   // Info on the subprocess.
0267   virtual string inFlux()  const {return "qqbarSame";}
0268 
0269 protected:
0270 
0271   // Name pre- and post-fix.
0272   string namePrefix()  const {return "q qbar";}
0273   string namePostfix() const {return "g";}
0274 
0275 };
0276 
0277 //==========================================================================
0278 
0279 // A derived class for g g -> QQbar[3DJ(1)] g (Q = c or b).
0280 
0281 class Sigma2gg2QQbar3DJ1g : public Sigma2gg2QQbar3PJ1g {
0282 
0283 public:
0284 
0285   // Constructor.
0286   Sigma2gg2QQbar3DJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
0287     Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
0288 
0289   // Initialize process.
0290   virtual void initProc();
0291 
0292   // Calculate flavour-independent parts of cross section.
0293   virtual void sigmaKin();
0294 
0295 };
0296 
0297 //==========================================================================
0298 
0299 // A derived class for g g -> QQbar[X(8)] g (Q = c or b, X = 3S1, 1S0 or 3PJ).
0300 
0301 class Sigma2gg2QQbarX8g : public Sigma2Process {
0302 
0303 public:
0304 
0305   // Constructor.
0306   Sigma2gg2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
0307     double mSplitIn, int codeIn) : idHad(idHadIn), stateSave(stateIn),
0308     codeSave(codeIn), oniumME(oniumMEIn), sigma(), mSplit(mSplitIn) {}
0309 
0310   // Initialize process.
0311   virtual void initProc();
0312 
0313   // Calculate flavour-independent parts of cross section.
0314   virtual void sigmaKin();
0315 
0316   // Evaluate d(sigmaHat)/d(tHat).
0317   virtual double sigmaHat() {return sigma;}
0318 
0319   // Select flavour, colour and anticolour.
0320   virtual void setIdColAcol();
0321 
0322   // Info on the subprocess.
0323   virtual string name()    const {return nameSave;}
0324   virtual int    code()    const {return codeSave;}
0325   virtual string inFlux()  const {return "gg";}
0326   virtual int    id3Mass() const {return idHad;}
0327 
0328 protected:
0329 
0330   // Name pre- and post-fix.
0331   virtual string namePrefix()  const {return "g g";}
0332   virtual string namePostfix() const {return "g";}
0333 
0334   // Values stored for process type and colour flow selection.
0335   int    idHad, stateSave, codeSave;
0336   string nameSave;
0337   double oniumME, sigma, mSplit;
0338 
0339 };
0340 
0341 //==========================================================================
0342 
0343 // A derived class for q g -> QQbar[X(8)] q (Q = c or b, X = 3S1, 1S0 or 3PJ).
0344 
0345 class Sigma2qg2QQbarX8q : public Sigma2gg2QQbarX8g {
0346 
0347 public:
0348 
0349   // Constructor.
0350   Sigma2qg2QQbarX8q(int idHadIn, double oniumMEIn, int stateIn,
0351     double mSplitIn, int codeIn) :
0352     Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
0353 
0354   // Calculate flavour-independent parts of cross section.
0355   virtual void sigmaKin();
0356 
0357   // Select flavour, colour and anticolour.
0358   virtual void setIdColAcol();
0359 
0360   // Info on the subprocess.
0361   virtual string inFlux()  const {return "qg";}
0362 
0363 protected:
0364 
0365   // Name pre- and post-fix.
0366   virtual string namePrefix()  const {return "q g";}
0367   virtual string namePostfix() const {return "q";}
0368 
0369 };
0370 
0371 //==========================================================================
0372 
0373 // A derived class for q qbar -> QQbar[X(8)] g (Q = c or b,
0374 // X = 3S1, 1S0 or 3PJ).
0375 
0376 class Sigma2qqbar2QQbarX8g : public Sigma2gg2QQbarX8g {
0377 
0378 public:
0379 
0380   // Constructor.
0381   Sigma2qqbar2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
0382     double mSplitIn, int codeIn) :
0383     Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
0384 
0385   // Calculate flavour-independent parts of cross section.
0386   virtual void sigmaKin();
0387 
0388   // Select flavour, colour and anticolour.
0389   virtual void setIdColAcol();
0390 
0391   // Info on the subprocess.
0392   virtual string inFlux()  const {return "qqbarSame";}
0393 
0394 protected:
0395 
0396   // Name pre- and post-fix.
0397   virtual string namePrefix()  const {return "q qbar";}
0398   virtual string namePostfix() const {return "g";}
0399 
0400 };
0401 
0402 //==========================================================================
0403 
0404 // A derived class for g g -> QQbar[3S1(1)] QQbar[3S1(1)] (Q = c or b).
0405 
0406 class Sigma2gg2QQbar3S11QQbar3S11 : public Sigma2Process {
0407 
0408 public:
0409 
0410   // Constructor.
0411   Sigma2gg2QQbar3S11QQbar3S11(int idHad1In, int idHad2In,
0412     double oniumME1In, double oniumME2In, int codeIn) :
0413     idHad1(abs(idHad1In)), idHad2(abs(idHad2In)), codeSave(codeIn),
0414     oniumME1(oniumME1In), oniumME2(oniumME2In), sigma() {}
0415 
0416   // Initialize process.
0417   virtual void initProc();
0418 
0419   // Calculate flavour-independent parts of cross section.
0420   virtual void sigmaKin();
0421 
0422   // Evaluate d(sigmaHat)/d(tHat).
0423   virtual double sigmaHat() {return sigma;}
0424 
0425   // Select flavour, colour and anticolour.
0426   virtual void setIdColAcol();
0427 
0428   // Info on the subprocess.
0429   virtual string name()    const {return nameSave;}
0430   virtual int    code()    const {return codeSave;}
0431   virtual string inFlux()  const {return "gg";}
0432   virtual int    id3Mass() const {return idHad1;}
0433   virtual int    id4Mass() const {return idHad2;}
0434 
0435  private:
0436 
0437   // Values stored for process type and colour flow selection.
0438   int    idHad1, idHad2, codeSave;
0439   string nameSave;
0440   double oniumME1, oniumME2, sigma;
0441   vector<double> m2V;
0442 
0443 };
0444 
0445 //==========================================================================
0446 
0447 // A derived class for q qbar -> QQbar[3S1(1)] QQbar[3S1(1)] (Q = c or b).
0448 
0449 class Sigma2qqbar2QQbar3S11QQbar3S11 : public Sigma2Process {
0450 
0451 public:
0452 
0453   // Constructor.
0454   Sigma2qqbar2QQbar3S11QQbar3S11(int idHad1In, int idHad2In,
0455     double oniumME1In, double oniumME2In, int codeIn) :
0456     idHad1(abs(idHad1In)), idHad2(abs(idHad2In)), codeSave(codeIn), m2(),
0457     oniumME1(oniumME1In), oniumME2(oniumME2In), sigma() {}
0458 
0459   // Initialize process.
0460   virtual void initProc();
0461 
0462   // Calculate flavour-independent parts of cross section.
0463   virtual void sigmaKin();
0464 
0465   // Evaluate d(sigmaHat)/d(tHat).
0466   virtual double sigmaHat() {return sigma;}
0467 
0468   // Select flavour, colour and anticolour.
0469   virtual void setIdColAcol();
0470 
0471   // Info on the subprocess.
0472   virtual string name()    const {return nameSave;}
0473   virtual int    code()    const {return codeSave;}
0474   virtual string inFlux()  const {return "qqbarSame";}
0475   virtual int    id3Mass() const {return idHad1;}
0476   virtual int    id4Mass() const {return idHad2;}
0477 
0478  private:
0479 
0480   // Values stored for process type and colour flow selection.
0481   int    idHad1, idHad2, codeSave;
0482   string nameSave;
0483   double m2, oniumME1, oniumME2, sigma;
0484 
0485 };
0486 
0487 //==========================================================================
0488 
0489 } // end namespace Pythia8
0490 
0491 #endif // Pythia8_SigmaOnia_H