Wilson: the EFT toolkit

This is the second post in the series about public codes.

Effective Field Theories (EFTs) are powerful tools to simplify the analysis of physics beyond the Standard Model (SM). At energies well below the scale of the new physics, all the information about new particles is contained in the Wilson coefficients (WCs) of dimension-6 operators. The comparison to experiment – in general, a huge number of precision measurements in processes at various energy scales – can then be performed as function of these Wilson coefficients. Importantly, this only has to be done once and for all. Testing a new model then amounts to only computing the Wilson coefficients and plugging them into the model-independent phenomenology “machinery”.

Matching, running & translation

Even before computing the actual experimental observables however, within the EFT one needs to take care of the matching and running of the WCs:

  • Since the energy scale of the measured processes is much lower (by assumption) than the scale of the new particles’ masses, one needs to run the WCs by solving their renormalization group (RG) equations to resum large logarithms of this mass hierarchy.
  • Since the new particles are much heavier (by assumption) than the SM bosons, the appropriate EFT is SMEFT, the SM-gauge-invariant dimension-6 extension of the SM. For low-energy processes (like flavour physics), the appropriate EFT is instead the “weak effective theory” (WET) where the heavy SM particles are integrated out and where the only gauge symmetries are QCD and QED. To convert the WCs from SMEFT to WET, one needs to match the two EFTs.

Moreover, it can be convenient to work in different bases within a given EFT, either because a particular basis is more convenient for a given process, or simply because different codes use different conventions. For this, it is necessary to implement translations between pairs of bases.

Wilson: overview

Wilson is a Python package that performs this matching, running & translation in SMEFT and WET. The representation, input & output of WCs is built on the WCxf format described in the last post. It implements:

  • The one-loop RG evolution in SMEFT for all dimension-6 operators. This is directly derived from the DsixTools Mathematica package.
  • The tree-level matching from SMEFT to WET for all dimension-6 operators. This is based on the results of this paper.
  • The one-loop QCD & QED running in WET for all dimension-6 operators. This is based on the results of this paper.
  • Translations between most of the bases defined in WCxf.

Wilson was described in this paper with Jason Aebischer and Jacky Kumar. You can find the source code repository on Github – pull requests welcome!

Simple example

Using the code is easiest through the Wilson class and its match_run method. Say you want to explain a deviation from the SM in $R_K$ through a NP effect in the SMEFT Warsaw-basis operator $[O_{lq}^{(1)}]_{2223}$. Then you could do

from wilson import Wilson
w = Wilson({'lq1_2223': 1e-9},
wc = w.match_run(scale=4.2, eft='WET', basis='flavio')

The units of the Wilson coefficients are 1/GeV², the units of the scales are GeV, and the EFT and basis names are defined in WCxf. The names of all the Wilson coefficients in the different bases are listed in PDF files that you can download from the WCxf web site, see e.g. for the WET flavio basis.

In the above example, the SMEFT RG running from the 1 TeV scale down to the EW scale (including the extraction of the Standard Model parameters properly taking into account their shifts due to dimension-6 contributions), the matching to WET, translation to the “flavio” basis, and the QCD & QED running down to the b quark mass are all done automatically.


The package provides some configuration options that can be set with the set_option (for a single instance) or set_default_option (valid for all future instances) methods of the Wilson class, for instance:

  • smeft_accuracy can be set to leadinglog (rather than the default integrate) to use the less precise but much faster leading-log approximation to the SMEFT RG running
  • smeft_matchingscale can be used to set the scale where SMEFT is matched to WET (by default, the Z mass)

Advanced use of the results

When a large number of non-zero WCs is returned, it is particularly useful to work with them as a pandas.DataFrame. In the above example, this is achieved simply by accessing wc.df. The data frame contains the real and imaginary parts of the WCs in the columns Re and Im. One can now use all the advanced features such as sorting and filtering. For instance, to get all the WCs with a sizable imaginary part, sorted by real part:

df = wc.df
df = df[abs(df['Im']) > 1e-6]  # WCs with large imaginary part
df.sort_values('Re')  # sort by real part

Leave a Reply

Your email address will not be published. Required fields are marked *