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) 2014 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 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 
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, or qqbar 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 
34 private:
35 
36  // Intialise and check settings.
37  void initStates(string wave, const vector<int> &states,
38  vector<int> &jnums, bool &valid);
39  void initSettings(string wave, unsigned int size,
40  const vector<string> &names, vector< vector<double> > &pvecs, bool &valid);
41  void initSettings(string wave, unsigned int size,
42  const vector<string> &names, vector< vector<bool> > &fvecs, bool &valid);
43 
44  // Stored pointers.
45  Info* infoPtr;
46  Settings* settingsPtr;
47  ParticleData* particleDataPtr;
48 
49  // Stored vectors of settings.
50  vector<int> states3S1, states3PJ, states3DJ, spins3S1, spins3PJ, spins3DJ;
51  vector<string> meNames3S1, meNames3PJ, meNames3DJ;
52  vector< vector<double> > mes3S1, mes3PJ, mes3DJ;
53  vector<string> ggNames3S1, qgNames3S1, qqNames3S1,
54  ggNames3PJ, qgNames3PJ, qqNames3PJ, ggNames3DJ, qgNames3DJ, qqNames3DJ;
55  vector< vector<bool> > ggs3S1, qgs3S1, qqs3S1, ggs3PJ, qgs3PJ, qqs3PJ,
56  ggs3DJ, qgs3DJ, qqs3DJ;
57 
58  // Stored validity and production flags.
59  bool onia, onia3S1, onia3PJ, onia3DJ, oniaFlavour;
60  bool valid3S1, valid3PJ, valid3DJ;
61  int flavour;
62  string cat, key;
63 
64  // Stored parameters.
65  double mSplit;
66 
67 };
68 
69 //==========================================================================
70 
71 // A derived class for g g -> QQbar[3S1(1)] g (Q = c or b).
72 
73 class Sigma2gg2QQbar3S11g : public Sigma2Process {
74 
75 public:
76 
77  // Constructor.
78  Sigma2gg2QQbar3S11g(int idHadIn, double oniumMEIn, int codeIn) :
79  idHad(abs(idHadIn)), codeSave(codeIn), oniumME(oniumMEIn) {}
80 
81  // Initialize process.
82  virtual void initProc();
83 
84  // Calculate flavour-independent parts of cross section.
85  virtual void sigmaKin();
86 
87  // Evaluate d(sigmaHat)/d(tHat).
88  virtual double sigmaHat() {return sigma;}
89 
90  // Select flavour, colour and anticolour.
91  virtual void setIdColAcol();
92 
93  // Info on the subprocess.
94  virtual string name() const {return nameSave;}
95  virtual int code() const {return codeSave;}
96  virtual string inFlux() const {return "gg";}
97  virtual int id3Mass() const {return idHad;}
98 
99  private:
100 
101  // Values stored for process type and colour flow selection.
102  int idHad, codeSave;
103  string nameSave;
104  double oniumME, sigma;
105 
106 };
107 
108 //==========================================================================
109 
110 // A derived class for g g -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
111 
112 class Sigma2gg2QQbar3PJ1g : public Sigma2Process {
113 
114 public:
115 
116  // Constructor.
117  Sigma2gg2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
118  idHad(idHadIn), jSave(jIn), codeSave(codeIn), oniumME(oniumMEIn) {}
119 
120  // Initialize process.
121  virtual void initProc();
122 
123  // Calculate flavour-independent parts of cross section.
124  virtual void sigmaKin();
125 
126  // Evaluate d(sigmaHat)/d(tHat).
127  virtual double sigmaHat() {return sigma;}
128 
129  // Select flavour, colour and anticolour.
130  virtual void setIdColAcol();
131 
132  // Info on the subprocess.
133  virtual string name() const {return nameSave;}
134  virtual int code() const {return codeSave;}
135  virtual string inFlux() const {return "gg";}
136  virtual int id3Mass() const {return idHad;}
137 
138 protected:
139 
140  // Name pre-, post-, and mid-fix.
141  virtual string namePrefix() const {return "g g";}
142  virtual string namePostfix() const {return "g";}
143  string nameMidfix() const {return (codeSave - codeSave%100)/100
144  == 4 ? "ccbar" : "bbbar";}
145 
146  // Values stored for process type and colour flow selection.
147  int idHad, jSave, codeSave;
148  string nameSave;
149  double oniumME, sigma;
150 
151 };
152 
153 //==========================================================================
154 
155 // A derived class for q g -> QQbar[3PJ(1)] q (Q = c or b, J = 0, 1 or 2).
156 
157 class Sigma2qg2QQbar3PJ1q : public Sigma2gg2QQbar3PJ1g {
158 
159 public:
160 
161  // Constructor.
162  Sigma2qg2QQbar3PJ1q(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
163  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
164 
165  // Calculate flavour-independent parts of cross section.
166  virtual void sigmaKin();
167 
168  // Select flavour, colour and anticolour.
169  virtual void setIdColAcol();
170 
171  // Info on the subprocess.
172  virtual string inFlux() const {return "qg";}
173 
174 protected:
175 
176  // Name pre- and post-fix.
177  string namePrefix() const {return "q g";}
178  string namePostfix() const {return "q";}
179 
180 };
181 
182 //==========================================================================
183 
184 // A derived class for q qbar -> QQbar[3PJ(1)] g (Q = c or b, J = 0, 1 or 2).
185 
186 class Sigma2qqbar2QQbar3PJ1g : public Sigma2gg2QQbar3PJ1g {
187 
188 public:
189 
190  // Constructor.
191  Sigma2qqbar2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
192  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
193 
194  // Calculate flavour-independent parts of cross section.
195  virtual void sigmaKin();
196 
197  // Select flavour, colour and anticolour.
198  virtual void setIdColAcol();
199 
200  // Info on the subprocess.
201  virtual string inFlux() const {return "qqbarSame";}
202 
203 protected:
204 
205  // Name pre- and post-fix.
206  string namePrefix() const {return "q qbar";}
207  string namePostfix() const {return "g";}
208 
209 };
210 
211 //==========================================================================
212 
213 // A derived class for g g -> QQbar[3DJ(1)] g (Q = c or b).
214 
216 
217 public:
218 
219  // Constructor.
220  Sigma2gg2QQbar3DJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
221  Sigma2gg2QQbar3PJ1g(idHadIn, oniumMEIn, jIn, codeIn) {}
222 
223  // Initialize process.
224  virtual void initProc();
225 
226  // Calculate flavour-independent parts of cross section.
227  virtual void sigmaKin();
228 
229 };
230 
231 //==========================================================================
232 
233 // A derived class for g g -> QQbar[X(8)] g (Q = c or b, X = 3S1, 1S0 or 3PJ).
234 
235 class Sigma2gg2QQbarX8g : public Sigma2Process {
236 
237 public:
238 
239  // Constructor.
240  Sigma2gg2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
241  double mSplitIn, int codeIn) : idHad(idHadIn), stateSave(stateIn),
242  codeSave(codeIn), oniumME(oniumMEIn), mSplit(mSplitIn) {}
243 
244  // Initialize process.
245  virtual void initProc();
246 
247  // Calculate flavour-independent parts of cross section.
248  virtual void sigmaKin();
249 
250  // Evaluate d(sigmaHat)/d(tHat).
251  virtual double sigmaHat() {return sigma;}
252 
253  // Select flavour, colour and anticolour.
254  virtual void setIdColAcol();
255 
256  // Info on the subprocess.
257  virtual string name() const {return nameSave;}
258  virtual int code() const {return codeSave;}
259  virtual string inFlux() const {return "gg";}
260  virtual int id3Mass() const {return idHad;}
261 
262 protected:
263 
264  // Name pre- and post-fix.
265  virtual string namePrefix() const {return "g g";}
266  virtual string namePostfix() const {return "g";}
267 
268  // Values stored for process type and colour flow selection.
269  int idHad, stateSave, codeSave;
270  string nameSave;
271  double oniumME, sigma, mSplit;
272 
273 };
274 
275 //==========================================================================
276 
277 // A derived class for q g -> QQbar[X(8)] q (Q = c or b, X = 3S1, 1S0 or 3PJ).
278 
279 class Sigma2qg2QQbarX8q : public Sigma2gg2QQbarX8g {
280 
281 public:
282 
283  // Constructor.
284  Sigma2qg2QQbarX8q(int idHadIn, double oniumMEIn, int stateIn,
285  double mSplitIn, int codeIn) :
286  Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
287 
288  // Calculate flavour-independent parts of cross section.
289  virtual void sigmaKin();
290 
291  // Select flavour, colour and anticolour.
292  virtual void setIdColAcol();
293 
294  // Info on the subprocess.
295  virtual string inFlux() const {return "qg";}
296 
297 protected:
298 
299  // Name pre- and post-fix.
300  virtual string namePrefix() const {return "q g";}
301  virtual string namePostfix() const {return "q";}
302 
303 };
304 
305 //==========================================================================
306 
307 // A derived class for q qbar -> QQbar[X(8)] g (Q = c or b,
308 // X = 3S1, 1S0 or 3PJ).
309 
310 class Sigma2qqbar2QQbarX8g : public Sigma2gg2QQbarX8g {
311 
312 public:
313 
314  // Constructor.
315  Sigma2qqbar2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
316  double mSplitIn, int codeIn) :
317  Sigma2gg2QQbarX8g(idHadIn, oniumMEIn, stateIn, mSplitIn, codeIn) {}
318 
319  // Calculate flavour-independent parts of cross section.
320  virtual void sigmaKin();
321 
322  // Select flavour, colour and anticolour.
323  virtual void setIdColAcol();
324 
325  // Info on the subprocess.
326  virtual string inFlux() const {return "qqbarSame";}
327 
328 protected:
329 
330  // Name pre- and post-fix.
331  virtual string namePrefix() const {return "q qbar";}
332  virtual string namePostfix() const {return "g";}
333 
334 };
335 
336 //==========================================================================
337 
338 } // end namespace Pythia8
339 
340 #endif // Pythia8_SigmaOnia_H