]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA8/pythia8170/include/SusyCouplings.h
end-of-line normalization
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / include / 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