YukawaS manual (development version)

Load FeynCalc and the necessary add-ons or other packages

This example uses a custom Yukawa model created with FeynRules.

description = "Renormalization, scalar Yukawa, MSbar, 1-loop";
If[ $FrontEnd === Null, 
    $FeynCalcStartupMessages = False; 
    Print[description]; 
  ];
If[ $Notebooks === False, 
    $FeynCalcStartupMessages = False 
  ];
LaunchKernels[4];
$LoadAddOns = {"FeynArts", "FeynHelpers"};
<< FeynCalc`
$FAVerbose = 0;
$ParallelizeFeynCalc = True; 
 
FCCheckVersion[10, 2, 0];
If[ToExpression[StringSplit[$FeynHelpersVersion, "."]][[1]] < 2, 
    Print["You need at least FeynHelpers 2.0 to run this example."]; 
    Abort[]; 
 ]

\text{FeynCalc }\;\text{10.2.0 (dev version, 2026-05-11 15:53:08 +02:00, acaf6471). For help, use the }\underline{\text{online} \;\text{documentation},}\;\text{ visit the }\underline{\text{forum}}\;\text{ and have a look at the supplied }\underline{\text{examples}.}\;\text{ The PDF-version of the manual can be downloaded }\underline{\text{here}.}

\text{If you use FeynCalc in your research, please evaluate FeynCalcHowToCite[] to learn how to cite this software.}

\text{Please keep in mind that the proper academic attribution of our work is crucial to ensure the future development of this package!}

\text{FeynArts }\;\text{3.12 (27 Mar 2025) patched for use with FeynCalc, for documentation see the }\underline{\text{manual}}\;\text{ or visit }\underline{\text{www}.\text{feynarts}.\text{de}.}

\text{If you use FeynArts in your research, please cite}

\text{ $\bullet $ T. Hahn, Comput. Phys. Commun., 140, 418-431, 2001, arXiv:hep-ph/0012260}

\text{FeynHelpers }\;\text{2.0.0 (2026-02-05 17:03:01 +02:00, 5db84fbb). For help, use the }\underline{\text{online} \;\text{documentation},}\;\text{ visit the }\underline{\text{forum}}\;\text{ and have a look at the supplied }\underline{\text{examples}.}\;\text{ The PDF-version of the manual can be downloaded }\underline{\text{here}.}

\text{ If you use FeynHelpers in your research, please evaluate FeynHelpersHowToCite[] to learn how to cite this work.}

Configure some options

modelName = "YukawaS";
modelDir = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "Examples", "Models", modelName}];
FAPatch[PatchModelsOnly -> True, FAModelsDirectory -> modelDir];

(*Successfully patched FeynArts.*)

Here we define all Z-factors for renormalization constants present in the Lagrangian

renConstants = Zg | Zla | Zx | Zphi | Zmphi | Zmx | Zx

\text{Zg}|\text{Zla}|\text{Zx}|\text{Zphi}|\text{Zmphi}|\text{Zmx}|\text{Zx}

Generate Feynman diagrams

diagFermionSE = InsertFields[CreateTopologies[1, 1 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {F[10]} -> {F[10]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagScalarSE = InsertFields[CreateTopologies[1, 1 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {S[1]} -> {S[1]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagFermionScalarVTX = InsertFields[CreateTopologies[1, 2 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {F[10], S[1]} -> {F[10]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagScalar4VTX = InsertFields[CreateTopologies[1, 2 -> 2, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {S[1], S[1]} -> {S[1], S[1]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagFermionSECT = InsertFields[CreateCTTopologies[1, 1 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {F[10]} -> {F[10]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagScalarSECT = InsertFields[CreateCTTopologies[1, 1 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {S[1]} -> {S[1]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagFermionScalarVTXCT = InsertFields[CreateCTTopologies[1, 2 -> 1, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {F[10], S[1]} -> {F[10]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];
diagScalar4VTXCT = InsertFields[CreateCTTopologies[1, 2 -> 2, 
     ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}], {S[1], S[1]} -> {S[1], S[1]}, 
    InsertionLevel -> {Particles}, Model -> FileNameJoin[{modelDir, modelName}], 
    GenericModel -> FileNameJoin[{modelDir, "YukawaS"}]];

Self-energy and vertex diagrams

Paint[diagFermionSE, ColumnsXRows -> {2, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {2, 1}];
Paint[diagScalarSE, ColumnsXRows -> {4, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 1}];
Paint[diagFermionScalarVTX, ColumnsXRows -> {4, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 1}];
Paint[diagScalar4VTX, ColumnsXRows -> {4, 3}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 3}];

1mlqx7z2ro8dz

14203u8gw0hsp

0rztic7zu030f

0nmo8kv7denvn

Counter-term diagrams

Paint[diagFermionSECT, ColumnsXRows -> {2, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {2, 1}];
Paint[diagScalarSECT, ColumnsXRows -> {4, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 1}];
Paint[diagFermionScalarVTXCT, ColumnsXRows -> {4, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 1}];
Paint[diagScalar4VTXCT, ColumnsXRows -> {4, 1}, SheetHeader -> None, 
   Numbering -> Simple, ImageSize -> 128 {4, 1}];

0t829qfffxedu

1fvvelr18mqi8

0nvibr0dhlps1

0lb4vbl6ravdc

Master integrals

The only required masters are 1-loop tadpoles

tadpoleMaster = Get[FileNameJoin[{$FeynCalcDirectory, "Examples", "MasterIntegrals","Tadpoles", "tad1LxFx1x1xxEp999x.m"}]];
tadpoleMaster1 = tadpoleMaster /. m1 -> mx /. tad1LxFx1x1xxEp999x -> "tad1Lv1";
tadpoleMaster2 = tadpoleMaster /. m1 -> mphi /. tad1LxFx1x1xxEp999x -> "tad1Lv2";
tadpoleMaster1

\left\{G^{\text{tad1Lv1}}(1)\to -e^{\gamma \;\text{ep}} \left(\text{mx}^2\right)^{1-\text{ep}} \Gamma (\text{ep}-1),\left\{\text{FCTopology}\left(\text{tad1Lv1},\left\{\frac{1}{(\text{k1}^2-\text{mx}^2+i \eta )}\right\},\{\text{k1}\},\{\},\{\},\{\}\right)\right\}\right\}

tadpoleMaster2

\left\{G^{\text{tad1Lv2}}(1)\to -e^{\gamma \;\text{ep}} \left(\text{mphi}^2\right)^{1-\text{ep}} \Gamma (\text{ep}-1),\left\{\text{FCTopology}\left(\text{tad1Lv2},\left\{\frac{1}{(\text{k1}^2-\text{mphi}^2+i \eta )}\right\},\{\text{k1}\},\{\},\{\},\{\}\right)\right\}\right\}

Obtain the amplitudes

{fermionSE$RawAmp, scalarSE$RawAmp, fermionSECT$RawAmp, scalarSECT$RawAmp} = 
   FCFAConvert[CreateFeynAmp[#, Truncated -> True, PreFactor -> 1], 
        IncomingMomenta -> {p}, OutgoingMomenta -> {p}, 
        DropSumOver -> True, 
        LoopMomenta -> {k}, UndoChiralSplittings -> True, 
        ChangeDimension -> D, SMP -> True, 
        FinalSubstitutions -> {GaugeXi[S[1]] -> gxi, Mphi -> mphi, Mx -> mx}] & /@ {
        diagFermionSE, diagScalarSE, diagFermionSECT, diagScalarSECT};
{fermionScalarVTX$RawAmp, scalar4VTX$RawAmp, fermionScalarVTXCT$RawAmp, scalar4VTXCT$RawAmp} = 
   FCFAConvert[CreateFeynAmp[#, Truncated -> True, PreFactor -> 1], 
        IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {q1, q2}, 
        DropSumOver -> True, 
        LoopMomenta -> {k}, UndoChiralSplittings -> True, 
        ChangeDimension -> D, SMP -> True, 
        FinalSubstitutions -> {GaugeXi[S[1]] -> gxi, Mphi -> mphi, Mx -> mx}] & /@ {
        diagFermionScalarVTX, diagScalar4VTX, diagFermionScalarVTXCT, diagScalar4VTXCT};

Calculate the amplitudes

Fermion self-energy

The 1-loop fermion self-energy has superficial degree of divergence equal to 1

FCClearScalarProducts[];
divDegree = 1;
aux1 = FCLoopGetFeynAmpDenominators[fermionSE$RawAmp, {k}, denHead, Momentum -> {p}, "Massless" -> True];
aux2 = FCLoopAddAuxiliaryMass[aux1[[2]], {k}, -mxt^2, 0, Head -> denHead]

\left\{\text{denHead}\left(\frac{1}{((k-p)^2-\text{mphi}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mphi}^2+i \eta )}\right\}

fermionSE$StrName = StringReplace[ToString[Hold[fermionSE$Amp]], {"Hold[" -> "", "]" -> ""}]

\text{fermionSE\$Amp}

AbsoluteTiming[fermionSE$Amp = (aux1[[1]] /. aux2) // Contract[#, FCParallelize -> True] & // 
     DiracSimplify[#, FCParallelize -> True] &;]

\{0.097164,\text{Null}\}

AbsoluteTiming[fermionSE$Amp1 = Collect2[fermionSE$Amp, p, IsolateNames -> KK];]
AbsoluteTiming[fermionSE$Amp2 = FourSeries[fermionSE$Amp1, {p, 0, divDegree}, FCParallelize -> True];]
AbsoluteTiming[fermionSE$Amp3 = Collect2[FRH[fermionSE$Amp2], FeynAmpDenominator, FCParallelize -> True];]

\{0.040948,\text{Null}\}

\{0.041645,\text{Null}\}

\{0.019574,\text{Null}\}

The rest of the calculation follows the standard multiloop template

FCClearScalarProducts[];
SPD[p] = pp;
{fermionSE$Amp4, fermionSE$Topos} = FCLoopFindTopologies[fermionSE$Amp3, {k}, FCParallelize -> True, 
    FCLoopBasisOverdeterminedQ -> True, FinalSubstitutions -> {Hold[SPD][p] -> pp}, Names -> fermionSEtopo];

\text{FCLoopFindTopologies: Number of the initial candidate topologies: }1

\text{FCLoopFindTopologies: Number of the identified unique topologies: }1

\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0

\text{FCLoopFindTopologies: Number of the identified subtopologies: }0

\text{FCLoopFindTopologyMappings: }\;\text{Final number of found topologies: }1

AbsoluteTiming[fermionSE$Amp5 = FCLoopTensorReduce[fermionSE$Amp4, fermionSE$Topos, FCParallelize -> True];]

\{0.252034,\text{Null}\}

{fermionSE$Amp6, fermionSE$Topos2} = FCLoopRewriteOverdeterminedTopologies[fermionSE$Amp5, fermionSE$Topos];

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Found }1\text{ overdetermined topologies.}

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Generated }5\text{ new topologies through partial fractioning.}

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Final number of topologies: }2

fermionSE$SubTopos = FCLoopFindSubtopologies[fermionSE$Topos2, Flatten -> True, Remove -> True]

\{\}

{fermionSE$TopoMappings, fermionSE$FinalTopos} = FCLoopFindTopologyMappings[fermionSE$Topos2, PreferredTopologies -> fermionSE$SubTopos];

\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }

\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2

fermionSE$AmpGLI = FCLoopApplyTopologyMappings[fermionSE$Amp6, {fermionSE$TopoMappings, fermionSE$FinalTopos}, FCParallelize -> True];
fermionSE$GLIs = Cases2[fermionSE$AmpGLI, GLI];
fermionSE$dir = FileNameJoin[{$TemporaryDirectory, "Reduction-" <> modelName <> "-" <> fermionSE$StrName <> "-1L"}];
Quiet[CreateDirectory[fermionSE$dir]];
KiraCreateJobFile[fermionSE$FinalTopos, fermionSE$GLIs, fermionSE$dir]

\{\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology1/job.yaml},\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology2/job.yaml}\}

KiraCreateIntegralFile[fermionSE$GLIs, fermionSE$FinalTopos, fermionSE$dir]
KiraCreateConfigFiles[fermionSE$FinalTopos, fermionSE$GLIs, fermionSE$dir, 
  KiraMassDimensions -> {pp -> 2, mphi -> 1, mx -> 1, gxi -> 0}]

\text{KiraCreateIntegralFile: Number of loop integrals: }3

\text{KiraCreateIntegralFile: Number of loop integrals: }2

\{\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology1/KiraLoopIntegrals},\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology2/KiraLoopIntegrals}\}

\left( \begin{array}{cc} \;\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology1/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology1/config/kinematics.yaml} \\ \;\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology2/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-fermionSE\$Amp-1L/fcPFRTopology2/config/kinematics.yaml} \\ \end{array} \right)

KiraRunReduction[fermionSE$dir, fermionSE$FinalTopos, 
  KiraBinaryPath -> FileNameJoin[{$HomeDirectory, ".local", "bin", "kira"}], 
  KiraFermatPath -> FileNameJoin[{$HomeDirectory, "bin", "ferl64", "fer64"}]]

\{\text{True},\text{True}\}

fermionSE$ReductionTables = KiraImportResults[fermionSE$FinalTopos, fermionSE$dir] // Flatten;
fermionSE$resPreFinal = Collect2[Total[fermionSE$AmpGLI /. Dispatch[fermionSE$ReductionTables]] // FeynAmpDenominatorExplicit, GLI, 
    GaugeXi, flagCheck, D, DiracGamma, FCParallelize -> True];
fermionSE$masters = Cases2[fermionSE$resPreFinal, GLI];
fermionSE$MIMappings = FCLoopFindIntegralMappings[fermionSE$masters, Join[tadpoleMaster1[[2]], tadpoleMaster2[[2]], 
    fermionSE$FinalTopos], PreferredIntegrals -> {tadpoleMaster1[[1]][[1]], tadpoleMaster2[[1]][[1]]}]

\left( \begin{array}{cc} G^{\text{fcPFRTopology1}}(1)\to G^{\text{tad1Lv2}}(1) & G^{\text{fcPFRTopology2}}(1)\to G^{\text{tad1Lv1}}(1) \\ G^{\text{tad1Lv1}}(1) & G^{\text{tad1Lv2}}(1) \\ \end{array} \right)

Our master integrals are calculated using the standard multiloop normalization. To convert it back to the textbook normalization we need to multiply by I*(4 Pi)^(ep-2)

fermionSE$resFinal = Collect2[fermionSE$resPreFinal, D, GLI, IsolateNames -> KK] // FCReplaceD[#, D -> 4 - 2 ep] & // 
          ReplaceAll[#, fermionSE$MIMappings[[1]]] & // ReplaceAll[#, {tadpoleMaster1[[1]], tadpoleMaster2[[1]]}] & //If[! FreeQ[#, GLI], Print["Unsubstituted GLIs!"]; Abort[], #] & // 
       Collect2[#, ep, IsolateNames -> KK2] & // Series[(I*(4*Pi)^(-2 + ep)) #, {ep, 0, -1}] & // Normal // FRH //Collect2[#, DiracGamma] &

\frac{i g^2 \;\text{mx}}{16 \pi ^2 \;\text{ep}}+\frac{i g^2 \gamma \cdot p}{32 \pi ^2 \;\text{ep}}

fermionSE$RenConstants = (fermionSE$resFinal + Total[fermionSECT$RawAmp]) // ReplaceRepeated[#, {
            (h : renConstants) :> 1 + alpha rc[ToExpression["del" <> ToString[h]], 1]}] & // 
        Series[#, {alpha, 0, 1}] & // Normal // 
        ReplaceAll[#, alpha -> 1] & // Collect2[#, DiracGamma] & // 
    FCMatchSolve[#, {ep, CF, DiracGamma, mx, mxt, SUNDelta, SUNFDelta, gxi, g}] &

\text{FCMatchSolve: Solving for: }\{\text{rc}(\text{delZmx},1),\text{rc}(\text{delZx},1)\}

\text{FCMatchSolve: A solution exists.}

\left\{\text{rc}(\text{delZmx},1)\to \frac{3 g^2}{32 \pi ^2 \;\text{ep}},\text{rc}(\text{delZx},1)\to -\frac{g^2}{32 \pi ^2 \;\text{ep}}\right\}

Scalar self-energy

The 1-loop scalar self-energy has superficial degree of divergence equal to 2.

FCClearScalarProducts[];
divDegree = 2;
aux1 = FCLoopGetFeynAmpDenominators[scalarSE$RawAmp, {k}, denHead, Momentum -> {p}, "Massless" -> True];
aux2 = FCLoopAddAuxiliaryMass[aux1[[2]], {k}, -mxt^2, 0, Head -> denHead]

\left\{\text{denHead}\left(\frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right\}

scalarSE$StrName = StringReplace[ToString[Hold[scalarSE$Amp]], {"Hold[" -> "", "]" -> ""}]

\text{scalarSE\$Amp}

AbsoluteTiming[scalarSE$Amp = (aux1[[1]] /. aux2) // Contract[#, FCParallelize -> True] & // 
     DiracSimplify[#, FCParallelize -> True] &;]

\{0.084956,\text{Null}\}

flagCheck is a safety flag to ensure that higher order terms in p (higher than the divergence degree) do not contribute to the poles

AbsoluteTiming[scalarSE$Amp1 = Collect2[scalarSE$Amp, p, IsolateNames -> KK];]
AbsoluteTiming[scalarSE$Amp2 = FourSeries[scalarSE$Amp1, {p, 0, divDegree}, FCParallelize -> True];]
AbsoluteTiming[scalarSE$Amp3 = Collect2[FRH[scalarSE$Amp2], FeynAmpDenominator, FCParallelize -> True];]

\{0.006779,\text{Null}\}

\{0.04373,\text{Null}\}

\{0.02514,\text{Null}\}

The rest of the calculation follows the standard multiloop template

FCClearScalarProducts[];
SPD[p] = pp;
{scalarSE$Amp4, scalarSE$Topos} = FCLoopFindTopologies[scalarSE$Amp3, {k}, FCParallelize -> True, 
    FCLoopBasisOverdeterminedQ -> True, FinalSubstitutions -> {Hold[SPD][p] -> pp}, Names -> scalarSEtopo];

\text{FCLoopFindTopologies: Number of the initial candidate topologies: }2

\text{FCLoopFindTopologies: Number of the identified unique topologies: }2

\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0

\text{FCLoopFindTopologies: Number of the identified subtopologies: }0

\text{FCLoopFindTopologyMappings: }\;\text{Final number of found topologies: }2

AbsoluteTiming[scalarSE$Amp5 = FCLoopTensorReduce[scalarSE$Amp4, scalarSE$Topos, FCParallelize -> True];]

\{0.230443,\text{Null}\}

{scalarSE$Amp6, scalarSE$Topos2} = FCLoopRewriteOverdeterminedTopologies[scalarSE$Amp5, scalarSE$Topos];

\text{FCLoopRewriteIncompleteTopologies: }\;\text{No overdetermined topologies detected.}

scalarSE$SubTopos = FCLoopFindSubtopologies[scalarSE$Topos2, Flatten -> True, Remove -> True]

\{\}

{scalarSE$TopoMappings, scalarSE$FinalTopos} = FCLoopFindTopologyMappings[scalarSE$Topos2, PreferredTopologies -> scalarSE$SubTopos];

\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }

\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2

scalarSE$AmpGLI = FCLoopApplyTopologyMappings[scalarSE$Amp6, {scalarSE$TopoMappings, scalarSE$FinalTopos}, FCParallelize -> True];
scalarSE$GLIs = Cases2[scalarSE$AmpGLI, GLI];
scalarSE$dir = FileNameJoin[{$TemporaryDirectory, "Reduction-" <> modelName <> "-" <> scalarSE$StrName <> "-1L"}];
Quiet[CreateDirectory[scalarSE$dir]];
KiraCreateJobFile[scalarSE$FinalTopos, scalarSE$GLIs, scalarSE$dir]

\{\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo1/job.yaml},\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo2/job.yaml}\}

KiraCreateIntegralFile[scalarSE$GLIs, scalarSE$FinalTopos, scalarSE$dir]
KiraCreateConfigFiles[scalarSE$FinalTopos, scalarSE$GLIs, scalarSE$dir, 
  KiraMassDimensions -> {pp -> 2, mphi -> 1, mx -> 1, gxi -> 0}]

\text{KiraCreateIntegralFile: Number of loop integrals: }4

\text{KiraCreateIntegralFile: Number of loop integrals: }1

\{\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo1/KiraLoopIntegrals},\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo2/KiraLoopIntegrals}\}

\left( \begin{array}{cc} \;\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo1/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo1/config/kinematics.yaml} \\ \;\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo2/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-scalarSE\$Amp-1L/scalarSEtopo2/config/kinematics.yaml} \\ \end{array} \right)

KiraRunReduction[scalarSE$dir, scalarSE$FinalTopos, 
  KiraBinaryPath -> FileNameJoin[{$HomeDirectory, ".local", "bin", "kira"}], 
  KiraFermatPath -> FileNameJoin[{$HomeDirectory, "bin", "ferl64", "fer64"}]]

\{\text{True},\text{True}\}

scalarSE$ReductionTables = KiraImportResults[scalarSE$FinalTopos, scalarSE$dir] // Flatten;
scalarSE$resPreFinal = Collect2[Total[scalarSE$AmpGLI /. Dispatch[scalarSE$ReductionTables]] // FeynAmpDenominatorExplicit, GLI, 
    GaugeXi, flagCheck, D, DiracGamma, FCParallelize -> True];
scalarSE$masters = Cases2[scalarSE$resPreFinal, GLI];
scalarSE$MIMappings = FCLoopFindIntegralMappings[scalarSE$masters, Join[tadpoleMaster1[[2]], tadpoleMaster2[[2]], 
    scalarSE$FinalTopos], PreferredIntegrals -> {tadpoleMaster1[[1]][[1]], tadpoleMaster2[[1]][[1]]}]

\left( \begin{array}{cc} G^{\text{scalarSEtopo1}}(1)\to G^{\text{tad1Lv1}}(1) & G^{\text{scalarSEtopo2}}(1)\to G^{\text{tad1Lv2}}(1) \\ G^{\text{tad1Lv1}}(1) & G^{\text{tad1Lv2}}(1) \\ \end{array} \right)

Our master integrals are calculated using the standard multiloop normalization. To convert it back to the textbook normalization we need to multiply by I*(4 Pi)^(ep-2)

scalarSE$resFinal = Collect2[scalarSE$resPreFinal, D, GLI, IsolateNames -> KK] // FCReplaceD[#, D -> 4 - 2 ep] & // 
          ReplaceAll[#, scalarSE$MIMappings[[1]]] & // ReplaceAll[#, {tadpoleMaster1[[1]], tadpoleMaster2[[1]]}] & //If[! FreeQ[#, GLI], Print["Unsubstituted GLIs!"]; Abort[], #] & // 
       Collect2[#, ep, IsolateNames -> KK2] & // Series[(I*(4*Pi)^(-2 + ep)) #, {ep, 0, -1}] & // Normal // FRH //Collect2[#, DiracGamma] &

\frac{i \left(-24 g^2 \;\text{mx}^2+4 g^2 \;\text{pp}+\text{la} \;\text{mphi}^2\right)}{32 \pi ^2 \;\text{ep}}

scalarSE$RenConstants = (scalarSE$resFinal + Total[scalarSECT$RawAmp]) // ReplaceRepeated[#, {
            (h : renConstants) :> 1 + alpha rc[ToExpression["del" <> ToString[h]], 1]}] & //
        Series[#, {alpha, 0, 1}] & // Normal // 
        ReplaceAll[#, alpha -> 1] & // Collect2[#, pp, Pair] & // 
    FCMatchSolve[#, {ep, g, gxi, la, DiracGamma, mphi, mx, pp}] & // ExpandAll

\text{FCMatchSolve: Solving for: }\{\text{rc}(\text{delZmphi},1),\text{rc}(\text{delZphi},1)\}

\text{FCMatchSolve: A solution exists.}

\left\{\text{rc}(\text{delZmphi},1)\to -\frac{3 g^2 \;\text{mx}^2}{4 \pi ^2 \;\text{ep} \;\text{mphi}^2}+\frac{g^2}{8 \pi ^2 \;\text{ep}}+\frac{\text{la}}{32 \pi ^2 \;\text{ep}},\text{rc}(\text{delZphi},1)\to -\frac{g^2}{8 \pi ^2 \;\text{ep}}\right\}

Fermion-scalar vertex

The 1-loop fermion-scalar-vertex has superficial degree of divergence equal to 0. We set q1=0, so that p1+p2=q yields p1=-p2

FCClearScalarProducts[];
divDegree = 0;
aux1 = FCLoopGetFeynAmpDenominators[fermionScalarVTX$RawAmp /. q1 -> 0 /. p2 -> -p1 /. p1 -> p, {k}, denHead, Momentum -> {p}, "Massless" -> True];
aux2 = FCLoopAddAuxiliaryMass[aux1[[2]], {k}, -mxt^2, 0, Head -> denHead]

\left\{\text{denHead}\left(\frac{1}{((k-p)^2-\text{mphi}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mphi}^2+i \eta )},\text{denHead}\left(\frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right\}

fermionScalarVTX$StrName = StringReplace[ToString[Hold[fermionScalarVTX$Amp]], {"Hold[" -> "", "]" -> ""}]

\text{fermionScalarVTX\$Amp}

AbsoluteTiming[fermionScalarVTX$Amp = (aux1[[1]] /. aux2) // Contract[#, FCParallelize -> True] & // 
     DiracSimplify[#, FCParallelize -> True] &;]

\{0.07137,\text{Null}\}

AbsoluteTiming[fermionScalarVTX$Amp1 = Collect2[fermionScalarVTX$Amp, p, IsolateNames -> KK];]
AbsoluteTiming[fermionScalarVTX$Amp2 = FourSeries[fermionScalarVTX$Amp1, {p, 0, divDegree}, FCParallelize -> True];]
AbsoluteTiming[fermionScalarVTX$Amp3 = Collect2[FRH[fermionScalarVTX$Amp2], FeynAmpDenominator, FCParallelize -> True];]

\{0.008092,\text{Null}\}

\{0.019348,\text{Null}\}

\{0.017717,\text{Null}\}

The rest of the calculation follows the standard multiloop template

FCClearScalarProducts[];
SPD[p] = pp;
{fermionScalarVTX$Amp4, fermionScalarVTX$Topos} = FCLoopFindTopologies[fermionScalarVTX$Amp3, {k}, FCParallelize -> True, 
    FCLoopBasisOverdeterminedQ -> True, FinalSubstitutions -> {Hold[SPD][p] -> pp}, Names -> fermionScalarVTXtopo];

\text{FCLoopFindTopologies: Number of the initial candidate topologies: }1

\text{FCLoopFindTopologies: Number of the identified unique topologies: }1

\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0

\text{FCLoopFindTopologies: Number of the identified subtopologies: }0

\text{FCLoopFindTopologyMappings: }\;\text{Final number of found topologies: }1

AbsoluteTiming[fermionScalarVTX$Amp5 = FCLoopTensorReduce[fermionScalarVTX$Amp4, fermionScalarVTX$Topos, FCParallelize -> True];]

\{0.208713,\text{Null}\}

{fermionScalarVTX$Amp6, fermionScalarVTX$Topos2} = FCLoopRewriteOverdeterminedTopologies[fermionScalarVTX$Amp5, fermionScalarVTX$Topos];

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Found }1\text{ overdetermined topologies.}

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Generated }3\text{ new topologies through partial fractioning.}

\text{FCLoopRewriteOverdeterminedTopologies: }\;\text{Final number of topologies: }2

fermionScalarVTX$SubTopos = FCLoopFindSubtopologies[fermionScalarVTX$Topos2, Flatten -> True, Remove -> True]

\{\}

{fermionScalarVTX$TopoMappings, fermionScalarVTX$FinalTopos} = FCLoopFindTopologyMappings[fermionScalarVTX$Topos2, PreferredTopologies -> fermionScalarVTX$SubTopos];

\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }

\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2

fermionScalarVTX$AmpGLI = FCLoopApplyTopologyMappings[fermionScalarVTX$Amp6, {fermionScalarVTX$TopoMappings, fermionScalarVTX$FinalTopos}, FCParallelize -> True];
fermionScalarVTX$GLIs = Cases2[fermionScalarVTX$AmpGLI, GLI];
fermionScalarVTX$dir = FileNameJoin[{$TemporaryDirectory, "Reduction-" <> modelName <> "-" <> fermionScalarVTX$StrName <> "-1L"}];
Quiet[CreateDirectory[fermionScalarVTX$dir]];
KiraCreateJobFile[fermionScalarVTX$FinalTopos, fermionScalarVTX$GLIs, fermionScalarVTX$dir]

\{\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology1/job.yaml},\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology2/job.yaml}\}

KiraCreateIntegralFile[fermionScalarVTX$GLIs, fermionScalarVTX$FinalTopos, fermionScalarVTX$dir]
KiraCreateConfigFiles[fermionScalarVTX$FinalTopos, fermionScalarVTX$GLIs, fermionScalarVTX$dir, 
  KiraMassDimensions -> {pp -> 2, mphi -> 1, mx -> 1, gxi -> 0}]

\text{KiraCreateIntegralFile: Number of loop integrals: }2

\text{KiraCreateIntegralFile: Number of loop integrals: }3

\{\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology1/KiraLoopIntegrals},\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology2/KiraLoopIntegrals}\}

\left( \begin{array}{cc} \;\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology1/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology1/config/kinematics.yaml} \\ \;\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology2/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-fermionScalarVTX\$Amp-1L/fcPFRTopology2/config/kinematics.yaml} \\ \end{array} \right)

KiraRunReduction[fermionScalarVTX$dir, fermionScalarVTX$FinalTopos, 
  KiraBinaryPath -> FileNameJoin[{$HomeDirectory, ".local", "bin", "kira"}], 
  KiraFermatPath -> FileNameJoin[{$HomeDirectory, "bin", "ferl64", "fer64"}]]

\{\text{True},\text{True}\}

fermionScalarVTX$ReductionTables = KiraImportResults[fermionScalarVTX$FinalTopos, fermionScalarVTX$dir] // Flatten;
fermionScalarVTX$resPreFinal = Collect2[Total[fermionScalarVTX$AmpGLI /. Dispatch[fermionScalarVTX$ReductionTables]] // FeynAmpDenominatorExplicit, GLI, 
    GaugeXi, flagCheck, D, DiracGamma, FCParallelize -> True];
fermionScalarVTX$masters = Cases2[fermionScalarVTX$resPreFinal, GLI];
fermionScalarVTX$MIMappings = FCLoopFindIntegralMappings[fermionScalarVTX$masters, Join[tadpoleMaster1[[2]], tadpoleMaster2[[2]], 
    fermionScalarVTX$FinalTopos], PreferredIntegrals -> {tadpoleMaster1[[1]][[1]], tadpoleMaster2[[1]][[1]]}]

\left( \begin{array}{cc} G^{\text{fcPFRTopology1}}(1)\to G^{\text{tad1Lv2}}(1) & G^{\text{fcPFRTopology2}}(1)\to G^{\text{tad1Lv1}}(1) \\ G^{\text{tad1Lv1}}(1) & G^{\text{tad1Lv2}}(1) \\ \end{array} \right)

Our master integrals are calculated using the standard multiloop normalization. To convert it back to the textbook normalization we need to multiply by I*(4 Pi)^(ep-2)

fermionScalarVTX$resFinal = Collect2[fermionScalarVTX$resPreFinal, D, GLI, IsolateNames -> KK] //FCReplaceD[#, D -> 4 - 2 ep] & // 
           ReplaceAll[#, fermionScalarVTX$MIMappings[[1]]] & // ReplaceAll[#, {tadpoleMaster1[[1]], tadpoleMaster2[[1]]}] & //If[! FreeQ[#, GLI], Print["Unsubstituted GLIs!"]; Abort[], #] & // 
        Collect2[#, ep, IsolateNames -> KK2] & // Series[(I*(4*Pi)^(-2 + ep)) #, {ep, 0, -1}] & // Normal // FRH //DiracSubstitute67 // Collect2[#, DiracGamma] &

-\frac{i g^3}{16 \pi ^2 \;\text{ep}}

fermionScalarVTX$RenConstants = (fermionScalarVTX$resFinal + Total[fermionScalarVTXCT$RawAmp]) // ReplaceRepeated[#, {
                (h : renConstants) :> 1 + alpha rc[ToExpression["del" <> ToString[h]], 1]}] & //
            Series[#, {alpha, 0, 1}] & // Normal // ReplaceAll[#, Join[fermionSE$RenConstants, scalarSE$RenConstants]] & // 
        ReplaceAll[#, alpha -> 1] & // Collect2[#, pp, Pair] & // 
    FCMatchSolve[#, {ep, g, gxi, la, DiracGamma, mphi, mx, pp}] & // ExpandAll

\text{FCMatchSolve: Solving for: }\{\text{rc}(\text{delZg},1)\}

\text{FCMatchSolve: A solution exists.}

\left\{\text{rc}(\text{delZg},1)\to \frac{5 g^2}{32 \pi ^2 \;\text{ep}}\right\}

Four-scalar vertex

The 1-loop four-scalar-vertex has superficial degree of divergence equal to 0. We set q1=q2=0, so that p1+p2=0 yields p1=-p2

FCClearScalarProducts[];
divDegree = 0;
aux1 = FCLoopGetFeynAmpDenominators[scalar4VTX$RawAmp /. q1 | q2 -> 0 /. p2 -> -p1 /. p1 -> p, {k}, denHead, Momentum -> {p}, "Massless" -> True];
aux2 = FCLoopAddAuxiliaryMass[aux1[[2]], {k}, -mxt^2, 0, Head -> denHead]

\left\{\text{denHead}\left(\frac{1}{((k-p)^2-\text{mphi}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mphi}^2+i \eta )},\text{denHead}\left(\frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right)\to \frac{1}{((k-p)^2-\text{mx}^2+i \eta )}\right\}

scalar4VTX$StrName = StringReplace[ToString[Hold[scalar4VTX$Amp]], {"Hold[" -> "", "]" -> ""}]

\text{scalar4VTX\$Amp}

AbsoluteTiming[scalar4VTX$Amp = (aux1[[1]] /. aux2) // Contract[#, FCParallelize -> True] & // 
     DiracSimplify[#, FCParallelize -> True] &;]

\{0.143692,\text{Null}\}

AbsoluteTiming[scalar4VTX$Amp1 = Collect2[scalar4VTX$Amp, p, IsolateNames -> KK];]
AbsoluteTiming[scalar4VTX$Amp2 = FourSeries[scalar4VTX$Amp1, {p, 0, divDegree}, FCParallelize -> True];]
AbsoluteTiming[scalar4VTX$Amp3 = Collect2[FRH[scalar4VTX$Amp2], FeynAmpDenominator, FCParallelize -> True];]

\{0.050679,\text{Null}\}

\{0.044137,\text{Null}\}

\{0.056225,\text{Null}\}

The rest of the calculation follows the standard multiloop template

FCClearScalarProducts[];
SPD[p] = pp;
{scalar4VTX$Amp4, scalar4VTX$Topos} = FCLoopFindTopologies[scalar4VTX$Amp3, {k}, FCParallelize -> True, 
    FCLoopBasisOverdeterminedQ -> True, FinalSubstitutions -> {Hold[SPD][p] -> pp}, Names -> scalar4VTXtopo];

\text{FCLoopFindTopologies: Number of the initial candidate topologies: }2

\text{FCLoopFindTopologies: Number of the identified unique topologies: }2

\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0

\text{FCLoopFindTopologies: Number of the identified subtopologies: }0

\text{FCLoopFindTopologyMappings: }\;\text{Final number of found topologies: }2

AbsoluteTiming[scalar4VTX$Amp5 = FCLoopTensorReduce[scalar4VTX$Amp4, scalar4VTX$Topos, FCParallelize -> True];]

\{0.167358,\text{Null}\}

{scalar4VTX$Amp6, scalar4VTX$Topos2} = FCLoopRewriteOverdeterminedTopologies[scalar4VTX$Amp5, scalar4VTX$Topos];

\text{FCLoopRewriteIncompleteTopologies: }\;\text{No overdetermined topologies detected.}

scalar4VTX$SubTopos = FCLoopFindSubtopologies[scalar4VTX$Topos2, Flatten -> True, Remove -> True]

\{\}

{scalar4VTX$TopoMappings, scalar4VTX$FinalTopos} = FCLoopFindTopologyMappings[scalar4VTX$Topos2, PreferredTopologies -> scalar4VTX$SubTopos];

\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }

\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2

scalar4VTX$AmpGLI = FCLoopApplyTopologyMappings[scalar4VTX$Amp6, {scalar4VTX$TopoMappings, scalar4VTX$FinalTopos}, FCParallelize -> True];
scalar4VTX$GLIs = Cases2[scalar4VTX$AmpGLI, GLI];
scalar4VTX$dir = FileNameJoin[{$TemporaryDirectory, "Reduction-" <> modelName <> "-" <> scalar4VTX$StrName <> "-1L"}];
Quiet[CreateDirectory[scalar4VTX$dir]];
KiraCreateJobFile[scalar4VTX$FinalTopos, scalar4VTX$GLIs, scalar4VTX$dir]

\{\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo1/job.yaml},\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo2/job.yaml}\}

KiraCreateIntegralFile[scalar4VTX$GLIs, scalar4VTX$FinalTopos, scalar4VTX$dir]
KiraCreateConfigFiles[scalar4VTX$FinalTopos, scalar4VTX$GLIs, scalar4VTX$dir, 
  KiraMassDimensions -> {pp -> 2, mphi -> 1, mx -> 1, gxi -> 0}]

\text{KiraCreateIntegralFile: Number of loop integrals: }3

\text{KiraCreateIntegralFile: Number of loop integrals: }1

\{\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo1/KiraLoopIntegrals},\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo2/KiraLoopIntegrals}\}

\left( \begin{array}{cc} \;\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo1/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo1/config/kinematics.yaml} \\ \;\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo2/config/integralfamilies.yaml} & \;\text{/tmp/Reduction-YukawaS-scalar4VTX\$Amp-1L/scalar4VTXtopo2/config/kinematics.yaml} \\ \end{array} \right)

KiraRunReduction[scalar4VTX$dir, scalar4VTX$FinalTopos, 
  KiraBinaryPath -> FileNameJoin[{$HomeDirectory, ".local", "bin", "kira"}], 
  KiraFermatPath -> FileNameJoin[{$HomeDirectory, "bin", "ferl64", "fer64"}]]

\{\text{True},\text{True}\}

scalar4VTX$ReductionTables = KiraImportResults[scalar4VTX$FinalTopos, scalar4VTX$dir] // Flatten;
scalar4VTX$resPreFinal = Collect2[Total[scalar4VTX$AmpGLI /. Dispatch[scalar4VTX$ReductionTables]] //FeynAmpDenominatorExplicit, GLI, 
    GaugeXi, flagCheck, D, DiracGamma, FCParallelize -> True];
scalar4VTX$masters = Cases2[scalar4VTX$resPreFinal, GLI];
scalar4VTX$MIMappings = FCLoopFindIntegralMappings[scalar4VTX$masters, Join[tadpoleMaster1[[2]], tadpoleMaster2[[2]], 
    scalar4VTX$FinalTopos], PreferredIntegrals -> {tadpoleMaster1[[1]][[1]], tadpoleMaster2[[1]][[1]]}]

\left( \begin{array}{cc} G^{\text{scalar4VTXtopo1}}(1)\to G^{\text{tad1Lv1}}(1) & G^{\text{scalar4VTXtopo2}}(1)\to G^{\text{tad1Lv2}}(1) \\ G^{\text{tad1Lv1}}(1) & G^{\text{tad1Lv2}}(1) \\ \end{array} \right)

Our master integrals are calculated using the standard multiloop normalization. To convert it back to the textbook normalization we need to multiply by I*(4 Pi)^(ep-2)

scalar4VTX$resFinal = Collect2[scalar4VTX$resPreFinal, D, GLI, IsolateNames -> KK] // FCReplaceD[#, D -> 4 - 2 ep] & // 
          ReplaceAll[#, scalar4VTX$MIMappings[[1]]] & // ReplaceAll[#, {tadpoleMaster1[[1]], tadpoleMaster2[[1]]}] & //If[! FreeQ[#, GLI], Print["Unsubstituted GLIs!"]; Abort[], #] & // 
       Collect2[#, ep, IsolateNames -> KK2] & // Series[(I*(4*Pi)^(-2 + ep)) #, {ep, 0, -1}] & // Normal // FRH //Collect2[#, DiracGamma] &

-\frac{3 i \left(4 g^2-\text{la}\right) \left(4 g^2+\text{la}\right)}{32 \pi ^2 \;\text{ep}}

scalar4VTX$RenConstants = (scalar4VTX$resFinal + Total[scalar4VTXCT$RawAmp]) // ReplaceRepeated[#, {
                (h : renConstants) :> 1 + alpha rc[ToExpression["del" <> ToString[h]], 1]}] & //
            Series[#, {alpha, 0, 1}] & // Normal // ReplaceAll[#, Join[fermionSE$RenConstants, scalarSE$RenConstants]] & // 
        ReplaceAll[#, alpha -> 1] & // Collect2[#, pp, Pair] & // 
    FCMatchSolve[#, {ep, g, gxi, la, DiracGamma, mphi, mx, pp}] & // ExpandAll

\text{FCMatchSolve: Solving for: }\{\text{rc}(\text{delZla},1)\}

\text{FCMatchSolve: A solution exists.}

\left\{\text{rc}(\text{delZla},1)\to -\frac{3 g^4}{2 \pi ^2 \;\text{ep} \;\text{la}}+\frac{g^2}{4 \pi ^2 \;\text{ep}}+\frac{3 \;\text{la}}{32 \pi ^2 \;\text{ep}}\right\}

Check the final results

Our final scalar Yukawa 1-loop renormalization constants

finalResults = Thread[Rule[List @@ renConstants, 
    (List @@ renConstants /. (h : renConstants) :> 1 + rc[ToExpression["del" <> ToString[h]], 1]) // ReplaceAll[#, Join[fermionSE$RenConstants, scalarSE$RenConstants, 
        fermionScalarVTX$RenConstants, scalar4VTX$RenConstants]] &]]

\left\{\text{Zg}\to \frac{5 g^2}{32 \pi ^2 \;\text{ep}}+1,\text{Zla}\to -\frac{3 g^4}{2 \pi ^2 \;\text{ep} \;\text{la}}+\frac{g^2}{4 \pi ^2 \;\text{ep}}+\frac{3 \;\text{la}}{32 \pi ^2 \;\text{ep}}+1,\text{Zx}\to 1-\frac{g^2}{32 \pi ^2 \;\text{ep}},\text{Zphi}\to 1-\frac{g^2}{8 \pi ^2 \;\text{ep}},\text{Zmphi}\to -\frac{3 g^2 \;\text{mx}^2}{4 \pi ^2 \;\text{ep} \;\text{mphi}^2}+\frac{g^2}{8 \pi ^2 \;\text{ep}}+\frac{\text{la}}{32 \pi ^2 \;\text{ep}}+1,\text{Zmx}\to \frac{3 g^2}{32 \pi ^2 \;\text{ep}}+1,\text{Zx}\to 1-\frac{g^2}{32 \pi ^2 \;\text{ep}}\right\}

We can compare part of our results to the calculation in Chapter 51 in Srednicki’s Quantum Field Theory book, which was done for the pseudoscalar Yukawa theory. However, we need to keep in mind that there the mass terms get a single renormalization constant instead of a combination of those and that the author uses D=4-ep. The differences only arise in the mass renormalization terms, where for Zmx it amounts to an overall flipped sign.

knownResult = {rc[delZmx, 1] -> (3*g^2)/(32*ep*Pi^2), rc[delZx, 1] -> -1/32*g^2/(ep*Pi^2), rc[delZmphi, 1] -> g^2/(8*ep*Pi^2) + la/(32*ep*Pi^2) - (3*g^2*mx^2)/(4*ep*mphi^2*Pi^2), rc[delZphi, 1] -> -1/8*g^2/(ep*Pi^2), 
    rc[delZg, 1] -> (5*g^2)/(32*ep*Pi^2), rc[delZla, 1] -> g^2/(4*ep*Pi^2) - (3*g^4)/(2*ep*la*Pi^2) + (3*la)/(32*ep*Pi^2)};
{rc[delZx$SRQFT, 1], rc[delZphi$SRQFT, 1], rc[delZmx$SRQFT, 1],(*rc[delZmphi$SRQFT, 1],*)rc[delZg$SRQFT, 1], rc[delZla$SRQFT, 1]} = {(Zx - 1), (Zphi - 1), (Zmx Zx - 1),(*(Zmphi Zphi - 1),*)(Zg Zx Sqrt[Zphi] - 1 ), (Zla Zphi^2 - 1)} // ReplaceRepeated[#, {
            (h : renConstants) :> 1 + alpha rc[ToExpression["del" <> ToString[h]], 1]}] & // 
        Series[#, {alpha, 0, 1}] & // Normal // ReplaceAll[#, Join[fermionSE$RenConstants, scalarSE$RenConstants, fermionScalarVTX$RenConstants, scalar4VTX$RenConstants]] & // 
    ReplaceAll[#, {alpha -> 1, ep -> 1/2 ep}] & // Simplify

\left\{-\frac{g^2}{16 \pi ^2 \;\text{ep}},-\frac{g^2}{4 \pi ^2 \;\text{ep}},\frac{g^2}{8 \pi ^2 \;\text{ep}},\frac{g^2}{8 \pi ^2 \;\text{ep}},\frac{3 \left(\text{la}^2-16 g^4\right)}{16 \pi ^2 \;\text{ep} \;\text{la}}\right\}

Here are the literature results

resLit = {
  (*delZx$SRQFT*) - g^2/(16 Pi^2) 1/ep, 
  (*delZphi$SRQFT*) - g^2/(4 Pi^2) 1/ep, 
  (*delZmx$SRQFT*) (-1)*- g^2/(8 Pi^2) 1/ep, 
  (*(*delZmphi$SRQFT*),*) 
  (*delZg$SRQFT*) g^2/(8 Pi^2) 1/ep, 
  (*delZla$SRQFT*) 1/ep (3 la/(16 Pi^2) - 3 g^4/(Pi^2 la)) 
  }

\left\{-\frac{g^2}{16 \pi ^2 \;\text{ep}},-\frac{g^2}{4 \pi ^2 \;\text{ep}},\frac{g^2}{8 \pi ^2 \;\text{ep}},\frac{g^2}{8 \pi ^2 \;\text{ep}},\frac{\frac{3 \;\text{la}}{16 \pi ^2}-\frac{3 g^4}{\pi ^2 \;\text{la}}}{\text{ep}}\right\}

```mathematica FCCompareResults[{rc[delZxSRQFT, 1], rc[delZphiSRQFT, 1], rc[delZmxSRQFT, 1], rc[delZgSRQFT, 1], rc[delZla$SRQFT, 1]} /. Rule -> Equal, resLit /. Rule -> Equal, Text -> {“the final result:”, “CORRECT.”, “WRONG!”}, Interrupt -> {Hold[Quit[1]], Automatic}] Print[“Time used:”, Round[N[TimeUsed[], 4], 0.001], ” s.”];

```mathematica

\text{$\backslash $tCheck the final result:} \;\text{CORRECT.}

\text{True}

\text{$\backslash $tCPU Time used: }22.285\text{ s.}