Implementation of the 3-loop hadronic vacuum polarization in chiral perturbation theory
This repository contains a tidied-up copy of the implementation code behind Hadronic vacuum polarization to three loops in chiral perturbation theory by Lellouch, Lupo, Portelli, Sjö, Szabo and Vanhove.
The code was written by Mattias Sjö (me) and its scope is essentially that covered by fig. 2 in the paper. Not included are the scattered Mathematica and Maple notebooks used to derive various mathematical formulae such as the Schouten relations (these formulae are instead hard-coded in HVP.hf) and some of the more ad hoc cross-checks.
Below follows a step-by-step instruction to how the interested reader may rederive the 3-loop HVP amplitude.
This implementation relies heavily on Mattias Sjö's ChPT library https://github.com/mssjo/ChPTlib (which requires Jos Vermaseren's FORM) and Roman Lee's LiteRed2 package https://github.com/rnlg/LiteRed2 (which requires Wolfram Mathematica).
In the commands below, I will assume that you have FORM 4.2 callable as form, command-line Mathematica callable as math, that ChPTlib is in the FORM include path, and that ChPT.py is callable as ChPT.
There also needs to be a save directory for FORM to store files in.
If you do not have access to Mathematica, you may try to replace the calls to LiteRed2 (which occur in the procedure MIreduce in HVP.hf) with calls to the master integral reduction software of your choice. We would be interested in knowing what you manage to get to work.
Run
$ form -d LOOPS=3 -d MAXEPS=3 tadbub.frmto generate tadbub.hf and tadbub.m, which ensure that the definitions of the tadpole and bubble integrals are consistently used throughout the calculation.
Run
$ math -script HVPbasis.wlto have LiteRed2 map out the integral basis in preparation for master integral reduction.
This is by far the most time-consuming step, but only has to be done once.
Run
$ math -script dimshift.wl
$ ./format_dimshift.shto produce the file dimshift.hf which tabulates the dimension shifts for the master integrals, i.e., appendix B in the paper.
This step is rather time-consuming but only needs to be done once.
Run
$ ChPT --generate-form-main HVPNLO.chpt
$ ChPT --generate-form-main HVPNNLO.chpt
$ ChPT --generate-form-main HVPN3LO.chptto generate FORM code for computing all diagrams (tables 1 and 2 in the paper).
Run
$ form -l -d NF=2 -d PAR=SQRT HVPNLO.frmand similarly for HVPNNLO.frm and HVPN3LO.frm.
The latter may be somewhat time-consuming, especially the first time when ChPTlib needs to generate all Feynman rules. Using tform is recommended.
Different ChPT variants may be specified at this step: different number of (mass-degenerate) flavors with dd NF=3, etc. (omit for N-flavor) and different parametrizations of the Nambu-Goldstone manifold with -d PAR=EXP, -d PAR=GEN, etc.
Run
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=NLO HVP.frm
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=NLO -d MFORDER=NLO HVP.frm
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=NLO -d MFORDER=NNLO HVP.frm
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=NNLO HVP.frm
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=NNLO -d MFORDER=NLO HVP.frmto verify that the one- and two-loop amplitudes come out right, and to prepare copies with mass and decay constant (MF) renormalization applied, which is necessary in order to compute higher-order amplitudes.
If the previous step is done with different settings, -d NF=2 -d PAR=SQRT must be changed to match.
This (ignoring MF renormalization) is also where to check against earlier results.
The flag -d BIJLU may be set to compare with the results of Bijnens & Lu (2011), which are loaded and converted to our notation.
The flag -d ABH may be set to compare our loop integral functions to the traditional Passarino-Veltman-style ones.
Run
$ form -l -d NF=2 -d PAR=SQRT -d ORDER=N3LO HVP.frmto compute the final result.
This involves a rather substantial call to LiteRed2, but it should only take a minute or two if everything works right.
Various parts of the amplitude may be isolated and inspected:
-d NOCT,-d NOHARD, etc. to omit counterterm diagrams, "hard" (non-factorizable) three-loop diagrams, etc. (see the procedureloaddiagramsinHVP.hf)-d INDICES=...to manually select the indices of diagrams to include (as per the tables in the paper)-d INDIVIDUALto process all diagrams individually rather than summing them-d TAGto sum the diagrams, but tag their contributions so that they may be tracked-d ONLYMASTERSsuppresses everything not containing the E master integrals All of these are likely to violate the automatic sanity checks, so-d NOCHECKSshould be set as well.