Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:20

0001 // -*- C++ -*-
0002 //
0003 // SusyBase.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef HERWIG_SusyBase_H
0010 #define HERWIG_SusyBase_H
0011 //
0012 // This is the declaration of the SusyBase class.
0013 //
0014 
0015 #include "Herwig/Models/General/BSMModel.h"
0016 #include "MixingMatrix.h"
0017 #include "ThePEG/Utilities/CFileLineReader.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0019 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
0020 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
0021 #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h"
0022 #include "ThePEG/Helicity/Vertex/AbstractRFVVertex.h"
0023 #include "SusyBase.fh"
0024 
0025 namespace Herwig {
0026 using namespace ThePEG;
0027 
0028   /*@name Some convenient typedefs. */
0029   //@{
0030   /** 
0031    * Map to hold key, parameter pairs. 
0032    */
0033   typedef map<long, double> ParamMap;
0034 
0035   /**
0036    * Map to hold key, string pairs
0037    */
0038   typedef map<long,string> StringMap;
0039   //@}
0040 
0041 /** \ingroup Models
0042    * This class is designed to be a base class for SUSY models. There is
0043    * an interface to set the name of the spectrum file to read in 
0044    * the necessary parameters for a SUSY model.
0045    *
0046    * @see \ref SusyBaseInterfaces "The interfaces"
0047    * defined for SusyBase.
0048    * @see StandardModel
0049    */  
0050 
0051 class SusyBase: public BSMModel {
0052   
0053 public:
0054 
0055   /**
0056    * The default constructor.
0057    */
0058   SusyBase();
0059 
0060 public:
0061 
0062   /** @name Access functions. */
0063   //@{
0064   /**
0065    * Value of \f$\tan\beta\f$.
0066    */
0067   double tanBeta() const { return tanBeta_; }
0068 
0069   /**
0070    * Value of \f$\mu\f$ parameter.
0071    */
0072   Energy muParameter() const { return mu_; }
0073 
0074   /**
0075    * The neutralino mixing matrix
0076    */
0077   const MixingMatrixPtr & neutralinoMix() const { 
0078     return NMix_;
0079   }
0080 
0081   /**
0082    * The U-type chargino mixing matrix
0083    */
0084   const MixingMatrixPtr & charginoUMix() const {
0085     return UMix_;
0086   }
0087 
0088   /**
0089    * The V-type chargino mixing matrix
0090    */
0091   const MixingMatrixPtr & charginoVMix() const {
0092     return VMix_;
0093   }
0094 
0095   /**
0096    *  The phase for gluino vertices
0097    */
0098   const Complex & gluinoPhase() const {return gluinoPhase_;}
0099   //@}
0100 
0101   /**
0102    *  Treatment of neutrinos
0103    */
0104   bool majoranaNeutrinos() const {return majoranaNeutrinos_;}
0105 
0106 public:
0107 
0108   /** @name Functions used by the persistent I/O system. */
0109   //@{
0110   /**
0111    * Function used to write out object persistently.
0112    * @param os the persistent output stream written to.
0113    */
0114   void persistentOutput(PersistentOStream & os) const;
0115 
0116   /**
0117    * Function used to read in object persistently.
0118    * @param is the persistent input stream read from.
0119    * @param version the version number of the object when written.
0120    */
0121   void persistentInput(PersistentIStream & is, int version);
0122   //@}
0123 
0124   /**
0125    * The standard Init function used to initialize the interfaces.
0126    * Called exactly once for each class by the class description system
0127    * before the main function starts or
0128    * when this class is dynamically loaded.
0129    */
0130   static void Init();
0131 
0132 public:
0133 
0134   /**
0135    *  Soft breaking parameters
0136    */
0137   //@{
0138   /**
0139    * The bilinear breaking mass term for the bino
0140    */
0141   const Energy & M1() const {return M1_;}
0142   
0143   /**
0144    * The bilinear breaking mass term for the wino
0145    */
0146   const Energy & M2() const {return M2_;}
0147 
0148   /**
0149    * The bilinear breaking mass term for the gluinos
0150    */
0151   const Energy & M3() const {return M3_;}
0152 
0153   /**
0154    *  The soft breaking mass squared for \f$H_1\f$
0155    */
0156   const Energy2 & Mh12() const {return mH12_;}
0157 
0158   /**
0159    *  The soft breaking mass squared for \f$H_2\f$
0160    */
0161   const Energy2 & Mh22() const {return mH22_;}
0162 
0163   /**
0164    *  Soft breaking mass for the first generation lepton doublet
0165    */
0166   const Energy & MeL() const {return meL_;}
0167 
0168   /**
0169    *  Soft breaking mass for the second generation lepton doublet
0170    */
0171   const Energy & MmuL() const {return mmuL_;}
0172 
0173   /**
0174    *  Soft breaking mass for the third generation lepton doublet
0175    */
0176   const Energy & MtauL() const {return mtauL_;} 
0177 
0178   /**
0179    *  Soft breaking mass for the first generation lepton singlet
0180    */
0181   const Energy & MeR() const {return meR_;}
0182 
0183   /**
0184    *  Soft breaking mass for the second generation lepton singlet
0185    */
0186   const Energy & MmuR() const {return mmuR_;}
0187 
0188   /**
0189    *  Soft breaking mass for the third generation lepton singlet
0190    */
0191   const Energy & MtauR() const {return mtauR_;} 
0192 
0193   /**
0194    *  Soft breaking mass for the first generation quark doublet
0195    */
0196   const Energy & Mq1L() const {return mq1L_;}
0197 
0198   /**
0199    *  Soft breaking mass for the second generation quark doublet
0200    */
0201   const Energy & Mq2L() const {return mq2L_;}
0202 
0203   /**
0204    *  Soft breaking mass for the third generation quark doublet
0205    */
0206   const Energy & Mq3L() const {return mq3L_;}
0207 
0208   /**
0209    *  Soft breaking mass for the down singlet
0210    */ 
0211   const Energy & MdR() const {return mdR_;}
0212 
0213   /**
0214    *  Soft breaking mass for the up singlet
0215    */ 
0216   const Energy & MuR() const {return muR_;}
0217 
0218   /**
0219    *  Soft breaking mass for the strange singlet
0220    */ 
0221   const Energy & MsR() const {return msR_;}
0222 
0223   /**
0224    *  Soft breaking mass for the charm singlet
0225    */ 
0226   const Energy & McR() const {return mcR_;}
0227 
0228   /**
0229    *  Soft breaking mass for the bottom singlet
0230    */ 
0231   const Energy & MbR() const {return mbR_;}
0232 
0233   /**
0234    *  Soft breaking mass for the top singlet
0235    */ 
0236   const Energy & MtR() const {return mtR_;}
0237   //@}
0238 
0239   /**
0240    *  Planck mass
0241    */
0242   const Energy & MPlanck() const {return MPlanck_;}
0243 
0244 protected:
0245 
0246   /**
0247    * Function to read information from a setup file.
0248    * @param is istream object to read file.
0249    */
0250   virtual void readSetup(istream & is);
0251 
0252 private:
0253   
0254   /**@name Functions to help file read-in. */
0255   //@{
0256   /**
0257    * Read block from LHA file
0258    * @param ifs input stream containg data
0259    * @param name The name of the block
0260    * @param line The line defining the block
0261    */
0262   void readBlock(CFileLineReader & ifs,string name,string line,
0263          bool stringBlock);
0264 
0265   /**
0266    * Function to read mixing matrix from LHA file
0267    * @param ifs input stream containg data
0268    * @param row Number of rows
0269    * @param col Number of columns
0270    */
0271   const MixingVector readMatrix(CFileLineReader & ifs, unsigned int & row,
0272                 unsigned int & col);
0273 
0274 protected:
0275 
0276   /**
0277    *  Create the mixing matrices for the model
0278    */
0279   virtual void createMixingMatrices();
0280 
0281   /**
0282    *  Extract the parameters from the input blocks
0283    */
0284   virtual void extractParameters(bool checkmodel=true);
0285 
0286   /**
0287    * Create a object MixingMatrix in the repository
0288    * @param matrix Pointer to the mixing matrix
0289    * @param name Name of the mixing matrix, i.e. nmix, umix...
0290    * @param values Value of each entry in the matrix
0291    * @param size The size of the matrix
0292    */
0293   void createMixingMatrix(MixingMatrixPtr & matrix, string name, 
0294               const MixingVector & values,
0295               MatrixSize size);
0296 
0297   /**
0298    * Reset masses in the repository to values read from LHA file.
0299    */
0300   void resetRepositoryMasses();
0301 
0302   /**
0303    * Adjust row of Mixing Matrix if a negative mass occurs in LHA file
0304    * @param id The PDG code of the particle with a negative mass
0305    */
0306   virtual void adjustMixingMatrix(long id);
0307   //@}
0308 
0309   /**
0310    *  Access to the mixings and parameters for the inheriting classes
0311    */
0312   //@{
0313   /**
0314    *  Parameter blocks
0315    */
0316   const map<string,ParamMap> & parameters() const {
0317     return parameters_;
0318   }
0319 
0320   /**
0321    *  Info blocks
0322    */
0323   const map<string,StringMap> & info() const {
0324     return info_;
0325   }
0326 
0327   /**
0328    *  Mixing blocks
0329    */
0330   const map<string,pair<MatrixSize,MixingVector> > & mixings() const {
0331     return mixings_;
0332   }
0333   //@}
0334 
0335   /**
0336    * Reset neutralino mixing matrix
0337    */
0338   void neutralinoMix(MixingMatrixPtr nm) { NMix_ = nm; }
0339 
0340   /**
0341    * Reset the U-type chargino mixing matrix
0342    */
0343   void charginoUMix(MixingMatrixPtr um) { UMix_ = um; }
0344 
0345   /**
0346    *  Reset the V-type chargino mixing matrix
0347    */
0348   void charginoVMix(MixingMatrixPtr vm) { VMix_ = vm; }
0349 
0350   /**
0351    *  Read a parameter from a block, checking that the
0352    *  entry exists
0353    */
0354   double findValue(const map<string,ParamMap>::const_iterator pit,
0355            int iloc, const string & block,
0356            const string & name) {
0357     ParamMap::const_iterator it = pit->second.find(iloc);
0358     if(it!=pit->second.end()) {
0359       return it->second;
0360     }
0361     else {
0362       ostringstream message;
0363       message << "SusyBase::findValue() Parameter " << name << " = " << iloc 
0364               << " not found in BLOCK " << block << "\n"; 
0365       if(generator()) 
0366     generator()->logWarning( Exception(message.str(), Exception::warning) );
0367       else
0368     cerr << message.str();
0369       return 0.;
0370     }
0371   }
0372   
0373 protected:
0374 
0375   /** @name Clone Methods. */
0376   //@{
0377   /**
0378    * Make a simple clone of this object.
0379    * @return a pointer to the new object.
0380    */
0381   virtual IBPtr clone() const;
0382 
0383   /** Make a clone of this object, possibly modifying the cloned object
0384    * to make it sane.
0385    * @return a pointer to the new object.
0386    */
0387   virtual IBPtr fullclone() const;
0388   //@}
0389 
0390 protected:
0391 
0392   /** @name Standard Interfaced functions. */
0393   //@{
0394    /**
0395    * Initialize this object after the setup phase before saving an
0396    * EventGenerator to disk.
0397    * @throws InitException if object could not be initialized properly.
0398    */
0399   virtual void doinit();
0400   //@}
0401 
0402 private:
0403 
0404   /**
0405    * The assignment operator is private and must never be called.
0406    * In fact, it should not even be implemented.
0407    */
0408   SusyBase & operator=(const SusyBase &) = delete;
0409 
0410 private:
0411 
0412   /**
0413    *  Whether or not the SLHA file has been read
0414    */
0415   bool readFile_;
0416 
0417   /**
0418    *  Planck mass needed in GMSB models
0419    */
0420   Energy MPlanck_;
0421 
0422   /**
0423    *  Whether or not to include gravitino interactions
0424    */
0425   bool gravitino_;
0426 
0427   /**
0428    *  Treatment of the neutrinos
0429    */
0430   bool majoranaNeutrinos_;
0431  
0432   /*
0433    * Storage of the parameters.
0434    */
0435   //@{
0436   /**
0437    *  Parameter blocks
0438    */
0439   map<string,ParamMap> parameters_;
0440 
0441   /**
0442    *  Info blocks
0443    */
0444   map<string,StringMap> info_;
0445 
0446   /**
0447    *  Mixing blocks
0448    */
0449   map<string,pair<MatrixSize, MixingVector> > mixings_;
0450 
0451   /**
0452    *  \f$\tan\beta\f$
0453    */
0454   double tanBeta_;
0455 
0456   /**
0457    *  \f$\mu\f$
0458    */
0459   Energy mu_;
0460   //@}
0461 
0462   /**
0463    *  Soft breaking parameters
0464    */
0465   //@{
0466   /**
0467    * The bilinear breaking mass term for the bino
0468    */
0469   Energy M1_;
0470   
0471   /**
0472    * The bilinear breaking mass term for the wino
0473    */
0474   Energy M2_;
0475 
0476   /**
0477    * The bilinear breaking mass term for the gluinos
0478    */
0479   Energy M3_;
0480 
0481   /**
0482    *  The soft breaking mass squared for \f$H_1\f$
0483    */
0484   Energy2 mH12_;
0485 
0486   /**
0487    *  The soft breaking mass squared for \f$H_2\f$
0488    */
0489   Energy2 mH22_;
0490 
0491   /**
0492    *  Soft breaking mass for the first generation lepton doublet
0493    */
0494   Energy meL_;
0495 
0496   /**
0497    *  Soft breaking mass for the second generation lepton doublet
0498    */
0499   Energy mmuL_;
0500 
0501   /**
0502    *  Soft breaking mass for the third generation lepton doublet
0503    */
0504   Energy mtauL_; 
0505 
0506   /**
0507    *  Soft breaking mass for the first generation lepton singlet
0508    */
0509   Energy meR_;
0510 
0511   /**
0512    *  Soft breaking mass for the second generation lepton singlet
0513    */
0514   Energy mmuR_;
0515 
0516   /**
0517    *  Soft breaking mass for the third generation lepton singlet
0518    */
0519   Energy mtauR_; 
0520 
0521   /**
0522    *  Soft breaking mass for the first generation quark doublet
0523    */
0524   Energy mq1L_;
0525 
0526   /**
0527    *  Soft breaking mass for the second generation quark doublet
0528    */
0529   Energy mq2L_;
0530 
0531   /**
0532    *  Soft breaking mass for the third generation quark doublet
0533    */
0534   Energy mq3L_;
0535 
0536   /**
0537    *  Soft breaking mass for the down singlet
0538    */ 
0539   Energy mdR_;
0540 
0541   /**
0542    *  Soft breaking mass for the up singlet
0543    */ 
0544   Energy muR_;
0545 
0546   /**
0547    *  Soft breaking mass for the strange singlet
0548    */ 
0549   Energy msR_;
0550 
0551   /**
0552    *  Soft breaking mass for the charm singlet
0553    */ 
0554   Energy mcR_;
0555 
0556   /**
0557    *  Soft breaking mass for the bottom singlet
0558    */ 
0559   Energy mbR_;
0560 
0561   /**
0562    *  Soft breaking mass for the top singlet
0563    */ 
0564   Energy mtR_;
0565   //@}
0566 
0567   /**
0568    *  Phase for the gluino
0569    */
0570   Complex gluinoPhase_;
0571 
0572   /**
0573    *  Neutralino and Chargino mixing matrices
0574    */
0575   //@{
0576   /**
0577    * Store pointers to the gaugino mixing matrices
0578    */
0579   //@{
0580   /**
0581    * The neutralino mixing matrix
0582    */
0583   MixingMatrixPtr NMix_; 
0584 
0585   /**
0586    * The \f$U\f$ mixing matrix for the charginos
0587    */
0588   MixingMatrixPtr UMix_; 
0589 
0590   /**
0591    * The \f$V\f$ mixing matrix for the charginos
0592    */
0593   MixingMatrixPtr VMix_; 
0594   //@}
0595 
0596   /**@name Vertex pointers. */
0597   //@{
0598   /**
0599    * Pointer to the gauge boson sfermion-sfermion vertex
0600    */
0601   AbstractVSSVertexPtr WSFSFVertex_;
0602   
0603   /**
0604    * Pointer to the gauge boson pair sfermion-sfermion vertex
0605    */
0606   AbstractVVSSVertexPtr WWSFSFVertex_;
0607   
0608   /**
0609    * Pointer to the neutralino-fermion-sfermion vertex
0610    */
0611   AbstractFFSVertexPtr NFSFVertex_;
0612   
0613   /**
0614    * Pointer to the gluino-fermion-sfermion coupling
0615    */
0616   AbstractFFSVertexPtr GFSFVertex_;
0617 
0618   /**
0619    * Pointer to the Higgs-sfermion-sfermion vertex
0620    */
0621   AbstractSSSVertexPtr HSFSFVertex_;
0622 
0623   /**
0624    * Pointer to the \f$\tilde{\chi}^+\f$-fermion-sfermion vertex
0625    */
0626   AbstractFFSVertexPtr CFSFVertex_;
0627 
0628   /**
0629    * Pointer to the gluon-sfermion-sfermion vertex
0630    */
0631   AbstractVSSVertexPtr GSFSFVertex_;
0632 
0633   /**
0634    * Pointer to the gluon-gluon-squark-squark vertex;
0635    */
0636   AbstractVVSSVertexPtr GGSQSQVertex_;
0637 
0638   /**
0639    * Pointer to the gauge boson-gluon-squark-squark vertex;
0640    */
0641   AbstractVVSSVertexPtr WGSQSQVertex_;
0642 
0643   /**
0644    * Pointer to the gluon-gluino-gluino vertex
0645    */
0646   AbstractFFVVertexPtr GSGSGVertex_; 
0647 
0648   /**
0649    * Pointer to the gluino-neutralino-gluon vertex
0650    */
0651   AbstractFFVVertexPtr GNGVertex_;
0652 
0653   /**
0654    * Pointer to the neutralino-neutralino-Z vertex
0655    */
0656   AbstractFFVVertexPtr NNZVertex_;
0657 
0658   /**
0659    * Pointer to the neutralino-neutralino-photon vertex
0660    */
0661   AbstractFFVVertexPtr NNPVertex_;
0662 
0663   /**
0664    * Pointer to the  vertex chargino-chargino-Z vertex
0665    */
0666   AbstractFFVVertexPtr CCZVertex_;
0667   
0668   /**
0669    * Pointer to the  vertex chargino-neutralino-Z vertex
0670    */
0671   AbstractFFVVertexPtr CNWVertex_;
0672 
0673   /**
0674    * Pointer to the vertex gaugino-gaugino-higgs vertex
0675    */
0676   AbstractFFSVertexPtr GOGOHVertex_;
0677   
0678   /**
0679    * Pointer to the vertex for a gauge boson and higgs
0680    */
0681   AbstractVSSVertexPtr WHHVertex_;
0682 
0683   /**
0684    *  Pointer to the vertex for flavour changing stop decay
0685    */
0686   AbstractFFSVertexPtr NCTVertex_;
0687 
0688   /**
0689    *  Pointer to the vertex for gravitino-neutralino vector boson
0690    */
0691   AbstractRFVVertexPtr GVNVVertex_;
0692 
0693   /**
0694    *  Pointer to the vertex for gravitino-neutralino Higgs boson
0695    */
0696   AbstractRFSVertexPtr GVNHVertex_;
0697 
0698   /**
0699    *  Pointer to the vertex for gravitino-fermion sfermion 
0700    */
0701   AbstractRFSVertexPtr GVFSVertex_;
0702   //@}
0703 
0704   /**
0705    *  Allow the resetting of Standard Model masses
0706    */
0707   bool allowedToResetSMMasses_;
0708 };
0709 
0710 }
0711 
0712 #endif /* HERWIG_SusyBase_H */