Line data Source code
1 : // SigmaOnia.h is a part of the PYTHIA event generator.
2 : // Copyright (C) 2015 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 :
20 0 : class SigmaOniaSetup {
21 :
22 : public:
23 :
24 : // Constructors.
25 0 : 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 0 : class Sigma2gg2QQbar3S11g : public Sigma2Process {
74 :
75 : public:
76 :
77 : // Constructor.
78 0 : Sigma2gg2QQbar3S11g(int idHadIn, double oniumMEIn, int codeIn) :
79 0 : 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 0 : virtual double sigmaHat() {return sigma;}
89 :
90 : // Select flavour, colour and anticolour.
91 : virtual void setIdColAcol();
92 :
93 : // Info on the subprocess.
94 0 : virtual string name() const {return nameSave;}
95 0 : virtual int code() const {return codeSave;}
96 0 : virtual string inFlux() const {return "gg";}
97 0 : 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 0 : class Sigma2gg2QQbar3PJ1g : public Sigma2Process {
113 :
114 : public:
115 :
116 : // Constructor.
117 0 : Sigma2gg2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
118 0 : 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 0 : virtual double sigmaHat() {return sigma;}
128 :
129 : // Select flavour, colour and anticolour.
130 : virtual void setIdColAcol();
131 :
132 : // Info on the subprocess.
133 0 : virtual string name() const {return nameSave;}
134 0 : virtual int code() const {return codeSave;}
135 0 : virtual string inFlux() const {return "gg";}
136 0 : virtual int id3Mass() const {return idHad;}
137 :
138 : protected:
139 :
140 : // Name pre-, post-, and mid-fix.
141 0 : virtual string namePrefix() const {return "g g";}
142 0 : virtual string namePostfix() const {return "g";}
143 0 : string nameMidfix() const {return (codeSave - codeSave%100)/100
144 0 : == 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 0 : class Sigma2qg2QQbar3PJ1q : public Sigma2gg2QQbar3PJ1g {
158 :
159 : public:
160 :
161 : // Constructor.
162 : Sigma2qg2QQbar3PJ1q(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
163 0 : 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 0 : virtual string inFlux() const {return "qg";}
173 :
174 : protected:
175 :
176 : // Name pre- and post-fix.
177 0 : string namePrefix() const {return "q g";}
178 0 : 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 0 : class Sigma2qqbar2QQbar3PJ1g : public Sigma2gg2QQbar3PJ1g {
187 :
188 : public:
189 :
190 : // Constructor.
191 : Sigma2qqbar2QQbar3PJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
192 0 : 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 0 : virtual string inFlux() const {return "qqbarSame";}
202 :
203 : protected:
204 :
205 : // Name pre- and post-fix.
206 0 : string namePrefix() const {return "q qbar";}
207 0 : 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 :
215 0 : class Sigma2gg2QQbar3DJ1g : public Sigma2gg2QQbar3PJ1g {
216 :
217 : public:
218 :
219 : // Constructor.
220 : Sigma2gg2QQbar3DJ1g(int idHadIn, double oniumMEIn, int jIn, int codeIn) :
221 0 : 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 0 : class Sigma2gg2QQbarX8g : public Sigma2Process {
236 :
237 : public:
238 :
239 : // Constructor.
240 0 : Sigma2gg2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
241 0 : double mSplitIn, int codeIn) : idHad(idHadIn), stateSave(stateIn),
242 0 : 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 0 : virtual double sigmaHat() {return sigma;}
252 :
253 : // Select flavour, colour and anticolour.
254 : virtual void setIdColAcol();
255 :
256 : // Info on the subprocess.
257 0 : virtual string name() const {return nameSave;}
258 0 : virtual int code() const {return codeSave;}
259 0 : virtual string inFlux() const {return "gg";}
260 0 : virtual int id3Mass() const {return idHad;}
261 :
262 : protected:
263 :
264 : // Name pre- and post-fix.
265 0 : virtual string namePrefix() const {return "g g";}
266 0 : 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 0 : class Sigma2qg2QQbarX8q : public Sigma2gg2QQbarX8g {
280 :
281 : public:
282 :
283 : // Constructor.
284 : Sigma2qg2QQbarX8q(int idHadIn, double oniumMEIn, int stateIn,
285 : double mSplitIn, int codeIn) :
286 0 : 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 0 : virtual string inFlux() const {return "qg";}
296 :
297 : protected:
298 :
299 : // Name pre- and post-fix.
300 0 : virtual string namePrefix() const {return "q g";}
301 0 : 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 0 : class Sigma2qqbar2QQbarX8g : public Sigma2gg2QQbarX8g {
311 :
312 : public:
313 :
314 : // Constructor.
315 : Sigma2qqbar2QQbarX8g(int idHadIn, double oniumMEIn, int stateIn,
316 : double mSplitIn, int codeIn) :
317 0 : 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 0 : virtual string inFlux() const {return "qqbarSame";}
327 :
328 : protected:
329 :
330 : // Name pre- and post-fix.
331 0 : virtual string namePrefix() const {return "q qbar";}
332 0 : virtual string namePostfix() const {return "g";}
333 :
334 : };
335 :
336 : //==========================================================================
337 :
338 : } // end namespace Pythia8
339 :
340 : #endif // Pythia8_SigmaOnia_H
|