Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // ShowerAlpha.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_ShowerAlpha_H
0010 #define HERWIG_ShowerAlpha_H
0011 //
0012 // This is the declaration of the ShowerAlpha class.
0013 //
0014 
0015 #include "ThePEG/Interface/Interfaced.h"
0016 #include "ShowerAlpha.fh"
0017 
0018 namespace Herwig {
0019 
0020 using namespace ThePEG;
0021 
0022 /**  \ingroup Shower
0023  * 
0024  *  This class is the abstract class from which all types of running couplings 
0025  *  used in the Showering derive from.
0026  *  The main purpose of this class, and the ones that derive from it, is
0027  *  to allow systematic uncertainties for the initial-state radiation and,
0028  *  independently, the final-state radiation effects, to be evaluated.
0029  *
0030  *  This is achieved by allowing a multiplicative factor,
0031  *  which is 1.0 for the "central value",
0032  *  for the scale argument, \f$\mu^2\f$, of the running coupling. This
0033  *  factor, \f$f\f$ is given by the scaleFactor() member and the coupling
0034  *  returned by the value() member is such that
0035  * \f[\alpha(\mu^2)\to \alpha(f\times\mu^2).\f]
0036  *  This scale factor is a parameter which is settable by the user, via the
0037  * interface. 
0038  *  Although, of course, it is not clear my how much we should scale
0039  *  in order to get a \f$1\sigma\f$ systematic error (but factors:
0040  *  1/2 and 2 are quite common), this method provides a double side error,
0041  *  and it appears more sensible than the rough and one-sided evaluation
0042  *  obtained
0043  *  via turning off the I.S.R. and/or F.S.R. (possibilities which are,
0044  *  anyway, provided by Herwig). 
0045  *
0046  * @see \ref ShowerAlphaInterfaces "The interfaces"
0047  * defined for ShowerAlpha.
0048  */
0049 class ShowerAlpha: public Interfaced {
0050 
0051 public:
0052 
0053   /** @name Standard constructors and destructors. */
0054   //@{
0055   /**
0056    * The default constructor.
0057    */
0058   ShowerAlpha() : _scaleFactor( 1.0 ) {}
0059   //@}
0060 
0061 public:
0062 
0063   /**
0064    *  Methods to return the coupling and the scaleFactor
0065    */
0066   //@{
0067   /**
0068    * Pure virtual method that is supposed to return the 
0069    * running alpha value evaluated at the input scale.
0070    * @param scale The scale
0071    * @return The coupling
0072    */
0073   virtual double value(const Energy2 scale) const = 0;
0074 
0075   /**
0076    * Virtual method, which 
0077    * should be overridden in a derived class to provide an 
0078    * overestimate approximation of the alpha value. 
0079    */
0080   virtual double overestimateValue() const = 0;
0081 
0082   /**
0083    *  Virtual method which returns the ratio of the running alpha
0084    * value at the input scale to the overestimated value.
0085    * @param scale The scale
0086    * @return The ratio
0087    */
0088   virtual double ratio(const Energy2 scale,double factor=1.) const = 0;
0089 
0090   /**
0091    * It returns the factor that multiplies the 
0092    * scale argument, \f$\mu^2\f$, of the running coupling.
0093    * This is supposed to be <I>1.0</I> in normal conditions (central values) 
0094    * whereas different values can be useful for systematics evaluation 
0095    * for Initial State radiation or Final State radiation effects.
0096    */
0097   double scaleFactor() const {return _scaleFactor;}
0098 
0099   /**
0100    * Virtual method that is supposed to return the 
0101    * running alpha value evaluated at the input scale.
0102    * @param scale The scale
0103    * @return The coupling
0104    */
0105   virtual inline double showerValue(const Energy2 scale) const {
0106     return value(scale);
0107   }
0108  
0109   /**
0110    * Virtual method, which 
0111    * should be overridden in a derived class to provide an 
0112    * overestimate approximation of the alpha value. 
0113    */
0114   virtual inline double showerOverestimateValue() const {
0115     return overestimateValue();
0116   }
0117  
0118   /**
0119    *  Virtual method which returns the ratio of the running alpha
0120    * value at the input scale to the overestimated value.
0121    * @param scale The scale
0122    * @return The ratio
0123    */
0124   virtual inline double showerRatio(const Energy2 scale,double factor=1.) const {
0125     return ratio(scale,factor);
0126   }
0127 
0128   /**
0129    * Initialize this coupling.
0130    */
0131   virtual void initialize () {}
0132   //@}
0133 
0134 public:
0135 
0136   /** @name Functions used by the persistent I/O system. */
0137   //@{
0138   /**
0139    * Function used to write out object persistently.
0140    * @param os the persistent output stream written to.
0141    */
0142   void persistentOutput(PersistentOStream & os) const;
0143 
0144   /**
0145    * Function used to read in object persistently.
0146    * @param is the persistent input stream read from.
0147    * @param version the version number of the object when written.
0148    */
0149   void persistentInput(PersistentIStream & is, int version);
0150   //@}
0151 
0152   /**
0153    * The standard Init function used to initialize the interfaces.
0154    * Called exactly once for each class by the class description system
0155    * before the main function starts or
0156    * when this class is dynamically loaded.
0157    */
0158   static void Init();
0159 
0160 private:
0161 
0162   /**
0163    * The assignment operator is private and must never be called.
0164    * In fact, it should not even be implemented.
0165    */
0166   ShowerAlpha & operator=(const ShowerAlpha &) = delete;
0167 
0168 private:
0169 
0170   /**
0171    *  The scale factor
0172    */
0173   double _scaleFactor;
0174 
0175 };
0176 
0177 }
0178 
0179 #endif /* HERWIG_ShowerAlpha_H */