Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:06:32

0001 
0002 // SusyCouplings.h is a part of the PYTHIA event generator.
0003 // Copyright (C) 2024 Torbjorn Sjostrand.
0004 // Main authors of this file: N. Desai, P. Skands
0005 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
0006 // Please respect the MCnet Guidelines, see GUIDELINES for details.
0007 
0008 // Header file for setup of common SUSY couplings.
0009 
0010 #ifndef Pythia8_SusyCouplings_H
0011 #define Pythia8_SusyCouplings_H
0012 
0013 #include "Pythia8/PythiaComplex.h"
0014 #include "Pythia8/Settings.h"
0015 #include "Pythia8/StandardModel.h"
0016 #include "Pythia8/SusyLesHouches.h"
0017 
0018 namespace Pythia8 {
0019 
0020 class ParticleData;
0021 
0022 //==========================================================================
0023 
0024 // CoupSUSY
0025 // Auxiliary class to compute and store various SM and SUSY couplings.
0026 
0027 class CoupSUSY {
0028 
0029 public:
0030 
0031   // Constructor
0032   CoupSUSY() : isInit(false), isSUSY(false), isNMSSM(false),
0033     isLLE(false), isLQD(false), isUDD(false), mWpole(), wWpole(), mZpole(),
0034     wZpole(), mW(), mZ(), sin2W(), sinW(), cosW(), tanb(), cosb(), sinb(),
0035     muHiggs(), alphaHiggs(), mAHiggs(), LqqZ(), RqqZ(), LllZ(), RllZ(),
0036     rvLLE(), rvLQD(), rvUDD(), slhaPtr(), loggerPtr(), settingsPtr(),
0037     particleDataPtr(), coupSMPtr() {}
0038 
0039   // Initialize
0040   void initSUSY(SusyLesHouches* slhaPtrIn, Info* infoPtrIn);
0041 
0042   // Status flag. Flags for NMSSM and RPV couplings.
0043   bool isInit, isSUSY, isNMSSM, isLLE, isLQD, isUDD;
0044 
0045   // Z and W pole masses and widths
0046   double mWpole, wWpole, mZpole, wZpole;
0047 
0048   // Running masses and weak mixing angle
0049   // (default to pole values if no running available)
0050   double mW, mZ, sin2W, sinW, cosW;
0051 
0052   // Tanbeta
0053   double tanb, cosb, sinb;
0054 
0055   //Higgs-sector parameters
0056   double muHiggs, alphaHiggs, mAHiggs;
0057 
0058   // ~qq~g couplings
0059   complex LsddG[7][4], RsddG[7][4];
0060   complex LsuuG[7][4], RsuuG[7][4];
0061   // Assume generation index for Squark. Translate if PDG code instead.
0062   complex getLsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
0063       iGenSq =  3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
0064     return (abs(idQ)%2 == 0) ? LsuuG[iGenSq][abs(idQ)/2]
0065       : LsddG[iGenSq][(abs(idQ)+1)/2] ;}
0066   complex getRsqqG(int iGenSq, int idQ) {if (abs(iGenSq) > 1000000)
0067       iGenSq =  3*(abs(iGenSq)/2000000) + (abs(iGenSq)%10+1)/2;
0068     return (abs(idQ)%2 == 0) ? RsuuG[iGenSq][abs(idQ)/2]
0069       : RsddG[iGenSq][(abs(idQ)+1)/2] ;}
0070 
0071   // ~chi0~chi0Z couplings
0072   complex OLpp[6][6], ORpp[6][6];
0073 
0074   // ~chi+~chi-Z couplings
0075   complex OLp[3][3], ORp[3][3];
0076 
0077   // ~chi0~chi+W couplings
0078   complex OL[6][3], OR[6][3];
0079 
0080   // qqZ couplings
0081   double LqqZ[7], RqqZ[7];
0082 
0083   // ~q~qZ couplings
0084   complex LsdsdZ[7][7], RsdsdZ[7][7];
0085   complex LsusuZ[7][7], RsusuZ[7][7];
0086   complex getLsqsqZ(int idSq1, int idSq2) {
0087     if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
0088     int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
0089     int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
0090     return (abs(idSq1)%2 == 0) ? LsusuZ[iGen1][iGen2] : LsdsdZ[iGen1][iGen2];}
0091   complex getRsqsqZ(int idSq1, int idSq2) {
0092     if (abs(idSq1)%2 != abs(idSq2)%2) return complex(0.0,0.0);
0093     int iGen1 = 3*(abs(idSq1)/2000000) + (abs(idSq1)%10+1)/2;
0094     int iGen2 = 3*(abs(idSq2)/2000000) + (abs(idSq2)%10+1)/2;
0095     return (abs(idSq1)%2 == 0) ? RsusuZ[iGen1][iGen2] : RsdsdZ[iGen1][iGen2];}
0096 
0097   // udW couplings
0098   complex LudW[4][4], RudW[4][4];
0099 
0100   // ~u~dW couplings
0101   complex LsusdW[7][7], RsusdW[7][7];
0102 
0103   // ~qq~chi0 couplings
0104   complex LsddX[7][4][6], RsddX[7][4][6];
0105   complex LsuuX[7][4][6], RsuuX[7][4][6];
0106   complex getLsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
0107     ? LsuuX[iSq][abs(idQ)/2][iNeut] : LsddX[iSq][(abs(idQ)+1)/2][iNeut] ;}
0108   complex getRsqqX(int iSq, int idQ, int iNeut) {return (abs(idQ)%2 == 0)
0109     ? RsuuX[iSq][abs(idQ)/2][iNeut] : RsddX[iSq][(abs(idQ)+1)/2][iNeut] ;}
0110 
0111   // ~du~chi+ couplings
0112   complex LsduX[7][4][3], RsduX[7][4][3];
0113 
0114   // ~ud~chi+ couplings
0115   complex LsudX[7][4][3], RsudX[7][4][3];
0116 
0117   //llZ couplings
0118   double LllZ[7], RllZ[7];
0119 
0120   //lvW couplings
0121   complex LlvW[4][4], RlvW[4][4];
0122 
0123   // ~l~lZ couplings
0124   complex LslslZ[7][7],RslslZ[7][7];
0125   complex LsvsvZ[7][7],RsvsvZ[7][7];
0126 
0127   // ~l~vW couplings
0128   complex LslsvW[7][7], RslsvW[7][7];
0129 
0130   // ~ll~chi0 couplings
0131   complex LsvvX[7][4][6], RsvvX[7][4][6];
0132   complex LsllX[7][4][6], RsllX[7][4][6];
0133 
0134   // ~vl~chi+ couplings
0135   complex LsvlX[7][4][3], RsvlX[7][4][3];
0136 
0137   // ~lv~chi+ couplings
0138   complex LslvX[7][4][3], RslvX[7][4][3];
0139 
0140   // RPV couplings
0141   double rvLLE[4][4][4], rvLQD[4][4][4], rvUDD[4][4][4];
0142 
0143   //Squark and slepton mixing matrix: needed for RPV
0144   complex Rusq[7][7], Rdsq[7][7];
0145   complex Rsl[7][7], Rsv[7][7];
0146 
0147   // Return neutralino, chargino, sup, sdown and slepton flavour codes.
0148   int idNeut(int idChi);
0149   int idChar(int idChi);
0150   int idSup(int iSup);
0151   int idSdown(int iSdown);
0152   int idSlep(int iSlep);
0153 
0154   //Reverse lookup for neutralinos and charginos
0155   int typeNeut(int idPDG);
0156   int typeChar(int idPDG);
0157 
0158   // Pointer to SLHA instance
0159   // Used in SusyResonanceWidths for checking if decay table exists
0160   SusyLesHouches* slhaPtr;
0161 
0162 private:
0163 
0164   // Pointer to logger.
0165   Logger*        loggerPtr;
0166 
0167   // Pointer to the settings database.
0168   Settings*      settingsPtr;
0169 
0170   // Pointer to the particle data table.
0171   ParticleData*  particleDataPtr;
0172 
0173   // Pointer to the Standard Model couplings.
0174   CoupSM*        coupSMPtr;
0175 
0176 };
0177 
0178 //==========================================================================
0179 
0180 } // end namespace Pythia8
0181 
0182 #endif // Pythia8_SusyCouplings_H