Line data Source code
1 : // SusyCouplings.h is a part of the PYTHIA event generator.
2 : // Copyright (C) 2015 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 "Pythia8/PythiaComplex.h"
13 : #include "Pythia8/Settings.h"
14 : #include "Pythia8/StandardModel.h"
15 : #include "Pythia8/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 0 : class CoupSUSY : public Couplings{
27 :
28 : public:
29 :
30 : // Constructor
31 0 : CoupSUSY() {isInit=false; isNMSSM = false; isSUSY=true;}
32 :
33 : // Initialize
34 : void initSUSY(SusyLesHouches* slhaPtrIn, Info* infoPtrIn,
35 : ParticleData* particleDataPtrIn, Settings* settingsPtrIn);
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 0 : complex getLsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
58 0 : iGenSq = 3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
59 0 : return (abs(idQ)%2 == 0) ? LsuuG[iGenSq][abs(idQ)/2]
60 0 : : LsddG[iGenSq][(abs(idQ)+1)/2] ;}
61 0 : complex getRsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
62 0 : iGenSq = 3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
63 0 : return (abs(idQ)%2 == 0) ? RsuuG[iGenSq][abs(idQ)/2]
64 0 : : 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 0 : if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
83 0 : int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
84 0 : int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
85 0 : return (abs(idSq1)%2 == 0) ? LsusuZ[iGen1][iGen2] : LsdsdZ[iGen1][iGen2];}
86 : complex getRsqsqZ(int idSq1, int idSq2) {
87 0 : if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
88 0 : int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
89 0 : int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
90 0 : 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 0 : complex getLsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
102 0 : ? LsuuX[iSq][abs(idQ)/2][iNeut] : LsddX[iSq][(abs(idQ)+1)/2][iNeut] ;}
103 0 : complex getRsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
104 0 : ? 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][4], RlvW[4][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 and slepton mixing matrix: needed for RPV
141 : complex Rusq[7][7], Rdsq[7][7];
142 : complex Rsl[7][7], Rsv[7][7];
143 :
144 : // Return neutralino, chargino, sup, sdown and slepton flavour codes.
145 : int idNeut(int idChi);
146 : int idChar(int idChi);
147 : int idSup(int iSup);
148 : int idSdown(int iSdown);
149 : int idSlep(int iSlep);
150 :
151 : //Reverse lookup for neutralinos and charginos
152 : int typeNeut(int idPDG);
153 : int typeChar(int idPDG);
154 :
155 : // Pointer to SLHA instance
156 : // Used in SusyResonanceWidths for checking if decay table exists
157 : SusyLesHouches* slhaPtr;
158 :
159 : private:
160 : // Debug flag
161 : static const bool DBSUSY;
162 :
163 : // Pointer to the info class
164 : Info* infoPtr;
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
|