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