Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // UEDBase.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_UEDBase_H
0010 #define HERWIG_UEDBase_H
0011 //
0012 // This is the declaration of the UEDBase class.
0013 //
0014 
0015 #include "Herwig/Models/General/BSMModel.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0019 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
0020 
0021 #include "UEDBase.fh"
0022 
0023 namespace Herwig {
0024 using namespace ThePEG;
0025 
0026 /**
0027  * This class serves as a base class for all UED models. It stores the
0028  * values of the inverse radius and the product \f$\Lambda R \f$  and has functions
0029  * to calculate the radiative corrections to the nth level KK excitations.
0030  *
0031  * To use this class for n > 1 simply inherit off it, calculate the necessary masses
0032  * using the provided functions for the new excitations and add the
0033  * appropriate vertices.
0034  *
0035  * @see \ref UEDBaseInterfaces "The interfaces"
0036  * defined for UEDBase.
0037  */
0038 class UEDBase: public BSMModel {
0039 
0040 public:
0041 
0042   /** Typedef for ID-Mass pair. */
0043   typedef pair<long, Energy> IDMassPair;
0044 
0045   /** Typedef for unsigned int/double map to store Weinburg angles.*/
0046   typedef map<unsigned int, double> WAMap;
0047 
0048 public:
0049 
0050   /**
0051    * The default constructor.
0052    */
0053   UEDBase();
0054 
0055   /** @name Functions used by the persistent I/O system. */
0056   //@{
0057   /**
0058    * Function used to write out object persistently.
0059    * @param os the persistent output stream written to.
0060    */
0061   void persistentOutput(PersistentOStream & os) const;
0062 
0063   /**
0064    * Function used to read in object persistently.
0065    * @param is the persistent input stream read from.
0066    * @param version the version number of the object when written.
0067    */
0068   void persistentInput(PersistentIStream & is, int version);
0069   //@}
0070 
0071   /**
0072    * The standard Init function used to initialize the interfaces.
0073    * Called exactly once for each class by the class description system
0074    * before the main function starts or
0075    * when this class is dynamically loaded.
0076    */
0077   static void Init();
0078 
0079 public:
0080 
0081   /** @name Public Access Functions.*/
0082   //@{
0083   /**
0084    * Return the compactification radius
0085    */
0086   InvEnergy compactRadius() const {
0087     return 1./theInvRadius;
0088   }
0089 
0090   /**
0091    * Return the Weinburg mixing angle for any level.
0092    */
0093   double sinThetaN(const unsigned int n) const;
0094 
0095   /**
0096    * Return the Weinburg mixing angle for \f$n = 1\f$
0097    */
0098   double sinThetaOne() const {
0099     return theSinThetaOne;
0100   }
0101   //@}
0102 
0103 protected:
0104 
0105   /**
0106    * Add a new ID,mass pair to the mass storage
0107    * @param elem The element to add in to storage
0108    */
0109   void addMassElement(IDMassPair elem) {
0110     theMasses.push_back(elem);
0111   }
0112 
0113   /**
0114    * Add a new mixing angle to the storage
0115    * @param n The level
0116    * @param val The value
0117    */
0118   void addMixingAngle(const unsigned int n, 
0119               const double val) {
0120     theMixingAngles.insert(make_pair(n, val));
0121   }
0122   
0123 private:
0124 
0125   /** @name Utility Functions for calculating masses. */
0126   //@{
0127   /**
0128    * Calculate the radiative corrections to the masses of the KK excitations
0129    * @param n The KK-level for which to calculate the masses. 
0130    */
0131   void calculateKKMasses(const unsigned int n);
0132 
0133   /**
0134    * Calculate the radiative corrections to the spin-0 and spin-1 
0135    * masses of the KK excitations
0136    * @param n The KK-level for which to calculate the masses. 
0137    */
0138   void bosonMasses(const unsigned int n);
0139   
0140   /**
0141    * Calculate the radiative corrections to the spin-1/2
0142    * masses of the KK excitations.
0143    * @param n The KK-level for which to calculate the masses.
0144    */
0145   void fermionMasses(const unsigned int n);
0146 
0147   /**
0148    * Reset the mass of the ParticleData object
0149    *@param id The id of the particles mass to reset
0150    *@param value The new mass
0151    */  
0152   void resetMass(long id, Energy value);
0153 
0154   /**
0155    * Calculate the Weinburg Mixing angle for the appropriate level.
0156    * @param n The KK-level for which to calculate the mixing angle.
0157    */
0158   double calculateMixingAngle(const unsigned int n);
0159   //@}
0160   
0161   /**
0162    * Write out a spectrum file ordered in mass (name can be set by an interface).
0163    */
0164   void writeSpectrum();
0165 
0166   /**
0167    * A predicate for sorting the list of masses.
0168    */
0169   static bool lowerMass(const pair<long, Energy> & p1, 
0170             const pair<long, Energy> & p2) {
0171     return p1.second < p2.second;
0172   }
0173   
0174 protected:
0175 
0176   /** @name Clone Methods. */
0177   //@{
0178   /**
0179    * Make a simple clone of this object.
0180    * @return a pointer to the new object.
0181    */
0182   virtual IBPtr clone() const {return new_ptr(*this);}
0183 
0184   /** Make a clone of this object, possibly modifying the cloned object
0185    * to make it sane.
0186    * @return a pointer to the new object.
0187    */
0188   virtual IBPtr fullclone() const {return new_ptr(*this);}
0189   //@}
0190 
0191 
0192 protected:
0193 
0194   /** @name Standard Interfaced functions. */
0195   //@{
0196   virtual void doinit();
0197   //@}
0198 
0199 private:
0200 
0201   /**
0202    * The assignment operator is private and must never be called.
0203    * In fact, it should not even be implemented.
0204    */
0205   UEDBase & operator=(const UEDBase &) = delete;
0206 
0207 private:
0208   
0209   /**
0210    * Whether to calculate the radiative corrections to the KK masses
0211    */
0212   bool theRadCorr;
0213   
0214   /**
0215    * Store the radius of the compactified dimension.
0216    */
0217   Energy theInvRadius;
0218   
0219   /**
0220    * The value of \f$\Lambda R \f$.
0221    */
0222   double theLambdaR;
0223 
0224   /**
0225    * The boundary mass term for the Higgs.
0226    */
0227   Energy theMbarH;
0228 
0229   /**
0230    * The values of \f$\sin\theta_N\f$
0231    */
0232   WAMap theMixingAngles;
0233 
0234   /**
0235    * Store \f$\sin\theta_1\f$ for faster access
0236    */
0237   double theSinThetaOne;
0238   
0239   /**
0240    * Store the masses of the new particles
0241    */
0242   vector<IDMassPair> theMasses;
0243   
0244   /**
0245    * The value of the vacuum expectation value of the higgs field.
0246    */
0247   Energy theVeV;
0248 
0249   /**
0250    *  Include SM masses in calculation of KK masses
0251    */
0252   bool includeSMMass_;
0253 
0254   /**
0255    *  Use fixed couplings for the mass calculation
0256    */
0257   bool fixedCouplings_;
0258 
0259   /**
0260    *  Include gauge boson mixing
0261    */
0262   bool includeGaugeMixing_;
0263   
0264   /** @name The level 1 UED vertices. */
0265   //@{
0266   /**
0267    * The \f$\bar{f}^{(1)}f^{(1)}Z^{(0)}\f$
0268    */
0269   AbstractFFVVertexPtr theF1F1Z0Vertex;
0270 
0271   /**
0272    * The \f$\bar{f}^{(1)}f^{(1)}g^{(0)}\f$
0273    */
0274   AbstractFFVVertexPtr theF1F1G0Vertex;
0275 
0276   /**
0277    * The \f$\bar{f}^{(1)}f^{(0)}g^{(1)}\f$
0278    */
0279   AbstractFFVVertexPtr theF1F0G1Vertex;
0280 
0281   /**
0282    * The \f$g^{(1)}g^{(1)}g\f$ vertex
0283    */
0284   AbstractVVVVertexPtr theG1G1G0Vertex;
0285 
0286   /**
0287    * The \f$g\,g\,g^{(1)},g^{(1)}\f$ vertex
0288    */
0289   AbstractVVVVVertexPtr theG0G0G1G1Vertex;
0290 
0291   /**
0292    * The \f$\bar{f}^{(1)}f^{(1)}\gamma\f$
0293    */
0294   AbstractFFVVertexPtr theF1F1P0Vertex;
0295 
0296   /**
0297    * The \f$\bar{f}^{(1)}f^{(1)}W\f$
0298    */
0299   AbstractFFVVertexPtr theF1F1W0Vertex;
0300 
0301   /**
0302    * The \f$\bar{f}^{(1)}f^{(0)}W^{(1)}\f$
0303    */
0304   AbstractFFVVertexPtr theF1F0W1Vertex;
0305 
0306   /**
0307    * The \f$\bar{f}^{(1)}f^{(0)}H^{(1)}\f$
0308    */
0309   AbstractFFSVertexPtr theF1F0H1Vertex;
0310 
0311   /**
0312    * The \f$ A^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$
0313    */
0314   AbstractVSSVertexPtr theP0H1H1Vertex;
0315 
0316   /**
0317    * The \f$ Z^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$
0318    */
0319   AbstractVSSVertexPtr theZ0H1H1Vertex;
0320 
0321   /**
0322    * The \f$ W^\pm_{\mu(0)}A_{(1)}H^\mp_{(1)}\f$
0323    */
0324   AbstractVSSVertexPtr theW0A1H1Vertex;
0325 
0326   /**
0327    * The \f$ Z^\mu_{\mu(0)}A_{(1)}h_{(1)}\f$
0328    */
0329   AbstractVSSVertexPtr theZ0A1h1Vertex;
0330   
0331   /**
0332    * The \f$W^{(1)}Z^{(1)}W_{(0)}\f$ vertex
0333    */
0334   AbstractVVVVertexPtr theW0W1W1Vertex;
0335   //@}
0336 };
0337 
0338 
0339 }
0340 
0341 #endif /* HERWIG_UEDBase_H */