Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_HM18_H
0002 #define GPD_HM18_H
0003 
0004 /**
0005  * @file GPDHM18.h
0006  * @author Arkadiusz P. TrawiƄski (CEA)
0007  * @date July 2, 2018
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <string>
0013 #include <vector>
0014 
0015 #include "../MathIntegratorModule.h"
0016 #include "GPDModule.h"
0017 
0018 namespace PARTONS {
0019 
0020 /**
0021  * @class GPDHM18
0022  *
0023  * The proposition of the scalar di-quark model (SDQM) in the context
0024  * of GPDs back to the Jakob-Mulders-Rodrigues paper hep-ph/9704335
0025  * @cite Jakob:1997wg.
0026  *
0027  * Later, the model has been studied by Dae Sung Hwang and Dieter Mueller.
0028  * The short description of the GPDs derived from this model is given in
0029  * arXiv:0710.1567 @cite Hwang:2007tb. In the Ref. arXiv:1407.16655
0030  * @cite Muller:2014tqa full description is given.
0031  *
0032  * Available GPD types: H, Ht, E, Et.
0033  */
0034 
0035 class GPDHM18: public GPDModule, public MathIntegratorModule {
0036 public:
0037     static const std::string PARAMETER_NAME_HM18MODEL_M; ///< Name of parameter to set #m_M via configure()
0038     static const std::string PARAMETER_NAME_HM18MODEL_m; ///< Name of parameter to set #m_m via configure()
0039     static const std::string PARAMETER_NAME_HM18MODEL_lambda; ///< Name of parameter to set #m_lambda via configure()
0040     static const std::string PARAMETER_NAME_HM18MODEL_p; ///< Name of parameter to set #m_p via configure()
0041     /**
0042      * ID assigned by BaseObjectRegistry.
0043      */
0044     static const unsigned int classId;
0045     /**
0046      * Default constructor.
0047      * @param className Name of class.
0048      */
0049     GPDHM18(const std::string& className);
0050     /**
0051      * Destructor.
0052      */
0053     virtual ~GPDHM18();
0054     virtual GPDHM18* clone() const;
0055     virtual void resolveObjectDependencies();
0056     virtual void configure(const ElemUtils::Parameters &parameters);
0057 protected:
0058     /**
0059      * Copy constructor.
0060      * @param other Object to be copied.
0061      */
0062     GPDHM18(const GPDHM18& other);
0063     virtual void isModuleWellConfigured();
0064     virtual void initModule();
0065     virtual PartonDistribution computeH();
0066     virtual PartonDistribution computeHt();
0067     virtual PartonDistribution computeE();
0068     virtual PartonDistribution computeEt();
0069 
0070 private:
0071     double m_M; ///< Mass of the proton;
0072     double m_m; ///< Mass of the active quark.
0073     double m_lambda; ///< Mass of the spectator
0074     double m_p; ///< Parameter controlling the power.
0075     double m_N; ///< Normalization of the GPDs.
0076 
0077     /**
0078      * Function setting the normalization of the GPDs @param m_N
0079      * according to the Eq. (22) Ref. @cite Hwang:2007tb.     *
0080      */
0081     void Normalize();
0082 
0083     /**
0084      * Integral given in Eq. (22) Ref. @cite Hwang:2007tb.
0085      *
0086      * @param y
0087      * @param par optional parameters of integration, not used.
0088      * @return 1/m_N
0089      */
0090     double IntNorm(double y, std::vector<double> par);
0091     NumA::FunctionType1D* m_pint_IntNorm; ///< Functor related to IntNorm.
0092 
0093     /** %Double distribution function for GPD E. Definition can be found
0094      * in Eqs. (18) and (19) in Ref. @cite Hwang:2007tb.
0095      *
0096      * @param y %Double distribution parameter y.
0097      * @param z %Double distribution parameter z.
0098      * @param t %Double distribution parameter t.
0099      * @return GPD E
0100      */
0101     double DD_E(double y, double z, double t);
0102     double IntE(double y, std::vector<double> par); ///< Integrand of GPD E for xi <> 0.
0103     double IntE0(double z, std::vector<double> par); ///< Integrand of GPD E for xi == 0.
0104     NumA::FunctionType1D* m_pint_IntE; ///< Functor related to IntE.
0105     NumA::FunctionType1D* m_pint_IntE0; ///< Functor related to IntE0.
0106 
0107     /**
0108      * %Double distribution function for GPD H. Definition can be found
0109      * in Eqs. (21) and (19) in Ref. @cite Hwang:2007tb.
0110      *
0111      * @param y %Double distribution parameter y.
0112      * @param z %Double distribution parameter z.
0113      * @param t %Double distribution parameter t.
0114      * @return GPD H
0115      */
0116     double DD_H(double y, double z, double t);
0117     double IntH(double y, std::vector<double> par); ///< Integrand of GPD H for xi <> 0.
0118     double IntH0(double z, std::vector<double> par); ///< Integrand of GPD H for xi == 0.
0119     NumA::FunctionType1D* m_pint_IntH; ///< Functor related to IntH.
0120     NumA::FunctionType1D* m_pint_IntH0; ///< Functor related to IntH0.
0121 
0122     /**
0123      * %Double distribution function for GPD Ht. Definition can be found
0124      * in Eqs. (4.23) and (4.26) in Ref. @cite Muller:2014tqa.
0125      *
0126      * @param y %Double distribution parameter y.
0127      * @param z %Double distribution parameter z.
0128      * @param t %Double distribution parameter t.
0129      * @return GPD Ht
0130      */
0131     double DD_Ht(double y, double z, double t);
0132     double IntHt(double y, std::vector<double> par); ///< Integrand of GPD Ht for xi <> 0.
0133     double IntHt0(double z, std::vector<double> par); ///< Integrad of GPD Ht for xi == 0.
0134     NumA::FunctionType1D* m_pint_IntHt; ///< Functor related to IntHt.
0135     NumA::FunctionType1D* m_pint_IntHt0; ///< Functor related to IntHt0.
0136 
0137     /** %Double distribution function for GPD Et. Definition can be found
0138      * in Eqs. (4.23) and (4.27) in Ref. @cite Muller:2014tqa.
0139      *
0140      * @param y %Double distribution parameter y.
0141      * @param z %Double distribution parameter z.
0142      * @param t %Double distribution parameter t.
0143      * @return GPD Et
0144      */
0145 
0146     double DD_Et(double y, double z, double t);
0147     double IntEt(double y, std::vector<double> par); ///< Integrand of GPD Et for xi <> 0.
0148     NumA::FunctionType1D* m_pint_IntEt; ///< Functor related to IntE for xi <> 0.
0149 
0150     /**
0151      * Evaluates GPDs using %double distribution function
0152      * by integrating p_fun0 or p_fun function depending on kinematics.
0153      *
0154      * @param x
0155      * @param p_fun0 integrate this function if xi == 0
0156      * @param p_fun  integrate this function if xi <> 0
0157      * @return computed GPD
0158      */
0159     double evaluate(double x, NumA::FunctionType1D* p_fun0,
0160             NumA::FunctionType1D* p_fun);
0161 
0162     /**
0163      * Computes GPDs using GPDHM18::evaluate function
0164      * and creates appropriate parton distributions.
0165      *
0166      * @param p_fun0 integrate this function if xi == 0
0167      * @param p_fun integrate this function if xi <> 0
0168      * @return parton distributions
0169      */
0170     PartonDistribution compute(NumA::FunctionType1D* p_fun0,
0171             NumA::FunctionType1D* p_fun);
0172 
0173     void initializeFunctorsForIntegrations(); ///< Initialize functors.
0174     void deleteFunctorsForIntegrations(); ///< Delete functors.
0175 
0176 };
0177 
0178 } /* namespace PARTONS */
0179 
0180 #endif /* GPD_HM18_H */