Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // SMHiggsWidthGenerator.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_SMHiggsWidthGenerator_H
0010 #define HERWIG_SMHiggsWidthGenerator_H
0011 //
0012 // This is the declaration of the SMHiggsWidthGenerator class.
0013 //
0014 
0015 #include "GenericWidthGenerator.h"
0016 
0017 namespace Herwig {
0018 using namespace ThePEG;
0019 
0020 /**
0021  * The SMHiggsWidthGenerator class calculates the width for the Standard Model 
0022  * Higgs boson
0023  *
0024  * @see \ref SMHiggsWidthGeneratorInterfaces "The interfaces"
0025  * defined for SMHiggsWidthGenerator.
0026  */
0027 class SMHiggsWidthGenerator: public GenericWidthGenerator {
0028 
0029 public:
0030 
0031   /**
0032    * The default constructor.
0033    */
0034   SMHiggsWidthGenerator() 
0035     : widthopt_(2), offshell_(10.), mw_(ZERO), mz_(ZERO), gamw_(ZERO),
0036       gamz_(ZERO), qmass_(7,ZERO), lmass_(3,ZERO),
0037       sw2_(0.), ca_(0.), cf_(0.), qlast_(ZERO)
0038   {}
0039 
0040 private:
0041 
0042 
0043   /** @name Virtual functions to be overridden from based class */
0044   //@{
0045   /**
0046    * Given a particle type and a mass of an instance of that particle
0047    * type, calculate a width.
0048    */
0049   virtual Energy width(const ParticleData &, Energy m) const;
0050 
0051   /**
0052    * Return decay map for the given particle type.
0053    */
0054   virtual DecayMap rate(const ParticleData &) const;
0055 
0056   /**
0057    * Return a decay map for a given Particle instance.
0058    */
0059   virtual DecayMap rate(const Particle &);
0060   //@}
0061 
0062   /**
0063    *  Return the total width and the sum of the partial widths for
0064    *  modes which are used
0065    */
0066   virtual pair<Energy,Energy> width(Energy, const ParticleData &) const;
0067 
0068   /**
0069    *  Calculate the partial width for a given mode
0070    * @param mH The Higgs masses
0071    * @param imode The decay mode
0072    */
0073   Energy partialWidth(int imode, Energy mH) const;
0074 
0075 public:
0076 
0077   /** @name Functions used by the persistent I/O system. */
0078   //@{
0079   /**
0080    * Function used to write out object persistently.
0081    * @param os the persistent output stream written to.
0082    */
0083   void persistentOutput(PersistentOStream & os) const;
0084 
0085   /**
0086    * Function used to read in object persistently.
0087    * @param is the persistent input stream read from.
0088    * @param version the version number of the object when written.
0089    */
0090   void persistentInput(PersistentIStream & is, int version);
0091   //@}
0092 
0093   /**
0094    * The standard Init function used to initialize the interfaces.
0095    * Called exactly once for each class by the class description system
0096    * before the main function starts or
0097    * when this class is dynamically loaded.
0098    */
0099   static void Init();
0100 
0101 protected:
0102 
0103   /** @name Clone Methods. */
0104   //@{
0105   /**
0106    * Make a simple clone of this object.
0107    * @return a pointer to the new object.
0108    */
0109   virtual IBPtr clone() const;
0110 
0111   /** Make a clone of this object, possibly modifying the cloned object
0112    * to make it sane.
0113    * @return a pointer to the new object.
0114    */
0115   virtual IBPtr fullclone() const;
0116   //@}
0117 
0118 protected:
0119 
0120   /** @name Routines to calculate Higgs width. */
0121   //@{
0122   /**
0123    * Calculates the double Breit-Wigner Integral a-la FORTRAN HERWIG.
0124    * It is used in NLL corrected Higgs width for H->WW/ZZ,
0125    * x = (M_V/M_H)^2, y=M_V*G_V/(M_H)^2, where M_V/G_V - V-boson mass/width
0126    * @return the integral value.
0127    */
0128   double HwDoubleBW(double x, double y) const;
0129 
0130   /**
0131    * Calculate a loop function for the triangle vertex GGH/AAH
0132    * @return the loop function value as a complex number
0133    */
0134   Complex HwW2(double tau) const;
0135   //@}
0136 
0137   /**
0138    *  Return the branching ratios at the given scale
0139    * @param scale The off shell-mass of the Higgs 
0140    */
0141   DecayMap branching(Energy scale, const ParticleData &) const;
0142 
0143 protected:
0144 
0145   /** @name Standard Interfaced functions. */
0146   //@{
0147   /**
0148    * Initialize this object after the setup phase before saving an
0149    * EventGenerator to disk.
0150    * @throws InitException if object could not be initialized properly.
0151    */
0152   virtual void doinit();
0153   //@}
0154 
0155 
0156 private:
0157 
0158   /**
0159    * The assignment operator is private and must never be called.
0160    * In fact, it should not even be implemented.
0161    */
0162   SMHiggsWidthGenerator & operator=(const SMHiggsWidthGenerator &) = delete;
0163 
0164 private:
0165 
0166   /**
0167    * Type of the Higgs width used (options: fixed, LO running, NLL corrected running)
0168    */
0169   unsigned int widthopt_;
0170 
0171   /**
0172    *  Number of times the width the Higgs is allowed to be off-shell
0173    */
0174   double offshell_;
0175 
0176   /**
0177    *  Particle properties extracted at initialization
0178    */
0179   //@{
0180   /**
0181    *  Mass of the W boson
0182    */
0183   Energy mw_;
0184 
0185   /**
0186    *  Mass of the Z boson
0187    */
0188   Energy mz_;
0189 
0190   /**
0191    *  Width of the W boson
0192    */
0193   Energy gamw_;
0194 
0195   /**
0196    *  Width of the Z boson
0197    */
0198   Energy gamz_;
0199 
0200   /**
0201    *  Masses of the quarks
0202    */
0203   vector<Energy> qmass_;
0204 
0205   /**
0206    *  Masses of the leptons
0207    */
0208   vector<Energy> lmass_;
0209 
0210   /**
0211    *  \f$\sin^2\theta_W\f$
0212    */
0213   double sw2_;
0214 
0215   /**
0216    *  The \f$C_A\f$ colour factor
0217    */
0218   double ca_;
0219 
0220   /**
0221    *  The \f$C_F\f$ colour factor
0222    */
0223   double cf_;
0224   //@}
0225 
0226   /**
0227    * Storage of parameters for speed
0228    */
0229   //@{
0230   /**
0231    *  The last scale
0232    */
0233   mutable Energy qlast_;
0234 
0235   /**
0236    *  \f$\Lambda_{\rm QCD}\f$
0237    */
0238   mutable Energy lambdaQCD_;
0239 
0240   /**
0241    *  The electromagnetic coupling
0242    */
0243   mutable double alphaEM_;
0244 
0245   /**
0246    *  The strong coupling
0247    */
0248   mutable double alphaS_;
0249 
0250   /**
0251    *  Correction factor for \f$H\to q\bar{q}\f$
0252    */
0253   mutable double cd_;
0254 
0255   /**
0256    *  Fermi constant
0257    */
0258   mutable Energy2 gfermiinv_;
0259 
0260   /**
0261    *  The anomalous dimension for  \f$H\to q\bar{q}\f$
0262    */
0263   mutable double gam0_;
0264 
0265   /**
0266    *  The \f$\beta\f$ function coefficient for  \f$H\to q\bar{q}\f$
0267    */
0268   mutable double beta0_;
0269   //@}
0270 
0271   /**
0272    *  Map between location in decay modes vector and code here
0273    */
0274   map<int,int> locMap_;
0275 };
0276 
0277 }
0278 
0279 #endif /* HERWIG_SMHiggsWidthGenerator_H */