1 // SigmaQCD.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2008 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.
6 // Header file for QCD process differential cross sections.
7 // Contains classes derived from SigmaProcess via Sigma(0/2)Process.
9 #ifndef Pythia8_SigmaQCD_H
10 #define Pythia8_SigmaQCD_H
12 #include "SigmaProcess.h"
16 //**************************************************************************
18 // A derived class for minimum-bias (inelastic, nondiffractive) events.
20 class Sigma0minBias : public Sigma0Process {
28 virtual double sigmaHat() {return sigmaTotPtr->sigmaND();}
30 // Select flavour, colour and anticolour.
31 virtual void setIdColAcol() {}
33 // Info on the subprocess.
34 virtual string name() const {return "minimum bias";}
35 virtual int code() const {return 101;}
36 virtual bool isMinBias() const {return true;}
42 //**************************************************************************
44 // A derived class for elastic scattering A B -> A B.
46 class Sigma0AB2AB : public Sigma0Process {
54 virtual double sigmaHat() {return sigmaTotPtr->sigmaEl();}
56 // Select flavour, colour and anticolour.
57 virtual void setIdColAcol();
59 // Info on the subprocess.
60 virtual string name() const {return "A B -> A B elastic";}
61 virtual int code() const {return 102;}
62 virtual bool isResolved() const {return false;}
68 //**************************************************************************
70 // A derived class for single diffractive scattering A B -> X B.
72 class Sigma0AB2XB : public Sigma0Process {
80 virtual double sigmaHat() {return sigmaTotPtr->sigmaXB();}
82 // Select flavour, colour and anticolour.
83 virtual void setIdColAcol();
85 // Info on the subprocess.
86 virtual string name() const {return "A B -> X B single diffractive";}
87 virtual int code() const {return 103;}
88 virtual bool isResolved() const {return false;}
89 virtual bool isDiffA() const {return true;};
95 //**************************************************************************
97 // A derived class for single diffractive scattering A B -> A X.
99 class Sigma0AB2AX : public Sigma0Process {
107 virtual double sigmaHat() {return sigmaTotPtr->sigmaAX();}
109 // Select flavour, colour and anticolour.
110 virtual void setIdColAcol();
112 // Info on the subprocess.
113 virtual string name() const {return "A B -> A X single diffractive";}
114 virtual int code() const {return 104;}
115 virtual bool isResolved() const {return false;}
116 virtual bool isDiffB() const {return true;};
122 //**************************************************************************
124 // A derived class for double diffractive scattering A B -> X X.
126 class Sigma0AB2XX : public Sigma0Process {
134 virtual double sigmaHat() {return sigmaTotPtr->sigmaXX();}
136 // Select flavour, colour and anticolour.
137 virtual void setIdColAcol();
139 // Info on the subprocess.
140 virtual string name() const {return "A B -> X X double diffractive";}
141 virtual int code() const {return 105;}
142 virtual bool isResolved() const {return false;}
143 virtual bool isDiffA() const {return true;};
144 virtual bool isDiffB() const {return true;};
150 //**************************************************************************
152 // A derived class for g g -> g g.
154 class Sigma2gg2gg : public Sigma2Process {
161 // Calculate flavour-independent parts of cross section.
162 virtual void sigmaKin();
164 // Evaluate d(sigmaHat)/d(tHat).
165 virtual double sigmaHat() {return sigma;}
167 // Select flavour, colour and anticolour.
168 virtual void setIdColAcol();
170 // Info on the subprocess.
171 virtual string name() const {return "g g -> g g";}
172 virtual int code() const {return 111;}
173 virtual string inFlux() const {return "gg";}
177 // Values stored for colour flow selection.
178 double sigTS, sigUS, sigTU, sigSum, sigma;
182 //**************************************************************************
184 // A derived class for g g -> q qbar (q = u, d, s, i.e. almost massless).
186 class Sigma2gg2qqbar : public Sigma2Process {
193 // Initialize process.
194 virtual void initProc();
196 // Calculate flavour-independent parts of cross section.
197 virtual void sigmaKin();
199 // Evaluate d(sigmaHat)/d(tHat).
200 virtual double sigmaHat() {return sigma;}
202 // Select flavour, colour and anticolour.
203 virtual void setIdColAcol();
205 // Info on the subprocess.
206 virtual string name() const {return "g g -> q qbar (uds)";}
207 virtual int code() const {return 112;}
208 virtual string inFlux() const {return "gg";}
212 // Number of quarks to be considered in massless approximation.
215 // Values stored for colour flow selection.
217 double mNew, m2New, sigTS, sigUS, sigSum, sigma;
221 //**************************************************************************
223 // A derived class for q g -> q g (q = u, d, s, c, b).
224 // Use massless approximation also for Q since no alternative.
226 class Sigma2qg2qg : public Sigma2Process {
233 // Calculate flavour-independent parts of cross section.
234 virtual void sigmaKin();
236 // Evaluate d(sigmaHat)/d(tHat).
237 virtual double sigmaHat() {return sigma;}
239 // Select flavour, colour and anticolour.
240 virtual void setIdColAcol();
242 // Info on the subprocess.
243 virtual string name() const {return "q g -> q g";}
244 virtual int code() const {return 113;}
245 virtual string inFlux() const {return "qg";}
249 // Values stored for colour flow selection.
250 double mNew, m2New, sigTS, sigTU, sigSum, sigma;
254 //**************************************************************************
256 // A derived class for q qbar' -> q qbar' or q q' -> q q'
257 // (qbar qbar' -> qbar qbar'), q' may be same as q.
259 class Sigma2qq2qq : public Sigma2Process {
266 // Calculate flavour-independent parts of cross section.
267 virtual void sigmaKin();
269 // Evaluate d(sigmaHat)/d(tHat).
270 virtual double sigmaHat();
272 // Select flavour, colour and anticolour.
273 virtual void setIdColAcol();
275 // Info on the subprocess.
276 virtual string name() const {return "q q(bar)' -> q q(bar)'";}
277 virtual int code() const {return 114;}
278 virtual string inFlux() const {return "qq";}
282 // Values stored for colour flow selection.
283 double sigT, sigU, sigTU, sigST, sigSum;
287 //**************************************************************************
289 // A derived class for q qbar -> g g.
291 class Sigma2qqbar2gg : public Sigma2Process {
298 // Calculate flavour-independent parts of cross section.
299 virtual void sigmaKin();
301 // Evaluate d(sigmaHat)/d(tHat).
302 virtual double sigmaHat() {return sigma;}
304 // Select flavour, colour and anticolour.
305 virtual void setIdColAcol();
307 // Info on the subprocess.
308 virtual string name() const {return "q qbar -> g g";}
309 virtual int code() const {return 115;}
310 virtual string inFlux() const {return "qqbarSame";}
314 // Values stored for colour flow selection.
315 double sigTS, sigUS, sigSum, sigma;
319 //**************************************************************************
321 // A derived class for q qbar -> q' qbar'.
323 class Sigma2qqbar2qqbarNew : public Sigma2Process {
328 Sigma2qqbar2qqbarNew() {}
330 // Initialize process.
331 virtual void initProc();
333 // Calculate flavour-independent parts of cross section.
334 virtual void sigmaKin();
336 // Evaluate d(sigmaHat)/d(tHat).
337 virtual double sigmaHat() {return sigma;}
339 // Select flavour, colour and anticolour.
340 virtual void setIdColAcol();
342 // Info on the subprocess.
343 virtual string name() const {return "q qbar -> q' qbar' (uds)";}
344 virtual int code() const {return 116;}
345 virtual string inFlux() const {return "qqbarSame";}
349 // Number of quarks to be considered in massless approximation.
352 // Values stored for colour flow selection.
354 double mNew, m2New, sigS, sigma;
358 //**************************************************************************
360 // A derived class for g g -> Q Qbar (Q = c, b or t).
362 class Sigma2gg2QQbar : public Sigma2Process {
367 Sigma2gg2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
369 // Initialize process.
370 virtual void initProc();
372 // Calculate flavour-independent parts of cross section.
373 virtual void sigmaKin();
375 // Evaluate d(sigmaHat)/d(tHat).
376 virtual double sigmaHat() {return sigma;}
378 // Select flavour, colour and anticolour.
379 virtual void setIdColAcol();
381 // Evaluate weight for W decay angles in top decay (else inactive).
382 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
384 // Info on the subprocess.
385 virtual string name() const {return nameSave;}
386 virtual int code() const {return codeSave;}
387 virtual string inFlux() const {return "gg";}
388 virtual int id3Mass() const {return idNew;}
389 virtual int id4Mass() const {return idNew;}
393 // Values stored for process type and colour flow selection.
396 double sigTS, sigUS, sigSum, sigma, openFracPair;
400 //**************************************************************************
402 // A derived class for q qbar -> Q Qbar (Q = c, b or t).
404 class Sigma2qqbar2QQbar : public Sigma2Process {
409 Sigma2qqbar2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
411 // Initialize process.
412 virtual void initProc();
414 // Calculate flavour-independent parts of cross section.
415 virtual void sigmaKin();
417 // Evaluate d(sigmaHat)/d(tHat).
418 virtual double sigmaHat() {return sigma;}
420 // Select flavour, colour and anticolour.
421 virtual void setIdColAcol();
423 // Evaluate weight for W decay angles in top decay (else inactive).
424 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
426 // Info on the subprocess.
427 virtual string name() const {return nameSave;}
428 virtual int code() const {return codeSave;}
429 virtual string inFlux() const {return "qqbarSame";}
430 virtual int id3Mass() const {return idNew;}
431 virtual int id4Mass() const {return idNew;}
435 // Values stored for process type.
438 double sigma, openFracPair;
442 //**************************************************************************
444 } // end namespace Pythia8
446 #endif // Pythia8_SigmaQCD_H