Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef DVMP_CFF_GK06_H
0002 #define DVMP_CFF_GK06_H
0003 
0004 /**
0005  * @file DVMPCFFGK06.h
0006  * @author Kemal Tezgin
0007  * @date October 21, 2019
0008  * @version 1.0
0009  */
0010 
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <stddef.h>
0013 #include <complex>
0014 #include <map>
0015 #include <string>
0016 #include <utility>
0017 
0018 #include "../../../beans/automation/BaseObjectData.h"
0019 #include "../../../beans/gpd/GPDType.h"
0020 #include "../../../beans/parton_distribution/PartonDistribution.h"
0021 #include "DVMPConvolCoeffFunctionModule.h"
0022 
0023 namespace PARTONS {
0024 
0025 /**
0026  * @class DVMPCFFGK06
0027  *
0028  * This module calculates helicity amplitudes and partial cross sections of exclusive pi0 and pi+
0029  *   leptoproduction formulated in Goloskokov-Kroll model
0030  *
0031  */
0032 class DVMPCFFGK06: public DVMPConvolCoeffFunctionModule {
0033 
0034 public:
0035 
0036     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0037 
0038     static const std::string PARAMETER_NAME_DVMPCFFGK06_MC_NWARMUP;
0039     static const std::string PARAMETER_NAME_DVMPCFFGK06_MC_NCALLS;
0040     static const std::string PARAMETER_NAME_DVMPCFFGK06_MC_CHI2LIMIT;
0041 
0042     /**
0043      * Constructor.
0044      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0045      * @param className Name of last child class.
0046      */
0047     DVMPCFFGK06(const std::string &className);
0048 
0049     virtual DVMPCFFGK06* clone() const;
0050 
0051     /**
0052      * Default destructor.
0053      */
0054     virtual ~DVMPCFFGK06();
0055 
0056     virtual void configure(const ElemUtils::Parameters &parameters);
0057     virtual void resolveObjectDependencies();
0058     virtual void prepareSubModules(
0059             const std::map<std::string, BaseObjectData>& subModulesData);
0060 
0061     /**
0062      * GSL wrapper to convolutionFunction().
0063      */
0064     static double gslWrapper0(double *xtaub, size_t dim, void *params);
0065 
0066     /**
0067      * GSL wrapper to convolutionTwist3BFunction().
0068      */
0069     static double gslWrapper1(double x, void * params);
0070 
0071     friend double gslWrapper0(double *xtaub, size_t dim, void *params);
0072     friend double gslWrapper1(double x, void * params);
0073 
0074     //*** SETTERS AND GETTERS ******************************************
0075 
0076     /**
0077      * Get alphaS module.
0078      */
0079     RunningAlphaStrongModule* getRunningAlphaStrongModule() const;
0080 
0081     /**
0082      * Set alphaS module.
0083      */
0084     void setRunningAlphaStrongModule(
0085             RunningAlphaStrongModule* pRunningAlphaStrongModule);
0086 
0087     /**
0088      * Get MC number of calls.
0089      */
0090     size_t getMcCalls() const;
0091 
0092     /**
0093      * Set MC number of calls.
0094      */
0095     void setMcCalls(size_t mcCalls);
0096 
0097     /**
0098      * Get MC chi2 limit.
0099      */
0100     double getMcChi2Limit() const;
0101 
0102     /**
0103      * Set MC chi2 limit.
0104      */
0105     void setMcChi2Limit(double mcChi2Limit);
0106 
0107     /**
0108      * Get MC number of calls (warm-up).
0109      */
0110     size_t getMcnWarmUp() const;
0111 
0112     /**
0113      * Set MC number of calls (warm-up).
0114      */
0115     void setMcnWarmUp(size_t mcnWarmUp);
0116 
0117 protected:
0118 
0119     /**
0120      * Copy constructor.
0121      * @param other
0122      */
0123     DVMPCFFGK06(const DVMPCFFGK06 &other);
0124 
0125     virtual void initModule();
0126     virtual void isModuleWellConfigured();
0127 
0128     virtual std::complex<double> computeCFF();
0129 
0130 private:
0131 
0132     const double m_cNf; ///< Number of active flavors.
0133     const double m_cLambdaQCD; ///< Lambda QCD
0134     const double m_EulerGamma; ///< Euler-Mascheroni Constant
0135     const double m_Nc; ///< Number of colors
0136     const double m_Cf; ///< Color factor
0137     const double m_muPi; ///> Parameter proportional to chiral condensate, see for instance Eq. (21) in arxiv:0906.0460
0138 
0139     double m_tmin; ///< Minimum t value
0140 
0141     size_t m_MCNWarmUp; ///< MC integration - number of calls in warm-up.
0142     size_t m_MCCalls; ///< MC integration - number of calls.
0143     double m_MCChi2Limit; ///< MC integration - chi2 limit.
0144 
0145     PartonDistribution m_gpdResultXiXi; ///< GPD result at x=xi.
0146 
0147     PartonDistribution m_gpdResultmXiXi; ///< GPD result at x=-xi.
0148 
0149     RunningAlphaStrongModule* m_pRunningAlphaStrongModule; ///< AlphaS module.
0150 
0151     //*** MISC FUNCTIONS *************************************************
0152 
0153     /**
0154      * Hankel function of the first kind.
0155      * @param z input of the function.
0156      */
0157     std::complex<double> HankelFunctionFirstKind(double z) const;
0158 
0159     /**
0160      * Renormalization scale. Taken to be the largest mass scale in the hard process amplitude.
0161      * @param tau Meson's momentum fraction.
0162      * @param b Impact-space parameter.
0163      */
0164     double computeMuR(double tau, double b) const;
0165 
0166     //*** AMPLITUDE INGRIDIENTS ******************************************
0167 
0168     /**
0169      * Sudakov factor.
0170      * @param tau Meson's momentum fraction.
0171      * @param b Impact-space parameter.
0172      */
0173     double expSudakovFactor(double tau, double b) const;
0174 
0175     /**
0176      * Sudakov factor function s.
0177      * @param tau Meson's momentum fraction.
0178      * @param b Impact-space parameter.
0179      */
0180     double sudakovFactorFunctionS(double tau, double b) const;
0181 
0182     /**
0183      * Meson wave function (Gaussian parameterization).
0184      * @param tau Meson's momentum fraction.
0185      * @param b Impact-space parameter.
0186      * @param twist Twist.
0187      */
0188     double mesonWF(double tau, double b, size_t twist) const;
0189 
0190     /**
0191      * Return decay constant and transverse size.
0192      * @param twist Twist.
0193      */
0194     std::pair<double, double> mesonWFParameters(size_t twist) const;
0195 
0196     /**
0197      * Unintegrated subprocess amplitude.
0198      * @param x Nucleon's momentum fraction.
0199      * @param tau Meson's momentum fraction.
0200      * @param b Impact-space parameter.
0201      * @param twist Twist.
0202      */
0203     std::complex<double> subProcess(double x, double tau, double b,
0204             size_t twist) const;
0205 
0206     /**
0207      * Get combination of GPDs as probed by the meson under consideration.
0208      * @param partonDistribution PartonDistribution object.
0209      */
0210     double getMesonGPDCombination(
0211             const PartonDistribution& partonDistribution) const;
0212 
0213     //*** AMPLITUDE ******************************************************
0214 
0215     /**
0216      * Evaluate convolution (twist-2).
0217      * @param gpdType GPD type.
0218      */
0219     std::complex<double> convolutionTwist2(GPDType::Type gpdType) const;
0220 
0221     /**
0222      * Evaluate convolution (twist-3, part A).
0223      * @param gpdType GPD type.
0224      */
0225     std::complex<double> convolutionTwist3A(GPDType::Type gpdType) const;
0226 
0227     /**
0228      * Evaluate convolution (twist-3, part B).
0229      * @param gpdType GPD type.
0230      */
0231     std::complex<double> convolutionTwist3B(GPDType::Type gpdType) const;
0232 
0233     /**
0234      * Evaluate convolution (twist-3, part C).
0235      * @param gpdType GPD type.
0236      */
0237     std::complex<double> convolutionTwist3C(GPDType::Type gpdType) const;
0238 
0239     /**
0240      * Evaluate convolution using 3D MC integration (any twist).
0241      * @param gpdType GPD type.
0242      * @param twist Twist.
0243      */
0244     std::complex<double> convolution(GPDType::Type gpdType, size_t twist) const;
0245 
0246     /**
0247      * Function to be used in the evaluation of VEGAS Monte Carlo integration.
0248      * @param *xtaub takes an array of variables x, tau and b.
0249      * @param dim is the dimension of VEGAS Monte Carlo integration, set to be 3.
0250      * @param params is the parameters to be given in the VEGAS Monte Carlo integration.
0251      */
0252     double convolutionFunction(double *xtaub, size_t dim, void *params) const;
0253 
0254     /**
0255      * Function to be used in the evaluation of 1D integration.
0256      * @param x Variable x.
0257      * @param params Parameters to be given in the integration.
0258      */
0259     double convolutionTwist3BFunction(double x, void * params) const;
0260 };
0261 
0262 } /* namespace PARTONS */
0263 
0264 #endif /* DVMP_CFF_GK06_H */