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.
7
// Header file for setup of common SUSY couplings.
9
#ifndef Pythia8_SusyCouplings_H
10
#define Pythia8_SusyCouplings_H
12
#include "PythiaComplex.h"
14
#include "StandardModel.h"
15
#include "SusyLesHouches.h"
21
//==========================================================================
24
// Auxiliary class to compute and store various SM and SUSY couplings.
26
class CoupSUSY : public Couplings{
31
CoupSUSY() {isInit=false; isNMSSM = false; isSUSY=true;}
34
void initSUSY(SusyLesHouches* slhaPtrIn, Settings* settingsPtrIn,
35
ParticleData* particleDataPtrIn);
37
// Status flag. Flag for NMSSM.
40
// Z and W pole masses and widths
41
double mWpole, wWpole, mZpole, wZpole;
43
// Running masses and weak mixing angle
44
// (default to pole values if no running available)
45
double mW, mZ, sin2W, sinW, cosW;
48
double tanb, cosb, sinb;
50
//Higgs-sector parameters
51
double muHiggs, alphaHiggs, mAHiggs;
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] ;}
66
// ~chi0~chi0Z couplings
67
complex OLpp[6][6], ORpp[6][6];
69
// ~chi+~chi-Z couplings
70
complex OLp[3][3], ORp[3][3];
72
// ~chi0~chi+W couplings
73
complex OL[6][3], OR[6][3];
76
double LqqZ[7], RqqZ[7];
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];}
93
complex LudW[4][4], RudW[4][4];
96
complex LsusdW[7][7], RsusdW[7][7];
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] ;}
106
// ~du~chi+ couplings
107
complex LsduX[7][4][3], RsduX[7][4][3];
109
// ~ud~chi+ couplings
110
complex LsudX[7][4][3], RsudX[7][4][3];
113
double LllZ[7], RllZ[7];
116
complex LlvW[4], RlvW[4];
119
complex LslslZ[7][7],RslslZ[7][7];
120
complex LsvsvZ[7][7],RsvsvZ[7][7];
123
complex LslsvW[7][7], RslsvW[7][7];
125
// ~ll~chi0 couplings
126
complex LsvvX[7][4][6], RsvvX[7][4][6];
127
complex LsllX[7][4][6], RsllX[7][4][6];
129
// ~vl~chi+ couplings
130
complex LsvlX[7][4][3], RsvlX[7][4][3];
132
// ~lv~chi+ couplings
133
complex LslvX[7][4][3], RslvX[7][4][3];
136
double rvLLE[4][4][4], rvLQD[4][4][4], rvUDD[4][4][4];
137
// Flags for RPV couplings
138
bool isLLE, isLQD, isUDD;
140
//Squark mixing matrix: needed for RPV
141
complex Rusq[7][7], Rdsq[7][7];
143
// Return neutralino, chargino, sup, sdown and slepton flavour codes.
144
int idNeut(int idChi);
145
int idChar(int idChi);
147
int idSdown(int iSdown);
148
int idSlep(int iSlep);
150
//Reverse lookup for neutralinos and charginos
151
int typeNeut(int idPDG);
152
int typeChar(int idPDG);
154
// Return a particle name, given the PDG code.
155
string getName(int pdgCode);
157
// Pointer to SLHA instance
158
// Used in SusyResonanceWidths for checking if decay table exists
159
SusyLesHouches* slhaPtr;
163
static const bool DEBUG;
166
// Pointer to the settings database.
167
Settings* settingsPtr;
169
// Pointer to the particle data table.
170
ParticleData* particleDataPtr;
174
//==========================================================================
176
} // end namespace Pythia8
178
#endif // Pythia8_SusyCouplings_H