Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef GPD_GK11_H
0002 #define GPD_GK11_H
0003 
0004 /**
0005  * @file GPDGK11.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 GPDGK11
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 class GPDGK11: public GPDModule {
0045 public:
0046 
0047     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0048 
0049     /**
0050      * Constructor.
0051      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0052      *
0053      * @param className name of child class.
0054      */
0055     GPDGK11(const std::string &className);
0056 
0057     /**
0058      * Default destructor.
0059      */
0060     virtual ~GPDGK11();
0061 
0062     virtual GPDGK11* clone() const;
0063 
0064     virtual void configure(const ElemUtils::Parameters &parameters);
0065 
0066     virtual std::string toString() const;
0067 
0068     // ##### GETTERS & SETTERS #####
0069 
0070     double getB0() const;
0071     double getC1() const;
0072     double getC2() const;
0073     double getC3() const;
0074     double getC4() const;
0075     double getC5() const;
0076     double getC6() const;
0077     double getC7() const;
0078     double getC8() const;
0079     const std::vector<double>& getEdval1mtab() const;
0080     const std::vector<double>& getEdval1tab() const;
0081     const std::vector<double>& getEi1tab() const;
0082     const std::vector<double>& getEs1tab() const;
0083     const std::vector<double>& getEtdval1mtab() const;
0084     const std::vector<double>& getEtdval1tab() const;
0085     const std::vector<double>& getEtuval1mtab() const;
0086     const std::vector<double>& getEtuval1tab() const;
0087     const std::vector<double>& getEuval1mtab() const;
0088     const std::vector<double>& getEuval1tab() const;
0089     double getEdValMx() const;
0090     double getEtdValMx() const;
0091     double getEtuValMx() const;
0092     double getEuValMx() const;
0093     double getHdValMx() const;
0094     double getHtdValMx() const;
0095     double getHtuValMx() const;
0096     double getHuValMx() const;
0097     double getL() const;
0098     const std::vector<double>& getHdval1mtab() const;
0099     const std::vector<double>& getHdval1tab() const;
0100     const std::vector<double>& getHi1tab() const;
0101     const std::vector<double>& getHs1tab() const;
0102     const std::vector<double>& getHtdval1mtab() const;
0103     const std::vector<double>& getHtdval1tab() const;
0104     const std::vector<double>& getHti1tab() const;
0105     const std::vector<double>& getHtuval1mtab() const;
0106     const std::vector<double>& getHtuval1tab() const;
0107     const std::vector<double>& getHuval1mtab() const;
0108     const std::vector<double>& getHuval1tab() const;
0109     double getKappaS() const;
0110     double getEdval() const;
0111     double getEgluon() const;
0112     double getEsea() const;
0113     double getEtdval() const;
0114     double getEtgluon() const;
0115     double getEtsea() const;
0116     double getEtuval() const;
0117     double getEuval() const;
0118     double getHdval() const;
0119     double getHgluon() const;
0120     double getHsea() const;
0121     double getHtdval() const;
0122     double getHtgluon() const;
0123     double getHtsea() const;
0124     double getHtuval() const;
0125     double getHuval() const;
0126 
0127 protected:
0128     /**
0129      * Copy constructor.
0130      *
0131      * Used by the factory.
0132      *
0133      * @param other
0134      */
0135     GPDGK11(const GPDGK11& other);
0136 
0137     virtual void isModuleWellConfigured();
0138     virtual void initModule();
0139 
0140     //GPDResultData compute(GPDComputeType gpdComputeType);
0141 
0142     virtual PartonDistribution computeH();
0143     virtual PartonDistribution computeE();
0144     virtual PartonDistribution computeHt();
0145     virtual PartonDistribution computeEt();
0146 
0147 //    double computeSinglet(const QuarkDistribution &quarkDistribution_u,
0148 //            const QuarkDistribution &quarkDistribution_d,
0149 //            const QuarkDistribution &quarkDistribution_s);
0150 
0151     void calculateHCoefs();
0152     void calculateECoefs();
0153     void calculateHtCoefs();
0154     void calculateEtCoefs();
0155 
0156     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))
0157     double b0; // Exponential t-dependence (eq. (22))
0158     double fL;
0159 
0160     std::vector<double> Hi1tab;               ///< Hi1(i=0,0.5,1,1.5) for gluons
0161 
0162 private:
0163 
0164     double kappa_s; // Flavour symmetry breaking factor, eq. (36)
0165 
0166     double fHuValMx;                                          ///< HuVal( - fx )
0167     double fHdValMx;                                          ///< HdVal( - fx )
0168     double fEuValMx;                                          ///< HuVal( - fx )
0169     double fEdValMx;                                          ///< HdVal( - fx )
0170     double fHtuValMx;                                         ///< HuVal( - fx )
0171     double fHtdValMx;                                         ///< HdVal( - fx )
0172     double fEtuValMx;                                         ///< HuVal( - fx )
0173     double fEtdValMx;                                         ///< HdVal( - fx )
0174 
0175     double kHgluon;                   ///< Exponent of correlated x-t dependence
0176     double kHsea;                     ///< Exponent of correlated x-t dependence
0177     double kHuval;                    ///< Exponent of correlated x-t dependence
0178     double kHdval;                    ///< Exponent of correlated x-t dependence
0179 
0180     double kEgluon;                   ///< Exponent of correlated x-t dependence
0181     double kEsea;                     ///< Exponent of correlated x-t dependence
0182     double kEuval;                    ///< Exponent of correlated x-t dependence
0183     double kEdval;                    ///< Exponent of correlated x-t dependence
0184 
0185     double kHtgluon;                  ///< Exponent of correlated x-t dependence
0186     double kHtsea;                    ///< Exponent of correlated x-t dependence
0187     double kHtuval;                   ///< Exponent of correlated x-t dependence
0188     double kHtdval;                   ///< Exponent of correlated x-t dependence
0189 
0190     double kEtgluon;                  ///< Exponent of correlated x-t dependence
0191     double kEtsea;                    ///< Exponent of correlated x-t dependence
0192     double kEtuval;                   ///< Exponent of correlated x-t dependence
0193     double kEtdval;                   ///< Exponent of correlated x-t dependence
0194 
0195     std::vector<double> Huval1tab;           ///< Hval1(i=0,0.5,1) for valence u
0196     std::vector<double> Hdval1tab;           ///< Hval1(i=0,0.5,1) for valence d
0197     std::vector<double> Huval1mtab;  ///< Hval1(i=0,0.5,1) for valence u for -xb
0198     std::vector<double> Hdval1mtab;  ///< Hval1(i=0,0.5,1) for valence d for -xb
0199     std::vector<double> Hs1tab; ///< Hs1(i=0,0.5,1,1.5) for sea, same for u, d, s
0200 
0201     std::vector<double> Euval1tab;               ///< Eval1(i=0,1) for valence u
0202     std::vector<double> Edval1tab;            ///< Eval1(i=0,..,7) for valence d
0203     std::vector<double> Euval1mtab;      ///< Eval1(i=0,1) for valence u for -xb
0204     std::vector<double> Edval1mtab;   ///< Eval1(i=0,..,7) for valence d for -xb
0205     std::vector<double> Es1tab;      ///< Es1(i=0,1,2) for sea, same for u, d, s
0206     std::vector<double> Ei1tab;                       ///< Ei1(i=0,1) for gluons
0207 
0208     std::vector<double> Htuval1tab;           ///< Htval1(i=0,1,2) for valence u
0209     std::vector<double> Htdval1tab;           ///< Htval1(i=0,1,2) for valence d
0210     std::vector<double> Htuval1mtab;  ///< Htval1(i=0,1,2) for valence u for -xb
0211     std::vector<double> Htdval1mtab;  ///< Htval1(i=0,1,2) for valence d for -xb
0212     std::vector<double> Hti1tab;                 ///< Hti1(i=0,0.5,1) for gluons
0213 
0214     std::vector<double> Etuval1tab;         ///< Etval1(i=0,1,2,3) for valence u
0215     std::vector<double> Etdval1tab;         ///< Etval1(i=0,1,2,3) for valence d
0216     std::vector<double> Etuval1mtab; ///< Etval1(i=0,1,2,3) for valence u for -xb
0217     std::vector<double> Etdval1mtab; ///< Etval1(i=0,1,2,3) for valence d for -xb
0218 
0219     void calculateHKas();
0220     void calculateEKas();
0221     void calculateHtKas();
0222     void calculateEtKas();
0223 
0224     double Et_pole(double x); ///< Pion pole contribution to Et
0225 
0226     double Hi1(double x, double i, double k);
0227     double Hs1(double x, double i, double k);
0228     double Hval1(double x, double i, double k);
0229     double Ei1(double x, double i, double k);
0230     double Es1(double x, double i, double k);
0231     double Eval1(double x, double i, double k);
0232     double Hti1(double x, double i, double k);
0233     double Htval1(double x, double i, double k);
0234     double Etval1(double x, double i, double k);
0235 
0236     double Hi1_alt(double x, double i, double k);
0237     double Hs1_alt(double x, double i, double k);
0238     double Hval1_alt(double x, double i, double k);
0239     double Ei1_alt(double x, double i, double k);
0240     double Es1_alt(double x, double i, double k);
0241     double Eval1_alt(double x, double i, double k);
0242     double Hti1_alt(double x, double i, double k);
0243     double Htval1_alt(double x, double i, double k);
0244     double Etval1_alt(double x, double i, double k);
0245 
0246 };
0247 
0248 } /* namespace PARTONS */
0249 
0250 #endif /* GPD_GK11_H */