Advanced usage of FlavorKit to define new observables
Overview
In order to introduce new observables to the SPheno output of SARAH, the user can add new definitions to the directories
/FlavorKit/[$Type]/Processes/
is either LFV
for lepton flavor violating or QFV
for quark flavor violating observables. The definition of the new observables consists of two files
 A steering file with the extension
.m
 A
Fortran
body with the extension.f90
One can make either use of already defined Operators in FlavorKit or define new operators before.
The sterring file
The steering file contains the following information:

NameProcess
: a string as name for the set of observables. 
NameObservables
: names for the individual observables and numbers which are used to identify them later in the SPheno output. The value is a three dimensional list. The first part of each entry has to be a symbol, the second one an integer and the third one a comment to be printed in the SPheno output file ({{name1,number1,comment1},…}
). 
NeededOperators
: The operators which are needed to calculate the observables. A list with all operators already implemented is given here. In case the user needs additional operators, this is explained here. 
Body
: The name (as string) of the file which contains theFortran
code to calculate the observables from the operators.
For instance, the corresponding file to calculate ℓ_{α} → ℓ_{β}γ reads
NameProcess = "LLpGamma";
NameObservables = {{muEgamma, 701, "BR(mu>e gamma)"},
{tauEgamma, 702, "BR(tau>e gamma)"},
{tauMuGamma, 703, "BR(tau>mu gamma)"}};
NeededOperators = {K2L, K2R};
Body = "LLpGamma.f90";
The observables will be saved in the variables muEgamma
, tauEgamma
, tauMuGamma
and will show up in the spectrum file written by SPheno in the block FlavorKitLFV
as numbers 701 to 703.
The file which contains the body to calculate the observables should be standard Fortran
code. For our example it reads
Real(dp) :: width
Integer :: i1, gt1, gt2
Do i1=1,3
If (i1.eq.1) Then ! mu > e gamma
gt1 = 2
gt2 = 1
Elseif (i1.eq.2) Then !tau > e gamma
gt1 = 3
gt2 = 1
Else ! tau > mu gamma
gt1 = 3
gt2 = 2
End if
width=0.25_dp*mf_l(gt1)**5*(Abs(K2L(gt1,gt2))**2 &
& +Abs(K2R(gt1,gt2))**2)*Alpha
If (i1.eq.1) Then
muEgamma = width/(width+GammaMu)
Elseif (i1.eq.2) Then
tauEgamma = width/(width+GammaTau)
Else
tauMuGamma = width/(width+GammaTau)
End if
End do
Real(dp)
is the SPheno internal definition of double precision variables. Similarly one would have to use Complex(dp)
for complex double precision variables when necessary.
Possible parameters used in the calculations
Besides the operators, the SM parameters and the hadronic parameters given can be used in the calculations. For instance, we used Alpha
for α(0) and mf_l
which contains the poles masses of the leptons as well as GammaMu
and GammaTau
for the total widths of μ and τ leptons. By extending or changing the file hadronic_parameters.m
in the FlavorKit directory, it is possible to add new variables for the mass or life time of mesons. These variables are available globally in the resulting SPheno code. The numerical values for the hadronic parameters can be changed in the Les Houches input file by using the blocks FCONST
and FMASS
defined in the Flavor Les Houches Accord (FLHA) .
Dynamical adjustment of the Fortran code
It may happen that the calculation of a specific observable has to be adjusted for each model. This is for instance the case when (1) the calculation requires the knowledge of the number of generations of fields, (2) the mass or decay width of a particle, calculated by SPheno, is needed as input, or (3) a rotation matrix of a specific field enters the analytical expressions for the observable. For these situations, a special syntax has been created. It is possible to start a line with @
in the Fortran
file. This line will then be parsed by SARAH, and Mathematica commands, as well as SARAH specific commands, can be used. We made use of this functionality in the implementation of h → ℓ_{α}ℓ_{β}. The lines in hLLp.f90
read
! Check for SM like Higgs
@ If[getGen[HiggsBoson]>1, "hLoc = MaxLoc(Abs(" <> ToString[HiggsMixingMatrix]<>"(2,:)),1)", "hLoc = 1"]
! Get Higgs mass
@ "mh ="<>ToString[SPhenoMass[HiggsBoson]] <> If[getGen[HiggsBoson]>1,"(hLoc)", ""]
! Get Higgs width
@ "gamh ="<>ToString[SPhenoWidth[HiggsBoson]] <> If[getGen[HiggsBoson]>1,"(hLoc)", ""]
In this implementation we define an integer hLoc
that gives the generation index of the SMlike Higgs, to be found among all CP even scalars. In the first line it is checked if more than one scalar Higgs is present. If this is the case, the hLoc
is set to the component which has the largest amount of the uptype Higgs, if not, it is just put to 1
. Of course, this assumes that the electroweak basis in the Higgs sector is always defined as (ϕ_{d}, ϕ_{u}, …) as is the case for all models delivered with SARAH. In the second and third lines, the variables mh
and gamh
are set to the mass and total width of the SMlike Higgs, respectively. For this purpose, the SARAH commands SPhenoMass[x]
and SPhenoWidth[x]
are used. They return the name of the variable for the mass and width in SPheno and it is checked if these variables are arrays or not [1]. For the MSSM, the above lines lead to the following code in the SPheno output:
! Check for SM like Higgs
hLoc = MaxLoc(Abs(ZH(2,:)),1)
! Get Higgs mass
mh =Mhh(hLoc)
! Get Higgs width
gamh =gThh(hLoc)
The most important SARAH commands which might be useful in this context are
getGen[x] 
returns the number of generations of a particle x

getDim[x] 
returns the dimension of a variable x

SPhenoMass[x] 
returns the name used for the mass of a particle x in the SPheno output 
SPhenoMassSq[x] 
returns the name used for the mass squared of a particle x in the SPheno output 
SPhenoWidth[x] 
returns the name used for the width of a particle x in the SPheno output 
HiggsMixingMatrix 
name of the mixing matrix for the CP even Higgs states in a given model 
PseudoScalarMixingMatrix 
name of the mixing matrix for the CP odd Higgs states in a given model 
[1] The user can define in the parameters.m
and particles.m
file for a given model in SARAH the particles which should be taken to be the CPeven or CPodd Higgs and the parameter that corresponds to their rotation matrices. This is done by using the Description
statements Higgs
or PseudoScalar Higgs
as well as ScalarMixingMatrix
or PseudoScalarMixingMatrix
. If the particle or parameter needed to calculate an observable is not present or has not been defined, the observable is skipped in the SPheno output.