Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_MMS13_H
0002 #define GPD_MMS13_H
0003 
0004 /**
0005  * @file GPDMMS13.h
0006  * @author Pawel Sznajder (IPNO)
0007  * @date March 29, 2015
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <string>
0013 #include <vector>
0014 
0015 #include "../../beans/QuarkFlavor.h"
0016 #include "../MathIntegratorModule.h"
0017 #include "GPDModule.h"
0018 
0019 namespace PARTONS {
0020 
0021 /**
0022  * @class GPDMMS13
0023  *
0024  * Mezrag-Moutarde-SabatiƩ GPD model. For the reference, see arxiv:1304.7645 @cite Mezrag:2013mya.
0025  *
0026  * Available GPD types: H, E.
0027  */
0028 class GPDMMS13: public GPDModule, public MathIntegratorModule {
0029 
0030 public:
0031 
0032     static const std::string PARAMETER_NAME_MMS13MODEL_NHpE; ///< Name of parameter to set #m_NHpE via configure()
0033     static const std::string PARAMETER_NAME_MMS13MODEL_NE; ///< Name of parameter to set #m_NE via configure()
0034     static const std::string PARAMETER_NAME_MMS13MODEL_C; ///< Name of parameter to set #m_C via configure()
0035 
0036     static const unsigned int classId;    ///< ID assigned by BaseObjectRegistry
0037 
0038     /**
0039      * Constructor.
0040      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0041      *
0042      * @param className name of child class.
0043      */
0044     GPDMMS13(const std::string &className);
0045 
0046     /**
0047      * Default destructor.
0048      */
0049     virtual ~GPDMMS13();
0050     virtual GPDMMS13* clone() const;
0051     virtual void resolveObjectDependencies();
0052     virtual void configure(const ElemUtils::Parameters &parameters);
0053     virtual std::string toString() const;
0054 
0055     /** D term function.
0056      @param zeta Variable equals x/xi.
0057      */
0058     double DTerm(double zeta) const;
0059 
0060 protected:
0061 
0062     /** Copy constructor.
0063      @param other Object to be copied.
0064      */
0065     GPDMMS13(const GPDMMS13& other);
0066 
0067     virtual void isModuleWellConfigured();
0068     virtual void initModule();
0069 
0070     virtual PartonDistribution computeH();
0071     virtual PartonDistribution computeE();
0072 
0073 private:
0074 
0075     int m_NHpE; ///< %Double distribution profile function parameter for H_DD + E_DD.
0076     int m_NE; ///< %Double distribution profile function parameter for E+.
0077     double m_C; ///< Scaling parameter for D term.
0078 
0079     /** Forward limit of GPD H.
0080      @param beta %Double distribution parameter.
0081      @param flavor Quark flavor.
0082      */
0083     double forwardHval(double beta, QuarkFlavor::Type flavor) const;
0084 
0085     /** Forward limit of GPD E.
0086      @param beta %Double distribution parameter.
0087      @param flavor Quark flavor.
0088      */
0089     double forwardEval(double beta, QuarkFlavor::Type flavor) const;
0090 
0091     /** Functional form of forward limit of GPD E.
0092      @param beta %Double distribution parameter.
0093      @param kappa Anomalous magnetic moment.
0094      @param nu power for (1 - beta)^nu term.
0095      @param mu power for beta^-mu term.
0096      */
0097     double forwardEvalFunction(double beta, double kappa, double nu,
0098             double mu) const;
0099 
0100     /** %Double distribution profile function.
0101      @param beta, alpha %Double distribution variables.
0102      @param N Profile parameter.
0103      */
0104     double profileFunction(double beta, double alpha, int N);
0105 
0106     /** H_DD + E_DD component.
0107      @param x GPD variable.
0108      @param flavor Quark flavor.
0109      @param N Profile parameter.
0110      */
0111     double HpEDDVal(double x, QuarkFlavor::Type flavor, int N);
0112 
0113     /** %Double distribution function for H_DD + E_DD component ((x-beta)/xi-alpha = 0 line).
0114      @param beta %Double distribution variable.
0115      @param par Additional parameters.
0116      */
0117     double IntHpEDDval(double beta, std::vector<double> par);
0118 
0119     /** E+ component.
0120      @param x GPD variable.
0121      @param flavor Quark flavor.
0122      @param N Profile parameter.
0123      */
0124     double EValPlus(double x, QuarkFlavor::Type flavor, int N);
0125 
0126     /** %Double distribution function for E+ component ((x-beta)/xi-alpha = 0 and x-alpha*xi lines).
0127      @param alpha %Double distribution variable.
0128      @param par Additional parameters.
0129      */
0130     double IntEvalPlusAB(double alpha, std::vector<double> par);
0131 
0132     /** %Double distribution function for E+ component ((x-beta)/xi-alpha = 0 line).
0133      @param alpha %Double distribution variable.
0134      @param par Additional parameters.
0135      */
0136     double IntEvalPlusA(double alpha, std::vector<double> par);
0137 
0138     /** %Double distribution function for E+ component (x/xi-alpha = 0 line).
0139      @param alpha %Double distribution variable.
0140      @param par Additional parameters.
0141      */
0142     double IntEvalPlusB(double alpha, std::vector<double> par);
0143 
0144     NumA::FunctionType1D* m_pint_IntHpEDDval; ///< Functor related to  IntHpEDDval().
0145     NumA::FunctionType1D* m_pint_IntEvalPlusAB; ///< Functor related to IntEvalPlusAB().
0146     NumA::FunctionType1D* m_pint_IntEvalPlusA; ///< Functor related to IntEvalPlusA().
0147     NumA::FunctionType1D* m_pint_IntEvalPlusB; ///< Functor related to IntEvalPlusB().
0148 
0149     /** Initialize functors.
0150      */
0151     void initFunctorsForIntegrations();
0152 };
0153 
0154 } /* namespace PARTONS */
0155 
0156 #endif /* GPD_MMS13_H */