Lecture 3: Running and matching
SMEFT'2022 Physics School

Part I : DsixTools demo

Start DsixTools

<<DsixTools`

User-friendly SMEFT & LEFT information

ObjectInfo[CHG]

ObjectInfo[CHl1]

ObjectInfo[Clq1]

ObjectInfo[LG]

ObjectInfo[LννSLL]

SMEFTOperatorsGrid

LEFTOperatorsMenu

Introducing input values

In DsixTools, the input values for the parameters of the effective theory at work (SMEFT or LEFT) are stored as replacement rules in a dispatch variable called Input Values.

There are two methods to introduce input values in DsixTools: With the NewInput routine or from a file. Let us focus on the first case. In this case the user loads the input values directly in the notebook. Only the non-zero Wilson coefficients must be given. The rest will be assumed to vanish.

Let us show an example with ((Subscript[C, lq])^((1)))[1,1,1,2] = ((Subscript[C, lq])^((1)))[1,1,2,1] = 1 and (Subscript[C, HBtilde]) = -0.5

NewInput[{Clq1[1,1,1,2]->1,Clq1[1,1,2,1]->1,CHBtilde->-0.5}];

We can now see the result:

(Subscript[C, HBtilde])

CHBtilde/.InputValues

((Subscript[C, lq])^((1)))

MClq1/.InputValues

One can also check individual elements in Wilson coefficients with flavor indices: ((Subscript[C, lq])^((1)))[1,1,1,2]

Clq1[1,1,1,2]/.InputValues

We can also check that the rest of Wilson coefficients vanish.

MCllHH/.InputValues

MCdd/.InputValues

The user may also give an invalid input using NewInput. In this case DsixTools will correct the input and save a valid set of input values.

NewInput[{Clq1[1,1,1,2]->1,CHBtilde->-0.5}];

We see that a warning message has been produced by DsixTools. This is because the Wilson coefficients provided by the user lead to an invalid set of input values. There are two possible reasons for this:

1) Non-Hermiticity errors: Some Wilson coefficients are related due to the Hermiticity of the Lagrangian. For instance ((Subscript[C, lq])^((1)))[1,1,1,2] = ((Subscript[C, lq])^((1)))[1,1,2,1] * must necessarily hold.
2) Antisymmetry errors: Some Wilson coefficients are antisymmetric under the exchange of two flavor indices. For instance (Subscript[L, νγ])[1,1] = 0 must necessarily hold.

When the user’s input is not consistent with any of these restrictions, a warning is issued and DsixTools corrects the input by replacing it by a new one that ensures a complete consistency of the Lagrangian. The list of invalid input values can be seen by clicking on the button Input errors. We note however that in some cases other Wilson coefficients, related to these by the two reasons given above, are also modified.

Clq1[1,1,1,2]/.InputValues
Clq1[1,1,2,1]/.InputValues
CHBtilde/.InputValues

How to change input values

Once the input values have been set, the user can change them individually at any moment in the notebook. This is done with the ChangeInput routine.

We can see some examples:

ChangeInput[{CHBtilde->0.6}]

CHBtilde/.InputValues

ChangeInput[{CHBtilde->-0.1}]

CHBtilde/.InputValues

RunDsixTools routine

We consider an example input with ((Subscript[C, lq])^((1)))[2,2,3,3] = 1 / (Λ^2), given at Λ, with Λ = HIGHSCALE = 10 TeV. The rest of SMEFT WCs are assumed to vanish at HIGHSCALE. We must introduce the energy scales too.  EWSCALE and LOWSCALE are taken to be equal to (Subscript[m, W]) and 5 GeV by default, and then only HIGHSCALE must be provided. All scales must be given in units of GeV. NewInput can also be used to introduce energy scales.

NewInput[{Clq1[2,2,3,3]->1.0/HIGHSCALE^2},HIGHSCALE->10^4];

Now we are ready to use the RunDsixTools routine

RunDsixTools;

Results

The results of the running can be obtained by means of the D6run function, which returns interpolating functions that can be evaluated for any value of t = Log[10,μ].

We can now see some examples of the results:

D6run[Clq1[2,2,3,3]]/.μ->HIGHSCALE
D6run[Clq1[2,2,3,3]]/.μ->EWSCALE

Plot[D6run[HIGHSCALE^2Clq1[2,2,3,3],"log10"]/.t->x,{x,tEW,tHIGH},Frame->True,Axes->False,PlotRange->{{tEW,tHIGH},Automatic},FrameLabel->{"Log[μ/GeV]","((Subscript[Λ, UV])^2) (((Subscript[C, lq])^((1))))_2233",None,None},LabelStyle->Directive[14]]

Plot[D6run[EWSCALE^2LeuVLL[2,2,1,1],"log10"]/.t->x,{x,tLOW,tEW},Frame->True,Axes->False,PlotRange->{{tLOW,tEW},Automatic},FrameLabel->{"Log[μ/GeV]","((Subscript[Λ, EW])^2) (((Subscript[L, eu])^VLL))_2211",None,None},LabelStyle->Directive[14]]

The user can also print the values of the LEFT parameters at the matching scale using the dispatch Match

LeuVLL[2,2,1,1]/.Match

One can also use the dispatch MatchAnalytical to print the analytical expressions used for the SMEFT-LEFT matching

LeuVLL[2,2,1,1]/.MatchAnalytical

%/.LoopParameter->0

The analytical expressions for the beta functions of the SMEFT and LEFT parameters can also be shown

β[gs]

β[LeuVLL[1,1,1,2]]

Part II: Using matchmakereft’s output

Load MME results

First, we load the results obtained with MatchMakerEFT.

<<"SN_MM/MatchingResult.dat";

(* Matching in the physical basis *)
matching=MatchingResult[[3]];

Convert MME results to DsixTools format

The MatchMakerEFT results must be converted to a format that can be read by DsixTools.

Routines

We need two simple routines:
1) A routine that renames all WCs in MatchMakerEFT and uses DsixTools names instead.
2) A routine that sums over repeated indices.

(* Routine to rename WCs *)
MMEtoD6[a_]:=Block[{MMEname},
If[MatchQ[a,CG],MMEname=alphaO3G];
If[MatchQ[a,CGtilde],MMEname=alphaO3Gt];
If[MatchQ[a,CW],MMEname=alphaO3W];
If[MatchQ[a,CWtilde],MMEname=alphaO3Wt];
If[MatchQ[a,CH],MMEname=alphaOH];
If[MatchQ[a,CHbox],MMEname=alphaOHBox];
If[MatchQ[a,CHD],MMEname=alphaOHD];
If[MatchQ[a,CHG],MMEname=alphaOHG];
If[MatchQ[a,CHB],MMEname=alphaOHB];
If[MatchQ[a,CHW],MMEname=alphaOHW];
If[MatchQ[a,CHWB],MMEname=alphaOHWB];
If[MatchQ[a,CHGtilde],MMEname=alphaOHGt];
If[MatchQ[a,CHBtilde],MMEname=alphaOHBt];
If[MatchQ[a,CHWtilde],MMEname=alphaOHWt];
If[MatchQ[a,CHWtildeB],MMEname=alphaOHWBt];
If[MatchQ[a,CuH[__]],MMEname=alphaOuH@@a];
If[MatchQ[a,CdH[__]],MMEname=alphaOdH@@a];
If[MatchQ[a,CeH[__]],MMEname=alphaOeH@@a];
If[MatchQ[a,CeW[__]],MMEname=alphaOeW@@a];
If[MatchQ[a,CeB[__]],MMEname=alphaOeB@@a];
If[MatchQ[a,CuG[__]],MMEname=alphaOuG@@a];
If[MatchQ[a,CuW[__]],MMEname=alphaOuW@@a];
If[MatchQ[a,CuB[__]],MMEname=alphaOuB@@a];
If[MatchQ[a,CdG[__]],MMEname=alphaOdG@@a];
If[MatchQ[a,CdW[__]],MMEname=alphaOdW@@a];
If[MatchQ[a,CdB[__]],MMEname=alphaOdB@@a];
If[MatchQ[a,CHl1[__]],MMEname=alphaOHl1@@a];
If[MatchQ[a,CHl3[__]],MMEname=alphaOHl3@@a];
If[MatchQ[a,CHe[__]],MMEname=alphaOHe@@a];
If[MatchQ[a,CHq1[__]],MMEname=alphaOHq1@@a];
If[MatchQ[a,CHq3[__]],MMEname=alphaOHq3@@a];
If[MatchQ[a,CHu[__]],MMEname=alphaOHu@@a];
If[MatchQ[a,CHd[__]],MMEname=alphaOHd@@a];
If[MatchQ[a,CHud[__]],MMEname=alphaOHud@@a];
If[MatchQ[a,Cll[__]],MMEname=alphaOll@@a];
If[MatchQ[a,Cqq1[__]],MMEname=alphaOqq1@@a];
If[MatchQ[a,Cqq3[__]],MMEname=alphaOqq3@@a];
If[MatchQ[a,Clq1[__]],MMEname=alphaOlq1@@a];
If[MatchQ[a,Clq3[__]],MMEname=alphaOlq3@@a];
If[MatchQ[a,Cee[__]],MMEname=alphaOee@@a];
If[MatchQ[a,Cuu[__]],MMEname=alphaOuu@@a];
If[MatchQ[a,Cdd[__]],MMEname=alphaOdd@@a];
If[MatchQ[a,Ceu[__]],MMEname=alphaOeu@@a];
If[MatchQ[a,Ced[__]],MMEname=alphaOed@@a];
If[MatchQ[a,Cud1[__]],MMEname=alphaOud1@@a];
If[MatchQ[a,Cud8[__]],MMEname=alphaOud8@@a];
If[MatchQ[a,Cle[__]],MMEname=alphaOle@@a];
If[MatchQ[a,Clu[__]],MMEname=alphaOlu@@a];
If[MatchQ[a,Cld[__]],MMEname=alphaOld@@a];
If[MatchQ[a,Cqe[__]],MMEname=alphaOqe@@a];
If[MatchQ[a,Cqu1[__]],MMEname=alphaOqu1@@a];
If[MatchQ[a,Cqu8[__]],MMEname=alphaOqu8@@a];
If[MatchQ[a,Cqd1[__]],MMEname=alphaOqd1@@a];
If[MatchQ[a,Cqd8[__]],MMEname=alphaOqd8@@a];
If[MatchQ[a,Cledq[__]],MMEname=alphaOledq@@a];
If[MatchQ[a,Cquqd1[__]],MMEname=alphaOquqd1@@a];
If[MatchQ[a,Cquqd8[__]],MMEname=alphaOquqd8@@a];
If[MatchQ[a,Clequ1[__]],MMEname=alphaOlequ1@@a];
If[MatchQ[a,Clequ3[__]],MMEname=alphaOlequ3@@a];
(* If[MatchQ[a,Cduql[__]],MMEname=alphaOduql@@a];
If[MatchQ[a,Cqque[__]],MMEname=alphaOqque@@a];
If[MatchQ[a,Cqqql[__]],MMEname=alphaOqqql@@a];
If[MatchQ[a,Cduue[__]],MMEname=alphaOduue@@a]; *)
If[MatchQ[a,Cduql[__]],MMEname=0];
If[MatchQ[a,Cqque[__]],MMEname=0];
If[MatchQ[a,Cqqql[__]],MMEname=0];
If[MatchQ[a,Cduue[__]],MMEname=0];
If[MatchQ[a,CllHH[__]],MMEname=alphaWeinberg@@a];

Return[MMEname/.matching ]
]

(* Routine to sum over repeated indices *)
SumRepeated[x_]:=Block[{indices,list,res},

indices={};
list={MIF1,MIF2,MIF3,MIF4,MIF5,fl1,fl2,fl3,fl93,fl95,fl97,fl99,mif1,mif2,mif3,mif4,mif5};

Do[
If[MemberQ[x,list[[k]],Infinity],AppendTo[indices,{list[[k]],3}]];
,{k,Length[list]}];

If[indices=={},res=x,res=Sum[x,##]&@@indices];

Return[res];
]

NP parameter values

Example numerical values for the New Physics parameters.

YNbar[a_]:=Conjugate[YN[a]];
YSbar[a_]:=Conjugate[YS[a]];
ylbar[a_,b_]:=Conjugate[yl[a,b]];
yubar[a_,b_]:=Conjugate[yu[a,b]];
ydbar[a_,b_]:=Conjugate[yd[a,b]];

YNnum={0.001,0.4,-0.02};
YSnum={-0.7,0.9,-0.8};

Num={MN->1000,MS->1200,lam2->0.1,lam3->0.1,YN[a_]:>YNnum[[a]],YS[a_]:>YSnum[[a]]};

We note that Λ = HIGHSCALE = 1 TeV.

SM parameter values

The SM parameter values at Λ = HIGHSCALE are also required. They can be obtained with the DsixTools routine SMEFTRunRGEs. We consider a pure SM input at Λ = EWSCALE and neglect NP effects.

NewInput[{CG->0},HIGHSCALE->1000];

SMEFTRunRGEs;

SMgauge={g1->D6run[gp],g2->D6run[g],g3->D6run[gs],muH->Sqrt[D6run[m2]],lam->D6run[λ]}/.μ->HIGHSCALE;
SMHiggs={muH->Sqrt[D6run[m2]],lam->D6run[λ]}/.μ->HIGHSCALE;
SMGe=Table[yl[i,j]->D6run[Ge[i,j]]/.μ->HIGHSCALE,{i,3},{j,3}];
SMGu=Table[yu[i,j]->D6run[Gu[i,j]]/.μ->HIGHSCALE,{i,3},{j,3}];
SMGd=Table[yd[i,j]->D6run[Gd[i,j]]/.μ->HIGHSCALE,{i,3},{j,3}];

SM=Join[SMgauge,SMHiggs,SMGe,SMGu,SMGd]//Flatten;

Conversion

We finally obtain the replacement rule that will be used as input for DsixTools.

(* Numerical tolerance *)
tol=20;

D6Input=Chop[Simplify[(#->SumRepeated[MMEtoD6[#]/.onelooporder->1/.invepsilonbar->0/.μ->HIGHSCALE])&/@SMEFTParametersTotal[[36;;-1]]/.Num/.SM],10^(-tol)];

CeB[1,2]/.D6Input

MCllHH/.D6Input

CllHH[1,1]/.D6Input

MCll/.D6Input

MClq1/.D6Input

Run DsixTools

Everything is ready to use DsixTools and obtain values for the SMEFT and LEFT WCs at all energies between HIGHSCALE and LOWSCALE.

Set input values

NewInput[D6Input]

(* The error messages can be ignored: they are due to tiny numerical errors *)

Run RGEs

RunDsixTools

Results

The user can read the results directly with the D6run routine.

D6run[CeB[1,2]]/.μ->EWSCALE
D6run[CeW[1,2]]/.μ->EWSCALE

D6run[eQED]/.μ->LOWSCALE
D6run[gQCD]/.μ->LOWSCALE
D6run[LeeVLL[1,1,1,1]]/.μ->LOWSCALE
D6run[Leγ[2,2]]/.μ->LOWSCALE

D6run[Leγ[1,2]]/.μ->LOWSCALE
D6run[Leγ[2,1]]/.μ->LOWSCALE

Table[D6run[Leγ[i,j]]/.μ->LOWSCALE,{i,3},{j,3}]

D6run[MMν]/.μ->LOWSCALE

Alternatively, the results can also be exported to an external file. Several DsixTools routines can be used for this purpose, depending on the user’s needs and interests. If the user wants to export the LEFT WCs and use the WCxf conventions (so that they can be imported into other codes), the required routine is LEFTrunnerExport. The user can also choose between JSON and YAML file formats.

LEFTrunnerExport["YAML","SN"]