-------------------------------- 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`_ .. _paper: https://arxiv.org/abs/1310.6982 .. math:: :label: lagr :nowrap: \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 :math:`f_\mathrm{PQ}` is the Peccei-Quinn scale, :math:`B,\;W,\;G` are the U(1), SU(2) and SU(3) field-strength tensors, :math:`Q_L` is the third-generation quark doublet with :math:`y_t` the top Yukawa coupling. :math:`\phi` is the Higgs doublet. The :math:`c_i` are arbitrary Wilson coefficients. .. model_file: 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 :eq:`lagr` 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. .. code-block:: wl 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 .. code-block:: wl 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. .. _FeynRules documentation: https://feynrules.irmp.ucl.ac.be Before we can define the new terms in the Lagrangian, we need to introduce the new parameters in :eq:`lagr`. This is done through the ``M$Sparameters`` variable, i.e. .. code-block:: wl 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 .. code-block:: wl 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. .. conffile: 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 .. code-block:: ini [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 .. code-block:: ini [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. .. code-block:: ini [Run] # Whether to generate the .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 :doc:`previous section `. In the :doc:`next section ` we illustrate how to run the code.