Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /**

0002  * @file RunningAlphaStrongApfel.h

0003  * @author Valerio Bertone (CEA Saclay)

0004  * @date June 2nd, 2020.

0005  * @version 1.0

0006  */
0007 
0008 #ifndef RUNNING_ALPHA_STRONG_APFEL_H
0009 #define RUNNING_ALPHA_STRONG_APFEL_H
0010 
0011 #include "RunningAlphaStrongModule.h"
0012 #include "../../beans/PerturbativeQCDOrderType.h"
0013 
0014 #include <vector>
0015 #include <functional>
0016 
0017 namespace PARTONS {
0018 
0019 /*

0020  * \class RunningAlphaStrongApfel

0021  * 

0022  * \brief Evaluation of the strong running coupling constant in the

0023  * \f$\overline{MS}\f$ scheme through APFEL++.

0024  *

0025  * This module evaluates the strong running coupling constant in the

0026  * \f$\overline{MS}\f$ scheme. It takes the value of \f$Q_{\rm ref}\f$

0027  * and \f$\alpha(Q_{\rm ref})\f$, and quark masses as inputs and

0028  * calls APFEL++ to compute the evolution.

0029  *

0030  */
0031 class RunningAlphaStrongApfel: public RunningAlphaStrongModule {
0032 
0033 public:
0034 
0035     /**

0036      * Settable parameters

0037      */
0038     static const std::string PARAM_NAME_ALPHAS_REF;
0039     static const std::string PARAM_NAME_MU_REF;
0040 
0041     static const std::string PARAM_NAME_THRESHOLDS;
0042 
0043     static const std::string PARAM_NAME_TAB_NODES;
0044     static const std::string PARAM_NAME_TAB_LOWER_BOUND;
0045     static const std::string PARAM_NAME_TAB_UPPER_BOUND;
0046     static const std::string PARAM_NAME_TAB_INTER_DEGREE;
0047 
0048     /**

0049      * Unique ID to automatically register the class in the registry.

0050      */
0051     static const unsigned int classId;
0052 
0053     /**

0054      * Constructor.

0055      * @param className Name of class.

0056      */
0057     RunningAlphaStrongApfel(const std::string &className);
0058 
0059     /**

0060      * Destructor.

0061      */
0062     virtual ~RunningAlphaStrongApfel();
0063     virtual RunningAlphaStrongApfel* clone() const;
0064     virtual void configure(const ElemUtils::Parameters &parameters);
0065     virtual double compute();
0066 
0067     // ##### GETTERS & SETTERS #####

0068 
0069     void setPertOrder(const PerturbativeQCDOrderType::Type& pertOrder);
0070     void setAlphasRef(const double& alphasRef);
0071     void setMuRef(const double& muRef);
0072 
0073     void setThresholds(const std::vector<double>& thresholds);
0074 
0075     void setTabNodes(const int& tabNodes);
0076     void setTabLowerBound(const double& tabLowerBound);
0077     void setTabUpperBound(const double& tabUpperBound);
0078     void setTabInterDegree(const int& tabInterDegree);
0079 
0080     PerturbativeQCDOrderType::Type getPertOrder() const;
0081     double getAlphasRef() const;
0082     double getMuRef() const;
0083 
0084     std::vector<double> getThresholds() const;
0085 
0086     int getTabNodes() const;
0087     double getTabLowerBound() const;
0088     double getTabUpperBound() const;
0089     int getTabInterDegree() const;
0090 
0091 protected:
0092 
0093     /**

0094      * Copy constructor.

0095      * @param other Object to be copied.

0096      */
0097     RunningAlphaStrongApfel(const RunningAlphaStrongApfel &other);
0098 
0099     virtual void initModule();
0100     virtual void isModuleWellConfigured();
0101 
0102 private:
0103 
0104     PerturbativeQCDOrderType::Type m_pertOrder;
0105     double m_alphasRef;
0106     double m_muRef;
0107     std::vector<double> m_thresholds;
0108     int m_tabNodes;
0109     double m_tabLowerBound;
0110     double m_tabUpperBound;
0111     int m_tabInterDegree;
0112 
0113     void setAlphasFunc(const std::function<double(double const&)>& alphasFunc);
0114     std::function<double(double const&)> getAlphasFunc() const;
0115     std::function<double(double const&)> m_alphasFunc;
0116 };
0117 
0118 } /* namespace PARTONS */
0119 
0120 #endif /* RUNNING_ALPHA_STRONG_APFEL_H */
0121