Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_MPSSW13_H
0002 #define GPD_MPSSW13_H
0003 
0004 /**
0005  * @file GPDMPSSW13.h
0006  * @author Herve Moutarde (CEA/Irfu, Saclay)
0007  * @date November 11, 2014
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <string>
0013 #include <vector>
0014 #include <LHAPDF/LHAPDF.h>
0015 
0016 #include "../MathIntegratorModule.h"
0017 #include "GPDModule.h"
0018 
0019 namespace NumA {
0020 class FunctionType1D;
0021 } /* namespace NumA */
0022 
0023 namespace PARTONS {
0024 
0025 /**
0026  * @class GPDMPSSW13
0027  *
0028  * Module based on the original code (TBDP class) received from H.\ Moutarde as a private communication.
0029  *
0030  * For the reference, see arxiv:1301.3819 @cite Moutarde:2013qs.
0031  *
0032  * Available GPD types: H.
0033  */
0034 class GPDMPSSW13: public GPDModule, public MathIntegratorModule {
0035 
0036 public:
0037 
0038     static const std::string PARAM_NAME_SET_NAME;
0039     static const std::string PARAM_NAME_MEMBER;
0040 
0041     static const unsigned int classId; ///< ID assigned by BaseObjectRegistry.
0042 
0043     /**
0044      * Constructor.
0045      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0046      *
0047      * @param className name of child class.
0048      */
0049     GPDMPSSW13(const std::string &className);
0050 
0051     /**
0052      * Default constructor.
0053      */
0054     virtual ~GPDMPSSW13();
0055     virtual GPDMPSSW13* clone() const;
0056     virtual void resolveObjectDependencies();
0057     virtual void configure(const ElemUtils::Parameters &parameters);
0058 
0059     std::string getSetName() const;
0060     int getMember() const;
0061 
0062     void setSetName(const std::string &setname);
0063     void setMember(const int &member);
0064 
0065     //TODO no toString
0066     void setParameters(std::vector<double> Parameters);
0067 
0068     unsigned int getNbOfQuarkFlavor() const; ///< Get #m_NbOfQuarkFlavor.
0069     unsigned int getNbOfColor() const; ///< Get #m_NbOfColor.
0070     double getMx() const; ///< Get #m_Mx.
0071     double getCA() const; ///< Get #m_CA.
0072     double getCF() const; ///< Get #m_CF.
0073     double getTF() const; ///< Get #m_TF.
0074     double getF1d() const; ///< Get #m_F1u.
0075     double getF1u() const; ///< Get #m_F1d.
0076     double getFD() const; ///< Get #m_FD.
0077     double getProfileShapeVal() const; ///< Get #m_ProfileShapeVal.
0078     double getProfileShapeSea() const; ///< Get #m_ProfileShapeSea.
0079     double getProfileShapeGlue() const; ///< Get #m_ProfileShapeGlue.
0080     double getQuarkDTerm() const; ///< Get #m_QuarkDTerm.
0081     double getGluonDTerm() const; ///< Get #m_GluonDTerm.
0082     void setGluonDTerm(double gluonDTerm); //TODO why?
0083 
0084 protected:
0085 
0086     /** Copy constructor
0087      @param other Object to be copied
0088      */
0089     GPDMPSSW13(const GPDMPSSW13& other);
0090 
0091     //TODO private isModuleWellConfigured?
0092     //TODO private initModule?
0093     //TODO private computeH?
0094 
0095 private:
0096 
0097     virtual void isModuleWellConfigured();
0098     virtual void initModule();
0099     virtual PartonDistribution computeH();
0100 
0101     unsigned int m_NbOfQuarkFlavor; ///< TO BE REMOVED? (is it defined here?)
0102     unsigned int m_NbOfColor; ///< Number of colors.
0103 
0104     double m_Mx; ///< Negative value of x.
0105 
0106     double m_CA; ///< Number of active quark flavors.
0107     double m_CF; ///< Color factor.
0108     double m_TF; ///< SU(3) color factor.
0109 
0110     double m_F1u; ///< Contribution of quarks u to Pauli n and p form factors.
0111     double m_F1d; ///< Contribution of quarks d to Pauli n and p form factors.
0112     double m_FD; ///< Dipole form factor.
0113 
0114     double m_ProfileShapeVal; ///< %Double distribution profile parameter for valence quarks.
0115     double m_ProfileShapeSea; ///< %Double distribution profile parameter for sea quarks.
0116     double m_ProfileShapeGlue; ///< %Double distribution profile parameter for gluons.
0117 
0118     double m_QuarkDTerm; ///< Value of D term for quarks.
0119     double m_GluonDTerm; ///< Value of D term for gluons.
0120 
0121     std::string m_setName;
0122     int m_member;
0123     LHAPDF::PDF* m_Forward;
0124 
0125     /** Compute D terms.
0126      */
0127     void ComputeDTerms();
0128 
0129     /** Compute form factors.
0130      */
0131     void ComputeFormFactors();
0132 
0133     /** %Double distribution profile function.
0134      @param N Profile parameter.
0135      @param alpha, beta %Double distribution variables.
0136      */
0137     double Profile(double N, double alpha, double beta);
0138 
0139     /** %Double distribution ansatz for quarks uVal and x.
0140      @param x %Double distribution variable.
0141      @param Par Additional parameters (not used).
0142      */
0143     double IntegralHuVal(double x, std::vector<double> Par);
0144 
0145     /** %Double distribution ansatz for quarks uVal and -x.
0146      @param x %Double distribution variable.
0147      @param Par Additional parameters (not used).
0148      */
0149     double IntegralHuValMx(double x, std::vector<double> Par);
0150 
0151     /** %Double distribution ansatz for quarks uSea and x and |x| > xi.
0152      @param x %Double distribution variable.
0153      @param Par Additional parameters (not used).
0154      */
0155     double IntegralxLargeHuSea(double x, std::vector<double> Par);
0156 
0157     /** %Double distribution ansatz for quarks uSea and -x and |x| > xi.
0158      @param x %Double distribution variable.
0159      @param Par Additional parameters (not used).
0160      */
0161     double IntegralxLargeHuSeaMx(double x, std::vector<double> Par);
0162 
0163     /** %Double distribution ansatz for quarks uSea and x and |x| < xi (part 1).
0164      @param x %Double distribution variable.
0165      @param Par Additional parameters (not used).
0166      */
0167     double IntegralxSmall1HuSea(double x, std::vector<double> Par);
0168 
0169     /** %Double distribution ansatz for quarks uSea and x and |x| < xi  (part 2).
0170      @param x %Double distribution variable.
0171      @param Par Additional parameters (not used).
0172      */
0173     double IntegralxSmall2HuSea(double x, std::vector<double> Par);
0174 
0175     /** %Double distribution ansatz for quarks dVal and x.
0176      @param x %Double distribution variable.
0177      @param Par Additional parameters (not used).
0178      */
0179     double IntegralHdVal(double x, std::vector<double> Par);
0180 
0181     /** %Double distribution ansatz for quarks dVal and -x.
0182      @param x %Double distribution variable.
0183      @param Par Additional parameters (not used).
0184      */
0185     double IntegralHdValMx(double x, std::vector<double> Par);
0186 
0187     /** %Double distribution ansatz for quarks dSea and x and |x| > xi.
0188      @param x %Double distribution variable.
0189      @param Par Additional parameters (not used).
0190      */
0191     double IntegralxLargeHdSea(double x, std::vector<double> Par);
0192 
0193     /** %Double distribution ansatz for quarks dSea and -x and |x| > xi.
0194      @param x %Double distribution variable.
0195      @param Par Additional parameters (not used).
0196      */
0197     double IntegralxLargeHdSeaMx(double x, std::vector<double> Par);
0198 
0199     /** %Double distribution ansatz for quarks dSea and x and |x| < xi (part 1)
0200      @param x %Double distribution variable
0201      @param Par Additional parameters (not used)
0202      */
0203     double IntegralxSmall1HdSea(double x, std::vector<double> Par);
0204 
0205     /** %Double distribution ansatz for quarks dSea and x and |x| < xi (part 2).
0206      @param x %Double distribution variable.
0207      @param Par Additional parameters (not used).
0208      */
0209     double IntegralxSmall2HdSea(double x, std::vector<double> Par);
0210 
0211     /** %Double distribution ansatz for quarks s and x and |x| > xi.
0212      @param x %Double distribution variable.
0213      @param Par Additional parameters (not used).
0214      */
0215     double IntegralxLargeHsSea(double x, std::vector<double> Par);
0216 
0217     /** %Double distribution ansatz for quarks s and -x and |x| > xi.
0218      @param x %Double distribution variable.
0219      @param Par Additional parameters (not used).
0220      */
0221     double IntegralxLargeHsSeaMx(double x, std::vector<double> Par);
0222 
0223     /** %Double distribution ansatz for quarks s and x and |x| < xi (part 1).
0224      @param x %Double distribution variable.
0225      @param Par Additional parameters (not used).
0226      */
0227     double IntegralxSmall1HsSea(double x, std::vector<double> Par);
0228 
0229     /** %Double distribution ansatz for quarks s and x and |x| < xi (part 2).
0230      @param x %Double distribution variable.
0231      @param Par Additional parameters (not used).
0232      */
0233     double IntegralxSmall2HsSea(double x, std::vector<double> Par);
0234 
0235     /** %Double distribution ansatz for quarks g and x and |x| > xi.
0236      @param x %Double distribution variable.
0237      @param Par Additional parameters (not used).
0238      */
0239     double IntegralxLargeHg(double x, std::vector<double> Par);
0240 
0241     /** %Double distribution ansatz for quarks g and -x and |x| > xi.
0242      @param x %Double distribution variable.
0243      @param Par Additional parameters (not used).
0244      */
0245     double IntegralxLargeHgMx(double x, std::vector<double> Par);
0246 
0247     /** %Double distribution ansatz for quarks g and x and |x| < xi (part 1).
0248      @param x %Double distribution variable.
0249      @param Par Additional parameters (not used).
0250      */
0251     double IntegralxSmall1Hg(double x, std::vector<double> Par);
0252 
0253     /** %Double distribution ansatz for quarks g and x and |x| < xi (part 2).
0254      @param x %Double distribution variable.
0255      @param Par Additional parameters (not used).
0256      */
0257     double IntegralxSmall2Hg(double x, std::vector<double> Par);
0258 
0259     /** Evaluation of anomalous dimension matrix for qq.
0260      @param nflavour Number of active flavors.
0261      @param n Gegenbauer order.
0262      */
0263     double GammaQQ(const unsigned int nflavour, const unsigned int n);
0264 
0265     /** Evaluation of anomalous dimension matrix for qg.
0266      @param nflavour Number of active flavors.
0267      @param n Gegenbauer order.
0268      */
0269     double GammaQG(const unsigned int nflavour, const unsigned int n);
0270 
0271     /** Evaluation of anomalous dimension matrix for gq.
0272      @param nflavour Number of active flavors.
0273      @param n Gegenbauer order.
0274      */
0275     double GammaGQ(const unsigned int nflavour, const unsigned int n);
0276 
0277     /** Evaluation of anomalous dimension matrix for gg.
0278      @param nflavour Number of active flavors.
0279      @param n Gegenbauer order.
0280      */
0281     double GammaGG(const unsigned int nflavour, const unsigned int n);
0282 
0283     /** Throw exception if beta < 0 or beta > 1.
0284      @param funcName Name of function where the error appeared.
0285      @param betaValue Value of beta.
0286      */
0287     void throwBetaException(const std::string &funcName, double betaValue);
0288 
0289     NumA::FunctionType1D* m_pIntegralHuVal; ///< Functor related to IntegralHuVal()
0290     NumA::FunctionType1D* m_pIntegralHdVal; ///< Functor related to IntegralHdVal()
0291     NumA::FunctionType1D* m_pIntegralHuValMx; ///< Functor related to IntegralHuValMx()
0292     NumA::FunctionType1D* m_pIntegralHdValMx; ///< Functor related to IntegralHdValMx()
0293     NumA::FunctionType1D* m_pIntegralxLargeHuSea; ///< Functor related to IntegralxLargeHuSea()
0294     NumA::FunctionType1D* m_pIntegralxLargeHdSea; ///< Functor related to IntegralxLargeHdSea()
0295     NumA::FunctionType1D* m_pIntegralxSmall1HuSea; ///< Functor related to IntegralxSmall1HuSea()
0296     NumA::FunctionType1D* m_pIntegralxSmall2HuSea; ///< Functor related to IntegralxSmall2HuSea()
0297     NumA::FunctionType1D* m_pIntegralxSmall1HdSea; ///< Functor related to IntegralxSmall1HdSea()
0298     NumA::FunctionType1D* m_pIntegralxSmall2HdSea; ///< Functor related to IntegralxSmall2HdSea()
0299     NumA::FunctionType1D* m_pIntegralxLargeHuSeaMx; ///< Functor related to IntegralxLargeHuSeaMx()
0300     NumA::FunctionType1D* m_pIntegralxLargeHdSeaMx; ///< Functor related to IntegralxLargeHdSeaMx()
0301     NumA::FunctionType1D* m_pIntegralxLargeHsSea; ///< Functor related to IntegralxLargeHsSea()
0302     NumA::FunctionType1D* m_pIntegralxSmall1HsSea; ///< Functor related to IntegralxSmall1HsSea()
0303     NumA::FunctionType1D* m_pIntegralxSmall2HsSea; ///< Functor related to IntegralxSmall2HsSea()
0304     NumA::FunctionType1D* m_pIntegralxLargeHsSeaMx; ///< Functor related to IntegralxLargeHsSeaMx()
0305     NumA::FunctionType1D* m_pIntegralxLargeHg; ///< Functor related to IntegralxLargeHg()
0306     NumA::FunctionType1D* m_pIntegralxSmall1Hg; ///< Functor related to IntegralxSmall1Hg()
0307     NumA::FunctionType1D* m_pIntegralxSmall2Hg; ///< Functor related to IntegralxSmall2Hg()
0308     NumA::FunctionType1D* m_pIntegralxLargeHgMx; ///< Functor related to IntegralxLargeHgMx()
0309 
0310     /** Initialize functors.
0311      */
0312     void initFunctorsForIntegrations();
0313 };
0314 
0315 } /* namespace PARTONS */
0316 
0317 #endif /* GPD_MPSSW13_H */