StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SusyCouplings.h
1 
2 // SusyCouplings.h is a part of the PYTHIA event generator.
3 // Copyright (C) 2020 Torbjorn Sjostrand.
4 // Main authors of this file: N. Desai, P. Skands
5 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
6 // Please respect the MCnet Guidelines, see GUIDELINES for details.
7 
8 // Header file for setup of common SUSY couplings.
9 
10 #ifndef Pythia8_SusyCouplings_H
11 #define Pythia8_SusyCouplings_H
12 
13 #include "Pythia8/PythiaComplex.h"
14 #include "Pythia8/Settings.h"
15 #include "Pythia8/StandardModel.h"
16 #include "Pythia8/SusyLesHouches.h"
17 
18 namespace Pythia8 {
19 
20 class ParticleData;
21 
22 //==========================================================================
23 
24 // CoupSUSY
25 // Auxiliary class to compute and store various SM and SUSY couplings.
26 
27 class CoupSUSY {
28 
29 public:
30 
31  // Constructor
32  CoupSUSY() : isInit(false), isSUSY(false), isNMSSM(false),
33  isLLE(false), isLQD(false), isUDD(false), mWpole(), wWpole(), mZpole(),
34  wZpole(), mW(), mZ(), sin2W(), sinW(), cosW(), tanb(), cosb(), sinb(),
35  muHiggs(), alphaHiggs(), mAHiggs(), LqqZ(), RqqZ(), LllZ(), RllZ(),
36  rvLLE(), rvLQD(), rvUDD(), slhaPtr(), infoPtr(), settingsPtr(),
37  particleDataPtr(), coupSMPtr() {}
38 
39  // Initialize
40  void initSUSY(SusyLesHouches* slhaPtrIn, Info* infoPtrIn);
41 
42  // Status flag. Flags for NMSSM and RPV couplings.
43  bool isInit, isSUSY, isNMSSM, isLLE, isLQD, isUDD;
44 
45  // Z and W pole masses and widths
46  double mWpole, wWpole, mZpole, wZpole;
47 
48  // Running masses and weak mixing angle
49  // (default to pole values if no running available)
50  double mW, mZ, sin2W, sinW, cosW;
51 
52  // Tanbeta
53  double tanb, cosb, sinb;
54 
55  //Higgs-sector parameters
56  double muHiggs, alphaHiggs, mAHiggs;
57 
58  // ~qq~g couplings
59  complex LsddG[7][4], RsddG[7][4];
60  complex LsuuG[7][4], RsuuG[7][4];
61  // Assume generation index for Squark. Translate if PDG code instead.
62  complex getLsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
63  iGenSq = 3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
64  return (abs(idQ)%2 == 0) ? LsuuG[iGenSq][abs(idQ)/2]
65  : LsddG[iGenSq][(abs(idQ)+1)/2] ;}
66  complex getRsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
67  iGenSq = 3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
68  return (abs(idQ)%2 == 0) ? RsuuG[iGenSq][abs(idQ)/2]
69  : RsddG[iGenSq][(abs(idQ)+1)/2] ;}
70 
71  // ~chi0~chi0Z couplings
72  complex OLpp[6][6], ORpp[6][6];
73 
74  // ~chi+~chi-Z couplings
75  complex OLp[3][3], ORp[3][3];
76 
77  // ~chi0~chi+W couplings
78  complex OL[6][3], OR[6][3];
79 
80  // qqZ couplings
81  double LqqZ[7], RqqZ[7];
82 
83  // ~q~qZ couplings
84  complex LsdsdZ[7][7], RsdsdZ[7][7];
85  complex LsusuZ[7][7], RsusuZ[7][7];
86  complex getLsqsqZ(int idSq1, int idSq2) {
87  if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
88  int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
89  int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
90  return (abs(idSq1)%2 == 0) ? LsusuZ[iGen1][iGen2] : LsdsdZ[iGen1][iGen2];}
91  complex getRsqsqZ(int idSq1, int idSq2) {
92  if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
93  int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
94  int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
95  return (abs(idSq1)%2 == 0) ? RsusuZ[iGen1][iGen2] : RsdsdZ[iGen1][iGen2];}
96 
97  // udW couplings
98  complex LudW[4][4], RudW[4][4];
99 
100  // ~u~dW couplings
101  complex LsusdW[7][7], RsusdW[7][7];
102 
103  // ~qq~chi0 couplings
104  complex LsddX[7][4][6], RsddX[7][4][6];
105  complex LsuuX[7][4][6], RsuuX[7][4][6];
106  complex getLsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
107  ? LsuuX[iSq][abs(idQ)/2][iNeut] : LsddX[iSq][(abs(idQ)+1)/2][iNeut] ;}
108  complex getRsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
109  ? RsuuX[iSq][abs(idQ)/2][iNeut] : RsddX[iSq][(abs(idQ)+1)/2][iNeut] ;}
110 
111  // ~du~chi+ couplings
112  complex LsduX[7][4][3], RsduX[7][4][3];
113 
114  // ~ud~chi+ couplings
115  complex LsudX[7][4][3], RsudX[7][4][3];
116 
117  //llZ couplings
118  double LllZ[7], RllZ[7];
119 
120  //lvW couplings
121  complex LlvW[4][4], RlvW[4][4];
122 
123  // ~l~lZ couplings
124  complex LslslZ[7][7],RslslZ[7][7];
125  complex LsvsvZ[7][7],RsvsvZ[7][7];
126 
127  // ~l~vW couplings
128  complex LslsvW[7][7], RslsvW[7][7];
129 
130  // ~ll~chi0 couplings
131  complex LsvvX[7][4][6], RsvvX[7][4][6];
132  complex LsllX[7][4][6], RsllX[7][4][6];
133 
134  // ~vl~chi+ couplings
135  complex LsvlX[7][4][3], RsvlX[7][4][3];
136 
137  // ~lv~chi+ couplings
138  complex LslvX[7][4][3], RslvX[7][4][3];
139 
140  // RPV couplings
141  double rvLLE[4][4][4], rvLQD[4][4][4], rvUDD[4][4][4];
142 
143  //Squark and slepton mixing matrix: needed for RPV
144  complex Rusq[7][7], Rdsq[7][7];
145  complex Rsl[7][7], Rsv[7][7];
146 
147  // Return neutralino, chargino, sup, sdown and slepton flavour codes.
148  int idNeut(int idChi);
149  int idChar(int idChi);
150  int idSup(int iSup);
151  int idSdown(int iSdown);
152  int idSlep(int iSlep);
153 
154  //Reverse lookup for neutralinos and charginos
155  int typeNeut(int idPDG);
156  int typeChar(int idPDG);
157 
158  // Pointer to SLHA instance
159  // Used in SusyResonanceWidths for checking if decay table exists
160  SusyLesHouches* slhaPtr;
161 
162 private:
163 
164  // Pointer to the info class
165  Info* infoPtr;
166 
167  // Pointer to the settings database.
168  Settings* settingsPtr;
169 
170  // Pointer to the particle data table.
171  ParticleData* particleDataPtr;
172 
173  // Pointer to the Standard Model couplings.
174  CoupSM* coupSMPtr;
175 
176 };
177 
178 //==========================================================================
179 
180 } // end namespace Pythia8
181 
182 #endif // Pythia8_SusyCouplings_H