Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef COLLINEAR_DISTRIBUTION_MODULE_H
0002 #define COLLINEAR_DISTRIBUTION_MODULE_H
0003 
0004 /**
0005  * @file CollinearDistributionModule.h
0006  * @author Valerio BERTONE (CEA Saclay)
0007  * @date July 18, 2020
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <map>
0013 #include <string>
0014 
0015 #include "../../beans/automation/BaseObjectData.h"
0016 #include "../../beans/collinear_distribution/CollinearDistributionType.h"
0017 #include "../../beans/List.h"
0018 #include "../../beans/parton_distribution/PartonDistribution.h"
0019 #include "../../ModuleObject.h"
0020 
0021 namespace PARTONS {
0022 
0023 class CollinearDistributionKinematic;
0024 class CollinearDistributionResult;
0025 class CollinearDistributionEvolutionModule;
0026 
0027 /**
0028  * @class CollinearDistributionModule
0029  * @brief Abstract class that provides a skeleton to implement a Generalized Parton Distributions (CollinearDistribution) module.
0030  *
0031  * It is best to use this module with the corresponding service: CollinearDistributionService (see examples therein), as explained in the [general tutorial](@ref usage).
0032  */
0033 class CollinearDistributionModule: public ModuleObject {
0034 
0035 public:
0036 
0037     static const std::string COLLINEAR_DISTRIBUTION_MODULE_CLASS_NAME; ///< Type of the module in XML automation.
0038 
0039     /**
0040      * Destructor.
0041      */
0042     virtual ~CollinearDistributionModule();
0043 
0044     virtual CollinearDistributionModule* clone() const = 0;
0045     virtual std::string toString() const;
0046     virtual void resolveObjectDependencies();
0047     virtual void run();
0048     void virtual configure(const ElemUtils::Parameters &parameters);
0049     virtual void prepareSubModules(const std::map<std::string, BaseObjectData>& subModulesData);
0050 
0051     /**
0052      * Virtual method, computes collinear distribution with some input parameters.
0053      *
0054      * @param kinematic collinear distribution kinematics object.
0055      * @param colldistType. See CollinearDistributionType for more details.
0056      * @param evolution Boolean to use evolution.
0057      *
0058      * @return PartonDistribution object.
0059      * Contains results for each flavor of partons.
0060      */
0061     virtual PartonDistribution compute(const CollinearDistributionKinematic &kinematic, CollinearDistributionType::Type colldistType);
0062 
0063     /**
0064      * Virtual method, computes collinear distribution with some input parameters.
0065      *
0066      * @param kinematic collinear distribution kinematics object.
0067      * @param colldistType. See CollinearDistributionType for more
0068      * details.
0069      *
0070      * @return PartonDistribution object.
0071      * Contains results for each flavor of partons.
0072      */
0073     virtual CollinearDistributionResult compute(const CollinearDistributionKinematic &kinematic,
0074             const List<CollinearDistributionType>& colldistType = List<CollinearDistributionType>());
0075 
0076     /**
0077      * Get list of available CollinearDistributionTypes in the model considered. This list is set in the child class.
0078      */
0079     List<CollinearDistributionType> getListOfAvailableCollinearDistributionTypeForComputation() const;
0080 
0081     // ##### IMPLEMENTATION FUNCTIONS #####
0082 
0083     /**
0084      * This method can be implemented in the child class if the collinear distribution H is available to compute.
0085      *
0086      * @return PartonDistribution object.
0087      * Contains results for each flavor of partons.
0088      */
0089     virtual PartonDistribution computeUnpolPDF();
0090     virtual PartonDistribution computePolPDF();
0091     virtual PartonDistribution computeTransPDF();
0092     virtual PartonDistribution computeUnpolFF();
0093     virtual PartonDistribution computePolFF();
0094     virtual PartonDistribution computeTransFF();
0095 
0096     // ##### GETTERS & SETTERS #####
0097 
0098     /**
0099      * Get reference factorization scale used by the collinear distribution model before evolution.
0100      */
0101     double getMuF2Ref() const;
0102 
0103     /**
0104      * Set underlying collinear distribution Evolution module.
0105      */
0106     const CollinearDistributionEvolutionModule* getEvolQcdModule() const;
0107 
0108     /**
0109      * Get  underlying collinear distribution Evolution module.
0110      */
0111     void setEvolQcdModule(CollinearDistributionEvolutionModule* pEvolQcdModule);
0112 
0113 protected:
0114 
0115     /**
0116      * Default constructor.
0117      */
0118     CollinearDistributionModule(const std::string &className);
0119 
0120     /**
0121      * Copy constructor.
0122      * @param other Object to be copied.
0123      */
0124     CollinearDistributionModule(const CollinearDistributionModule &other);
0125 
0126     /**
0127      * Set internal kinematics.
0128      * @param kinematic Kinematics to be set.
0129      */
0130     virtual void setKinematics(const CollinearDistributionKinematic& kinematic);
0131     virtual void initModule();
0132     virtual void isModuleWellConfigured();
0133 
0134     /**
0135      * List of collinear distribution types that can be computed by the child class.
0136      * Needs to be set in the constructor of the child class, with the corresponding methods to be used.
0137      */
0138     std::map<CollinearDistributionType::Type, PartonDistribution (CollinearDistributionModule::*)()> m_listCollinearDistributionComputeTypeAvailable;
0139 
0140     double m_x; ///< Longitudinal momentum fraction of the active parton.
0141     double m_MuF2; ///< Factorization scale squared.
0142     double m_MuR2; ///< Renormalization scale squared.
0143     double m_MuF2_ref; ///< Reference factorization scale used by the collinear model before evolution.
0144 
0145     CollinearDistributionEvolutionModule* m_pCollinearDistributionEvolutionModule; ///< Pointer to the underlying collinear distribution Evolution module.
0146 };
0147 
0148 } /* namespace PARTONS */
0149 
0150 #endif /* COLLINEAR_DISTRIBUTION_MODULE_H */