Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_VGG99_H
0002 #define GPD_VGG99_H
0003 
0004 /**
0005  * @file GPDVGG99.h
0006  * @author  Michel Guidal (IPNO)
0007  * @author Pawel Sznajder (IPNO)
0008  * @date December 10, 2015
0009  * @version 1.0
0010  */
0011 
0012 #include <ElementaryUtils/parameters/Parameters.h>
0013 #include <string>
0014 #include <vector>
0015 #include <LHAPDF/LHAPDF.h>
0016 
0017 #include "../../beans/gpd/GPDType.h"
0018 #include "../MathIntegratorModule.h"
0019 #include "GPDModule.h"
0020 
0021 namespace NumA {
0022 class FunctionType1D;
0023 } /* namespace NumA */
0024 
0025 namespace PARTONS {
0026 
0027 /**
0028  * @class GPDVGG99
0029  *
0030  * For the reference see:
0031  * - Prog. Part. Nucl. Phys. 47, 401 (2001)
0032  * - Phys. Rev. Lett. 80 5064 (1998).
0033  * - Phys. Rev. D 60, 094017 (1999).
0034  * - Phys. Rev. D 72, 054013 (2005).
0035  *
0036  * Module based on the original code received from M. Guidal as a private communication.
0037  *
0038  * Available GPD types: H, E, Ht, Et.
0039  */
0040 class GPDVGG99: public GPDModule, public MathIntegratorModule {
0041 
0042 public:
0043 
0044     static const std::string PARAM_NAME_SET_NAME;
0045     static const std::string PARAM_NAME_MEMBER;
0046 
0047     static const unsigned int classId; ///< ID assigned by BaseObjectRegistry.
0048 
0049     /**
0050      * Constructor.
0051      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0052      *
0053      * @param className name of child class.
0054      */
0055     GPDVGG99(const std::string &className);
0056 
0057     /**
0058      * Default destructor.
0059      */
0060     virtual ~GPDVGG99();
0061     virtual GPDVGG99* clone() const;
0062     virtual void resolveObjectDependencies();
0063     virtual void configure(const ElemUtils::Parameters &parameters);
0064     virtual std::string toString() const;
0065 
0066     std::string getSetName() const;
0067     int getMember() const;
0068 
0069     void setSetName(const std::string &setname);
0070     void setMember(const int &member);
0071 
0072 protected:
0073 
0074     /** Copy constructor
0075      @param other Object to be copied
0076      */
0077     GPDVGG99(const GPDVGG99& other);
0078 
0079     virtual void isModuleWellConfigured();
0080     virtual void initModule();
0081 
0082     virtual PartonDistribution computeH();
0083     virtual PartonDistribution computeE();
0084     virtual PartonDistribution computeHt();
0085     virtual PartonDistribution computeEt();
0086 
0087 private:
0088 
0089     /** Quark flavors.
0090      */
0091     enum flavour {
0092         UNDEFINED = 0,
0093         UP_VAL = 1,
0094         UP_SEA = 2,
0095         DOWN_VAL = 3,
0096         DOWN_SEA = 4,
0097         STRANGE = 5
0098     };
0099 
0100     const double kappa_u; ///< Anomalous magnetic moment for quarks u.
0101     const double kappa_d; ///< Anomalous magnetic moment for quarks d.
0102 
0103     const double b_profile_val; ///< Parameter describing t dependence of the Regge residue for valence quarks.
0104     const double b_profile_sea; ///< Parameter describing t dependence of the Regge residue for see quarks.
0105     const double alphap_val; ///< Slope of Ragge trajectory for valence quarks.
0106     const double alphap_sea; ///< Slope of Ragge trajectory for for sea quarks.
0107     const double eta_e_largex_u_s; ///< Shape parameter for GPD E^uVal.
0108     const double eta_e_largex_d_s; ///< Shape parameter for GPD E^dVal.
0109     const double g_AXIAL; ///< Axial coupling constant of the nucleon.
0110 
0111     std::string m_setName;
0112     int m_member;
0113     LHAPDF::PDF* m_Forward;
0114 
0115     GPDType gpd_s5; ///< GPD Type for the current computation (internal variables used for the integration).
0116     flavour flavour_s5; ///< Flavor for the current computation  (internal variables used for the integration).
0117     double x_s5; ///< Value of x for the current computation (internal variables used for the integration).
0118 
0119     /** Evaluation of %double distribution for unpolarized GPDs.
0120      */
0121     double offforward_distr();
0122 
0123     /** Evaluation of %double distribution for polarized GPDs.
0124      */
0125     double offforward_pol_distr();
0126 
0127     /** %Double distribution profile function.
0128      @param beta, alpha %Double distribution variables.
0129      @param b_profile Profile parameter.
0130      \sa b_profile_val, b_profile_sea.
0131      */
0132     double symm_profile_function(double beta, double alpha, double b_profile);
0133 
0134     /** %Double distribution function for GPD H.
0135      @param beta, alpha %Double distribution variables.
0136      */
0137     double symm_double_distr_reggeH(double beta, double alpha);
0138 
0139     /** Wrapper for integration of %double distribution for GPD H and x.
0140      @param alpha %Double distribution variable.
0141      @param par Additional parameters (not used).
0142      */
0143     double int_symm_double_distr_reggeH(double alpha, std::vector<double> par);
0144 
0145     /** Wrapper for integration of %double distribution for GPD H and -x.
0146      @param alpha %Double distribution variable.
0147      @param par Additional parameters (not used).
0148      */
0149     double int_symm_double_distr_reggeMxH(double alpha,
0150             std::vector<double> par);
0151 
0152     /** %Double distribution function for GPD E.
0153      @param beta, alpha %Double distribution variables.
0154      */
0155     double symm_double_distr_reggeE(double beta, double alpha);
0156 
0157     /** Wrapper for integration of %double distribution for GPD E and x.
0158      @param alpha %Double distribution variable.
0159      @param par Additional parameters (not used).
0160      */
0161     double int_symm_double_distr_reggeE(double alpha, std::vector<double> par);
0162 
0163     /** Wrapper for integration of %double distribution for GPD E and -x.
0164      @param alpha %Double distribution variable.
0165      @param par Additional parameters (not used).
0166      */
0167     double int_symm_double_distr_reggeMxE(double alpha,
0168             std::vector<double> par);
0169 
0170     /** Normalization function for GPD E.
0171      @param beta %Double distribution variable.
0172      @param par Additional parameters (not used).
0173      */
0174     double int_mom2_up_valence_e(double beta, std::vector<double> par);
0175 
0176     /** %Double distribution function for GPD Ht.
0177      @param beta, alpha %Double distribution variables.
0178      */
0179     double symm_double_distr_reggeHt(double beta, double alpha);
0180 
0181     /** Wrapper for integration of %double distribution for GPD Ht and x.
0182      @param alpha %Double distribution variable.
0183      @param par Additional parameters (not used).
0184      */
0185     double int_symm_double_distr_reggeHt(double alpha, std::vector<double> par);
0186 
0187     /** Wrapper for integration of %double distribution for GPD Ht and -x.
0188      @param alpha %Double distribution variable.
0189      @param par Additional parameters (not used).
0190      */
0191     double int_symm_double_distr_reggeMxHt(double alpha,
0192             std::vector<double> par);
0193 
0194     /** Unpolarized PDF for quarks uVal, MRS93 (used only for cross-check purpose).
0195      @param x Fractional momentum of parton.
0196      */
0197     double test_pdf_up_val(double x);
0198 
0199     /** Unpolarized PDF for quarks dVal, MRS93 (used only for cross-check purpose).
0200      @param x Fractional momentum of parton.
0201      */
0202     double test_pdf_down_val(double x);
0203 
0204     /** Unpolarized PDF for quarks uSea, MRS93 (used only for cross-check purpose).
0205      @param x Fractional momentum of parton.
0206      */
0207     double test_pdf_up_bar(double x);
0208 
0209     /** Unpolarized PDF for quarks dSea, MRS93 (used only for cross-check purpose).
0210      @param x Fractional momentum of parton.
0211      */
0212     double test_pdf_down_bar(double x);
0213 
0214     /** Unpolarized PDF for quarks s, MRS93 (used only for cross-check purpose).
0215      @param x Fractional momentum of parton.
0216      */
0217     double test_pdf_sea(double x);
0218 
0219     /** Polarized PDF for quarks uVal, MRST98.
0220      @param x Fractional momentum of parton.
0221      */
0222     double pol_up_valence(double x);
0223 
0224     /** Polarized PDF for quarks dVal, MRST98.
0225      @param x Fractional momentum of parton.
0226      */
0227     double pol_down_valence(double x);
0228 
0229     /** Polarized PDF for quarks uSea, MRST98.
0230      @param x Fractional momentum of parton.
0231      */
0232     double pol_up_bar(double x);
0233 
0234     /** Polarized PDF for quarks dSea, MRST98.
0235      @param x Fractional momentum of parton.
0236      */
0237     double pol_down_bar(double x);
0238 
0239     /** Polarized PDF for quarks s, MRST98.
0240      @param x Fractional momentum of parton.
0241      */
0242     double pol_strange_bar(double x);
0243 
0244     /** Axial form factor parameterization.
0245      @param Q_sqr FF variable.
0246      */
0247     double form_factor_G_A(double Q_sqr);
0248 
0249     /** Pseudoscalar form factor parameterization.
0250      @param t FF variable.
0251      */
0252     double form_factor_G_P(double t);
0253 
0254     NumA::FunctionType1D* m_pint_symm_double_distr_reggeH; ///< Functor related to symm_double_distr_reggeH()
0255     NumA::FunctionType1D* m_pint_symm_double_distr_reggeMxH; ///< Functor related to symm_double_distr_reggeMxH()
0256     NumA::FunctionType1D* m_pint_symm_double_distr_reggeE; ///< Functor related to symm_double_distr_reggeE()
0257     NumA::FunctionType1D* m_pint_symm_double_distr_reggeMxE; ///< Functor related to symm_double_distr_reggeMxE()
0258     NumA::FunctionType1D* m_pint_symm_double_distr_reggeHt; ///< Functor related to symm_double_distr_reggeHt()
0259     NumA::FunctionType1D* m_pint_symm_double_distr_reggeMxHt; ///< Functor related to symm_double_distr_reggeMxHt()
0260     NumA::FunctionType1D* m_pint_mom2_up_valence_e; ///< Functor related to mom2_up_valence_e()
0261 
0262     /** Initialize functors.
0263      */
0264     void initFunctorsForIntegrations();
0265 };
0266 
0267 } /* namespace PARTONS */
0268 
0269 #endif /* GPD_VGG99_H */