Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef COLLINEAR_DISTRIBUTION_EVOLUTION_APFEL_H
0002 #define COLLINEAR_DISTRIBUTION_EVOLUTION_APFEL_H
0003 
0004 /**
0005  * @file CollinearDistributionEvolutionApfel.h
0006  * @author Valerio BERTONE (CEA Saclay)
0007  * @date July 27, 2020
0008  * @version 1.0
0009  */
0010 
0011 #include "CollinearDistributionEvolutionModule.h"
0012 #include "../../../../../include/partons/modules/collinear_distribution/CollinearDistributionModule.h"
0013 #include "../../active_flavors_thresholds/ActiveFlavorsThresholdsModule.h"
0014 
0015 #include <apfel/apfelxx.h>
0016 
0017 namespace PARTONS {
0018 
0019 class RunningAlphaStrongModule;
0020 
0021 /**
0022  * @class CollinearDistributionEvolutionApfel
0023  */
0024 class CollinearDistributionEvolutionApfel: public CollinearDistributionEvolutionModule {
0025 
0026 public:
0027 
0028     /**
0029      * Settable parameters
0030      */
0031     static const std::string PARAM_NAME_SUBGRID_NODES;
0032     static const std::string PARAM_NAME_SUBGRID_LOWER_BOUNDS;
0033     static const std::string PARAM_NAME_SUBGRID_INTER_DEGREES;
0034 
0035     /**
0036      * Unique ID to automatically register the class in the registry.
0037      */
0038     static const unsigned int classId;
0039 
0040     /**
0041      * Constructor.
0042      * @param className Name of class.
0043      */
0044     CollinearDistributionEvolutionApfel(const std::string &className);
0045 
0046     /**
0047      * Destructor.
0048      */
0049     virtual ~CollinearDistributionEvolutionApfel();
0050 
0051     virtual CollinearDistributionEvolutionApfel* clone() const;
0052     virtual std::string toString() const;
0053     virtual void resolveObjectDependencies();
0054     virtual void configure(const ElemUtils::Parameters &parameters);
0055     virtual void prepareSubModules(
0056             const std::map<std::string, BaseObjectData>& subModulesData);
0057 
0058     // ##### GETTERS & SETTERS #####
0059 
0060     void setSubgridNodes(const std::vector<int>& subgridNodes);
0061     void setSubgridLowerBounds(const std::vector<double>& subgridLowerBounds);
0062     void setSubgridInterDegrees(const std::vector<int>& subgridInterDegrees);
0063 
0064     std::vector<int> getSubgridNodes() const;
0065     std::vector<double> getSubgridLowerBounds() const;
0066     std::vector<int> getSubgridInterDegrees() const;
0067 
0068     virtual void setRunningAlphaStrongModule(RunningAlphaStrongModule* runningAlphaStrongModule);
0069 
0070 protected:
0071 
0072     /**
0073      * Copy constructor.
0074      * @param other Object to be copied.
0075      */
0076     CollinearDistributionEvolutionApfel(
0077             const CollinearDistributionEvolutionApfel &other);
0078 
0079     virtual void initModule();
0080     virtual void isModuleWellConfigured();
0081 
0082     virtual PartonDistribution compute(
0083             CollinearDistributionModule* pCollinearDistributionModule);
0084 
0085     std::function<std::map<int, double>(double const&, double const&)> initialScaleDistributions(
0086             CollinearDistributionModule* pCollinearDistributionModule);
0087 
0088 private:
0089 
0090     std::vector<int> m_subgridNodes;
0091     std::vector<double> m_subgridLowerBounds;
0092     std::vector<int> m_subgridInterDegrees;
0093     std::shared_ptr<apfel::Grid> m_grid;
0094     std::map<int, apfel::DglapObjects> m_dglapobj;
0095 
0096     bool m_setApfelTables;  ///< Switch used to generate Apfel tables.
0097 };
0098 
0099 } /* namespace PARTONS */
0100 
0101 #endif /* COLLINEAR_DISTRIBUTION_EVOLUTION_APFEL_H */