StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SigmaOnia.h
1 // SigmaOnia.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2020 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Header file for charmonia/bottomonia process differential cross sections.
7 // Contains classes derived from SigmaProcess via Sigma2Process.
8 
9 #ifndef Pythia8_SigmaOnia_H
10 #define Pythia8_SigmaOnia_H
11 
12 #include "Pythia8/SigmaProcess.h"
13 
14 namespace Pythia8 {
15 
16 //==========================================================================
17 
18 // A helper class used to setup the onia processes.
19 
20 class SigmaOniaSetup {
21 
22 public:
23 
24  // Constructors.
25  SigmaOniaSetup() : infoPtr(), settingsPtr(), particleDataPtr(), onia(),
26  onia3S1(), onia3PJ(), onia3DJ(), oniaFlavour(), valid3S1(), valid3PJ(),
27  valid3DJ(), validDbl3S1(), flavour(), mSplit() {};
28  SigmaOniaSetup(Info* infoPtrIn, int flavourIn);
29 
30  // Initialise the SigmaProcesses for gg, qg, qqbar, or double production.
31  void setupSigma2gg(vector<SigmaProcess*> &procs, bool oniaIn = false);
32  void setupSigma2qg(vector<SigmaProcess*> &procs, bool oniaIn = false);
33  void setupSigma2qq(vector<SigmaProcess*> &procs, bool oniaIn = false);
34  void setupSigma2dbl(vector<SigmaProcess*> &procs, bool oniaIn = false);
35 
36 private:
37 
38  // Intialise and check settings.
39  void initStates(string wave, const vector<int> &states,
40  vector<int> &jnums, bool &valid, bool duplicate = true);
41  void initSettings(string wave, unsigned int size,
42  const vector<string> &names, vector< vector<double> > &pvecs, bool &valid);
43  void initSettings(string wave, unsigned int size,
44  const vector<string> &names, vector< vector<bool> > &fvecs, bool &valid);
45 
46  // Stored pointers.
47  Info* infoPtr;
48  Settings* settingsPtr;
49  ParticleData* particleDataPtr;
50 
51  // Stored vectors of settings.
52  vector<int> states3S1, states3PJ, states3DJ, spins3S1, spins3PJ, spins3DJ,
53  states1Dbl3S1, states2Dbl3S1, spins1Dbl3S1, spins2Dbl3S1;
54  vector<string> meNames3S1, meNames3PJ, meNames3DJ, meNamesDbl3S1;
55  vector< vector<double> > mes3S1, mes3PJ, mes3DJ, mesDbl3S1;
56  vector<string> ggNames3S1, qgNames3S1, qqNames3S1,
57  ggNames3PJ, qgNames3PJ, qqNames3PJ, ggNames3DJ, qgNames3DJ, qqNames3DJ,
58  dblNames3S1;
59  vector< vector<bool> > ggs3S1, qgs3S1, qqs3S1, ggs3PJ, qgs3PJ, qqs3PJ,
60  ggs3DJ, qgs3DJ, qqs3DJ, dbls3S1;
61 
62  // Stored validity and production flags.
63  bool onia, onia3S1, onia3PJ, onia3DJ, oniaFlavour;
64  bool valid3S1, valid3PJ, valid3DJ, validDbl3S1;
65  int flavour;
66  string cat, key;
67 
68  // Stored parameters.
69  double mSplit;
70 
71 };
72 
73 //==========================================================================
74 
75 // A derived class for g g -> QQbar[3S1(1)] g (Q = c or b).
76 
77 class Sigma2gg2QQbar3S11g : public Sigma2Process {
78 
79 public:
80 
81  // Constructor.
82  Sigma2gg2QQbar3S11g(int idHadIn, double oniumMEIn, int codeIn) :
83  idHad(abs(idHadIn)), codeSave(codeIn), oniumME(oniumMEIn), sigma() {}
84 
85  // Initialize process.
86  virtual void initProc();
87 
88  // Calculate flavour-independent parts of cross section.
89  virtual void sigmaKin();
90 
91  // Evaluate d(sigmaHat)/d(tHat).
92  virtual double sigmaHat() {return sigma;}
93 
94  // Select flavour, colour and anticolour.
95  virtual void setIdColAcol();
96 
97  // Info on the subprocess.
98  virtual string name() const {return nameSave;}
99  virtual int code() const {return codeSave;}
100  virtual string inFlux() const {return "gg";}
101  virtual int id3Mass() const {return idHad;}
102 
103  private:
104 
105  // Values stored for process type and colour flow selection.
106  int idHad, codeSave;
107  string nameSave;
108  double oniumME, sigma;
109 
110 };
111 
112 //==========================================================================
113 
114 // A derived class for g g -> QQbar[3S1(1)] gamma (Q = c or b).
115 
116 class Sigma2gg2QQbar3S11gm : public Sigma2Process {
117 
118 public:
119 
120  // Constructor.
121  Sigma2gg2QQbar3S11gm(int idHadIn, double oniumMEIn, int codeIn) :
122  idHad(abs(idHadIn)), codeSave(codeIn), qEM2(), oniumME(oniumMEIn),
123  sigma() {}
124 
125  // Initialize process.
126  virtual void initProc();
127 
128  // Calculate flavour-independent parts of cross section.
129  virtual void sigmaKin();
130 
131  // Evaluate d(sigmaHat)/d(tHat).
132  virtual double sigmaHat() {return sigma;}
133 
134  // Select flavour, colour and anticolour.
135  virtual void setIdColAcol();
136 
137  // Info on the subprocess.
138  virtual string name() const {return nameSave;}
139  virtual int code() const {return codeSave;}
140  virtual string inFlux() const {return "gg";}
141  virtual int id3Mass() const {return idHad;}
142 
143  private:
144 
145  // Values stored for process type and colour flow selection.
146  int idHad, codeSave;
147  string nameSave;
148  double qEM2, oniumME, sigma;
149 
150 };
151 
152 //==========================================================================
153 
154 // A derived class for g g -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
155 
156 class Sigma2gg2QQbar3PJ1g : public Sigma2Process {
157 
158 public:
159 
160  // Constructor.
161  Sigma2gg2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
162  idHad(idHadIn), jSave(jIn), codeSave(codeIn), oniumME(oniumMEIn), sigma()
163  {}
164 
165  // Initialize process.
166  virtual void initProc();
167 
168  // Calculate flavour-independent parts of cross section.
169  virtual void sigmaKin();
170 
171  // Evaluate d(sigmaHat)/d(tHat).
172  virtual double sigmaHat() {return sigma;}
173 
174  // Select flavour, colour and anticolour.
175  virtual void setIdColAcol();
176 
177  // Info on the subprocess.
178  virtual string name() const {return nameSave;}
179  virtual int code() const {return codeSave;}
180  virtual string inFlux() const {return "gg";}
181  virtual int id3Mass() const {return idHad;}
182 
183 protected:
184 
185  // Name pre-, post-, and mid-fix.
186  virtual string namePrefix() const {return "g g";}
187  virtual string namePostfix() const {return "g";}
188  string nameMidfix() const {return (codeSave - codeSave%100)/100
189  == 4 ? "ccbar" : "bbbar";}
190 
191  // Values stored for process type and colour flow selection.
192  int idHad, jSave, codeSave;
193  string nameSave;
194  double oniumME, sigma;
195 
196 };
197 
198 //==========================================================================
199 
200 // A derived class for q g -> QQbar[3PJ(1)] q (Q = c or b, J = 0, 1 or 2).
201 
202 class Sigma2qg2QQbar3PJ1q : public Sigma2gg2QQbar3PJ1g {
203 
204 public:
205 
206  // Constructor.
207  Sigma2qg2QQbar3PJ1q(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
208  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
209 
210  // Calculate flavour-independent parts of cross section.
211  virtual void sigmaKin();
212 
213  // Select flavour, colour and anticolour.
214  virtual void setIdColAcol();
215 
216  // Info on the subprocess.
217  virtual string inFlux() const {return "qg";}
218 
219 protected:
220 
221  // Name pre- and post-fix.
222  string namePrefix() const {return "q g";}
223  string namePostfix() const {return "q";}
224 
225 };
226 
227 //==========================================================================
228 
229 // A derived class for q qbar -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
230 
231 class Sigma2qqbar2QQbar3PJ1g : public Sigma2gg2QQbar3PJ1g {
232 
233 public:
234 
235  // Constructor.
236  Sigma2qqbar2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
237  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
238 
239  // Calculate flavour-independent parts of cross section.
240  virtual void sigmaKin();
241 
242  // Select flavour, colour and anticolour.
243  virtual void setIdColAcol();
244 
245  // Info on the subprocess.
246  virtual string inFlux() const {return "qqbarSame";}
247 
248 protected:
249 
250  // Name pre- and post-fix.
251  string namePrefix() const {return "q qbar";}
252  string namePostfix() const {return "g";}
253 
254 };
255 
256 //==========================================================================
257 
258 // A derived class for g g -> QQbar[3DJ(1)] g (Q = c or b).
259 
260 class Sigma2gg2QQbar3DJ1g : public Sigma2gg2QQbar3PJ1g {
261 
262 public:
263 
264  // Constructor.
265  Sigma2gg2QQbar3DJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
266  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
267 
268  // Initialize process.
269  virtual void initProc();
270 
271  // Calculate flavour-independent parts of cross section.
272  virtual void sigmaKin();
273 
274 };
275 
276 //==========================================================================
277 
278 // A derived class for g g -> QQbar[X(8)] g (Q = c or b, X = 3S1, 1S0 or 3PJ).
279 
280 class Sigma2gg2QQbarX8g : public Sigma2Process {
281 
282 public:
283 
284  // Constructor.
285  Sigma2gg2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
286  double mSplitIn, int codeIn) : idHad(idHadIn), stateSave(stateIn),
287  codeSave(codeIn), oniumME(oniumMEIn), sigma(), mSplit(mSplitIn) {}
288 
289  // Initialize process.
290  virtual void initProc();
291 
292  // Calculate flavour-independent parts of cross section.
293  virtual void sigmaKin();
294 
295  // Evaluate d(sigmaHat)/d(tHat).
296  virtual double sigmaHat() {return sigma;}
297 
298  // Select flavour, colour and anticolour.
299  virtual void setIdColAcol();
300 
301  // Info on the subprocess.
302  virtual string name() const {return nameSave;}
303  virtual int code() const {return codeSave;}
304  virtual string inFlux() const {return "gg";}
305  virtual int id3Mass() const {return idHad;}
306 
307 protected:
308 
309  // Name pre- and post-fix.
310  virtual string namePrefix() const {return "g g";}
311  virtual string namePostfix() const {return "g";}
312 
313  // Values stored for process type and colour flow selection.
314  int idHad, stateSave, codeSave;
315  string nameSave;
316  double oniumME, sigma, mSplit;
317 
318 };
319 
320 //==========================================================================
321 
322 // A derived class for q g -> QQbar[X(8)] q (Q = c or b, X = 3S1, 1S0 or 3PJ).
323 
324 class Sigma2qg2QQbarX8q : public Sigma2gg2QQbarX8g {
325 
326 public:
327 
328  // Constructor.
329  Sigma2qg2QQbarX8q(int idHadIn, double oniumMEIn, int stateIn,
330  double mSplitIn, int codeIn) :
331  Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
332 
333  // Calculate flavour-independent parts of cross section.
334  virtual void sigmaKin();
335 
336  // Select flavour, colour and anticolour.
337  virtual void setIdColAcol();
338 
339  // Info on the subprocess.
340  virtual string inFlux() const {return "qg";}
341 
342 protected:
343 
344  // Name pre- and post-fix.
345  virtual string namePrefix() const {return "q g";}
346  virtual string namePostfix() const {return "q";}
347 
348 };
349 
350 //==========================================================================
351 
352 // A derived class for q qbar -> QQbar[X(8)] g (Q = c or b,
353 // X = 3S1, 1S0 or 3PJ).
354 
355 class Sigma2qqbar2QQbarX8g : public Sigma2gg2QQbarX8g {
356 
357 public:
358 
359  // Constructor.
360  Sigma2qqbar2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
361  double mSplitIn, int codeIn) :
362  Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
363 
364  // Calculate flavour-independent parts of cross section.
365  virtual void sigmaKin();
366 
367  // Select flavour, colour and anticolour.
368  virtual void setIdColAcol();
369 
370  // Info on the subprocess.
371  virtual string inFlux() const {return "qqbarSame";}
372 
373 protected:
374 
375  // Name pre- and post-fix.
376  virtual string namePrefix() const {return "q qbar";}
377  virtual string namePostfix() const {return "g";}
378 
379 };
380 
381 //==========================================================================
382 
383 // A derived class for g g -> QQbar[3S1(1)] QQbar[3S1(1)] (Q = c or b).
384 
385 class Sigma2gg2QQbar3S11QQbar3S11 : public Sigma2Process {
386 
387 public:
388 
389  // Constructor.
390  Sigma2gg2QQbar3S11QQbar3S11(int idHad1In, int idHad2In,
391  double oniumME1In, double oniumME2In, int codeIn) :
392  idHad1(abs(idHad1In)), idHad2(abs(idHad2In)), codeSave(codeIn),
393  oniumME1(oniumME1In), oniumME2(oniumME2In), sigma() {}
394 
395  // Initialize process.
396  virtual void initProc();
397 
398  // Calculate flavour-independent parts of cross section.
399  virtual void sigmaKin();
400 
401  // Evaluate d(sigmaHat)/d(tHat).
402  virtual double sigmaHat() {return sigma;}
403 
404  // Select flavour, colour and anticolour.
405  virtual void setIdColAcol();
406 
407  // Info on the subprocess.
408  virtual string name() const {return nameSave;}
409  virtual int code() const {return codeSave;}
410  virtual string inFlux() const {return "gg";}
411  virtual int id3Mass() const {return idHad1;}
412  virtual int id4Mass() const {return idHad2;}
413 
414  private:
415 
416  // Values stored for process type and colour flow selection.
417  int idHad1, idHad2, codeSave;
418  string nameSave;
419  double oniumME1, oniumME2, sigma;
420  vector<double> m2V;
421 
422 };
423 
424 //==========================================================================
425 
426 // A derived class for q qbar -> QQbar[3S1(1)] QQbar[3S1(1)] (Q = c or b).
427 
428 class Sigma2qqbar2QQbar3S11QQbar3S11 : public Sigma2Process {
429 
430 public:
431 
432  // Constructor.
433  Sigma2qqbar2QQbar3S11QQbar3S11(int idHad1In, int idHad2In,
434  double oniumME1In, double oniumME2In, int codeIn) :
435  idHad1(abs(idHad1In)), idHad2(abs(idHad2In)), codeSave(codeIn), m2(),
436  oniumME1(oniumME1In), oniumME2(oniumME2In), sigma() {}
437 
438  // Initialize process.
439  virtual void initProc();
440 
441  // Calculate flavour-independent parts of cross section.
442  virtual void sigmaKin();
443 
444  // Evaluate d(sigmaHat)/d(tHat).
445  virtual double sigmaHat() {return sigma;}
446 
447  // Select flavour, colour and anticolour.
448  virtual void setIdColAcol();
449 
450  // Info on the subprocess.
451  virtual string name() const {return nameSave;}
452  virtual int code() const {return codeSave;}
453  virtual string inFlux() const {return "qqbarSame";}
454  virtual int id3Mass() const {return idHad1;}
455  virtual int id4Mass() const {return idHad2;}
456 
457  private:
458 
459  // Values stored for process type and colour flow selection.
460  int idHad1, idHad2, codeSave;
461  string nameSave;
462  double m2, oniumME1, oniumME2, sigma;
463 
464 };
465 
466 //==========================================================================
467 
468 } // end namespace Pythia8
469 
470 #endif // Pythia8_SigmaOnia_H