Implementation

QCD Coupling

The value of the QCD coupling \alpha_s(\mu) at scale \mu is specified by the evolution equation,

\mu^2\frac{d\alpha_s(\mu)}{d\mu^2} =
-\alpha_s(\mu)^2\sum_{n=0}^{N_\beta}\beta_n\,\alpha_s^n(\mu),

and an initial value \alpha_s(\mu_0) = \alpha_0. In qcdevol, N_\beta = 4 for the \overline{\mathrm{MS}} scheme; the coefficients \beta_n are given by qcdevol.BETA_MSB(nf).

While it is possible to integrate the evolution equation directly (see Alpha_s.exact()), a faster method is based upon an expansion of the equivalent integrals,

\int\limits_{\mu_0}^{\mu} \frac{d\mu^2}{\mu^2}
&= - \int\limits_{\alpha_0}^{\alpha_s(\mu)}
\frac{d\alpha_s}{\alpha_s^2}\,\frac{1}{\sum\limits_{n=0}^{N_\beta}\beta_n\,\alpha_s^n}
\\
&\approx - \int\limits_{\alpha_0}^{\alpha_s(\mu)}
\frac{d\alpha_s}{\beta_0\alpha_s^2}
\sum\limits_{n=0}^{N_\alpha} d_n\,\alpha_s^n,

where

d_0 = 1 \quad\quad d_1 = -\beta_1/\beta_0 \quad\quad
d_2 = -\beta_2/\beta_0 + \beta_1^2/\beta_0^2
    \quad\quad\cdots

and N_\alpha is chosen large enough to give the desired accuracy. (By default N_\alpha=25 in qcdevol which is more than adequate for most purposes.) Evaluating the integrals and rearranging gives an equation,

\frac{1}{\alpha_s(\mu)}
= \frac{1}{\alpha_0} + \beta_0\ln\big(\mu^2/\mu_0^2\big)
+ d_1 \ln\big(\alpha_s(\mu)/\alpha_0\big)
+ \sum\limits_{n=1}^{N_\alpha-1} \frac{d_{n+1}}{n}\big(\alpha_s^n(\mu) - \alpha_0^n\big),

that determines \alpha_s(\mu) implicitly. This equation can be solved for \alpha_s(\mu), for example, by using a root-finding algorithm like the secant method; typically only a few iterations are required.

The radius of convergence for the expansion of the inverse beta function is easily calculated. In the \overline{\mathrm{MS}} scheme with n_f=4, it is \alpha_\mathrm{max}=1.228, which is much larger than what is usually needed.

This approach to calculating the evolution can be efficiently implemented directly in Python, without resort to underlying code in C or Cython. This is useful for error propagation because it means that any of the parameters can be assigned an uncertainty (using the gvar module).

QCD couplings are defined to include a specific number n_f of quarks in the vacuum polarization. It is possible using perturbation theory to remove a heavy quark, with mass m(\mu), from a coupling to obtain a new coupling with n_f-1 flavors:

\alpha_s(\mu, n_f-1) = \alpha_s(\mu,n_f)
\bigg(1 + \alpha_s(\mu,n_f)
\sum\limits_{n=0}^{N_{\zeta}^{(\alpha)}}
\zeta^{(\alpha)}_n \alpha_s^n(\mu,n_f) \bigg)

where the \zeta^{(\alpha)}_n depend upon m(\mu), \mu, and n_f, and N_{\zeta}^{(\alpha)}. The same equation can be used to add a quark flavor by solving for \alpha_s(\mu, n_f) numerically; adding a quark is then the exact inverse of removing a quark.

Quark Mass

The evolution of the \overline{\mathrm{MS}} mass m(\mu) is specified by

\mu^2 \frac{d\ln(m(\mu))}{d\mu^2} = - \alpha_s(\mu)\sum\limits_{n=0}^{N_\gamma}
\gamma_n\,\alpha_s^n(\mu)

with initial condition m(\mu_0)=m_0. In qcdevol, N_\gamma=4; the coefficients \gamma_n are given by qcdevol.GAMMA_MSB(nf).

This equation also can be written as an integral

\int\limits_{m_0}^{m(\mu)} \frac{dm}{m}
&= \int\limits_{\alpha_s(\mu_0)}^{\alpha_s(\mu)}\frac{d\alpha_s}{\alpha_s}
\frac{\sum_{n=0}^{N_\gamma}\gamma_n\,\alpha_s^n}{\sum\limits_{n=0}^{N_\beta} \beta_n\,\alpha_s^n}
\\
&\approx \int\limits_{\alpha_s(\mu_0)}^{\alpha_s(\mu)}\frac{d\alpha_s}{\alpha_s}
\sum\limits_{n=0}^{N_m} \tilde d_n \alpha_s^n

where

\beta_0 \tilde d_0 = \gamma_0 \quad\quad \beta_0\tilde d_1 = \gamma_1 - \gamma_0\beta_1/\beta_0
\quad\quad \cdots

and again N_m is chosen large enough to give the desired accuracy (N_m=25 by default). Integrating, we get a closed-form result for m(\mu) in terms of m_0 and \alpha_s:

\frac{m(\mu)}{m_0}
= \bigg(\frac{\alpha_s(\mu)}{\alpha_s(\mu_0)}\bigg)^{\tilde d_0}
\exp\bigg(\sum\limits_{n=1}^{N_m}\frac{\tilde d_{n}}{n}\big(\alpha_s^n(\mu) - \alpha_s^n(\mu_0)\big)\bigg)

This is very fast to evaluate given values for the coupling.

Heavy quarks can be removed or added to the vacuum polarization assumed in m(\mu), analogously to the coupling.

Power Series

Calculating parameters like the d_n above (and manipulating perturbation series more generally) is done using the gvar.powerseries module:

https://gvar.readthedocs.io/en/latest/gvar_other.html?highlight=powerseries#module-gvar.powerseries