Back to home page

EIC code displayed by LXR

 
 

    


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

0001 //
0002 // APFEL++ 2017
0003 //
0004 // Author: Valerio Bertone: valerio.bertone@cern.ch
0005 //
0006 
0007 #pragma once
0008 
0009 #include "apfel/matchedevolution.h"
0010 #include "apfel/matrix.h"
0011 #include "apfel/tools.h"
0012 
0013 #include <functional>
0014 
0015 namespace apfel
0016 {
0017   /**
0018    * @brief The AlphaQCDQED is a specialization class of the
0019    * MatchedEvolution class for the computation of the mixed evolution
0020    * of QCD and QED.
0021    */
0022   class AlphaQCDQED: public MatchedEvolution<matrix<double>>
0023   {
0024   public:
0025     /**
0026      * @name Constructors
0027      * List of constructors.
0028      */
0029     ///@{
0030     AlphaQCDQED() = delete;
0031 
0032     /**
0033      * @brief AlphaQCDQED constructor.
0034      * @param AlphaQCDRef: the reference value of the QCD coupling
0035      * @param AlphaQEDRef: the reference value of the QED coupling
0036      * @param MuRef: the reference value of the scale
0037      * @param QuarkThresholds: vector of quark thresholds
0038      * @param LeptThresholds: vector of lepton thresholds
0039      * @param pt: perturbative order
0040      * @param nsteps: number of steps of the ODE solver
0041      * @note No displaced thresholds allowed.
0042      */
0043     AlphaQCDQED(double              const& AlphaQCDRef,
0044                 double              const& AlphaQEDRef,
0045                 double              const& MuRef,
0046                 std::vector<double> const& QuarkThresholds,
0047                 std::vector<double> const& LeptThresholds,
0048                 int                 const& pt,
0049                 int                 const& nsteps = 10);
0050     ///@}
0051 
0052     /**
0053      * @brief Function for the computation of the matching.
0054      * @param Up: tells whether the matching is upward or not (downward)
0055      * @param nfl: total number of active flavours including both quarks and leptons
0056      * @param Coup: value of the coupling to be matched
0057      * @return The matched value of the strong coupling \f$\alpha_s\f$ at the threshold
0058      * @note This is a dummy function required only to instantiate the
0059      * pure-virtual 'MatchObject' of the mother class
0060      * 'MatchedEvolution': it always returns the input coupling. This
0061      * means that the evolution is assumed to be continuos at the
0062      * thresholds.
0063      */
0064     matrix<double> MatchObject(bool const& Up, int const& nfl, matrix<double> const& Coup) const;
0065 
0066     /**
0067      * @brief Function that returns QCDxQED \f$\beta\f$ function matrix.
0068      * @param nfl: total number of active flavours including both quarks and leptons
0069      * @param as: value of the couplings
0070      * @return The the value of the QCDxQED \f$\beta\f$ function matrix
0071      */
0072     matrix<double> Derivative(int const& nfl, double const&, matrix<double> const& as) const;
0073 
0074     /**
0075      * @brief Function for the computation of the single coefficients
0076      * of the expansion of the QCDxQED \f$\beta\f$ function.
0077      * @param pt: perturbative order
0078      * @param nf: number of active quark flavours
0079      * @param nl: number of active lepton flavours
0080      * @return The pt-th coefficient of the QCDxQED \f$\beta\f$ function.
0081      */
0082     matrix<double> betaQCDQED(int const& pt, int const& nf, int const& nl) const;
0083 
0084     /**
0085      * @brief Function that returns the number of active quarks and
0086      * leptons separately given the total number of active partons.
0087      * @param nfl: total number of active partons
0088      * @return The number of active quarks and leptons.
0089      */
0090     std::pair<int, int> NFL(int const& nfl) const;
0091 
0092   private:
0093     std::vector<double>                                              const _QuarkThresholds;       //!< Quark thresholds
0094     std::vector<double>                                              const _LeptThresholds;        //!< Lepton thresholds
0095     int                                                              const _pt;                    //!< Perturbative order
0096     std::function<matrix<double>(int const&, matrix<double> const&)>       _BetaFunction;          //!< Beta function
0097     std::function<double(bool const&, int const&, double const&)>          _MatchingConditions;    //!< Matching condition functions
0098   };
0099 }