1 // SigmaSUSY.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2010 Peter Skands, 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 Supersymmetric process differential cross sections.
7 // Contains classes derived from SigmaProcess via Sigma2Process.
9 #ifndef Pythia8_SigmaSUSY_H
10 #define Pythia8_SigmaSUSY_H
12 #include "PhaseSpace.h"
13 #include "PythiaComplex.h"
14 #include "SigmaProcess.h"
15 #include "SusyCouplings.h"
16 #include "SusyLesHouches.h"
20 //==========================================================================
22 // A derived class for q qbar -> neutralino_i neutralino_j.
24 class Sigma2qqbar2chi0chi0 : public Sigma2Process {
29 Sigma2qqbar2chi0chi0() {};
32 Sigma2qqbar2chi0chi0(int id3chiIn, int id4chiIn, int codeIn) {
34 // Save ordering indices and process code
40 // Construct id codes from ordering indices.
42 if (id3chi == 2) id3 = 1000023;
43 if (id3chi == 3) id3 = 1000025;
44 if (id3chi == 4) id3 = 1000035;
45 if (id3chi == 5) id3 = 1000045;
47 if (id4chi == 2) id4 = 1000023;
48 if (id4chi == 3) id4 = 1000025;
49 if (id4chi == 4) id4 = 1000035;
50 if (id4chi == 5) id4 = 1000045;
54 // Initialize process.
55 virtual void initProc();
57 // Calculate flavour-independent parts of cross section.
58 virtual void sigmaKin();
60 // Evaluate d(sigmaHat)/d(tHat).
61 virtual double sigmaHat();
63 // Select flavour, colour and anticolour.
64 virtual void setIdColAcol();
66 // Info on the subprocess.
67 virtual string name() const {return nameSave;}
68 virtual int code() const {return codeSave;}
69 virtual string inFlux() const {return "qq";}
70 virtual int id3Mass() const {return abs(id3);}
71 virtual int id4Mass() const {return abs(id4);}
72 virtual int resonanceA() const {return 23;}
73 virtual bool isSUSY() const {return true;}
77 // Basic process information
78 int id3chi, id4chi, codeSave;
81 // Values stored for later use
82 double sigma0, ui, uj, ti, tj, openFracPair;
85 CoupSUSY* coupSUSYPtr;
89 //==========================================================================
91 // A derived class for q qbar -> neutralino_i chargino_j.
93 class Sigma2qqbar2charchi0 : public Sigma2qqbar2chi0chi0 {
98 Sigma2qqbar2charchi0(int id3chiIn, int id4chiIn, int codeIn) {
100 // Save ordering indices and process code
105 // Construct id codes from ordering indices.
106 id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
107 if (id3chi < 0) id3 = -id3;
110 if (id4chi == 2) id4 = 1000023;
111 if (id4chi == 3) id4 = 1000025;
112 if (id4chi == 4) id4 = 1000035;
113 if (id4chi == 5) id4 = 1000045;
117 // Calculate flavour-independent parts of cross section.
118 virtual void sigmaKin();
120 // Evaluate d(sigmaHat)/d(tHat).
121 virtual double sigmaHat();
123 virtual int resonanceA() const {return 24;}
131 //==========================================================================
133 // A derived class for q qbar -> chargino+_i chargino-_j.
135 class Sigma2qqbar2charchar : public Sigma2qqbar2chi0chi0 {
140 Sigma2qqbar2charchar(int id3chiIn, int id4chiIn, int codeIn) {
142 // Save ordering indices and process code
147 // Construct id codes from ordering indices.
148 id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
149 id4 = (abs(id4chi) == 2) ? -1000037 : -1000024;
153 // Calculate flavour-independent parts of cross section.
154 virtual void sigmaKin();
156 // Evaluate d(sigmaHat)/d(tHat).
157 virtual double sigmaHat();
161 //==========================================================================
163 // A derived class for q g -> neutralino_i squark_j (and cc)
165 class Sigma2qg2chi0squark : public Sigma2Process {
170 Sigma2qg2chi0squark() { };
173 Sigma2qg2chi0squark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
175 // Save ordering indices and process code
180 // Construct id codes from ordering indices.
182 if (id3chi == 2) id3 = 1000023;
183 if (id3chi == 3) id3 = 1000025;
184 if (id3chi == 4) id3 = 1000035;
185 if (id3chi == 5) id3 = 1000045;
186 id4 = 1000001 + (isUp ? 1 : 0);
187 if (id4sq == 2) id4 = 1000003 + (isUp ? 1 : 0);
188 if (id4sq == 3) id4 = 1000005 + (isUp ? 1 : 0);
189 if (id4sq == 4) id4 = 2000001 + (isUp ? 1 : 0);
190 if (id4sq == 5) id4 = 2000003 + (isUp ? 1 : 0);
191 if (id4sq == 6) id4 = 2000005 + (isUp ? 1 : 0);
195 // Initialize process.
196 virtual void initProc();
198 // Calculate flavour-independent parts of cross section.
199 virtual void sigmaKin();
201 // Evaluate d(sigmaHat)/d(tHat).
202 virtual double sigmaHat();
204 // Select flavour, colour and anticolour.
205 virtual void setIdColAcol();
207 // Info on the subprocess.
208 virtual string name() const {return nameSave;}
209 virtual int code() const {return codeSave;}
210 virtual string inFlux() const {return "qg";}
211 virtual int id3Mass() const {return abs(id3);}
212 virtual int id4Mass() const {return abs(id4);}
213 virtual bool isSUSY() const {return true;}
217 // Basic process information
218 int id3chi, id4sq, codeSave;
221 // Values stored for later use
222 double sigma0, ui, uj, ti, tj, openFracPair;
225 CoupSUSY* coupSUSYPtr;
229 //==========================================================================
231 // A derived class for q g -> chargino_i squark_j (incl cc)
233 class Sigma2qg2charsquark : public Sigma2qg2chi0squark {
238 Sigma2qg2charsquark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
240 // Save ordering indices and process code
245 // Construct id codes from ordering indices.
247 if (abs(id3chi) == 2) id3Sav = 1000037;
248 if (isUp) id3Sav = -id3Sav;
249 id4Sav = 1000001 + (isUp ? 1 : 0);
250 if (id4sq == 2) id4Sav = 1000003 + (isUp ? 1 : 0);
251 if (id4sq == 3) id4Sav = 1000005 + (isUp ? 1 : 0);
252 if (id4sq == 4) id4Sav = 2000001 + (isUp ? 1 : 0);
253 if (id4sq == 5) id4Sav = 2000003 + (isUp ? 1 : 0);
254 if (id4sq == 6) id4Sav = 2000005 + (isUp ? 1 : 0);
256 // Initial values, can be swapped to charge conjugates event by event.
262 // Initialize process.
263 virtual void initProc();
265 // Evaluate d(sigmaHat)/d(tHat).
266 virtual double sigmaHat();
268 // Select flavour, colour and anticolour.
269 virtual void setIdColAcol();
273 // Basic process information
278 //==========================================================================
280 // A derived class for q q' -> ~q_i ~q_j
282 class Sigma2qq2squarksquark : public Sigma2Process {
287 Sigma2qq2squarksquark() {}
290 Sigma2qq2squarksquark(int id3In, int id4In, int codeIn) {
292 // Save ordering indices and process code
296 // Initial values (flipped for c.c.)
302 // Initialize process.
303 virtual void initProc();
305 // Calculate flavour-independent parts of cross section.
306 virtual void sigmaKin();
308 // Evaluate d(sigmaHat)/d(tHat).
309 virtual double sigmaHat();
311 // Select flavour, colour and anticolour.
312 virtual void setIdColAcol();
314 // Info on the subprocess.
315 virtual string name() const {return nameSave;}
316 virtual int code() const {return codeSave;}
317 virtual string inFlux() const {return "qq";}
318 virtual int id3Mass() const {return abs(id3Sav);}
319 virtual int id4Mass() const {return abs(id4Sav);}
320 virtual bool isSUSY() const {return true;}
324 // Basic process information
325 int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
329 // Storage of mass squares
331 vector<double> m2Neut, m2Char;
333 // Flavor-independent prefactors.
334 double sigmaChar, sigmaNeut, sigmaGlu;
335 double sigmaCharNeut, sigmaCharGlu, sigmaNeutGlu;
338 // Point-by-point info
340 vector<double> tNeut, uNeut, tChar, uChar;
341 double sumCt, sumCu, sumNt, sumNu, sumGt, sumGu, sumInterference;
344 CoupSUSY* coupSUSYPtr;
347 //==========================================================================
349 // A derived class for q qbar' -> ~q_i ~q*_j
351 class Sigma2qqbar2squarkantisquark : public Sigma2Process {
356 Sigma2qqbar2squarkantisquark() {}
359 Sigma2qqbar2squarkantisquark(int id3In, int id4In, int codeIn) {
361 // Save ordering indices and process code
362 // (always store squark first, antisquark second)
364 id4Sav = -abs(id4In);
372 // Initialize process.
373 virtual void initProc();
375 // Calculate flavour-independent parts of cross section.
376 virtual void sigmaKin();
378 // Evaluate d(sigmaHat)/d(tHat).
379 virtual double sigmaHat();
381 // Select flavour, colour and anticolour.
382 virtual void setIdColAcol();
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 "qq";}
388 virtual int id3Mass() const {return abs(id3Sav);}
389 virtual int id4Mass() const {return abs(id4Sav);}
390 virtual bool isSUSY() const {return true;}
394 // Basic process information
395 int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
399 // Storage of mass squares
401 vector<double> m2Neut;
403 // Flavor-independent prefactors: EW, strong, and interference
406 double sigmaEW, sigmaGlu, sigmaEWG;
408 // Point-by-point info
410 vector<double> tNeut, uNeut;
412 double sumColS, sumColT, sumColSCC, sumColTCC, sumInterference;
415 CoupSUSY* coupSUSYPtr;
419 //==========================================================================
421 // A derived class for g g -> ~q ~q*
423 class Sigma2gg2squarkantisquark : public Sigma2Process {
428 Sigma2gg2squarkantisquark() {
432 Sigma2gg2squarkantisquark(int id34In, int codeIn) {
434 // Save ordering indices and process code
435 // (always store squark first, antisquark second)
436 id3Sav = abs(id34In);
437 id4Sav = -abs(id34In);
445 // Initialize process.
446 virtual void initProc();
448 // Calculate flavour-independent parts of cross section.
449 virtual void sigmaKin();
451 // Evaluate d(sigmaHat)/d(tHat).
452 virtual double sigmaHat() {return sigma;}
454 // Select flavour, colour and anticolour.
455 virtual void setIdColAcol();
457 // Info on the subprocess.
458 virtual string name() const {return nameSave;}
459 virtual int code() const {return codeSave;}
460 virtual string inFlux() const {return "gg";}
461 virtual int id3Mass() const {return abs(id3Sav);}
462 virtual int id4Mass() const {return abs(id4Sav);}
463 virtual bool isSUSY() const {return true;}
467 // Basic process information
468 int id3Sav, id4Sav, codeSave;
470 double sigma, m2Sq, openFracPair;
473 double sumColT, sumColU, sumInterference;
476 CoupSUSY* coupSUSYPtr;
480 //==========================================================================
482 // A derived class for q g -> ~q ~g
484 class Sigma2qg2squarkgluino : public Sigma2Process {
489 Sigma2qg2squarkgluino() {}
492 Sigma2qg2squarkgluino(int id3In, int codeIn) {
494 // Save ordering indices and process code
503 // Initialize process.
504 virtual void initProc();
506 // Calculate flavour-independent parts of cross section.
507 virtual void sigmaKin();
509 // Evaluate d(sigmaHat)/d(tHat).
510 virtual double sigmaHat();
512 // Select flavour, colour and anticolour.
513 virtual void setIdColAcol();
515 // Info on the subprocess.
516 virtual string name() const {return nameSave;}
517 virtual int code() const {return codeSave;}
518 virtual string inFlux() const {return "qg";}
519 virtual int id3Mass() const {return abs(id3Sav);}
520 virtual int id4Mass() const {return 1000021;}
521 virtual bool isSUSY() const {return true;}
525 // Basic process information
526 int id3Sav, codeSave;
528 double sigmaA, sigmaB, comFacHat, m2Glu, m2Sq, openFracPair;
531 CoupSUSY* coupSUSYPtr;
535 //==========================================================================
537 // A derived class for g g -> gluino gluino.
539 class Sigma2gg2gluinogluino : public Sigma2Process {
544 Sigma2gg2gluinogluino() {
547 // Initialize process.
548 virtual void initProc();
550 // Calculate flavour-independent parts of cross section.
551 virtual void sigmaKin();
553 // Evaluate d(sigmaHat)/d(tHat).
554 virtual double sigmaHat() {return sigma;}
556 // Select flavour, colour and anticolour.
557 virtual void setIdColAcol();
559 // Info on the subprocess.
560 virtual string name() const {return "g g -> gluino gluino";}
561 virtual int code() const {return 1201;}
562 virtual string inFlux() const {return "gg";}
563 virtual int id3Mass() const {return 1000021;}
564 virtual int id4Mass() const {return 1000021;}
565 virtual bool isSUSY() const {return true;}
569 // Values stored for process type and colour flow selection.
570 double sigTS, sigUS, sigTU, sigSum, sigma, openFracPair;
573 CoupSUSY* coupSUSYPtr;
577 //==========================================================================
579 // A derived class for q qbar -> gluino gluino.
581 class Sigma2qqbar2gluinogluino : public Sigma2Process {
586 Sigma2qqbar2gluinogluino() {
590 // Initialize process.
591 virtual void initProc();
593 // Calculate flavour-independent parts of cross section.
594 virtual void sigmaKin();
596 // Evaluate d(sigmaHat)/d(tHat).
597 virtual double sigmaHat();
599 // Select flavour, colour and anticolour.
600 virtual void setIdColAcol();
602 // Info on the subprocess.
603 virtual string name() const {return "q qbar -> gluino gluino";}
604 virtual int code() const {return 1202;}
605 virtual string inFlux() const {return "qqbarSame";}
606 virtual int id3Mass() const {return 1000021;}
607 virtual int id4Mass() const {return 1000021;}
608 virtual bool isSUSY() const {return true;}
612 // Values stored for process type and colour flow selection.
613 double openFracPair, s34Avg, sigS, tHG, uHG, tHG2, uHG2;
616 CoupSUSY* coupSUSYPtr;
620 //==========================================================================
622 class Sigma1qq2antisquark : public Sigma1Process {
626 Sigma1qq2antisquark() {}
629 Sigma1qq2antisquark(int id3In) {
635 // Initialize process.
636 virtual void initProc();
638 // Calculate flavour-independent parts of cross section.
639 virtual void sigmaKin();
641 // Evaluate d(sigmaHat)/d(tHat).
642 virtual double sigmaHat();
644 // Select flavour, colour and anticolour.
645 virtual void setIdColAcol();
647 // Info on the subprocess.
648 virtual string name() const {return nameSave;}
649 virtual int code() const {return codeSave;}
650 virtual string inFlux() const {return "qq";}
651 virtual bool isSUSY() const {return true;}
652 virtual bool isRPV() const {return true;}
653 virtual int resonanceA() const {return idRes;}
657 // Values stored for process type and colour flow selection.
658 double mRes, GammaRes, m2Res, GamMRat, sigBW, widthOut;
659 int squarkType, codeSave, idRes;
663 CoupSUSY* coupSUSYPtr;
668 //==========================================================================
669 } // end namespace Pythia8
677 #endif // Pythia8_SigmaSUSY_H