Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // O2AlphaS.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_O2AlphaS_H
0010 #define HERWIG_O2AlphaS_H
0011 //
0012 // This is the declaration of the O2AlphaS class.
0013 //
0014 
0015 #include "ThePEG/StandardModel/AlphaSBase.h"
0016 
0017 namespace Herwig {
0018 
0019 using namespace ThePEG;
0020 
0021 /**
0022  * The O2AlphaS class is the implementation of the two-loop
0023  * \f$\alpha_S\f$ in the same way as in FORTRAN HERWIG.
0024  *
0025  *  The input value of \f$\Lambda_{\rm QCD}\f$ is in the \f$\bar{MS}\f$
0026  *  scheme and can either be converted to a Monte Carlo scheme, as in the 
0027  *  FORTRAN program, or left in the \f$\bar{MS}\f$ scheme to evaluate
0028  *  the running coupling 
0029  *
0030  * @see \ref O2AlphaSInterfaces "The interfaces"
0031  * defined for O2AlphaS.
0032  */
0033 class O2AlphaS: public AlphaSBase {
0034 
0035 public:
0036 
0037   /**
0038    * The default constructor.
0039    */
0040   O2AlphaS() : _lambdaQCD(180.*MeV), _bcoeff(6,0.0), _ccoeff(6,0.0),
0041            _lambdas(7), _threshold(6), _match(6,0.0), _copt(0) {}
0042 
0043   /** @name Virtual functions to override those in the base class */
0044   //@{
0045   /**
0046    * The \f$\alpha_S\f$. Return the QCD coupling for a given \a scale
0047    * using the given standard model object \a sm.
0048    */
0049   virtual double value(Energy2 scale, const StandardModelBase & sm) const;
0050 
0051   /**
0052    * Return the flavour thresholds used. The returned vector contains
0053    * (in position <code>i</code>) the scales when the active number of
0054    * flavours changes from <code>i</code> to <code>i+1</code>.
0055    */
0056   virtual vector<Energy2> flavourThresholds() const;
0057 
0058   /**
0059    * Return the \f$\Lambda_{QCD}\f$ used for different numbers of
0060    * active flavours.
0061    */
0062   virtual vector<Energy> LambdaQCDs() const;
0063   //@}
0064 
0065 public:
0066 
0067   /** @name Functions used by the persistent I/O system. */
0068   //@{
0069   /**
0070    * Function used to write out object persistently.
0071    * @param os the persistent output stream written to.
0072    */
0073   void persistentOutput(PersistentOStream & os) const;
0074 
0075   /**
0076    * Function used to read in object persistently.
0077    * @param is the persistent input stream read from.
0078    * @param version the version number of the object when written.
0079    */
0080   void persistentInput(PersistentIStream & is, int version);
0081   //@}
0082 
0083   /**
0084    * The standard Init function used to initialize the interfaces.
0085    * Called exactly once for each class by the class description system
0086    * before the main function starts or
0087    * when this class is dynamically loaded.
0088    */
0089   static void Init();
0090 
0091 protected:
0092 
0093   /** @name Clone Methods. */
0094   //@{
0095   /**
0096    * Make a simple clone of this object.
0097    * @return a pointer to the new object.
0098    */
0099   virtual IBPtr clone() const {return new_ptr(*this);}
0100 
0101   /** Make a clone of this object, possibly modifying the cloned object
0102    * to make it sane.
0103    * @return a pointer to the new object.
0104    */
0105   virtual IBPtr fullclone() const {return new_ptr(*this);}
0106   //@}
0107 
0108 
0109 protected:
0110 
0111   /** @name Standard Interfaced functions. */
0112   //@{
0113   /**
0114    * Initialize this object after the setup phase before saving an
0115    * EventGenerator to disk.
0116    * @throws InitException if object could not be initialized properly.
0117    */
0118   virtual void doinit();
0119   //@}
0120 
0121 
0122 private:
0123 
0124   /**
0125    * The assignment operator is private and must never be called.
0126    * In fact, it should not even be implemented.
0127    */
0128   O2AlphaS & operator=(const O2AlphaS &) = delete;
0129 
0130 private:
0131 
0132   /**
0133    *  The value of \f$\Lambda_{\rm QCD}\f$ 5-flavours
0134    *  in the \f$\bar{\rm MS}\f$ scheme
0135    */
0136   Energy _lambdaQCD;
0137 
0138   /**
0139    *  The values of the leading-order \f$\beta\f$-function coefficients
0140    */
0141   vector<double> _bcoeff;
0142 
0143   /**
0144    *  The values of the next-to-leading-order \f$\beta\f$-function coefficients
0145    */
0146   vector<double> _ccoeff;
0147 
0148   /**
0149    *  The values of \f$\Lambda_{\rm QCD}\f$ for the diffferent number of flavours
0150    */
0151   vector<Energy> _lambdas;
0152 
0153   /**
0154    *  The flavour thresholds
0155    */
0156   vector<Energy> _threshold;
0157   
0158   /**
0159    *  The constants for matching
0160    */
0161   vector<double> _match;
0162   /**
0163    *  Option for the coupling
0164    */
0165   unsigned int _copt;
0166 };
0167 
0168 }
0169 
0170 #endif /* HERWIG_O2AlphaS_H */