Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-02 08:51:48

0001 #ifndef RUNNING_ALPHA_STRONG_MODULE_H
0002 #define RUNNING_ALPHA_STRONG_MODULE_H
0003 
0004 /**
0005  * @file ModuleObject.h
0006  * @author Bryan BERTHOU (SPhN / CEA Saclay)
0007  * @date 02 April 2015
0008  * @version 1.0
0009  */
0010 
0011 #include <map>
0012 #include <string>
0013 
0014 #include "../../beans/automation/BaseObjectData.h"
0015 #include "../../ModuleObject.h"
0016 
0017 namespace PARTONS {
0018 
0019 /**
0020  * @class RunningAlphaStrongModule
0021  *
0022  * @brief Abstract class for modules evaluating QCD running coupling constant.
0023  *
0024  * This class acts as an abstract (mother) class for modules used in the evaluation of the QCD running coupling constant.
0025  * The usage of its derivatives is illustrated by the following example:
0026  \code{.cpp}
0027  //load one of RunningAlphaStrongModule modules with the BaseModuleFactory
0028  RunningAlphaStrongModule* pRunningAlphaStrongModule = Partons::getInstance()->getModuleObjectFactory()->newRunningAlphaStrongModule(RunningAlphaStrong::classId);
0029 
0030  //evaluate for given scale and print
0031  double muR2 = 10.;
0032 
0033  double alpha_s = pRunningAlphaStrongModule->compute(muR2);
0034 
0035  Partons::getInstance()->getLoggerManager()->info("example", __func__, ElemUtils::Formatter() << "alpha_s at muR2 = " << muR2 << " GeV2 is " << alpha_s);
0036  \endcode
0037  which gives via Logger:
0038  \code
0039  06-06-2017 02:25:55 [INFO] (example::main) alpha_s at muR2 = 10GeV2 is 0.250786275698706
0040  \endcode
0041  */
0042 class RunningAlphaStrongModule: public ModuleObject {
0043 
0044 public:
0045 
0046     /**
0047      * Type of module name used by the automatization.
0048      */
0049     static const std::string RUNNING_ALPHA_STRONG_MODULE_CLASS_NAME;
0050 
0051     /**
0052      * Constructor.
0053      * @param className Name of class.
0054      */
0055     RunningAlphaStrongModule(const std::string &className);
0056 
0057     /**
0058      * Destructor.
0059      */
0060     virtual ~RunningAlphaStrongModule();
0061 
0062     virtual RunningAlphaStrongModule* clone() const = 0;
0063     virtual std::string toString() const;
0064     virtual void resolveObjectDependencies();
0065     virtual void configure(const ElemUtils::Parameters &parameters);
0066     virtual void prepareSubModules(const std::map<std::string, BaseObjectData>& subModulesData);
0067 
0068     /**
0069      * Evaluate \f$\alpha_{s}\f$ for a given value of renormalization scale squared.
0070      * @param Mu2 Value of renormalization scale squared.
0071      * @return Evaluated value of \f$\alpha_{s}\f$.
0072      */
0073     double compute(double Mu2);
0074 
0075     //********************************************************
0076     //*** SETTERS AND GETTERS ********************************
0077     //********************************************************
0078 
0079     unsigned int getNf() const;
0080     void setNf(unsigned int nf);
0081 
0082 protected:
0083 
0084     /**
0085      * Copy constructor.
0086      *
0087      * @param other Object to be copied.
0088      */
0089     RunningAlphaStrongModule(const RunningAlphaStrongModule &other);
0090 
0091     /**
0092      * Do a pre-evaluation steps before the evaluation of \f$\alpha_{s}\f$.
0093      * @param Mu2 Value of renormalization scale squared.
0094      */
0095     void preCompute(const double Mu2);
0096 
0097     virtual void initModule();
0098     virtual void isModuleWellConfigured();
0099 
0100     /**
0101      * Check if previous kinematics is different than the actual one. This allows to avoid a reevaluation of \f$\alpha_{s}\f$ when the renormalization scale is not changed.
0102      * @param MuF2 Value of renormalization scale squared.
0103      * @return True if previous kiematics is different, otherwise false.
0104      */
0105     bool isPreviousKinematicsDifferent(const double MuF2) const;
0106 
0107     /**
0108      * Evaluate \f$\alpha_{s}\f$. The value of renormalization scale should be set at this point by RunningAlphaStrongModule::preCompute() function.
0109      * @return
0110      */
0111     virtual double compute() = 0;
0112 
0113     /**
0114      * Current renormalization scale squared (in \f$GeV^2\f$)
0115      */
0116     double m_Mu2;
0117 
0118     /**
0119      * Current renormalization scale (in \f$GeV\f$)
0120      */
0121     double m_Mu;
0122 
0123     /**
0124      * Number of active quark flavors.
0125      */
0126     unsigned int m_nf;
0127 
0128     /**
0129      * Value of \f$\alpha_{s}\f$ for the current renormalization scale.
0130      */
0131     double m_alphaS;
0132 };
0133 
0134 } /* namespace PARTONS */
0135 
0136 #endif /* RUNNING_ALPHA_STRONG_MODULE_H */