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