Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef DVCS_CFF_STANDARD_H
0002 #define DVCS_CFF_STANDARD_H
0003 
0004 /**
0005  * @file DVCSCFFStandard.h
0006  * @author Bryan BERTHOU (SPhN / CEA Saclay)
0007  * @author Hervé MOUTARDE (SPhN / CEA Saclay)
0008  * @date September 08, 2014
0009  * @version 1.0
0010  */
0011 
0012 #include <stddef.h>
0013 #include <complex>
0014 #include <map>
0015 #include <string>
0016 #include <vector>
0017 
0018 #include "../../../beans/automation/BaseObjectData.h"
0019 #include "DVCSConvolCoeffFunctionModule.h"
0020 
0021 namespace NumA {
0022 class FunctionType1D;
0023 } /* namespace NumA */
0024 namespace PARTONS {
0025 class PartonDistribution;
0026 } /* namespace PARTONS */
0027 
0028 namespace PARTONS {
0029 
0030 /**
0031  * @class DVCSCFFStandard
0032  *
0033  * TODO: Add description.
0034  *
0035  * Available CFF types: H, E, Ht, Et.
0036  */
0037 class DVCSCFFStandard: public DVCSConvolCoeffFunctionModule {
0038 public:
0039 
0040     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0041 
0042     /**
0043      * Constructor.
0044      * See BaseObject::BaseObject and ModuleObject::ModuleObject for more details.
0045      * @param className Name of last child class.
0046      */
0047     DVCSCFFStandard(const std::string &className);
0048 
0049     virtual DVCSCFFStandard* clone() const;
0050 
0051     /**
0052      * Default destructor.
0053      */
0054     virtual ~DVCSCFFStandard();
0055 
0056     virtual void resolveObjectDependencies();
0057 
0058     void prepareSubModules(
0059             const std::map<std::string, BaseObjectData>& subModulesData);
0060 
0061     // ##### GETTERS & SETTERS #####
0062 
0063     /**
0064      * Get alphaS module.
0065      */
0066     RunningAlphaStrongModule* getRunningAlphaStrongModule() const;
0067 
0068     /**
0069      * Set alphaS module.
0070      */
0071     void setRunningAlphaStrongModule(
0072             RunningAlphaStrongModule* pRunningAlphaStrongModule);
0073 
0074 protected:
0075     /**
0076      * Copy constructor.
0077      * @param other
0078      */
0079     DVCSCFFStandard(const DVCSCFFStandard &other);
0080 
0081     double m_logQ2OverMu2;
0082 
0083     virtual void initModule();
0084     virtual void isModuleWellConfigured();
0085 
0086     virtual std::complex<double> KernelGluonNLOA(double x); ///< T^{g, NLO, A}, appendix A, eq. (A2)
0087     virtual std::complex<double> KernelGluonNLOV(double x); ///< T^{g, NLO, V}, appendix A, eq. (A2)
0088 
0089     virtual std::complex<double> KernelQuarkNLOV(double x); ///< T^{q, NLO, V}, appendix A, eq. (A2)
0090     virtual std::complex<double> KernelQuarkNLOA(double x); ///< T^{q, NLO, A}, appendix A, eq. (A2)
0091 
0092     virtual void computeSubtractionFunctionsV();
0093     virtual void computeSubtractionFunctionsA();
0094 
0095     double m_realPartSubtractQuark;
0096     double m_imaginaryPartSubtractQuark;
0097     double m_realPartSubtractGluon;
0098     double m_imaginaryPartSubtractGluon;
0099     double m_CF;                     ///< ( Nc^2 - 1 ) / ( 2 Nc ) (colour)
0100 
0101     double m_Zeta;
0102     double m_Q;
0103     double m_alphaSOver2Pi;
0104 
0105     virtual std::complex<double> computeUnpolarized();
0106     virtual std::complex<double> computePolarized();
0107 
0108 private:
0109 
0110     double m_quarkDiagonal;
0111     double m_gluonDiagonal;
0112 
0113     size_t m_nf; ///< Number of active flavors.
0114     RunningAlphaStrongModule *m_pRunningAlphaStrongModule; ///< Related alphaS module.
0115 
0116     virtual void computeDiagonalGPD();
0117 
0118     virtual std::complex<double> KernelQuarkV(double x); ///< T^{q, V/A}, appendix A, eq. (A1)
0119     virtual std::complex<double> KernelGluonV(double x); ///< T^{g, V/A}, appendix A, eq. (A1)
0120 
0121     virtual double ConvolReKernelQuark1V(double x, std::vector<double> params); ///< eq. (8), real part of amplitude, \int_0^zeta
0122     virtual double ConvolReKernelQuark2V(double x, std::vector<double> params); ///< eq. (8), real part of amplitude, \int_zeta^1
0123     virtual double ConvolImKernelQuarkV(double x, std::vector<double> params); ///< eq. (8), imaginary part of amplitude
0124     virtual double ConvolReKernelGluon1V(double x, std::vector<double> params); ///< eq. (9), real part of amplitude, \int_0^zeta
0125     virtual double ConvolReKernelGluon2V(double x, std::vector<double> params); ///< eq. (9), real part of amplitude, \int_zeta^1
0126     virtual double ConvolImKernelGluonV(double x, std::vector<double> params); ///< eq. (9), imaginary part of amplitude
0127 
0128     virtual std::complex<double> KernelQuarkA(double x); ///< T^{q, V/A}, appendix A, eq. (A1)
0129     virtual std::complex<double> KernelGluonA(double x); ///< T^{g, V/A}, appendix A, eq. (A1)
0130 
0131     virtual double ConvolReKernelQuark1A(double x, std::vector<double> params); ///< eq. (8), real part of amplitude, \int_0^zeta
0132     virtual double ConvolReKernelQuark2A(double x, std::vector<double> params); ///< eq. (8), real part of amplitude, \int_zeta^1
0133     virtual double ConvolImKernelQuarkA(double x, std::vector<double> params); ///< eq. (8), imaginary part of amplitude
0134     virtual double ConvolReKernelGluon1A(double x, std::vector<double> params); ///< eq. (9), real part of amplitude, \int_0^zeta
0135     virtual double ConvolReKernelGluon2A(double x, std::vector<double> params); ///< eq. (9), real part of amplitude, \int_zeta^1
0136     virtual double ConvolImKernelGluonA(double x, std::vector<double> params); ///< eq. (9), imaginary part of amplitude
0137 
0138     std::complex<double> computeIntegralsV();
0139     std::complex<double> computeIntegralsA();
0140 
0141     double computeSquareChargeAveragedGPD(
0142             const PartonDistribution &partonDistribution);
0143 
0144     NumA::FunctionType1D* m_pConvolReKernelQuark1V;
0145     NumA::FunctionType1D* m_pConvolReKernelQuark2V;
0146     NumA::FunctionType1D* m_pConvolImKernelQuarkV;
0147     NumA::FunctionType1D* m_pConvolReKernelGluon1V;
0148     NumA::FunctionType1D* m_pConvolReKernelGluon2V;
0149     NumA::FunctionType1D* m_pConvolImKernelGluonV;
0150     NumA::FunctionType1D* m_pConvolReKernelQuark1A;
0151     NumA::FunctionType1D* m_pConvolReKernelQuark2A;
0152     NumA::FunctionType1D* m_pConvolImKernelQuarkA;
0153     NumA::FunctionType1D* m_pConvolReKernelGluon1A;
0154     NumA::FunctionType1D* m_pConvolReKernelGluon2A;
0155     NumA::FunctionType1D* m_pConvolImKernelGluonA;
0156 
0157     void initFunctorsForIntegrations(); ///< Initialize functors.
0158 };
0159 
0160 } /* namespace PARTONS */
0161 
0162 #endif /* DVCS_CFF_STANDARD_H */