Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-02 08:17:13

0001 //
0002 // APFEL++ 2017
0003 //
0004 // Author: Valerio Bertone: valerio.bertone@cern.ch
0005 //
0006 
0007 #pragma once
0008 
0009 #include "apfel/expression.h"
0010 #include "apfel/massivezerocoefficientfunctionsunp_sl.h"
0011 
0012 #include <vector>
0013 
0014 namespace apfel
0015 {
0016   /// @cond UNNECESSARY
0017   /**
0018    * @name Fortran massive coefficient functions
0019    * Fortran functions for the O(&alpha;<SUB>s</SUB><SUP>2</SUP>)
0020    * coefficient functions from 'src/structurefunctions/hqcoef.f'. Use
0021    * the analytic expressions whenever available.
0022    */
0023   ///@{
0024   extern"C"
0025   {
0026     double c2log_(double *wr,double *xi);
0027     double cllog_(double *wr,double *xi);
0028     double d2nloq_(double *wr,double *xi);
0029     double dlnloq_(double *wr,double *xi);
0030     double c2nlog_(double *wr,double *xi);
0031     double clnlog_(double *wr,double *xi);
0032     double c2nloq_(double *wr,double *xi);
0033     double clnloq_(double *wr,double *xi);
0034     double c2nlobarg_(double *wr,double *xi);
0035     double clnlobarg_(double *wr,double *xi);
0036     double c2nlobarq_(double *wr,double *xi);
0037     double clnlobarq_(double *wr,double *xi);
0038   }
0039   ///@}
0040   /// \endcond
0041 
0042   /**
0043    * @defgroup NCMassive Massive neutral-current coefficient functions
0044    * Collection of the neutral-current massive coefficient functions
0045    * for F<SUB>2</SUB> and F<SUB>L</SUB> up to O(&alpha;<SUB>s</SUB>).
0046    * @note In the following 'xi' indicates the ratio Q<SUP>2</SUP> /
0047    * M<SUP>2</SUP>.
0048    */
0049   ///@{
0050   /**
0051    * @defgroup LO LO massive coefficient functions
0052    * @ingroup NCMassive
0053    */
0054   ///@{
0055   /**
0056    * @brief O(&alpha;<SUB>s</SUB>) gluon coefficient function for
0057    * F2. See eq. (53) of https://arxiv.org/pdf/1001.2312.pdf. Or it
0058    * uses the fortran routines in 'src/dis/hqcoef.f'
0059    */
0060   class Cm21gNC: public Expression
0061   {
0062   public:
0063     Cm21gNC(double const& eta);
0064     double Regular(double const& x) const;
0065   private:
0066     double const _eta;
0067   };
0068 
0069   /**
0070    * @brief O(&alpha;<SUB>s</SUB>) gluon coefficient function for FL.
0071    */
0072   class CmL1gNC: public Expression
0073   {
0074   public:
0075     CmL1gNC(double const& eta);
0076     double Regular(double const& x) const;
0077   private:
0078     double const _eta;
0079   };
0080   ///@}
0081 
0082   /**
0083    * @defgroup NLO NLO massive coefficient functions
0084    * @ingroup NCMassive
0085    */
0086   ///@{
0087   /**
0088    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) non-singlet coefficient
0089    * function for F2. See Appendix A of
0090    * https://arxiv.org/pdf/hep-ph/9601302.pdf. Or it uses the fortran
0091    * routines in 'src/dis/hqcoef.f'
0092    */
0093   class Cm22nsNC: public Expression
0094   {
0095   public:
0096     Cm22nsNC(double const& eta);
0097     double Regular(double const& x) const;
0098     double Local(double const&)     const;
0099   private:
0100     double const _eta;
0101     double       _adler;
0102   };
0103 
0104   /**
0105    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) non-singlet coefficient
0106    * function for FL. See Appendix A of
0107    * https://arxiv.org/pdf/hep-ph/9601302.pdf. Or it uses the fortran
0108    * routines in 'src/dis/hqcoef.f'
0109    */
0110   class CmL2nsNC: public Expression
0111   {
0112   public:
0113     CmL2nsNC(double const& eta);
0114     double Regular(double const& x) const;
0115   private:
0116     double const _eta;
0117   };
0118 
0119   /**
0120    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) gluon coefficient
0121    * function for F2. Uses the fortran routines in 'src/dis/hqcoef.f'
0122    */
0123   class Cm22gNC: public Expression
0124   {
0125   public:
0126     Cm22gNC(double const& eta);
0127     double Regular(double const& x) const;
0128   private:
0129     double const _eta;
0130   };
0131 
0132   /**
0133    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) gluon coefficient
0134    * function for FL. Uses the fortran routines in 'src/dis/hqcoef.f'
0135    */
0136   class CmL2gNC: public Expression
0137   {
0138   public:
0139     CmL2gNC(double const& eta);
0140     double Regular(double const& x) const;
0141   private:
0142     double const _eta;
0143   };
0144 
0145   /**
0146    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) pure-singlet
0147    * coefficient function for F2. Uses the fortran routines in
0148    * 'src/dis/hqcoef.f'
0149    */
0150   class Cm22psNC: public Expression
0151   {
0152   public:
0153     Cm22psNC(double const& eta);
0154     double Regular(double const& x) const;
0155   private:
0156     double const _eta;
0157   };
0158 
0159   /**
0160    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) pure-singlet
0161    * coefficient function for FL. Uses the fortran routines in
0162    * 'src/dis/hqcoef.f'
0163    */
0164   class CmL2psNC: public Expression
0165   {
0166   public:
0167     CmL2psNC(double const& eta);
0168     double Regular(double const& x) const;
0169   private:
0170     double const _eta;
0171   };
0172 
0173   /**
0174    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) gluon coefficient
0175    * function proportional to ln(Q<SUP>2</SUP>/M<SUP>2</SUP>) for
0176    * F2. Uses the fortran routines in 'src/dis/hqcoef.f'
0177    */
0178   class Cm22bargNC: public Expression
0179   {
0180   public:
0181     Cm22bargNC(double const& eta);
0182     double Regular(double const& x) const;
0183   private:
0184     double const _eta;
0185   };
0186 
0187   /**
0188    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) gluon coefficient
0189    * function proportional to ln(Q<SUP>2</SUP>/M<SUP>2</SUP>) for
0190    * FL. Uses the fortran routines in 'src/dis/hqcoef.f'
0191    */
0192   class CmL2bargNC: public Expression
0193   {
0194   public:
0195     CmL2bargNC(double const& eta);
0196     double Regular(double const& x) const;
0197   private:
0198     double const _eta;
0199   };
0200 
0201   /**
0202    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) pure-singlet
0203    * coefficient function proportional to
0204    * ln(Q<SUP>2</SUP>/M<SUP>2</SUP>) for F2. Uses the fortran routines
0205    * in 'src/dis/hqcoef.f'
0206    */
0207   class Cm22barpsNC: public Expression
0208   {
0209   public:
0210     Cm22barpsNC(double const& eta);
0211     double Regular(double const& x) const;
0212   private:
0213     double const _eta;
0214   };
0215 
0216   /**
0217    * @brief O(&alpha;<SUB>s</SUB><SUP>2</SUP>) pure-singlet
0218    * coefficient function proportional to
0219    * ln(Q<SUP>2</SUP>/M<SUP>2</SUP>) for FL. Uses the fortran routines
0220    * in 'src/dis/hqcoef.f'
0221    */
0222   class CmL2barpsNC: public Expression
0223   {
0224   public:
0225     CmL2barpsNC(double const& eta);
0226     double Regular(double const& x) const;
0227   private:
0228     double const _eta;
0229   };
0230   ///@}
0231 
0232   /**
0233    * @defgroup NNLOthr Threshold limit of NNLO massive coefficient functions
0234    * @ingroup NCMassive
0235    */
0236   ///@{
0237   /**
0238    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0239    * function for F2 near threshold. Reference:
0240    * https://arxiv.org/pdf/1205.5727.
0241    */
0242   class Cmth23gNC: public Expression
0243   {
0244   public:
0245     Cmth23gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0246     double Regular(double const& x) const;
0247     double Delta(double const& x) const;
0248   private:
0249     int     const _nf;
0250     double  const _eta;
0251     bool    const _muterms;
0252     int     const _imod;
0253     Cm21gNC const _c21g;
0254   };
0255 
0256   /**
0257    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0258    * function for FL near threshold. Reference:
0259    * https://arxiv.org/pdf/1205.5727.
0260    */
0261   class CmthL3gNC: public Expression
0262   {
0263   public:
0264     CmthL3gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0265     double Regular(double const& x) const;
0266     double Delta(double const& x) const;
0267   private:
0268     int     const _nf;
0269     double  const _eta;
0270     bool    const _muterms;
0271     int     const _imod;
0272     CmL1gNC const _cL1g;
0273   };
0274   ///@}
0275 
0276   /**
0277    * @defgroup NNLOsx Small-x limit of NNLO massive coefficient functions
0278    * @ingroup NCMassive
0279    */
0280   ///@{
0281   /**
0282    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0283    * function for F2 at small x. Reference:
0284    * https://arxiv.org/pdf/1205.5727.
0285    */
0286   class Cmsx23gNC: public Expression
0287   {
0288   public:
0289     Cmsx23gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0290     double Regular(double const& x) const;
0291     double CoefficientLL() const { return _cll; }
0292     double CoefficientNLLCentral() const { return _cnllc; }
0293     double CoefficientNLLVariation() const { return _cnllv; }
0294   private:
0295     int    const _nf;
0296     bool   const _muterms;
0297     int    const _imod;
0298     double       _cll;
0299     double       _cnllc;
0300     double       _cnllv;
0301   };
0302 
0303   /**
0304    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) pure-singlet
0305    * coefficient function for F2 at small x. Reference:
0306    * https://arxiv.org/pdf/1205.5727.
0307    */
0308   class Cmsx23psNC: public Expression
0309   {
0310   public:
0311     Cmsx23psNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0312     double Regular(double const& x) const;
0313     double CoefficientLL() const;
0314     double CoefficientNLLCentral() const;
0315     double CoefficientNLLVariation() const;
0316   private:
0317     Cmsx23gNC const _c23g;
0318   };
0319 
0320   /**
0321    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0322    * function for FL at small x. Reference:
0323    * https://arxiv.org/pdf/1205.5727.
0324    */
0325   class CmsxL3gNC: public Expression
0326   {
0327   public:
0328     CmsxL3gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0329     double Regular(double const& x) const;
0330     double CoefficientLL() const { return _cll; }
0331     double CoefficientNLLCentral() const { return _cnllc; }
0332     double CoefficientNLLVariation() const { return _cnllv; }
0333   private:
0334     int    const _nf;
0335     bool   const _muterms;
0336     int    const _imod;
0337     double       _cll;
0338     double       _cnllc;
0339     double       _cnllv;
0340   };
0341 
0342   /**
0343    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) pure-singlet
0344    * coefficient function for FL at small x. Reference:
0345    * https://arxiv.org/pdf/1205.5727.
0346    */
0347   class CmsxL3psNC: public Expression
0348   {
0349   public:
0350     CmsxL3psNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0351     double Regular(double const& x) const;
0352     double CoefficientLL() const;
0353     double CoefficientNLLCentral() const;
0354     double CoefficientNLLVariation() const;
0355   private:
0356     CmsxL3gNC const _cL3g;
0357   };
0358   ///@}
0359 
0360   /**
0361    * @defgroup NNLOm0sx Small-x and Q >> m limit of NNLO massive coefficient functions
0362    * @ingroup NCMassive
0363    */
0364   ///@{
0365   /**
0366    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0367    * function for F2 at Q >> m and small x. Reference:
0368    * https://arxiv.org/pdf/1205.5727.
0369    */
0370   class Cm0sx23gNC: public Expression
0371   {
0372   public:
0373     Cm0sx23gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0374     double Regular(double const& x) const;
0375     double CoefficientLL() const { return _cll; }
0376     double CoefficientNLLCentral() const { return _cnllc; }
0377     double CoefficientNLLVariation() const { return _cnllv; }
0378   private:
0379     int    const _nf;
0380     bool   const _muterms;
0381     int    const _imod;
0382     double       _cll;
0383     double       _cnllc;
0384     double       _cnllv;
0385   };
0386 
0387   /**
0388    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) pure-singlet
0389    * coefficient function for F2 at Q >> m and small x. Reference:
0390    * https://arxiv.org/pdf/1205.5727.
0391    */
0392   class Cm0sx23psNC: public Expression
0393   {
0394   public:
0395     Cm0sx23psNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0396     double Regular(double const& x) const;
0397     double CoefficientLL() const;
0398     double CoefficientNLLCentral() const;
0399     double CoefficientNLLVariation() const;
0400   private:
0401     Cm0sx23gNC const _c23g;
0402   };
0403 
0404   /**
0405    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon coefficient
0406    * function for FL at Q >> m and small x. Reference:
0407    * https://arxiv.org/pdf/1205.5727.
0408    */
0409   class Cm0sxL3gNC: public Expression
0410   {
0411   public:
0412     Cm0sxL3gNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0413     double Regular(double const& x) const;
0414     double CoefficientLL() const { return _cll; }
0415     double CoefficientNLLCentral() const { return _cnllc; }
0416     double CoefficientNLLVariation() const { return _cnllv; }
0417   private:
0418     int    const _nf;
0419     bool   const _muterms;
0420     int    const _imod;
0421     double       _cll;
0422     double       _cnllc;
0423     double       _cnllv;
0424   };
0425 
0426   /**
0427    * @brief O(&alpha;<SUB>s</SUB><SUP>3</SUP>) pure-singlet
0428    * coefficient function for FL at Q >> m and small x. Reference:
0429    * https://arxiv.org/pdf/1205.5727.
0430    */
0431   class Cm0sxL3psNC: public Expression
0432   {
0433   public:
0434     Cm0sxL3psNC(int const& nf, double const& eta, bool const& muterms = true, int const& imod = 0);
0435     double Regular(double const& x) const;
0436     double CoefficientLL() const;
0437     double CoefficientNLLCentral() const;
0438     double CoefficientNLLVariation() const;
0439   private:
0440     Cm0sxL3gNC const _cL3g;
0441   };
0442   ///@}
0443 
0444   /**
0445    * @defgroup NNLO Approximated NNLO massive coefficient functions
0446    * @note They are obtained as a combination of small-x, large-x, and
0447    * Q >> m limits. The original idea is that of
0448    * https://arxiv.org/pdf/1205.5727. Here we use the implementation
0449    * presented in the code ADANI
0450    * (https://github.com/niclaurenti/adani).
0451    * @ingroup NCMassive
0452    */
0453   ///@{
0454   /**
0455    * @brief Approximated O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon
0456    * coefficient function for F2.
0457    */
0458   class Cm2a3gNC: public Expression
0459   {
0460   public:
0461     Cm2a3gNC(int const& nf, double const& eta, double const& imodthr = 0, double const& imodasy = 0, double const& damppow = 1, bool const& muterms = true);
0462     double Regular(double const& x) const;
0463   private:
0464     double      const _eta;
0465     double      const _imodthr;
0466     double      const _imodasy;
0467     double      const _damppow;
0468     Cmth23gNC   const _cmth23g;
0469     Cm023gNC_c  const _cm023g_c;
0470     Cm023gNC_l  const _cm023g_l;
0471     Cm023gNC_l2 const _cm023g_l2;
0472     Cm023gNC_l3 const _cm023g_l3;
0473     Cmsx23gNC   const _cmsx23g;
0474     Cm0sx23gNC  const _cm0sx23g;
0475     double            _cllsx;
0476     double            _cllsx0;
0477     double            _cnllcsx;
0478     double            _cnllcsx0;
0479     double            _cnllvsx;
0480     double            _cnllvsx0;
0481   };
0482 
0483   /**
0484    * @brief Approximated O(&alpha;<SUB>s</SUB><SUP>3</SUP>)
0485    * pure-singlet coefficient function for F2.
0486    */
0487   class Cm2a3psNC: public Expression
0488   {
0489   public:
0490     Cm2a3psNC(int const& nf, double const& eta, double const& imodasy = 0, double const& damppow = 1, bool const& muterms = true);
0491     double Regular(double const& x) const;
0492   private:
0493     double       const _eta;
0494     double       const _imodasy;
0495     double       const _damppow;
0496     Cm023psNC_c  const _cm023ps_c;
0497     Cm023psNC_l  const _cm023ps_l;
0498     Cm023psNC_l2 const _cm023ps_l2;
0499     Cm023psNC_l3 const _cm023ps_l3;
0500     Cmsx23psNC   const _cmsx23ps;
0501     Cm0sx23psNC  const _cm0sx23ps;
0502     double             _cllsx;
0503     double             _cllsx0;
0504     double             _cnllcsx;
0505     double             _cnllcsx0;
0506     double             _cnllvsx;
0507     double             _cnllvsx0;
0508   };
0509 
0510   /**
0511    * @brief Approximated O(&alpha;<SUB>s</SUB><SUP>3</SUP>) gluon
0512    * coefficient function for FL.
0513    */
0514   class CmLa3gNC: public Expression
0515   {
0516   public:
0517     CmLa3gNC(int const& nf, double const& eta, double const& imodthr = 0, double const& imodasy = 0, double const& damppow = 1, bool const& muterms = true);
0518     double Regular(double const& x) const;
0519   private:
0520     double      const _eta;
0521     double      const _imodthr;
0522     double      const _imodasy;
0523     double      const _damppow;
0524     CmthL3gNC   const _cmthL3g;
0525     Cm0L3gNC_c  const _cm0L3g_c;
0526     Cm0L3gNC_l  const _cm0L3g_l;
0527     Cm0L3gNC_l2 const _cm0L3g_l2;
0528     CmsxL3gNC   const _cmsxL3g;
0529     Cm0sxL3gNC  const _cm0sxL3g;
0530     double            _cllsx;
0531     double            _cllsx0;
0532     double            _cnllcsx;
0533     double            _cnllcsx0;
0534     double            _cnllvsx;
0535     double            _cnllvsx0;
0536   };
0537 
0538   /**
0539    * @brief Approximated O(&alpha;<SUB>s</SUB><SUP>3</SUP>)
0540    * pure-singlet coefficient function for FL.
0541    */
0542   class CmLa3psNC: public Expression
0543   {
0544   public:
0545     CmLa3psNC(int const& nf, double const& eta, double const& imodasy = 0, double const& damppow = 1, bool const& muterms = true);
0546     double Regular(double const& x) const;
0547   private:
0548     double       const _eta;
0549     double       const _imodasy;
0550     double       const _damppow;
0551     Cm0L3psNC_c  const _cm0L3ps_c;
0552     Cm0L3psNC_l  const _cm0L3ps_l;
0553     Cm0L3psNC_l2 const _cm0L3ps_l2;
0554     CmsxL3psNC   const _cmsxL3ps;
0555     Cm0sxL3psNC  const _cm0sxL3ps;
0556     double             _cllsx;
0557     double             _cllsx0;
0558     double             _cnllcsx;
0559     double             _cnllcsx0;
0560     double             _cnllvsx;
0561     double             _cnllvsx0;
0562   };
0563   ///@}
0564 
0565   /**
0566    * @defgroup NLOhq NLO massive heavy-quark-initiated coefficient functions
0567    * Collection of the massive coefficient functions for processes
0568    * with a massive heavy quark in the intial state. These coefficient
0569    * functions can be used both in the neutral-current and in the
0570    * charged-current cases.
0571    * @note All the expressions of the one-loop coefficient functions
0572    * are extracted from https://arxiv.org/pdf/hep-ph/9805233.pdf. The
0573    * coefficient function C is witten in terms of the private _R
0574    * function such that:
0575    *
0576    * C(x) = ( _R(x) - _R(1) ) / ( 1 - x ) + _R(x) / ( 1 - x )_+ + ( L + _R(1) ) delta( 1- x )
0577    *
0578    * @ingroup NCMassive
0579    */
0580   ///@{
0581   /**
0582    * @brief O(&alpha;<SUB>s</SUB>) non-singlet coefficient function
0583    * for 2xF1. The relevant function is in Eq. (C4) of
0584    * https://arxiv.org/pdf/hep-ph/9805233.pdf.
0585    */
0586   class Cm11ns: public Expression
0587   {
0588   public:
0589     Cm11ns(double const& m1, double const& m2, double const& Q, double const& Splus, double const& Sminus);
0590     double Regular(double const& x)  const;
0591     double Singular(double const& x) const;
0592     double Local(double const& x)    const;
0593   private:
0594     double _R(double const& x) const;
0595     double const _m1;
0596     double const _m2;
0597     double const _Splus;
0598     double const _Sminus;
0599     double const _m12;
0600     double const _m22;
0601     double const _Q2;
0602     double const _Del;
0603     double const _Del2;
0604     double const _Spp;
0605     double const _Spm;
0606     double const _Smp;
0607     double const _fact1;
0608     double _S1;
0609     double _V1;
0610     double _R1;
0611   };
0612 
0613   /**
0614    * @brief O(&alpha;<SUB>s</SUB>) non-singlet coefficient function
0615    * for F2. The relevant function is in Eq. (C4) of
0616    * https://arxiv.org/pdf/hep-ph/9805233.pdf.
0617    */
0618   class Cm21ns: public Expression
0619   {
0620   public:
0621     Cm21ns(double const& m1, double const& m2, double const& Q, double const& Splus, double const& Sminus);
0622     double Regular(double const& x)  const;
0623     double Singular(double const& x) const;
0624     double Local(double const& x)    const;
0625   private:
0626     double _R(double const& x) const;
0627     double const _m1;
0628     double const _m2;
0629     double const _Splus;
0630     double const _Sminus;
0631     double const _m12;
0632     double const _m22;
0633     double const _Q2;
0634     double const _Del;
0635     double const _Del2;
0636     double const _Spp;
0637     double const _Spm;
0638     double const _Smp;
0639     double const _fact2;
0640     double _S2;
0641     double _V2;
0642     double _R1;
0643   };
0644 
0645   /**
0646    * @brief O(&alpha;<SUB>s</SUB>) non-singlet coefficient function
0647    * for F3. The relevant function is in Eq. (C4) of
0648    * https://arxiv.org/pdf/hep-ph/9805233.pdf.
0649    */
0650   class Cm31ns: public Expression
0651   {
0652   public:
0653     Cm31ns(double const& m1, double const& m2, double const& Q, double const& Rplus, double const& Rminus);
0654     double Regular(double const& x)  const;
0655     double Singular(double const& x) const;
0656     double Local(double const& x)    const;
0657   private:
0658     double _R(double const& x) const;
0659     double const _m1;
0660     double const _m2;
0661     double const _Rplus;
0662     double const _Rminus;
0663     double const _m12;
0664     double const _m22;
0665     double const _Q2;
0666     double const _Del;
0667     double const _Del2;
0668     double const _Spp;
0669     double const _Spm;
0670     double const _Smp;
0671     double const _fact3;
0672     double _S3;
0673     double _V3;
0674     double _R1;
0675   };
0676 
0677   /**
0678    * @brief O(&alpha;<SUB>s</SUB>) non-singlet coefficient function
0679    * for FL = F2 - 2xF1. The relevant function is in Eq. (C4) of
0680    * https://arxiv.org/pdf/hep-ph/9805233.pdf.
0681    */
0682   class CmL1ns: public Expression
0683   {
0684   public:
0685     CmL1ns(double const& m1, double const& m2, double const& Q, double const& Splus, double const& Sminus);
0686     double Regular(double const& x)  const;
0687     double Singular(double const& x) const;
0688     double Local(double const& x)    const;
0689   private:
0690     Cm11ns const _C1;
0691     Cm21ns const _C2;
0692     double const _factL;
0693   };
0694   ///@}
0695   ///@}
0696 
0697   /**
0698    * @defgroup CCMassive Massive charged-current coefficient functions
0699    * Collection of the charged-current massive coefficient functions
0700    * for F<SUB>2</SUB>, F<SUB>2</SUB>, and xF<SUB>3</SUB> to
0701    * O(&alpha;<SUB>s</SUB>). Expressions taken from
0702    * https://arxiv.org/pdf/hep-ph/9603304.pdf.
0703    * @note In the following 'xi' indicates the ratio Q<SUP>2</SUP> /
0704    * M<SUP>2</SUP>.
0705    */
0706   ///@{
0707   /**
0708    * @defgroup NLO NLO massive coefficient functions
0709    * @ingroup CCMassive
0710    */
0711   ///@{
0712   /**
0713    * @brief O(&alpha;<SUB>s</SUB>) quark coefficient function for F2.
0714    */
0715   class Cm21qCC: public Expression
0716   {
0717   public:
0718     Cm21qCC(double const& lambda);
0719     double Regular(double const& x)  const;
0720     double Singular(double const& x) const;
0721     double Local(double const& x)    const;
0722   private:
0723     double const _lambda;
0724   };
0725 
0726   /**
0727    * @brief O(&alpha;<SUB>s</SUB>) gluon coefficient function for F2.
0728    */
0729   class Cm21gCC: public Expression
0730   {
0731   public:
0732     Cm21gCC(double const& lambda);
0733     double Regular(double const& x) const;
0734   private:
0735     double const _lambda;
0736   };
0737 
0738   /**
0739    * @brief O(&alpha;<SUB>s</SUB>) quark coefficient function for FL.
0740    */
0741   class CmL1qCC: public Expression
0742   {
0743   public:
0744     CmL1qCC(double const& lambda);
0745     double Regular(double const& x)  const;
0746     double Singular(double const& x) const;
0747     double Local(double const& x)    const;
0748   private:
0749     double const _lambda;
0750   };
0751 
0752   /**
0753    * @brief O(&alpha;<SUB>s</SUB>) gluon coefficient function for FL.
0754    */
0755   class CmL1gCC: public Expression
0756   {
0757   public:
0758     CmL1gCC(double const& lambda);
0759     double Regular(double const& x) const;
0760   private:
0761     double const _lambda;
0762   };
0763 
0764   /**
0765    * @brief O(&alpha;<SUB>s</SUB>) quark coefficient function for xF3.
0766    */
0767   class Cm31qCC: public Expression
0768   {
0769   public:
0770     Cm31qCC(double const& lambda);
0771     double Regular(double const& x)  const;
0772     double Singular(double const& x) const;
0773     double Local(double const& x)    const;
0774   private:
0775     double const _lambda;
0776   };
0777 
0778   /**
0779    * @brief O(&alpha;<SUB>s</SUB>) gluon coefficient function for xF3.
0780    */
0781   class Cm31gCC: public Expression
0782   {
0783   public:
0784     Cm31gCC(double const& lambda);
0785     double Regular(double const& x) const;
0786   private:
0787     double const _lambda;
0788   };
0789   ///@}
0790 }