Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef ACTIVE_FLAVORS_THRESHOLDS_MODULE_H
0002 #define ACTIVE_FLAVORS_THRESHOLDS_MODULE_H
0003 
0004 /**
0005  * @file ActiveFlavorsThresholdsModule.h
0006  * @author Bryan BERTHOU (SPhN / CEA Saclay)
0007  * @date August 07, 2015
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <map>
0013 #include <string>
0014 #include <vector>
0015 
0016 #include "../../beans/active_flavors_thresholds/ActiveFlavorsThresholds.h"
0017 #include "../../beans/automation/BaseObjectData.h"
0018 #include "../../ModuleObject.h"
0019 
0020 namespace PARTONS {
0021 
0022 /**
0023  * @class ActiveFlavorsThresholdsModule
0024  *
0025  * @brief Abstract class for modules defining number of quark flavors intervals.
0026  *
0027  * This class acts as an abstract (mother) class for modules that define the number of quark flavors intervals.
0028  * These intervals are used e.g. by the evolution modules to evaluate the number of active quark flavors for a given factorization scale squared.
0029  */
0030 class ActiveFlavorsThresholdsModule: public ModuleObject {
0031 
0032 public:
0033 
0034     /**
0035      * Type of module name used by the automatization.
0036      */
0037     static const std::string ACTIVE_FLAVORS_THRESHOLDS_MODULE_CLASS_NAME;
0038 
0039     /**
0040      * Constructor.
0041      * @param className Name of class.
0042      */
0043     ActiveFlavorsThresholdsModule(const std::string &className);
0044 
0045     /**
0046      * Destructor.
0047      */
0048     virtual ~ActiveFlavorsThresholdsModule();
0049 
0050     virtual ActiveFlavorsThresholdsModule* clone() const = 0;
0051     virtual void configure(const ElemUtils::Parameters &parameters);
0052     virtual void resolveObjectDependencies();
0053     virtual std::string toString() const;
0054     virtual void prepareSubModules(
0055             const std::map<std::string, BaseObjectData>& subModulesData);
0056 
0057     /**
0058      * Get interval for a specific value of the factorization scale squared.
0059      * @param Mu2 Factorization scale squared value.
0060      * @return Requested interval. If Mu2 is smaller than the lower bound of the first defined interval returns this interval. If Mu2 is larger than the upper bound of the last defined interval returns this interval.
0061      */
0062     ActiveFlavorsThresholds getNfInterval(double Mu2) const;
0063 
0064     /**
0065      * Get intervals for a specific range of the factorization scale squared.
0066      * @param Mu2Min Factorization scale squared minimum value.
0067      * @param Mu2Max Factorization scale squared maximum value.
0068      * @return If lowerBound > upperBound a single interval with the number of active flavors corresponding to lowerBound is returned. Otherwise, a vector containing intervals for the requested range of factorization scale.
0069      */
0070     std::vector<ActiveFlavorsThresholds> getNfIntervals(double Mu2Min, double Mu2Max) const;
0071 
0072     /**
0073      * Get intervals for the entire range of the factorization scale squared.
0074      */
0075     std::vector<ActiveFlavorsThresholds> getNfIntervals() const { return m_nfFunctionOfMu2; }
0076 
0077 protected:
0078 
0079     /**
0080      * Copy constructor.
0081      * @param other Object to be copied.
0082      */
0083     ActiveFlavorsThresholdsModule(const ActiveFlavorsThresholdsModule &other);
0084 
0085     virtual void isModuleWellConfigured();
0086     virtual void initModule();
0087 
0088     /**
0089      * Add a new interval.
0090      * @param nfValue Number of active quark flavors in the new interval.
0091      * @param lowerBound Lower bound of the new interval.
0092      * @param upperBound Upper bound of the new interval.
0093      */
0094     void addNfInterval(unsigned short nfValue, double lowerBound, double upperBound);
0095 
0096     /**
0097      * Reset vector containing defined integrals.
0098      */
0099     void reset();
0100 
0101 private:
0102 
0103     /**
0104      * Vector containing defined integrals.
0105      */
0106     std::vector<ActiveFlavorsThresholds> m_nfFunctionOfMu2;
0107 
0108     /**
0109      * Perform a set of test in order to check the consistency of defined integrals.
0110      */
0111     void checkCurveIntegrity();
0112 };
0113 
0114 } /* namespace PARTONS */
0115 
0116 #endif /* ACTIVE_FLAVORS_THRESHOLDS_MODULE_H */