Defining and configuring a model#

We consider for illustration thermal axion (or ALP) production with the most generic axion-SM effective Lagrangian. It reads — see for instance this paper

\begin{align} \mathcal{L}=&\,\mathcal{L}_{\mathrm{SM}}+\frac{1}{2}(\partial_\mu a)^2 -\frac{a}{f_\mathrm{PQ}}\left[c_3\frac{\alpha_3}{8\pi}G^b_{\mu\nu}\tilde{G}^{\mu\nu}_b+c_2\frac{\alpha_2}{8\pi}W^j_{\mu\nu}\tilde{W}^{\mu\nu}_j+c_1\frac{\alpha_1}{8\pi}B_{\mu\nu}\tilde{B}^{\mu\nu}\right] \\ &+ic_t y_t\frac{a}{f_\mathrm{PQ}}\bar{Q}_L\sigma_2\phi^{*}t_R+\text{h.c.}\,, \end{align}

where \(f_\mathrm{PQ}\) is the Peccei-Quinn scale, \(B,\;W,\;G\) are the U(1), SU(2) and SU(3) field-strength tensors, \(Q_L\) is the third-generation quark doublet with \(y_t\) the top Yukawa coupling. \(\phi\) is the Higgs doublet. The \(c_i\) are arbitrary Wilson coefficients.

The model file#

We recommend creating a directory for this model. In the following, we shall call $ModelDir the absolute path to this directory, e.g. /Users/myself/AUTOTHERM/models/axion/ on a mac or /home/myself/AUTOTHERM/models/axion/ on linux.

To translate the Lagrangian in (1) into a FeynRules model file, we use its support for multiple model files. An implementation of the symmetric-phase SM is provided by AutoTherm, so we only need to add the axion field and its couplings.

We thus create a axionSM.fr in the $ModelDir directory. A first step is the definition of model metadata, i.e.

M$ModelName = "Axion model";

M$Information = {
    Authors -> {"Killian Bouzoud", "Jacopo Ghiglieri"},
    References -> {"1310.6982","2404.06113"},
    Version -> "0.9"
};

The axion field is then added through the M$ClassesDescription variable through

M$ClassesDescription = {
        S[2] == {
        ClassName -> ax,
        SelfConjugate -> True,
        Mass -> 0,
        Width -> 0,
        PropagatorLabel -> "a",
        PropagatorType -> ScalarDash,
        PropagatorArrow -> None
    }
};

See the FeynRules documentation for further information on the meaning of each property.

Before we can define the new terms in the Lagrangian, we need to introduce the new parameters in (1). This is done through the M$Sparameters variable, i.e.

M$Parameters = {
    c1 == {
        ParameterType -> Internal
    },
    c2 == {
        ParameterType -> Internal
    },
    c3 == {
        ParameterType -> Internal
    },
    ct == {
        ParameterType -> Internal
    },
    fPQ == {
        ParameterType -> Internal
    }
};

Finally, we add the gauge and Yukawa interaction of the axion to the SM Lagrangian as in

LIntAxion := Block[{mu,nu,rho,sigma,aa,ii},
c3 (g3^2/(32 Pi^2 fPQ)) ax FS[G,mu,nu,aa] 1/2 Eps[mu,nu,rho,sigma] FS[G,rho,sigma,aa]
+ c2 (g2^2/(32 Pi^2 fPQ)) ax FS[Wi,mu,nu,ii] 1/2 Eps[mu,nu,rho,sigma] FS[Wi,rho,sigma,ii]
+ c1 (g1^2/(32 Pi^2 fPQ)) ax FS[B,mu,nu] 1/2 Eps[mu,nu,rho,sigma] FS[B,rho,sigma]];

LYukAxion := Block[{sp,sp1,ii,jj,cc,ff1,ff2,yuk,iii,jjj},
    yuk = -ct/fPQ ax yu[ff1,ff2] QLbar[sp,ii,ff1,cc].ProjP[sp,sp1].uR[sp1,ff2,cc] Phibar[jj] Eps[ii,jj];
    yuk + HC[yuk]  ];

Ltot := LSM  + LIntAxion + LYukAxion;

LSM and all the SM fields are defined in analytical/models/symmetric.fr. The kinetic term of the axion field is not needed by FeynRules.

The configuration file#

We create a axionSM.cfg in the $ModelDir directory. The first part is just used to define the absolute paths of the main tools and libaries. math is the math or WolframKernel executable (the command-line version of Mathematica) and feynrules, feynarts and formcalc the directories where these tools have been installed. On a mac we would then have

[Tools]
math = /Applications/Mathematica.app/Contents/MacOS/WolframKernel
feynrules = /Users/jacopo/NextCloud/AUTOTHERM/feynrules-current
feynarts = /Users/jacopo/NextCloud/AUTOTHERM/FeynArts-3.12/FeynArts.m
formcalc = /Users/jacopo/NextCloud/AUTOTHERM/FormCalc-9.10/FormCalc.m

We then need the model-specific information pertaining to this axion model. This is achieved through

[Model]
modelpath = $ModelDir/axion.fr
# Symbol for the Lagrangian in the model file
lagrangian = Ltot
# "Name" of the particle whose production rate must be computed
produced = S[2]
# List of the particles in the thermal bath. Leave empty for all SM particles
inbath =
# List of additional assumptions
assumptions = Element[c1,Reals], Element[ht,Reals], Element[c2,Reals],  Element[c3,Reals],  Element[ct,Reals],  Element[fPQ,Reals]
# List of replacements
replacements =
# Whether to include the SM model file while generating the Feynman rules or not
includeSM = yes
# Non-equilibrium coupling
noneq = fPQ
# fermions that need to be treated generation by generation because of Yukawa-dependent thermal masses
flavorexpand =

FIXME: Explain a bit more what all of these do, or rather point to the pdf of the manual.

Finally we need to specify what we want the code to do. We set conf, rules and proc to yes, so that it will generate configuration files for its internal workings, Feynman rules with FeynRules and matrix elements squared and thermal masses for axion production.

[Run]
# Whether to generate the <name>.m file for the Mathematica scripts
conf = yes
# Whether to generate the Feynman rules
rules = yes
# Whether to generate all processes
proc = yes
# Verbosity
verbose = no
# Path to the AutoTherm directory
autothermdir = /path/to/autotherm/

autothermdir should be set to $AutothermDir, introduced in the previous section. In the next section we illustrate how to run the code.