Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_GK16_H
0002 #define GPD_GK16_H
0003 
0004 /**
0005  * @file GPDGK16.h
0006  * @author Bryan BERTHOU (CEA Saclay)
0007  * @author Herve MOUTARDE (CEA Saclay)
0008  * @date 2014
0009  * @version 1.0
0010  */
0011 
0012 #include <ElementaryUtils/parameters/Parameters.h>
0013 #include <string>
0014 #include <vector>
0015 
0016 #include "GPDModule.h"
0017 
0018 //TODO finir les messages de debug dans toutes les fonctions
0019 //TODO supprimer au maximum les pointers qui ne sont pas obligatoires
0020 // !!!! Use tgamma() instead of gamma() (see: http://stackoverflow.com/questions/18116376/what-is-the-definition-for-gammadouble-x-and-why-is-it-different-on-two-gcc-ve)
0021 
0022 namespace PARTONS {
0023 
0024 /**
0025  * @class GPDGK16
0026  *
0027  * @brief A module that implements GPD as defined by Kroll-Goloskokov model in 2011.
0028  *
0029  * This model is defined in the series of references:
0030  * - arxiv:hep-ph/0611290 \cite Goloskokov:2006hr ;
0031  * - arxiv:0708.3569 \cite Goloskokov:2007nt ;
0032  * - arxiv:0809.4126 \cite Goloskokov:2008ib ;
0033  * - arxiv:0906.0460 \cite Goloskokov:2009ia ;
0034  * - arxiv:1106.4897 \cite Goloskokov:2011rd ;
0035  * - arxiv:1210.6975 \cite Kroll2012sm ;
0036  * - arxiv:1407.1141 \cite Goloskokov:2014ika.
0037  *
0038  * Has cln dependencies, which is not a thread-safe library. DO NOT USE THIS MODEL WITH THREADS!!
0039  *
0040  * Available GPD types: H, E, Ht, Et.
0041  *
0042  * August 2015 : Tested and approved by Pawel Sznajder.
0043  *
0044  * November 2016 : Update from GK11 to GK16 to correct pion pole issue in Et by Luca Colaneri and Pawel Sznajder.
0045  *
0046  */
0047 class GPDGK16: public GPDModule {
0048 public:
0049 
0050     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0051 
0052     /**
0053      * Constructor.
0054      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0055      *
0056      * @param className name of child class.
0057      */
0058     GPDGK16(const std::string &className);
0059 
0060     /**
0061      * Default destructor.
0062      */
0063     virtual ~GPDGK16();
0064 
0065     virtual GPDGK16* clone() const;
0066 
0067     virtual void configure(const ElemUtils::Parameters &parameters);
0068 
0069     virtual std::string toString() const;
0070 
0071     // ##### GETTERS & SETTERS #####
0072 
0073     double getB0() const;
0074     double getC1() const;
0075     double getC2() const;
0076     double getC3() const;
0077     double getC4() const;
0078     double getC5() const;
0079     double getC6() const;
0080     double getC7() const;
0081     double getC8() const;
0082     const std::vector<double>& getEdval1mtab() const;
0083     const std::vector<double>& getEdval1tab() const;
0084     const std::vector<double>& getEi1tab() const;
0085     const std::vector<double>& getEs1tab() const;
0086     const std::vector<double>& getEtdval1mtab() const;
0087     const std::vector<double>& getEtdval1tab() const;
0088     const std::vector<double>& getEtuval1mtab() const;
0089     const std::vector<double>& getEtuval1tab() const;
0090     const std::vector<double>& getEuval1mtab() const;
0091     const std::vector<double>& getEuval1tab() const;
0092     double getEdValMx() const;
0093     double getEtdValMx() const;
0094     double getEtuValMx() const;
0095     double getEuValMx() const;
0096     double getHdValMx() const;
0097     double getHtdValMx() const;
0098     double getHtuValMx() const;
0099     double getHuValMx() const;
0100     double getL() const;
0101     const std::vector<double>& getHdval1mtab() const;
0102     const std::vector<double>& getHdval1tab() const;
0103     const std::vector<double>& getHi1tab() const;
0104     const std::vector<double>& getHs1tab() const;
0105     const std::vector<double>& getHtdval1mtab() const;
0106     const std::vector<double>& getHtdval1tab() const;
0107     const std::vector<double>& getHti1tab() const;
0108     const std::vector<double>& getHtuval1mtab() const;
0109     const std::vector<double>& getHtuval1tab() const;
0110     const std::vector<double>& getHuval1mtab() const;
0111     const std::vector<double>& getHuval1tab() const;
0112     double getKappaS() const;
0113     double getEdval() const;
0114     double getEgluon() const;
0115     double getEsea() const;
0116     double getEtdval() const;
0117     double getEtgluon() const;
0118     double getEtsea() const;
0119     double getEtuval() const;
0120     double getEuval() const;
0121     double getHdval() const;
0122     double getHgluon() const;
0123     double getHsea() const;
0124     double getHtdval() const;
0125     double getHtgluon() const;
0126     double getHtsea() const;
0127     double getHtuval() const;
0128     double getHuval() const;
0129 
0130 protected:
0131     /**
0132      * Copy constructor.
0133      *
0134      * Used by the factory.
0135      *
0136      * @param other
0137      */
0138     GPDGK16(const GPDGK16& other);
0139 
0140     virtual void isModuleWellConfigured();
0141     virtual void initModule();
0142 
0143     //GPDResultData compute(GPDComputeType gpdComputeType);
0144 
0145     virtual PartonDistribution computeH();
0146     virtual PartonDistribution computeE();
0147     virtual PartonDistribution computeHt();
0148     virtual PartonDistribution computeEt();
0149 
0150 //    double computeSinglet(const QuarkDistribution &quarkDistribution_u,
0151 //            const QuarkDistribution &quarkDistribution_d,
0152 //            const QuarkDistribution &quarkDistribution_s);
0153 
0154     void calculateHCoefs();
0155     void calculateECoefs();
0156     void calculateHtCoefs();
0157     void calculateEtCoefs();
0158 
0159     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))
0160     double b0; // Exponential t-dependence (eq. (22))
0161     double fL;
0162 
0163     std::vector<double> Hi1tab;               ///< Hi1(i=0,0.5,1,1.5) for gluons
0164 
0165 private:
0166 
0167     double kappa_s; // Flavour symmetry breaking factor, eq. (36)
0168 
0169     double fHuValMx;                                          ///< HuVal( - fx )
0170     double fHdValMx;                                          ///< HdVal( - fx )
0171     double fEuValMx;                                          ///< HuVal( - fx )
0172     double fEdValMx;                                          ///< HdVal( - fx )
0173     double fHtuValMx;                                         ///< HuVal( - fx )
0174     double fHtdValMx;                                         ///< HdVal( - fx )
0175     double fEtuValMx;                                         ///< HuVal( - fx )
0176     double fEtdValMx;                                         ///< HdVal( - fx )
0177 
0178     double kHgluon;                   ///< Exponent of correlated x-t dependence.
0179     double kHsea;                     ///< Exponent of correlated x-t dependence.
0180     double kHuval;                    ///< Exponent of correlated x-t dependence.
0181     double kHdval;                    ///< Exponent of correlated x-t dependence.
0182 
0183     double kEgluon;                   ///< Exponent of correlated x-t dependence.
0184     double kEsea;                     ///< Exponent of correlated x-t dependence.
0185     double kEuval;                    ///< Exponent of correlated x-t dependence.
0186     double kEdval;                    ///< Exponent of correlated x-t dependence.
0187 
0188     double kHtgluon;                  ///< Exponent of correlated x-t dependence.
0189     double kHtsea;                    ///< Exponent of correlated x-t dependence.
0190     double kHtuval;                   ///< Exponent of correlated x-t dependence.
0191     double kHtdval;                   ///< Exponent of correlated x-t dependence.
0192 
0193     double kEtgluon;                  ///< Exponent of correlated x-t dependence.
0194     double kEtsea;                    ///< Exponent of correlated x-t dependence.
0195     double kEtuval;                   ///< Exponent of correlated x-t dependence.
0196     double kEtdval;                   ///< Exponent of correlated x-t dependence.
0197 
0198     std::vector<double> Huval1tab;           ///< Hval1(i=0,0.5,1) for valence u
0199     std::vector<double> Hdval1tab;           ///< Hval1(i=0,0.5,1) for valence d
0200     std::vector<double> Huval1mtab;  ///< Hval1(i=0,0.5,1) for valence u for -xb
0201     std::vector<double> Hdval1mtab;  ///< Hval1(i=0,0.5,1) for valence d for -xb
0202     std::vector<double> Hs1tab; ///< Hs1(i=0,0.5,1,1.5) for sea, same for u, d, s
0203 
0204     std::vector<double> Euval1tab;               ///< Eval1(i=0,1) for valence u
0205     std::vector<double> Edval1tab;            ///< Eval1(i=0,..,7) for valence d
0206     std::vector<double> Euval1mtab;      ///< Eval1(i=0,1) for valence u for -xb
0207     std::vector<double> Edval1mtab;   ///< Eval1(i=0,..,7) for valence d for -xb
0208     std::vector<double> Es1tab;      ///< Es1(i=0,1,2) for sea, same for u, d, s
0209     std::vector<double> Ei1tab;                       ///< Ei1(i=0,1) for gluons
0210 
0211     std::vector<double> Htuval1tab;           ///< Htval1(i=0,1,2) for valence u
0212     std::vector<double> Htdval1tab;           ///< Htval1(i=0,1,2) for valence d
0213     std::vector<double> Htuval1mtab;  ///< Htval1(i=0,1,2) for valence u for -xb
0214     std::vector<double> Htdval1mtab;  ///< Htval1(i=0,1,2) for valence d for -xb
0215     std::vector<double> Hti1tab;                 ///< Hti1(i=0,0.5,1) for gluons
0216 
0217     std::vector<double> Etuval1tab;         ///< Etval1(i=0,1,2,3) for valence u
0218     std::vector<double> Etdval1tab;         ///< Etval1(i=0,1,2,3) for valence d
0219     std::vector<double> Etuval1mtab; ///< Etval1(i=0,1,2,3) for valence u for -xb
0220     std::vector<double> Etdval1mtab; ///< Etval1(i=0,1,2,3) for valence d for -xb
0221 
0222     void calculateHKas();
0223     void calculateEKas();
0224     void calculateHtKas();
0225     void calculateEtKas();
0226 
0227     double Et_pole(double x); ///< Pion pole contribution to Et.
0228 
0229     double Hi1(double x, double i, double k);
0230     double Hs1(double x, double i, double k);
0231     double Hval1(double x, double i, double k);
0232     double Ei1(double x, double i, double k);
0233     double Es1(double x, double i, double k);
0234     double Eval1(double x, double i, double k);
0235     double Hti1(double x, double i, double k);
0236     double Htval1(double x, double i, double k);
0237     double Etval1(double x, double i, double k);
0238 
0239     double Hi1_alt(double x, double i, double k);
0240     double Hs1_alt(double x, double i, double k);
0241     double Hval1_alt(double x, double i, double k);
0242     double Ei1_alt(double x, double i, double k);
0243     double Es1_alt(double x, double i, double k);
0244     double Eval1_alt(double x, double i, double k);
0245     double Hti1_alt(double x, double i, double k);
0246     double Htval1_alt(double x, double i, double k);
0247     double Etval1_alt(double x, double i, double k);
0248 
0249 };
0250 
0251 } /* namespace PARTONS */
0252 
0253 #endif /* GPD_GK16_H */