StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SigmaSUSY.h
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.
6 
7 // Header file for Supersymmetric process differential cross sections.
8 // Contains classes derived from SigmaProcess via Sigma2Process.
9 
10 #ifndef Pythia8_SigmaSUSY_H
11 #define Pythia8_SigmaSUSY_H
12 
13 #include "PhaseSpace.h"
14 #include "PythiaComplex.h"
15 #include "SigmaProcess.h"
16 #include "SusyCouplings.h"
17 #include "SusyLesHouches.h"
18 
19 namespace Pythia8 {
20 
21 //==========================================================================
22 
23 // A derived class for q qbar -> neutralino_i neutralino_j.
24 
26 
27 public:
28 
29  // Constructor.
31 
32  // Constructor.
33  Sigma2qqbar2chi0chi0(int id3chiIn, int id4chiIn, int codeIn) {
34 
35  // Save ordering indices and process code
36  id3chi = id3chiIn;
37  id4chi = id4chiIn;
38  codeSave = codeIn;
39 
40 
41  // Construct id codes from ordering indices.
42  id3 = 1000022;
43  if (id3chi == 2) id3 = 1000023;
44  if (id3chi == 3) id3 = 1000025;
45  if (id3chi == 4) id3 = 1000035;
46  if (id3chi == 5) id3 = 1000045;
47  id4 = 1000022;
48  if (id4chi == 2) id4 = 1000023;
49  if (id4chi == 3) id4 = 1000025;
50  if (id4chi == 4) id4 = 1000035;
51  if (id4chi == 5) id4 = 1000045;
52 
53  }
54 
55  // Initialize process.
56  virtual void initProc();
57 
58  // Calculate flavour-independent parts of cross section.
59  virtual void sigmaKin();
60 
61  // Evaluate d(sigmaHat)/d(tHat).
62  virtual double sigmaHat();
63 
64  // Select flavour, colour and anticolour.
65  virtual void setIdColAcol();
66 
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;}
75 
76  protected:
77 
78  // Basic process information
79  int id3chi, id4chi, codeSave;
80  string nameSave;
81 
82  // Values stored for later use
83  double sigma0, ui, uj, ti, tj, openFracPair;
84  complex propZ;
85 
86  CoupSUSY* coupSUSYPtr;
87 
88 };
89 
90 //==========================================================================
91 
92 // A derived class for q qbar -> neutralino_i chargino_j.
93 
95 
96 public:
97 
98  // Constructor.
99  Sigma2qqbar2charchi0(int id3chiIn, int id4chiIn, int codeIn) {
100 
101  // Save ordering indices and process code
102  id3chi = id3chiIn;
103  id4chi = id4chiIn;
104  codeSave = codeIn;
105 
106  // Construct id codes from ordering indices.
107  id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
108  if (id3chi < 0) id3 = -id3;
109 
110  id4 = 1000022;
111  if (id4chi == 2) id4 = 1000023;
112  if (id4chi == 3) id4 = 1000025;
113  if (id4chi == 4) id4 = 1000035;
114  if (id4chi == 5) id4 = 1000045;
115 
116  }
117 
118  // Calculate flavour-independent parts of cross section.
119  virtual void sigmaKin();
120 
121  // Evaluate d(sigmaHat)/d(tHat).
122  virtual double sigmaHat();
123 
124  virtual int resonanceA() const {return 24;}
125 
126 protected :
127 
128  complex propW;
129 
130 };
131 
132 //==========================================================================
133 
134 // A derived class for q qbar -> chargino+_i chargino-_j.
135 
137 
138 public:
139 
140  // Constructor.
141  Sigma2qqbar2charchar(int id3chiIn, int id4chiIn, int codeIn) {
142 
143  // Save ordering indices and process code
144  id3chi = id3chiIn;
145  id4chi = id4chiIn;
146  codeSave = codeIn;
147 
148  // Construct id codes from ordering indices.
149  id3 = (abs(id3chi) == 2) ? 1000037 : 1000024;
150  id4 = (abs(id4chi) == 2) ? -1000037 : -1000024;
151 
152  }
153 
154  // Calculate flavour-independent parts of cross section.
155  virtual void sigmaKin();
156 
157  // Evaluate d(sigmaHat)/d(tHat).
158  virtual double sigmaHat();
159 
160 };
161 
162 //==========================================================================
163 
164 // A derived class for q g -> neutralino_i squark_j (and cc)
165 
167 
168 public:
169 
170  // Constructor.
171  Sigma2qg2chi0squark() { };
172 
173  // Constructor.
174  Sigma2qg2chi0squark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
175 
176  // Save ordering indices and process code
177  id3chi = id3chiIn;
178  id4sq = id4sqIn;
179  codeSave = codeIn;
180 
181  // Construct id codes from ordering indices.
182  id3 = 1000022;
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);
193 
194  }
195 
196  // Initialize process.
197  virtual void initProc();
198 
199  // Calculate flavour-independent parts of cross section.
200  virtual void sigmaKin();
201 
202  // Evaluate d(sigmaHat)/d(tHat).
203  virtual double sigmaHat();
204 
205  // Select flavour, colour and anticolour.
206  virtual void setIdColAcol();
207 
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;}
215 
216  protected:
217 
218  // Basic process information
219  int id3chi, id4sq, codeSave;
220  string nameSave;
221 
222  // Values stored for later use
223  double sigma0, ui, uj, ti, tj, openFracPair;
224 
225  //SUSY couplings
226  CoupSUSY* coupSUSYPtr;
227 
228 };
229 
230 //==========================================================================
231 
232 // A derived class for q g -> chargino_i squark_j (incl cc)
233 
235 
236 public:
237 
238  // Constructor.
239  Sigma2qg2charsquark(int id3chiIn, int id4sqIn, bool isUp, int codeIn) {
240 
241  // Save ordering indices and process code
242  id3chi = id3chiIn;
243  id4sq = id4sqIn;
244  codeSave = codeIn;
245 
246  // Construct id codes from ordering indices.
247  id3Sav = 1000024;
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);
256 
257  // Initial values, can be swapped to charge conjugates event by event.
258  id3 = id3Sav;
259  id4 = id4Sav;
260 
261  }
262 
263  // Initialize process.
264  virtual void initProc();
265 
266  // Evaluate d(sigmaHat)/d(tHat).
267  virtual double sigmaHat();
268 
269  // Select flavour, colour and anticolour.
270  virtual void setIdColAcol();
271 
272  private:
273 
274  // Basic process information
275  int id3Sav, id4Sav;
276 
277 };
278 
279 //==========================================================================
280 
281 // A derived class for q q' -> ~q_i ~q_j
282 
284 
285 public:
286 
287  // Constructor.
289 
290  // Constructor.
291  Sigma2qq2squarksquark(int id3In, int id4In, int codeIn) {
292 
293  // Save ordering indices and process code
294  id3Sav = id3In;
295  id4Sav = id4In;
296  codeSave = codeIn;
297  // Initial values (flipped for c.c.)
298  id3 = id3Sav;
299  id4 = id4Sav;
300 
301  }
302 
303  // Initialize process.
304  virtual void initProc();
305 
306  // Calculate flavour-independent parts of cross section.
307  virtual void sigmaKin();
308 
309  // Evaluate d(sigmaHat)/d(tHat).
310  virtual double sigmaHat();
311 
312  // Select flavour, colour and anticolour.
313  virtual void setIdColAcol();
314 
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;}
322 
323 private:
324 
325  // Basic process information
326  int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
327  string nameSave;
328  bool isUD;
329 
330  // Storage of mass squares
331  double m2Glu;
332  vector<double> m2Neut, m2Char;
333 
334  // Flavor-independent prefactors.
335  double sigmaChar, sigmaNeut, sigmaGlu;
336  double sigmaCharNeut, sigmaCharGlu, sigmaNeutGlu;
337  double openFracPair;
338 
339  // Point-by-point info
340  double tGlu, uGlu;
341  vector<double> tNeut, uNeut, tChar, uChar;
342  double sumCt, sumCu, sumNt, sumNu, sumGt, sumGu, sumInterference;
343 
344  //SUSY couplings
345  CoupSUSY* coupSUSYPtr;
346 };
347 
348 //==========================================================================
349 
350 // A derived class for q qbar' -> ~q_i ~q*_j
351 
353 
354 public:
355 
356  // Constructor.
358 
359  // Constructor.
360  Sigma2qqbar2squarkantisquark(int id3In, int id4In, int codeIn) {
361 
362  // Save ordering indices and process code
363  // (always store squark first, antisquark second)
364  id3Sav = abs(id3In);
365  id4Sav = -abs(id4In);
366  codeSave = codeIn;
367  // Initial values
368  id3 = id3Sav;
369  id4 = id4Sav;
370 
371  }
372 
373  // Initialize process.
374  virtual void initProc();
375 
376  // Calculate flavour-independent parts of cross section.
377  virtual void sigmaKin();
378 
379  // Evaluate d(sigmaHat)/d(tHat).
380  virtual double sigmaHat();
381 
382  // Select flavour, colour and anticolour.
383  virtual void setIdColAcol();
384 
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;}
392 
393 private:
394 
395  // Basic process information
396  int id3Sav, id4Sav, codeSave, iGen3, iGen4, nNeut;
397  string nameSave;
398  bool isUD, isCC;
399 
400  // Storage of mass squares
401  double m2Glu;
402  vector<double> m2Neut;
403 
404  // Flavor-independent prefactors: EW, strong, and interference
405  double xW;
406  double openFracPair;
407  double sigmaEW, sigmaGlu, sigmaEWG;
408 
409  // Point-by-point info
410  double tGlu, uGlu;
411  vector<double> tNeut, uNeut;
412  complex propZW;
413  double sumColS, sumColT, sumColSCC, sumColTCC, sumInterference;
414 
415  //SUSY couplings
416  CoupSUSY* coupSUSYPtr;
417 
418 };
419 
420 //==========================================================================
421 
422 // A derived class for g g -> ~q ~q*
423 
425 
426 public:
427 
428  // Constructor.
430  }
431 
432  // Constructor.
433  Sigma2gg2squarkantisquark(int id34In, int codeIn) {
434 
435  // Save ordering indices and process code
436  // (always store squark first, antisquark second)
437  id3Sav = abs(id34In);
438  id4Sav = -abs(id34In);
439  codeSave = codeIn;
440  // Initial values
441  id3 = id3Sav;
442  id4 = id4Sav;
443 
444  }
445 
446  // Initialize process.
447  virtual void initProc();
448 
449  // Calculate flavour-independent parts of cross section.
450  virtual void sigmaKin();
451 
452  // Evaluate d(sigmaHat)/d(tHat).
453  virtual double sigmaHat() {return sigma;}
454 
455  // Select flavour, colour and anticolour.
456  virtual void setIdColAcol();
457 
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;}
465 
466 private:
467 
468  // Basic process information
469  int id3Sav, id4Sav, codeSave;
470  string nameSave;
471  double sigma, m2Sq, openFracPair;
472 
473  // Color flow info
474  double sumColT, sumColU, sumInterference;
475 
476  //SUSY couplings
477  CoupSUSY* coupSUSYPtr;
478 
479 };
480 
481 //==========================================================================
482 
483 // A derived class for q g -> ~q ~g
484 
486 
487 public:
488 
489  // Constructor.
491 
492  // Constructor.
493  Sigma2qg2squarkgluino(int id3In, int codeIn) {
494 
495  // Save ordering indices and process code
496  id3Sav = abs(id3In);
497  codeSave = codeIn;
498  // Initial values
499  id3 = id3Sav;
500  id4 = 1000021;
501 
502  }
503 
504  // Initialize process.
505  virtual void initProc();
506 
507  // Calculate flavour-independent parts of cross section.
508  virtual void sigmaKin();
509 
510  // Evaluate d(sigmaHat)/d(tHat).
511  virtual double sigmaHat();
512 
513  // Select flavour, colour and anticolour.
514  virtual void setIdColAcol();
515 
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;}
523 
524 private:
525 
526  // Basic process information
527  int id3Sav, codeSave;
528  string nameSave;
529  double sigmaA, sigmaB, comFacHat, m2Glu, m2Sq, openFracPair;
530 
531  //SUSY couplings
532  CoupSUSY* coupSUSYPtr;
533 
534 };
535 
536 //==========================================================================
537 
538 // A derived class for g g -> gluino gluino.
539 
541 
542 public:
543 
544  // Constructor.
546  }
547 
548  // Initialize process.
549  virtual void initProc();
550 
551  // Calculate flavour-independent parts of cross section.
552  virtual void sigmaKin();
553 
554  // Evaluate d(sigmaHat)/d(tHat).
555  virtual double sigmaHat() {return sigma;}
556 
557  // Select flavour, colour and anticolour.
558  virtual void setIdColAcol();
559 
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;}
567 
568 private:
569 
570  // Values stored for process type and colour flow selection.
571  double sigTS, sigUS, sigTU, sigSum, sigma, openFracPair;
572 
573  //SUSY couplings
574  CoupSUSY* coupSUSYPtr;
575 
576 };
577 
578 //==========================================================================
579 
580 // A derived class for q qbar -> gluino gluino.
581 
583 
584 public:
585 
586  // Constructor.
588 
589 }
590 
591  // Initialize process.
592  virtual void initProc();
593 
594  // Calculate flavour-independent parts of cross section.
595  virtual void sigmaKin();
596 
597  // Evaluate d(sigmaHat)/d(tHat).
598  virtual double sigmaHat();
599 
600  // Select flavour, colour and anticolour.
601  virtual void setIdColAcol();
602 
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;}
610 
611 private:
612 
613  // Values stored for process type and colour flow selection.
614  double openFracPair, s34Avg, sigS, tHG, uHG, tHG2, uHG2;
615 
616  //SUSY couplings
617  CoupSUSY* coupSUSYPtr;
618 
619 };
620 
621 //==========================================================================
622 
624 public:
625 
626  // Constructor.
628 
629 
630  Sigma1qq2antisquark(int id3In) {
631 
632  idRes = id3In;
633 
634  }
635 
636  // Initialize process.
637  virtual void initProc();
638 
639  // Calculate flavour-independent parts of cross section.
640  virtual void sigmaKin();
641 
642  // Evaluate d(sigmaHat)/d(tHat).
643  virtual double sigmaHat();
644 
645  // Select flavour, colour and anticolour.
646  virtual void setIdColAcol();
647 
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;}
655 
656 private:
657 
658  // Values stored for process type and colour flow selection.
659  double mRes, GammaRes, m2Res, GamMRat, sigBW, widthOut;
660  int squarkType, codeSave, idRes;
661  string nameSave;
662 
663  //SUSY couplings
664  CoupSUSY* coupSUSYPtr;
665 
666 };
667 
668 
669 //==========================================================================
670 } // end namespace Pythia8
671 
672 
673 
674 
675 
676 
677 
678 #endif // Pythia8_SigmaSUSY_H
679