Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_GK16_NUMERICAL_H
0002 #define GPD_GK16_NUMERICAL_H
0003 
0004 /**
0005  * @file GPDGK16Numerical.h
0006  * @author Bryan BERTHOU (CEA Saclay)
0007  * @author Herve MOUTARDE (CEA Saclay)
0008  * @author Luca COLANERI (IPNOrsay)
0009  * @date 2016
0010  * @version 1.0
0011  */
0012 
0013 #include <ElementaryUtils/parameters/Parameters.h>
0014 #include <string>
0015 #include <vector>
0016 
0017 #include "../MathIntegratorModule.h"
0018 #include "GPDModule.h"
0019 
0020 //TODO finir les messages de debug dans toutes les fonctions
0021 //TODO supprimer au maximum les pointers qui ne sont pas obligatoires
0022 
0023 namespace PARTONS {
0024 
0025 /**
0026  * @class GPDGK16Numerical
0027  *
0028  * @brief A module that implements GPD as defined by Kroll-Goloskokov model in 2011.
0029  *
0030  * This model is defined in the series of references:
0031  * - arxiv:hep-ph/0611290 \cite Goloskokov:2006hr ;
0032  * - arxiv:0708.3569 \cite Goloskokov:2007nt ;
0033  * - arxiv:0809.4126 \cite Goloskokov:2008ib ;
0034  * - arxiv:0906.0460 \cite Goloskokov:2009ia ;
0035  * - arxiv:1106.4897 \cite Goloskokov:2011rd ;
0036  * - arxiv:1210.6975 \cite Kroll2012sm ;
0037  * - arxiv:1407.1141 \cite Goloskokov:2014ika.
0038  *
0039  * Modified from GK16Model to perform numerical integration (and remove cln dependency).
0040  *
0041  * Available GPD types: H, E, Ht, Et.
0042  *
0043  * May 2017 : Update to correct pion pole issue in Et as in GK16Model.
0044  *
0045  */
0046 class GPDGK16Numerical: public GPDModule, public MathIntegratorModule {
0047 public:
0048 
0049     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0050 
0051     /**
0052      * Constructor.
0053      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0054      *
0055      * @param className name of child class.
0056      */
0057     GPDGK16Numerical(const std::string &className);
0058 
0059     /**
0060      * Default destructor.
0061      */
0062     virtual ~GPDGK16Numerical();
0063 
0064     virtual GPDGK16Numerical* clone() const;
0065 
0066     virtual void configure(const ElemUtils::Parameters &parameters);
0067 
0068     virtual std::string toString() const;
0069 
0070 
0071 
0072 protected:
0073     /**
0074      * Copy constructor.
0075      *
0076      * Use by the factory.
0077      *
0078      * @param other
0079      */
0080     GPDGK16Numerical(const GPDGK16Numerical& other);
0081 
0082     virtual void isModuleWellConfigured();
0083     virtual void initModule();
0084 
0085     //GPDResultData compute(GPDComputeType gpdComputeType);
0086 
0087     virtual PartonDistribution computeH();
0088     virtual PartonDistribution computeE();
0089     virtual PartonDistribution computeHt();
0090     virtual PartonDistribution computeEt();
0091 
0092 //    double computeSinglet(const QuarkDistribution &quarkDistribution_u,
0093 //            const QuarkDistribution &quarkDistribution_d,
0094 //            const QuarkDistribution &quarkDistribution_s);
0095 
0096     void calculateHCoefs();
0097     void calculateECoefs();
0098     void calculateHtCoefs();
0099     void calculateEtCoefs();
0100 
0101     double c1, c2, c3, c4, c5, c6, c7, c8; // Coefficients of the expansion of CTEQ PDF in terms of half-integer powers of beta (eq. (26))
0102     double b0; // Exponential t-dependence (eq. (22))
0103     double fL;
0104     double d0; //exponent appearing in PDF expasion (eq. (26))
0105     double alphaP; //coefficient for t and beta -dependence (eq. 22)
0106 
0107 private:
0108     double m_Mx;
0109     double kappa_s; // Flavour symmetry breaking factor, eq. (36)
0110 
0111     double Et_pole(double x); ///< Pion pole contribution to Et
0112 
0113     double Profile(double N, double alpha, double beta);
0114     double GKPdfAnsatz(double N, double beta, double* coeff);
0115     double GKPdfAnsatz_t(double N, double beta, double* coeff);
0116     double GKPdfAnsatz_tg(double N, double beta, double* coeff);
0117     double GKtDependentsDD(double beta, double alpha);
0118     double GKtDependentuDD_t(double beta, double alpha);
0119     double GKtDependentdDD_t(double beta, double alpha);
0120     double GKtDependentuValDD(double beta, double alpha);
0121     double GKtDependentdValDD(double beta, double alpha);
0122     double GKtDependentgDD(double beta, double alpha);
0123 
0124     double GKtDependentHtgDD(double beta, double alpha);
0125 
0126     //DD E
0127     double GKtDependentDD_EuVal(double beta, double alpha);
0128     double GKtDependentDD_EdVal(double beta, double alpha);
0129     double GKtDependentDD_Es(double beta, double alpha);
0130     double GKtDependentDD_Eg(double beta, double alpha);
0131     //DD Et
0132     double GKtDependentDD_EtuVal(double beta, double alpha);
0133     double GKtDependentDD_EtdVal(double beta, double alpha);
0134 
0135     void initFunctorsForIntegrations();
0136 //    double IntegralHuVal(double x, std::vector<double> Par);
0137     double IntegralHdValBp(double x, std::vector<double> Par);
0138     double IntegralHdValBm(double x, std::vector<double> Par);
0139 //    double IntegralHuValMx(double x, std::vector<double> Par);
0140 //    double IntegralHdValMx(double x, std::vector<double> Par);
0141     double IntegralHg(double x, std::vector<double> Par);
0142     double IntegralHs(double x, std::vector<double> Par);
0143     double IntegralHsBm(double x, std::vector<double> Par);
0144 
0145     double IntegralHuVal(double x, std::vector<double> Par);
0146     double IntegralHtuVal(double x, std::vector<double> Par);
0147     double IntegralHtdVal(double x, std::vector<double> Par);
0148     double IntegralHuValMx(double x, std::vector<double> Par);
0149     double IntegralHtuValMx(double x, std::vector<double> Par);
0150     double IntegralHtdValMx(double x, std::vector<double> Par);
0151     double IntegralHdVal(double x, std::vector<double> Par);
0152     double IntegralHdValMx(double x, std::vector<double> Par);
0153     double IntegralxLargeHsSea(double x, std::vector<double> Par);
0154     double IntegralxLargeHsSeaMx(double x, std::vector<double> Par);
0155     double IntegralxSmallHsSea(double x, std::vector<double> Par);
0156     double IntegralxSmall1HsSea(double x, std::vector<double> Par);
0157     double IntegralxSmall2HsSea(double x, std::vector<double> Par);
0158     double IntegralxLargeHg(double x, std::vector<double> Par);
0159     double IntegralxLargeHgMx(double x, std::vector<double> Par);
0160     double IntegralxSmall1Hg(double x, std::vector<double> Par);
0161     double IntegralxSmall2Hg(double x, std::vector<double> Par);
0162 //integrals for Ht
0163     double IntegralxLargeHtg(double x, std::vector<double> Par);
0164     double IntegralxLargeHtgMx(double x, std::vector<double> Par);
0165     double IntegralxSmall1Htg(double x, std::vector<double> Par);
0166     double IntegralxSmall2Htg(double x, std::vector<double> Par);
0167 
0168 //integrals for E
0169     double IntegralEuVal(double x, std::vector<double> Par);
0170     double IntegralEdVal(double x, std::vector<double> Par);
0171     double IntegralEuValMx(double x, std::vector<double> Par);
0172     double IntegralEdValMx(double x, std::vector<double> Par);
0173     double IntegralxLargeEsSea(double x, std::vector<double> Par);
0174     double IntegralxLargeEsSeaMx(double x, std::vector<double> Par);
0175     double IntegralxSmallEsSea(double x, std::vector<double> Par);
0176     double IntegralxSmall1EsSea(double x, std::vector<double> Par);
0177     double IntegralxSmall2EsSea(double x, std::vector<double> Par);
0178 
0179     double IntegralxLargeEgSea(double x, std::vector<double> Par);
0180     double IntegralxLargeEgSeaMx(double x, std::vector<double> Par);
0181     //   double IntegralxSmallEgSea(double x, std::vector<double> Par);
0182     double IntegralxSmall1EgSea(double x, std::vector<double> Par);
0183     double IntegralxSmall2EgSea(double x, std::vector<double> Par);
0184 //integrals for Et
0185     double IntegralEtuVal(double x, std::vector<double> Par);
0186     double IntegralEtdVal(double x, std::vector<double> Par);
0187     double IntegralEtuValMx(double x, std::vector<double> Par);
0188     double IntegralEtdValMx(double x, std::vector<double> Par);
0189 
0190     void throwBetaException(const std::string &funcName, double betaValue);
0191 
0192     NumA::FunctionType1D* m_pIntegralHuVal;
0193     NumA::FunctionType1D* m_pIntegralHdVal;
0194     NumA::FunctionType1D* m_pIntegralHuValMx;
0195     NumA::FunctionType1D* m_pIntegralHdValMx;
0196     NumA::FunctionType1D* m_pIntegralxLargeHsSea;
0197     NumA::FunctionType1D* m_pIntegralxSmallHsSea;
0198     NumA::FunctionType1D* m_pIntegralxSmall1HsSea;
0199     NumA::FunctionType1D* m_pIntegralxSmall2HsSea;
0200     NumA::FunctionType1D* m_pIntegralxLargeHsSeaMx;
0201     NumA::FunctionType1D* m_pIntegralxLargeHg;
0202     NumA::FunctionType1D* m_pIntegralxSmall1Hg;
0203     NumA::FunctionType1D* m_pIntegralxSmall2Hg;
0204     NumA::FunctionType1D* m_pIntegralxLargeHgMx;
0205 
0206     NumA::FunctionType1D* m_pIntegralHtuVal;
0207     NumA::FunctionType1D* m_pIntegralHtdVal;
0208     NumA::FunctionType1D* m_pIntegralHtuValMx;
0209     NumA::FunctionType1D* m_pIntegralHtdValMx;
0210     NumA::FunctionType1D* m_pIntegralxLargeHtg;
0211     NumA::FunctionType1D* m_pIntegralxSmall1Htg;
0212     NumA::FunctionType1D* m_pIntegralxSmall2Htg;
0213     NumA::FunctionType1D* m_pIntegralxLargeHtgMx;
0214 
0215     NumA::FunctionType1D* m_pIntegralEuVal;
0216     NumA::FunctionType1D* m_pIntegralEdVal;
0217     NumA::FunctionType1D* m_pIntegralEuValMx;
0218     NumA::FunctionType1D* m_pIntegralEdValMx;
0219     NumA::FunctionType1D* m_pIntegralxLargeEsSea;
0220     NumA::FunctionType1D* m_pIntegralxLargeEsSeaMx;
0221     NumA::FunctionType1D* m_pIntegralxSmallEsSea;
0222     NumA::FunctionType1D* m_pIntegralxSmall1EsSea;
0223     NumA::FunctionType1D* m_pIntegralxSmall2EsSea;
0224     NumA::FunctionType1D* m_pIntegralxLargeEgSea;
0225     NumA::FunctionType1D* m_pIntegralxLargeEgSeaMx;
0226     NumA::FunctionType1D* m_pIntegralxSmall1EgSea;
0227     NumA::FunctionType1D* m_pIntegralxSmall2EgSea;
0228 
0229     NumA::FunctionType1D* m_pIntegralEtuVal;
0230     NumA::FunctionType1D* m_pIntegralEtdVal;
0231     NumA::FunctionType1D* m_pIntegralEtuValMx;
0232     NumA::FunctionType1D* m_pIntegralEtdValMx;
0233 };
0234 
0235 } /* namespace PARTONS */
0236 
0237 #endif /* GPD_GK16_NUMERICAL_H */