1 // SigmaSUSY.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 Torbjorn Sjostrand.
3 // Main authors of this file: N. Desai, P. Skands
4 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
7 // Header file for Supersymmetric process differential cross sections.
8 // Contains classes derived from SigmaProcess via Sigma2Process.
10 #ifndef Pythia8_SigmaSUSY_H
11 #define Pythia8_SigmaSUSY_H
13 #include "PhaseSpace.h"
14 #include "PythiaComplex.h"
15 #include "SigmaProcess.h"
16 #include "SusyCouplings.h"
17 #include "SusyLesHouches.h"
21 //==========================================================================
23 // A derived class for q qbar -> neutralino_i neutralino_j.
25 class Sigma2qqbar2chi0chi0 : public Sigma2Process {
30 Sigma2qqbar2chi0chi0() {};
33 Sigma2qqbar2chi0chi0(int id3chiIn, int id4chiIn, int codeIn) {
35 // Save ordering indices and process code
41 // Construct id codes from ordering indices.
43 if (id3chi == 2) id3 = 1000023;
44 if (id3chi == 3) id3 = 1000025;
45 if (id3chi == 4) id3 = 1000035;
46 if (id3chi == 5) id3 = 1000045;
48 if (id4chi == 2) id4 = 1000023;
49 if (id4chi == 3) id4 = 1000025;
50 if (id4chi == 4) id4 = 1000035;
51 if (id4chi == 5) id4 = 1000045;
55 // Initialize process.
56 virtual void initProc();
58 // Calculate flavour-independent parts of cross section.
59 virtual void sigmaKin();
61 // Evaluate d(sigmaHat)/d(tHat).
62 virtual double sigmaHat();
64 // Select flavour, colour and anticolour.
65 virtual void setIdColAcol();
67 // Info on the subprocess.
68 virtual string name() const {return nameSave;}
69 virtual int code() const {return codeSave;}
70 virtual string inFlux() const {return "qq";}
71 virtual int id3Mass() const {return abs(id3);}
72 virtual int id4Mass() const {return abs(id4);}
73 virtual int resonanceA() const {return 23;}
74 virtual bool isSUSY() const {return true;}
78 // Basic process information
79 int id3chi, id4chi, codeSave;
82 // Values stored for later use
83 double sigma0, ui, uj, ti, tj, openFracPair;
86 CoupSUSY* coupSUSYPtr;
90 //==========================================================================
92 // A derived class for q qbar -> neutralino_i chargino_j.
94 class Sigma2qqbar2charchi0 : public Sigma2qqbar2chi0chi0 {
99 Sigma2qqbar2charchi0(int id3chiIn, int id4chiIn, int codeIn) {
101 // Save ordering indices and process code
106 // Construct id codes from ordering indices.
107 id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
108 if (id3chi < 0) id3 = -id3;
111 if (id4chi == 2) id4 = 1000023;
112 if (id4chi == 3) id4 = 1000025;
113 if (id4chi == 4) id4 = 1000035;
114 if (id4chi == 5) id4 = 1000045;
118 // Calculate flavour-independent parts of cross section.
119 virtual void sigmaKin();
121 // Evaluate d(sigmaHat)/d(tHat).
122 virtual double sigmaHat();
124 virtual int resonanceA() const {return 24;}
132 //==========================================================================
134 // A derived class for q qbar -> chargino+_i chargino-_j.
136 class Sigma2qqbar2charchar : public Sigma2qqbar2chi0chi0 {
141 Sigma2qqbar2charchar(int id3chiIn, int id4chiIn, int codeIn) {
143 // Save ordering indices and process code
148 // Construct id codes from ordering indices.
149 id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
150 id4 = (abs(id4chi) == 2) ? -1000037 : -1000024;
154 // Calculate flavour-independent parts of cross section.
155 virtual void sigmaKin();
157 // Evaluate d(sigmaHat)/d(tHat).
158 virtual double sigmaHat();
162 //==========================================================================
164 // A derived class for q g -> neutralino_i squark_j (and cc)
166 class Sigma2qg2chi0squark : public Sigma2Process {
171 Sigma2qg2chi0squark() { };
174 Sigma2qg2chi0squark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
176 // Save ordering indices and process code
181 // Construct id codes from ordering indices.
183 if (id3chi == 2) id3 = 1000023;
184 if (id3chi == 3) id3 = 1000025;
185 if (id3chi == 4) id3 = 1000035;
186 if (id3chi == 5) id3 = 1000045;
187 id4 = 1000001 + (isUp ? 1 : 0);
188 if (id4sq == 2) id4 = 1000003 + (isUp ? 1 : 0);
189 if (id4sq == 3) id4 = 1000005 + (isUp ? 1 : 0);
190 if (id4sq == 4) id4 = 2000001 + (isUp ? 1 : 0);
191 if (id4sq == 5) id4 = 2000003 + (isUp ? 1 : 0);
192 if (id4sq == 6) id4 = 2000005 + (isUp ? 1 : 0);
196 // Initialize process.
197 virtual void initProc();
199 // Calculate flavour-independent parts of cross section.
200 virtual void sigmaKin();
202 // Evaluate d(sigmaHat)/d(tHat).
203 virtual double sigmaHat();
205 // Select flavour, colour and anticolour.
206 virtual void setIdColAcol();
208 // Info on the subprocess.
209 virtual string name() const {return nameSave;}
210 virtual int code() const {return codeSave;}
211 virtual string inFlux() const {return "qg";}
212 virtual int id3Mass() const {return abs(id3);}
213 virtual int id4Mass() const {return abs(id4);}
214 virtual bool isSUSY() const {return true;}
218 // Basic process information
219 int id3chi, id4sq, codeSave;
222 // Values stored for later use
223 double sigma0, ui, uj, ti, tj, openFracPair;
226 CoupSUSY* coupSUSYPtr;
230 //==========================================================================
232 // A derived class for q g -> chargino_i squark_j (incl cc)
234 class Sigma2qg2charsquark : public Sigma2qg2chi0squark {
239 Sigma2qg2charsquark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
241 // Save ordering indices and process code
246 // Construct id codes from ordering indices.
248 if (abs(id3chi) == 2) id3Sav = 1000037;
249 if (isUp) id3Sav = -id3Sav;
250 id4Sav = 1000001 + (isUp ? 1 : 0);
251 if (id4sq == 2) id4Sav = 1000003 + (isUp ? 1 : 0);
252 if (id4sq == 3) id4Sav = 1000005 + (isUp ? 1 : 0);
253 if (id4sq == 4) id4Sav = 2000001 + (isUp ? 1 : 0);
254 if (id4sq == 5) id4Sav = 2000003 + (isUp ? 1 : 0);
255 if (id4sq == 6) id4Sav = 2000005 + (isUp ? 1 : 0);
257 // Initial values, can be swapped to charge conjugates event by event.
263 // Initialize process.
264 virtual void initProc();
266 // Evaluate d(sigmaHat)/d(tHat).
267 virtual double sigmaHat();
269 // Select flavour, colour and anticolour.
270 virtual void setIdColAcol();
274 // Basic process information
279 //==========================================================================
281 // A derived class for q q' -> ~q_i ~q_j
283 class Sigma2qq2squarksquark : public Sigma2Process {
288 Sigma2qq2squarksquark() {}
291 Sigma2qq2squarksquark(int id3In, int id4In, int codeIn) {
293 // Save ordering indices and process code
297 // Initial values (flipped for c.c.)
303 // Initialize process.
304 virtual void initProc();
306 // Calculate flavour-independent parts of cross section.
307 virtual void sigmaKin();
309 // Evaluate d(sigmaHat)/d(tHat).
310 virtual double sigmaHat();
312 // Select flavour, colour and anticolour.
313 virtual void setIdColAcol();
315 // Info on the subprocess.
316 virtual string name() const {return nameSave;}
317 virtual int code() const {return codeSave;}
318 virtual string inFlux() const {return "qq";}
319 virtual int id3Mass() const {return abs(id3Sav);}
320 virtual int id4Mass() const {return abs(id4Sav);}
321 virtual bool isSUSY() const {return true;}
325 // Basic process information
326 int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
330 // Storage of mass squares
332 vector<double> m2Neut, m2Char;
334 // Flavor-independent prefactors.
335 double sigmaChar, sigmaNeut, sigmaGlu;
336 double sigmaCharNeut, sigmaCharGlu, sigmaNeutGlu;
339 // Point-by-point info
341 vector<double> tNeut, uNeut, tChar, uChar;
342 double sumCt, sumCu, sumNt, sumNu, sumGt, sumGu, sumInterference;
345 CoupSUSY* coupSUSYPtr;
348 //==========================================================================
350 // A derived class for q qbar' -> ~q_i ~q*_j
352 class Sigma2qqbar2squarkantisquark : public Sigma2Process {
357 Sigma2qqbar2squarkantisquark() {}
360 Sigma2qqbar2squarkantisquark(int id3In, int id4In, int codeIn) {
362 // Save ordering indices and process code
363 // (always store squark first, antisquark second)
365 id4Sav = -abs(id4In);
373 // Initialize process.
374 virtual void initProc();
376 // Calculate flavour-independent parts of cross section.
377 virtual void sigmaKin();
379 // Evaluate d(sigmaHat)/d(tHat).
380 virtual double sigmaHat();
382 // Select flavour, colour and anticolour.
383 virtual void setIdColAcol();
385 // Info on the subprocess.
386 virtual string name() const {return nameSave;}
387 virtual int code() const {return codeSave;}
388 virtual string inFlux() const {return "qq";}
389 virtual int id3Mass() const {return abs(id3Sav);}
390 virtual int id4Mass() const {return abs(id4Sav);}
391 virtual bool isSUSY() const {return true;}
395 // Basic process information
396 int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
400 // Storage of mass squares
402 vector<double> m2Neut;
404 // Flavor-independent prefactors: EW, strong, and interference
407 double sigmaEW, sigmaGlu, sigmaEWG;
409 // Point-by-point info
411 vector<double> tNeut, uNeut;
413 double sumColS, sumColT, sumColSCC, sumColTCC, sumInterference;
416 CoupSUSY* coupSUSYPtr;
420 //==========================================================================
422 // A derived class for g g -> ~q ~q*
424 class Sigma2gg2squarkantisquark : public Sigma2Process {
429 Sigma2gg2squarkantisquark() {
433 Sigma2gg2squarkantisquark(int id34In, int codeIn) {
435 // Save ordering indices and process code
436 // (always store squark first, antisquark second)
437 id3Sav = abs(id34In);
438 id4Sav = -abs(id34In);
446 // Initialize process.
447 virtual void initProc();
449 // Calculate flavour-independent parts of cross section.
450 virtual void sigmaKin();
452 // Evaluate d(sigmaHat)/d(tHat).
453 virtual double sigmaHat() {return sigma;}
455 // Select flavour, colour and anticolour.
456 virtual void setIdColAcol();
458 // Info on the subprocess.
459 virtual string name() const {return nameSave;}
460 virtual int code() const {return codeSave;}
461 virtual string inFlux() const {return "gg";}
462 virtual int id3Mass() const {return abs(id3Sav);}
463 virtual int id4Mass() const {return abs(id4Sav);}
464 virtual bool isSUSY() const {return true;}
468 // Basic process information
469 int id3Sav, id4Sav, codeSave;
471 double sigma, m2Sq, openFracPair;
474 double sumColT, sumColU, sumInterference;
477 CoupSUSY* coupSUSYPtr;
481 //==========================================================================
483 // A derived class for q g -> ~q ~g
485 class Sigma2qg2squarkgluino : public Sigma2Process {
490 Sigma2qg2squarkgluino() {}
493 Sigma2qg2squarkgluino(int id3In, int codeIn) {
495 // Save ordering indices and process code
504 // Initialize process.
505 virtual void initProc();
507 // Calculate flavour-independent parts of cross section.
508 virtual void sigmaKin();
510 // Evaluate d(sigmaHat)/d(tHat).
511 virtual double sigmaHat();
513 // Select flavour, colour and anticolour.
514 virtual void setIdColAcol();
516 // Info on the subprocess.
517 virtual string name() const {return nameSave;}
518 virtual int code() const {return codeSave;}
519 virtual string inFlux() const {return "qg";}
520 virtual int id3Mass() const {return abs(id3Sav);}
521 virtual int id4Mass() const {return 1000021;}
522 virtual bool isSUSY() const {return true;}
526 // Basic process information
527 int id3Sav, codeSave;
529 double sigmaA, sigmaB, comFacHat, m2Glu, m2Sq, openFracPair;
532 CoupSUSY* coupSUSYPtr;
536 //==========================================================================
538 // A derived class for g g -> gluino gluino.
540 class Sigma2gg2gluinogluino : public Sigma2Process {
545 Sigma2gg2gluinogluino() {
548 // Initialize process.
549 virtual void initProc();
551 // Calculate flavour-independent parts of cross section.
552 virtual void sigmaKin();
554 // Evaluate d(sigmaHat)/d(tHat).
555 virtual double sigmaHat() {return sigma;}
557 // Select flavour, colour and anticolour.
558 virtual void setIdColAcol();
560 // Info on the subprocess.
561 virtual string name() const {return "g g -> gluino gluino";}
562 virtual int code() const {return 1201;}
563 virtual string inFlux() const {return "gg";}
564 virtual int id3Mass() const {return 1000021;}
565 virtual int id4Mass() const {return 1000021;}
566 virtual bool isSUSY() const {return true;}
570 // Values stored for process type and colour flow selection.
571 double sigTS, sigUS, sigTU, sigSum, sigma, openFracPair;
574 CoupSUSY* coupSUSYPtr;
578 //==========================================================================
580 // A derived class for q qbar -> gluino gluino.
582 class Sigma2qqbar2gluinogluino : public Sigma2Process {
587 Sigma2qqbar2gluinogluino() {
591 // Initialize process.
592 virtual void initProc();
594 // Calculate flavour-independent parts of cross section.
595 virtual void sigmaKin();
597 // Evaluate d(sigmaHat)/d(tHat).
598 virtual double sigmaHat();
600 // Select flavour, colour and anticolour.
601 virtual void setIdColAcol();
603 // Info on the subprocess.
604 virtual string name() const {return "q qbar -> gluino gluino";}
605 virtual int code() const {return 1202;}
606 virtual string inFlux() const {return "qqbarSame";}
607 virtual int id3Mass() const {return 1000021;}
608 virtual int id4Mass() const {return 1000021;}
609 virtual bool isSUSY() const {return true;}
613 // Values stored for process type and colour flow selection.
614 double openFracPair, s34Avg, sigS, tHG, uHG, tHG2, uHG2;
617 CoupSUSY* coupSUSYPtr;
621 //==========================================================================
623 class Sigma1qq2antisquark : public Sigma1Process {
627 Sigma1qq2antisquark() {}
630 Sigma1qq2antisquark(int id3In) {
636 // Initialize process.
637 virtual void initProc();
639 // Calculate flavour-independent parts of cross section.
640 virtual void sigmaKin();
642 // Evaluate d(sigmaHat)/d(tHat).
643 virtual double sigmaHat();
645 // Select flavour, colour and anticolour.
646 virtual void setIdColAcol();
648 // Info on the subprocess.
649 virtual string name() const {return nameSave;}
650 virtual int code() const {return codeSave;}
651 virtual string inFlux() const {return "qq";}
652 virtual bool isSUSY() const {return true;}
653 virtual bool isRPV() const {return true;}
654 virtual int resonanceA() const {return idRes;}
658 // Values stored for process type and colour flow selection.
659 double mRes, GammaRes, m2Res, GamMRat, sigBW, widthOut;
660 int squarkType, codeSave, idRes;
664 CoupSUSY* coupSUSYPtr;
669 //==========================================================================
670 } // end namespace Pythia8
678 #endif // Pythia8_SigmaSUSY_H