From 22a5bd2a8e805acceeec9fccc4f74777af1a4081 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 21 Dec 2023 18:35:36 +0100 Subject: [PATCH 01/67] Removed the outdated Mma docu-related code from the automatic installer. --- install.m | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/install.m b/install.m index e488a4f2..e5df121f 100644 --- a/install.m +++ b/install.m @@ -406,25 +406,6 @@ Quiet@DeleteDirectory[unzipDir, DeleteContents -> True]; ]; - - If[ !OptionValue[InstallFeynCalcDevelopmentVersion], - (* Activate the documentation *) - WriteString["stdout", "Setting up the help system ... "]; - RenameDirectory[FileNameJoin[{packageDir,"DocOutput"}],FileNameJoin[{packageDir,"Documentation"}]]; - Quiet@DeleteDirectory[FileNameJoin[{packageDir,"DocSource"}], DeleteContents -> True]; - - (* Disable InsufficientVersionWarning?*) - If[ OptionValue[AutoDisableInsufficientVersionWarning] && $Notebooks, - - SetOptions[$FrontEnd, MessageOptions -> {"InsufficientVersionWarning" -> False}], - - Null, - If[ choiceDialog2[fancyText[strDisableWarning], WindowFloating->True, WindowTitle->"Documentation system"] && $Notebooks, - SetOptions[$FrontEnd, MessageOptions -> {"InsufficientVersionWarning" -> False}] - ] - ] - ]; - (* Activate TraditionalForm? *) WriteString["stdout", "Setting up the format type of new output cells ... "]; If[ OptionValue[AutoEnableTraditionalForm], From 1855a888a70a710cb844e7779818f93d31cb6ba1 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 21 Dec 2023 18:38:59 +0100 Subject: [PATCH 02/67] More fixes for the automatic installer. --- install.m | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/install.m b/install.m index e5df121f..d59fe379 100644 --- a/install.m +++ b/install.m @@ -419,14 +419,6 @@ WriteString["stdout", "done! \n"]; - If[ !OptionValue[InstallFeynCalcDevelopmentVersion], - (* To have the documentation available immediately after installing FeynCalc (following the advice of Szabolcs Horv'at) *) - If[ $VersionNumber >= 12.1, - PacletDataRebuild[], - RebuildPacletData[] - ]; - ]; - (* Generate FCConfig.m *) WriteString["stdout", "Creating the configuration file ... "]; configFile = StringJoin[configFileProlog, "\n\n(* Activate TraditionalForm output for each FeynCalc session *) \n$FCTraditionalFormOutput="<>ToString[useTraditionalForm]<>";"]; @@ -449,9 +441,7 @@ Global`$FAPatch=False; Get["FeynCalc`"]; If[ faInstalled, - FeynCalc`FAPatch[Quiet->True] - ]; - If[ OptionValue[InstallFeynCalcDevelopmentVersion], + FeynCalc`FAPatch[Quiet->True]; FeynCalc`FCReloadAddOns[{"FeynArtsLoader"}] ]; From c75feef96bfb4e0167258a1b57218bdc2d021900 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 21 Dec 2023 18:38:59 +0100 Subject: [PATCH 03/67] More fixes for the automatic installer. --- install.m | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/install.m b/install.m index e5df121f..d59fe379 100644 --- a/install.m +++ b/install.m @@ -419,14 +419,6 @@ WriteString["stdout", "done! \n"]; - If[ !OptionValue[InstallFeynCalcDevelopmentVersion], - (* To have the documentation available immediately after installing FeynCalc (following the advice of Szabolcs Horv'at) *) - If[ $VersionNumber >= 12.1, - PacletDataRebuild[], - RebuildPacletData[] - ]; - ]; - (* Generate FCConfig.m *) WriteString["stdout", "Creating the configuration file ... "]; configFile = StringJoin[configFileProlog, "\n\n(* Activate TraditionalForm output for each FeynCalc session *) \n$FCTraditionalFormOutput="<>ToString[useTraditionalForm]<>";"]; @@ -449,9 +441,7 @@ Global`$FAPatch=False; Get["FeynCalc`"]; If[ faInstalled, - FeynCalc`FAPatch[Quiet->True] - ]; - If[ OptionValue[InstallFeynCalcDevelopmentVersion], + FeynCalc`FAPatch[Quiet->True]; FeynCalc`FCReloadAddOns[{"FeynArtsLoader"}] ]; From 3303697f0c5aa48233c98970010d1e791a4b644d Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 17 Jan 2024 18:12:35 +0100 Subject: [PATCH 04/67] Documentation scripts updated. --- .gitignore | 2 ++ .../Scripts/UpdateUsageInformation.m | 4 +--- .../Documentation/Scripts/filters/svg2pdf.lua | 16 +++++++--------- FeynCalc/Documentation/Scripts/generateTeX.sh | 3 ++- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 02cb039e..fb99adfc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ FeynCalc/FeynArts FeynCalc/FeynArts/* FeynCalc/Database/*.db +FeynCalc/Database/*/*.lbases +FeynCalc/Database/*/*.sbases FeynCalc/Examples/Temp FeynCalc/Examples/*/WIP FeynCalc/Examples/WIP diff --git a/FeynCalc/Documentation/Scripts/UpdateUsageInformation.m b/FeynCalc/Documentation/Scripts/UpdateUsageInformation.m index 93efe214..b41e717e 100644 --- a/FeynCalc/Documentation/Scripts/UpdateUsageInformation.m +++ b/FeynCalc/Documentation/Scripts/UpdateUsageInformation.m @@ -63,7 +63,7 @@ "LoopIntegrals","Lorentz","NonCommAlgebra","Pauli","QCD","Shared","SUN","Tables"},Infinity]),{FileNameJoin[{$FeynCalcDirectory,"FCMain.m"}],FileNameJoin[{$FeynCalcDirectory,"FeynCalc.m"}]}], "feynhelpers", allFiles[]:=Join[(FileNames["*.m",FileNameJoin[{ParentDirectory[docuDir],"Interfaces",#}]&/@{"LoopTools","FIRE","QGRAF", -"pySecDec","Fermat","Kira"},Infinity]),{FileNameJoin[{ParentDirectory[docuDir],"FeynHelpers.m"}],FileNameJoin[{ParentDirectory[docuDir],"Interfaces","PackageX.m"}]}] +"pySecDec","Fermat","Kira","FIESTA"},Infinity]),{FileNameJoin[{ParentDirectory[docuDir],"FeynHelpers.m"}],FileNameJoin[{ParentDirectory[docuDir],"Interfaces","PackageX.m"}]}] ]; importAllSymbols[]:=Import[#,"Text"]&/@allFiles[]; @@ -124,5 +124,3 @@ )&,input ]; - - diff --git a/FeynCalc/Documentation/Scripts/filters/svg2pdf.lua b/FeynCalc/Documentation/Scripts/filters/svg2pdf.lua index 5acc699c..9f3f2609 100644 --- a/FeynCalc/Documentation/Scripts/filters/svg2pdf.lua +++ b/FeynCalc/Documentation/Scripts/filters/svg2pdf.lua @@ -1,16 +1,14 @@ -- https://groups.google.com/g/pandoc-discuss/c/w5Uxh02YE4E/m/QEjz3vr9AgAJ -local utils = require 'pandoc.utils' -function Para (figure) - if #figure.content == 1 and figure.content[1].t == 'Image' then - local img = figure.content[1] - img.src = string.gsub(img.src, ".svg", ".pdf") - return pandoc.Plain { + function Figure(figure) + img = pandoc.utils.stringify(figure.content[1]) + + return pandoc.Plain { pandoc.RawInline('tex',"\\FloatBarrier\n"), pandoc.RawInline('tex',"\\begin{figure}[!ht]\n"), pandoc.RawInline('tex','\\centering\n'), - pandoc.RawInline('tex',string.format("\\includegraphics[width=0.6\\linewidth]{%s}\n",img.src)), + pandoc.RawInline('tex',string.format("\\includegraphics[width=0.6\\linewidth]{img/%s.pdf}\n",img)), pandoc.RawInline('tex',"\\end{figure}\n"), pandoc.RawInline('tex',"\\FloatBarrier\n") - } - end + } + end diff --git a/FeynCalc/Documentation/Scripts/generateTeX.sh b/FeynCalc/Documentation/Scripts/generateTeX.sh index 3a213787..51c9dd24 100755 --- a/FeynCalc/Documentation/Scripts/generateTeX.sh +++ b/FeynCalc/Documentation/Scripts/generateTeX.sh @@ -19,6 +19,7 @@ # export DOCU_SOURCE_DIR="/media/Data/Projects/VS/FeynCalc/FeynCalc/AddOns/FeynHelpers/Documentation"; export DOCU_MANUAL_NAME="FeynHelpersManual"; export DOCU_INDEX_FILE=$DOCU_SOURCE_DIR/Markdown/Extra/FeynHelpers.md; ./generateTeX.sh "$DOCU_SOURCE_DIR/Markdown/Extra/Cite.md" /media/Data/Projects/VS/feynhelpers-manual/pages/ +# export DOCU_SOURCE_DIR="/media/Data/Projects/VS/FeynCalc/FeynCalc/AddOns/FeynHelpers/Documentation"; export DOCU_MANUAL_NAME="FeynHelpersManual"; export DOCU_INDEX_FILE=$DOCU_SOURCE_DIR/Markdown/Extra/FeynHelpersManual.md; ./generateTeX.sh "$DOCU_SOURCE_DIR/Markdown/PaXC0Expand.md" /media/Data/Projects/VS/feynhelpers-manual/pages/ if [[ -z "${DOCU_SOURCE_DIR}" ]]; then echo "You need to set the environmental variable DOCU_SOURCE_DIR that contains the full path to the relevant Documentation directory" @@ -60,7 +61,7 @@ if [[ $# -eq 2 ]] ; then - pandoc "$1" -f markdown -t latex --lua-filter="$FILTERSDIR"/dmath.lua --lua-filter="$FILTERSDIR"/svg2pdf.lua --lua-filter="$FILTERSDIR"/allowbreak.lua --lua-filter="$FILTERSDIR"/href.lua --lua-filter="$FILTERSDIR"/fixlabels.lua --metadata=subtitle:"$texname" --default-image-extension=pdf --top-level-division=chapter --template=template.latex -o "$output".tex; + pandoc "$1" -f markdown -t latex --lua-filter="$FILTERSDIR"/dmath.lua --lua-filter="$FILTERSDIR"/svg2pdf.lua --lua-filter="$FILTERSDIR"/allowbreak.lua --lua-filter="$FILTERSDIR"/href.lua --lua-filter="$FILTERSDIR"/fixlabels.lua --metadata=subtitle:"$texname" --default-image-extension=pdf --top-level-division=chapter --template=template.latex -o "$output".tex --verbose else From 271bf6c4a526d2d97967c168b9ffc00589c668f9 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 17 Jan 2024 18:13:31 +0100 Subject: [PATCH 05/67] Some cleanups in the example files. --- FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu.m | 3 --- .../Examples/QED/OneLoop/Mathematica/{PiToGaGa.m => Pi-GaGa.m} | 0 2 files changed, 3 deletions(-) rename FeynCalc/Examples/QED/OneLoop/Mathematica/{PiToGaGa.m => Pi-GaGa.m} (100%) diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu.m index cafa4c49..a22606c4 100644 --- a/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu.m +++ b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu.m @@ -309,6 +309,3 @@ Text->{"\tCompare to arXiv:hep-ph/0010075:", "CORRECT.","WRONG!"}, Interrupt->{Hold[Quit[1]],Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[],4],0.001], " s."]; - - - diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/PiToGaGa.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/Pi-GaGa.m similarity index 100% rename from FeynCalc/Examples/QED/OneLoop/Mathematica/PiToGaGa.m rename to FeynCalc/Examples/QED/OneLoop/Mathematica/Pi-GaGa.m From 6bf0434ca25e750adfeb1a850824ccfefea5e2cf Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 17 Jan 2024 18:13:44 +0100 Subject: [PATCH 06/67] Improved FCCanonicalizeDummyIndices to work with lists. --- FeynCalc/Lorentz/FCCanonicalizeDummyIndices.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/FeynCalc/Lorentz/FCCanonicalizeDummyIndices.m b/FeynCalc/Lorentz/FCCanonicalizeDummyIndices.m index ad44587e..08d34d4e 100644 --- a/FeynCalc/Lorentz/FCCanonicalizeDummyIndices.m +++ b/FeynCalc/Lorentz/FCCanonicalizeDummyIndices.m @@ -93,6 +93,12 @@ renamingRule ]; +FCCanonicalizeDummyIndices[a_ == b_, opts:OptionsPattern[]] := + FCCanonicalizeDummyIndices[a,opts] == FCCanonicalizeDummyIndices[b,opts]; + +FCCanonicalizeDummyIndices[expr_List, opts:OptionsPattern[]]:= + FCCanonicalizeDummyIndices[#, opts]&/@expr; + FCCanonicalizeDummyIndices[expr_, OptionsPattern[]] := Block[ {indexList = {}, ex,exUnexpanded,tmp,null1,null2, renamingRule, rest0=0,lihead,cihead,seedLor,moms,notmoms,finalList,isoHead, uniqueExpressions, From a67a46705a359ec58b795c5c2ca9c046e04393f9 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 14:41:19 +0100 Subject: [PATCH 07/67] Fixed a bug in the TID where ToSFAD was not being applied when necessary. --- FeynCalc/LoopIntegrals/TID.m | 2 +- Tests/LoopIntegrals/TID.test | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/FeynCalc/LoopIntegrals/TID.m b/FeynCalc/LoopIntegrals/TID.m index d7601db2..e049b05b 100644 --- a/FeynCalc/LoopIntegrals/TID.m +++ b/FeynCalc/LoopIntegrals/TID.m @@ -199,7 +199,7 @@ FCPrint[1, "TID: Done applying Isolate, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->tidVerbose]; FCPrint[3, "TID: After Isolate: ", t0 , FCDoControl->tidVerbose]; - If[OptionValue[ToSFAD] && !FreeQ2[t0,{StandardPropagatorDenominator}], + If[OptionValue[ToSFAD] && !FreeQ2[t0,{StandardPropagatorDenominator,CartesianPropagatorDenominator,GenericPropagatorDenominator}], t0 = ToSFAD[t0] ]; diff --git a/Tests/LoopIntegrals/TID.test b/Tests/LoopIntegrals/TID.test index 99a7e670..b9152848 100644 --- a/Tests/LoopIntegrals/TID.test +++ b/Tests/LoopIntegrals/TID.test @@ -1050,5 +1050,12 @@ CFAD[{{k, 0}, {m2^2 - TC[k]^2, -1}, 1}, {{k - pH, 0}, {m2^2 - TC[k - pH]^2, -1}, {"fcstTID-ID65","TID[SPLRD[p, p, n, nb] FAD[p, p + q], p, FCE -> True]", "-1/4*(FAD[p, p - q]*(2*SPD[q, q] - D*SPD[q, q] + D*SPLRD[q, q, n, nb]))/(1 - D)"}, {"fcstTID-ID66","TID[SPLRD[p, r, n, nb] FAD[p, p + q], p, FCE -> True]", -"-1/2*(FAD[p, p - q]*SPLRD[q, r, n, nb])"} +"-1/2*(FAD[p, p - q]*SPLRD[q, r, n, nb])"}, +{"fcstTID-ID67","TID[FAD[l1] GFAD[{{TC[l1 - p], 1}, 1}] GFAD[{{TC[l1 - p], 1}, + 1}] CFAD[{{l1 - p + q, 0}, {0, -1}, 1}] CSPD[l1, l1], l1, +FCE -> True]", +"-1/2*(CFAD[{{l1, 0}, {-TC[l1]^2, -1}, 1}, {{l1 - p + q, 0}, {0, -1}, 1}]* +(3*CSPD[p, p] - 2*D*CSPD[p, p] - 6*CSPD[p, q] + 4*D*CSPD[p, q] + 3*CSPD[q, q] - 2*D*CSPD[q, q] - + (-1 + D)*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]) + D*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))* +GFAD[{{TC[l1 - p], 1}, 1}, {{TC[l1 - p], 1}, 1}]*TC[l1]^2)/((2 - D)*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))"} }; From 3231cfcad15322f9e1d6e4a0c760d3f54a706c7d Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 18:06:35 +0100 Subject: [PATCH 08/67] Fixed multiple typos and shortcoming in the docu and improved the section on light-cone calculations (thanks to @dehorstmann). --- .../Markdown/$FCDefaultLightconeVectorN.md | 4 - .../Markdown/$FCDefaultLightconeVectorNB.md | 4 - .../Markdown/$FeynArtsDirectory.md | 2 +- .../Markdown/$FeynCalcDirectory.md | 2 +- .../Markdown/$FeynCalcLastCommitDateHash.md | 4 - .../Documentation/Markdown/$LeviCivitaSign.md | 4 - FeynCalc/Documentation/Markdown/$LimitTo4.md | 2 +- .../Markdown/$LimitTo4IRUnsafe.md | 2 +- .../Documentation/Markdown/$LoadAddOns.md | 2 +- .../Documentation/Markdown/$LoadFeynArts.md | 2 +- FeynCalc/Documentation/Markdown/$LoadPhi.md | 2 +- .../Documentation/Markdown/$LoadTARCER.md | 2 +- .../Markdown/$RenameFeynCalcObjects.md | 2 +- .../Markdown/$TypesettingDim4.md | 2 +- .../Markdown/$TypesettingDimD.md | 2 +- .../Markdown/$TypesettingDimE.md | 2 +- FeynCalc/Documentation/Markdown/A0.md | 1 - .../Documentation/Markdown/Abbreviation.md | 2 +- FeynCalc/Documentation/Markdown/Amplitude.md | 5 +- FeynCalc/Documentation/Markdown/ApartFF.md | 4 - FeynCalc/Documentation/Markdown/CFAD.md | 4 - FeynCalc/Documentation/Markdown/CLC.md | 5 +- FeynCalc/Documentation/Markdown/CLCD.md | 5 +- .../Markdown/CartesianPairContract.md | 5 +- .../Documentation/Markdown/ColorAlgebra.md | 6 +- .../Documentation/Markdown/Contractions.md | 6 +- .../Markdown/CovariantFieldDerivative.md | 2 + FeynCalc/Documentation/Markdown/Dimensions.md | 14 +- .../Documentation/Markdown/DiracAlgebra.md | 6 +- FeynCalc/Documentation/Markdown/DiracTrace.md | 14 +- .../Documentation/Markdown/DotSimplify.md | 1 - FeynCalc/Documentation/Markdown/Eps.md | 5 +- .../Documentation/Markdown/EpsChisholm.md | 5 +- .../Markdown/EpsContractFreeQ.md | 5 +- .../Documentation/Markdown/ExpandPartialD.md | 2 +- .../Markdown/ExpandScalarProduct.md | 7 +- FeynCalc/Documentation/Markdown/Expansions.md | 4 - .../Markdown/ExplicitPartialD.md | 7 +- .../Markdown/Extra/DiracAlgebraFormulas.md | 2 +- .../Markdown/FCCanonicalizeDummyIndices.md | 5 +- .../Documentation/Markdown/FCCheckVersion.md | 2 +- .../Markdown/FCClearScalarProducts.md | 5 +- .../Markdown/FCCompareNumbers.md | 5 +- .../Documentation/Markdown/FCDiffEqSolve.md | 4 - .../FCDisableTraditionalFormOutput.md | 2 +- .../Markdown/FCEnableTraditionalFormOutput.md | 2 +- .../Markdown/FCFeynmanParametrize.md | 4 - FeynCalc/Documentation/Markdown/FCGPL.md | 4 - .../Markdown/FCGetDummyIndices.md | 5 +- FeynCalc/Documentation/Markdown/FCHPL.md | 4 - .../Markdown/FCIteratedIntegral.md | 4 - .../Markdown/FCIteratedIntegralEvaluate.md | 4 - .../Markdown/FCIteratedIntegralSimplify.md | 4 - .../FCLoopCreatePartialFractioningRules.md | 4 - .../Markdown/FCLoopCreateRuleGLIToGLI.md | 4 - .../Markdown/FCLoopFindSectors.md | 4 - .../Markdown/FCLoopFindSubtopologies.md | 2 + .../Markdown/FCLoopFindTopologies.md | 41 +-- .../Markdown/FCLoopFindTopologyMappings.md | 4 - .../Markdown/FCLoopGetKinematicInvariants.md | 4 - .../Documentation/Markdown/FCLoopGraphPlot.md | 4 - .../Markdown/FCLoopIntegralToGraph.md | 4 - .../Markdown/FCLoopRemovePropagator.md | 4 - .../Markdown/FCLoopTensorReduce.md | 4 - .../Documentation/Markdown/FCMellinJoin.md | 4 - .../Markdown/FCMemoryAvailable.md | 2 +- .../Markdown/FCPartialFractionForm.md | 4 - .../Markdown/FCPermuteMomentaRules.md | 5 +- FeynCalc/Documentation/Markdown/FCPrint.md | 2 +- FeynCalc/Documentation/Markdown/FCTopology.md | 4 - .../Documentation/Markdown/FCTripleProduct.md | 4 +- FeynCalc/Documentation/Markdown/FCVerbose.md | 2 +- FeynCalc/Documentation/Markdown/FVLN.md | 4 - FeynCalc/Documentation/Markdown/FVLND.md | 4 - FeynCalc/Documentation/Markdown/FVLP.md | 4 - FeynCalc/Documentation/Markdown/FVLPD.md | 4 - FeynCalc/Documentation/Markdown/FVLR.md | 4 - FeynCalc/Documentation/Markdown/FVLRD.md | 4 - FeynCalc/Documentation/Markdown/Factor3.md | 4 - FeynCalc/Documentation/Markdown/Factoring.md | 4 - .../Markdown/FeynAmpDenominatorSplit.md | 3 +- .../Markdown/FeynmanIntegralPrefactor.md | 5 +- .../Markdown/FromFCPartialFractionForm.md | 4 - FeynCalc/Documentation/Markdown/FromGFAD.md | 11 +- FeynCalc/Documentation/Markdown/GALN.md | 4 - FeynCalc/Documentation/Markdown/GALND.md | 4 - FeynCalc/Documentation/Markdown/GALP.md | 4 - FeynCalc/Documentation/Markdown/GALPD.md | 4 - FeynCalc/Documentation/Markdown/GALR.md | 4 - FeynCalc/Documentation/Markdown/GALRD.md | 4 - .../Documentation/Markdown/GLIMultiply.md | 5 +- FeynCalc/Documentation/Markdown/GSLN.md | 4 - FeynCalc/Documentation/Markdown/GSLND.md | 4 - FeynCalc/Documentation/Markdown/GSLP.md | 4 - FeynCalc/Documentation/Markdown/GSLPD.md | 4 - FeynCalc/Documentation/Markdown/GSLR.md | 4 - FeynCalc/Documentation/Markdown/GSLRD.md | 4 - FeynCalc/Documentation/Markdown/Hill.md | 5 +- .../Markdown/HypergeometricIR.md | 5 +- FeynCalc/Documentation/Markdown/Indices.md | 6 +- .../Documentation/Markdown/IntegralTable.md | 4 - .../Markdown/InternalExternal.md | 8 +- FeynCalc/Documentation/Markdown/Kinematics.md | 6 +- FeynCalc/Documentation/Markdown/LC.md | 5 - FeynCalc/Documentation/Markdown/LCD.md | 5 - .../Documentation/Markdown/LeftRightNablaD.md | 5 +- .../Markdown/LeftRightNablaD2.md | 5 +- FeynCalc/Documentation/Markdown/LightCone.md | 93 +++++-- .../LightConePerpendicularComponent.md | 7 +- FeynCalc/Documentation/Markdown/Loops.md | 16 +- .../Markdown/LorentzToCartesian.md | 5 +- FeynCalc/Documentation/Markdown/MTLN.md | 4 - FeynCalc/Documentation/Markdown/MTLND.md | 4 - FeynCalc/Documentation/Markdown/MTLP.md | 4 - FeynCalc/Documentation/Markdown/MTLPD.md | 4 - FeynCalc/Documentation/Markdown/MTLR.md | 4 - FeynCalc/Documentation/Markdown/MTLRD.md | 4 - FeynCalc/Documentation/Markdown/Mandelstam.md | 4 - .../Documentation/Markdown/MomentumCombine.md | 4 - .../Documentation/Markdown/NonCommFreeQ.md | 2 +- FeynCalc/Documentation/Markdown/NonCommQ.md | 2 +- .../Documentation/Markdown/Nonrelativistic.md | 14 +- .../Markdown/NumberOfPolarizations.md | 7 +- .../Documentation/Markdown/OPESumExplicit.md | 5 +- .../Documentation/Markdown/PaVeLimitTo4.md | 6 +- .../Documentation/Markdown/PairContract3.md | 5 +- .../Documentation/Markdown/PauliIndexNames.md | 5 +- FeynCalc/Documentation/Markdown/PauliSigma.md | 5 +- FeynCalc/Documentation/Markdown/PauliTrace.md | 5 +- FeynCalc/Documentation/Markdown/PauliXi.md | 5 +- .../Documentation/Markdown/PowerFactor.md | 5 +- FeynCalc/Documentation/Markdown/Rename.md | 15 +- FeynCalc/Documentation/Markdown/SFAD.md | 4 - FeynCalc/Documentation/Markdown/SPD.md | 4 - FeynCalc/Documentation/Markdown/SPLN.md | 4 - FeynCalc/Documentation/Markdown/SPLND.md | 4 - FeynCalc/Documentation/Markdown/SPLP.md | 4 - FeynCalc/Documentation/Markdown/SPLPD.md | 4 - FeynCalc/Documentation/Markdown/SPLR.md | 4 - FeynCalc/Documentation/Markdown/SPLRD.md | 4 - .../Documentation/Markdown/ShiftPartialD.md | 5 - FeynCalc/Documentation/Markdown/Spinor.md | 4 - .../Markdown/SubtopologyMarker.md | 4 +- FeynCalc/Documentation/Markdown/TID.md | 9 +- FeynCalc/Documentation/Markdown/TR.md | 4 - FeynCalc/Documentation/Markdown/Tf.md | 4 - .../Markdown/ToFCPartialFractionForm.md | 5 - .../Markdown/ToLightConeComponents.md | 4 - FeynCalc/Documentation/Markdown/TraceOfOne.md | 4 - .../Documentation/Markdown/TrickMandelstam.md | 5 +- .../Markdown/UnDeclareNonCommutative.md | 6 +- FeynCalc/Documentation/Markdown/Uncontract.md | 4 - .../Markdown/img/04o1hrqxpf60s.svg | 197 +++++++++++++++ .../Markdown/img/0aknzgv9vc0z9.svg | 133 ++++++++++ .../Markdown/img/0ctuipjuoiffd.svg | 69 ++++++ .../Markdown/img/0gap32avu3bc5.svg | 111 +++++++++ .../Markdown/img/0h6kq1ltbsocf.svg | 234 ++++++++++++++++++ .../Markdown/img/0qnch25ldaf78.svg | 111 +++++++++ .../Markdown/img/1atksrkz4jlnv.svg | 197 +++++++++++++++ .../Markdown/img/1umsofjfi8ghr.svg | 111 +++++++++ .../Mathematica/Dirac/DiracTrace.m | 3 - .../Mathematica/Dirac/EpsChisholm.m | 3 - .../Mathematica/Feynman/ExpandPartialD.m | 2 +- .../Mathematica/Feynman/ExplicitPartialD.m | 5 +- .../Mathematica/Feynman/LeftRightNablaD.m | 3 - .../Mathematica/Feynman/LeftRightNablaD2.m | 3 - .../Mathematica/Feynman/ShiftPartialD.m | 1 - .../Mathematica/LoopIntegrals/A0.m | 8 +- .../LoopIntegrals/FCLoopFindTopologies.m | 3 - .../LoopIntegrals/FeynAmpDenominatorSplit.m | 1 - .../Mathematica/LoopIntegrals/FromGFAD.m | 3 - .../Mathematica/LoopIntegrals/GLIMultiply.m | 3 - .../Mathematica/LoopIntegrals/TID.m | 3 - .../LoopIntegrals/ToFCPartialFractionForm.m | 3 - .../Lorentz/CartesianPairContract.m | 3 - .../Mathematica/Lorentz/EpsContractFreeQ.m | 3 - .../Mathematica/Lorentz/ExpandScalarProduct.m | 3 - .../Lorentz/FCCanonicalizeDummyIndices.m | 3 - .../Lorentz/FCClearScalarProducts.m | 3 - .../Mathematica/Lorentz/FCGetDummyIndices.m | 3 - .../Lorentz/FCPermuteMomentaRules.m | 3 - .../Mathematica/Lorentz/LorentzToCartesian.m | 3 - .../Mathematica/Lorentz/PairContract3.m | 3 - .../Mathematica/Lorentz/Rename.m | 3 - .../Mathematica/Lorentz/TrickMandelstam.m | 3 - .../Mathematica/NonCommAlgebra/DotSimplify.m | 1 - .../NonCommAlgebra/UnDeclareNonCommutative.m | 4 +- .../Mathematica/Pauli/PauliTrace.m | 3 - .../Mathematica/QCD/OPESumExplicit.m | 3 - .../Shared/Options/FeynmanIntegralPrefactor.m | 3 - .../Shared/Options/NumberOfPolarizations.m | 3 - .../Shared/Options/PauliIndexNames.m | 3 - .../Shared/Options/SubtopologyMarker.m | 2 +- .../Mathematica/Shared/Symbols/CLC.m | 3 - .../Mathematica/Shared/Symbols/CLCD.m | 3 - .../Mathematica/Shared/Symbols/Eps.m | 3 - .../Mathematica/Shared/Symbols/LC.m | 3 - .../Mathematica/Shared/Symbols/LCD.m | 3 - .../Symbols/LightConePerpendicularComponent.m | 3 - .../Mathematica/Shared/Symbols/PauliSigma.m | 3 - .../Mathematica/Shared/Symbols/PauliXi.m | 3 - .../Shared/Tools/FCCompareNumbers.m | 4 - .../Mathematica/Shared/Tools/PowerFactor.m | 3 - .../Mathematica/Tables/Amplitude.m | 3 - .../Documentation/Mathematica/Tables/Hill.m | 3 - .../Mathematica/Tables/HypergeometricIR.m | 3 - .../Mathematica/Tutorials/ColorAlgebra.m | 2 +- .../Mathematica/Tutorials/Contractions.m | 2 +- .../Mathematica/Tutorials/Dimensions.m | 2 +- .../Mathematica/Tutorials/DiracAlgebra.m | 2 +- .../Mathematica/Tutorials/Indices.m | 2 +- .../Mathematica/Tutorials/InternalExternal.m | 4 +- .../Mathematica/Tutorials/Kinematics.m | 2 +- .../Mathematica/Tutorials/LightCone.m | 74 +++++- .../Mathematica/Tutorials/Loops.m | 2 +- .../Mathematica/Tutorials/Nonrelativistic.m | 5 +- .../Documentation/Scripts/cleanUpMarkdown.sh | 4 + .../Scripts/filters/allowbreak.lua | 3 + .../Documentation/Scripts/filters/test.lua | 17 ++ 219 files changed, 1493 insertions(+), 733 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/img/04o1hrqxpf60s.svg create mode 100644 FeynCalc/Documentation/Markdown/img/0aknzgv9vc0z9.svg create mode 100644 FeynCalc/Documentation/Markdown/img/0ctuipjuoiffd.svg create mode 100644 FeynCalc/Documentation/Markdown/img/0gap32avu3bc5.svg create mode 100644 FeynCalc/Documentation/Markdown/img/0h6kq1ltbsocf.svg create mode 100644 FeynCalc/Documentation/Markdown/img/0qnch25ldaf78.svg create mode 100644 FeynCalc/Documentation/Markdown/img/1atksrkz4jlnv.svg create mode 100644 FeynCalc/Documentation/Markdown/img/1umsofjfi8ghr.svg diff --git a/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorN.md b/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorN.md index 44be4b6c..4adb58be 100644 --- a/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorN.md +++ b/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## $FCDefaultLightconeVectorN `$FCDefaultLightconeVectorN` is a global variable which is set to FCGV["n"]. It denotes the default name for the vector $n$ in the lightcone decomposition for Lorentz tensors. diff --git a/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorNB.md b/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorNB.md index 2a718585..a42e3259 100644 --- a/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorNB.md +++ b/FeynCalc/Documentation/Markdown/$FCDefaultLightconeVectorNB.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## $FCDefaultLightconeVectorNB `$FCDefaultLightconeVectorNB` is a global variable which is set to FCGV["nb"]. It denotes the default name for the vector $\bar{n}$ in the lightcone decomposition for Lorentz tensors. diff --git a/FeynCalc/Documentation/Markdown/$FeynArtsDirectory.md b/FeynCalc/Documentation/Markdown/$FeynArtsDirectory.md index 619beb52..1b48ba02 100644 --- a/FeynCalc/Documentation/Markdown/$FeynArtsDirectory.md +++ b/FeynCalc/Documentation/Markdown/$FeynArtsDirectory.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$FeynCalcDirectory]($FeynCalcDirectory.md). +[Overview](Extra/FeynCalc.md), [\$FeynCalcDirectory](\$FeynCalcDirectory.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$FeynCalcDirectory.md b/FeynCalc/Documentation/Markdown/$FeynCalcDirectory.md index a815838b..931d36c0 100644 --- a/FeynCalc/Documentation/Markdown/$FeynCalcDirectory.md +++ b/FeynCalc/Documentation/Markdown/$FeynCalcDirectory.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$FeynArtsDirectory]($FeynArtsDirectory.md). +[Overview](Extra/FeynCalc.md), [\$FeynArtsDirectory](\$FeynArtsDirectory.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$FeynCalcLastCommitDateHash.md b/FeynCalc/Documentation/Markdown/$FeynCalcLastCommitDateHash.md index 1941d754..ca31f1d5 100644 --- a/FeynCalc/Documentation/Markdown/$FeynCalcLastCommitDateHash.md +++ b/FeynCalc/Documentation/Markdown/$FeynCalcLastCommitDateHash.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## $FeynCalcLastCommitDateHash The setting of `$FeynCalcLastCommitDateHash` provides the date and the hash of the last commit in the branch from which the current FeynCalc version originates. diff --git a/FeynCalc/Documentation/Markdown/$LeviCivitaSign.md b/FeynCalc/Documentation/Markdown/$LeviCivitaSign.md index 2e1da225..264450f3 100644 --- a/FeynCalc/Documentation/Markdown/$LeviCivitaSign.md +++ b/FeynCalc/Documentation/Markdown/$LeviCivitaSign.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## $LeviCivitaSign `$LeviCivitaSign` is a global variable that determines the sign in the result of a Dirac trace of four gamma matrices and $\gamma^5$. `$LeviCivitaSign` is by default set to `-1` which corresponds to the convention `TR[LC[a,b,c,d,5]] = -4*I*Eps[a,b,c,d]`. Setting `$LeviCivitaSign=-I` will switch to the FORM-convention. diff --git a/FeynCalc/Documentation/Markdown/$LimitTo4.md b/FeynCalc/Documentation/Markdown/$LimitTo4.md index 220d2282..21a3ab0a 100644 --- a/FeynCalc/Documentation/Markdown/$LimitTo4.md +++ b/FeynCalc/Documentation/Markdown/$LimitTo4.md @@ -17,7 +17,7 @@ The modern and more flexible way to simplify amplitudes involving IR-finite `PaV ### See also -[Overview](Extra/FeynCalc.md), [PaVe](PaVe.md), [PaVeReduce](PaVeReduce.md), [OneLoop](OneLoop.md), [$LimitTo4IRUnsafe]($LimitTo4IRUnsafe.md), [PaVeLimitTo4](PaVeLimitTo4.md). +[Overview](Extra/FeynCalc.md), [PaVe](PaVe.md), [PaVeReduce](PaVeReduce.md), [OneLoop](OneLoop.md), [\$LimitTo4IRUnsafe](\$LimitTo4IRUnsafe.md), [PaVeLimitTo4](PaVeLimitTo4.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$LimitTo4IRUnsafe.md b/FeynCalc/Documentation/Markdown/$LimitTo4IRUnsafe.md index 57327db1..014df215 100644 --- a/FeynCalc/Documentation/Markdown/$LimitTo4IRUnsafe.md +++ b/FeynCalc/Documentation/Markdown/$LimitTo4IRUnsafe.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [PaVe](PaVe.md), [PaVeReduce](PaVeReduce.md), [OneLoop](OneLoop.md), [$LimitTo4]($LimitTo4.md), [PaVeLimitTo4](PaVeLimitTo4.md). +[Overview](Extra/FeynCalc.md), [PaVe](PaVe.md), [PaVeReduce](PaVeReduce.md), [OneLoop](OneLoop.md), [\$LimitTo4](\$LimitTo4.md), [PaVeLimitTo4](PaVeLimitTo4.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$LoadAddOns.md b/FeynCalc/Documentation/Markdown/$LoadAddOns.md index dd9147e0..8283d922 100644 --- a/FeynCalc/Documentation/Markdown/$LoadAddOns.md +++ b/FeynCalc/Documentation/Markdown/$LoadAddOns.md @@ -4,6 +4,6 @@ ### See also -[Overview](Extra/FeynCalc.md), [$RenameFeynCalcObjects]($RenameFeynCalcObjects.md). +[Overview](Extra/FeynCalc.md), [\$RenameFeynCalcObjects](\$RenameFeynCalcObjects.md). ### Examples \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/$LoadFeynArts.md b/FeynCalc/Documentation/Markdown/$LoadFeynArts.md index b52b64b4..7b63b418 100644 --- a/FeynCalc/Documentation/Markdown/$LoadFeynArts.md +++ b/FeynCalc/Documentation/Markdown/$LoadFeynArts.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$LoadAddOns]($LoadAddOns.md). +[Overview](Extra/FeynCalc.md), [\$LoadAddOns](\$LoadAddOns.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$LoadPhi.md b/FeynCalc/Documentation/Markdown/$LoadPhi.md index e375880e..b302e80d 100644 --- a/FeynCalc/Documentation/Markdown/$LoadPhi.md +++ b/FeynCalc/Documentation/Markdown/$LoadPhi.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$LoadAddOns]($LoadAddOns.md). +[Overview](Extra/FeynCalc.md), [\$LoadAddOns](\$LoadAddOns.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$LoadTARCER.md b/FeynCalc/Documentation/Markdown/$LoadTARCER.md index 9ad7c597..60a09d1d 100644 --- a/FeynCalc/Documentation/Markdown/$LoadTARCER.md +++ b/FeynCalc/Documentation/Markdown/$LoadTARCER.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$LoadAddOns]($LoadAddOns.md). +[Overview](Extra/FeynCalc.md), [\$LoadAddOns](\$LoadAddOns.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$RenameFeynCalcObjects.md b/FeynCalc/Documentation/Markdown/$RenameFeynCalcObjects.md index bd133f49..871deacd 100644 --- a/FeynCalc/Documentation/Markdown/$RenameFeynCalcObjects.md +++ b/FeynCalc/Documentation/Markdown/$RenameFeynCalcObjects.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$LoadAddOns]($LoadAddOns.md). +[Overview](Extra/FeynCalc.md), [\$LoadAddOns](\$LoadAddOns.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$TypesettingDim4.md b/FeynCalc/Documentation/Markdown/$TypesettingDim4.md index fb5b62ed..02e7db36 100644 --- a/FeynCalc/Documentation/Markdown/$TypesettingDim4.md +++ b/FeynCalc/Documentation/Markdown/$TypesettingDim4.md @@ -4,7 +4,7 @@ The string value of $TypesettingDim4 determines which symbols will be displayed ### See also -[Overview](Extra/FeynCalc.md), [$TypesettingDimD]($TypesettingDimD.md), [$TypesettingDimE]($TypesettingDimE.md). +[Overview](Extra/FeynCalc.md), [\$TypesettingDimD](\$TypesettingDimD.md), [\$TypesettingDimE](\$TypesettingDimE.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$TypesettingDimD.md b/FeynCalc/Documentation/Markdown/$TypesettingDimD.md index ac47bfa0..c86f7843 100644 --- a/FeynCalc/Documentation/Markdown/$TypesettingDimD.md +++ b/FeynCalc/Documentation/Markdown/$TypesettingDimD.md @@ -4,7 +4,7 @@ The string value of `$TypesettingDimD` determines which symbols will be displaye ### See also -[Overview](Extra/FeynCalc.md), [$TypesettingDim4]($TypesettingDim4.md), [$TypesettingDimE]($TypesettingDimE.md). +[Overview](Extra/FeynCalc.md), [\$TypesettingDim4](\$TypesettingDim4.md), [\$TypesettingDimE](\$TypesettingDimE.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/$TypesettingDimE.md b/FeynCalc/Documentation/Markdown/$TypesettingDimE.md index a4177045..b4a83475 100644 --- a/FeynCalc/Documentation/Markdown/$TypesettingDimE.md +++ b/FeynCalc/Documentation/Markdown/$TypesettingDimE.md @@ -4,7 +4,7 @@ The string value of `$TypesettingDimE` determines which symbols will be displaye ### See also -[Overview](Extra/FeynCalc.md), [$TypesettingDim4]($TypesettingDim4.md), [$TypesettingDimD]($TypesettingDimD.md). +[Overview](Extra/FeynCalc.md), [\$TypesettingDim4](\$TypesettingDim4.md), [\$TypesettingDimD](\$TypesettingDimD.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/A0.md b/FeynCalc/Documentation/Markdown/A0.md index 7505edc3..910f6bca 100644 --- a/FeynCalc/Documentation/Markdown/A0.md +++ b/FeynCalc/Documentation/Markdown/A0.md @@ -26,7 +26,6 @@ $$-\frac{2 m^2 \;\text{B}_0\left(0,m^2,m^2\right)}{2-D}$$ ```mathematica SetOptions[A0, A0ToB0 -> False]; - ``` According to the rules of dimensional regularization $A_0(0)$ is set to 0. diff --git a/FeynCalc/Documentation/Markdown/Abbreviation.md b/FeynCalc/Documentation/Markdown/Abbreviation.md index c5914541..5b848f9d 100644 --- a/FeynCalc/Documentation/Markdown/Abbreviation.md +++ b/FeynCalc/Documentation/Markdown/Abbreviation.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$Abbreviations]($Abbreviations.md), [OneLoop](OneLoop.md), [PaVeReduce](PaVeReduce.md), [WriteOut](WriteOut.md), [WriteOutPaVe](WriteOutPaVe.md), [GluonPropagator](GluonPropagator.md), [GluonVertex](GluonVertex.md), [QuarkPropagator](QuarkPropagator.md). +[Overview](Extra/FeynCalc.md), [\$Abbreviations](\$Abbreviations.md), [OneLoop](OneLoop.md), [PaVeReduce](PaVeReduce.md), [WriteOut](WriteOut.md), [WriteOutPaVe](WriteOutPaVe.md), [GluonPropagator](GluonPropagator.md), [GluonVertex](GluonVertex.md), [QuarkPropagator](QuarkPropagator.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/Amplitude.md b/FeynCalc/Documentation/Markdown/Amplitude.md index c2837e40..e6a9ca64 100644 --- a/FeynCalc/Documentation/Markdown/Amplitude.md +++ b/FeynCalc/Documentation/Markdown/Amplitude.md @@ -23,10 +23,7 @@ This is the amplitude of a gluon self-energy diagram: ```mathematica Amplitude["se1g1"] -Explicit[%] - - - +Explicit[%] ``` $$\text{SUNDeltaContract}\left(f^{\text{FCGV}(\text{a})\text{FCGV}(\text{c})\text{FCGV}(\text{e})} f^{\text{FCGV}(\text{b})\text{FCGV}(\text{d})\text{FCGV}(\text{f})} \Pi _{\text{FCGV}(\text{e})\text{FCGV}(\text{f})}^{\text{FCGV}(\beta )\text{FCGV}(\sigma )}(\text{FCGV}(\text{q})) V^{\text{FCGV}(\mu )\text{FCGV}(\alpha )\text{FCGV}(\beta )}(\text{FCGV}(\text{p})\text{, }\;\text{FCGV}(\text{q})-\text{FCGV}(\text{p})\text{, }-\text{FCGV}(\text{q})) V^{\text{FCGV}(\nu )\text{FCGV}(\rho )\text{FCGV}(\sigma )}(-\text{FCGV}(\text{p})\text{, }\;\text{FCGV}(\text{p})-\text{FCGV}(\text{q})\text{, }\;\text{FCGV}(\text{q})) \Pi _{\text{FCGV}(\text{c})\text{FCGV}(\text{d})}^{\text{FCGV}(\alpha )\text{FCGV}(\rho )}(\text{FCGV}(\text{p})-\text{FCGV}(\text{q}))\right)$$ diff --git a/FeynCalc/Documentation/Markdown/ApartFF.md b/FeynCalc/Documentation/Markdown/ApartFF.md index 12eec4e1..be4b5a73 100644 --- a/FeynCalc/Documentation/Markdown/ApartFF.md +++ b/FeynCalc/Documentation/Markdown/ApartFF.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## ApartFF `ApartFF[amp, {q1, q2, ...}]` partial fractions loop integrals by decomposing them into simpler integrals that contain only linearly independent propagators. It uses `FCApart` as a backend and is equally suitable for 1-loop and multi-loop integrals. diff --git a/FeynCalc/Documentation/Markdown/CFAD.md b/FeynCalc/Documentation/Markdown/CFAD.md index 3540cd7d..a96e094e 100644 --- a/FeynCalc/Documentation/Markdown/CFAD.md +++ b/FeynCalc/Documentation/Markdown/CFAD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## CFAD `CFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a Cartesian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Cartesian scalar products in $D-1$ dimensions. diff --git a/FeynCalc/Documentation/Markdown/CLC.md b/FeynCalc/Documentation/Markdown/CLC.md index 03d16d0f..36603a74 100644 --- a/FeynCalc/Documentation/Markdown/CLC.md +++ b/FeynCalc/Documentation/Markdown/CLC.md @@ -45,10 +45,7 @@ $$\bar{\delta }^{jl} \bar{\delta }^{km}-\bar{\delta }^{jm} \bar{\delta }^{kl}$$ ```mathematica CLC[i, j, k] CV[Subscript[p, 1], i] CV[Subscript[p, 2], j] CV[Subscript[p, 3], k] -Contract[%] - - - +Contract[%] ``` $$\overline{p}_1{}^i \overline{p}_2{}^j \overline{p}_3{}^k \bar{\epsilon }^{ijk}$$ diff --git a/FeynCalc/Documentation/Markdown/CLCD.md b/FeynCalc/Documentation/Markdown/CLCD.md index 3dd19f1c..ed35fffd 100644 --- a/FeynCalc/Documentation/Markdown/CLCD.md +++ b/FeynCalc/Documentation/Markdown/CLCD.md @@ -45,10 +45,7 @@ $$(2-D) (3-D) (p\cdot q)$$ ```mathematica CLCD[i, j, k] CVD[Subscript[p, 1], i] CVD[Subscript[p, 2], j] CVD[Subscript[p, 3], k] -Contract[%] - - - +Contract[%] ``` $$p_1{}^i p_2{}^j p_3{}^k \overset{\text{}}{\epsilon }^{ijk}$$ diff --git a/FeynCalc/Documentation/Markdown/CartesianPairContract.md b/FeynCalc/Documentation/Markdown/CartesianPairContract.md index 9922468e..bf88bee3 100644 --- a/FeynCalc/Documentation/Markdown/CartesianPairContract.md +++ b/FeynCalc/Documentation/Markdown/CartesianPairContract.md @@ -43,10 +43,7 @@ CartesianPair[CartesianIndex[i], CartesianMomentum[p + q]] CartesianPair[Cartesi % /. CartesianPair -> CartesianPairContract -% /. CartesianPairContract -> CartesianPair - - - +% /. CartesianPairContract -> CartesianPair ``` $$\left(\overline{p}+\overline{q}\right)^i \left(\overline{r}+\overline{s}\right)^i$$ diff --git a/FeynCalc/Documentation/Markdown/ColorAlgebra.md b/FeynCalc/Documentation/Markdown/ColorAlgebra.md index 797d4fe3..67c35b2e 100644 --- a/FeynCalc/Documentation/Markdown/ColorAlgebra.md +++ b/FeynCalc/Documentation/Markdown/ColorAlgebra.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Color algebra ### See also [Overview](Extra/FeynCalc.md). -### Notation +### Notation for colored objects FeynCalc objects relevant for the color algebra are diff --git a/FeynCalc/Documentation/Markdown/Contractions.md b/FeynCalc/Documentation/Markdown/Contractions.md index 775bbcdc..97d9389b 100644 --- a/FeynCalc/Documentation/Markdown/Contractions.md +++ b/FeynCalc/Documentation/Markdown/Contractions.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Contractions ### See also [Overview](Extra/FeynCalc.md). -### Simplifications +### Simplifications of tensorial expressions Now that we have some basic understanding of FeynCalc objects, let us do something with them. Contractions of Lorentz indices are one of the most essential operations in symbolic QFT calculations. In FeynCalc the corresponding function is called `Contract` diff --git a/FeynCalc/Documentation/Markdown/CovariantFieldDerivative.md b/FeynCalc/Documentation/Markdown/CovariantFieldDerivative.md index 10253cde..5e346b72 100644 --- a/FeynCalc/Documentation/Markdown/CovariantFieldDerivative.md +++ b/FeynCalc/Documentation/Markdown/CovariantFieldDerivative.md @@ -1,3 +1,5 @@ +## CovariantFieldDerivative + `CovariantFieldDerivative[f[x], x, {li1, li2, ...}]` is a covariant derivative of `f[x]` with respect to space-time variables `x` and with Lorentz indices `li1, li2, ...`. `CovariantFieldDerivative` has only typesetting definitions by default. The user is must supply his/her own definition of the actual function. ### See also diff --git a/FeynCalc/Documentation/Markdown/Dimensions.md b/FeynCalc/Documentation/Markdown/Dimensions.md index d562faa9..b695aea1 100644 --- a/FeynCalc/Documentation/Markdown/Dimensions.md +++ b/FeynCalc/Documentation/Markdown/Dimensions.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Dimensions ### See also [Overview](Extra/FeynCalc.md). -### Notation +### Notation for tensors living in different dimensions You might have wondered why 4-vectors, scalar products and Dirac matrices all have a bar, like $\bar{p}^\mu$ or $\bar{p} \cdot \bar{q}$. The bar is there to specify that they are 4-dimensional objects. Objects that live in $D$ dimensions do not have a bar, cf. @@ -20,7 +16,7 @@ FVD[p, \[Mu]] $$p^{\mu }$$ -``` +```mathematica (*Pair[LorentzIndex[\[Mu], D], Momentum[p, D]]*) ``` @@ -31,7 +27,7 @@ MTD[\[Mu], \[Nu]] $$g^{\mu \nu }$$ -``` +```mathematica (*Pair[LorentzIndex[\[Mu], D], LorentzIndex[\[Nu], D]]*) ``` @@ -44,7 +40,7 @@ FVE[p, \[Mu]] $$\hat{p}^{\mu }$$ -``` +```mathematica (*Pair[LorentzIndex[\[Mu], -4 + D], Momentum[p, -4 + D]]*) ``` @@ -55,7 +51,7 @@ MTE[p, q] $$\hat{g}^{pq}$$ -``` +```mathematica (*Pair[LorentzIndex[p, -4 + D], LorentzIndex[q, -4 + D]]*) ``` diff --git a/FeynCalc/Documentation/Markdown/DiracAlgebra.md b/FeynCalc/Documentation/Markdown/DiracAlgebra.md index c47cd9f6..3e6ecc96 100644 --- a/FeynCalc/Documentation/Markdown/DiracAlgebra.md +++ b/FeynCalc/Documentation/Markdown/DiracAlgebra.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Dirac algebra ### See also [Overview](Extra/FeynCalc.md). -### Simplifications +### Simplifications of Dirac matrix chains The two most relevant functions for the manipulations of Dirac matrices are `DiracSimplify` and `DiracTrace`. diff --git a/FeynCalc/Documentation/Markdown/DiracTrace.md b/FeynCalc/Documentation/Markdown/DiracTrace.md index cb1c38b8..ba1e1fcf 100644 --- a/FeynCalc/Documentation/Markdown/DiracTrace.md +++ b/FeynCalc/Documentation/Markdown/DiracTrace.md @@ -1,11 +1,3 @@ -```mathematica - -``` - -```mathematica - -``` - ## DiracTrace `DiracTrace[exp]` is the head of Dirac traces. By default the trace is not evaluated. The evaluation occurs only when the option `DiracTraceEvaluate` is set to `True`. It is recommended to use `DiracSimplify`, which will automatically evaluate all Dirac traces in the input expression. @@ -148,7 +140,7 @@ DiracSimplify[%] $$\text{tr}\left(\left(m_e-\gamma \cdot q\right).\bar{\gamma }^{\nu }.\left(\bar{\gamma }\cdot \overline{p}+m_e-\gamma \cdot q\right).\bar{\gamma }^{\mu }\right)$$ -![1nywe2zsmni95](img/1nywe2zsmni95.svg) +![04o1hrqxpf60s](img/04o1hrqxpf60s.svg) $$\text{\$Aborted}$$ @@ -182,14 +174,14 @@ FCSetDiracGammaScheme["BMHV"]; AbsoluteTiming[r1 = DiracSimplify[DiracTrace[GAD[\[Mu], \[Nu], \[Rho]] . GA[5] . GAD[\[Sigma], \[Delta], \[Tau]] . GA[7]]];] ``` -$$\{0.252561,\text{Null}\}$$ +$$\{0.251861,\text{Null}\}$$ ```mathematica AbsoluteTiming[r2 = DiracSimplify[DiracTrace[GAD[\[Mu], \[Nu], \[Rho]] . GA[5] . GAD[\[Sigma], \[Delta], \[Tau]] . GA[7], West -> False]];] ``` -$$\{2.20889,\text{Null}\}$$ +$$\{2.23117,\text{Null}\}$$ ```mathematica r1 === r2 diff --git a/FeynCalc/Documentation/Markdown/DotSimplify.md b/FeynCalc/Documentation/Markdown/DotSimplify.md index cf8c704f..edc7140e 100644 --- a/FeynCalc/Documentation/Markdown/DotSimplify.md +++ b/FeynCalc/Documentation/Markdown/DotSimplify.md @@ -68,7 +68,6 @@ $$-a.a.b-z a.c.a+a.c$$ AntiCommutator[b, a] =. DotSimplify[a . (b - z c) . a, DotSimplifyRelations -> {a . c -> 1/z}] - ``` $$a.b.a-a$$ diff --git a/FeynCalc/Documentation/Markdown/Eps.md b/FeynCalc/Documentation/Markdown/Eps.md index 2334ca99..1f3335de 100644 --- a/FeynCalc/Documentation/Markdown/Eps.md +++ b/FeynCalc/Documentation/Markdown/Eps.md @@ -82,10 +82,7 @@ $$-\frac{1}{24} i \overset{\text{}}{\epsilon }^{\mu '\nu '\rho '\alpha '}.\gamma ```mathematica DiracSimplify[ex1 . ex2] // Factor2 -% /. D -> 4 - - - +% /. D -> 4 ``` $$-\frac{1}{24} (1-D) (2-D) (3-D) D$$ diff --git a/FeynCalc/Documentation/Markdown/EpsChisholm.md b/FeynCalc/Documentation/Markdown/EpsChisholm.md index 1d82c279..be5b40ce 100644 --- a/FeynCalc/Documentation/Markdown/EpsChisholm.md +++ b/FeynCalc/Documentation/Markdown/EpsChisholm.md @@ -53,10 +53,7 @@ $$i m_s \bar{g}^{\alpha \rho } \left(\varphi (\overline{p}_3,m_s)\right).\bar{\g ```mathematica LC[\[Beta], \[Gamma], \[Mu], \[Nu]] FV[Subscript[p, 2], \[Gamma]] SpinorUBar[Subscript[p, 3], SMP["m_s"]] . GA[\[Beta], 7] . SpinorV[Subscript[p, 4], SMP["m_d"]] -% // EpsChisholm // DiracSimplify // Contract - - - +% // EpsChisholm // DiracSimplify // Contract ``` $$\overline{p}_2{}^{\gamma } \bar{\epsilon }^{\beta \gamma \mu \nu } \bar{u}\left(p_3,m_s\right).\bar{\gamma }^{\beta }.\bar{\gamma }^7.v\left(p_4,m_d\right)$$ diff --git a/FeynCalc/Documentation/Markdown/EpsContractFreeQ.md b/FeynCalc/Documentation/Markdown/EpsContractFreeQ.md index c3e7e6d8..8b2f2b68 100644 --- a/FeynCalc/Documentation/Markdown/EpsContractFreeQ.md +++ b/FeynCalc/Documentation/Markdown/EpsContractFreeQ.md @@ -21,10 +21,7 @@ $$\text{True}$$ ```mathematica FCI[LC[p1, p2, p3, mu] LC[q1, q2, q3, q4]] -EpsContractFreeQ[%] - - - +EpsContractFreeQ[%] ``` $$\bar{\epsilon }^{\text{p1}\;\text{p2}\;\text{p3}\;\text{mu}} \bar{\epsilon }^{\text{q1}\;\text{q2}\;\text{q3}\;\text{q4}}$$ diff --git a/FeynCalc/Documentation/Markdown/ExpandPartialD.md b/FeynCalc/Documentation/Markdown/ExpandPartialD.md index 759158eb..7523bcd0 100644 --- a/FeynCalc/Documentation/Markdown/ExpandPartialD.md +++ b/FeynCalc/Documentation/Markdown/ExpandPartialD.md @@ -6,7 +6,7 @@ By default the function assumes that there are no expressions outside of `exp` o ### See also -[Overview](Extra/FeynCalc.md), [ExplicitPartialD](ExplicitPartialD.md), [LeftPartialD](LeftPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [PartialDRelations](PartialDRelations.md), [RightPartialD](RightPartialD.md), [LeftRightNablaD](LeftRightNablalD.md), [LeftRightNablaD2](LeftRightNablalD2.md), [LeftNablaD](LeftNablalD.md), [RightNablaD](RightNablalD.md). +[Overview](Extra/FeynCalc.md), [ExplicitPartialD](ExplicitPartialD.md), [LeftPartialD](LeftPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [PartialDRelations](PartialDRelations.md), [RightPartialD](RightPartialD.md), [LeftRightNablaD](LeftRightNablaD.md), [LeftRightNablaD2](LeftRightNablaD2.md), [LeftNablaD](LeftNablaD.md), [RightNablaD](RightNablaD.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/ExpandScalarProduct.md b/FeynCalc/Documentation/Markdown/ExpandScalarProduct.md index 92d5f0da..fe68b007 100644 --- a/FeynCalc/Documentation/Markdown/ExpandScalarProduct.md +++ b/FeynCalc/Documentation/Markdown/ExpandScalarProduct.md @@ -130,14 +130,11 @@ DataType[b, FCVariable] = True; ```mathematica ExpandScalarProduct[SP[P, Q] /. P -> a P1 + b P2] -StandardForm[%] - - - +StandardForm[%] ``` $$a \left(\overline{\text{P1}}\cdot \overline{Q}\right)+b \left(\overline{\text{P2}}\cdot \overline{Q}\right)$$ -``` +```mathematica (*a Pair[Momentum[P1], Momentum[Q]] + b Pair[Momentum[P2], Momentum[Q]]*) ``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/Expansions.md b/FeynCalc/Documentation/Markdown/Expansions.md index eb83dbb1..00b67b15 100644 --- a/FeynCalc/Documentation/Markdown/Expansions.md +++ b/FeynCalc/Documentation/Markdown/Expansions.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Expanding and undoing expansions ### See also diff --git a/FeynCalc/Documentation/Markdown/ExplicitPartialD.md b/FeynCalc/Documentation/Markdown/ExplicitPartialD.md index afde6ff0..5340bf4b 100644 --- a/FeynCalc/Documentation/Markdown/ExplicitPartialD.md +++ b/FeynCalc/Documentation/Markdown/ExplicitPartialD.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [ExpandPartialD](ExpandPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [LeftRightPartialD2](LeftRightPartialD2.md), [LeftRightNablaD](LeftRightNablalD.md), [LeftRightNablaD2](LeftRightNablalD2.md), [LeftNablaD](LeftNablalD.md), [RightNablaD](RightNablalD.md). +[Overview](Extra/FeynCalc.md), [ExpandPartialD](ExpandPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [LeftRightPartialD2](LeftRightPartialD2.md), [LeftRightNablaD](LeftRightNablaD.md), [LeftRightNablaD2](LeftRightNablaD2.md), [LeftNablaD](LeftNablaD.md), [RightNablaD](RightNablaD.md). ### Examples @@ -83,10 +83,7 @@ $$\frac{1}{2} \overleftarrow{\partial }_i-\vec{\partial }_i$$ ```mathematica LeftRightNablaD2[\[Mu]] -ExplicitPartialD[%] - - - +ExplicitPartialD[%] ``` $$\overleftrightarrow{\nabla }_{\mu }$$ diff --git a/FeynCalc/Documentation/Markdown/Extra/DiracAlgebraFormulas.md b/FeynCalc/Documentation/Markdown/Extra/DiracAlgebraFormulas.md index 31b049bd..76cf5eec 100644 --- a/FeynCalc/Documentation/Markdown/Extra/DiracAlgebraFormulas.md +++ b/FeynCalc/Documentation/Markdown/Extra/DiracAlgebraFormulas.md @@ -1,4 +1,4 @@ -## Dirac algebra +## Useful formulas for Dirac algebra ### See also diff --git a/FeynCalc/Documentation/Markdown/FCCanonicalizeDummyIndices.md b/FeynCalc/Documentation/Markdown/FCCanonicalizeDummyIndices.md index af08099c..3f9cb4ab 100644 --- a/FeynCalc/Documentation/Markdown/FCCanonicalizeDummyIndices.md +++ b/FeynCalc/Documentation/Markdown/FCCanonicalizeDummyIndices.md @@ -132,10 +132,7 @@ while the rest will be ignored. R, r] . QuantumField[FCPartialD[{CartesianIndex[i], r}], FCPartialD[{CartesianIndex[i], r}], \[Phi], PauliIndex[k2], PauliIndex[k1], R, r]) -FCCanonicalizeDummyIndices[%, CartesianIndexNames -> {j}, Head -> {CartesianIndex}] - - - +FCCanonicalizeDummyIndices[%, CartesianIndexNames -> {j}, Head -> {CartesianIndex}] ``` $$\phi ^{+\text{k1}\;\text{k2}Rr}.\left(\partial _{\{i,r\}}\partial _{\{i,r\}}\phi ^{\text{k2}\;\text{k1}Rr}\right)$$ diff --git a/FeynCalc/Documentation/Markdown/FCCheckVersion.md b/FeynCalc/Documentation/Markdown/FCCheckVersion.md index 12211235..c89eb405 100644 --- a/FeynCalc/Documentation/Markdown/FCCheckVersion.md +++ b/FeynCalc/Documentation/Markdown/FCCheckVersion.md @@ -6,7 +6,7 @@ Notice that this function is available only since FeynCalc 9.3. ### See also -[Overview](Extra/FeynCalc.md), [$FeynCalcVersion]($FeynCalcVersion.md). +[Overview](Extra/FeynCalc.md), [\$FeynCalcVersion](\$FeynCalcVersion.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/FCClearScalarProducts.md b/FeynCalc/Documentation/Markdown/FCClearScalarProducts.md index 356cb9f2..911da45f 100644 --- a/FeynCalc/Documentation/Markdown/FCClearScalarProducts.md +++ b/FeynCalc/Documentation/Markdown/FCClearScalarProducts.md @@ -21,10 +21,7 @@ FCClearScalarProducts[] Pair[Momentum[p], Momentum[p]] -SP[p, p] - - - +SP[p, p] ``` $$\overline{p}^2$$ diff --git a/FeynCalc/Documentation/Markdown/FCCompareNumbers.md b/FeynCalc/Documentation/Markdown/FCCompareNumbers.md index b730621a..180f277a 100644 --- a/FeynCalc/Documentation/Markdown/FCCompareNumbers.md +++ b/FeynCalc/Documentation/Markdown/FCCompareNumbers.md @@ -79,10 +79,7 @@ $$0$$ The application of `Chop` can be of course disabled ```mathematica -FCCompareNumbers[lhs, rhs, Chop -> False] - - - +FCCompareNumbers[lhs, rhs, Chop -> False] ``` $$\text{FCCompareNumbers: Minimal number of significant digits to agree in: }6$$ diff --git a/FeynCalc/Documentation/Markdown/FCDiffEqSolve.md b/FeynCalc/Documentation/Markdown/FCDiffEqSolve.md index b7ab9b8c..00523fd6 100644 --- a/FeynCalc/Documentation/Markdown/FCDiffEqSolve.md +++ b/FeynCalc/Documentation/Markdown/FCDiffEqSolve.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCDiffEqSolve `FCDiffEqSolve[mat, var, eps, n]` constructs a solution for a single-variable differential equation $G' = \varepsilon \mathcal{B} G$ in the canonical form, where `mat` is $B$, `var` is the variable w.r.t. which $G$ was differentiated and `n` is the required order in `eps`. diff --git a/FeynCalc/Documentation/Markdown/FCDisableTraditionalFormOutput.md b/FeynCalc/Documentation/Markdown/FCDisableTraditionalFormOutput.md index d940ff5f..866faf23 100644 --- a/FeynCalc/Documentation/Markdown/FCDisableTraditionalFormOutput.md +++ b/FeynCalc/Documentation/Markdown/FCDisableTraditionalFormOutput.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$FCTraditionalFormOutput]($FCTraditionalFormOutput.md), [FCDisableTraditionalFormOutput](FCDisableTraditionalFormOutput.md). +[Overview](Extra/FeynCalc.md), [\$FCTraditionalFormOutput](\$FCTraditionalFormOutput.md), [FCDisableTraditionalFormOutput](FCDisableTraditionalFormOutput.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/FCEnableTraditionalFormOutput.md b/FeynCalc/Documentation/Markdown/FCEnableTraditionalFormOutput.md index cf64b9b9..5bf196a5 100644 --- a/FeynCalc/Documentation/Markdown/FCEnableTraditionalFormOutput.md +++ b/FeynCalc/Documentation/Markdown/FCEnableTraditionalFormOutput.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$FCTraditionalFormOutput]($FCTraditionalFormOutput.md), [FCDisableTraditionalFormOutput](FCDisableTraditionalFormOutput.md). +[Overview](Extra/FeynCalc.md), [\$FCTraditionalFormOutput](\$FCTraditionalFormOutput.md), [FCDisableTraditionalFormOutput](FCDisableTraditionalFormOutput.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/FCFeynmanParametrize.md b/FeynCalc/Documentation/Markdown/FCFeynmanParametrize.md index fd6c9d22..3eef4c51 100644 --- a/FeynCalc/Documentation/Markdown/FCFeynmanParametrize.md +++ b/FeynCalc/Documentation/Markdown/FCFeynmanParametrize.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCFeynmanParametrize `FCFeynmanParametrize[int, {q1, q2, ...}]` introduces Feynman parameters for the multi-loop integral int. diff --git a/FeynCalc/Documentation/Markdown/FCGPL.md b/FeynCalc/Documentation/Markdown/FCGPL.md index 97fbc04e..d27762a1 100644 --- a/FeynCalc/Documentation/Markdown/FCGPL.md +++ b/FeynCalc/Documentation/Markdown/FCGPL.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCGPL `FCGPL[{inds_}, var]` represents a Goncharov polylogarithm (GPL) with indices `inds` and argument `var`. diff --git a/FeynCalc/Documentation/Markdown/FCGetDummyIndices.md b/FeynCalc/Documentation/Markdown/FCGetDummyIndices.md index 42f9b233..81243df2 100644 --- a/FeynCalc/Documentation/Markdown/FCGetDummyIndices.md +++ b/FeynCalc/Documentation/Markdown/FCGetDummyIndices.md @@ -45,10 +45,7 @@ $$\{\}$$ ```mathematica FCI[SUNT[a, a]] -FCGetDummyIndices[%, {SUNIndex}] - - - +FCGetDummyIndices[%, {SUNIndex}] ``` $$T^a.T^a$$ diff --git a/FeynCalc/Documentation/Markdown/FCHPL.md b/FeynCalc/Documentation/Markdown/FCHPL.md index 700bc28a..006dfe6b 100644 --- a/FeynCalc/Documentation/Markdown/FCHPL.md +++ b/FeynCalc/Documentation/Markdown/FCHPL.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCHPL `FCHPL[{inds_}, var]` represents a harmonic polylogarithm (HPL) with indices `inds` and argument `var`. diff --git a/FeynCalc/Documentation/Markdown/FCIteratedIntegral.md b/FeynCalc/Documentation/Markdown/FCIteratedIntegral.md index 9426d4d3..692cd0bb 100644 --- a/FeynCalc/Documentation/Markdown/FCIteratedIntegral.md +++ b/FeynCalc/Documentation/Markdown/FCIteratedIntegral.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCIteratedIntegral `FCIteratedIntegral[f,x,a,b]` is a special head indicating that the function $f$ represents an iterated integral or a linear combination thereof and that it should be integrated in $x$ from $a$ to $b$. This notation is understood by the function `FCIteratedIntegralEvaluate` that does the actual integration. diff --git a/FeynCalc/Documentation/Markdown/FCIteratedIntegralEvaluate.md b/FeynCalc/Documentation/Markdown/FCIteratedIntegralEvaluate.md index 8c892d17..b4a5d400 100644 --- a/FeynCalc/Documentation/Markdown/FCIteratedIntegralEvaluate.md +++ b/FeynCalc/Documentation/Markdown/FCIteratedIntegralEvaluate.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCIteratedIntegralEvaluate `FCIteratedIntegralEvaluate[ex]` evaluates iterated integrals in ex in terms of multiple polylogarithms. diff --git a/FeynCalc/Documentation/Markdown/FCIteratedIntegralSimplify.md b/FeynCalc/Documentation/Markdown/FCIteratedIntegralSimplify.md index 1f64ecb1..2717d149 100644 --- a/FeynCalc/Documentation/Markdown/FCIteratedIntegralSimplify.md +++ b/FeynCalc/Documentation/Markdown/FCIteratedIntegralSimplify.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCIteratedIntegralSimplify `FCIteratedIntegralSimplify[ex]` uses linearity to simplify nested products and linear combinations of `FCIteratedIntegral`s. diff --git a/FeynCalc/Documentation/Markdown/FCLoopCreatePartialFractioningRules.md b/FeynCalc/Documentation/Markdown/FCLoopCreatePartialFractioningRules.md index ffc1ca33..926237e9 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopCreatePartialFractioningRules.md +++ b/FeynCalc/Documentation/Markdown/FCLoopCreatePartialFractioningRules.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopCreatePartialFractioningRules `FCLoopCreatePartialFractioningRules[glis, topos] applies partial fraction decomposition to the given GLIs provided that the corresponding topologies contain linearly dependent propagators. The output is given as a list containing replacement rules and new topologies generated in the course of the decomposition. diff --git a/FeynCalc/Documentation/Markdown/FCLoopCreateRuleGLIToGLI.md b/FeynCalc/Documentation/Markdown/FCLoopCreateRuleGLIToGLI.md index dcb88102..cea5ca1f 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopCreateRuleGLIToGLI.md +++ b/FeynCalc/Documentation/Markdown/FCLoopCreateRuleGLIToGLI.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopCreateRuleGLIToGLI `FCLoopCreateRuleGLIToGLI[topology1, topology2]` creates a GLI replacement rule assuming that the `topology2` is a subtopology of `topology1`. Both topologies must be given as `FCTopology` objects. diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindSectors.md b/FeynCalc/Documentation/Markdown/FCLoopFindSectors.md index dc8d52e8..3429b9c6 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopFindSectors.md +++ b/FeynCalc/Documentation/Markdown/FCLoopFindSectors.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopFindSectors `FCLoopFindSectors[{GLI[...], ...}]` analyzes the indices of the GLI integrals in the given list and identifies sectors to which they belong. Notice that only `GLI`s with integer indices are supported. diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindSubtopologies.md b/FeynCalc/Documentation/Markdown/FCLoopFindSubtopologies.md index 4b78e810..c8e075c0 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopFindSubtopologies.md +++ b/FeynCalc/Documentation/Markdown/FCLoopFindSubtopologies.md @@ -1,3 +1,5 @@ +## FCLoopFindSubtopologies + `FCLoopFindSubtopologies[topo]` finds all scalefull subtopologies of the FCTopology `topo`. Each subtopology receives a marker that specifies the topology from which it was derived. The symbol denoting the marker is specified via the option `SubtopologyMarker`. Setting it to `False` will disable the inclusion of the markers diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindTopologies.md b/FeynCalc/Documentation/Markdown/FCLoopFindTopologies.md index 9337d93d..63f32dfc 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopFindTopologies.md +++ b/FeynCalc/Documentation/Markdown/FCLoopFindTopologies.md @@ -23,13 +23,17 @@ amp = Get[FileNameJoin[{$FeynCalcDirectory, "Documentation", "Examples", res = FCLoopFindTopologies[amp, {q1, q2}]; ``` -$$\text{Number of the initial candidate topologies: }3$$ +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }3$$ -$$\text{Number of the identified unique topologies: }3$$ +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }3$$ -$$\text{Number of the preferred topologies among the unique topologies: }0$$ +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ -$$\text{Number of the identified subtopologies: }0$$ +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }0$$ + +$$\text{FCLoopFindTopologies: }\;\text{Your topologies depend on the follwing kinematic invariants that are not all entirely lowercase: }\{\text{Pair[Momentum[p, D], Momentum[p, D]]}\}$$ + +$$\text{FCLoopFindTopologies: }\;\text{This may lead to issues if these topologies are meant to be processed using tools such as FIRE, KIRA or Fermat.}$$ ```mathematica res // Last @@ -54,13 +58,17 @@ $$544$$ res = FCLoopFindTopologies[topos, {k1, k2}]; ``` -$$\text{Number of the initial candidate topologies: }18$$ +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }18$$ + +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }18$$ + +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ -$$\text{Number of the identified unique topologies: }18$$ +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }0$$ -$$\text{Number of the preferred topologies among the unique topologies: }0$$ +$$\text{FCLoopFindTopologies: }\;\text{Your topologies depend on the follwing kinematic invariants that are not all entirely lowercase: }\{\text{mb},\text{mc},\text{Pair[Momentum[p1, D], Momentum[p1, D]]}\}$$ -$$\text{Number of the identified subtopologies: }0$$ +$$\text{FCLoopFindTopologies: }\;\text{This may lead to issues if these topologies are meant to be processed using tools such as FIRE, KIRA or Fermat.}$$ Show the first two topologies @@ -79,16 +87,17 @@ isolatedTopos = FCLoopIsolate[topos[[44 ;; 48]], {k1, k2}, Collecting -> False, ``` ```mathematica -res = FCLoopFindTopologies[isolatedTopos, {k1, k2}, FCLoopIsolate -> loopDen, Head -> ampDen, Collecting -> False]; - - - +res = FCLoopFindTopologies[isolatedTopos, {k1, k2}, FCLoopIsolate -> loopDen, Head -> ampDen, Collecting -> False]; ``` -$$\text{Number of the initial candidate topologies: }2$$ +$$\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{Number of the identified unique topologies: }2$$ +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }0$$ -$$\text{Number of the preferred topologies among the unique topologies: }0$$ +$$\text{FCLoopFindTopologies: }\;\text{Your topologies depend on the follwing kinematic invariants that are not all entirely lowercase: }\{\text{mb},\text{mc},\text{Pair[Momentum[p1, D], Momentum[p1, D]]}\}$$ -$$\text{Number of the identified subtopologies: }0$$ \ No newline at end of file +$$\text{FCLoopFindTopologies: }\;\text{This may lead to issues if these topologies are meant to be processed using tools such as FIRE, KIRA or Fermat.}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md b/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md index cecf97fa..ccc6727a 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md +++ b/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopFindTopologyMappings `FCLoopFindTopologyMappings[{topo1, topo2, ...}]` finds mappings between topologies (written as `FCTopology` objects) `topo1, topo2, ...`. For each source topology the function returns a list of loop momentum shifts and a `GLI` replacement rule needed to map it to the given target topology. If you need to map everything to a particular set of target topologies, you can specify them via the `PreferredTopologies` option. diff --git a/FeynCalc/Documentation/Markdown/FCLoopGetKinematicInvariants.md b/FeynCalc/Documentation/Markdown/FCLoopGetKinematicInvariants.md index 749bc2d5..a422cea0 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopGetKinematicInvariants.md +++ b/FeynCalc/Documentation/Markdown/FCLoopGetKinematicInvariants.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopGetKinematicInvariants `FCLoopGetKinematicInvariants[topo]` returns the list of kinematic invariants (masses and scalar products) present in the given topology `topo`. diff --git a/FeynCalc/Documentation/Markdown/FCLoopGraphPlot.md b/FeynCalc/Documentation/Markdown/FCLoopGraphPlot.md index b407210a..bf168678 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopGraphPlot.md +++ b/FeynCalc/Documentation/Markdown/FCLoopGraphPlot.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopGraphPlot `FCLoopGraphPlot[{edges, labels}]` visualizes the graph of the given loop integral using the provided list of edges, styles and labels using the built-in function `Graph`. The Option `Graph` can be used to pass options to the `Graph` objects. diff --git a/FeynCalc/Documentation/Markdown/FCLoopIntegralToGraph.md b/FeynCalc/Documentation/Markdown/FCLoopIntegralToGraph.md index 12b44e72..0b793b5f 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopIntegralToGraph.md +++ b/FeynCalc/Documentation/Markdown/FCLoopIntegralToGraph.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopIntegralToGraph `FCLoopIntegralToGraph[int, {q1, q2, ...}]` constructs a graph representation of the loop integral `int` that depends on the loop momenta `q1, q2, ...`. The function returns a list of the form `{edges,labels,props,pref}`, where `edges` is a list of edge rules representing the loop integral `int`, `labels` is a list of lists containing the line momentum, multiplicity and the mass term of each propagator, `props` is a list with the original propagators and `pref` is the piece of the integral that was ignored when constructing the graph representation (e.g. scalar products or vectors in the numerator) . diff --git a/FeynCalc/Documentation/Markdown/FCLoopRemovePropagator.md b/FeynCalc/Documentation/Markdown/FCLoopRemovePropagator.md index bb622add..e2493b05 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopRemovePropagator.md +++ b/FeynCalc/Documentation/Markdown/FCLoopRemovePropagator.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopRemovePropagator `FCLoopRemovePropagator[input,{pos1,pos2,...}]` returns a new `FCTopology` or `GLI` obtained from input by removing propagators at positions listed in `{pos1,pos2,...}`. diff --git a/FeynCalc/Documentation/Markdown/FCLoopTensorReduce.md b/FeynCalc/Documentation/Markdown/FCLoopTensorReduce.md index e682b17e..571cc685 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopTensorReduce.md +++ b/FeynCalc/Documentation/Markdown/FCLoopTensorReduce.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCLoopTensorReduce `FCLoopTensorReduce[exp, topos]` performs tensor reduction for the numerators of multi-loop integrals present in `exp`. Notice that `exp` is expected to be the output of `FCLoopFindTopologies` where all loop integrals have been written as `fun[num, GLI[...]]` with `num` being the numerator to be acted upon. diff --git a/FeynCalc/Documentation/Markdown/FCMellinJoin.md b/FeynCalc/Documentation/Markdown/FCMellinJoin.md index e406c5f3..c269f301 100644 --- a/FeynCalc/Documentation/Markdown/FCMellinJoin.md +++ b/FeynCalc/Documentation/Markdown/FCMellinJoin.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCMellinJoin `FCMellinJoin[int, {q1, q2, ...}, {prop1, prop2, ...}]` applies the standard formula for splitting propagators `prop1, prop2, ...` into summands by introducing integrations along a contour in the complex space. diff --git a/FeynCalc/Documentation/Markdown/FCMemoryAvailable.md b/FeynCalc/Documentation/Markdown/FCMemoryAvailable.md index b29d314a..eadaa23f 100644 --- a/FeynCalc/Documentation/Markdown/FCMemoryAvailable.md +++ b/FeynCalc/Documentation/Markdown/FCMemoryAvailable.md @@ -4,6 +4,6 @@ ### See also -[Overview](Extra/FeynCalc.md), [MemSet](MemSet.md), [$FCMemoryAvailable]($FCMemoryAvailable.md). +[Overview](Extra/FeynCalc.md), [MemSet](MemSet.md), [\$FCMemoryAvailable](\$FCMemoryAvailable.md). ### Examples \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FCPartialFractionForm.md b/FeynCalc/Documentation/Markdown/FCPartialFractionForm.md index 31c2aeb7..01e8b264 100644 --- a/FeynCalc/Documentation/Markdown/FCPartialFractionForm.md +++ b/FeynCalc/Documentation/Markdown/FCPartialFractionForm.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCPartialFractionForm `FCPartialFractionForm[n, {{f1,x-r1,p1},{f2,x-r2,p2}, ...}, x]` is a special way of representing sums of rational functions of `x` given by $n + \frac{f_1}{[x-r_1]^p_1} + \frac{f_2}{[x-r_2]^p_2} + \ldots$ diff --git a/FeynCalc/Documentation/Markdown/FCPermuteMomentaRules.md b/FeynCalc/Documentation/Markdown/FCPermuteMomentaRules.md index b7f4daf2..49522109 100644 --- a/FeynCalc/Documentation/Markdown/FCPermuteMomentaRules.md +++ b/FeynCalc/Documentation/Markdown/FCPermuteMomentaRules.md @@ -21,10 +21,7 @@ $$\{f(\text{p1},\text{p2}),f(\text{p2},\text{p1})\}$$ ```mathematica FCPermuteMomentaRules[{p1, p2, p3}] -f[p1, p2, p3] /. % - - - +f[p1, p2, p3] /. % ``` $$\{\{\},\{\text{p1}\to \;\text{p2},\text{p2}\to \;\text{p1}\},\{\text{p1}\to \;\text{p3},\text{p3}\to \;\text{p1}\},\{\text{p2}\to \;\text{p3},\text{p3}\to \;\text{p2}\},\{\text{p1}\to \;\text{p2},\text{p2}\to \;\text{p3},\text{p3}\to \;\text{p1}\},\{\text{p1}\to \;\text{p3},\text{p2}\to \;\text{p1},\text{p3}\to \;\text{p2}\}\}$$ diff --git a/FeynCalc/Documentation/Markdown/FCPrint.md b/FeynCalc/Documentation/Markdown/FCPrint.md index 4b3d1dbb..6e287eb3 100644 --- a/FeynCalc/Documentation/Markdown/FCPrint.md +++ b/FeynCalc/Documentation/Markdown/FCPrint.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$VeryVerbose]($VeryVerbose.md). +[Overview](Extra/FeynCalc.md), [\$VeryVerbose](\$VeryVerbose.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/FCTopology.md b/FeynCalc/Documentation/Markdown/FCTopology.md index 02a9eb8a..bed4ad82 100644 --- a/FeynCalc/Documentation/Markdown/FCTopology.md +++ b/FeynCalc/Documentation/Markdown/FCTopology.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FCTopology `FCTopology[id, {prop1, prop2, ...}, {l1, l2, ...}, {p1, p2, ...}, {kRule1, kRule2, ...}, {}]` denotes a topology with the identifier `id` that is characterized by the propagators `{prop1, prop2, ...}`. The propagators in the list do not necessarily have to form a valid basis, i.e. the basis may also be incomplete or overdetermined. The lists `{l1, l2, ...}` and `{p1, p2, ...}` stand for the loop and external momenta respectively. Furthermore, {kRule1, kRule2, ...} denotes replacement rules for kinematic invariants. diff --git a/FeynCalc/Documentation/Markdown/FCTripleProduct.md b/FeynCalc/Documentation/Markdown/FCTripleProduct.md index 3fbecf2f..363cd1af 100644 --- a/FeynCalc/Documentation/Markdown/FCTripleProduct.md +++ b/FeynCalc/Documentation/Markdown/FCTripleProduct.md @@ -22,7 +22,7 @@ FCTP[a, b, c] $$\overline{a}\cdot \left(\overline{b}\times \overline{c}\right)$$ -``` +```mathematica (*FCTripleProduct[a, b, c]*) ``` @@ -34,7 +34,7 @@ FCTP[a, b, c, Explicit -> True] $$\bar{\epsilon }^{\overline{a}\overline{b}\overline{c}}$$ -``` +```mathematica (*Eps[CartesianMomentum[a], CartesianMomentum[b], CartesianMomentum[c]]*) ``` diff --git a/FeynCalc/Documentation/Markdown/FCVerbose.md b/FeynCalc/Documentation/Markdown/FCVerbose.md index fd7c3b77..7755e12b 100644 --- a/FeynCalc/Documentation/Markdown/FCVerbose.md +++ b/FeynCalc/Documentation/Markdown/FCVerbose.md @@ -10,7 +10,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$VeryVerbose]($VeryVerbose.md). +[Overview](Extra/FeynCalc.md), [\$VeryVerbose](\$VeryVerbose.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/FVLN.md b/FeynCalc/Documentation/Markdown/FVLN.md index d37b5c46..c8044076 100644 --- a/FeynCalc/Documentation/Markdown/FVLN.md +++ b/FeynCalc/Documentation/Markdown/FVLN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLN `FVLN[p,mu,n,nb]` denotes the positive component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} n^{\mu} (p \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/FVLND.md b/FeynCalc/Documentation/Markdown/FVLND.md index 1c46647d..6b9ce734 100644 --- a/FeynCalc/Documentation/Markdown/FVLND.md +++ b/FeynCalc/Documentation/Markdown/FVLND.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLND `FVLND[p,mu,n,nb]` denotes the positive component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $\frac{1}{2} n^{\mu} (p \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/FVLP.md b/FeynCalc/Documentation/Markdown/FVLP.md index 446261ae..71b5fcdb 100644 --- a/FeynCalc/Documentation/Markdown/FVLP.md +++ b/FeynCalc/Documentation/Markdown/FVLP.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLP `FVLP[p,mu,n,nb]` denotes the positive component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} \bar{n}^{\mu} (p \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/FVLPD.md b/FeynCalc/Documentation/Markdown/FVLPD.md index 50c603bf..42534ad2 100644 --- a/FeynCalc/Documentation/Markdown/FVLPD.md +++ b/FeynCalc/Documentation/Markdown/FVLPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLPD `FVLPD[p,mu,n,nb]` denotes the positive component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $\frac{1}{2} \bar{n}^{\mu} (p \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/FVLR.md b/FeynCalc/Documentation/Markdown/FVLR.md index 08ef0138..36513f71 100644 --- a/FeynCalc/Documentation/Markdown/FVLR.md +++ b/FeynCalc/Documentation/Markdown/FVLR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLR `FVLR[p,mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb`. It corresponds to $p^{\mu }_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/FVLRD.md b/FeynCalc/Documentation/Markdown/FVLRD.md index 1d960de0..1d0f4054 100644 --- a/FeynCalc/Documentation/Markdown/FVLRD.md +++ b/FeynCalc/Documentation/Markdown/FVLRD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FVLRD `FVLRD[p,mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the Lorentz vector $p^{\mu }$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $p^{\mu }_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/Factor3.md b/FeynCalc/Documentation/Markdown/Factor3.md index fa3c4c45..a2038e6e 100644 --- a/FeynCalc/Documentation/Markdown/Factor3.md +++ b/FeynCalc/Documentation/Markdown/Factor3.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Factor3 `Factor3[exp]` factors a rational function `exp` over the field of complex numbers. diff --git a/FeynCalc/Documentation/Markdown/Factoring.md b/FeynCalc/Documentation/Markdown/Factoring.md index b188427a..60e80620 100644 --- a/FeynCalc/Documentation/Markdown/Factoring.md +++ b/FeynCalc/Documentation/Markdown/Factoring.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Factoring `Factoring` is an option for `Collect2`, `Contract` and more functions. If set to `True`, the result will be factored, using `Factor2`. If set to any function `f`, this function will be used. diff --git a/FeynCalc/Documentation/Markdown/FeynAmpDenominatorSplit.md b/FeynCalc/Documentation/Markdown/FeynAmpDenominatorSplit.md index 131fb684..e95fec43 100644 --- a/FeynCalc/Documentation/Markdown/FeynAmpDenominatorSplit.md +++ b/FeynCalc/Documentation/Markdown/FeynAmpDenominatorSplit.md @@ -12,7 +12,6 @@ FAD[q1, q1 - p, q1 - q2, q2, q2 - p] ex = FeynAmpDenominatorSplit[%] - ``` $$\frac{1}{\text{q1}^2.(\text{q1}-p)^2.(\text{q1}-\text{q2})^2.\text{q2}^2.(\text{q2}-p)^2}$$ @@ -40,5 +39,5 @@ ex // FCE // StandardForm ```mathematica FeynAmpDenominatorCombine[ex] // FCE // StandardForm -(*FAD[q1, q2, q1 - q2, -p + q1, -p + q2]*) +(*FAD[q1, q2, -p + q1, q1 - q2, -p + q2]*) ``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FeynmanIntegralPrefactor.md b/FeynCalc/Documentation/Markdown/FeynmanIntegralPrefactor.md index f29fd9c4..8c2cd44c 100644 --- a/FeynCalc/Documentation/Markdown/FeynmanIntegralPrefactor.md +++ b/FeynCalc/Documentation/Markdown/FeynmanIntegralPrefactor.md @@ -81,10 +81,7 @@ FCFeynmanParametrize[FAD[{p, m}], {p}, Names -> x, FCReplaceD -> {D -> 4 - 2 Eps Times @@ Most[%] -Series[%, {Epsilon, 0, 1}] // Normal // FunctionExpand - - - +Series[%, {Epsilon, 0, 1}] // Normal // FunctionExpand ``` $$\left\{1,-e^{\gamma \varepsilon } \Gamma (\varepsilon -1) \left(m^2\right)^{1-\varepsilon },\{\}\right\}$$ diff --git a/FeynCalc/Documentation/Markdown/FromFCPartialFractionForm.md b/FeynCalc/Documentation/Markdown/FromFCPartialFractionForm.md index f76bb5e1..93c782a9 100644 --- a/FeynCalc/Documentation/Markdown/FromFCPartialFractionForm.md +++ b/FeynCalc/Documentation/Markdown/FromFCPartialFractionForm.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FromFCPartialFractionForm `FromFCPartialFractionForm[exp]` converts all `FCPartialFractionForm` symbols present in `exp` back into the standard representation. diff --git a/FeynCalc/Documentation/Markdown/FromGFAD.md b/FeynCalc/Documentation/Markdown/FromGFAD.md index 6ddc075d..3542c5df 100644 --- a/FeynCalc/Documentation/Markdown/FromGFAD.md +++ b/FeynCalc/Documentation/Markdown/FromGFAD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## FromGFAD `FromGFAD[exp]` converts all suitable generic propagator denominators into standard and Cartesian propagator denominators. @@ -56,12 +52,12 @@ ex = FromGFAD[%] $$\frac{1}{(m^2+\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})-i \eta )^2}$$ -$$\frac{1}{(\text{p1}\cdot (\text{p1}+2 \;\text{p2})+m^2-i \eta )^2}$$ +$$\frac{1}{(\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})+m^2-i \eta )^2}$$ ```mathematica ex // StandardForm -(*FeynAmpDenominator[CartesianPropagatorDenominator[0, CartesianPair[CartesianMomentum[p1, -1 + D], CartesianMomentum[p1 + 2 p2, -1 + D]], m^2, {2, -1}]]*) +(*FeynAmpDenominator[CartesianPropagatorDenominator[0, CartesianPair[CartesianMomentum[p1, -1 + D], CartesianMomentum[p1, -1 + D]] + 2 CartesianPair[CartesianMomentum[p1, -1 + D], CartesianMomentum[p2, -1 + D]], m^2, {2, -1}]]*) ``` ```mathematica @@ -115,7 +111,7 @@ $$\frac{1}{2} \left(-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta )^2 (-\text{p3} FromGFAD[ex] ``` -$$\frac{1}{2} \left(-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta )^2 (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+\text{p1}\cdot (2 \;\text{p3}-\text{p1})+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta )^2 (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+\text{p1}\cdot (2 \;\text{p3}-\text{p1})+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+\text{p1}\cdot (2 \;\text{p3}-\text{p1})+i \eta )^2}\right)+\frac{1}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+\text{p1}\cdot (2 \;\text{p3}-\text{p1})+i \eta )}$$ +$$\frac{1}{2} \left(-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta )^2 (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta )^2 (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )^2}\right)+\frac{1}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}$$ Using the option `InitialSubstitutions` one can perform certain replacement that might not be found automatically @@ -139,7 +135,6 @@ SFAD[{{k1, k1 . (2*k2 + n) + k2 . k2}, {0, 1}, 1}] ```mathematica FromGFAD[ex, FCE -> True, InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}] % // InputForm - ``` $$\frac{1}{((\text{k1}+\text{k2})^2+\text{k1}\cdot n+i \eta )}$$ diff --git a/FeynCalc/Documentation/Markdown/GALN.md b/FeynCalc/Documentation/Markdown/GALN.md index f87c5f60..c391a8f9 100644 --- a/FeynCalc/Documentation/Markdown/GALN.md +++ b/FeynCalc/Documentation/Markdown/GALN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALN `GALN[mu,n,nb]` denotes the negative component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} n^{\mu} (\gamma \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/GALND.md b/FeynCalc/Documentation/Markdown/GALND.md index 7980b72d..da70e4a4 100644 --- a/FeynCalc/Documentation/Markdown/GALND.md +++ b/FeynCalc/Documentation/Markdown/GALND.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALND `GALND[mu,n,nb]` denotes the negative component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb` in $D$-dimensions. It corresponds to $\frac{1}{2} n^{\mu} (\gamma \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/GALP.md b/FeynCalc/Documentation/Markdown/GALP.md index ea346608..fc88128e 100644 --- a/FeynCalc/Documentation/Markdown/GALP.md +++ b/FeynCalc/Documentation/Markdown/GALP.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALP `GALP[mu,n,nb]` denotes the positive component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} \bar{n}^{\mu} (\gamma \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/GALPD.md b/FeynCalc/Documentation/Markdown/GALPD.md index f673514d..62806f2b 100644 --- a/FeynCalc/Documentation/Markdown/GALPD.md +++ b/FeynCalc/Documentation/Markdown/GALPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALPD `GALPD[mu,n,nb]` denotes the positive component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb` in $D$-dimensions. It corresponds to $\frac{1}{2} \bar{n}^{\mu} (\gamma \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/GALR.md b/FeynCalc/Documentation/Markdown/GALR.md index 6dfde3c4..5db62906 100644 --- a/FeynCalc/Documentation/Markdown/GALR.md +++ b/FeynCalc/Documentation/Markdown/GALR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALR `GALR[mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb`. It corresponds to $\gamma^{\mu}_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/GALRD.md b/FeynCalc/Documentation/Markdown/GALRD.md index ad0ccac5..587ccfa3 100644 --- a/FeynCalc/Documentation/Markdown/GALRD.md +++ b/FeynCalc/Documentation/Markdown/GALRD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GALRD `GALRD[mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the Dirac matrix $\gamma^{\mu }$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $\gamma^{\mu}_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/GLIMultiply.md b/FeynCalc/Documentation/Markdown/GLIMultiply.md index 5da1837b..5e6d39fb 100644 --- a/FeynCalc/Documentation/Markdown/GLIMultiply.md +++ b/FeynCalc/Documentation/Markdown/GLIMultiply.md @@ -11,10 +11,7 @@ ```mathematica GLI["topo1", {1, 0, 0, 1, 1}] GLI["topo1", {0, -1, -1, 0, 0}] -% /. GLI -> GLIMultiply /. GLIMultiply -> GLI - - - +% /. GLI -> GLIMultiply /. GLIMultiply -> GLI ``` $$G^{\text{topo1}}(0,-1,-1,0,0) G^{\text{topo1}}(1,0,0,1,1)$$ diff --git a/FeynCalc/Documentation/Markdown/GSLN.md b/FeynCalc/Documentation/Markdown/GSLN.md index 5d3f8792..3fcb75a4 100644 --- a/FeynCalc/Documentation/Markdown/GSLN.md +++ b/FeynCalc/Documentation/Markdown/GSLN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLN `GSLN[p,n,nb]` denotes the negative component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} (n \cdot p) (\gamma \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/GSLND.md b/FeynCalc/Documentation/Markdown/GSLND.md index 885d4b74..7155c30b 100644 --- a/FeynCalc/Documentation/Markdown/GSLND.md +++ b/FeynCalc/Documentation/Markdown/GSLND.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLND `GSLND[p,n,nb]` denotes the negative component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $\frac{1}{2} (n \cdot p) (\gamma \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/GSLP.md b/FeynCalc/Documentation/Markdown/GSLP.md index 7f047a5f..6fa857de 100644 --- a/FeynCalc/Documentation/Markdown/GSLP.md +++ b/FeynCalc/Documentation/Markdown/GSLP.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLP `GSLP[p,n,nb]` denotes the positive component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} (\bar{n} \cdot p) (\gamma \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/GSLPD.md b/FeynCalc/Documentation/Markdown/GSLPD.md index ac87cd14..65fb1493 100644 --- a/FeynCalc/Documentation/Markdown/GSLPD.md +++ b/FeynCalc/Documentation/Markdown/GSLPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLPD `GSLPD[p,n,nb]` denotes the positive component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $\frac{1}{2} (\bar{n} \cdot p) (\gamma \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/GSLR.md b/FeynCalc/Documentation/Markdown/GSLR.md index cb63331b..739c0742 100644 --- a/FeynCalc/Documentation/Markdown/GSLR.md +++ b/FeynCalc/Documentation/Markdown/GSLR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLR `GSLR[p,n,nb]` denotes the perpendicular component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb`. It corresponds to $(\gamma \cdot p)_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/GSLRD.md b/FeynCalc/Documentation/Markdown/GSLRD.md index 58597dd9..b51fb409 100644 --- a/FeynCalc/Documentation/Markdown/GSLRD.md +++ b/FeynCalc/Documentation/Markdown/GSLRD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## GSLRD `GSLRD[p,n,nb]` denotes the perpendicular component in the lightcone decomposition of the slashed Dirac matrix $(\gamma \cdot p)$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $(\gamma \cdot p)_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/Hill.md b/FeynCalc/Documentation/Markdown/Hill.md index fde4ea69..08cfb31c 100644 --- a/FeynCalc/Documentation/Markdown/Hill.md +++ b/FeynCalc/Documentation/Markdown/Hill.md @@ -21,10 +21,7 @@ $$0$$ ```mathematica Hill[x, x y] // PowerExpand // SimplifyPolyLog // Expand -% /. x :> .34 /. y -> .6 // N // Chop - - - +% /. x :> .34 /. y -> .6 // N // Chop ``` $$\zeta (2)-\text{Li}_2(x y)+\text{Li}_2\left(\frac{1-x}{1-x y}\right)-\text{Li}_2\left(\frac{(1-x) y}{1-x y}\right)-\text{Li}_2(1-x)-\text{Li}_2(1-y)-\log (x) \log (1-x y)-\log (1-y) \log (y)$$ diff --git a/FeynCalc/Documentation/Markdown/HypergeometricIR.md b/FeynCalc/Documentation/Markdown/HypergeometricIR.md index 9484d79e..26bbe836 100644 --- a/FeynCalc/Documentation/Markdown/HypergeometricIR.md +++ b/FeynCalc/Documentation/Markdown/HypergeometricIR.md @@ -17,10 +17,7 @@ $$\frac{t^{b-1} \Gamma (c) (1-t z)^{-a} (1-t)^{-b+c-1}}{\Gamma (b) \Gamma (c-b)} ```mathematica ToHypergeometric[t^b (1 - t)^c (1 + t z)^a, t] -HypergeometricIR[%, t] - - - +HypergeometricIR[%, t] ``` $$\frac{\Gamma (b+1) \Gamma (c+1) \, _2F_1(-a,b+1;b+c+2;-z)}{\Gamma (b+c+2)}$$ diff --git a/FeynCalc/Documentation/Markdown/Indices.md b/FeynCalc/Documentation/Markdown/Indices.md index 71f7cccd..cd4dc31d 100644 --- a/FeynCalc/Documentation/Markdown/Indices.md +++ b/FeynCalc/Documentation/Markdown/Indices.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Handling indices ### See also [Overview](Extra/FeynCalc.md). -### Manipulations +### Manipulations of tensorial quantities When you square an expression with dummy indices, you must rename them first. People often do this by hand, e.g. as in diff --git a/FeynCalc/Documentation/Markdown/IntegralTable.md b/FeynCalc/Documentation/Markdown/IntegralTable.md index ce3f4601..8035153d 100644 --- a/FeynCalc/Documentation/Markdown/IntegralTable.md +++ b/FeynCalc/Documentation/Markdown/IntegralTable.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## IntegralTable `IntegralTable` is an option of `OneLoopSimplify` and `FeynAmpDenominatorSimplify`. It may be set to a list of the form `{FCIntegral[ ... ] :> bla, ...}`. diff --git a/FeynCalc/Documentation/Markdown/InternalExternal.md b/FeynCalc/Documentation/Markdown/InternalExternal.md index 1964a618..4bb78aaa 100644 --- a/FeynCalc/Documentation/Markdown/InternalExternal.md +++ b/FeynCalc/Documentation/Markdown/InternalExternal.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Internal vs. External Representations ### See also [Overview](Extra/FeynCalc.md). -### FeynCalcInternal +### Internal representation The internal representation (`FeynCalcIntenral` or `FCI`) is how FeynCalc internally "sees" the objects. For example, a $4$-dimensional $4$-vector is represented by @@ -83,7 +79,7 @@ $$0$$ is zero. -### FeynCalcExternal +### External representation The internal representation is useful for the internal programming FeynCalc, but obviously too cumbersome for the user input. This is why FeynCalc also has an external representation (`FeynCalcExternal` or `FCE`), that is concise and convenient. diff --git a/FeynCalc/Documentation/Markdown/Kinematics.md b/FeynCalc/Documentation/Markdown/Kinematics.md index aeb5b2c8..497849e6 100644 --- a/FeynCalc/Documentation/Markdown/Kinematics.md +++ b/FeynCalc/Documentation/Markdown/Kinematics.md @@ -1,14 +1,10 @@ -```mathematica - -``` - ## Kinematics ### See also [Overview](Extra/FeynCalc.md). -### Manipulations +### Manipulations of scalar products FeynCalc allows you to specify the values of scalar products before doing the calculation. diff --git a/FeynCalc/Documentation/Markdown/LC.md b/FeynCalc/Documentation/Markdown/LC.md index ea05c019..3c2c2dde 100644 --- a/FeynCalc/Documentation/Markdown/LC.md +++ b/FeynCalc/Documentation/Markdown/LC.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## LC `LC[m, n, r, s]` evaluates to 4-dimensional $\varepsilon^{m n r s}$ by virtue of applying `FeynCalcInternal`. @@ -50,7 +46,6 @@ $$-6 \left(\overline{p}\cdot \overline{q}\right)$$ LC[\[Mu], \[Nu], \[Rho], \[Sigma]] FV[Subscript[p, 1], \[Mu]] FV[Subscript[p, 2], \[Nu]] FV[Subscript[p, 3], \[Rho]] FV[Subscript[p, 4], \[Sigma]] Contract[%] - ``` $$\overline{p}_1{}^{\mu } \overline{p}_2{}^{\nu } \overline{p}_3{}^{\rho } \overline{p}_4{}^{\sigma } \bar{\epsilon }^{\mu \nu \rho \sigma }$$ diff --git a/FeynCalc/Documentation/Markdown/LCD.md b/FeynCalc/Documentation/Markdown/LCD.md index a78d706d..9abcb669 100644 --- a/FeynCalc/Documentation/Markdown/LCD.md +++ b/FeynCalc/Documentation/Markdown/LCD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## LCD `LCD[m, n, r, s]` evaluates to $D$-dimensional $\varepsilon^{m n r s}$ by virtue of applying `FeynCalcInternal`. @@ -50,7 +46,6 @@ $$(1-D) (2-D) (3-D) (p\cdot q)$$ LCD[\[Mu], \[Nu], \[Rho], \[Sigma]] FVD[Subscript[p, 1], \[Mu]] FVD[Subscript[p, 2], \[Nu]] FVD[Subscript[p, 3], \[Rho]] FVD[Subscript[p, 4], \[Sigma]] Contract[%] - ``` $$p_1{}^{\mu } p_2{}^{\nu } p_3{}^{\rho } p_4{}^{\sigma } \overset{\text{}}{\epsilon }^{\mu \nu \rho \sigma }$$ diff --git a/FeynCalc/Documentation/Markdown/LeftRightNablaD.md b/FeynCalc/Documentation/Markdown/LeftRightNablaD.md index 6c240fc0..c63d070e 100644 --- a/FeynCalc/Documentation/Markdown/LeftRightNablaD.md +++ b/FeynCalc/Documentation/Markdown/LeftRightNablaD.md @@ -33,10 +33,7 @@ $$\frac{1}{2} \left(\overleftarrow{\partial }_i.A_{\nu }-\left(\partial _iA_{\nu ```mathematica QuantumField[A, LorentzIndex[\[Mu]]] . LeftRightNablaD[i] . QuantumField[A, LorentzIndex[\[Rho]]] -ExpandPartialD[%] - - - +ExpandPartialD[%] ``` $$A_{\mu }.\overleftrightarrow{\nabla }_i.A_{\rho }$$ diff --git a/FeynCalc/Documentation/Markdown/LeftRightNablaD2.md b/FeynCalc/Documentation/Markdown/LeftRightNablaD2.md index 0a0b1e1b..61df3c4f 100644 --- a/FeynCalc/Documentation/Markdown/LeftRightNablaD2.md +++ b/FeynCalc/Documentation/Markdown/LeftRightNablaD2.md @@ -33,10 +33,7 @@ $$-\left(\partial _iA_{\nu }\right)-\overleftarrow{\partial }_i.A_{\nu }$$ ```mathematica QuantumField[A, LorentzIndex[\[Mu]]] . LeftRightNablaD2[i] . QuantumField[A, LorentzIndex[\[Rho]]] -ExpandPartialD[%] - - - +ExpandPartialD[%] ``` $$A_{\mu }.\overleftrightarrow{\nabla }_i.A_{\rho }$$ diff --git a/FeynCalc/Documentation/Markdown/LightCone.md b/FeynCalc/Documentation/Markdown/LightCone.md index 4d5c94a6..23ab0bb4 100644 --- a/FeynCalc/Documentation/Markdown/LightCone.md +++ b/FeynCalc/Documentation/Markdown/LightCone.md @@ -1,23 +1,27 @@ -```mathematica - -``` - ## Light-cone formalism ### See also [Overview](Extra/FeynCalc.md). -### Notation +### Notation for light-cone components + +FeynCalc is equipped with special symbols that facilitate calculations involving light-cone vectors. The default $n$ and $\bar{n}$ vectors are defined via the global variables `$FCDefaultLightconeVectorN` and `$FCDefaultLightconeVectorNB`. By default those are set to `FCGV["n"]` and `FCGV["nb"]` to avoid possible conflicts with user-defined variables + +```mathematica +{$FCDefaultLightconeVectorN, $FCDefaultLightconeVectorNB} +``` + +$$\{\text{FCGV}(\text{n}),\text{FCGV}(\text{nb})\}$$ -FeynCalc is equipped with special symbols that facilitate calculations involving light-cone vectors. The default $n$ and $\bar{n}$ vectors are defined via the global variables `$FCDefaultLightconeVectorN` and `$FCDefaultLightconeVectorNB` +These names can be of course changed. A particularly convenient choice is to use `n` and `nb`. Notice that these commands must be evaluated at the beginning of every FeynCalc session ```mathematica $FCDefaultLightconeVectorN = n; $FCDefaultLightconeVectorNB = nb; ``` -Notice that apart from this you must also explicitly define the values of the scalar products $n^2$, $\bar{n}^2$ and $n \cdot \bar{n}$ +Apart from this you must also explicitly define the values of the scalar products $n^2$, $\bar{n}^2$ and $n \cdot \bar{n}$ ```mathematica FCClearScalarProducts[] @@ -26,7 +30,7 @@ ScalarProduct[nb] = 0; ScalarProduct[n, nb] = 2; ``` -The Plus, Minus and peRpendicular components of 4-vectors are called FVLP, FVLN and FVLR respectively. The plus and minus components are immediately rewritten into forms involving $n$ and $\bar{n}$. The perpendicular component is a separate entity that cannot be simplified further. +The Plus, Minus and peRpendicular components of 4-vectors are called `FVLP`, `FVLN` and `FVLR` respectively. The plus and minus components are immediately rewritten into forms involving $n$ and $\bar{n}$. The perpendicular component is a separate entity that cannot be simplified further. ```mathematica {FVLP[p, \[Mu]], FVLN[p, \[Mu]], FVLR[p, \[Mu]]} @@ -49,17 +53,17 @@ FVLR[p, mu, myN, myNB] $$\overline{p}^{\text{mu}}{}_{\perp }$$ -``` +```mathematica (*Pair[LightConePerpendicularComponent[LorentzIndex[mu], Momentum[myN], Momentum[myNB]], LightConePerpendicularComponent[Momentum[p], Momentum[myN], Momentum[myNB]]]*) ``` -Internally, the perpendicular component is implemented as an extra head wrapped around such internal symbols as LorentzIndex or Momentum. This head is called `LightConePerpendicularComponent` and has 3 arguments. The last two arguments specify the light-cone vectors. +Internally, the perpendicular component is implemented as an extra head wrapped around such internal symbols as `LorentzIndex` or `Momentum`. This head is called `LightConePerpendicularComponent` and has 3 arguments. The last two arguments specify the light-cone vectors. ```mathematica ?LightConePerpendicularComponent ``` -![0fojluz3gvvqo](img/0fojluz3gvvqo.svg) +![0h6kq1ltbsocf](img/0h6kq1ltbsocf.svg) The pattern introduced for 4-vectors can be also found when working scalar products, metric tensors or Dirac matrices @@ -124,9 +128,9 @@ $$g^{\mu \nu } g^{\mu \nu }{}_{\perp }$$ $$D-2$$ -### Dirac algebra +### Dirac matrices with light-cone components -Dirac algebra is with matrices contracted to light-cone momenta or having particular light-cone components is fully supported. The general strategy followed by `DiracSimplify` is to move all perpendicular components to the very right of the chain. +Dirac algebra involving matrices contracted to light-cone momenta or having particular light-cone components is fully supported. The general strategy followed by `DiracSimplify` is to move all perpendicular components to the very right of the chain. ```mathematica ex1 = GALR[p] . GA[\[Mu], \[Nu]] @@ -161,7 +165,7 @@ GALR[mu1, myN, myNB] $$\bar{\gamma }^{\text{mu1}}{}_{\perp }$$ -``` +```mathematica (*DiracGamma[LightConePerpendicularComponent[LorentzIndex[mu1], Momentum[myN], Momentum[myNB]]]*) ``` @@ -209,7 +213,66 @@ ex5 // DiracSimplify $$2 i \overline{n}^{\rho } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\sigma _{\perp }\;\overline{\text{nb}}}+2 i \overline{\text{nb}}^{\rho } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\sigma _{\perp }\overline{n}}-2 i \overline{n}^{\sigma } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\rho _{\perp }\;\overline{\text{nb}}}-i \overline{n}^{\sigma } \overline{\text{nb}}^{\rho } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\overline{n}\;\overline{\text{nb}}}-2 i \overline{\text{nb}}^{\sigma } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\rho _{\perp }\overline{n}}+i \overline{n}^{\rho } \overline{\text{nb}}^{\sigma } \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\overline{n}\;\overline{\text{nb}}}-4 i \bar{\epsilon }^{\mu _{\perp }\nu _{\perp }\rho _{\perp }\sigma _{\perp }}$$ -### Tensor reductions +### Introducing light-cone components by hand + +In some calculations one might end up with a mixture of explicit light-cone components and generic Lorentz tensors. If those tensors admit a particularly simple representation in terms of light-cone components, it can be enforced using the function `ToLightConeComponents` + +For example, the following expression cannot be simplified any further + +```mathematica +ex6 = GS[nb, vp] +``` + +$$\left(\bar{\gamma }\cdot \overline{\text{nb}}\right).\left(\bar{\gamma }\cdot \overline{\text{vp}}\right)$$ + +Now let us suppose that $(v')^{\mu}$ can be actually written as $\alpha n^\mu + \bar{n}^{\mu}/(4 \alpha)$. We can implement this as follows + +```mathematica +SP[vp, nb] = 2*alpha; +SP[vp, n] = 2*1/(4 alpha); +LightConePerpendicularComponent[Momentum[vp], Momentum[n], Momentum[nb]] = 0; +``` + +```mathematica +FV[vp, mu] +% // ToLightConeComponents +``` + +$$\overline{\text{vp}}^{\text{mu}}$$ + +$$\text{alpha} \overline{n}^{\text{mu}}+\frac{\overline{\text{nb}}^{\text{mu}}}{4 \;\text{alpha}}$$ + +However, this will not make FeynCalc automatically simplify the Dirac chain + +```mathematica +ex6 // DiracSimplify +``` + +$$\left(\bar{\gamma }\cdot \overline{\text{nb}}\right).\left(\bar{\gamma }\cdot \overline{\text{vp}}\right)$$ + +Using `ToLightConeComponents` we can explicitly rewrite `vp` in the chain in terms of the light-cone components and hence enforce the desired simplification. In fact, the function will also automatically simplify some common expressions such $\gamma \cdot \bar{n} \gamma \cdot \bar{n} = \gamma \cdot n \gamma \cdot n = 0$ + +```mathematica +ex6 // ToLightConeComponents +% // DiracSimplify +``` + +$$\text{alpha} \left(\bar{\gamma }\cdot \overline{\text{nb}}\right).\left(\bar{\gamma }\cdot \overline{n}\right)$$ + +$$4 \;\text{alpha}-\text{alpha} \left(\bar{\gamma }\cdot \overline{n}\right).\left(\bar{\gamma }\cdot \overline{\text{nb}}\right)$$ + +Such simplifications inside `ToLightConeComponents` can be disabled using the option `DotSimplify` + +```mathematica +ex6 // ToLightConeComponents[#, DotSimplify -> False] & +% // DiracSimplify +``` + +$$\left(\bar{\gamma }\cdot \overline{\text{nb}}\right).\left(\text{alpha} \bar{\gamma }\cdot \overline{n}+\frac{\bar{\gamma }\cdot \overline{\text{nb}}}{4 \;\text{alpha}}\right)$$ + +$$4 \;\text{alpha}-\text{alpha} \left(\bar{\gamma }\cdot \overline{n}\right).\left(\bar{\gamma }\cdot \overline{\text{nb}}\right)$$ + +### Reductions of loop integrals with numerators involving light-cone components ```mathematica int = FVLRD[p, \[Mu]] SFAD[p, p - q] diff --git a/FeynCalc/Documentation/Markdown/LightConePerpendicularComponent.md b/FeynCalc/Documentation/Markdown/LightConePerpendicularComponent.md index 5d5c8c00..1580aa18 100644 --- a/FeynCalc/Documentation/Markdown/LightConePerpendicularComponent.md +++ b/FeynCalc/Documentation/Markdown/LightConePerpendicularComponent.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## LightConePerpendicularComponent `LightConePerpendicularComponent[LorentzIndex[mu],Momentum[n],Momentum[nb]]` denotes the perpendicular component of the Lorentz index `mu` with respect to the lightcone momenta `n` and `nb`. @@ -47,11 +43,10 @@ DiracGamma[LightConePerpendicularComponent[LorentzIndex[\[Mu]], Momentum[n], Momentum[nb]]] FV[p, \[Mu]] // Contract % // StandardForm - ``` $$\bar{\gamma }\cdot \overline{p}_{\perp }$$ -``` +```mathematica (*DiracGamma[LightConePerpendicularComponent[Momentum[p], Momentum[n], Momentum[nb]]]*) ``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/Loops.md b/FeynCalc/Documentation/Markdown/Loops.md index c54b4ab3..23a76fb9 100644 --- a/FeynCalc/Documentation/Markdown/Loops.md +++ b/FeynCalc/Documentation/Markdown/Loops.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Loops ### See also @@ -52,7 +48,7 @@ $$\frac{1}{(\text{k1}-\text{k2})^2.\left((\text{k1}-\text{p2})^2-m^2\right).\lef $$\frac{1}{(\text{k1}-\text{k2})^2 \left((\text{k1}-\text{p2})^2-m^2\right) \left((\text{k2}+\text{p2})^2-m^2\right)}$$ -``` +```mathematica (*FAD[k1 - k2] FAD[{k1 - p2, m}] FAD[{k2 + p2, m}]*) ``` @@ -63,10 +59,10 @@ FeynAmpDenominatorCombine[FAD[k1 - k2] FAD[{k1 - p2, m}] FAD[{k2 + p2, m}]] % // FCE // StandardForm ``` -$$\frac{1}{\left((\text{k2}+\text{p2})^2-m^2\right).(\text{k1}-\text{k2})^2.\left((\text{k1}-\text{p2})^2-m^2\right)}$$ +$$\frac{1}{(\text{k1}-\text{k2})^2.\left((\text{k1}-\text{p2})^2-m^2\right).\left((\text{k2}+\text{p2})^2-m^2\right)}$$ -``` -(*FAD[{k2 + p2, m}, k1 - k2, {k1 - p2, m}]*) +```mathematica +(*FAD[k1 - k2, {k1 - p2, m}, {k2 + p2, m}]*) ``` At the tree-level we often do not need the `FeynAmpDenominators` but rather want to express everything in terms of explicit scalar products, in order to exploit kinematic simplifications. This is handled by `FeynAmpDenominatorExplicit` @@ -154,7 +150,7 @@ Of course we collect with respect to `FAD` and isolate the prefactors, but the f Collect2[res, FeynAmpDenominator, IsolateNames -> KK] ``` -$$-\frac{\text{KK}(864)}{4 q^2.(-\text{p1}+\text{p2}+q)^2}+\frac{\text{KK}(868)}{4 q^2.(q-\text{p2})^2.(q-\text{p1})^2}-\frac{\text{KK}(866)}{4 q^2.(q-\text{p1})^2}+-\frac{\text{KK}(861)}{4 q^2.(q-\text{p2})^2}$$ +$$-\frac{\text{KK}(864)}{4 q^2.(-\text{p1}+\text{p2}+q)^2}+\frac{\text{KK}(868)}{4 q^2.(q-\text{p1})^2.(q-\text{p2})^2}-\frac{\text{KK}(866)}{4 q^2.(q-\text{p1})^2}+-\frac{\text{KK}(861)}{4 q^2.(q-\text{p2})^2}$$ In such cases, we can get a much more compact results , if we stick to coefficient functions and do not demand the full reduction to scalars. To do so, use the option `UsePaVeBasis` @@ -324,7 +320,7 @@ mappings1[[2]] $$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)\right\}$$ -### Tensor reductions +### Tensor reductions with GLIs Tensor reduction for topologies that have already been processed with `FCLoopFindTopologies` can be done using `FCLoopTensorReduce` diff --git a/FeynCalc/Documentation/Markdown/LorentzToCartesian.md b/FeynCalc/Documentation/Markdown/LorentzToCartesian.md index 98f5e45e..ed1cca00 100644 --- a/FeynCalc/Documentation/Markdown/LorentzToCartesian.md +++ b/FeynCalc/Documentation/Markdown/LorentzToCartesian.md @@ -31,10 +31,7 @@ $$\bar{g}^{0\mu } \bar{g}^{\text{\$MU}(\text{\$20})\nu } \left(-\bar{\epsilon }^ ```mathematica GAD[\[Mu]] -% // LorentzToCartesian - - - +% // LorentzToCartesian ``` $$\gamma ^{\mu }$$ diff --git a/FeynCalc/Documentation/Markdown/MTLN.md b/FeynCalc/Documentation/Markdown/MTLN.md index 721e8f65..9085b894 100644 --- a/FeynCalc/Documentation/Markdown/MTLN.md +++ b/FeynCalc/Documentation/Markdown/MTLN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLN `MTLN[mu,nu,n,nb]` denotes the positive component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} n^{\mu} \bar{n}^\nu$. diff --git a/FeynCalc/Documentation/Markdown/MTLND.md b/FeynCalc/Documentation/Markdown/MTLND.md index 40a0dd1c..aae8dab0 100644 --- a/FeynCalc/Documentation/Markdown/MTLND.md +++ b/FeynCalc/Documentation/Markdown/MTLND.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLND `MTLND[mu,nu,n,nb]` denotes the positive component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb`in $D$ dimensions. It corresponds to $\frac{1}{2} n^{\mu} \bar{n}^\nu$. diff --git a/FeynCalc/Documentation/Markdown/MTLP.md b/FeynCalc/Documentation/Markdown/MTLP.md index 82935b5d..6f43dc07 100644 --- a/FeynCalc/Documentation/Markdown/MTLP.md +++ b/FeynCalc/Documentation/Markdown/MTLP.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLP `MTLP[mu,nu,n,nb]` denotes the positive component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} \bar{n}^{\mu} n^\nu$. diff --git a/FeynCalc/Documentation/Markdown/MTLPD.md b/FeynCalc/Documentation/Markdown/MTLPD.md index 487dcca3..bc378b63 100644 --- a/FeynCalc/Documentation/Markdown/MTLPD.md +++ b/FeynCalc/Documentation/Markdown/MTLPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLPD `MTLPD[mu,nu,n,nb]` denotes the positive component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} \bar{n}^{\mu} n^\nu$. diff --git a/FeynCalc/Documentation/Markdown/MTLR.md b/FeynCalc/Documentation/Markdown/MTLR.md index b01249cf..a2e4ecf0 100644 --- a/FeynCalc/Documentation/Markdown/MTLR.md +++ b/FeynCalc/Documentation/Markdown/MTLR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLR `MTLR[p,mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb`. It corresponds to $g^{\mu \nu}_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/MTLRD.md b/FeynCalc/Documentation/Markdown/MTLRD.md index 3978f6f3..6480e6f9 100644 --- a/FeynCalc/Documentation/Markdown/MTLRD.md +++ b/FeynCalc/Documentation/Markdown/MTLRD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MTLRD `MTLRD[p,mu,n,nb]` denotes the perpendicular component in the lightcone decomposition of the metric tensor $g^{\mu \nu}$ along the vectors `n` and `nb` in $D$ dimensions. It corresponds to $g^{\mu \nu}_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/Mandelstam.md b/FeynCalc/Documentation/Markdown/Mandelstam.md index 6e2ce01c..1fd946ef 100644 --- a/FeynCalc/Documentation/Markdown/Mandelstam.md +++ b/FeynCalc/Documentation/Markdown/Mandelstam.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Mandelstam `Mandelstam` is an option for `DiracTrace`, `OneLoop`, `OneLoopSum` and `TrickMandelstam`. A typical setting is `Mandelstam -> {s, t, u, m1^2+m2^2+m3^2+m4^2}`, which implies $s + t + u = m_1^2+m_2^2+m_3^2+m_4^2$. If other than four-particle processes are calculated, the setting should be `Mandelstam -> {}`. diff --git a/FeynCalc/Documentation/Markdown/MomentumCombine.md b/FeynCalc/Documentation/Markdown/MomentumCombine.md index 2289c847..b6ec82a3 100644 --- a/FeynCalc/Documentation/Markdown/MomentumCombine.md +++ b/FeynCalc/Documentation/Markdown/MomentumCombine.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## MomentumCombine `MomentumCombine[expr]` is the inverse operation to `MomentumExpand` and `ExpandScalarProduct`. `MomentumCombine` combines also `Pair`s. diff --git a/FeynCalc/Documentation/Markdown/NonCommFreeQ.md b/FeynCalc/Documentation/Markdown/NonCommFreeQ.md index 21c3c457..03835a2d 100644 --- a/FeynCalc/Documentation/Markdown/NonCommFreeQ.md +++ b/FeynCalc/Documentation/Markdown/NonCommFreeQ.md @@ -4,6 +4,6 @@ ### See also -[Overview](Extra/FeynCalc.md), [$NonComm]($NonComm.md), [NonCommQ](NonCommQ.md), [DiracTrace](DiracTrace.md), [SUNTrace](SUNTrace.md). +[Overview](Extra/FeynCalc.md), [\$NonComm](\$NonComm.md), [NonCommQ](NonCommQ.md), [DiracTrace](DiracTrace.md), [SUNTrace](SUNTrace.md). ### Examples \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/NonCommQ.md b/FeynCalc/Documentation/Markdown/NonCommQ.md index c6b263bd..c2388930 100644 --- a/FeynCalc/Documentation/Markdown/NonCommQ.md +++ b/FeynCalc/Documentation/Markdown/NonCommQ.md @@ -4,7 +4,7 @@ ### See also -[Overview](Extra/FeynCalc.md), [$NonComm]($NonComm.md), [NonCommFreeQ](NonCommFreeQ.md), [DiracTrace](DiracTrace.md), [SUNTrace](SUNTrace.md). +[Overview](Extra/FeynCalc.md), [\$NonComm](\$NonComm.md), [NonCommFreeQ](NonCommFreeQ.md), [DiracTrace](DiracTrace.md), [SUNTrace](SUNTrace.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/Nonrelativistic.md b/FeynCalc/Documentation/Markdown/Nonrelativistic.md index 1489c2df..fe486c03 100644 --- a/FeynCalc/Documentation/Markdown/Nonrelativistic.md +++ b/FeynCalc/Documentation/Markdown/Nonrelativistic.md @@ -1,11 +1,12 @@ -```mathematica - -``` - ## Nonrelativistic calculations -Since version 9.3 FeynCalc can also deal with manifestly noncovariant expressions, such as 3-vectors, -Kronecker deltas and Pauli matrices +### See also + +[Overview](Extra/FeynCalc.md). + +### Manipulations of Cartesian tensors + +Since version 9.3 FeynCalc can also deal with manifestly noncovariant expressions, such as 3-vectors, Kronecker deltas and Pauli matrices ```mathematica CV[p, i] @@ -54,7 +55,6 @@ The function `LorentzToCartesian` is used to break the manifest Lorentz covarian ```mathematica SP[p, q] % // LorentzToCartesian - ``` $$\overline{p}\cdot \overline{q}$$ diff --git a/FeynCalc/Documentation/Markdown/NumberOfPolarizations.md b/FeynCalc/Documentation/Markdown/NumberOfPolarizations.md index 35b2b8fb..dfd82dba 100644 --- a/FeynCalc/Documentation/Markdown/NumberOfPolarizations.md +++ b/FeynCalc/Documentation/Markdown/NumberOfPolarizations.md @@ -46,17 +46,14 @@ Here it is not DoPolarizationSums[xyz, p, n] ``` -![0emyzef54vvcu](img/0emyzef54vvcu.svg) +![0ctuipjuoiffd](img/0ctuipjuoiffd.svg) $$\text{\$Aborted}$$ Setting the number of polarizations by hand fixes the issue ```mathematica -DoPolarizationSums[xyz, p, n, NumberOfPolarizations -> 2] - - - +DoPolarizationSums[xyz, p, n, NumberOfPolarizations -> 2] ``` $$\text{DoPolarizationSums: The input expression contains terms free of polarization vectors. Those will be multiplied with the number of polarizations given by }2.$$ diff --git a/FeynCalc/Documentation/Markdown/OPESumExplicit.md b/FeynCalc/Documentation/Markdown/OPESumExplicit.md index 13e5c630..22f383e0 100644 --- a/FeynCalc/Documentation/Markdown/OPESumExplicit.md +++ b/FeynCalc/Documentation/Markdown/OPESumExplicit.md @@ -21,10 +21,7 @@ $$\sum _{i=0}^{-3+m} A^{\text{iB}^{-3-i+m}}$$ ```mathematica OPESum[a^ib^(j - i) c^(m - j - 4), {i, 0, j}, {j, 0, m - 4}] -OPESumExplicit[%] - - - +OPESumExplicit[%] ``` $$\sum _{j=0}^{-4+m} \;\text{}\;\text{} (j+1)c^{-j+m-4} a^{\text{ib}^{j-i}}$$ diff --git a/FeynCalc/Documentation/Markdown/PaVeLimitTo4.md b/FeynCalc/Documentation/Markdown/PaVeLimitTo4.md index a4fce683..c7857347 100644 --- a/FeynCalc/Documentation/Markdown/PaVeLimitTo4.md +++ b/FeynCalc/Documentation/Markdown/PaVeLimitTo4.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## PaVeLimitTo4 `PaVeLimitTo4[expr]` simplifies products of Passarino-Veltman functions and $D$-dependent prefactors by evaluating the prefactors at $D=4$ and adding an extra term from the product of $(D-4)$ and the UV pole of the Passarino-Veltman function. @@ -14,7 +10,7 @@ The application of `PaVeLimitTo4` is equivalent to using the old `OneLoop` routi ### See also -[Overview](Extra/FeynCalc.md), [$LimitTo4]($LimitTo4.md). +[Overview](Extra/FeynCalc.md), [\$LimitTo4](\$LimitTo4.md). ### Examples diff --git a/FeynCalc/Documentation/Markdown/PairContract3.md b/FeynCalc/Documentation/Markdown/PairContract3.md index bdc12ff6..04808446 100644 --- a/FeynCalc/Documentation/Markdown/PairContract3.md +++ b/FeynCalc/Documentation/Markdown/PairContract3.md @@ -33,10 +33,7 @@ $$\overline{p}\cdot \overline{q}$$ ```mathematica Pair[LorentzIndex[\[Mu]], Momentum[p + q]] Pair[LorentzIndex[\[Mu]], Momentum[r + s]] -% /. Pair -> PairContract3 - - - +% /. Pair -> PairContract3 ``` $$\left(\overline{p}+\overline{q}\right)^{\mu } \left(\overline{r}+\overline{s}\right)^{\mu }$$ diff --git a/FeynCalc/Documentation/Markdown/PauliIndexNames.md b/FeynCalc/Documentation/Markdown/PauliIndexNames.md index cd3e37e1..9efa053b 100644 --- a/FeynCalc/Documentation/Markdown/PauliIndexNames.md +++ b/FeynCalc/Documentation/Markdown/PauliIndexNames.md @@ -21,10 +21,7 @@ $$\left(\overline{\sigma }^a\right){}_{i\text{FCGV}(\text{pi251})} \left(\overli ```mathematica PCHN[CSI[a], i, j] PCHN[CSI[b], j, k] -FCCanonicalizeDummyIndices[%, PauliIndexNames -> {l}] - - - +FCCanonicalizeDummyIndices[%, PauliIndexNames -> {l}] ``` $$\left(\overline{\sigma }^a\right){}_{ij} \left(\overline{\sigma }^b\right){}_{jk}$$ diff --git a/FeynCalc/Documentation/Markdown/PauliSigma.md b/FeynCalc/Documentation/Markdown/PauliSigma.md index abea6a99..e7aca968 100644 --- a/FeynCalc/Documentation/Markdown/PauliSigma.md +++ b/FeynCalc/Documentation/Markdown/PauliSigma.md @@ -49,10 +49,7 @@ $$\left(\bar{\sigma }\cdot \overline{q}\right).\left(\bar{\sigma }\cdot \overlin ```mathematica PauliSigma[CartesianMomentum[q]] . PauliSigma[CartesianMomentum[p - q]] -% // PauliSigmaExpand - - - +% // PauliSigmaExpand ``` $$\left(\overline{\sigma }\cdot \overline{q}\right).\left(\overline{\sigma }\cdot \left(\overline{p}-\overline{q}\right)\right)$$ diff --git a/FeynCalc/Documentation/Markdown/PauliTrace.md b/FeynCalc/Documentation/Markdown/PauliTrace.md index 15dbd935..031f061f 100644 --- a/FeynCalc/Documentation/Markdown/PauliTrace.md +++ b/FeynCalc/Documentation/Markdown/PauliTrace.md @@ -23,10 +23,7 @@ $$2 \left(\bar{\delta }^{il} \bar{\delta }^{jk}-\bar{\delta }^{ik} \bar{\delta } ```mathematica PauliTrace[CSI[i, j, k, l]] -% // PauliSimplify - - - +% // PauliSimplify ``` $$\text{tr}\left(\overline{\sigma }^i.\overline{\sigma }^j.\overline{\sigma }^k.\overline{\sigma }^l\right)$$ diff --git a/FeynCalc/Documentation/Markdown/PauliXi.md b/FeynCalc/Documentation/Markdown/PauliXi.md index b5d6894e..dbe210c5 100644 --- a/FeynCalc/Documentation/Markdown/PauliXi.md +++ b/FeynCalc/Documentation/Markdown/PauliXi.md @@ -23,10 +23,7 @@ $$\xi ^{\dagger }$$ ```mathematica PauliXi[-I] . SIS[p] . PauliEta[I] -% // ComplexConjugate - - - +% // ComplexConjugate ``` $$\xi ^{\dagger }.\left(\bar{\sigma }\cdot \overline{p}\right).\eta$$ diff --git a/FeynCalc/Documentation/Markdown/PowerFactor.md b/FeynCalc/Documentation/Markdown/PowerFactor.md index a0164a24..d70db4a1 100644 --- a/FeynCalc/Documentation/Markdown/PowerFactor.md +++ b/FeynCalc/Documentation/Markdown/PowerFactor.md @@ -11,10 +11,7 @@ ```mathematica x^a y^a -PowerFactor[%] - - - +PowerFactor[%] ``` $$x^a y^a$$ diff --git a/FeynCalc/Documentation/Markdown/Rename.md b/FeynCalc/Documentation/Markdown/Rename.md index 39d17536..c2400ddd 100644 --- a/FeynCalc/Documentation/Markdown/Rename.md +++ b/FeynCalc/Documentation/Markdown/Rename.md @@ -11,12 +11,17 @@ ```mathematica LC[\[Mu], \[Nu], \[Rho], \[Sigma]] LC[\[Alpha], \[Nu], \[Rho], \[Sigma]] -Contract[%, EpsContract -> False, Rename -> True] - - - +Contract[%, EpsContract -> False, Rename -> True] ``` $$\bar{\epsilon }^{\alpha \nu \rho \sigma } \bar{\epsilon }^{\mu \nu \rho \sigma }$$ -$$\bar{\epsilon }^{\alpha \;\text{\$MU}(4)\text{\$MU}(5)\text{\$MU}(6)} \bar{\epsilon }^{\mu \;\text{\$MU}(4)\text{\$MU}(5)\text{\$MU}(6)}$$ \ No newline at end of file +![1umsofjfi8ghr](img/1umsofjfi8ghr.svg) + +![0qnch25ldaf78](img/0qnch25ldaf78.svg) + +![0gap32avu3bc5](img/0gap32avu3bc5.svg) + +![0aknzgv9vc0z9](img/0aknzgv9vc0z9.svg) + +$$\bar{\epsilon }^{\alpha \nu \rho \sigma } \bar{\epsilon }^{\mu \nu \rho \sigma }$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/SFAD.md b/FeynCalc/Documentation/Markdown/SFAD.md index fac30ce0..c68898b6 100644 --- a/FeynCalc/Documentation/Markdown/SFAD.md +++ b/FeynCalc/Documentation/Markdown/SFAD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SFAD `SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a Cartesian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Cartesian scalar products in $D-1$ dimensions. diff --git a/FeynCalc/Documentation/Markdown/SPD.md b/FeynCalc/Documentation/Markdown/SPD.md index 6d49f321..ff78e63f 100644 --- a/FeynCalc/Documentation/Markdown/SPD.md +++ b/FeynCalc/Documentation/Markdown/SPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPD `SPD[a, b]` denotes a $D$-dimensional scalar product. diff --git a/FeynCalc/Documentation/Markdown/SPLN.md b/FeynCalc/Documentation/Markdown/SPLN.md index 033e3113..c707fb54 100644 --- a/FeynCalc/Documentation/Markdown/SPLN.md +++ b/FeynCalc/Documentation/Markdown/SPLN.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLN `SPLN[p,q,n,nb]` denotes the negative component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} (p \cdot \bar{n}) (q \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/SPLND.md b/FeynCalc/Documentation/Markdown/SPLND.md index 8e4a089f..5f8ee761 100644 --- a/FeynCalc/Documentation/Markdown/SPLND.md +++ b/FeynCalc/Documentation/Markdown/SPLND.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLND `SPLND[p,q,n,nb]` denotes the negative component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb` in $D$-dimensions. It corresponds to $\frac{1}{2} (p \cdot \bar{n}) (q \cdot n)$. diff --git a/FeynCalc/Documentation/Markdown/SPLP.md b/FeynCalc/Documentation/Markdown/SPLP.md index 898660ea..af1fc565 100644 --- a/FeynCalc/Documentation/Markdown/SPLP.md +++ b/FeynCalc/Documentation/Markdown/SPLP.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLP `SPLP[p,q,n,nb]` denotes the positive component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb`. It corresponds to $\frac{1}{2} (p \cdot n) (q \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/SPLPD.md b/FeynCalc/Documentation/Markdown/SPLPD.md index 42e10e63..0af67fa0 100644 --- a/FeynCalc/Documentation/Markdown/SPLPD.md +++ b/FeynCalc/Documentation/Markdown/SPLPD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLPD `SPLPD[p,q,n,nb]` denotes the positive component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb` in $D$-dimensions. It corresponds to $\frac{1}{2} (p \cdot n) (q \cdot \bar{n})$. diff --git a/FeynCalc/Documentation/Markdown/SPLR.md b/FeynCalc/Documentation/Markdown/SPLR.md index 3f9ac17b..71a653fe 100644 --- a/FeynCalc/Documentation/Markdown/SPLR.md +++ b/FeynCalc/Documentation/Markdown/SPLR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLR `SPLR[p,q,n,nb]` denotes the perpendicular component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb`. It corresponds to $(p \cdot q)_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/SPLRD.md b/FeynCalc/Documentation/Markdown/SPLRD.md index 9748ed55..4706744f 100644 --- a/FeynCalc/Documentation/Markdown/SPLRD.md +++ b/FeynCalc/Documentation/Markdown/SPLRD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## SPLRD `SPLRD[p,q,n,nb]` denotes the perpendicular component in the lightcone decomposition of the scalar product $p \cdot q$ along the vectors `n` and `nb`. It corresponds to $(p \cdot q)_{\perp}$. diff --git a/FeynCalc/Documentation/Markdown/ShiftPartialD.md b/FeynCalc/Documentation/Markdown/ShiftPartialD.md index c664dc9f..d445ba53 100644 --- a/FeynCalc/Documentation/Markdown/ShiftPartialD.md +++ b/FeynCalc/Documentation/Markdown/ShiftPartialD.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## ShiftPartialD `ShiftPartialD[exp, {FCPartialD[i1], FCPartialD[i2], ...}, field]` uses integration-by-parts identities to shift the derivatives of `QuantumField`s such, that a term containing derivatives with indices `i1, i2, ...` acting on `field` is eliminated from the final expression. @@ -63,7 +59,6 @@ Using a suitable filter function we can readily achieve the desired result ```mathematica ShiftPartialD[exp2, {FCPartialD[LorentzIndex[mu]]}, GaugeField, Select -> Function[x, FreeQ[x, QuantumField[GaugeField, LorentzIndex[nu]]]]] - ``` $$\text{Applying the following IBP relation: }\left\{\left(\partial _{\text{mu}}A_{\text{nu}}\right).\left(\partial _{\text{rho}}\partial _{\text{rho}}\partial _{\text{mu}}\partial _{\text{nu}}\partial _{\text{tau}}A_{\text{tau}}\right)\to -A_{\text{nu}}.\left(\partial _{\text{mu}}\partial _{\text{mu}}\partial _{\text{rho}}\partial _{\text{rho}}\partial _{\text{nu}}\partial _{\text{tau}}A_{\text{tau}}\right)\right\}$$ diff --git a/FeynCalc/Documentation/Markdown/Spinor.md b/FeynCalc/Documentation/Markdown/Spinor.md index d70e2f56..d6181636 100644 --- a/FeynCalc/Documentation/Markdown/Spinor.md +++ b/FeynCalc/Documentation/Markdown/Spinor.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Spinor `Spinor[p, m, o]` is the head of Dirac spinors. Which of the spinors $u$, $v$, $\bar{u}$ or $\bar{v}$ is understood, depends on the sign of the momentum argument `p` and the relative position of `Spinor` in the chain. diff --git a/FeynCalc/Documentation/Markdown/SubtopologyMarker.md b/FeynCalc/Documentation/Markdown/SubtopologyMarker.md index 3a6b6285..813fe89f 100644 --- a/FeynCalc/Documentation/Markdown/SubtopologyMarker.md +++ b/FeynCalc/Documentation/Markdown/SubtopologyMarker.md @@ -1,3 +1,5 @@ +## SubtopologyMarker + `SubtopologyMarker` is an option for `FCLoopFindTopologies`, `FCLoopFindTopologyMappings` and other topology related functions. It denotes the symbol that is used to specify that the given topology is a subtopology of another topology and has been obtained by removing some of the original propagators (i.e. there are no momenta shifts involved) @@ -8,6 +10,6 @@ Setting `SubtopologyMarker` to `False` means that the information about subtopol ### See also [Overview](Extra/FeynCalc.md), [FCLoopFindTopologies](FCLoopFindTopologies.md), [FCLoopFindTopologyMappings](FCLoopFindTopologyMappings.md), -[FCLoopFindTopologyMappings](FCLoopFindSubtopologies.md). +[FCLoopFindSubtopologies](FCLoopFindSubtopologies.md). ### Examples \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/TID.md b/FeynCalc/Documentation/Markdown/TID.md index 8eac5e0d..54f0c4b3 100644 --- a/FeynCalc/Documentation/Markdown/TID.md +++ b/FeynCalc/Documentation/Markdown/TID.md @@ -24,7 +24,7 @@ By default, all tensor integrals are reduced to the Passarino-Veltman scalar int TID[int, k] ``` -$$\frac{p_1{}^2 p_2{}^{\mu }-p_1{}^{\mu } \left(p_1\cdot p_2\right)}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) k^2.\left((k+p_1){}^2-m^2\right)}-\frac{p_2{}^2 \left(m^2+p_1{}^2\right) p_1{}^{\mu }+p_1{}^2 \left(m^2+p_2{}^2\right) p_2{}^{\mu }+\left(m^2+p_1{}^2\right) \left(-p_2{}^{\mu }\right) \left(p_1\cdot p_2\right)-\left(m^2+p_2{}^2\right) p_1{}^{\mu } \left(p_1\cdot p_2\right)}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) \left(k^2-m^2\right).(k-p_2){}^2.(k-p_1){}^2}-\frac{p_2{}^{\mu } \left(p_1\cdot p_2\right)-p_2{}^2 p_1{}^{\mu }}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) k^2.\left((k+p_2){}^2-m^2\right)}-\frac{p_1{}^2 p_2{}^{\mu }+p_2{}^2 p_1{}^{\mu }-p_1{}^{\mu } \left(p_1\cdot p_2\right)-p_2{}^{\mu } \left(p_1\cdot p_2\right)}{2 k^2.(k-p_1+p_2){}^2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right)}$$ +$$\frac{p_1{}^2 p_2{}^{\mu }-p_1{}^{\mu } \left(p_1\cdot p_2\right)}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) k^2.\left((k+p_1){}^2-m^2\right)}-\frac{p_2{}^2 \left(m^2+p_1{}^2\right) p_1{}^{\mu }+p_1{}^2 \left(m^2+p_2{}^2\right) p_2{}^{\mu }+\left(m^2+p_1{}^2\right) \left(-p_2{}^{\mu }\right) \left(p_1\cdot p_2\right)-\left(m^2+p_2{}^2\right) p_1{}^{\mu } \left(p_1\cdot p_2\right)}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) \left(k^2-m^2\right).(k-p_1){}^2.(k-p_2){}^2}-\frac{p_2{}^{\mu } \left(p_1\cdot p_2\right)-p_2{}^2 p_1{}^{\mu }}{2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right) k^2.\left((k+p_2){}^2-m^2\right)}-\frac{p_1{}^2 p_2{}^{\mu }+p_2{}^2 p_1{}^{\mu }-p_1{}^{\mu } \left(p_1\cdot p_2\right)-p_2{}^{\mu } \left(p_1\cdot p_2\right)}{2 k^2.(k-p_1+p_2){}^2 \left((p_1\cdot p_2){}^2-p_1{}^2 p_2{}^2\right)}$$ Scalar integrals can be converted to the Passarino-Veltman notation via the option `ToPaVe` @@ -153,14 +153,11 @@ DataType[b, FCVariable] = True; ```mathematica ExpandScalarProduct[SP[P, Q] /. P -> a P1 + b P2] -StandardForm[%] - - - +StandardForm[%] ``` $$a \left(\overline{\text{P1}}\cdot \overline{Q}\right)+b \left(\overline{\text{P2}}\cdot \overline{Q}\right)$$ -``` +```mathematica (*a Pair[Momentum[P1], Momentum[Q]] + b Pair[Momentum[P2], Momentum[Q]]*) ``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/TR.md b/FeynCalc/Documentation/Markdown/TR.md index 3cd0c94f..5671f1f1 100644 --- a/FeynCalc/Documentation/Markdown/TR.md +++ b/FeynCalc/Documentation/Markdown/TR.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## TR `TR[exp]` calculates the Dirac trace of `exp`. Depending on the setting of the option `SUNTrace` also a trace over $SU(N)$ objects is performed. diff --git a/FeynCalc/Documentation/Markdown/Tf.md b/FeynCalc/Documentation/Markdown/Tf.md index b9e199e4..52c1582f 100644 --- a/FeynCalc/Documentation/Markdown/Tf.md +++ b/FeynCalc/Documentation/Markdown/Tf.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Tf `Tf` is the color factor $T_f$. It is $1/2$ for $SU(N)$. diff --git a/FeynCalc/Documentation/Markdown/ToFCPartialFractionForm.md b/FeynCalc/Documentation/Markdown/ToFCPartialFractionForm.md index f47f9a12..cd873e03 100644 --- a/FeynCalc/Documentation/Markdown/ToFCPartialFractionForm.md +++ b/FeynCalc/Documentation/Markdown/ToFCPartialFractionForm.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## ToFCPartialFractionForm `ToFCPartialFractionForm[exp, x]` converts sums of rational functions of the form $n + \frac{f_1}{[x-r_1]^p_1} + \frac{f_2}{[x-r_2]^p_2} + \ldots$ to `FCPartialFractionForm[n, {{f1,x-r1,p1},{f2,x-r2,p2}, ...}, x]`. @@ -47,7 +43,6 @@ $$\text{FCPartialFractionForm}\left(0,\left( (-64*(-1 + z^2))/(15*(1 + z^2 + z^4)) ToFCPartialFractionForm[%, z] - ``` $$-\frac{64 \left(z^2-1\right)}{15 \left(z^4+z^2+1\right)}$$ diff --git a/FeynCalc/Documentation/Markdown/ToLightConeComponents.md b/FeynCalc/Documentation/Markdown/ToLightConeComponents.md index 19413e09..cb41ace2 100644 --- a/FeynCalc/Documentation/Markdown/ToLightConeComponents.md +++ b/FeynCalc/Documentation/Markdown/ToLightConeComponents.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## ToLightConeComponents `ToLightConeComponents[expr, n, nb]` rewrites all Dirac matrices, scalar products, 4-vectors and metric tensors in terms of their component along the lightcone directions `n` and `nb` diff --git a/FeynCalc/Documentation/Markdown/TraceOfOne.md b/FeynCalc/Documentation/Markdown/TraceOfOne.md index 8bd86387..7d023fda 100644 --- a/FeynCalc/Documentation/Markdown/TraceOfOne.md +++ b/FeynCalc/Documentation/Markdown/TraceOfOne.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## TraceOfOne `TraceOfOne` is an option for `TR` and `DiracTrace`. Its setting determines the value of the unit trace. diff --git a/FeynCalc/Documentation/Markdown/TrickMandelstam.md b/FeynCalc/Documentation/Markdown/TrickMandelstam.md index bf175fbb..636240dc 100644 --- a/FeynCalc/Documentation/Markdown/TrickMandelstam.md +++ b/FeynCalc/Documentation/Markdown/TrickMandelstam.md @@ -23,10 +23,7 @@ $$-2 s \left(u-m_W^2\right)$$ ```mathematica M^2 s - s^2 + M^2 t - s t + M^2 u - s u -TrickMandelstam[%, {s, t, u, 2 M^2}] - - - +TrickMandelstam[%, {s, t, u, 2 M^2}] ``` $$M^2 s+M^2 t+M^2 u-s^2-s t-s u$$ diff --git a/FeynCalc/Documentation/Markdown/UnDeclareNonCommutative.md b/FeynCalc/Documentation/Markdown/UnDeclareNonCommutative.md index ca2185d5..a23f8704 100644 --- a/FeynCalc/Documentation/Markdown/UnDeclareNonCommutative.md +++ b/FeynCalc/Documentation/Markdown/UnDeclareNonCommutative.md @@ -12,7 +12,7 @@ DeclareNonCommutative[x] ``` -As a side-effect of DeclareNonCommutative x is declared to be of DataType NonCommutative. +As a side-effect of `DeclareNonCommutative` `x` is declared to be of `DataType` `NonCommutative`. ```mathematica DataType[x, NonCommutative] @@ -20,7 +20,7 @@ DataType[x, NonCommutative] $$\text{True}$$ -The inverse operation is UnDeclareNonCommutative. +The inverse operation is `UnDeclareNonCommutative`. ```mathematica UnDeclareNonCommutative[x] @@ -35,7 +35,7 @@ DeclareNonCommutative[y, z] DataType[y, z, NonCommutative] -``` +```mathematica $$\{\text{True},\text{True}\}$$ diff --git a/FeynCalc/Documentation/Markdown/Uncontract.md b/FeynCalc/Documentation/Markdown/Uncontract.md index e979cd30..f8d0b491 100644 --- a/FeynCalc/Documentation/Markdown/Uncontract.md +++ b/FeynCalc/Documentation/Markdown/Uncontract.md @@ -1,7 +1,3 @@ -```mathematica - -``` - ## Uncontract `Uncontract[exp, q1, q2, ...]` uncontracts `Eps` and `DiracGamma`. diff --git a/FeynCalc/Documentation/Markdown/img/04o1hrqxpf60s.svg b/FeynCalc/Documentation/Markdown/img/04o1hrqxpf60s.svg new file mode 100644 index 00000000..4f26f971 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/04o1hrqxpf60s.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/0aknzgv9vc0z9.svg b/FeynCalc/Documentation/Markdown/img/0aknzgv9vc0z9.svg new file mode 100644 index 00000000..a8e929ba --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0aknzgv9vc0z9.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/0ctuipjuoiffd.svg b/FeynCalc/Documentation/Markdown/img/0ctuipjuoiffd.svg new file mode 100644 index 00000000..2bfbfb9c --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0ctuipjuoiffd.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/0gap32avu3bc5.svg b/FeynCalc/Documentation/Markdown/img/0gap32avu3bc5.svg new file mode 100644 index 00000000..eec3058a --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0gap32avu3bc5.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/0h6kq1ltbsocf.svg b/FeynCalc/Documentation/Markdown/img/0h6kq1ltbsocf.svg new file mode 100644 index 00000000..dd773bc2 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0h6kq1ltbsocf.svg @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/0qnch25ldaf78.svg b/FeynCalc/Documentation/Markdown/img/0qnch25ldaf78.svg new file mode 100644 index 00000000..acba144c --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0qnch25ldaf78.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/1atksrkz4jlnv.svg b/FeynCalc/Documentation/Markdown/img/1atksrkz4jlnv.svg new file mode 100644 index 00000000..6d16dc29 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/1atksrkz4jlnv.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/img/1umsofjfi8ghr.svg b/FeynCalc/Documentation/Markdown/img/1umsofjfi8ghr.svg new file mode 100644 index 00000000..0bb2df93 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/1umsofjfi8ghr.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Mathematica/Dirac/DiracTrace.m b/FeynCalc/Documentation/Mathematica/Dirac/DiracTrace.m index 6fa617d4..225cba2f 100644 --- a/FeynCalc/Documentation/Mathematica/Dirac/DiracTrace.m +++ b/FeynCalc/Documentation/Mathematica/Dirac/DiracTrace.m @@ -1,10 +1,7 @@ (* ::Package:: *) - - - (* ::Section:: *) (*DiracTrace*) diff --git a/FeynCalc/Documentation/Mathematica/Dirac/EpsChisholm.m b/FeynCalc/Documentation/Mathematica/Dirac/EpsChisholm.m index b5c1073b..7d4ff862 100644 --- a/FeynCalc/Documentation/Mathematica/Dirac/EpsChisholm.m +++ b/FeynCalc/Documentation/Mathematica/Dirac/EpsChisholm.m @@ -50,6 +50,3 @@ LC[\[Beta],\[Gamma],\[Mu],\[Nu]]FV[Subscript[p, 2],\[Gamma]]SpinorUBar[Subscript[p, 3],SMP["m_s"]] . GA[\[Beta],7] . SpinorV[Subscript[p, 4],SMP["m_d"]] %//EpsChisholm//DiracSimplify//Contract - - - diff --git a/FeynCalc/Documentation/Mathematica/Feynman/ExpandPartialD.m b/FeynCalc/Documentation/Mathematica/Feynman/ExpandPartialD.m index 94c71992..892f60cb 100644 --- a/FeynCalc/Documentation/Mathematica/Feynman/ExpandPartialD.m +++ b/FeynCalc/Documentation/Mathematica/Feynman/ExpandPartialD.m @@ -20,7 +20,7 @@ (* ::Text:: *) -(*[Overview](Extra/FeynCalc.md), [ExplicitPartialD](ExplicitPartialD.md), [LeftPartialD](LeftPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [PartialDRelations](PartialDRelations.md), [RightPartialD](RightPartialD.md), [LeftRightNablaD](LeftRightNablalD.md), [LeftRightNablaD2](LeftRightNablalD2.md), [LeftNablaD](LeftNablalD.md), [RightNablaD](RightNablalD.md).*) +(*[Overview](Extra/FeynCalc.md), [ExplicitPartialD](ExplicitPartialD.md), [LeftPartialD](LeftPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [PartialDRelations](PartialDRelations.md), [RightPartialD](RightPartialD.md), [LeftRightNablaD](LeftRightNablaD.md), [LeftRightNablaD2](LeftRightNablaD2.md), [LeftNablaD](LeftNablaD.md), [RightNablaD](RightNablaD.md).*) (* ::Subsection:: *) diff --git a/FeynCalc/Documentation/Mathematica/Feynman/ExplicitPartialD.m b/FeynCalc/Documentation/Mathematica/Feynman/ExplicitPartialD.m index 8eefae22..73b665a7 100644 --- a/FeynCalc/Documentation/Mathematica/Feynman/ExplicitPartialD.m +++ b/FeynCalc/Documentation/Mathematica/Feynman/ExplicitPartialD.m @@ -16,7 +16,7 @@ (* ::Text:: *) -(*[Overview](Extra/FeynCalc.md), [ExpandPartialD](ExpandPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [LeftRightPartialD2](LeftRightPartialD2.md), [LeftRightNablaD](LeftRightNablalD.md), [LeftRightNablaD2](LeftRightNablalD2.md), [LeftNablaD](LeftNablalD.md), [RightNablaD](RightNablalD.md).*) +(*[Overview](Extra/FeynCalc.md), [ExpandPartialD](ExpandPartialD.md), [LeftRightPartialD](LeftRightPartialD.md), [LeftRightPartialD2](LeftRightPartialD2.md), [LeftRightNablaD](LeftRightNablaD.md), [LeftRightNablaD2](LeftRightNablaD2.md), [LeftNablaD](LeftNablaD.md), [RightNablaD](RightNablaD.md).*) (* ::Subsection:: *) @@ -65,6 +65,3 @@ LeftRightNablaD2[\[Mu]] ExplicitPartialD[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD.m b/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD.m index 93c1513d..2f7b7efe 100644 --- a/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD.m +++ b/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD.m @@ -40,6 +40,3 @@ QuantumField[A,LorentzIndex[\[Mu]]] . LeftRightNablaD[i] . QuantumField[A,LorentzIndex[\[Rho]]] ExpandPartialD[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD2.m b/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD2.m index 0092ec40..92318688 100644 --- a/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD2.m +++ b/FeynCalc/Documentation/Mathematica/Feynman/LeftRightNablaD2.m @@ -40,6 +40,3 @@ QuantumField[A,LorentzIndex[\[Mu]]] . LeftRightNablaD2[i] . QuantumField[A,LorentzIndex[\[Rho]]] ExpandPartialD[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Feynman/ShiftPartialD.m b/FeynCalc/Documentation/Mathematica/Feynman/ShiftPartialD.m index ff0bccbc..05f58e43 100644 --- a/FeynCalc/Documentation/Mathematica/Feynman/ShiftPartialD.m +++ b/FeynCalc/Documentation/Mathematica/Feynman/ShiftPartialD.m @@ -64,4 +64,3 @@ ShiftPartialD[exp2,{FCPartialD[LorentzIndex[mu]]},GaugeField,Select -> Function[x, FreeQ[x, QuantumField[GaugeField, LorentzIndex[nu]]]]] - diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/A0.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/A0.m index 7282dc13..7adbd788 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/A0.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/A0.m @@ -1,6 +1,12 @@ +(* ::Package:: *) + + + (* ::Section:: *) (*A0*) + + (* ::Text:: *) (*`A0[m^2]` is the Passarino-Veltman one-point integral $A_0.$.*) @@ -13,7 +19,6 @@ (*[Overview](Extra/FeynCalc.md), [B0](B0.md), [C0](C0.md), [D0](D0.md), [PaVe](PaVe.md).*) - (* ::Subsection:: *) (*Examples*) @@ -32,6 +37,7 @@ SetOptions[A0,A0ToB0->False]; + (* ::Text:: *) (*According to the rules of dimensional regularization $A_0(0)$ is set to 0.*) diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologies.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologies.m index 8c5c2a6d..0b49c0e6 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologies.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologies.m @@ -78,6 +78,3 @@ res=FCLoopFindTopologies[isolatedTopos,{k1,k2},FCLoopIsolate->loopDen,Head->ampDen,Collecting->False]; - - - diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FeynAmpDenominatorSplit.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FeynAmpDenominatorSplit.m index b8e70fb8..2eaeeb3f 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FeynAmpDenominatorSplit.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FeynAmpDenominatorSplit.m @@ -28,7 +28,6 @@ ex=FeynAmpDenominatorSplit[%] - ex//FCE//StandardForm diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m index 86e0f85a..b3618dd3 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m @@ -100,6 +100,3 @@ FromGFAD[ex,FCE->True,InitialSubstitutions->{ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]}] %//InputForm - - - diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/GLIMultiply.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/GLIMultiply.m index 6a2d3d58..a0ece7a6 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/GLIMultiply.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/GLIMultiply.m @@ -26,6 +26,3 @@ GLI["topo1",{1,0,0,1,1}]GLI["topo1",{0,-1,-1,0,0}] %/.GLI->GLIMultiply/.GLIMultiply->GLI - - - diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/TID.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/TID.m index be9a9bfe..065f70f1 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/TID.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/TID.m @@ -135,6 +135,3 @@ ExpandScalarProduct[SP[P,Q]/.P->a P1 +b P2] StandardForm[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToFCPartialFractionForm.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToFCPartialFractionForm.m index 68e43f43..da82146a 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToFCPartialFractionForm.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToFCPartialFractionForm.m @@ -40,6 +40,3 @@ (-64*(-1+z^2))/(15*(1+z^2+z^4)) ToFCPartialFractionForm[%,z] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/CartesianPairContract.m b/FeynCalc/Documentation/Mathematica/Lorentz/CartesianPairContract.m index ae2ae480..2dae8170 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/CartesianPairContract.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/CartesianPairContract.m @@ -46,6 +46,3 @@ %/.CartesianPair->CartesianPairContract %/.CartesianPairContract->CartesianPair - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/EpsContractFreeQ.m b/FeynCalc/Documentation/Mathematica/Lorentz/EpsContractFreeQ.m index 97662964..6c86d947 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/EpsContractFreeQ.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/EpsContractFreeQ.m @@ -31,6 +31,3 @@ FCI[LC[p1,p2,p3,mu] LC[q1,q2,q3,q4]] EpsContractFreeQ[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/ExpandScalarProduct.m b/FeynCalc/Documentation/Mathematica/Lorentz/ExpandScalarProduct.m index d6e73a46..58729ac1 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/ExpandScalarProduct.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/ExpandScalarProduct.m @@ -108,6 +108,3 @@ ExpandScalarProduct[SP[P,Q]/.P->a P1 +b P2] StandardForm[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/FCCanonicalizeDummyIndices.m b/FeynCalc/Documentation/Mathematica/Lorentz/FCCanonicalizeDummyIndices.m index 659499b2..c65de3bb 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/FCCanonicalizeDummyIndices.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/FCCanonicalizeDummyIndices.m @@ -115,6 +115,3 @@ FCPartialD[{CartesianIndex[i], r}], \[Phi], PauliIndex[k2],PauliIndex[k1], R, r]) FCCanonicalizeDummyIndices[%, CartesianIndexNames -> {j},Head->{CartesianIndex}] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/FCClearScalarProducts.m b/FeynCalc/Documentation/Mathematica/Lorentz/FCClearScalarProducts.m index f42866ce..1f52a4c2 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/FCClearScalarProducts.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/FCClearScalarProducts.m @@ -33,6 +33,3 @@ Pair[Momentum[p],Momentum[p]] SP[p,p] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/FCGetDummyIndices.m b/FeynCalc/Documentation/Mathematica/Lorentz/FCGetDummyIndices.m index 44f09378..07931c58 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/FCGetDummyIndices.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/FCGetDummyIndices.m @@ -47,6 +47,3 @@ FCI[SUNT[a,a]] FCGetDummyIndices[%,{SUNIndex}] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/FCPermuteMomentaRules.m b/FeynCalc/Documentation/Mathematica/Lorentz/FCPermuteMomentaRules.m index df77033a..23c87847 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/FCPermuteMomentaRules.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/FCPermuteMomentaRules.m @@ -31,6 +31,3 @@ FCPermuteMomentaRules[{p1,p2,p3}] f[p1,p2,p3]/.% - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/LorentzToCartesian.m b/FeynCalc/Documentation/Mathematica/Lorentz/LorentzToCartesian.m index 7b0736a0..ce6da495 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/LorentzToCartesian.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/LorentzToCartesian.m @@ -36,6 +36,3 @@ GAD[\[Mu]] %//LorentzToCartesian - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/PairContract3.m b/FeynCalc/Documentation/Mathematica/Lorentz/PairContract3.m index 25ffb2d4..872e3649 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/PairContract3.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/PairContract3.m @@ -40,6 +40,3 @@ Pair[LorentzIndex[\[Mu]],Momentum[p+q]]Pair[LorentzIndex[\[Mu]],Momentum[r+s]] %/.Pair->PairContract3 - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/Rename.m b/FeynCalc/Documentation/Mathematica/Lorentz/Rename.m index ccdb6ac7..1ee1546a 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/Rename.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/Rename.m @@ -26,6 +26,3 @@ LC[\[Mu],\[Nu],\[Rho],\[Sigma]]LC[\[Alpha],\[Nu],\[Rho],\[Sigma]] Contract[%,EpsContract->False,Rename->True] - - - diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/TrickMandelstam.m b/FeynCalc/Documentation/Mathematica/Lorentz/TrickMandelstam.m index 46a5339e..04cf59be 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/TrickMandelstam.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/TrickMandelstam.m @@ -33,6 +33,3 @@ M^2 s - s^2 + M^2 t - s t + M^2 u - s u TrickMandelstam[%, {s,t,u,2M^2}] - - - diff --git a/FeynCalc/Documentation/Mathematica/NonCommAlgebra/DotSimplify.m b/FeynCalc/Documentation/Mathematica/NonCommAlgebra/DotSimplify.m index be4c7e4b..bd491a46 100644 --- a/FeynCalc/Documentation/Mathematica/NonCommAlgebra/DotSimplify.m +++ b/FeynCalc/Documentation/Mathematica/NonCommAlgebra/DotSimplify.m @@ -60,7 +60,6 @@ DotSimplify[a . (b-z c) . a,DotSimplifyRelations->{a . c->1/z}] - UnDeclareNonCommutative[a,b,c] DeclareNonCommutative[x] diff --git a/FeynCalc/Documentation/Mathematica/NonCommAlgebra/UnDeclareNonCommutative.m b/FeynCalc/Documentation/Mathematica/NonCommAlgebra/UnDeclareNonCommutative.m index 62b10ed2..4dcc1e6c 100644 --- a/FeynCalc/Documentation/Mathematica/NonCommAlgebra/UnDeclareNonCommutative.m +++ b/FeynCalc/Documentation/Mathematica/NonCommAlgebra/UnDeclareNonCommutative.m @@ -27,14 +27,14 @@ (* ::Text:: *) -(*As a side-effect of DeclareNonCommutative x is declared to be of DataType NonCommutative.*) +(*As a side-effect of `DeclareNonCommutative` `x` is declared to be of `DataType` `NonCommutative`.*) DataType[x,NonCommutative] (* ::Text:: *) -(*The inverse operation is UnDeclareNonCommutative.*) +(*The inverse operation is `UnDeclareNonCommutative`.*) UnDeclareNonCommutative[x] diff --git a/FeynCalc/Documentation/Mathematica/Pauli/PauliTrace.m b/FeynCalc/Documentation/Mathematica/Pauli/PauliTrace.m index 7ebbbce7..689cca1d 100644 --- a/FeynCalc/Documentation/Mathematica/Pauli/PauliTrace.m +++ b/FeynCalc/Documentation/Mathematica/Pauli/PauliTrace.m @@ -32,6 +32,3 @@ PauliTrace[CSI[i,j,k,l]] %//PauliSimplify - - - diff --git a/FeynCalc/Documentation/Mathematica/QCD/OPESumExplicit.m b/FeynCalc/Documentation/Mathematica/QCD/OPESumExplicit.m index a503e590..e8f9ccf5 100644 --- a/FeynCalc/Documentation/Mathematica/QCD/OPESumExplicit.m +++ b/FeynCalc/Documentation/Mathematica/QCD/OPESumExplicit.m @@ -31,6 +31,3 @@ OPESum[a^ib^(j-i)c^(m-j-4),{i,0,j},{j,0,m-4}] OPESumExplicit[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Options/FeynmanIntegralPrefactor.m b/FeynCalc/Documentation/Mathematica/Shared/Options/FeynmanIntegralPrefactor.m index 84b7b109..e37279e0 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Options/FeynmanIntegralPrefactor.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Options/FeynmanIntegralPrefactor.m @@ -72,6 +72,3 @@ Times@@Most[%] Series[%,{Epsilon,0,1}]//Normal//FunctionExpand - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Options/NumberOfPolarizations.m b/FeynCalc/Documentation/Mathematica/Shared/Options/NumberOfPolarizations.m index 11c27cc9..b4ee1360 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Options/NumberOfPolarizations.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Options/NumberOfPolarizations.m @@ -59,6 +59,3 @@ DoPolarizationSums[xyz,p,n,NumberOfPolarizations->2] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Options/PauliIndexNames.m b/FeynCalc/Documentation/Mathematica/Shared/Options/PauliIndexNames.m index bcbc7030..c45ea6c8 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Options/PauliIndexNames.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Options/PauliIndexNames.m @@ -31,6 +31,3 @@ PCHN[CSI[a],i,j]PCHN[CSI[b],j,k] FCCanonicalizeDummyIndices[%,PauliIndexNames->{l}] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Options/SubtopologyMarker.m b/FeynCalc/Documentation/Mathematica/Shared/Options/SubtopologyMarker.m index ff794279..b8f2cef4 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Options/SubtopologyMarker.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Options/SubtopologyMarker.m @@ -23,7 +23,7 @@ (* ::Text:: *) (*[Overview](Extra/FeynCalc.md), [FCLoopFindTopologies](FCLoopFindTopologies.md), [FCLoopFindTopologyMappings](FCLoopFindTopologyMappings.md),*) -(*[FCLoopFindTopologyMappings](FCLoopFindSubtopologies.md).*) +(*[FCLoopFindSubtopologies](FCLoopFindSubtopologies.md).*) (* ::Subsection:: *) diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLC.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLC.m index ee93bb66..539d089d 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLC.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLC.m @@ -49,6 +49,3 @@ CLC[i,j,k]CV[Subscript[p, 1],i]CV[Subscript[p, 2],j]CV[Subscript[p, 3],k] Contract[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLCD.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLCD.m index d1b3e008..53f9045f 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLCD.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/CLCD.m @@ -49,6 +49,3 @@ CLCD[i,j,k]CVD[Subscript[p, 1],i]CVD[Subscript[p, 2],j]CVD[Subscript[p, 3],k] Contract[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/Eps.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/Eps.m index 25ff7725..8969a652 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/Eps.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/Eps.m @@ -66,6 +66,3 @@ DiracSimplify[ex1 . ex2]//Factor2 %/.D->4 - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LC.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LC.m index 8a3fc2c7..270ce9ff 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LC.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LC.m @@ -49,6 +49,3 @@ LC[\[Mu],\[Nu],\[Rho],\[Sigma]]FV[Subscript[p, 1],\[Mu]]FV[Subscript[p, 2],\[Nu]]FV[Subscript[p, 3],\[Rho]]FV[Subscript[p, 4],\[Sigma]] Contract[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LCD.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LCD.m index 774c31bb..81f14ab4 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LCD.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LCD.m @@ -49,6 +49,3 @@ LCD[\[Mu],\[Nu],\[Rho],\[Sigma]]FVD[Subscript[p, 1],\[Mu]]FVD[Subscript[p, 2],\[Nu]]FVD[Subscript[p, 3],\[Rho]]FVD[Subscript[p, 4],\[Sigma]] Contract[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LightConePerpendicularComponent.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LightConePerpendicularComponent.m index 3583d8b8..bd0fb240 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/LightConePerpendicularComponent.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/LightConePerpendicularComponent.m @@ -58,6 +58,3 @@ Momentum[n],Momentum[nb]]]FV[p,\[Mu]]//Contract %//StandardForm - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliSigma.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliSigma.m index 297c3c1d..349874d3 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliSigma.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliSigma.m @@ -51,6 +51,3 @@ PauliSigma[CartesianMomentum[q]] . PauliSigma[CartesianMomentum[p-q]] %//PauliSigmaExpand - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliXi.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliXi.m index c0b9f798..93bb6292 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliXi.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/PauliXi.m @@ -32,6 +32,3 @@ PauliXi[-I] . SIS[p] . PauliEta[I] %//ComplexConjugate - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Tools/FCCompareNumbers.m b/FeynCalc/Documentation/Mathematica/Shared/Tools/FCCompareNumbers.m index 404d6740..cda296ee 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Tools/FCCompareNumbers.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Tools/FCCompareNumbers.m @@ -19,7 +19,6 @@ (*[Overview](Extra/FeynCalc.md)*) - (* ::Subsection:: *) (*Examples*) @@ -63,6 +62,3 @@ FCCompareNumbers[lhs,rhs,Chop->False] - - - diff --git a/FeynCalc/Documentation/Mathematica/Shared/Tools/PowerFactor.m b/FeynCalc/Documentation/Mathematica/Shared/Tools/PowerFactor.m index d33b72b3..8c8c0c07 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Tools/PowerFactor.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Tools/PowerFactor.m @@ -26,6 +26,3 @@ x^a y^a PowerFactor[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Tables/Amplitude.m b/FeynCalc/Documentation/Mathematica/Tables/Amplitude.m index 482054e9..5c74bea9 100644 --- a/FeynCalc/Documentation/Mathematica/Tables/Amplitude.m +++ b/FeynCalc/Documentation/Mathematica/Tables/Amplitude.m @@ -41,6 +41,3 @@ Amplitude["se1g1"] Explicit[%] - - - diff --git a/FeynCalc/Documentation/Mathematica/Tables/Hill.m b/FeynCalc/Documentation/Mathematica/Tables/Hill.m index 95932dc5..b0f3ca6c 100644 --- a/FeynCalc/Documentation/Mathematica/Tables/Hill.m +++ b/FeynCalc/Documentation/Mathematica/Tables/Hill.m @@ -31,6 +31,3 @@ Hill[x,x y]//PowerExpand//SimplifyPolyLog//Expand % /. x:> .34/. y-> .6//N//Chop - - - diff --git a/FeynCalc/Documentation/Mathematica/Tables/HypergeometricIR.m b/FeynCalc/Documentation/Mathematica/Tables/HypergeometricIR.m index 978bd53d..35b166bf 100644 --- a/FeynCalc/Documentation/Mathematica/Tables/HypergeometricIR.m +++ b/FeynCalc/Documentation/Mathematica/Tables/HypergeometricIR.m @@ -29,6 +29,3 @@ ToHypergeometric[t^b (1-t)^c (1+t z)^a,t] HypergeometricIR[%,t] - - - diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/ColorAlgebra.m b/FeynCalc/Documentation/Mathematica/Tutorials/ColorAlgebra.m index f1121a84..71d6fcf1 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/ColorAlgebra.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/ColorAlgebra.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Notation*) +(*Notation for colored objects*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Contractions.m b/FeynCalc/Documentation/Mathematica/Tutorials/Contractions.m index 9730f064..dae46d69 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Contractions.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Contractions.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Simplifications*) +(*Simplifications of tensorial expressions*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Dimensions.m b/FeynCalc/Documentation/Mathematica/Tutorials/Dimensions.m index 6d6b0c8f..7bbcdca5 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Dimensions.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Dimensions.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Notation*) +(*Notation for tensors living in different dimensions*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/DiracAlgebra.m b/FeynCalc/Documentation/Mathematica/Tutorials/DiracAlgebra.m index ca500fbb..c34cb6da 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/DiracAlgebra.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/DiracAlgebra.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Simplifications*) +(*Simplifications of Dirac matrix chains*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Indices.m b/FeynCalc/Documentation/Mathematica/Tutorials/Indices.m index d31710ac..f7d48100 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Indices.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Indices.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Manipulations*) +(*Manipulations of tensorial quantities*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/InternalExternal.m b/FeynCalc/Documentation/Mathematica/Tutorials/InternalExternal.m index 8e9cd4ba..5f01a91e 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/InternalExternal.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/InternalExternal.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*FeynCalcInternal*) +(*Internal representation*) (* ::Text:: *) @@ -84,7 +84,7 @@ (* ::Subsection:: *) -(*FeynCalcExternal*) +(*External representation*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Kinematics.m b/FeynCalc/Documentation/Mathematica/Tutorials/Kinematics.m index f07018b3..bc125c46 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Kinematics.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Kinematics.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Manipulations*) +(*Manipulations of scalar products*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m b/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m index 36fda37b..5a56c32c 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m @@ -16,11 +16,18 @@ (* ::Subsection:: *) -(*Notation*) +(*Notation for light-cone components*) (* ::Text:: *) -(*FeynCalc is equipped with special symbols that facilitate calculations involving light-cone vectors. The default $n$ and $\bar{n}$ vectors are defined via the global variables `$FCDefaultLightconeVectorN` and `$FCDefaultLightconeVectorNB`*) +(*FeynCalc is equipped with special symbols that facilitate calculations involving light-cone vectors. The default $n$ and $\bar{n}$ vectors are defined via the global variables `$FCDefaultLightconeVectorN` and `$FCDefaultLightconeVectorNB`. By default those are set to `FCGV["n"]` and `FCGV["nb"]` to avoid possible conflicts with user-defined variables*) + + +{$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB} + + +(* ::Text:: *) +(*These names can be of course changed. A particularly convenient choice is to use `n` and `nb`. Notice that these commands must be evaluated at the beginning of every FeynCalc session*) $FCDefaultLightconeVectorN=n; @@ -28,7 +35,7 @@ (* ::Text:: *) -(*Notice that apart from this you must also explicitly define the values of the scalar products $n^2$, $\bar{n}^2$ and $n \cdot \bar{n}$*) +(*Apart from this you must also explicitly define the values of the scalar products $n^2$, $\bar{n}^2$ and $n \cdot \bar{n}$*) FCClearScalarProducts[] @@ -38,7 +45,7 @@ (* ::Text:: *) -(*The Plus, Minus and peRpendicular components of 4-vectors are called FVLP, FVLN and FVLR respectively. The plus and minus components are immediately rewritten into forms involving $n$ and $\bar{n}$. The perpendicular component is a separate entity that cannot be simplified further.*) +(*The Plus, Minus and peRpendicular components of 4-vectors are called `FVLP`, `FVLN` and `FVLR` respectively. The plus and minus components are immediately rewritten into forms involving $n$ and $\bar{n}$. The perpendicular component is a separate entity that cannot be simplified further.*) {FVLP[p,\[Mu]],FVLN[p,\[Mu]],FVLR[p,\[Mu]]} @@ -56,7 +63,7 @@ (* ::Text:: *) -(*Internally, the perpendicular component is implemented as an extra head wrapped around such internal symbols as LorentzIndex or Momentum. This head is called `LightConePerpendicularComponent` and has 3 arguments. The last two arguments specify the light-cone vectors.*) +(*Internally, the perpendicular component is implemented as an extra head wrapped around such internal symbols as `LorentzIndex` or `Momentum`. This head is called `LightConePerpendicularComponent` and has 3 arguments. The last two arguments specify the light-cone vectors.*) ?LightConePerpendicularComponent @@ -102,11 +109,11 @@ (* ::Subsection:: *) -(*Dirac algebra*) +(*Dirac matrices with light-cone components *) (* ::Text:: *) -(*Dirac algebra is with matrices contracted to light-cone momenta or having particular light-cone components is fully supported. The general strategy followed by `DiracSimplify` is to move all perpendicular components to the very right of the chain.*) +(*Dirac algebra involving matrices contracted to light-cone momenta or having particular light-cone components is fully supported. The general strategy followed by `DiracSimplify` is to move all perpendicular components to the very right of the chain.*) ex1=GALR[p] . GA[\[Mu],\[Nu]] @@ -155,7 +162,58 @@ (* ::Subsection:: *) -(*Tensor reductions*) +(*Introducing light-cone components by hand*) + + +(* ::Text:: *) +(*In some calculations one might end up with a mixture of explicit light-cone components and generic Lorentz tensors. If those tensors admit a particularly simple representation in terms of light-cone components, it can be enforced using the function `ToLightConeComponents`*) + + +(* ::Text:: *) +(*For example, the following expression cannot be simplified any further*) + + +ex6=GS[nb,vp] + + +(* ::Text:: *) +(*Now let us suppose that $(v')^{\mu}$ can be actually written as $\alpha n^\mu + \bar{n}^{\mu}/(4 \alpha)$. We can implement this as follows*) + + +SP[vp,nb]= 2*alpha; +SP[vp,n]= 2*1/(4alpha); +LightConePerpendicularComponent[Momentum[vp],Momentum[n],Momentum[nb]]=0; + + +FV[vp,mu] +%//ToLightConeComponents + + +(* ::Text:: *) +(*However, this will not make FeynCalc automatically simplify the Dirac chain*) + + +ex6//DiracSimplify + + +(* ::Text:: *) +(*Using `ToLightConeComponents` we can explicitly rewrite `vp` in the chain in terms of the light-cone components and hence enforce the desired simplification. In fact, the function will also automatically simplify some common expressions such $\gamma \cdot \bar{n} \gamma \cdot \bar{n} = \gamma \cdot n \gamma \cdot n = 0$*) + + +ex6//ToLightConeComponents +%//DiracSimplify + + +(* ::Text:: *) +(*Such simplifications inside `ToLightConeComponents` can be disabled using the option `DotSimplify`*) + + +ex6//ToLightConeComponents[#,DotSimplify->False]& +%//DiracSimplify + + +(* ::Subsection:: *) +(*Reductions of loop integrals with numerators involving light-cone components*) int=FVLRD[p,\[Mu]]SFAD[p,p-q] diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Loops.m b/FeynCalc/Documentation/Mathematica/Tutorials/Loops.m index 23327bec..57b569ad 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Loops.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Loops.m @@ -280,7 +280,7 @@ (* ::Subsection:: *) -(*Tensor reductions*) +(*Tensor reductions with GLIs*) (* ::Text:: *) diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/Nonrelativistic.m b/FeynCalc/Documentation/Mathematica/Tutorials/Nonrelativistic.m index b2089723..e21856cd 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/Nonrelativistic.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/Nonrelativistic.m @@ -16,7 +16,7 @@ (* ::Subsection:: *) -(*Manipulations*) +(*Manipulations of Cartesian tensors*) (* ::Text:: *) @@ -48,6 +48,3 @@ SP[p,q] %//LorentzToCartesian - - - diff --git a/FeynCalc/Documentation/Scripts/cleanUpMarkdown.sh b/FeynCalc/Documentation/Scripts/cleanUpMarkdown.sh index 90abfc9e..73e624c8 100755 --- a/FeynCalc/Documentation/Scripts/cleanUpMarkdown.sh +++ b/FeynCalc/Documentation/Scripts/cleanUpMarkdown.sh @@ -38,6 +38,10 @@ if [[ -f $1 ]]; then sed -i -e 's|\$\$\(!\[.*\)\$\$|\1|' $1; sed -i -e 's|\^{\\dagger }\^{|\^{\\dagger |g' $1; sed -i -e 's|\^{\\dagger }\^{|\^{\\dagger |g' $1; + sed -i -e "s|, \[\\$|, [\\\\$|g" $1; + sed -i -e "s|\](\\$|](\\\\$|g" $1; + sed -z -i -e 's|```mathematica\n \n```\n\n||g' $1; + sed -z -i -e 's|\n\n```\n|\n\n```mathematica\n|g' $1; elif [[ -d $1 ]]; then allFilesRaw=$(find $1 -type f -name '*.md' -print) diff --git a/FeynCalc/Documentation/Scripts/filters/allowbreak.lua b/FeynCalc/Documentation/Scripts/filters/allowbreak.lua index b46351ce..e55d0384 100644 --- a/FeynCalc/Documentation/Scripts/filters/allowbreak.lua +++ b/FeynCalc/Documentation/Scripts/filters/allowbreak.lua @@ -1,6 +1,9 @@ return { { Inline = function (elem) +--% print (elem.content) +--% print (elem.tag) +--% print ('---------') if elem.tag == "Code" then local new = elem.text new = string.gsub(new, '%{', '\\{\\allowbreakXXXXXX') diff --git a/FeynCalc/Documentation/Scripts/filters/test.lua b/FeynCalc/Documentation/Scripts/filters/test.lua index 40ea7cc2..bcc7a434 100644 --- a/FeynCalc/Documentation/Scripts/filters/test.lua +++ b/FeynCalc/Documentation/Scripts/filters/test.lua @@ -56,3 +56,20 @@ function Header(el) end +function Pandoc(doc) + local hblocks = {} + for i,el in pairs(doc.blocks) do + print(el.tag) + print(el.text) + if (el.t == "Div" and el.classes[1] == "handout") or + (el.t == "BlockQuote") or + (el.t == "OrderedList" and el.style == "Example") or + (el.t == "Para" and #el.c == 1 and el.c[1].t == "Image") or + (el.t == "Header") then + table.insert(hblocks, el) + end + end + return pandoc.Pandoc(hblocks, doc.meta) +end + + From 6771e3fb14f464da3d034c33c1621806ebc882c5 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 22:05:25 +0100 Subject: [PATCH 09/67] Fixed a weird ordering of propagators in FeynAmpDenominatorCombine. --- .../LoopIntegrals/FeynAmpDenominatorCombine.m | 26 +---------------- Tests/LoopIntegrals/ApartFF.test | 21 +++++--------- Tests/LoopIntegrals/FCApart.test | 29 ++++++------------- Tests/LoopIntegrals/FCLoopExtract.test | 9 +++--- Tests/LoopIntegrals/FCMultiLoopTID.test | 5 +--- Tests/LoopIntegrals/TID.test | 3 +- 6 files changed, 24 insertions(+), 69 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FeynAmpDenominatorCombine.m b/FeynCalc/LoopIntegrals/FeynAmpDenominatorCombine.m index 5c5252b5..4d682225 100644 --- a/FeynCalc/LoopIntegrals/FeynAmpDenominatorCombine.m +++ b/FeynCalc/LoopIntegrals/FeynAmpDenominatorCombine.m @@ -38,32 +38,8 @@ feyncomb[a__]^n_Integer?Positive := feyncomb @@ Flatten[Table[{a}, {n}]]; -lev[PropagatorDenominator[a_, 0], PropagatorDenominator[b_, 0]] := - If[ Length[Variables[a]] < Length[Variables[b]], - True, - False - ]; - -lev[CartesianPropagatorDenominator[a1_, a2_, _, _], CartesianPropagatorDenominator[b1_, b2_, _, _]] := - If[ Length[Variables[{a1,a2}]] < Length[Variables[{b1,b2}]], - True, - If[ Length[Variables[{a1,a2}]] === Length[Variables[{b1,b2}]], - OrderedQ[{{a1,a2},{b1,b2}}], - False - ] - ]; - -lev[StandardPropagatorDenominator[a1_, a2_, _, _], StandardPropagatorDenominator[b1_, b2_, _, _]] := - If[ Length[Variables[{a1,a2}]] < Length[Variables[{b1,b2}]], - True, - If[ Length[Variables[{a1,a2}]] === Length[Variables[{b1,b2}]], - OrderedQ[{{a1,a2},{b1,b2}}], - False - ] - ]; - fdsor[a__] := - Apply[FeynAmpDenominator, Sort[MomentumExpand[{a}], lev]]; + Apply[FeynAmpDenominator, Sort[MomentumExpand[{a}], FeynCalc`Package`lenso]]; Options[FeynAmpDenominatorCombine] = { FCE -> False, diff --git a/Tests/LoopIntegrals/ApartFF.test b/Tests/LoopIntegrals/ApartFF.test index c580167c..42cb555f 100644 --- a/Tests/LoopIntegrals/ApartFF.test +++ b/Tests/LoopIntegrals/ApartFF.test @@ -35,10 +35,9 @@ Tests`LoopIntegrals`fcstApartFF = {"fcstApartFF-ID11", "ApartFF[SPD[q2,p]SPD[q1,p]FAD[{q1,m},{q2,m},q1-p,q2-p,q2-q1],{q1,\ q2}]//FCE", -"-FAD[{q1, m}, -p + q2, q1 - q2]/2 + FAD[{q1, m}, {q2, m}, q1 - q2]/4 + -(FAD[q2, q1, {-p + q1, m}, q1 - q2]*(m^2 + SPD[p, p]))/2 - -(FAD[{q1, m}, {q2, m}, q1 - q2, -p + q1]*(m^2 + SPD[p, p]))/2 + -(FAD[{q1, m}, {q2, m}, -p + q2, q1 - q2, -p + q1]*(m^2 + SPD[p, p])^2)/4"}, +"-1/2*FAD[{q1, m}, q1 - q2, -p + q2] + FAD[{q1, m}, {q2, m}, q1 - q2]/4 + (FAD[q1, q2, {-p + q1, m}, +q1 - q2]*(m^2 + SPD[p, p]))/2 - (FAD[{q1, m}, {q2, m}, -p + q1, q1 - q2]*(m^2 + SPD[p, p]))/2 + +(FAD[{q1, m}, {q2, m}, -p + q1, q1 - q2, -p + q2]*(m^2 + SPD[p, p])^2)/4"}, {"fcstApartFF-ID12", "ApartFF[SPD[l,-p1+p3+p2]FAD[{l,m1},{l-p1+p3+p2,m3},l-p1+p2,l-k1],{\ l}]//FCE", @@ -117,9 +116,7 @@ CFAD[{{-k1 + l, 0}, {0, -1}, 1}, {{l - p1 + p2, 0}, {0, -1}, 1}, {"fcstApartFF-ID29", "ApartFF[FAD[l,{k1+k2+l-p2,MC},{k1+l,MC}]SPD[k1,l],{l},FDS\[Rule]\ False,FCE\[Rule]True]", -"FAD[l, {k1 + k2 + l - p2, MC}]/2 - FAD[{k1 + l, MC}, {k1 + k2 + l \ -- p2, MC}]/2 + (FAD[{k1 + k2 + l - p2, MC}, l, {k1 + l, MC}]*(MC^2 - \ -SPD[k1, k1]))/2"}, +"FAD[l, {k1 + k2 + l - p2, MC}]/2 - FAD[{k1 + l, MC}, {k1 + k2 + l - p2, MC}]/2 + (FAD[l, {k1 + l, MC}, {k1 + k2 + l - p2, MC}]*(MC^2 - SPD[k1, k1]))/2"}, {"fcstApartFF-ID30", "ApartFF[SFAD[l,{k1+k2+l-p2,MC^2},{k1+l,MC^2}]SPD[k1,l],{l},FDS\ \[Rule]False,FCE\[Rule]True]", @@ -144,9 +141,8 @@ CFAD[{{k1 + l, 0}, {MC^2, -1}, 1}, {{k1 + k2 + l - p2, 0}, {MC^2, -1}, 1}]/ {"fcstApartFF-ID33", "ApartFF[SPD[q2, p] SPD[q1, p] FAD[{q1, m}, {q2, m}, q1 - p, q2 - p, q2 - q1, q1], {q1, q2}, Numerator -> False, FCE -> True]", -"-((FAD[q1, {q2, m}, -p + q2, q1 - q2, -p + q1] SPD[p, q1] SPD[p, q2])/ -m^2) + (FAD[{q1, m}, {q2, m}, -p + q2, q1 - q2, -p + q1] SPD[p, -q1] SPD[p, q2])/m^2"}, +"-((FAD[q1, {q2, m}, -p + q1, q1 - q2, -p + q2]*SPD[p, q1]*SPD[p, q2])/m^2) + +(FAD[{q1, m}, {q2, m}, -p + q1, q1 - q2, -p + q2]*SPD[p, q1]*SPD[p, q2])/m^2"}, {"fcstApartFF-ID34", "ApartFF[FVD[q, i] FVD[q, j], {q}]","0"}, {"fcstApartFF-ID35", "ApartFF[FVD[q, i] FVD[q, j] SFAD[{q, m, -1}], {q}]","0"}, {"fcstApartFF-ID36", "ApartFF[CVD[q, i] CVD[q, j] CFAD[{q, mm}, {q, m, -1}], {q}, @@ -206,9 +202,8 @@ SFAD[{{0, p.v1}, {0, 1}, 1}, {{0, p.(v1 - v2)}, {y, 1}, 1}]"}, al}, {{k, -m^2/Q k . n - k . nb Q}, {-m^2, 1}}, {{k, -m^2/Q k . nb - k . n Q}, {-m^2, 1}}, {k, m^2}], {k}, FCE -> True]", -"SFAD[{{0, k . n}, {0, -1}, al}, {{k, 0}, {m^2, 1}, 1}, {{k, --(Q*k . n) - (m^2*k . nb)/Q}, {-m^2, 1}, 1}, {{k, --((m^2*k . n)/Q) - Q*k . nb}, {-m^2, 1}, 1}]"}, +"SFAD[{{k, 0}, {m^2, 1}, 1}, {{0, k . n}, {0, -1}, al}, {{k, -(Q*k . n) - (m^2*k . nb)/Q}, +{-m^2, 1}, 1}, {{k, -((m^2*k . n)/Q) - Q*k . nb}, {-m^2, 1}, 1}]"}, diff --git a/Tests/LoopIntegrals/FCApart.test b/Tests/LoopIntegrals/FCApart.test index 08437ea3..0391f7c1 100644 --- a/Tests/LoopIntegrals/FCApart.test +++ b/Tests/LoopIntegrals/FCApart.test @@ -70,8 +70,7 @@ m}]*(m^2 - SPD[p1, p1] - 2*SPD[p2, p2]))/4 + (FAD[k, {k - p2, m}, {k \ SPD[p1, p1])*(m^2 - SPD[p2, p2]))/4"}, {"fcstFCApart-ID13", "ApartFF[FVD[q1, mu] FVD[q2, nu] FAD[q1, q2, {p1 - q2}, {q1 - p1}, {q2 - p1}], {q1, q2}] // FCE", -"FAD[q1, q2, -p1 + q2, -p1 + q1, -p1 + q2]*FVD[q1, mu]*FVD[q2, \ -nu]"}, +"FAD[q1, q2, -p1 + q1, -p1 + q2, -p1 + q2]*FVD[q1, mu]*FVD[q2, nu]"}, {"fcstFCApart-ID14", "FCApart[SPD[k1,p]SPD[p,p]FAD[{p,m0}],{p},MaxIterations\[Rule]1,\ FDS\[Rule]False]//FCE", "FAD[{p, m0}]*SPD[k1, p]*SPD[p, p]"}, @@ -360,24 +359,14 @@ SFAD[{{-p2 + p4, 0}, {0, 1}, 1}, {{-p2 - p3 + p4, 0}, {0, 1}, 1}, {{0, -p2.p3 + a b p3.p4}, {0, 1}, 1}, {{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, 1}]], {p2, p3}, FDS -> False, FCE -> True]", -"-1/2*(a*b* - SFAD[{{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, - 1}, {{p2 + p3, 0}, {0, 1}, 1}, {{-p2 + p4, 0}, {0, 1}, - 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}]) + (a*b* - SFAD[{{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, - 1}, {{p2 + p3, 0}, {0, 1}, 1}, {{-p2 - p3 + p4, 0}, {0, 1}, - 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}])/ -2 + ((-1 + a*b)* - SFAD[{{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, - 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{-p2 - p3 + p4, 0}, {0, 1}, - 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}])/2 + -SFAD[{{p2, 0}, {0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, - 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{-p2 - p3 + p4, 0}, {0, 1}, - 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}]/ -2 - ((-1 + a*b)* - SFAD[{{p3, 0}, {0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, - 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{-p2 - p3 + p4, 0}, {0, 1}, - 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}])/2"}, +"(a*b*SFAD[{{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, 1}, {{0, -p2 . p3 + a*b*p3 . p4}, +{0, 1}, 2}, {{-p2 - p3 + p4, 0}, {0, 1}, 1}])/2 - (a*b*SFAD[{{p2, 0}, {0, 1}, 1}, {{p3, 0}, {0, 1}, 1}, +{{p2 + p3, 0}, {0, 1}, 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}])/2 + ((-1 + a*b)*SFAD[{{p2, 0}, +{0, 1}, 1}, {{p3, 0}, {0, 1}, 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}, +{{-p2 - p3 + p4, 0}, {0, 1}, 1}])/2 + SFAD[{{p2, 0}, {0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, 1}, {{-p2 + p4, 0}, +{0, 1}, 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}, {{-p2 - p3 + p4, 0}, {0, 1}, 1}]/2 - ((-1 + a*b)*SFAD[{{p3, 0}, +{0, 1}, 1}, {{p2 + p3, 0}, {0, 1}, 1}, {{-p2 + p4, 0}, {0, 1}, 1}, {{0, -p2 . p3 + a*b*p3 . p4}, {0, 1}, 2}, +{{-p2 - p3 + p4, 0}, {0, 1}, 1}])/2"}, {"fcstFCApart-ID46", "FCApart[SFAD[p1, p2, p3, -p1 - p2 - p3 + Q, -p2 + Q, -p1 - p2 + Q, p1 + p3], {p1, p2, p3}, FDS -> False, FCE -> True]", diff --git a/Tests/LoopIntegrals/FCLoopExtract.test b/Tests/LoopIntegrals/FCLoopExtract.test index 867ce5e7..3760a6c3 100644 --- a/Tests/LoopIntegrals/FCLoopExtract.test +++ b/Tests/LoopIntegrals/FCLoopExtract.test @@ -73,14 +73,13 @@ m0}], {q1}]}}"}, {"fcstFCLoopExtract-ID14", "FCLoopExtract[FAD[{q1,0},{q2,0},{q1-p,0},{q1-q2}],{q1,q2},loopInt,\ FCLoopBasisSplit\[Rule]True,FCE\[Rule]True]", -"{0, loopInt[FAD[q2, q1, q1 - q2, -p + q1], {q1, q2}], \ -{loopInt[FAD[q2, q1, q1 - q2, -p + q1], {q1, q2}]}}"}, +"{0, loopInt[FAD[q1, q2, -p + q1, q1 - q2], {q1, q2}], +{loopInt[FAD[q1, q2, -p + q1, q1 - q2], {q1, q2}]}}"}, {"fcstFCLoopExtract-ID15", "FCLoopExtract[FAD[{q3,0},{q1,0},{q2,0},{q1-p,0},{q1-q2}],{q1,q2,\ q3},loopInt,FCLoopBasisSplit\[Rule]True,FCE\[Rule]True]", -"{0, loopInt[FAD[q3], {q3}]*loopInt[FAD[q2, q1, q1 - q2, -p + q1], \ -{q1, q2}], {loopInt[FAD[q3], {q3}], loopInt[FAD[q2, q1, q1 - q2, -p + \ -q1], {q1, q2}]}}"}, +"{0, loopInt[FAD[q3], {q3}]*loopInt[FAD[q1, q2, -p + q1, q1 - q2], +{q1, q2}], {loopInt[FAD[q3], {q3}], loopInt[FAD[q1, q2, -p + q1, q1 - q2], {q1, q2}]}}"}, {"fcstFCLoopExtract-ID16", "FCLoopExtract[GFAD[{SPD[q1,p]SPD[q2,p],n}],{q1,q2},loopInt]\ //FCE", "{0, loopInt[ diff --git a/Tests/LoopIntegrals/FCMultiLoopTID.test b/Tests/LoopIntegrals/FCMultiLoopTID.test index fff8896c..0389f562 100644 --- a/Tests/LoopIntegrals/FCMultiLoopTID.test +++ b/Tests/LoopIntegrals/FCMultiLoopTID.test @@ -245,10 +245,7 @@ FAD[q1, q1 - k1, q1 - k1, q1 - k1, q2] SPD[k1 - q1, k1 + q1] SPD[ q1 - k1, q1 + k1], {q1, q2}]","0"}, {"fcstFCMultiLoopTID-ID21", "FCMultiLoopTID[ FAD[q1, q1 - k1, q2, q1 + q2] SPD[2 k1 - q1, q1 + 2 q2], {q1, q2}, -FCE -> True]","2 FAD[q2, q1, q1 + q2, -k1 + q1] SPD[k1, q1] + -4 FAD[q2, q1, q1 + q2, -k1 + q1] SPD[k1, q2] - -FAD[q2, q1, q1 + q2, -k1 + q1] SPD[q1, q1] - -2 FAD[q2, q1, q1 + q2, -k1 + q1] SPD[q1, q2]"}, +FCE -> True]","2*FAD[q1, q2, -k1 + q1, q1 + q2]*SPD[k1, q1] + 4*FAD[q1, q2, -k1 + q1, q1 + q2]*SPD[k1, q2] - FAD[q1, q2, -k1 + q1, q1 + q2]*SPD[q1, q1] - 2*FAD[q1, q2, -k1 + q1, q1 + q2]*SPD[q1, q2]"}, {"fcstFCMultiLoopTID-ID22", "FCMultiLoopTID[FVD[q, i] FVD[q, j] SFAD[{{0, p.q}, x}], {q}, FCE -> True]","0"}, {"fcstFCMultiLoopTID-ID23", "FCMultiLoopTID[FVD[q, i] FVD[q, j] SFAD[{{0, p.q}, x}, q + p], {q}, diff --git a/Tests/LoopIntegrals/TID.test b/Tests/LoopIntegrals/TID.test index b9152848..9d17b9c7 100644 --- a/Tests/LoopIntegrals/TID.test +++ b/Tests/LoopIntegrals/TID.test @@ -880,8 +880,7 @@ GenPaVe[{0, 0}, {{0, m0}, {-p1, m1}, {-p2, m2}}]*MTD[mu, nu]"}, "(FVD[p, mu]*SFAD[{{q, 0}, {0, 1}, 2}, {{-p + q, 0}, {0, 1}, 1}])/ 2 - (FVD[p, mu]*SFAD[{{q, 0}, {0, 1}, 1}, {{-p + q, 0}, {0, 1}, 1}])/(2*SPD[p, p])"}, {"fcstTID-ID41", "TID[FVD[q,mu]SFAD[q,q-p,{{0,q.k}}],q,FCE->True]", -"FVD[q, mu]*SFAD[{{0, k . q}, {0, 1}, 1}, {{q, 0}, {0, 1}, 1}, {{p \ -- q, 0}, {0, 1}, 1}]"}, +"FVD[q, mu]*SFAD[{{q, 0}, {0, 1}, 1}, {{0, k . q}, {0, 1}, 1}, {{p - q, 0}, {0, 1}, 1}]"}, {"fcstTID-ID42", "TID[FCI[CVD[q,i]CVD[q,j]SFAD[{q,m^2,2}]],q,FCE->True]", "(CFAD[{{q, 0}, {m^2 - TC[q]^2, -1}, 1}]*KDD[i, j])/(-1 + D) - (m^2* From 064d134d103bbd53f3b5af951964a80d3bc00eba Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 22:05:38 +0100 Subject: [PATCH 10/67] Fixed a bug in FCLoopFromGLI. --- FeynCalc/LoopIntegrals/FCLoopFromGLI.m | 17 +++++++++++------ Tests/LoopIntegrals/FCLoopToPakForm.test | 22 +++++++++++++--------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m index 78bfbef2..3e2f09ca 100644 --- a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m +++ b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m @@ -50,7 +50,7 @@ FCLoopFromGLI[expr,{topo}, opts]; FCLoopFromGLI[expr_, toposRaw_List, OptionsPattern[]] := - Block[{ res, topos, listGLI, rule, optLoopMomenta, + Block[{ res, topos, listGLI, rule, optLoopMomenta, gliHead, pattern, fromGliRule, listGLIEval, ruleFinal, relevantTopos, optList}, optFeynAmpDenominatorExplicit = OptionValue[FeynAmpDenominatorExplicit]; @@ -107,12 +107,15 @@ *) Which[ MatchQ[expr, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])], - listGLI = {expr}, + listGLI = {expr}; + res = gliHead[expr], MatchQ[expr, {(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])..}], - listGLI = expr, + listGLI = expr; + res = gliHead/@listGLI, (*amplitude*) True, - listGLI = Cases2[expr, GLI] + listGLI = Cases2[expr, GLI]; + res = expr /. a_GLI :> gliHead[a] ]; relevantTopos = Union[FCLoopSelectTopology[listGLI,topos]]; @@ -155,12 +158,14 @@ listGLIEval = FeynAmpDenominatorCombine[#,FCI->True]&/@listGLIEval ]; - ruleFinal = Thread[Rule[listGLI,listGLIEval]]; + ruleFinal = Thread[Rule[gliHead/@listGLI,listGLIEval]]; FCPrint[3,"FCLoopFromGLI: Final set of the replacement rules: ", ruleFinal, FCDoControl->fgliVerbose]; - res = expr /. Dispatch[ruleFinal]; + res = res /. Dispatch[ruleFinal]; + + FCPrint[3,"FCLoopFromGLI: Raw result: ", res, FCDoControl->fgliVerbose]; If[ !FreeQ[res,GLI], Message[FCLoopFromGLI::failmsg, "The input expression still contains GLIs."]; diff --git a/Tests/LoopIntegrals/FCLoopToPakForm.test b/Tests/LoopIntegrals/FCLoopToPakForm.test index d23fc4e8..de3270d4 100644 --- a/Tests/LoopIntegrals/FCLoopToPakForm.test +++ b/Tests/LoopIntegrals/FCLoopToPakForm.test @@ -192,15 +192,19 @@ SFAD[{{I*FCGV[\"lmom\"][3, 1], 0}, {-m1^2, -1}, 1}], \ SFAD[{{I*(FCGV[\"lmom\"][3, 1] - FCGV[\"lmom\"][3, 2]), 0}, {-m1^2, \ -1}, 1}]}, {1, 1, 1, 1}}]}"}, {"fcstFCLoopToPakForm-ID17", -"FCLoopToPakForm[{GLI[prop2Ltopo13311,{1,0,0,0,0}]^2,GLI[\ -prop2Ltopo13311,{1,0,0,0,0}]^2GLI[prop2Ltopo13311,{1,0,0,0,1}],\ -\[IndentingNewLine]GLI[prop2Ltopo13311,{1,0,0,0,0}]^2GLI[\ -prop2Ltopo13311,{1,0,0,0,1}]GLI[prop2Ltopo13311,{1,0,1,0,1}]\ -\[IndentingNewLine]\[IndentingNewLine]},{FCTopology[prop2Ltopo13311,{\ -SFAD[{{I*p1,0},{-m1^2,-1},1}],SFAD[{{I*(p1+q1),0},{-m3^2,-1},1}],SFAD[\ -{{I*p3,0},{-m3^2,-1},1}],SFAD[{{I*(p3+q1),0},{-m1^2,-1},1}],SFAD[{{I*(\ -p1-p3),0},{-m1^2,-1},1}]},{p1,p3},{q1},{SPD[q1,q1]->m1^2},{}]},\ -Names->x,FCE->True,Head->ph]", +"FCLoopToPakForm[{GLI[prop2Ltopo13311, {1, 0, 0, 0, 0}]^2, +GLI[prop2Ltopo13311, {1, 0, 0, 0, 0}]^2 GLI[ + prop2Ltopo13311, {1, 0, 0, 0, 1}], +GLI[prop2Ltopo13311, {1, 0, 0, 0, 0}]^2 GLI[ + prop2Ltopo13311, {1, 0, 0, 0, 1}] GLI[ + prop2Ltopo13311, {1, 0, 1, 0, 1}]}, {FCTopology[ +prop2Ltopo13311, {SFAD[{{I*p1, 0}, {-m1^2, -1}, 1}], + SFAD[{{I*(p1 + q1), 0}, {-m3^2, -1}, 1}], + SFAD[{{I*p3, 0}, {-m3^2, -1}, 1}], + SFAD[{{I*(p3 + q1), 0}, {-m1^2, -1}, 1}], + SFAD[{{I*(p1 - p3), 0}, {-m1^2, -1}, 1}]}, {p1, + p3}, {q1}, {SPD[q1, q1] -> m1^2}, {}]}, Names -> x, FCE -> True, +Head -> ph]", "{{GLI[prop2Ltopo13311, {1, 0, 0, 0, 0}]^2, ph[x[1]*x[2] - \ m1^2*x[1]^2*x[2] - m1^2*x[1]*x[2]^2, {{x[1], x[2]}, \ {SFAD[{{I*FCGV[\"lmom\"][1, 1], 0}, {-m1^2, -1}, 1}], \ From a1852159f4da6d0ec7f035206a25243dbb979a4e Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 22:07:13 +0100 Subject: [PATCH 11/67] Improved debugging output in FCMatchSolve. --- FeynCalc/Shared/FCMatchSolve.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/FeynCalc/Shared/FCMatchSolve.m b/FeynCalc/Shared/FCMatchSolve.m index 091300f6..a51c7252 100755 --- a/FeynCalc/Shared/FCMatchSolve.m +++ b/FeynCalc/Shared/FCMatchSolve.m @@ -60,7 +60,7 @@ The input (say a sum or a difference of amplitudes) should be prepared using FCMatchSolve[expr_, notvars_List/; (!OptionQ[notvars] || notvars==={}), OptionsPattern[]] := Block[{ ex, equals, eqSys, eqSol, vars, varsToRemove, nVarsToRemove, - nVarsAlreadyRemoved, optFactoring, allEqVars, trivialEqs, preSol, factor}, + nVarsAlreadyRemoved, optFactoring, allEqVars, trivialEqs, preSol, factor, time}, optFactoring = OptionValue[Factoring]; preSol = {}; @@ -110,7 +110,8 @@ The input (say a sum or a difference of amplitudes) should be prepared using ]; (*Presolve the system by removing trivial equations*) - FCPrint[3, "FCMatchSolve: Removing trivial equation.", FCDoControl->fcmsVerbose]; + FCPrint[1, "FCMatchSolve: Removing trivial equations.", FCDoControl->fcmsVerbose]; + time=AbsoluteTime[]; {eqSys,vars,preSol} = Most[FixedPoint[preSolve@@#&,{eqSys,vars,{},notvars}, OptionValue[MaxIterations]]]; If[ !FreeQ[eqSys,False], @@ -118,6 +119,7 @@ The input (say a sum or a difference of amplitudes) should be prepared using {Darker[Red,0.55], Bold}], FCDoControl->fcmsVerbose]; Return[{}] ]; + FCPrint[1, "FCMatchSolve: Done removing trivial equations, timing:", N[AbsoluteTime[] - time, 4] , FCDoControl->fcmsVerbose]; If[ preSol=!={}, FCPrint[0, "FCMatchSolve: Following coefficients trivially vanish: ", preSol, FCDoControl->fcmsVerbose]; From 48906b2accb75ea4bb76b566e015bd329b90be45 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Feb 2024 22:09:59 +0100 Subject: [PATCH 12/67] Updated meta informations. --- FeynCalc/FCMain.m | 3 ++- FeynCalc/PacletInfo.m | 17 +++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/FeynCalc/FCMain.m b/FeynCalc/FCMain.m index 8837766f..7304651a 100644 --- a/FeynCalc/FCMain.m +++ b/FeynCalc/FCMain.m @@ -367,7 +367,7 @@ before FeynCalc is loaded (monkey patching). The value of - \"None\" - This is the default value. The anticommutator relation is not applied to $D-1$ dimensional Pauli matrices. -- \"Naive\" - Naively apply the commutator relation in $D-1$-dimensions, i.e. +- \"Naive\" - Naively apply the commutator relation in $D-1$-dimensions, i.e. $\{\\sigma^i, \\sigma^j \} = 2 i \\varepsilon^{ijk} \\sigma^k$. The Levi-Civita tensor lives in $D-1$-dimensions, so that a contraction of two such tensors which have all indices in common yields $(D-3) (D-2) (D-1)$."; @@ -467,6 +467,7 @@ set to something else (Dot), this works only if DOT is in FeynCalcHowToCite[]:= ( + Print [Style[" \[Bullet] V. Shtabovenko, R. Mertig and F. Orellana, arXiv:2312.14089.","Text"]]; Print [Style[" \[Bullet] V. Shtabovenko, R. Mertig and F. Orellana, Comput.Phys.Commun. 256 (2020) 107478, arXiv:2001.04407.","Text"]]; Print [Style[" \[Bullet] V. Shtabovenko, R. Mertig and F. Orellana, Comput.Phys.Commun. 207 (2016) 432-444, arXiv:1601.01167.","Text"]]; Print [Style[" \[Bullet] R. Mertig, M. B\[ODoubleDot]hm, and A. Denner, Comput. Phys. Commun. 64 (1991) 345-359.","Text"]]; diff --git a/FeynCalc/PacletInfo.m b/FeynCalc/PacletInfo.m index 39ced38f..23c9d518 100644 --- a/FeynCalc/PacletInfo.m +++ b/FeynCalc/PacletInfo.m @@ -1,17 +1,14 @@ (* Paclet Info File *) -(* created 2016/08/21*) +(* created 2024/01/19*) Paclet[ - Name -> "FeynCalc", - Version -> "9.3.1", - MathematicaVersion -> "8+", - Description -> "FeynCalc is a Mathematica package for symbolic evaluation of Feynman diagrams and algebraic calculations in quantum field theory and elementary particle physics.", - Creator -> "Rolf Mertig, Frederik Orellana, Vladyslav Shtabovenko", - Extensions -> - { - {"Documentation", Language -> "English", MainPage -> "Guides/FeynCalc"} - } + Name -> "FeynCalc", + Version -> "10.0.0", + MathematicaVersion -> "10+", + Description -> "FeynCalc is a Mathematica package for symbolic evaluation of Feynman diagrams and algebraic calculations in quantum field theory and elementary particle physics.", + Creator -> "Rolf Mertig, Frederik Orellana, Vladyslav Shtabovenko", + Extensions -> {} ] From 1ce359d1047505ee782953b53e311de3fc400afb Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 8 Feb 2024 17:42:41 +0100 Subject: [PATCH 13/67] Fixed a bug in D-dim LC Dirac algebra (issue #245, thanks to maxferre). --- FeynCalc/Dirac/DiracTrick.m | 17 ++- Tests/Dirac/DiracSimplify.test | 24 ++-- Tests/Dirac/DiracTrick.test | 243 ++++++++++++--------------------- 3 files changed, 111 insertions(+), 173 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrick.m b/FeynCalc/Dirac/DiracTrick.m index 48258f67..9c882887 100755 --- a/FeynCalc/Dirac/DiracTrick.m +++ b/FeynCalc/Dirac/DiracTrick.m @@ -958,6 +958,12 @@ create replacement rules (standard) and substitute the results back. diracology4DimFinalOrdering[ b___,DiracGamma[Momentum[nb_]], DiracGamma[Momentum[n_]], f___ ] := (- diracology4DimFinalOrdering[ b,DiracGamma[Momentum[n]],DiracGamma[Momentum[nb]], f] + 4 diracology4DimFinalOrdering[ b, f])/; nb=!=n && {n,nb}==={$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB}; +(* +(* g.nb g.nb = g.n g.n = 0*) +diracology4DimFinalOrdering[___,DiracGamma[Momentum[c_]], DiracGamma[Momentum[c_]], ___ ] := + 0/; MemberQ[{$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB},c]; +*) + (* ------------------------------------------------------------------------ *) diracologyDDim[___, 0, ___]:= @@ -1100,11 +1106,11 @@ create replacement rules (standard) and substitute the results back. ch:DiracGamma[LightConePerpendicularComponent[(LorentzIndex | ExplicitLorentzIndex | Momentum)[_, _], n_Momentum, nb_Momentum], dim_].., DiracGamma[LightConePerpendicularComponent[c_Momentum, n_Momentum, nb_Momentum], dim_],f___] := Block[ {iVar, len = Length[{ch}]}, - (-1)^len FCUseCache[ExpandScalarProduct,{Pair[c,c]},{}] diracologyDDim[b,ch,f] - + 2 Sum[(-1)^(iVar+1) FCUseCache[FCFastContract,{Pair[c,{ch}[[iVar,1]]] diracologyDDim@@Join[{b},Drop[{ch},{iVar, iVar}],{DiracGamma[LightConePerpendicularComponent[c,n,nb],dim],f}]},{}], + (-1)^len FCUseCache[ExpandScalarProduct,{Pair[LightConePerpendicularComponent[c,n,nb],LightConePerpendicularComponent[c,n,nb]]},{}] diracologyDDim[b,ch,f] + + 2 Sum[(-1)^(iVar+1) FCUseCache[FCFastContract,{Pair[LightConePerpendicularComponent[c,n,nb],{ch}[[iVar,1]]] diracologyDDim@@Join[{b},Drop[{ch},{iVar, iVar}], + {DiracGamma[LightConePerpendicularComponent[c,n,nb],dim],f}]},{}], {iVar, 1,len}]]/; (Length[{ch}]>0); - (* Slash(p)_perp g^mu ... Slash(p)_perp *) diracologyDDim[ b___,DiracGamma[LightConePerpendicularComponent[c_, n_Momentum, nb_Momentum], dim_], DiracGamma[ch:((LorentzIndex | ExplicitLorentzIndex | Momentum)[_, _]), dim_], f1___, DiracGamma[LightConePerpendicularComponent[c_, n_Momentum, nb_Momentum], dim_], f2___ ] := @@ -1133,6 +1139,11 @@ create replacement rules (standard) and substitute the results back. diracologyDDimFinalOrdering[ b___,DiracGamma[Momentum[nb_,dim_],dim_], DiracGamma[Momentum[n_,dim_],dim_], f___ ] := (- diracologyDDimFinalOrdering[ b,DiracGamma[Momentum[n,dim],dim],DiracGamma[Momentum[nb,dim],dim], f] + 4 diracologyDDimFinalOrdering[ b, f])/; nb=!=n && {n,nb}==={$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB}; +(* +(* g.nb g.nb = g.n g.n = 0*) +diracologyDDimFinalOrdering[___,DiracGamma[Momentum[c_,dim_],dim_], DiracGamma[Momentum[c_,dim_],dim_], ___ ] := + 0/; MemberQ[{$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB},c]; +*) (* ------------------------------------------------------------------------ *) diff --git a/Tests/Dirac/DiracSimplify.test b/Tests/Dirac/DiracSimplify.test index 35aad3f4..2a5a3576 100644 --- a/Tests/Dirac/DiracSimplify.test +++ b/Tests/Dirac/DiracSimplify.test @@ -290,19 +290,17 @@ res=DiracSimplify[GSD[nb].GSD[n].GSLRD[\ Polarization[p,\[ImaginaryI]],n,nb].GSLRD[k2,n,nb].GALRD[Lor4,n,nb].\ GSLRD[l1,n,nb].GSLRD[Polarization[kg1,-\[ImaginaryI]],n,nb].GSLRD[l1,\ n,nb].GALRD[Lor4,n,nb].GSD[nb].GSD[n],FCE->True]; \n res", -"-128*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], n, -nb]*SPD[l1, l1] + 16*D*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, --I], n, nb]*SPD[l1, l1] + 32*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, -nb] . GSLRD[Polarization[kg1, -I], n, nb]*SPD[l1, l1] - 4*D*GSD[n] . GSD[nb] . GSLRD[Polarization[p, -I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], n, nb]*SPD[l1, l1] + -64*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], -n, nb]*SPLRD[l1, l1, n, nb] - 16*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, -nb] . GSLRD[Polarization[kg1, -I], n, nb]*SPLRD[l1, l1, n, nb] + 128*GSLRD[Polarization[p, -I], n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]*SPLRD[l1, Polarization[kg1, -I], n, nb] - 32*D*GSLRD[Polarization[p, I], -n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]*SPLRD[l1, Polarization[kg1, -I], n, nb] - 32*GSD[n] . GSD[nb] . GSLRD[Polarization[p, -I], n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]*SPLRD[l1, Polarization[kg1, -I], n, -nb] + 8*D*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]*SPLRD[l1, -Polarization[kg1, -I], n, nb]"}, +"-64*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], n, nb]*SPLRD[l1, l1, n, nb] + +16*D*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], n, nb]* +SPLRD[l1, l1, n, nb] + 16*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . +GSLRD[Polarization[kg1, -I], n, nb]*SPLRD[l1, l1, n, nb] - +4*D*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[Polarization[kg1, -I], n, nb]* +SPLRD[l1, l1, n, nb] + 128*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]* +SPLRD[l1, Polarization[kg1, -I], n, nb] - 32*D*GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . +GSLRD[l1, n, nb]*SPLRD[l1, Polarization[kg1, -I], n, nb] - +32*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . GSLRD[k2, n, nb] . GSLRD[l1, n, nb]* +SPLRD[l1, Polarization[kg1, -I], n, nb] + 8*D*GSD[n] . GSD[nb] . GSLRD[Polarization[p, I], n, nb] . +GSLRD[k2, n, nb] . GSLRD[l1, n, nb]*SPLRD[l1, Polarization[kg1, -I], n, nb]"}, {"fcstDiracSimplify-ID52", "$FCDefaultLightconeVectorN=n; \n $FCDefaultLightconeVectorNB=nb; \n FCClearScalarProducts[]; \n diff --git a/Tests/Dirac/DiracTrick.test b/Tests/Dirac/DiracTrick.test index 78cc7775..49f75501 100644 --- a/Tests/Dirac/DiracTrick.test +++ b/Tests/Dirac/DiracTrick.test @@ -3683,20 +3683,20 @@ v, n, nb])/2)))/2))/2"}, "DiracTrick[GSLRD[v].GSLRD[v],FCE->True]", "SPLRD[v, v, n, nb]"}, {"fcstDiracTrickLightCone-ID94", "DiracTrick[GSLRD[v].GALRD[{mu1}].GSLRD[v],FCE->True]", -"2*FVLRD[v, mu1, n, nb]*GSLRD[v, n, nb] - GALRD[mu1, n, nb]*SPD[v, \ +"2*FVLRD[v, mu1, n, nb]*GSLRD[v, n, nb] - GALRD[mu1, n, nb]*SPLRD[v, \ v]"}, {"fcstDiracTrickLightCone-ID95", "DiracTrick[GSLRD[v].GALRD[{mu1,mu2}].GSLRD[v],FCE->True]", "2*(GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu1, n, nb] - \ GALRD[mu1, n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu2, n, nb]) + \ -GALRD[mu1, n, nb] . GALRD[mu2, n, nb]*SPD[v, v]"}, +GALRD[mu1, n, nb] . GALRD[mu2, n, nb]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID96", "DiracTrick[GSLRD[v].GALRD[{mu1,mu2,mu3}].GSLRD[v],FCE->True]", "2*(GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, \ nb]*FVLRD[v, mu1, n, nb] - GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . \ GSLRD[v, n, nb]*FVLRD[v, mu2, n, nb] + GALRD[mu1, n, nb] . GALRD[mu2, \ n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu3, n, nb]) - GALRD[mu1, n, nb] . \ -GALRD[mu2, n, nb] . GALRD[mu3, n, nb]*SPD[v, v]"}, +GALRD[mu2, n, nb] . GALRD[mu3, n, nb]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID97", "DiracTrick[GSLRD[v].GALRD[{mu1,mu2,mu3,mu4}].GSLRD[v],FCE->True]", "2*(GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GALRD[mu4, n, nb] . \ @@ -3706,7 +3706,7 @@ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu4, n, nb] . GSLRD[v, \ n, nb]*FVLRD[v, mu3, n, nb] - GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ GALRD[mu3, n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu4, n, nb]) + \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ -GALRD[mu4, n, nb]*SPD[v, v]"}, +GALRD[mu4, n, nb]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID98", "DiracTrick[GSLRD[v].GALRD[{mu1,mu2,mu3,mu4,mu5}].GSLRD[v],\ FCE->True]", @@ -3720,10 +3720,10 @@ GALRD[mu3, n, nb] . GALRD[mu5, n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu4, \ n, nb] + GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ GALRD[mu4, n, nb] . GSLRD[v, n, nb]*FVLRD[v, mu5, n, nb]) - \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ -GALRD[mu4, n, nb] . GALRD[mu5, n, nb]*SPD[v, v]"}, +GALRD[mu4, n, nb] . GALRD[mu5, n, nb]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID99", "DiracTrick[GSLRD[v].GAD[mu1].GSLRD[v],FCE->True]", -"2*FVLRD[v, mu1, n, nb]*GSLRD[v, n, nb] - GALRD[mu1, n, nb]*SPD[v, \ +"2*FVLRD[v, mu1, n, nb]*GSLRD[v, n, nb] - GALRD[mu1, n, nb]*SPLRD[v, \ v] - (FVD[nb, mu1]*GSD[n]*SPLRD[v, v, n, nb])/2 - (FVD[n, \ mu1]*GSD[nb]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID100", @@ -3748,7 +3748,7 @@ GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 \ + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, \ n, nb]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, \ n, nb]*FVLRD[v, mu3, n, nb] - GSD[n] . GSD[nb] . GALRD[mu3, n, \ -nb]*SPD[v, v] - 2*FVD[nb, mu3]*GSD[n]*SPLRD[v, v, n, nb]))/2))/2 - \ +nb]*SPLRD[v, v] - 2*FVD[nb, mu3]*GSD[n]*SPLRD[v, v, n, nb]))/2))/2 - \ (FVD[n, mu1]*(GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . \ GALRD[mu3, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSD[nb] . GSLRD[v, \ n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 - \ @@ -3756,157 +3756,86 @@ n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 - \ GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, \ nb])*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(2*FVLRD[v, mu3, n, nb]*(-GSD[n] \ . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb]) - (-GSD[n] . GSD[nb] \ -. GALRD[mu3, n, nb] + 4*GALRD[mu3, n, nb])*SPD[v, v] - 2*FVD[n, \ +. GALRD[mu3, n, nb] + 4*GALRD[mu3, n, nb])*SPLRD[v, v] - 2*FVD[n, \ mu3]*GSD[nb]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID101", "DiracTrick[GSLRD[v].GSD[p1].GSLRD[v],FCE->True]", -"-(GSLRD[p1, n, nb]*SPD[v, v]) + 2*GSLRD[v, n, nb]*SPLRD[p1, v, n, \ -nb] - (GSD[nb]*SPD[n, p1]*SPLRD[v, v, n, nb])/2 - (GSD[n]*SPD[nb, \ -p1]*SPLRD[v, v, n, nb])/2"}, +"2*GSLRD[v, n, nb]*SPLRD[p1, v, n, nb] - GSLRD[p1, n, nb]*SPLRD[v, v, n, nb] - +(GSD[nb]*SPD[n, p1]*SPLRD[v, v, n, nb])/2 - (GSD[n]*SPD[nb, p1]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID102", "DiracTrick[GSLRD[v].GSD[p1,p2].GSLRD[v],FCE->True]", "GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, \ n, nb] + (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, \ nb]*SPD[n, p2])/2 + (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ GSLRD[v, n, nb]*SPD[nb, p2])/2 - (SPD[nb, p1]*(-(GSD[n] . GSLRD[p2, \ -n, nb]*SPD[v, v]) + 2*GSD[n] . GSLRD[v, n, nb]*SPLRD[p2, v, n, nb] - \ +n, nb]*SPLRD[v, v]) + 2*GSD[n] . GSLRD[v, n, nb]*SPLRD[p2, v, n, nb] - \ (GSD[n] . GSD[nb]*SPD[n, p2]*SPLRD[v, v, n, nb])/2))/2 - (SPD[n, \ -p1]*(-(GSD[nb] . GSLRD[p2, n, nb]*SPD[v, v]) + 2*GSD[nb] . GSLRD[v, \ +p1]*(-(GSD[nb] . GSLRD[p2, n, nb]*SPLRD[v, v]) + 2*GSD[nb] . GSLRD[v, \ n, nb]*SPLRD[p2, v, n, nb] - ((4 - GSD[n] . GSD[nb])*SPD[nb, \ p2]*SPLRD[v, v, n, nb])/2))/2"}, {"fcstDiracTrickLightCone-ID103", "DiracTrick[GSLRD[v].GSD[p1,p2,p3].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - (GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb]*SPD[nb, p3])/2 - (SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - (GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, \ -p3])/2 - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[v, n, nb]*SPD[nb, p3])/2))/2 - (SPD[n, p2]*(-GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - \ -(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, \ -nb]*SPD[n, p3])/2 + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb]*SPD[n, p3])/2 - ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2 - (SPD[nb, \ -p2]*(-((-GSD[n] . GSD[nb] . GSLRD[p3, n, nb] + 4*GSLRD[p3, n, \ -nb])*SPD[v, v]) + 2*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, \ -n, nb])*SPLRD[p3, v, n, nb] - 2*GSD[nb]*SPD[n, p3]*SPLRD[v, v, n, \ -nb]))/2))/2 - (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 + \ -(GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb]*SPD[nb, p3])/2 - (SPD[n, p2]*(-(GSD[n] . GSD[nb] . GSLRD[p3, n, \ -nb]*SPD[v, v]) + 2*GSD[n] . GSD[nb] . GSLRD[v, n, nb]*SPLRD[p3, v, n, \ -nb] - 2*GSD[n]*SPD[nb, p3]*SPLRD[v, v, n, nb]))/2))/2"}, +"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - +(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - +(GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2 - +(SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - +(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2))/2 - +(SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - +(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 + + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2))/2 - +(SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + +(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - + ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, + n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2 - + (SPD[nb, p2]*(2*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb])*SPLRD[p3, v, + n, nb] - (-GSD[n] . GSD[nb] . GSLRD[p3, n, nb] + 4*GSLRD[p3, n, nb])*SPLRD[v, v, n, nb] - 2*GSD[nb]*SPD[n, p3]*SPLRD[v, v, n, nb]))/2))/2 - +(SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, +nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 + + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2 - + (SPD[n, p2]*(2*GSD[n] . GSD[nb] . GSLRD[v, n, nb]*SPLRD[p3, v, n, nb] - GSD[n] . GSD[nb] . GSLRD[p3, n, + nb]*SPLRD[v, v, n, nb] - 2*GSD[n]*SPD[nb, p3]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID104", "DiracTrick[GSLRD[v].GSD[p1,p2,p3,p4].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[v, n, nb]*SPD[n, p4])/2 + (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, \ -n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb]*SPD[nb, p4])/2 - (SPD[nb, p3]*(GSD[n] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, \ -nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, \ -nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - ((4*GSLRD[v, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] - GSD[n] \ -. GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - (SPD[nb, p2]*(-GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, \ -nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + \ -(GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 + (SPD[nb, p3]*(-GSD[n] . GSD[n] \ -. GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, \ -nb] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] \ -. GSLRD[v, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, \ -p4])/2))/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . \ -GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, \ -nb]*SPD[n, p4])/2 + ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] \ -. GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2))/2 - (SPD[n, \ -p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] \ -. GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, \ -p4])/2 + ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 + (SPD[nb, \ -p3]*(-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . \ -GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + ((-4*GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] \ -. GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 \ -- (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 + (SPD[n, p3]*(-GSD[nb] . GSD[nb] \ -. GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, \ -nb] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, \ -p4])/2))/2))/2 - (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - \ -(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSLRD[v, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, \ -p4])/2 - (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, \ -p4])/2 - (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + ((-4*GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . \ -GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb])*SPD[nb, p4])/2))/2 - (SPD[n, p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] \ -. GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, \ -n, nb]*SPD[n, p4])/2 - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 - 2*SPD[nb, \ -p3]*(-(GSD[n] . GSLRD[p4, n, nb]*SPD[v, v]) + 2*GSD[n] . GSLRD[v, n, \ -nb]*SPLRD[p4, v, n, nb] - (GSD[n] . GSD[nb]*SPD[n, p4]*SPLRD[v, v, n, \ -nb])/2)))/2))/2 - (SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - \ -(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - ((4*GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[v, n, nb])*SPD[nb, p4])/2 - (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GSLRD[v, n, nb] + ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 - (GSD[n] . GSD[n] \ -. GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - \ -(GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, \ -p4])/2))/2 - (SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[p4, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - \ -((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + \ -GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[v, n, nb])*SPD[n, p4])/2 + (GSD[n] . GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - \ -2*SPD[n, p3]*(-(GSD[nb] . GSLRD[p4, n, nb]*SPD[v, v]) + 2*GSD[nb] . \ -GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - ((4 - GSD[n] . GSD[nb])*SPD[nb, \ -p4]*SPLRD[v, v, n, nb])/2)))/2))/2"}, +"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + +(GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - +(SPD[nb, p3]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - +(SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - +(SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 + + (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 + + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + + ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2))/2 - +(SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + + ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 + + (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + + ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 + + (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2))/2 - +(SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - + (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + + ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - + (SPD[n, p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 - + 2*SPD[nb, p3]*(2*GSD[n] . GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - GSD[n] . GSLRD[p4, n, nb]*SPLRD[v, v, n, nb] - (GSD[n] . GSD[nb]*SPD[n, p4]*SPLRD[v, v, n, nb])/2)))/2))/2 - +(SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + ((4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 - + (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + + ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 - + (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - + (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - + (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - + (SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - + ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 + + (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - 2*SPD[n, p3]*(2*GSD[nb] . GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - GSD[nb] . GSLRD[p4, n, nb]*SPLRD[v, v, n, nb] - + ((4 - GSD[n] . GSD[nb])*SPD[nb, p4]*SPLRD[v, v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID105", "DiracTrick[GSLR[v].GA[5].GSLR[v],FCE->True]", "-(GA[5]*SPLR[v, v, n, nb])"}, @@ -4150,12 +4079,12 @@ v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID118", "DiracTrick[GSLRD[v].GA[5].GALRD[{mu1}].GSLRD[v],FCE->True]", "2*GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu1, n, nb] - GALRD[mu1, n, \ -nb] . GA[5]*SPD[v, v]"}, +nb] . GA[5]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID119", "DiracTrick[GSLRD[v].GA[5].GALRD[{mu1,mu2}].GSLRD[v],FCE->True]", "-2*(GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu1, n, \ nb] - GALRD[mu1, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu2, n, \ -nb]) - GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GA[5]*SPD[v, v]"}, +nb]) - GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GA[5]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID120", "DiracTrick[GSLRD[v].GA[5].GALRD[{mu1,mu2,mu3}].GSLRD[v],FCE->True]\ ", "2*(GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] . \ @@ -4163,7 +4092,7 @@ GA[5]*FVLRD[v, mu1, n, nb] - GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . \ GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu2, n, nb] + GALRD[mu1, n, nb] . \ GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu3, n, nb]) - \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ -GA[5]*SPD[v, v]"}, +GA[5]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID121", "DiracTrick[GSLRD[v].GA[5].GALRD[{mu1,mu2,mu3,mu4}].GSLRD[v],\ FCE->True]", @@ -4174,7 +4103,7 @@ GA[5]*FVLRD[v, mu2, n, nb] + GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ GALRD[mu4, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu3, n, nb] - \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, \ n, nb] . GA[5]*FVLRD[v, mu4, n, nb]) - GALRD[mu1, n, nb] . GALRD[mu2, \ -n, nb] . GALRD[mu3, n, nb] . GALRD[mu4, n, nb] . GA[5]*SPD[v, v]"}, +n, nb] . GALRD[mu3, n, nb] . GALRD[mu4, n, nb] . GA[5]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID122", "DiracTrick[GSLRD[v].GA[5].GALRD[{mu1,mu2,mu3,mu4,mu5}].GSLRD[v],\ FCE->True]", @@ -4189,11 +4118,11 @@ GALRD[mu5, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu4, n, nb] + \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ GALRD[mu4, n, nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu5, n, nb]) - \ GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . \ -GALRD[mu4, n, nb] . GALRD[mu5, n, nb] . GA[5]*SPD[v, v]"}, +GALRD[mu4, n, nb] . GALRD[mu5, n, nb] . GA[5]*SPLRD[v, v]"}, {"fcstDiracTrickLightCone-ID123", "DiracTrick[GSLRD[v].GA[5].GAD[mu1].GSLRD[v],FCE->True]", "2*GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu1, n, nb] - GALRD[mu1, n, \ -nb] . GA[5]*SPD[v, v] - (GSD[nb] . GA[5]*FVD[n, mu1]*SPLRD[v, v, n, \ +nb] . GA[5]*SPLRD[v, v] - (GSD[nb] . GA[5]*FVD[n, mu1]*SPLRD[v, v, n, \ nb])/2 - (GSD[n] . GA[5]*FVD[nb, mu1]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID124", "DiracTrick[GSLRD[v].GA[5].GAD[mu1,mu2,mu3].GSLRD[v],FCE->True]", @@ -4220,7 +4149,7 @@ nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5])*FVD[nb, mu3])/2 - \ (FVD[nb, mu2]*(2*(4*GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . \ GSLRD[v, n, nb] . GA[5])*FVLRD[v, mu3, n, nb] - (4*GALRD[mu3, n, nb] \ -. GA[5] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])*SPD[v, v] - \ +. GA[5] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])*SPLRD[v, v] - \ 2*GSD[nb] . GA[5]*FVD[n, mu3]*SPLRD[v, v, n, nb]))/2))/2 - (FVD[nb, \ mu1]*(GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, \ nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ @@ -4228,11 +4157,11 @@ GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2 + (GSD[n] \ . GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] . \ GA[5]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, \ n, nb] . GA[5]*FVLRD[v, mu3, n, nb] - GSD[n] . GSD[nb] . GALRD[mu3, \ -n, nb] . GA[5]*SPD[v, v] - 2*GSD[n] . GA[5]*FVD[nb, mu3]*SPLRD[v, v, \ +n, nb] . GA[5]*SPLRD[v, v] - 2*GSD[n] . GA[5]*FVD[nb, mu3]*SPLRD[v, v, \ n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID125", "DiracTrick[GSLRD[v].GA[5].GSD[p1].GSLRD[v],FCE->True]", -"-(GSLRD[p1, n, nb] . GA[5]*SPD[v, v]) + 2*GSLRD[v, n, nb] . \ +"-(GSLRD[p1, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSLRD[v, n, nb] . \ GA[5]*SPLRD[p1, v, n, nb] - (GSD[nb] . GA[5]*SPD[n, p1]*SPLRD[v, v, \ n, nb])/2 - (GSD[n] . GA[5]*SPD[nb, p1]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID126", @@ -4241,10 +4170,10 @@ n, nb])/2 - (GSD[n] . GA[5]*SPD[nb, p1]*SPLRD[v, v, n, nb])/2"}, n, nb] . GA[5] - (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ GSLRD[v, n, nb] . GA[5]*SPD[n, p2])/2 - (GSD[n] . GSLRD[v, n, nb] . \ GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p2])/2 + (SPD[nb, \ -p1]*(-(GSD[n] . GSLRD[p2, n, nb] . GA[5]*SPD[v, v]) + 2*GSD[n] . \ +p1]*(-(GSD[n] . GSLRD[p2, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSD[n] . \ GSLRD[v, n, nb] . GA[5]*SPLRD[p2, v, n, nb] - (GSD[n] . GSD[nb] . \ GA[5]*SPD[n, p2]*SPLRD[v, v, n, nb])/2))/2 + (SPD[n, p1]*(-(GSD[nb] . \ -GSLRD[p2, n, nb] . GA[5]*SPD[v, v]) + 2*GSD[nb] . GSLRD[v, n, nb] . \ +GSLRD[p2, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSD[nb] . GSLRD[v, n, nb] . \ GA[5]*SPLRD[p2, v, n, nb] - ((-GSD[n] . GSD[nb] . GA[5] + \ 4*GA[5])*SPD[nb, p2]*SPLRD[v, v, n, nb])/2))/2"}, {"fcstDiracTrickLightCone-ID127", @@ -4270,7 +4199,7 @@ nb] . GA[5] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] \ GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, \ p3])/2 - (SPD[nb, p2]*(-((4*GSLRD[p3, n, nb] . GA[5] - GSD[n] . \ -GSD[nb] . GSLRD[p3, n, nb] . GA[5])*SPD[v, v]) + 2*(4*GSLRD[v, n, nb] \ +GSD[nb] . GSLRD[p3, n, nb] . GA[5])*SPLRD[v, v]) + 2*(4*GSLRD[v, n, nb] \ . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GA[5])*SPLRD[p3, v, n, \ nb] - 2*GSD[nb] . GA[5]*SPD[n, p3]*SPLRD[v, v, n, nb]))/2))/2 - \ (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ @@ -4278,7 +4207,7 @@ n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, \ nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 + \ (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ nb] . GA[5]*SPD[nb, p3])/2 - (SPD[n, p2]*(-(GSD[n] . GSD[nb] . \ -GSLRD[p3, n, nb] . GA[5]*SPD[v, v]) + 2*GSD[n] . GSD[nb] . GSLRD[v, \ +GSLRD[p3, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSD[n] . GSD[nb] . GSLRD[v, \ n, nb] . GA[5]*SPLRD[p3, v, n, nb] - 2*GSD[n] . GA[5]*SPD[nb, \ p3]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID128", @@ -4359,7 +4288,7 @@ GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . \ GA[5]*SPD[n, p4])/2 - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, \ nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, \ n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2 - \ -2*SPD[nb, p3]*(-(GSD[n] . GSLRD[p4, n, nb] . GA[5]*SPD[v, v]) + \ +2*SPD[nb, p3]*(-(GSD[n] . GSLRD[p4, n, nb] . GA[5]*SPLRD[v, v]) + \ 2*GSD[n] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, n, nb] - (GSD[n] . \ GSD[nb] . GA[5]*SPD[n, p4]*SPLRD[v, v, n, nb])/2)))/2))/2 + (SPD[n, \ p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] \ @@ -4389,7 +4318,7 @@ GA[5] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, \ nb] . GSLRD[v, n, nb] . GA[5])*SPD[n, p4])/2 + (GSD[n] . GSD[n] . \ GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . \ GA[5]*SPD[nb, p4])/2 - 2*SPD[n, p3]*(-(GSD[nb] . GSLRD[p4, n, nb] . \ -GA[5]*SPD[v, v]) + 2*GSD[nb] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, \ +GA[5]*SPLRD[v, v]) + 2*GSD[nb] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, \ n, nb] - ((-GSD[n] . GSD[nb] . GA[5] + 4*GA[5])*SPD[nb, p4]*SPLRD[v, \ v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID129", "DiracTrick[GSD[nb,n],FCE->True]", From a8ef6bfcab4d14ae980936313c5deeb910ee84b8 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 8 Feb 2024 23:08:16 +0100 Subject: [PATCH 14/67] Fixed an omission in LC Dirac algebra where n.n and nb.nb terms wouldn't be simplified upon reordering the chain. --- FeynCalc/Dirac/DiracTrick.m | 8 +- Tests/Dirac/DiracTrick.test | 1965 +++++++++++------------------------ 2 files changed, 629 insertions(+), 1344 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrick.m b/FeynCalc/Dirac/DiracTrick.m index 9c882887..6d462ec6 100755 --- a/FeynCalc/Dirac/DiracTrick.m +++ b/FeynCalc/Dirac/DiracTrick.m @@ -958,11 +958,11 @@ create replacement rules (standard) and substitute the results back. diracology4DimFinalOrdering[ b___,DiracGamma[Momentum[nb_]], DiracGamma[Momentum[n_]], f___ ] := (- diracology4DimFinalOrdering[ b,DiracGamma[Momentum[n]],DiracGamma[Momentum[nb]], f] + 4 diracology4DimFinalOrdering[ b, f])/; nb=!=n && {n,nb}==={$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB}; -(* + (* g.nb g.nb = g.n g.n = 0*) diracology4DimFinalOrdering[___,DiracGamma[Momentum[c_]], DiracGamma[Momentum[c_]], ___ ] := 0/; MemberQ[{$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB},c]; -*) + (* ------------------------------------------------------------------------ *) @@ -1139,11 +1139,11 @@ create replacement rules (standard) and substitute the results back. diracologyDDimFinalOrdering[ b___,DiracGamma[Momentum[nb_,dim_],dim_], DiracGamma[Momentum[n_,dim_],dim_], f___ ] := (- diracologyDDimFinalOrdering[ b,DiracGamma[Momentum[n,dim],dim],DiracGamma[Momentum[nb,dim],dim], f] + 4 diracologyDDimFinalOrdering[ b, f])/; nb=!=n && {n,nb}==={$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB}; -(* + (* g.nb g.nb = g.n g.n = 0*) diracologyDDimFinalOrdering[___,DiracGamma[Momentum[c_,dim_],dim_], DiracGamma[Momentum[c_,dim_],dim_], ___ ] := 0/; MemberQ[{$FCDefaultLightconeVectorN,$FCDefaultLightconeVectorNB},c]; -*) + (* ------------------------------------------------------------------------ *) diff --git a/Tests/Dirac/DiracTrick.test b/Tests/Dirac/DiracTrick.test index 49f75501..a33791da 100644 --- a/Tests/Dirac/DiracTrick.test +++ b/Tests/Dirac/DiracTrick.test @@ -2342,55 +2342,38 @@ DiracTrick[GALR[mu].GA[nu1],FCE->True]", nb]*FV[n, nu1])/2 - (GS[n] . GALR[mu, n, nb]*FV[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID2", "DiracTrick[GALR[mu].GA[nu1,mu2],FCE->True]", -"GALR[mu, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] + (GS[nb] . \ -GALR[mu, n, nb] . GALR[nu1, n, nb]*FV[n, mu2])/2 + (GS[n] . GALR[mu, \ -n, nb] . GALR[nu1, n, nb]*FV[nb, mu2])/2 - ((GS[n] . GALR[mu, n, nb] \ -. GALR[mu2, n, nb] - (GS[n] . GS[nb] . GALR[mu, n, nb]*FV[n, mu2])/2 \ -- (GS[n] . GS[n] . GALR[mu, n, nb]*FV[nb, mu2])/2)*FV[nb, nu1])/2 - \ -(FV[n, nu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] - (GS[nb] . \ -GS[nb] . GALR[mu, n, nb]*FV[n, mu2])/2 - (FV[nb, mu2]*(-GS[n] . \ -GS[nb] . GALR[mu, n, nb] + 4*GALR[mu, n, nb]))/2))/2"}, +"GALR[mu, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] + (GS[nb] . GALR[mu, n, nb] . GALR[nu1, n, nb]*FV[n, mu2])/2 + +(GS[n] . GALR[mu, n, nb] . GALR[nu1, n, nb]*FV[nb, mu2])/2 - ((GS[n] . GALR[mu, n, nb] . GALR[mu2, n, nb] - +(GS[n] . GS[nb] . GALR[mu, n, nb]*FV[n, mu2])/2)*FV[nb, nu1])/2 - (FV[n, nu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] - +(FV[nb, mu2]*(-GS[n] . GS[nb] . GALR[mu, n, nb] + 4*GALR[mu, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID3", "DiracTrick[GSLR[p].GA[nu1],FCE->True]", "GSLR[p, n, nb] . GALR[nu1, n, nb] - (GS[nb] . GSLR[p, n, \ nb]*FV[n, nu1])/2 - (GS[n] . GSLR[p, n, nb]*FV[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID4", "DiracTrick[GSLR[p].GA[nu1,mu2],FCE->True]", -"GSLR[p, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] + (GS[nb] . \ -GSLR[p, n, nb] . GALR[nu1, n, nb]*FV[n, mu2])/2 + (GS[n] . GSLR[p, n, \ -nb] . GALR[nu1, n, nb]*FV[nb, mu2])/2 - ((GS[n] . GSLR[p, n, nb] . \ -GALR[mu2, n, nb] - (GS[n] . GS[nb] . GSLR[p, n, nb]*FV[n, mu2])/2 - \ -(GS[n] . GS[n] . GSLR[p, n, nb]*FV[nb, mu2])/2)*FV[nb, nu1])/2 - \ -(FV[n, nu1]*(GS[nb] . GSLR[p, n, nb] . GALR[mu2, n, nb] - (GS[nb] . \ -GS[nb] . GSLR[p, n, nb]*FV[n, mu2])/2 - (FV[nb, mu2]*(-GS[n] . GS[nb] \ -. GSLR[p, n, nb] + 4*GSLR[p, n, nb]))/2))/2"}, +"GSLR[p, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] + (GS[nb] . GSLR[p, n, nb] . GALR[nu1, n, nb]*FV[n, mu2])/2 + +(GS[n] . GSLR[p, n, nb] . GALR[nu1, n, nb]*FV[nb, mu2])/2 - ((GS[n] . GSLR[p, n, nb] . GALR[mu2, n, nb] - +(GS[n] . GS[nb] . GSLR[p, +n, nb]*FV[n, mu2])/2)*FV[nb, nu1])/2 - (FV[n, nu1]*(GS[nb] . GSLR[p, n, nb] . GALR[mu2, n, nb] - +(FV[nb, mu2]*(-GS[n] . GS[nb] . GSLR[p, n, nb] + 4*GSLR[p, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID5", "DiracTrick[GALR[mu].GS[q],FCE->True]", "GALR[mu, n, nb] . GSLR[q, n, nb] - (GS[nb] . GALR[mu, n, \ nb]*SP[n, q])/2 - (GS[n] . GALR[mu, n, nb]*SP[nb, q])/2"}, {"fcstDiracTrickLightCone-ID6", "DiracTrick[GALR[mu].GS[q1,q2],FCE->True]", -"GALR[mu, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] + (GS[nb] . \ -GALR[mu, n, nb] . GSLR[q1, n, nb]*SP[n, q2])/2 + (GS[n] . GALR[mu, n, \ -nb] . GSLR[q1, n, nb]*SP[nb, q2])/2 - (SP[nb, q1]*(GS[n] . GALR[mu, \ -n, nb] . GSLR[q2, n, nb] - (GS[n] . GS[nb] . GALR[mu, n, nb]*SP[n, \ -q2])/2 - (GS[n] . GS[n] . GALR[mu, n, nb]*SP[nb, q2])/2))/2 - (SP[n, \ -q1]*(GS[nb] . GALR[mu, n, nb] . GSLR[q2, n, nb] - (GS[nb] . GS[nb] . \ -GALR[mu, n, nb]*SP[n, q2])/2 - ((-GS[n] . GS[nb] . GALR[mu, n, nb] + \ -4*GALR[mu, n, nb])*SP[nb, q2])/2))/2"}, +"GALR[mu, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] + (GS[nb] . GALR[mu, n, nb] . GSLR[q1, n, nb]*SP[n, q2])/2 - ((GS[n] . GALR[mu, n, nb] . GSLR[q2, n, nb] - +(GS[n] . GS[nb] . GALR[mu, n, nb]*SP[n, q2])/2)*SP[nb, q1])/2 + (GS[n] . GALR[mu, n, nb] . GSLR[q1, n, nb]*SP[nb, q2])/2 - +(SP[n, q1]*(GS[nb] . GALR[mu, n, nb] . GSLR[q2, n, nb] - ((-GS[n] . GS[nb] . GALR[mu, n, nb] + 4*GALR[mu, n, nb])*SP[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID7", "DiracTrick[GSLR[p].GS[q],FCE->True]", "GSLR[p, n, nb] . GSLR[q, n, nb] - (GS[nb] . GSLR[p, n, nb]*SP[n, \ q])/2 - (GS[n] . GSLR[p, n, nb]*SP[nb, q])/2"}, {"fcstDiracTrickLightCone-ID8", "DiracTrick[GSLR[p].GS[q1,q2],FCE->True]", -"GSLR[p, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] + (GS[nb] . \ -GSLR[p, n, nb] . GSLR[q1, n, nb]*SP[n, q2])/2 + (GS[n] . GSLR[p, n, \ -nb] . GSLR[q1, n, nb]*SP[nb, q2])/2 - (SP[nb, q1]*(GS[n] . GSLR[p, n, \ -nb] . GSLR[q2, n, nb] - (GS[n] . GS[nb] . GSLR[p, n, nb]*SP[n, q2])/2 \ -- (GS[n] . GS[n] . GSLR[p, n, nb]*SP[nb, q2])/2))/2 - (SP[n, \ -q1]*(GS[nb] . GSLR[p, n, nb] . GSLR[q2, n, nb] - (GS[nb] . GS[nb] . \ -GSLR[p, n, nb]*SP[n, q2])/2 - ((-GS[n] . GS[nb] . GSLR[p, n, nb] + \ +"GSLR[p, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] + (GS[nb] . GSLR[p, n, nb] . GSLR[q1, n, nb]*SP[n, q2])/2 - ((GS[n] . GSLR[p, n, nb] . GSLR[q2, n, nb] - (GS[n] . GS[nb] . GSLR[p, n, nb]*SP[n, q2])/2)*SP[nb, q1])/2 + (GS[n] . GSLR[p, n, nb] . GSLR[q1, n, nb]*SP[nb, q2])/2 - +(SP[n, q1]*(GS[nb] . GSLR[p, n, nb] . GSLR[q2, n, nb] - ((-GS[n] . GS[nb] . GSLR[p, n, nb] + 4*GSLR[p, n, nb])*SP[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID9", "DiracTrick[GALRD[mu].GAD[nu1],FCE->True]", @@ -2398,60 +2381,41 @@ GSLR[p, n, nb]*SP[n, q2])/2 - ((-GS[n] . GS[nb] . GSLR[p, n, nb] + \ nb]*FVD[n, nu1])/2 - (GSD[n] . GALRD[mu, n, nb]*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID10", "DiracTrick[GALRD[mu].GAD[nu1,mu2],FCE->True]", -"GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] + \ -(GSD[nb] . GALRD[mu, n, nb] . GALRD[nu1, n, nb]*FVD[n, mu2])/2 + \ -(GSD[n] . GALRD[mu, n, nb] . GALRD[nu1, n, nb]*FVD[nb, mu2])/2 - \ -((GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] - (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb]*FVD[n, mu2])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, \ -nb]*FVD[nb, mu2])/2)*FVD[nb, nu1])/2 - (FVD[n, nu1]*(GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu2, n, nb] - (GSD[nb] . GSD[nb] . GALRD[mu, \ -n, nb]*FVD[n, mu2])/2 - (FVD[nb, mu2]*(-GSD[n] . GSD[nb] . GALRD[mu, \ -n, nb] + 4*GALRD[mu, n, nb]))/2))/2"}, +"GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] + (GSD[nb] . GALRD[mu, n, nb] . GALRD[nu1, n, nb]*FVD[n, mu2])/2 + (GSD[n] . GALRD[mu, n, nb] . GALRD[nu1, n, nb]*FVD[nb, mu2])/2 - ((GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb]*FVD[n, mu2])/2)*FVD[nb, nu1])/2 - +(FVD[n, nu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] - (FVD[nb, mu2]*(-GSD[n] . GSD[nb] . +GALRD[mu, n, nb] + 4*GALRD[mu, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID11", "DiracTrick[GSLRD[p].GAD[nu1],FCE->True]", "GSLRD[p, n, nb] . GALRD[nu1, n, nb] - (GSD[nb] . GSLRD[p, n, \ nb]*FVD[n, nu1])/2 - (GSD[n] . GSLRD[p, n, nb]*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID12", "DiracTrick[GSLRD[p].GAD[nu1,mu2],FCE->True]", -"GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] + \ -(GSD[nb] . GSLRD[p, n, nb] . GALRD[nu1, n, nb]*FVD[n, mu2])/2 + \ -(GSD[n] . GSLRD[p, n, nb] . GALRD[nu1, n, nb]*FVD[nb, mu2])/2 - \ -((GSD[n] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] - (GSD[n] . GSD[nb] . \ -GSLRD[p, n, nb]*FVD[n, mu2])/2 - (GSD[n] . GSD[n] . GSLRD[p, n, \ -nb]*FVD[nb, mu2])/2)*FVD[nb, nu1])/2 - (FVD[n, nu1]*(GSD[nb] . \ -GSLRD[p, n, nb] . GALRD[mu2, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[p, \ -n, nb]*FVD[n, mu2])/2 - (FVD[nb, mu2]*(-GSD[n] . GSD[nb] . GSLRD[p, \ -n, nb] + 4*GSLRD[p, n, nb]))/2))/2"}, +"GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] + (GSD[nb] . GSLRD[p, n, nb] . GALRD[nu1, n, nb]*FVD[n, mu2])/2 + +(GSD[n] . GSLRD[p, n, nb] . GALRD[nu1, n, nb]*FVD[nb, mu2])/2 - ((GSD[n] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] - +(GSD[n] . GSD[nb] . GSLRD[p, n, nb]*FVD[n, mu2])/2)*FVD[nb, nu1])/2 - (FVD[n, nu1]*(GSD[nb] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] - +(FVD[nb, mu2]*(-GSD[n] . GSD[nb] . GSLRD[p, n, nb] + 4*GSLRD[p, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID13", "DiracTrick[GALRD[mu].GSD[q],FCE->True]", "GALRD[mu, n, nb] . GSLRD[q, n, nb] - (GSD[nb] . GALRD[mu, n, \ nb]*SPD[n, q])/2 - (GSD[n] . GALRD[mu, n, nb]*SPD[nb, q])/2"}, {"fcstDiracTrickLightCone-ID14", "DiracTrick[GALRD[mu].GSD[q1,q2],FCE->True]", -"GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] + (GSD[nb] \ -. GALRD[mu, n, nb] . GSLRD[q1, n, nb]*SPD[n, q2])/2 + (GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[q1, n, nb]*SPD[nb, q2])/2 - (SPD[nb, \ -q1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] - (GSD[n] . GSD[nb] \ -. GALRD[mu, n, nb]*SPD[n, q2])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, \ -nb]*SPD[nb, q2])/2))/2 - (SPD[n, q1]*(GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[q2, n, nb] - (GSD[nb] . GSD[nb] . GALRD[mu, n, nb]*SPD[n, \ -q2])/2 - ((-GSD[n] . GSD[nb] . GALRD[mu, n, nb] + 4*GALRD[mu, n, \ -nb])*SPD[nb, q2])/2))/2"}, +"GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] + (GSD[nb] . GALRD[mu, n, nb] . GSLRD[q1, n, nb]*SPD[n, q2])/2 - +((GSD[n] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb]*SPD[n, q2])/2)*SPD[nb, q1])/2 + +(GSD[n] . GALRD[mu, n, nb] . GSLRD[q1, n, nb]*SPD[nb, q2])/2 - (SPD[n, q1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] - +((-GSD[n] . GSD[nb] . GALRD[mu, n, nb] + 4*GALRD[mu, n, nb])*SPD[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID15", "DiracTrick[GSLRD[p].GSD[q],FCE->True]", "GSLRD[p, n, nb] . GSLRD[q, n, nb] - (GSD[nb] . GSLRD[p, n, \ nb]*SPD[n, q])/2 - (GSD[n] . GSLRD[p, n, nb]*SPD[nb, q])/2"}, {"fcstDiracTrickLightCone-ID16", "DiracTrick[GSLRD[p].GSD[q1,q2],FCE->True]", -"GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] + (GSD[nb] \ -. GSLRD[p, n, nb] . GSLRD[q1, n, nb]*SPD[n, q2])/2 + (GSD[n] . \ -GSLRD[p, n, nb] . GSLRD[q1, n, nb]*SPD[nb, q2])/2 - (SPD[nb, \ -q1]*(GSD[n] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] - (GSD[n] . GSD[nb] \ -. GSLRD[p, n, nb]*SPD[n, q2])/2 - (GSD[n] . GSD[n] . GSLRD[p, n, \ -nb]*SPD[nb, q2])/2))/2 - (SPD[n, q1]*(GSD[nb] . GSLRD[p, n, nb] . \ -GSLRD[q2, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[p, n, nb]*SPD[n, q2])/2 \ -- ((-GSD[n] . GSD[nb] . GSLRD[p, n, nb] + 4*GSLRD[p, n, nb])*SPD[nb, \ -q2])/2))/2"}, +"GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] + +(GSD[nb] . GSLRD[p, n, nb] . GSLRD[q1, n, nb]*SPD[n, q2])/2 - +((GSD[n] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] - (GSD[n] . GSD[nb] . GSLRD[p, +n, nb]*SPD[n, q2])/2)*SPD[nb, q1])/2 + (GSD[n] . GSLRD[p, n, nb] . GSLRD[q1, +n, nb]*SPD[nb, q2])/2 - (SPD[n, q1]*(GSD[nb] . GSLRD[p, n, nb] . GSLRD[q2, +n, nb] - ((-GSD[n] . GSD[nb] . GSLRD[p, n, nb] + 4*GSLRD[p, n, nb])*SPD[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID17", "DiracTrick[GALR[mu].GA[5].GA[nu1],FCE->True]", "-GALR[mu, n, nb] . GALR[nu1, n, nb] . GA[5] + (GS[nb] . GALR[mu, \ @@ -2459,16 +2423,11 @@ n, nb] . GA[5]*FV[n, nu1])/2 + (GS[n] . GALR[mu, n, nb] . \ GA[5]*FV[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID18", "DiracTrick[GALR[mu].GA[5].GA[nu1,mu2],FCE->True]", -"GALR[mu, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] . GA[5] + \ -(GS[nb] . GALR[mu, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[n, mu2])/2 + \ -(GS[n] . GALR[mu, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[nb, mu2])/2 - \ -(FV[n, nu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GA[5] - \ -(GS[nb] . GS[nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu2])/2 - \ -((4*GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, n, nb] . \ -GA[5])*FV[nb, mu2])/2))/2 - ((GS[n] . GALR[mu, n, nb] . GALR[mu2, n, \ -nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu2])/2 \ -- (GS[n] . GS[n] . GALR[mu, n, nb] . GA[5]*FV[nb, mu2])/2)*FV[nb, \ -nu1])/2"}, +"GALR[mu, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] . GA[5] + (GS[nb] . GALR[mu, n, nb] . +GALR[nu1, n, nb] . GA[5]*FV[n, mu2])/2 + (GS[n] . GALR[mu, n, nb] . GALR[nu1, n, nb] . +GA[5]*FV[nb, mu2])/2 - (FV[n, nu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GA[5] - +((4*GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, n, nb] . GA[5])*FV[nb, mu2])/2))/2 - +((GS[n] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu2])/2)*FV[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID19", "DiracTrick[GSLR[p].GA[5].GA[nu1],FCE->True]", "-GSLR[p, n, nb] . GALR[nu1, n, nb] . GA[5] + (GS[nb] . GSLR[p, n, \ @@ -2476,15 +2435,10 @@ nb] . GA[5]*FV[n, nu1])/2 + (GS[n] . GSLR[p, n, nb] . GA[5]*FV[nb, \ nu1])/2"}, {"fcstDiracTrickLightCone-ID20", "DiracTrick[GSLR[p].GA[5].GA[nu1,mu2],FCE->True]", -"GSLR[p, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] . GA[5] + \ -(GS[nb] . GSLR[p, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[n, mu2])/2 + \ -(GS[n] . GSLR[p, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[nb, mu2])/2 - \ -(FV[n, nu1]*(GS[nb] . GSLR[p, n, nb] . GALR[mu2, n, nb] . GA[5] - \ -(GS[nb] . GS[nb] . GSLR[p, n, nb] . GA[5]*FV[n, mu2])/2 - ((4*GSLR[p, \ -n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5])*FV[nb, \ -mu2])/2))/2 - ((GS[n] . GSLR[p, n, nb] . GALR[mu2, n, nb] . GA[5] - \ -(GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5]*FV[n, mu2])/2 - (GS[n] . \ -GS[n] . GSLR[p, n, nb] . GA[5]*FV[nb, mu2])/2)*FV[nb, nu1])/2"}, +"GSLR[p, n, nb] . GALR[nu1, n, nb] . GALR[mu2, n, nb] . GA[5] + (GS[nb] . GSLR[p, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[n, mu2])/2 + +(GS[n] . GSLR[p, n, nb] . GALR[nu1, n, nb] . GA[5]*FV[nb, mu2])/2 - (FV[n, nu1]*(GS[nb] . GSLR[p, n, nb] . GALR[mu2, n, nb] . GA[5] - +((4*GSLR[p, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5])*FV[nb, mu2])/2))/2 - +((GS[n] . GSLR[p, n, nb] . GALR[mu2, n, nb] . GA[5] - (GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5]*FV[n, mu2])/2)*FV[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID21", "DiracTrick[GALR[mu].GA[5].GS[q],FCE->True]", "-GALR[mu, n, nb] . GSLR[q, n, nb] . GA[5] + (GS[nb] . GALR[mu, n, \ @@ -2492,16 +2446,11 @@ nb] . GA[5]*SP[n, q])/2 + (GS[n] . GALR[mu, n, nb] . GA[5]*SP[nb, \ q])/2"}, {"fcstDiracTrickLightCone-ID22", "DiracTrick[GALR[mu].GA[5].GS[q1,q2],FCE->True]", -"GALR[mu, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] . GA[5] + \ -(GS[nb] . GALR[mu, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[n, q2])/2 + \ -(GS[n] . GALR[mu, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[nb, q2])/2 - \ -(SP[nb, q1]*(GS[n] . GALR[mu, n, nb] . GSLR[q2, n, nb] . GA[5] - \ -(GS[n] . GS[nb] . GALR[mu, n, nb] . GA[5]*SP[n, q2])/2 - (GS[n] . \ -GS[n] . GALR[mu, n, nb] . GA[5]*SP[nb, q2])/2))/2 - (SP[n, \ -q1]*(GS[nb] . GALR[mu, n, nb] . GSLR[q2, n, nb] . GA[5] - (GS[nb] . \ -GS[nb] . GALR[mu, n, nb] . GA[5]*SP[n, q2])/2 - ((4*GALR[mu, n, nb] . \ -GA[5] - GS[n] . GS[nb] . GALR[mu, n, nb] . GA[5])*SP[nb, \ -q2])/2))/2"}, +"GALR[mu, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] . GA[5] + (GS[nb] . GALR[mu, n, nb] . GSLR[q1, n, nb] . +GA[5]*SP[n, q2])/2 - ((GS[n] . GALR[mu, n, nb] . GSLR[q2, n, nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . +GA[5]*SP[n, q2])/2)*SP[nb, q1])/2 + (GS[n] . GALR[mu, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[nb, q2])/2 - +(SP[n, q1]*(GS[nb] . GALR[mu, n, nb] . GSLR[q2, n, nb] . GA[5] - ((4*GALR[mu, n, nb] . GA[5] - GS[n] . +GS[nb] . GALR[mu, n, nb] . GA[5])*SP[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID23", "DiracTrick[GSLR[p].GA[5].GS[q],FCE->True]", "-GSLR[p, n, nb] . GSLR[q, n, nb] . GA[5] + (GS[nb] . GSLR[p, n, \ @@ -2509,14 +2458,10 @@ nb] . GA[5]*SP[n, q])/2 + (GS[n] . GSLR[p, n, nb] . GA[5]*SP[nb, \ q])/2"}, {"fcstDiracTrickLightCone-ID24", "DiracTrick[GSLR[p].GA[5].GS[q1,q2],FCE->True]", -"GSLR[p, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] . GA[5] + \ -(GS[nb] . GSLR[p, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[n, q2])/2 + \ -(GS[n] . GSLR[p, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[nb, q2])/2 - \ -(SP[nb, q1]*(GS[n] . GSLR[p, n, nb] . GSLR[q2, n, nb] . GA[5] - \ -(GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5]*SP[n, q2])/2 - (GS[n] . \ -GS[n] . GSLR[p, n, nb] . GA[5]*SP[nb, q2])/2))/2 - (SP[n, q1]*(GS[nb] \ -. GSLR[p, n, nb] . GSLR[q2, n, nb] . GA[5] - (GS[nb] . GS[nb] . \ -GSLR[p, n, nb] . GA[5]*SP[n, q2])/2 - ((4*GSLR[p, n, nb] . GA[5] - \ +"GSLR[p, n, nb] . GSLR[q1, n, nb] . GSLR[q2, n, nb] . GA[5] + (GS[nb] . GSLR[p, n, nb] . GSLR[q1, n, nb] . +GA[5]*SP[n, q2])/2 - ((GS[n] . GSLR[p, n, nb] . GSLR[q2, n, nb] . GA[5] - (GS[n] . GS[nb] . GSLR[p, n, nb] . +GA[5]*SP[n, q2])/2)*SP[nb, q1])/2 + (GS[n] . GSLR[p, n, nb] . GSLR[q1, n, nb] . GA[5]*SP[nb, q2])/2 - +(SP[n, q1]*(GS[nb] . GSLR[p, n, nb] . GSLR[q2, n, nb] . GA[5] - ((4*GSLR[p, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[p, n, nb] . GA[5])*SP[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID25", "DiracTrick[GALRD[mu].GA[5].GAD[nu1],FCE->True]", @@ -2525,16 +2470,11 @@ GALRD[mu, n, nb] . GA[5]*FVD[n, nu1])/2 + (GSD[n] . GALRD[mu, n, nb] \ . GA[5]*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID26", "DiracTrick[GALRD[mu].GA[5].GAD[nu1,mu2],FCE->True]", -"GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] . GA[5] \ -+ (GSD[nb] . GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[n, \ -mu2])/2 + (GSD[n] . GALRD[mu, n, nb] . GALRD[nu1, n, nb] . \ -GA[5]*FVD[nb, mu2])/2 - (FVD[n, nu1]*(GSD[nb] . GALRD[mu, n, nb] . \ -GALRD[mu2, n, nb] . GA[5] - (GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GA[5]*FVD[n, mu2])/2 - ((4*GALRD[mu, n, nb] . GA[5] - GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GA[5])*FVD[nb, mu2])/2))/2 - ((GSD[n] . \ -GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GA[5] - (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GA[5]*FVD[n, mu2])/2 - (GSD[n] . GSD[n] . \ -GALRD[mu, n, nb] . GA[5]*FVD[nb, mu2])/2)*FVD[nb, nu1])/2"}, +"GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] . GA[5] + (GSD[nb] . GALRD[mu, n, nb] . GALRD[nu1, n, nb] . +GA[5]*FVD[n, mu2])/2 + (GSD[n] . GALRD[mu, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[nb, mu2])/2 - +(FVD[n, nu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GA[5] - ((4*GALRD[mu, n, nb] . GA[5] - +GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GA[5])*FVD[nb, mu2])/2))/2 - ((GSD[n] . GALRD[mu, n, nb] . +GALRD[mu2, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GA[5]*FVD[n, mu2])/2)*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID27", "DiracTrick[GSLRD[p].GA[5].GAD[nu1],FCE->True]", "-GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GA[5] + (GSD[nb] . \ @@ -2542,16 +2482,11 @@ GSLRD[p, n, nb] . GA[5]*FVD[n, nu1])/2 + (GSD[n] . GSLRD[p, n, nb] . \ GA[5]*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID28", "DiracTrick[GSLRD[p].GA[5].GAD[nu1,mu2],FCE->True]", -"GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] . GA[5] + \ -(GSD[nb] . GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[n, mu2])/2 \ -+ (GSD[n] . GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[nb, \ -mu2])/2 - (FVD[n, nu1]*(GSD[nb] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] \ -. GA[5] - (GSD[nb] . GSD[nb] . GSLRD[p, n, nb] . GA[5]*FVD[n, mu2])/2 \ -- ((4*GSLRD[p, n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[p, n, nb] . \ -GA[5])*FVD[nb, mu2])/2))/2 - ((GSD[n] . GSLRD[p, n, nb] . GALRD[mu2, \ -n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[p, n, nb] . GA[5]*FVD[n, \ -mu2])/2 - (GSD[n] . GSD[n] . GSLRD[p, n, nb] . GA[5]*FVD[nb, \ -mu2])/2)*FVD[nb, nu1])/2"}, +"GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GALRD[mu2, n, nb] . GA[5] + (GSD[nb] . GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[n, mu2])/2 + +(GSD[n] . GSLRD[p, n, nb] . GALRD[nu1, n, nb] . GA[5]*FVD[nb, mu2])/2 - +(FVD[n, nu1]*(GSD[nb] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] . GA[5] - ((4*GSLRD[p, n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[p, n, nb] . +GA[5])*FVD[nb, mu2])/2))/2 - ((GSD[n] . GSLRD[p, n, nb] . GALRD[mu2, n, nb] . GA[5] - +(GSD[n] . GSD[nb] . GSLRD[p, n, nb] . GA[5]*FVD[n, mu2])/2)*FVD[nb, nu1])/2"}, {"fcstDiracTrickLightCone-ID29", "DiracTrick[GALRD[mu].GA[5].GSD[q],FCE->True]", "-GALRD[mu, n, nb] . GSLRD[q, n, nb] . GA[5] + (GSD[nb] . \ @@ -2559,16 +2494,12 @@ GALRD[mu, n, nb] . GA[5]*SPD[n, q])/2 + (GSD[n] . GALRD[mu, n, nb] . \ GA[5]*SPD[nb, q])/2"}, {"fcstDiracTrickLightCone-ID30", "DiracTrick[GALRD[mu].GA[5].GSD[q1,q2],FCE->True]", -"GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] . GA[5] + \ -(GSD[nb] . GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GA[5]*SPD[n, q2])/2 \ -+ (GSD[n] . GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GA[5]*SPD[nb, \ -q2])/2 - (SPD[nb, q1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] . \ -GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, q2])/2 - \ -(GSD[n] . GSD[n] . GALRD[mu, n, nb] . GA[5]*SPD[nb, q2])/2))/2 - \ -(SPD[n, q1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] . GA[5] - \ -(GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, q2])/2 - \ -((4*GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GA[5])*SPD[nb, q2])/2))/2"}, +"GALRD[mu, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] . GA[5] + (GSD[nb] . GALRD[mu, n, nb] . +GSLRD[q1, n, nb] . GA[5]*SPD[n, q2])/2 - ((GSD[n] . GALRD[mu, n, nb] . GSLRD[q2, n, nb] . GA[5] - +(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, q2])/2)*SPD[nb, q1])/2 + (GSD[n] . GALRD[mu, +n, nb] . GSLRD[q1, n, nb] . GA[5]*SPD[nb, q2])/2 - (SPD[n, q1]*(GSD[nb] . GALRD[mu, n, +nb] . GSLRD[q2, n, nb] . GA[5] - ((4*GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, n, +nb] . GA[5])*SPD[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID31", "DiracTrick[GSLRD[p].GA[5].GSD[q],FCE->True]", "-GSLRD[p, n, nb] . GSLRD[q, n, nb] . GA[5] + (GSD[nb] . GSLRD[p, \ @@ -2576,16 +2507,11 @@ n, nb] . GA[5]*SPD[n, q])/2 + (GSD[n] . GSLRD[p, n, nb] . \ GA[5]*SPD[nb, q])/2"}, {"fcstDiracTrickLightCone-ID32", "DiracTrick[GSLRD[p].GA[5].GSD[q1,q2],FCE->True]", -"GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] . GA[5] + \ -(GSD[nb] . GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GA[5]*SPD[n, q2])/2 + \ -(GSD[n] . GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GA[5]*SPD[nb, q2])/2 - \ -(SPD[nb, q1]*(GSD[n] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] . GA[5] - \ -(GSD[n] . GSD[nb] . GSLRD[p, n, nb] . GA[5]*SPD[n, q2])/2 - (GSD[n] . \ -GSD[n] . GSLRD[p, n, nb] . GA[5]*SPD[nb, q2])/2))/2 - (SPD[n, \ -q1]*(GSD[nb] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] . GA[5] - (GSD[nb] \ -. GSD[nb] . GSLRD[p, n, nb] . GA[5]*SPD[n, q2])/2 - ((4*GSLRD[p, n, \ -nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[p, n, nb] . GA[5])*SPD[nb, \ -q2])/2))/2"}, +"GSLRD[p, n, nb] . GSLRD[q1, n, nb] . GSLRD[q2, n, nb] . GA[5] + (GSD[nb] . GSLRD[p, n, nb] . GSLRD[q1, n, nb] . +GA[5]*SPD[n, q2])/2 - ((GSD[n] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] . GA[5] - (GSD[n] . GSD[nb] . +GSLRD[p, n, nb] . GA[5]*SPD[n, q2])/2)*SPD[nb, q1])/2 + (GSD[n] . GSLRD[p, n, nb] . GSLRD[q1, n, nb] . +GA[5]*SPD[nb, q2])/2 - (SPD[n, q1]*(GSD[nb] . GSLRD[p, n, nb] . GSLRD[q2, n, nb] . GA[5] - ((4*GSLRD[p, +n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[p, n, nb] . GA[5])*SPD[nb, q2])/2))/2"}, {"fcstDiracTrickLightCone-ID33", "DiracTrick[GALR[mu].GALR[mu],FCE->True]", "2"}, {"fcstDiracTrickLightCone-ID34", @@ -2630,30 +2556,19 @@ GALR[mu3, n, nb]*MTLR[mu4, mu5, n, nb])"}, "-(FV[nb, mu1]*GS[n]) - FV[n, mu1]*GS[nb]"}, {"fcstDiracTrickLightCone-ID40", "DiracTrick[GALR[mu].GA[mu1,mu2,mu3].GALR[mu],FCE->True]", -"GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, \ -n, nb] . GALR[mu, n, nb] - (GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, \ -nb] . GALR[mu2, n, nb] . GALR[mu, n, nb]*FV[n, mu3])/2 - (GS[n] . \ -GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, \ -nb]*FV[nb, mu3])/2 - (FV[nb, mu2]*(-GS[n] . GALR[mu, n, nb] . \ -GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] - (GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb]*FV[n, \ -mu3])/2 - (GS[n] . GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . \ -GALR[mu, n, nb]*FV[nb, mu3])/2))/2 - (FV[n, mu2]*(-GS[nb] . GALR[mu, \ -n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] - \ -(GS[nb] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, \ -nb]*FV[n, mu3])/2 + ((-4*GALR[mu, n, nb] . GALR[mu1, n, nb] . \ -GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] \ -. GALR[mu, n, nb])*FV[nb, mu3])/2))/2 - (FV[nb, mu1]*(GS[n] . \ -GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, \ -nb] + (GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, \ -n, nb]*FV[n, mu3])/2 + (GS[n] . GS[n] . GALR[mu, n, nb] . GALR[mu2, \ -n, nb] . GALR[mu, n, nb]*FV[nb, mu3])/2 + 2*FV[n, mu2]*FV[nb, \ -mu3]*GS[n]))/2 - (FV[n, mu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, \ -nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] + (GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb]*FV[n, mu3])/2 - \ -((-4*GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] + GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb])*FV[nb, \ -mu3])/2 + 2*FV[n, mu3]*FV[nb, mu2]*GS[nb]))/2"}, +"GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] - +(GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb]*FV[n, mu3])/2 - +((-GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] - +(GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb]*FV[n, mu3])/2)*FV[nb, mu2])/2 - +(GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb]*FV[nb, mu3])/2 - +(FV[n, mu2]*(-GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] + +((-4*GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, +n, nb] . GALR[mu, n, nb])*FV[nb, mu3])/2))/2 - (FV[nb, mu1]*(GS[n] . GALR[mu, n, nb] . GALR[mu2, +n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] + (GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, +n, nb] . GALR[mu, n, nb]*FV[n, mu3])/2 + 2*FV[n, mu2]*FV[nb, mu3]*GS[n]))/2 - +(FV[n, mu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] - +((-4*GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, +n, nb] . GALR[mu, n, nb])*FV[nb, mu3])/2 + 2*FV[n, mu3]*FV[nb, mu2]*GS[nb]))/2"}, {"fcstDiracTrickLightCone-ID41", "DiracTrick[GALR[mu].GS[p1].GALR[mu],FCE->True]", "-(GS[nb]*SP[n, p1]) - GS[n]*SP[nb, p1]"}, @@ -2666,124 +2581,51 @@ GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[nb, p2])/2 + \ ((4 - GS[n] . GS[nb])*SP[n, p1]*SP[nb, p2])/2"}, {"fcstDiracTrickLightCone-ID43", "DiracTrick[GALR[mu].GS[p1,p2,p3].GALR[mu],FCE->True]", -"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] - (GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2 - (GS[n] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, \ -p3])/2 - (SP[nb, p2]*(-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb] - (GS[n] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2 - (GS[n] . GS[n] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[nb, p3])/2))/2 \ -- (SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, \ -n, nb] . GALR[mu, n, nb] - (GS[nb] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2 + ((-4*GALR[mu, n, nb] \ -. GSLR[p1, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GALR[mu, n, nb])*SP[nb, p3])/2))/2 - (SP[n, \ -p1]*(GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb] + (GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, \ -nb] . GALR[mu, n, nb]*SP[n, p3])/2 + 2*GS[nb]*SP[n, p3]*SP[nb, p2] - \ -((-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] + GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb])*SP[nb, \ -p3])/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb] + (GS[n] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2 + (GS[n] . GS[n] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, p3])/2 + \ -2*GS[n]*SP[n, p2]*SP[nb, p3]))/2"}, +"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] - +(GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2 - +((-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] - +(GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[n, p3])/2)*SP[nb, p2])/2 - +(GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, p3])/2 - +(SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] + +((-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, +n, nb] . GALR[mu, n, nb])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . GALR[mu, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] + 2*GS[nb]*SP[n, p3]*SP[nb, p2] - ((-4*GALR[mu, +n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, +n, nb] . GALR[mu, n, nb])*SP[nb, p3])/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] + (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, +nb] . GALR[mu, n, nb]*SP[n, p3])/2 + 2*GS[n]*SP[n, p2]*SP[nb, p3]))/2"}, {"fcstDiracTrickLightCone-ID44", "DiracTrick[GALR[mu].GS[p1,p2,p3,p4].GALR[mu],FCE->True]", -"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + (GS[nb] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, \ -nb]*SP[n, p4])/2 + (GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2 - \ -(SP[nb, p3]*(GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . GS[nb] . GALR[mu, \ -n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, \ -p4])/2 - (GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2))/2 - (SP[n, \ -p3]*(GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[nb] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, \ -p4])/2 - ((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] \ -. GSLR[p2, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2))/2 - (SP[nb, \ -p2]*(-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] + (GS[n] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 + \ -(GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] \ -. GALR[mu, n, nb]*SP[nb, p4])/2 + (SP[nb, p3]*(-GS[n] . GS[n] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] \ -- (GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GALR[mu, n, nb]*SP[n, p4])/2 - (GS[n] . GS[n] . GS[n] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2))/2 + (SP[n, \ -p3]*(-GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, \ -n, nb] . GALR[mu, n, nb] - (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 + ((-4*GS[n] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] + GS[n] . GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb])*SP[nb, \ -p4])/2))/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb]*SP[n, p4])/2 - (GS[n] . GS[n] . GALR[mu, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2 - \ -(SP[nb, p3]*(-GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . GS[n] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 - \ -(GS[n] . GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, \ -n, nb]*SP[nb, p4])/2))/2 - (SP[n, p3]*(-GS[n] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . \ -GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, \ -nb]*SP[n, p4])/2 + ((-4*GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] + GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, \ -n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2))/2 - (SP[n, p2]*(GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] + (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 + 2*GS[n] . \ -GS[nb]*SP[n, p4]*SP[nb, p3] - ((-4*GS[n] . GALR[mu, n, nb] . GSLR[p3, \ -n, nb] . GALR[mu, n, nb] + GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2))/2))/2 - (SP[n, \ -p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] + (GS[nb] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, \ -p4])/2 + ((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] \ -. GSLR[p3, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2 + (SP[nb, \ -p3]*(-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] \ -. GSLR[p4, n, nb] . GALR[mu, n, nb] + ((-4*GS[nb] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb])*SP[n, p4])/2 - \ -(GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GALR[mu, n, nb]*SP[nb, p4])/2))/2 + (SP[n, p3]*(-GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] \ -- (GS[nb] . GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GALR[mu, n, nb]*SP[n, p4])/2 - (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2))/2))/2 - \ -(SP[n, p1]*(GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[nb] . GS[nb] . GALR[mu, \ -n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, \ -p4])/2 - ((4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] \ -. GSLR[p3, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2 - (SP[nb, \ -p3]*(-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] \ -. GSLR[p4, n, nb] . GALR[mu, n, nb] + ((-4*GS[nb] . GALR[mu, n, nb] . \ -GSLR[p2, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb])*SP[n, p4])/2 - \ -(GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb]*SP[nb, p4])/2))/2 - (SP[n, p3]*(-GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] \ -- (GS[nb] . GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb]*SP[n, p4])/2 - (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, \ -nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2))/2 - (SP[nb, \ -p2]*(4*GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, \ -n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] - ((-4*GS[nb] . GALR[mu, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb])*SP[n, p4])/2 + \ -(GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb]*SP[nb, p4])/2 + 2*(4 - GS[n] . GS[nb])*SP[n, \ -p3]*SP[nb, p4]))/2))/2"}, +"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . +GALR[mu, n, nb] + (GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . +GALR[mu, n, nb]*SP[n, p4])/2 - ((GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . +GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . +GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2)*SP[nb, p3])/2 + (GS[n] . GALR[mu, n, nb] . +GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[nb, p4])/2 - +(SP[n, p3]*(GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . +GALR[mu, n, nb] - ((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] - +GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2))/2 - +(SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + +((-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - 2*GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . +GALR[mu, n, nb]*SP[n, p4])*SP[nb, p3])/2 + ((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . +GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb])*SP[nb, p4])/2))/2 - +(SP[nb, p2]*(-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + +(GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 + +(SP[n, p3]*(-GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - 2*GS[n] . +GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb]*SP[nb, p4]))/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - (GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, p4])/2 - (SP[n, p3]*(-GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - 2*GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[nb, p4]))/2 - +(SP[n, p2]*(GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + +2*GS[n] . GS[nb]*SP[n, p4]*SP[nb, p3] + 2*GS[n] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[nb, p4]))/2))/2 - +(SP[n, p1]*(GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - +((-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - 2*GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb]*SP[n, p4])*SP[nb, p3])/2 - +((4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, +n, nb])*SP[nb, p4])/2 - (SP[nb, p2]*(4*GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, +n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] + 2*GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb]*SP[n, p4] + 2*(4 - +GS[n] . GS[nb])*SP[n, p3]*SP[nb, p4]))/2))/2"}, {"fcstDiracTrickLightCone-ID45", "DiracTrick[GALRD[mu].GALRD[mu],FCE->True]", "-2 + D"}, {"fcstDiracTrickLightCone-ID46", @@ -2833,34 +2675,21 @@ mu5, n, nb])"}, - ((-2 + D)*FVD[n, mu1]*GSD[nb])/2"}, {"fcstDiracTrickLightCone-ID52", "DiracTrick[GALRD[mu].GAD[mu1,mu2,mu3].GALRD[mu],FCE->True]", -"GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] - (GSD[nb] . GALRD[mu, n, nb] . \ -GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb]*FVD[n, \ -mu3])/2 - (GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, \ -n, nb] . GALRD[mu, n, nb]*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(-GSD[n] . \ -GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, \ -n, nb] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . \ -GALRD[mu, n, nb]*FVD[n, mu3])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, nb] \ -. GALRD[mu1, n, nb] . GALRD[mu, n, nb]*FVD[nb, mu3])/2))/2 - (FVD[n, \ -mu2]*(-GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, \ -nb] . GALRD[mu, n, nb] - (GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GALRD[mu1, n, nb] . GALRD[mu, n, nb]*FVD[n, mu3])/2 + ((-4*GALRD[mu, \ -n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb])*FVD[nb, \ -mu3])/2))/2 - (FVD[nb, mu1]*(GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, \ -n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb]*FVD[n, \ -mu3])/2 + (GSD[n] . GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu, n, nb]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(-((-4 + D)*GSD[n] . \ -GSD[nb] . GALRD[mu3, n, nb]) - 2*(-2 + D)*FVD[nb, mu3]*GSD[n]))/2))/2 \ -- (FVD[n, mu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] + (GSD[nb] . GSD[nb] . GALRD[mu, \ -n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb]*FVD[n, mu3])/2 - \ -((-4*GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] + GSD[n] \ -. GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, \ -nb])*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(-((-4 + D)*(-GSD[n] . GSD[nb] . \ -GALRD[mu3, n, nb] + 4*GALRD[mu3, n, nb])) - 2*(-2 + D)*FVD[n, \ -mu3]*GSD[nb]))/2))/2"}, +"GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] - +(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb]*FVD[n, mu3])/2 - +((-GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] - +(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb]*FVD[n, mu3])/2)*FVD[nb, mu2])/2 - +(GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb]*FVD[nb, mu3])/2 - +(FVD[n, mu2]*(-GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] + +((-4*GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, +n, nb] . GALRD[mu, n, nb])*FVD[nb, mu3])/2))/2 - (FVD[nb, mu1]*(GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, n, +nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, +nb] . GALRD[mu, n, nb]*FVD[n, mu3])/2 - (FVD[n, mu2]*(-((-4 + D)*GSD[n] . GSD[nb] . GALRD[mu3, n, +nb]) - 2*(-2 + D)*FVD[nb, mu3]*GSD[n]))/2))/2 - (FVD[n, mu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, +n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] - ((-4*GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, +n, nb] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb])*FVD[nb, mu3])/2 - +(FVD[nb, mu2]*(-((-4 + D)*(-GSD[n] . GSD[nb] . GALRD[mu3, n, nb] + 4*GALRD[mu3, n, nb])) - 2*(-2 + +D)*FVD[n, mu3]*GSD[nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID53", "DiracTrick[GALRD[mu].GSD[p1].GALRD[mu],FCE->True]", "-((-4 + D)*GSLRD[p1, n, nb]) - ((-2 + D)*GSD[nb]*SPD[n, p1])/2 - \ @@ -2876,136 +2705,54 @@ nb]*SPD[nb, p2])/2 - (SPD[n, p1]*(-((-4 + D)*GSD[nb] . GSLRD[p2, n, \ nb]) - ((-2 + D)*(4 - GSD[n] . GSD[nb])*SPD[nb, p2])/2))/2"}, {"fcstDiracTrickLightCone-ID55", "DiracTrick[GALRD[mu].GSD[p1,p2,p3].GALRD[mu],FCE->True]", -"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] - (GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p3])/2 \ -- (GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb]*SPD[nb, p3])/2 - (SPD[nb, p2]*(-GSD[n] . GALRD[mu, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - \ -(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, \ -n, nb]*SPD[n, p3])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[nb, p3])/2))/2 - (SPD[n, \ -p2]*(-GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, \ -nb] . GALRD[mu, n, nb] - (GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[n, p3])/2 + ((-4*GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb])*SPD[nb, \ -p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] + (GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p3])/2 \ -- ((-((-4 + D)*(-GSD[n] . GSD[nb] . GSLRD[p3, n, nb] + 4*GSLRD[p3, n, \ -nb])) - 2*(-2 + D)*GSD[nb]*SPD[n, p3])*SPD[nb, p2])/2 - \ -((-4*GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] + GSD[n] \ -. GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, \ -nb])*SPD[nb, p3])/2))/2 - (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] + (GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, \ -nb]*SPD[n, p3])/2 + (GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, \ -n, nb] . GALRD[mu, n, nb]*SPD[nb, p3])/2 - (SPD[n, p2]*(-((-4 + \ -D)*GSD[n] . GSD[nb] . GSLRD[p3, n, nb]) - 2*(-2 + D)*GSD[n]*SPD[nb, \ -p3]))/2))/2"}, +"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - +(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p3])/2 - +((-GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - +(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[n, p3])/2)*SPD[nb, p2])/2 - +(GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[nb, p3])/2 - +(SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] + +((-4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GALRD[mu, n, nb])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - ((-((-4 + D)*(-GSD[n] . GSD[nb] . GSLRD[p3, +n, nb] + 4*GSLRD[p3, n, nb])) - 2*(-2 + D)*GSD[nb]*SPD[n, p3])*SPD[nb, p2])/2 - ((-4*GALRD[mu, n, nb] . +GSLRD[p2, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, +n, nb])*SPD[nb, p3])/2))/2 - (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, +n, nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, +n, nb]*SPD[n, p3])/2 - (SPD[n, p2]*(-((-4 + D)*GSD[n] . GSD[nb] . GSLRD[p3, n, nb]) - 2*(-2 + D)*GSD[n]*SPD[nb, p3]))/2))/2"}, {"fcstDiracTrickLightCone-ID56", "DiracTrick[GALRD[mu].GSD[p1,p2,p3,p4].GALRD[mu],FCE->True]", -"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + (GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, \ -nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 + (GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, \ -nb]*SPD[nb, p4])/2 - (SPD[nb, p3]*(GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, \ -nb] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] \ -. GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, \ -n, nb]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, \ -nb] - (GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - ((4*GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] - GSD[n] \ -. GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb])*SPD[nb, p4])/2))/2 - (SPD[nb, p2]*(-GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, \ -nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 \ -+ (GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb]*SPD[nb, p4])/2 + (SPD[nb, p3]*(-GSD[n] . \ -GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] - (GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] \ -. GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, \ -nb]*SPD[nb, p4])/2))/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GALRD[mu, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GALRD[mu, n, nb]*SPD[n, p4])/2 + ((-4*GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb])*SPD[nb, \ -p4])/2))/2))/2 - (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, \ -nb]*SPD[nb, p4])/2 - (SPD[nb, p3]*(-GSD[n] . GSD[n] . GALRD[mu, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[nb, \ -p4])/2))/2 - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - (GSD[n] . \ -GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, \ -n, nb]*SPD[n, p4])/2 + ((-4*GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, \ -nb] . GALRD[mu, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] \ -. GSLRD[p2, n, nb] . GALRD[mu, n, nb])*SPD[nb, p4])/2))/2 - (SPD[n, \ -p2]*(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[p4, n, nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 \ -- 2*(-((-4 + D)*GSD[n] . GSLRD[p4, n, nb]) - ((-2 + D)*GSD[n] . \ -GSD[nb]*SPD[n, p4])/2)*SPD[nb, p3] - ((-4*GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb])*SPD[nb, \ -p4])/2))/2))/2 - (SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + \ -(GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 + ((4*GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . \ -GALRD[mu, n, nb])*SPD[nb, p4])/2 + (SPD[nb, p3]*(-4*GALRD[mu, n, nb] \ -. GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] + ((-4*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] \ -. GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb])*SPD[n, p4])/2 - (GSD[n] . GSD[n] \ -. GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, \ -nb]*SPD[nb, p4])/2))/2 + (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GALRD[mu, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[nb] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[nb, \ -p4])/2))/2))/2 - (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - ((4*GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . \ -GALRD[mu, n, nb])*SPD[nb, p4])/2 - (SPD[nb, p3]*(-4*GALRD[mu, n, nb] \ -. GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] + ((-4*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] \ -. GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb])*SPD[n, p4])/2 - (GSD[n] . GSD[n] \ -. GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, \ -nb]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GALRD[mu, \ -n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -(GSD[nb] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[nb, \ -p4])/2))/2 - (SPD[nb, p2]*(4*GALRD[mu, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[p4, n, nb] . GALRD[mu, n, nb] - GSD[n] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - \ -((-4*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] \ -+ GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . \ -GALRD[mu, n, nb])*SPD[n, p4])/2 + (GSD[n] . GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[nb, p4])/2 \ -- 2*SPD[n, p3]*(-((-4 + D)*GSD[nb] . GSLRD[p4, n, nb]) - ((-2 + D)*(4 \ -- GSD[n] . GSD[nb])*SPD[nb, p4])/2)))/2))/2"}, +"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + +(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - +((GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - (GSD[n] . +GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2)*SPD[nb, p3])/2 + +(GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[nb, p4])/2 - +(SPD[n, p3]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - +((4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb])*SPD[nb, p4])/2))/2 - (SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + ((-4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . +GSLRD[p4, n, nb] . GALRD[mu, n, nb] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . +GALRD[mu, n, nb] - 2*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])*SPD[nb, p3])/2 + +((4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb])*SPD[nb, p4])/2))/2 - (SPD[nb, p2]*(-GSD[n] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . +GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - 2*GSD[n] . GALRD[mu, n, nb] . +GSLRD[p1, n, nb] . GALRD[mu, n, nb]*SPD[nb, p4]))/2))/2 - (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . +GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])/2 - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GALRD[mu, n, nb] . +GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - 2*GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . +GALRD[mu, n, nb]*SPD[nb, p4]))/2 - (SPD[n, p2]*(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . +GSLRD[p4, n, nb] . GALRD[mu, n, nb] - 2*(-((-4 + D)*GSD[n] . GSLRD[p4, n, nb]) - ((-2 + D)*GSD[n] . +GSD[nb]*SPD[n, p4])/2)*SPD[nb, p3] + 2*GSD[n] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb]*SPD[nb, +p4]))/2))/2 - (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . +GALRD[mu, n, nb] - ((-4*GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] + GSD[n] . +GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] - 2*GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb]*SPD[n, p4])*SPD[nb, p3])/2 - ((4*GALRD[mu, n, nb] . GSLRD[p2, +n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . +GSLRD[p3, n, nb] . GALRD[mu, n, nb])*SPD[nb, p4])/2 - (SPD[nb, p2]*(4*GALRD[mu, n, nb] . GSLRD[p3, n, nb] . +GSLRD[p4, n, nb] . GALRD[mu, n, nb] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . +GSLRD[p4, n, nb] . GALRD[mu, n, nb] + 2*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, +nb]*SPD[n, p4] - 2*SPD[n, p3]*(-((-4 + D)*GSD[nb] . GSLRD[p4, n, nb]) - ((-2 + D)*(4 - GSD[n] . GSD[nb])*SPD[nb, p4])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID57", "DiracTrick[GALR[mu].GA[5].GALR[mu],FCE->True]", "-2*GA[5]"}, {"fcstDiracTrickLightCone-ID58", @@ -3054,31 +2801,20 @@ GALR[mu2, n, nb] . GALR[mu3, n, nb] . GA[5]*MTLR[mu4, mu5, n, nb])"}, "-(GS[nb] . GA[5]*FV[n, mu1]) - GS[n] . GA[5]*FV[nb, mu1]"}, {"fcstDiracTrickLightCone-ID64", "DiracTrick[GALR[mu].GA[5].GA[mu1,mu2,mu3].GALR[mu],FCE->True]", -"GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, \ -n, nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . GALR[mu, n, nb] . \ -GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5]*FV[n, \ -mu3])/2 - (GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, \ -nb] . GALR[mu, n, nb] . GA[5]*FV[nb, mu3])/2 - (FV[nb, mu2]*(-GS[n] . \ -GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, \ -nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . \ -GALR[mu, n, nb] . GA[5]*FV[n, mu3])/2 - (GS[n] . GS[n] . GALR[mu, n, \ -nb] . GALR[mu1, n, nb] . GALR[mu, n, nb] . GA[5]*FV[nb, mu3])/2))/2 - \ -(FV[n, mu2]*(-GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu3, \ -n, nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . GS[nb] . GALR[mu, n, nb] \ -. GALR[mu1, n, nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu3])/2 + \ -((-4*GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb] \ -. GA[5])*FV[nb, mu3])/2))/2 - (FV[n, mu1]*(GS[nb] . GALR[mu, n, nb] . \ -GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] + \ -(GS[nb] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, \ -nb] . GA[5]*FV[n, mu3])/2 + 2*GS[nb] . GA[5]*FV[n, mu3]*FV[nb, mu2] - \ -((-4*GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] \ -. GA[5])*FV[nb, mu3])/2))/2 - (FV[nb, mu1]*(GS[n] . GALR[mu, n, nb] . \ -GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] + \ -(GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, \ -nb] . GA[5]*FV[n, mu3])/2 + (GS[n] . GS[n] . GALR[mu, n, nb] . \ -GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5]*FV[nb, mu3])/2 + 2*GS[n] . \ +"GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] - +(GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu3])/2 - +((-GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] - +(GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, n, nb] . GA[5]*FV[n, +mu3])/2)*FV[nb, mu2])/2 - (GS[n] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . +GALR[mu, n, nb] . GA[5]*FV[nb, mu3])/2 - (FV[n, mu2]*(-GS[nb] . GALR[mu, n, nb] . GALR[mu1, +n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] + ((-4*GALR[mu, n, nb] . GALR[mu1, n, +nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GALR[mu, n, nb] . GALR[mu1, n, nb] . GALR[mu, +n, nb] . GA[5])*FV[nb, mu3])/2))/2 - (FV[n, mu1]*(GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, +nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] + 2*GS[nb] . GA[5]*FV[n, mu3]*FV[nb, mu2] - +((-4*GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GALR[mu, +n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5])*FV[nb, mu3])/2))/2 - (FV[nb, mu1]*(GS[n] . +GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GALR[mu, n, nb] . GA[5] + (GS[n] . +GS[nb] . GALR[mu, n, nb] . GALR[mu2, n, nb] . GALR[mu, n, nb] . GA[5]*FV[n, mu3])/2 + 2*GS[n] . GA[5]*FV[n, mu2]*FV[nb, mu3]))/2"}, {"fcstDiracTrickLightCone-ID65", "DiracTrick[GALR[mu].GA[5].GS[p1].GALR[mu],FCE->True]", @@ -3093,134 +2829,57 @@ GALR[mu, n, nb] . GA[5]*SP[nb, p2])/2 - ((-GS[n] . GS[nb] . GA[5] + \ 4*GA[5])*SP[n, p1]*SP[nb, p2])/2"}, {"fcstDiracTrickLightCone-ID67", "DiracTrick[GALR[mu].GA[5].GS[p1,p2,p3].GALR[mu],FCE->True]", -"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . GALR[mu, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p3])/2 - \ -(GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] . GA[5]*SP[nb, p3])/2 - (SP[nb, p2]*(-GS[n] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] \ -. GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GALR[mu, n, nb] . GA[5]*SP[n, p3])/2 - (GS[n] . GS[n] . GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p3])/2))/2 - \ -(SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p3])/2 + \ -((-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] \ -. GA[5])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . GALR[mu, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + (GS[nb] \ -. GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . \ -GA[5]*SP[n, p3])/2 + 2*GS[nb] . GA[5]*SP[n, p3]*SP[nb, p2] - \ -((-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] \ -. GA[5])*SP[nb, p3])/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + (GS[n] \ -. GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . \ -GA[5]*SP[n, p3])/2 + (GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, \ -nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p3])/2 + 2*GS[n] . GA[5]*SP[n, \ -p2]*SP[nb, p3]))/2"}, +"GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . +GALR[mu, n, nb] . GA[5] - (GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . +GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p3])/2 - ((-GS[n] . GALR[mu, n, nb] . +GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . +GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p3])/2)*SP[nb, p2])/2 - +(GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p3])/2 - +(SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + +((-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + 2*GS[nb] . GA[5]*SP[n, p3]*SP[nb, p2] - +((-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p3])/2))/2 - (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + (GS[n] . GS[nb] . GALR[mu, n, nb] . +GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p3])/2 + 2*GS[n] . GA[5]*SP[n, p2]*SP[nb, p3]))/2"}, {"fcstDiracTrickLightCone-ID68", "DiracTrick[GALR[mu].GA[5].GS[p1,p2,p3,p4].GALR[mu],FCE->True]", -"-GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, \ -n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] \ -. GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] \ -. GA[5]*SP[nb, p4])/2 + (SP[nb, p3]*(GS[n] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] \ -. GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . \ -GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 + (SP[n, p3]*(GS[nb] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] \ -. GALR[mu, n, nb] . GA[5] - (GS[nb] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, \ -p4])/2 - ((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2))/2 \ -+ (SP[nb, p2]*(-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, \ -n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + (GS[n] . GS[nb] \ -. GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, \ -nb] . GA[5]*SP[n, p4])/2 + (GS[n] . GS[n] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, \ -p4])/2 + (SP[nb, p3]*(-GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p1, n, \ -nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . \ -GA[5]*SP[n, p4])/2 - (GS[n] . GS[n] . GS[n] . GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 + (SP[n, \ -p3]*(-GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, \ -n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, \ -p4])/2 + ((-4*GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, \ -nb] . GA[5] + GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, \ -nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2))/2))/2 + (SP[nb, \ -p1]*(GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] \ -. GA[5]*SP[n, p4])/2 - (GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2 - \ -(SP[nb, p3]*(-GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[n] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, \ -p4])/2 - (GS[n] . GS[n] . GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[n, p3]*(-GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 + ((-4*GS[n] \ -. GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] \ -. GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, \ -nb] . GA[5])*SP[nb, p4])/2))/2 - (SP[n, p2]*(GS[n] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] \ -. GA[5] + (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 + 2*GS[n] . GS[nb] . \ -GA[5]*SP[n, p4]*SP[nb, p3] - ((-4*GS[n] . GALR[mu, n, nb] . GSLR[p3, \ -n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[n] . GS[nb] . GALR[mu, \ -n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, \ -p4])/2))/2))/2 + (SP[n, p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, \ -nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + \ -(GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 + ((4*GALR[mu, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] - GS[n] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . \ -GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2 + (SP[nb, p3]*(-4*GALR[mu, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] \ -. GALR[mu, n, nb] . GA[5] + ((-4*GS[nb] . GALR[mu, n, nb] . GSLR[p1, \ -n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GS[nb] . GALR[mu, \ -n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5])*SP[n, p4])/2 - \ -(GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . \ -GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 + (SP[n, p3]*(-GS[nb] . \ -GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] . GA[5] - (GS[nb] . GS[nb] . GS[nb] . GALR[mu, n, nb] \ -. GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . \ -GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] \ -. GA[5]*SP[nb, p4])/2))/2))/2 + (SP[n, p1]*(GS[nb] . GALR[mu, n, nb] \ -. GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, \ -nb] . GA[5] - (GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 - ((4*GALR[mu, \ -n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] \ -- GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2 - (SP[nb, \ -p3]*(-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . \ -GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, \ -n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + ((-4*GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . \ -GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] \ -. GA[5])*SP[n, p4])/2 - (GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . \ -GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[n, \ -p3]*(-GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, \ -n, nb] . GALR[mu, n, nb] . GA[5] - (GS[nb] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, \ -p4])/2 - (GS[n] . GS[nb] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] \ -. GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[nb, p2]*(4*GALR[mu, \ -n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] \ -- GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, \ -nb] . GALR[mu, n, nb] . GA[5] - ((-4*GS[nb] . GALR[mu, n, nb] . \ -GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] + GS[n] . GS[nb] . GS[nb] . \ -GALR[mu, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5])*SP[n, \ -p4])/2 + (GS[n] . GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, n, nb] \ -. GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2 + 2*(-GS[n] . GS[nb] . GA[5] \ -+ 4*GA[5])*SP[n, p3]*SP[nb, p4]))/2))/2"}, +"-GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, +n, nb] . GA[5] - (GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, +nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 + ((GS[n] . GALR[mu, n, nb] . GSLR[p1, n, +nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, +nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2)*SP[nb, p3])/2 - (GS[n] . GALR[mu, +n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4])/2 + (SP[n, +p3]*(GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - +((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, +n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2))/2 + (SP[n, +p2]*(-GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, +nb] . GA[5] + ((-4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + +GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - +2*GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])*SP[nb, p3])/2 + +((4*GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, +n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2))/2 + (SP[nb, +p2]*(-GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, +nb] . GA[5] + (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, +nb] . GA[5]*SP[n, p4])/2 + (SP[n, p3]*(-GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GSLR[p4, +n, nb] . GALR[mu, n, nb] . GA[5] - 2*GS[n] . GALR[mu, n, nb] . GSLR[p1, n, nb] . GALR[mu, n, +nb] . GA[5]*SP[nb, p4]))/2))/2 + (SP[nb, p1]*(GS[n] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, +n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - (GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])/2 - (SP[n, p3]*(-GS[n] . GS[nb] . GALR[mu, +n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - 2*GS[n] . GALR[mu, n, nb] . GSLR[p2, +n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4]))/2 - (SP[n, p2]*(GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p3, +n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + 2*GS[n] . GS[nb] . GA[5]*SP[n, p4]*SP[nb, p3] + +2*GS[n] . GALR[mu, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5]*SP[nb, p4]))/2))/2 + (SP[n, +p1]*(GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, +nb] . GA[5] - ((-4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + +GS[n] . GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - +2*GS[nb] . GALR[mu, n, nb] . GSLR[p2, n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4])*SP[nb, p3])/2 - +((4*GALR[mu, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, +n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GALR[mu, n, nb] . GA[5])*SP[nb, p4])/2 - (SP[nb, p2]*(4*GALR[mu, +n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu, n, +nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GALR[mu, n, nb] . GA[5] + 2*GS[nb] . GALR[mu, n, nb] . GSLR[p3, +n, nb] . GALR[mu, n, nb] . GA[5]*SP[n, p4] + 2*(-GS[n] . GS[nb] . GA[5] + 4*GA[5])*SP[n, p3]*SP[nb, p4]))/2))/2"}, {"fcstDiracTrickLightCone-ID69", "DiracTrick[GALRD[mu].GA[5].GALRD[mu],FCE->True]", "-((-2 + D)*GA[5])"}, @@ -3275,37 +2934,25 @@ GA[5]*MTLRD[mu4, mu5, n, nb])"}, GA[5]*FVD[n, mu1])/2 - ((-2 + D)*GSD[n] . GA[5]*FVD[nb, mu1])/2"}, {"fcstDiracTrickLightCone-ID76", "DiracTrick[GALRD[mu].GA[5].GAD[mu1,mu2,mu3].GALRD[mu],FCE->True]", - "GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GALRD[mu, \ -n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*FVD[n, mu3])/2 - (GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] \ -. GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[nb, mu3])/2 - \ -(FVD[nb, mu2]*(-GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*FVD[n, mu3])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, nb] . \ -GALRD[mu1, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[nb, mu3])/2))/2 - \ -(FVD[n, mu2]*(-GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*FVD[n, mu3])/2 + ((-4*GALRD[mu, n, nb] . GALRD[mu1, n, nb] . \ -GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GALRD[mu1, n, nb] . GALRD[mu, n, nb] . GA[5])*FVD[nb, mu3])/2))/2 - \ -(FVD[n, mu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] + (GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*FVD[n, mu3])/2 - ((-((-4 + D)*(4*GALRD[mu3, n, nb] . GA[5] - \ -GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])) - 2*(-2 + D)*GSD[nb] . \ -GA[5]*FVD[n, mu3])*FVD[nb, mu2])/2 - ((-4*GALRD[mu, n, nb] . \ -GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . \ -GA[5])*FVD[nb, mu3])/2))/2 - (FVD[nb, mu1]*(GSD[n] . GALRD[mu, n, nb] \ -. GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] + \ -(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, \ -n, nb] . GA[5]*FVD[n, mu3])/2 + (GSD[n] . GSD[n] . GALRD[mu, n, nb] . \ -GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[nb, mu3])/2 - \ -(FVD[n, mu2]*(-((-4 + D)*GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . \ -GA[5]) - 2*(-2 + D)*GSD[n] . GA[5]*FVD[nb, mu3]))/2))/2"}, +"GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, +nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, +n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[n, mu3])/2 - +((-GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, +n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, +n, nb] . GA[5]*FVD[n, mu3])/2)*FVD[nb, mu2])/2 - (GSD[n] . GALRD[mu, n, nb] . GALRD[mu1, +n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[nb, mu3])/2 - (FVD[n, +mu2]*(-GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GALRD[mu, +n, nb] . GA[5] + ((-4*GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] . GA[5] + +GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu1, n, nb] . GALRD[mu, n, nb] . GA[5])*FVD[nb, +mu3])/2))/2 - (FVD[n, mu1]*(GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, +n, nb] . GALRD[mu, n, nb] . GA[5] - ((-((-4 + D)*(4*GALRD[mu3, n, +nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])) - 2*(-2 + D)*GSD[nb] . GA[5]*FVD[n, +mu3])*FVD[nb, mu2])/2 - ((-4*GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, +nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GALRD[mu2, n, nb] . GALRD[mu, n, +nb] . GA[5])*FVD[nb, mu3])/2))/2 - (FVD[nb, mu1]*(GSD[n] . GALRD[mu, n, nb] . GALRD[mu2, n, +nb] . GALRD[mu3, n, nb] . GALRD[mu, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GALRD[mu, n, +nb] . GALRD[mu2, n, nb] . GALRD[mu, n, nb] . GA[5]*FVD[n, mu3])/2 - (FVD[n, +mu2]*(-((-4 + D)*GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5]) - 2*(-2 + D)*GSD[n] . GA[5]*FVD[nb, mu3]))/2))/2"}, {"fcstDiracTrickLightCone-ID77", "DiracTrick[GALRD[mu].GA[5].GSD[p1].GALRD[mu],FCE->True]", "-((-4 + D)*GSLRD[p1, n, nb] . GA[5]) - ((-2 + D)*GSD[nb] . \ @@ -3322,146 +2969,69 @@ D)*GSD[nb] . GSLRD[p2, n, nb] . GA[5]) - ((-2 + D)*(-GSD[n] . GSD[nb] \ . GA[5] + 4*GA[5])*SPD[nb, p2])/2))/2"}, {"fcstDiracTrickLightCone-ID79", "DiracTrick[GALRD[mu].GA[5].GSD[p1,p2,p3].GALRD[mu],FCE->True]", -"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[n, p3])/2 - (GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p3])/2 - (SPD[nb, \ -p2]*(-GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] \ -. GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p3])/2 - (GSD[n] . \ -GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[nb, p3])/2))/2 - (SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - \ -(GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, \ -n, nb] . GA[5]*SPD[n, p3])/2 + ((-4*GALRD[mu, n, nb] . GSLRD[p1, n, \ -nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] \ -. GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p3])/2))/2 - \ -(SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] + (GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, \ -p3])/2 - ((-((-4 + D)*(4*GSLRD[p3, n, nb] . GA[5] - GSD[n] . GSD[nb] \ -. GSLRD[p3, n, nb] . GA[5])) - 2*(-2 + D)*GSD[nb] . GA[5]*SPD[n, \ -p3])*SPD[nb, p2])/2 - ((-4*GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p3])/2))/2 - \ -(SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] + (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, \ -p3])/2 + (GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb] . GA[5]*SPD[nb, p3])/2 - (SPD[n, p2]*(-((-4 + \ -D)*GSD[n] . GSD[nb] . GSLRD[p3, n, nb] . GA[5]) - 2*(-2 + D)*GSD[n] . \ -GA[5]*SPD[nb, p3]))/2))/2"}, +"GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, +nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, +n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, +p3])/2 - ((-GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, +nb] . GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, +n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p3])/2)*SPD[nb, p2])/2 - (GSD[n] . GALRD[mu, +n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, +p3])/2 - (SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GALRD[mu, n, nb] . GA[5] + ((-4*GALRD[mu, n, nb] . GSLRD[p1, n, +nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, +n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - ((-((-4 + D)*(4*GSLRD[p3, +n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[p3, n, nb] . GA[5])) - 2*(-2 + D)*GSD[nb] . GA[5]*SPD[n, +p3])*SPD[nb, p2])/2 - ((-4*GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, +nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, +n, nb] . GA[5])*SPD[nb, p3])/2))/2 - (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, +n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p3])/2 - (SPD[n, p2]*(-((-4 + +D)*GSD[n] . GSD[nb] . GSLRD[p3, n, nb] . GA[5]) - 2*(-2 + D)*GSD[n] . GA[5]*SPD[nb, p3]))/2))/2"}, {"fcstDiracTrickLightCone-ID80", "DiracTrick[GALRD[mu].GA[5].GSD[p1,p2,p3,p4].GALRD[mu],FCE->True]", - "-GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - \ -(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, \ -nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2 + (SPD[nb, p3]*(GSD[n] \ -. GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, \ -n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, \ -n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, \ -p4])/2))/2 + (SPD[n, p3]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] \ -- (GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - \ -((4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . \ -GA[5])*SPD[nb, p4])/2))/2 + (SPD[nb, p2]*(-GSD[n] . GALRD[mu, n, nb] \ -. GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, \ -n, nb] . GA[5] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 + \ -(GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, \ -nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2 + (SPD[nb, p3]*(-GSD[n] \ -. GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - \ -(GSD[n] . GSD[n] . GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2))/2 + (SPD[n, p3]*(-GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 + \ -((-4*GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] \ -. GA[5] + GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, \ -nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p4])/2))/2))/2 + (SPD[nb, \ -p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] \ -. GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, \ -nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[nb, p4])/2 - (SPD[nb, p3]*(-GSD[n] . GSD[n] . GALRD[mu, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] \ -- (GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GALRD[mu, \ -n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . \ -GA[5] - (GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, \ -nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 + ((-4*GSD[n] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5] + \ -GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GALRD[mu, n, nb] . GA[5])*SPD[nb, p4])/2))/2 - (SPD[n, p2]*(GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - \ -2*(-((-4 + D)*GSD[n] . GSLRD[p4, n, nb] . GA[5]) - ((-2 + D)*GSD[n] . \ -GSD[nb] . GA[5]*SPD[n, p4])/2)*SPD[nb, p3] - ((-4*GSD[n] . GALRD[mu, \ -n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . \ -GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, \ -nb] . GA[5])*SPD[nb, p4])/2))/2))/2 + (SPD[n, p2]*(-GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, \ -nb] . GALRD[mu, n, nb] . GA[5] + (GSD[nb] . GSD[nb] . GALRD[mu, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[n, p4])/2 + ((4*GALRD[mu, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, \ -nb] . GA[5])*SPD[nb, p4])/2 + (SPD[nb, p3]*(-4*GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] + \ -GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, \ -nb] . GALRD[mu, n, nb] . GA[5] + ((-4*GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . \ -GA[5])*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] \ -. GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2))/2 + \ -(SPD[n, p3]*(-GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] \ -. GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GSD[nb] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] \ -. GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2))/2))/2 \ -+ (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - \ -(GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - ((4*GALRD[mu, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] \ -- GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p4])/2 - (SPD[nb, \ -p3]*(-4*GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] + \ -((-4*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] \ -. GA[5] + GSD[n] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, \ -n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[n, p4])/2 - (GSD[n] . GSD[n] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . \ -GA[5]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[nb] . GSD[nb] . \ -GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, \ -nb] . GA[5] - (GSD[nb] . GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . \ -GSD[nb] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, \ -n, nb] . GA[5]*SPD[nb, p4])/2))/2 - (SPD[nb, p2]*(4*GALRD[mu, n, nb] \ -. GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - \ -GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, \ -nb] . GALRD[mu, n, nb] . GA[5] - ((-4*GSD[nb] . GALRD[mu, n, nb] . \ -GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . \ -GA[5])*SPD[n, p4])/2 + (GSD[n] . GSD[n] . GSD[nb] . GALRD[mu, n, nb] \ -. GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4])/2 - \ -2*SPD[n, p3]*(-((-4 + D)*GSD[nb] . GSLRD[p4, n, nb] . GA[5]) - ((-2 + \ -D)*(-GSD[n] . GSD[nb] . GA[5] + 4*GA[5])*SPD[nb, p4])/2)))/2))/2"}, +"-GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, +nb] . GALRD[mu, n, nb] . GA[5] - (GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, +n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 + ((GSD[n] . GALRD[mu, n, +nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, +nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, +nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2)*SPD[nb, p3])/2 - (GSD[n] . GALRD[mu, n, +nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, +p4])/2 + (SPD[n, p3]*(GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, +nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - ((4*GALRD[mu, n, nb] . GSLRD[p1, +n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, +p4])/2))/2 + (SPD[n, p2]*(-GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] + ((-4*GALRD[mu, n, nb] . GSLRD[p1, +n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, n, +nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - 2*GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p1, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])*SPD[nb, p3])/2 + ((4*GALRD[mu, +n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p4])/2))/2 + (SPD[nb, +p2]*(-GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, +n, nb] . GA[5] + (GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, +n, nb] . GA[5]*SPD[n, p4])/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p1, n, +nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - 2*GSD[n] . GALRD[mu, n, nb] . GSLRD[p1, n, +nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4]))/2))/2 + (SPD[nb, p1]*(GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, +n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])/2 - (SPD[n, +p3]*(-GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, +nb] . GA[5] - 2*GSD[n] . GALRD[mu, n, nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, +p4]))/2 - (SPD[n, p2]*(GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, +nb] . GALRD[mu, n, nb] . GA[5] - 2*(-((-4 + D)*GSD[n] . GSLRD[p4, n, nb] . GA[5]) - ((-2 + +D)*GSD[n] . GSD[nb] . GA[5]*SPD[n, p4])/2)*SPD[nb, p3] + 2*GSD[n] . GALRD[mu, n, nb] . GSLRD[p3, +n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[nb, p4]))/2))/2 + (SPD[n, p1]*(GSD[nb] . GALRD[mu, n, +nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - ((-4*GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] + GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - 2*GSD[nb] . GALRD[mu, n, +nb] . GSLRD[p2, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, p4])*SPD[nb, p3])/2 - ((4*GALRD[mu, n, +nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5] - GSD[n] . GSD[nb] . GALRD[mu, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5])*SPD[nb, p4])/2 - (SPD[nb, +p2]*(4*GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, nb] . GA[5] - +GSD[n] . GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GALRD[mu, n, +nb] . GA[5] + 2*GSD[nb] . GALRD[mu, n, nb] . GSLRD[p3, n, nb] . GALRD[mu, n, nb] . GA[5]*SPD[n, +p4] - 2*SPD[n, p3]*(-((-4 + D)*GSD[nb] . GSLRD[p4, n, nb] . GA[5]) - ((-2 + D)*(-GSD[n] . GSD[nb] . GA[5] + +4*GA[5])*SPD[nb, p4])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID81", "DiracTrick[GSLR[v].GSLR[v],FCE->True]", "SPLR[v, v, n, nb]"}, {"fcstDiracTrickLightCone-ID82", @@ -3510,34 +3080,26 @@ v, n, nb] - (FV[nb, mu1]*GS[n]*SPLR[v, v, n, nb])/2 - (FV[n, \ mu1]*GS[nb]*SPLR[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID88", "DiracTrick[GSLR[v].GA[mu1,mu2,mu3].GSLR[v],FCE->True]", -"GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, \ -n, nb] . GSLR[v, n, nb] - (GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] \ -. GALR[mu2, n, nb] . GSLR[v, n, nb]*FV[n, mu3])/2 - (GS[n] . GSLR[v, \ -n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb]*FV[nb, \ -mu3])/2 - (FV[nb, mu2]*(-GS[n] . GSLR[v, n, nb] . GALR[mu1, n, nb] . \ -GALR[mu3, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, nb] \ -. GALR[mu1, n, nb] . GSLR[v, n, nb]*FV[n, mu3])/2 - (GS[n] . GS[n] . \ -GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb]*FV[nb, mu3])/2))/2 \ -- (FV[n, mu2]*(-GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . \ -GALR[mu3, n, nb] . GSLR[v, n, nb] - (GS[nb] . GS[nb] . GSLR[v, n, nb] \ -. GALR[mu1, n, nb] . GSLR[v, n, nb]*FV[n, mu3])/2 + ((-4*GSLR[v, n, \ -nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GALR[mu1, n, nb] . GSLR[v, n, nb])*FV[nb, mu3])/2))/2 - (FV[nb, \ -mu1]*(GS[n] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . \ -GSLR[v, n, nb] + (GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] \ -. GSLR[v, n, nb]*FV[n, mu3])/2 + (GS[n] . GS[n] . GSLR[v, n, nb] . \ -GALR[mu2, n, nb] . GSLR[v, n, nb]*FV[nb, mu3])/2 - (FV[n, \ -mu2]*(2*GS[n] . GS[nb] . GSLR[v, n, nb]*FVLR[v, mu3, n, nb] - GS[n] . \ -GS[nb] . GALR[mu3, n, nb]*SPLR[v, v, n, nb] - 2*FV[nb, \ -mu3]*GS[n]*SPLR[v, v, n, nb]))/2))/2 - (FV[n, mu1]*(GS[nb] . GSLR[v, \ -n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] + \ -(GS[nb] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, \ -nb]*FV[n, mu3])/2 - ((-4*GSLR[v, n, nb] . GALR[mu2, n, nb] . GSLR[v, \ -n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GSLR[v, \ -n, nb])*FV[nb, mu3])/2 - (FV[nb, mu2]*(2*FVLR[v, mu3, n, nb]*(-GS[n] \ -. GS[nb] . GSLR[v, n, nb] + 4*GSLR[v, n, nb]) - (-GS[n] . GS[nb] . \ -GALR[mu3, n, nb] + 4*GALR[mu3, n, nb])*SPLR[v, v, n, nb] - 2*FV[n, \ -mu3]*GS[nb]*SPLR[v, v, n, nb]))/2))/2"}, +"GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, +nb] . GSLR[v, n, nb] - (GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, +nb] . GALR[mu2, n, nb] . GSLR[v, n, nb]*FV[n, mu3])/2 - ((-GS[n] . GSLR[v, +n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] - +(GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, +nb]*FV[n, mu3])/2)*FV[nb, mu2])/2 - (GS[n] . GSLR[v, n, nb] . GALR[mu1, +n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb]*FV[nb, mu3])/2 - (FV[n, +mu2]*(-GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GSLR[v, +n, nb] + ((-4*GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] + +GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb])*FV[nb, +mu3])/2))/2 - (FV[nb, mu1]*(GS[n] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GALR[mu3, +n, nb] . GSLR[v, n, nb] + (GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, +n, nb] . GSLR[v, n, nb]*FV[n, mu3])/2 - (FV[n, mu2]*(2*GS[n] . GS[nb] . GSLR[v, +n, nb]*FVLR[v, mu3, n, nb] - GS[n] . GS[nb] . GALR[mu3, n, nb]*SPLR[v, v, n, +nb] - 2*FV[nb, mu3]*GS[n]*SPLR[v, v, n, nb]))/2))/2 - (FV[n, mu1]*(GS[nb] . GSLR[v, +n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] - ((-4*GSLR[v, n, +nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, +n, nb] . GSLR[v, n, nb])*FV[nb, mu3])/2 - (FV[nb, mu2]*(2*FVLR[v, mu3, n, +nb]*(-GS[n] . GS[nb] . GSLR[v, n, nb] + 4*GSLR[v, n, nb]) - (-GS[n] . GS[nb] . GALR[mu3, +n, nb] + 4*GALR[mu3, n, nb])*SPLR[v, v, n, nb] - 2*FV[n, mu3]*GS[nb]*SPLR[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID89", "DiracTrick[GSLR[v].GS[p1].GSLR[v],FCE->True]", "2*GSLR[v, n, nb]*SPLR[p1, v, n, nb] - GSLR[p1, n, nb]*SPLR[v, v, \ @@ -3556,129 +3118,60 @@ n, nb]*SPLR[v, v, n, nb] - ((4 - GS[n] . GS[nb])*SP[nb, p2]*SPLR[v, \ v, n, nb])/2))/2"}, {"fcstDiracTrickLightCone-ID91", "DiracTrick[GSLR[v].GS[p1,p2,p3].GSLR[v],FCE->True]", -"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[v, n, nb] - (GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p3])/2 - (GS[n] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[nb, \ -p3])/2 - (SP[nb, p2]*(-GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p3, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[n, p3])/2 - (GS[n] . GS[n] . \ -GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[nb, p3])/2))/2 - \ -(SP[n, p2]*(-GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, \ -nb] . GSLR[v, n, nb] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb]*SP[n, p3])/2 + ((-4*GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] + \ -(GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, \ -nb]*SP[n, p3])/2 - ((-4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, \ -nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, \ -nb])*SP[nb, p3])/2 - (SP[nb, p2]*(2*(-GS[n] . GS[nb] . GSLR[v, n, nb] \ -+ 4*GSLR[v, n, nb])*SPLR[p3, v, n, nb] - (-GS[n] . GS[nb] . GSLR[p3, \ -n, nb] + 4*GSLR[p3, n, nb])*SPLR[v, v, n, nb] - 2*GS[nb]*SP[n, \ -p3]*SPLR[v, v, n, nb]))/2))/2 - (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] + (GS[n] . GS[nb] \ -. GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p3])/2 + \ -(GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, \ -nb]*SP[nb, p3])/2 - (SP[n, p2]*(2*GS[n] . GS[nb] . GSLR[v, n, \ -nb]*SPLR[p3, v, n, nb] - GS[n] . GS[nb] . GSLR[p3, n, nb]*SPLR[v, v, \ -n, nb] - 2*GS[n]*SP[nb, p3]*SPLR[v, v, n, nb]))/2))/2"}, +"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb] - (GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, +n, nb]*SP[n, p3])/2 - ((-GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, +n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[v, n, nb]*SP[n, p3])/2)*SP[nb, p2])/2 - (GS[n] . GSLR[v, n, +nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[nb, p3])/2 - (SP[n, +p2]*(-GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb] + ((-4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . GSLR[v, +n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] - ((-4*GSLR[v, n, +nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[v, n, nb])*SP[nb, p3])/2 - (SP[nb, p2]*(2*(-GS[n] . GS[nb] . GSLR[v, +n, nb] + 4*GSLR[v, n, nb])*SPLR[p3, v, n, nb] - (-GS[n] . GS[nb] . GSLR[p3, n, +nb] + 4*GSLR[p3, n, nb])*SPLR[v, v, n, nb] - 2*GS[nb]*SP[n, p3]*SPLR[v, v, n, +nb]))/2))/2 - (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, +nb] . GSLR[v, n, nb] + (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, +n, nb]*SP[n, p3])/2 - (SP[n, p2]*(2*GS[n] . GS[nb] . GSLR[v, n, nb]*SPLR[p3, v, n, +nb] - GS[n] . GS[nb] . GSLR[p3, n, nb]*SPLR[v, v, n, nb] - 2*GS[n]*SP[nb, p3]*SPLR[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID92", "DiracTrick[GSLR[v].GS[p1,p2,p3,p4].GSLR[v],FCE->True]", -"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + (GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, \ -nb]*SP[n, p4])/2 + (GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2 - \ -(SP[nb, p3]*(GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 \ -- (GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] \ -. GSLR[v, n, nb]*SP[nb, p4])/2))/2 - (SP[n, p3]*(GS[nb] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, \ -n, nb] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - ((4*GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] - GS[n] . GS[nb] . \ -GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, \ -nb])*SP[nb, p4])/2))/2 - (SP[nb, p2]*(-GS[n] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] \ -+ (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, \ -nb] . GSLR[v, n, nb]*SP[n, p4])/2 + (GS[n] . GS[n] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2 + \ -(SP[nb, p3]*(-GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[n] . GS[nb] . GSLR[v, \ -n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - (GS[n] . \ -GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, \ -nb]*SP[nb, p4])/2))/2 + (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, n, nb] \ -. GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . \ -GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, \ -nb]*SP[n, p4])/2 + ((-4*GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[v, n, nb] + GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb])*SP[nb, p4])/2))/2))/2 - (SP[n, p2]*(-GS[nb] \ -. GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, \ -nb] . GSLR[v, n, nb] + (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 + ((4*GSLR[v, \ -n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] - GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, \ -n, nb])*SP[nb, p4])/2 + (SP[nb, p3]*(-4*GSLR[v, n, nb] . GSLR[p1, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + \ -((-4*GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] + \ -GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, \ -n, nb])*SP[n, p4])/2 - (GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2))/2 + (SP[n, \ -p3]*(-GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p4, \ -n, nb] . GSLR[v, n, nb] - (GS[nb] . GS[nb] . GS[nb] . GSLR[v, n, nb] \ -. GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - (GS[n] . GS[nb] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[nb, \ -p4])/2))/2))/2 - (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, \ -n, nb]*SP[n, p4])/2 - (GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2 - (SP[nb, \ -p3]*(-GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, \ -nb] . GSLR[v, n, nb] - (GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - (GS[n] . GS[n] . \ -GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[nb, \ -p4])/2))/2 - (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GS[nb] \ -. GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 + \ -((-4*GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] + \ -GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, \ -n, nb])*SP[nb, p4])/2))/2 - (SP[n, p2]*(GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + (GS[n] . \ -GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, \ -nb]*SP[n, p4])/2 - ((-4*GS[n] . GSLR[v, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] + GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, \ -n, nb] . GSLR[v, n, nb])*SP[nb, p4])/2 - 2*SP[nb, p3]*(2*GS[n] . \ -GSLR[v, n, nb]*SPLR[p4, v, n, nb] - GS[n] . GSLR[p4, n, nb]*SPLR[v, \ -v, n, nb] - (GS[n] . GS[nb]*SP[n, p4]*SPLR[v, v, n, nb])/2)))/2))/2 - \ -(SP[n, p1]*(GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[nb] . GS[nb] . GSLR[v, \ -n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[n, \ -p4])/2 - ((4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p3, n, nb] . GSLR[v, n, nb])*SP[nb, p4])/2 - (SP[nb, \ -p3]*(-4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, \ -n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, \ -n, nb] . GSLR[v, n, nb] + ((-4*GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, \ -nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb])*SP[n, p4])/2 - (GS[n] . GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[nb, \ -p4])/2))/2 - (SP[n, p3]*(-GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[nb] . GS[nb] . GS[nb] \ -. GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - \ -(GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, \ -n, nb]*SP[nb, p4])/2))/2 - (SP[nb, p2]*(4*GSLR[v, n, nb] . GSLR[p3, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - GS[n] . GS[nb] . GSLR[v, \ -n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - \ -((-4*GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] + \ -GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, \ -n, nb])*SP[n, p4])/2 + (GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2 - 2*SP[n, \ -p3]*(2*GS[nb] . GSLR[v, n, nb]*SPLR[p4, v, n, nb] - GS[nb] . GSLR[p4, \ -n, nb]*SPLR[v, v, n, nb] - ((4 - GS[n] . GS[nb])*SP[nb, p4]*SPLR[v, \ -v, n, nb])/2)))/2))/2"}, +"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, +nb] + (GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, +nb]*SP[n, p4])/2 - ((GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, +nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, +n, nb]*SP[n, p4])/2)*SP[nb, p3])/2 + (GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, +nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[nb, p4])/2 - (SP[n, p3]*(GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - ((4*GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, +nb] . GSLR[v, n, nb])*SP[nb, p4])/2))/2 - (SP[n, p2]*(-GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + ((-4*GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, +nb] . GSLR[v, n, nb] - 2*GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb]*SP[n, p4])*SP[nb, +p3])/2 + ((4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] - GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb])*SP[nb, p4])/2))/2 - (SP[nb, p2]*(-GS[n] . GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + (GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 + (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - 2*GS[n] . GSLR[v, n, nb] . GSLR[p1, +n, nb] . GSLR[v, n, nb]*SP[nb, p4]))/2))/2 - (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[n, p4])/2 - (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - 2*GS[n] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[v, n, nb]*SP[nb, p4]))/2 - (SP[n, p2]*(GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, +n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + 2*GS[n] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb]*SP[nb, p4] - 2*SP[nb, p3]*(2*GS[n] . GSLR[v, n, nb]*SPLR[p4, v, n, nb] - GS[n] . GSLR[p4, +n, nb]*SPLR[v, v, n, nb] - (GS[n] . GS[nb]*SP[n, p4]*SPLR[v, v, n, nb])/2)))/2))/2 - (SP[n, +p1]*(GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, +n, nb] - ((-4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] + GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] - 2*GS[nb] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[v, n, nb]*SP[n, p4])*SP[nb, p3])/2 - ((4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, +n, nb] . GSLR[v, n, nb] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb])*SP[nb, p4])/2 - (SP[nb, p2]*(4*GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, +n, nb] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, +nb] + 2*GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb]*SP[n, p4] - 2*SP[n, p3]*(2*GS[nb] . GSLR[v, +n, nb]*SPLR[p4, v, n, nb] - GS[nb] . GSLR[p4, n, nb]*SPLR[v, v, n, nb] - ((4 - GS[n] . GS[nb])*SP[nb, p4]*SPLR[v, v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID93", "DiracTrick[GSLRD[v].GSLRD[v],FCE->True]", "SPLRD[v, v, n, nb]"}, {"fcstDiracTrickLightCone-ID94", @@ -3728,36 +3221,26 @@ v] - (FVD[nb, mu1]*GSD[n]*SPLRD[v, v, n, nb])/2 - (FVD[n, \ mu1]*GSD[nb]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID100", "DiracTrick[GSLRD[v].GAD[mu1,mu2,mu3].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSLRD[v, n, nb] . \ -GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, \ -mu3])/2 - (GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, \ -n, nb] . GSLRD[v, n, nb]*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(-GSD[n] . \ -GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, \ -nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . \ -GSLRD[v, n, nb]*FVD[n, mu3])/2 - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . \ -GALRD[mu1, n, nb] . GSLRD[v, n, nb]*FVD[nb, mu3])/2))/2 - (FVD[n, \ -mu2]*(-GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, \ -nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . \ -GALRD[mu1, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 + ((-4*GSLRD[v, n, \ -nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb])*FVD[nb, \ -mu3])/2))/2 - (FVD[nb, mu1]*(GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, \ -nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 \ -+ (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, \ -n, nb]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, \ -n, nb]*FVLRD[v, mu3, n, nb] - GSD[n] . GSD[nb] . GALRD[mu3, n, \ -nb]*SPLRD[v, v] - 2*FVD[nb, mu3]*GSD[n]*SPLRD[v, v, n, nb]))/2))/2 - \ -(FVD[n, mu1]*(GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSD[nb] . GSLRD[v, \ -n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[n, mu3])/2 - \ -((-4*GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] + GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, \ -nb])*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(2*FVLRD[v, mu3, n, nb]*(-GSD[n] \ -. GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb]) - (-GSD[n] . GSD[nb] \ -. GALRD[mu3, n, nb] + 4*GALRD[mu3, n, nb])*SPLRD[v, v] - 2*FVD[n, \ -mu3]*GSD[nb]*SPLRD[v, v, n, nb]))/2))/2"}, +"GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, +n, nb] - (GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, +n, nb]*FVD[n, mu3])/2 - ((-GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, +nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GSLRD[v, +n, nb]*FVD[n, mu3])/2)*FVD[nb, mu2])/2 - (GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, +nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(-GSD[nb] . GSLRD[v, +n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] + ((-4*GSLRD[v, +n, nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, +nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb])*FVD[nb, mu3])/2))/2 - (FVD[nb, +mu1]*(GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, +n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, +nb]*FVD[n, mu3])/2 - (FVD[n, mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, n, nb]*FVLRD[v, +mu3, n, nb] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb]*SPLRD[v, v, n, nb] - 2*FVD[nb, +mu3]*GSD[n]*SPLRD[v, v, n, nb]))/2))/2 - (FVD[n, mu1]*(GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, +n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] - ((-4*GSLRD[v, n, nb] . GALRD[mu2, +n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, +nb] . GSLRD[v, n, nb])*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(2*FVLRD[v, mu3, n, +nb]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb]) - (-GSD[n] . GSD[nb] . GALRD[mu3, +n, nb] + 4*GALRD[mu3, n, nb])*SPLRD[v, v, n, nb] - 2*FVD[n, mu3]*GSD[nb]*SPLRD[v, v, n, +nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID101", "DiracTrick[GSLRD[v].GSD[p1].GSLRD[v],FCE->True]", "2*GSLRD[v, n, nb]*SPLRD[p1, v, n, nb] - GSLRD[p1, n, nb]*SPLRD[v, v, n, nb] - @@ -3777,65 +3260,55 @@ p2]*SPLRD[v, v, n, nb])/2))/2"}, "DiracTrick[GSLRD[v].GSD[p1,p2,p3].GSLRD[v],FCE->True]", "GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - +((-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - +(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2)*SPD[nb, p2])/2 - (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2 - -(SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - -(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2))/2 - -(SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - -(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 + - ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2))/2 - -(SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + -(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 - - ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, - n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2 - - (SPD[nb, p2]*(2*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb])*SPLRD[p3, v, - n, nb] - (-GSD[n] . GSD[nb] . GSLRD[p3, n, nb] + 4*GSLRD[p3, n, nb])*SPLRD[v, v, n, nb] - 2*GSD[nb]*SPD[n, p3]*SPLRD[v, v, n, nb]))/2))/2 - -(SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, -nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p3])/2 + - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p3])/2 - - (SPD[n, p2]*(2*GSD[n] . GSD[nb] . GSLRD[v, n, nb]*SPLRD[p3, v, n, nb] - GSD[n] . GSD[nb] . GSLRD[p3, n, - nb]*SPLRD[v, v, n, nb] - 2*GSD[n]*SPD[nb, p3]*SPLRD[v, v, n, nb]))/2))/2"}, +(SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + +((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, +nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, +nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, +nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p3])/2 - +(SPD[nb, p2]*(2*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] + 4*GSLRD[v, n, nb])*SPLRD[p3, v, n, nb] - +(-GSD[n] . GSD[nb] . GSLRD[p3, n, nb] + 4*GSLRD[p3, n, nb])*SPLRD[v, v, n, nb] - 2*GSD[nb]*SPD[n, +p3]*SPLRD[v, v, n, nb]))/2))/2 - (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, +n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, +nb]*SPD[n, p3])/2 - (SPD[n, p2]*(2*GSD[n] . GSD[nb] . GSLRD[v, n, nb]*SPLRD[p3, v, n, nb] - +GSD[n] . GSD[nb] . GSLRD[p3, n, nb]*SPLRD[v, v, n, nb] - 2*GSD[n]*SPD[nb, p3]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID104", "DiracTrick[GSLRD[v].GSD[p1,p2,p3,p4].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + -(GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - -(SPD[nb, p3]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - -(SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - -(SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 + - (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 + - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2))/2 - -(SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + - ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 + - (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + - ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 + - (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2))/2 - -(SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - - (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - - (SPD[n, p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 - - 2*SPD[nb, p3]*(2*GSD[n] . GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - GSD[n] . GSLRD[p4, n, nb]*SPLRD[v, v, n, nb] - (GSD[n] . GSD[nb]*SPD[n, p4]*SPLRD[v, v, n, nb])/2)))/2))/2 - -(SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - ((4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2 - - (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + - ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 - - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - - (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 - - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2))/2 - - (SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - - ((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[n, p4])/2 + - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - 2*SPD[n, p3]*(2*GSD[nb] . GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - GSD[nb] . GSLRD[p4, n, nb]*SPLRD[v, v, n, nb] - - ((4 - GSD[n] . GSD[nb])*SPD[nb, p4]*SPLRD[v, v, n, nb])/2)))/2))/2"}, +"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, +nb] + (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, +p4])/2 - ((GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, +nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[n, +p4])/2)*SPD[nb, p3])/2 + (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, +nb] . GSLRD[v, n, nb]*SPD[nb, p4])/2 - (SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, +nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, +n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb])*SPD[nb, +p4])/2))/2 - (SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, +nb] . GSLRD[v, n, nb] + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, +nb] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - 2*GSD[nb] . GSLRD[v, +n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[n, p4])*SPD[nb, p3])/2 + ((4*GSLRD[v, n, nb] . GSLRD[p1, n, +nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GSLRD[v, n, nb])*SPD[nb, p4])/2))/2 - (SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GSLRD[v, n, nb]*SPD[n, p4])/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, +n, nb] . GSLRD[v, n, nb] - 2*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4]))/2))/2 - (SPD[nb, +p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, +nb] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[n, +p4])/2 - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, +n, nb] - 2*GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4]))/2 - (SPD[n, +p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + 2*GSD[n] . GSLRD[v, +n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb]*SPD[nb, p4] - 2*SPD[nb, p3]*(2*GSD[n] . GSLRD[v, n, nb]*SPLRD[p4, v, +n, nb] - GSD[n] . GSLRD[p4, n, nb]*SPLRD[v, v, n, nb] - (GSD[n] . GSD[nb]*SPD[n, p4]*SPLRD[v, v, n, +nb])/2)))/2))/2 - (SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, +nb] . GSLRD[v, n, nb] - ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + GSD[n] . GSD[nb] . GSLRD[v, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - 2*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, +n, nb]*SPD[n, p4])*SPD[nb, p3])/2 - ((4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, +nb] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb])*SPD[nb, +p4])/2 - (SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] - GSD[n] . GSD[nb] . GSLRD[v, +n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] + 2*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, +nb] . GSLRD[v, n, nb]*SPD[n, p4] - 2*SPD[n, p3]*(2*GSD[nb] . GSLRD[v, n, nb]*SPLRD[p4, v, n, nb] - GSD[nb] . GSLRD[p4, +n, nb]*SPLRD[v, v, n, nb] - ((4 - GSD[n] . GSD[nb])*SPD[nb, p4]*SPLRD[v, v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID105", "DiracTrick[GSLR[v].GA[5].GSLR[v],FCE->True]", "-(GA[5]*SPLR[v, v, n, nb])"}, @@ -3888,37 +3361,25 @@ GA[5]*SPLR[v, v, n, nb] - (GS[nb] . GA[5]*FV[n, mu1]*SPLR[v, v, n, \ nb])/2 - (GS[n] . GA[5]*FV[nb, mu1]*SPLR[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID112", "DiracTrick[GSLR[v].GA[5].GA[mu1,mu2,mu3].GSLR[v],FCE->True]", -"GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, \ -n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GSLR[v, n, nb] . \ -GALR[mu1, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5]*FV[n, \ -mu3])/2 - (GS[n] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, \ -nb] . GSLR[v, n, nb] . GA[5]*FV[nb, mu3])/2 - (FV[nb, mu2]*(-GS[n] . \ -GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] \ -. GA[5] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . \ -GSLR[v, n, nb] . GA[5]*FV[n, mu3])/2 - (GS[n] . GS[n] . GSLR[v, n, \ -nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] . GA[5]*FV[nb, mu3])/2))/2 - \ -(FV[n, mu2]*(-GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu3, \ -n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . \ -GALR[mu1, n, nb] . GSLR[v, n, nb] . GA[5]*FV[n, mu3])/2 + \ -((-4*GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] . GA[5] + \ -GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] . \ -GA[5])*FV[nb, mu3])/2))/2 - (FV[n, mu1]*(GS[nb] . GSLR[v, n, nb] . \ -GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] . GA[5] + \ -(GS[nb] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] \ -. GA[5]*FV[n, mu3])/2 - ((-4*GSLR[v, n, nb] . GALR[mu2, n, nb] . \ -GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, \ -n, nb] . GSLR[v, n, nb] . GA[5])*FV[nb, mu3])/2 - (FV[nb, \ -mu2]*(2*(4*GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GA[5])*FVLR[v, mu3, n, nb] - (4*GALR[mu3, n, nb] . GA[5] - GS[n] . \ -GS[nb] . GALR[mu3, n, nb] . GA[5])*SPLR[v, v, n, nb] - 2*GS[nb] . \ -GA[5]*FV[n, mu3]*SPLR[v, v, n, nb]))/2))/2 - (FV[nb, mu1]*(GS[n] . \ -GSLR[v, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] \ -. GA[5] + (GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] . \ -GSLR[v, n, nb] . GA[5]*FV[n, mu3])/2 + (GS[n] . GS[n] . GSLR[v, n, \ -nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5]*FV[nb, mu3])/2 - \ -(FV[n, mu2]*(2*GS[n] . GS[nb] . GSLR[v, n, nb] . GA[5]*FVLR[v, mu3, \ -n, nb] - GS[n] . GS[nb] . GALR[mu3, n, nb] . GA[5]*SPLR[v, v, n, nb] \ -- 2*GS[n] . GA[5]*FV[nb, mu3]*SPLR[v, v, n, nb]))/2))/2"}, +"GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] . +GA[5] - (GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . +GA[5]*FV[n, mu3])/2 - ((-GS[n] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . +GSLR[v, n, nb] . GA[5] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, n, nb] . GSLR[v, +n, nb] . GA[5]*FV[n, mu3])/2)*FV[nb, mu2])/2 - (GS[n] . GSLR[v, n, nb] . GALR[mu1, +n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5]*FV[nb, mu3])/2 - (FV[n, mu2]*(-GS[nb] . +GSLR[v, n, nb] . GALR[mu1, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] . GA[5] + ((-4*GSLR[v, +n, nb] . GALR[mu1, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GALR[mu1, +n, nb] . GSLR[v, n, nb] . GA[5])*FV[nb, mu3])/2))/2 - (FV[n, mu1]*(GS[nb] . GSLR[v, n, +nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] . GA[5] - ((-4*GSLR[v, n, +nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, +nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5])*FV[nb, mu3])/2 - (FV[nb, mu2]*(2*(4*GSLR[v, +n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . GA[5])*FVLR[v, mu3, n, nb] - (4*GALR[mu3, +n, nb] . GA[5] - GS[n] . GS[nb] . GALR[mu3, n, nb] . GA[5])*SPLR[v, v, n, nb] - +2*GS[nb] . GA[5]*FV[n, mu3]*SPLR[v, v, n, nb]))/2))/2 - (FV[nb, mu1]*(GS[n] . GSLR[v, +n, nb] . GALR[mu2, n, nb] . GALR[mu3, n, nb] . GSLR[v, n, nb] . GA[5] + (GS[n] . +GS[nb] . GSLR[v, n, nb] . GALR[mu2, n, nb] . GSLR[v, n, nb] . GA[5]*FV[n, mu3])/2 - (FV[n, +mu2]*(2*GS[n] . GS[nb] . GSLR[v, n, nb] . GA[5]*FVLR[v, mu3, n, nb] - GS[n] . GS[nb] . +GALR[mu3, n, nb] . GA[5]*SPLR[v, v, n, nb] - 2*GS[n] . GA[5]*FV[nb, mu3]*SPLR[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID113", "DiracTrick[GSLR[v].GA[5].GS[p1].GSLR[v],FCE->True]", "2*GSLR[v, n, nb] . GA[5]*SPLR[p1, v, n, nb] - GSLR[p1, n, nb] . \ @@ -3938,141 +3399,71 @@ v, n, nb] - ((-GS[n] . GS[nb] . GA[5] + 4*GA[5])*SP[nb, p2]*SPLR[v, \ v, n, nb])/2))/2"}, {"fcstDiracTrickLightCone-ID115", "DiracTrick[GSLR[v].GA[5].GS[p1,p2,p3].GSLR[v],FCE->True]", -"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, \ -nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p3])/2 - (GS[n] \ -. GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] \ -. GA[5]*SP[nb, p3])/2 - (SP[nb, p2]*(-GS[n] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[n, p3])/2 - (GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p1, n, \ -nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p3])/2))/2 - (SP[n, p2]*(-GS[nb] \ -. GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] \ -. GA[5] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[v, n, nb] . GA[5]*SP[n, p3])/2 + ((-4*GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p3])/2))/2 - (SP[n, \ -p1]*(GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] . GA[5] + (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p3])/2 - ((-4*GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, \ -n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p3])/2 - \ -(SP[nb, p2]*(2*(4*GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, \ -n, nb] . GA[5])*SPLR[p3, v, n, nb] - (4*GSLR[p3, n, nb] . GA[5] - \ -GS[n] . GS[nb] . GSLR[p3, n, nb] . GA[5])*SPLR[v, v, n, nb] - \ -2*GS[nb] . GA[5]*SP[n, p3]*SPLR[v, v, n, nb]))/2))/2 - (SP[nb, \ -p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] . GA[5] + (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p3])/2 + (GS[n] . GS[n] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, \ -p3])/2 - (SP[n, p2]*(2*GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GA[5]*SPLR[p3, v, n, nb] - GS[n] . GS[nb] . GSLR[p3, n, nb] . \ -GA[5]*SPLR[v, v, n, nb] - 2*GS[n] . GA[5]*SP[nb, p3]*SPLR[v, v, n, \ -nb]))/2))/2"}, +"GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . +GA[5] - (GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . +GA[5]*SP[n, p3])/2 - ((-GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb] . GA[5] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . +GA[5]*SP[n, p3])/2)*SP[nb, p2])/2 - (GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, +n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p3])/2 - (SP[n, p2]*(-GS[nb] . GSLR[v, n, nb] . +GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5] + ((-4*GSLR[v, n, nb] . GSLR[p1, +n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, +n, nb] . GA[5])*SP[nb, p3])/2))/2 - (SP[n, p1]*(GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5] - ((-4*GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, +n, nb] . GA[5])*SP[nb, p3])/2 - (SP[nb, p2]*(2*(4*GSLR[v, n, nb] . GA[5] - GS[n] . +GS[nb] . GSLR[v, n, nb] . GA[5])*SPLR[p3, v, n, nb] - (4*GSLR[p3, n, nb] . GA[5] - +GS[n] . GS[nb] . GSLR[p3, n, nb] . GA[5])*SPLR[v, v, n, nb] - 2*GS[nb] . GA[5]*SP[n, +p3]*SPLR[v, v, n, nb]))/2))/2 - (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5] + (GS[n] . GS[nb] . GSLR[v, n, nb] . +GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p3])/2 - (SP[n, p2]*(2*GS[n] . GS[nb] . +GSLR[v, n, nb] . GA[5]*SPLR[p3, v, n, nb] - GS[n] . GS[nb] . GSLR[p3, n, nb] . GA[5]* +SPLR[v, v, n, nb] - 2*GS[n] . GA[5]*SP[nb, p3]*SPLR[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID116", "DiracTrick[GSLR[v].GA[5].GS[p1,p2,p3,p4].GSLR[v],FCE->True]", -"-GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, \ -n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . GSLR[v, n, nb] . GSLR[p1, n, \ -nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[nb, p4])/2 + (SP[nb, p3]*(GS[n] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - \ -(GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] \ -. GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . GS[n] . GSLR[v, n, \ -nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[nb, p4])/2))/2 + (SP[n, p3]*(GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] \ -. GA[5] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 - ((4*GSLR[v, \ -n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5] - \ -GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . \ -GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2))/2 + (SP[nb, p2]*(-GS[n] . \ -GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] \ -. GSLR[v, n, nb] . GA[5] + (GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, \ -p4])/2 + (GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, \ -n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2 + (SP[nb, p3]*(-GS[n] . \ -GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, \ -n, nb] . GA[5] - (GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 - (GS[n] . GS[n] . GS[n] \ -. GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, \ -p4])/2))/2 + (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . GS[nb] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[n, p4])/2 + ((-4*GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[v, n, nb] . GA[5] + GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2))/2))/2 + \ -(SP[n, p2]*(-GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + (GS[nb] . GS[nb] . \ -GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[n, p4])/2 + ((4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, \ -n, nb] . GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, \ -p4])/2 + (SP[nb, p3]*(-4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p4, \ -n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + \ -((-4*GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . \ -GA[5] + GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . \ -GSLR[v, n, nb] . GA[5])*SP[n, p4])/2 - (GS[n] . GS[n] . GS[nb] . \ -GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, \ -p4])/2))/2 + (SP[n, p3]*(-GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GS[nb] \ -. GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[n, p4])/2 - (GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2))/2))/2 + \ -(SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, \ -nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . GS[nb] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[n, p4])/2 - (GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, \ -nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2 - \ -(SP[nb, p3]*(-GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . \ -GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . GS[n] . GS[nb] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, \ -p4])/2 - (GS[n] . GS[n] . GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . \ -GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[n, p3]*(-GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, \ -n, nb] . GA[5] - (GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 + ((-4*GS[n] . GSLR[v, \ -n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . \ -GA[5])*SP[nb, p4])/2))/2 - (SP[n, p2]*(GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + \ -(GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, \ -n, nb] . GA[5]*SP[n, p4])/2 - ((-4*GS[n] . GSLR[v, n, nb] . GSLR[p3, \ -n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[n] . GS[nb] . GSLR[v, n, \ -nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2 - \ -2*SP[nb, p3]*(2*GS[n] . GSLR[v, n, nb] . GA[5]*SPLR[p4, v, n, nb] - \ -GS[n] . GSLR[p4, n, nb] . GA[5]*SPLR[v, v, n, nb] - (GS[n] . GS[nb] . \ -GA[5]*SP[n, p4]*SPLR[v, v, n, nb])/2)))/2))/2 + (SP[n, p1]*(GS[nb] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] \ -. GSLR[v, n, nb] . GA[5] - (GS[nb] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, \ -p4])/2 - ((4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2 - \ -(SP[nb, p3]*(-4*GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . \ -GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, \ -n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + ((-4*GS[nb] . \ -GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . \ -GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . \ -GA[5])*SP[n, p4])/2 - (GS[n] . GS[n] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[n, \ -p3]*(-GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, \ -n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GS[nb] . GS[nb] . GSLR[v, \ -n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 - \ -(GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, \ -n, nb] . GA[5]*SP[nb, p4])/2))/2 - (SP[nb, p2]*(4*GSLR[v, n, nb] . \ -GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - GS[n] . \ -GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, \ -n, nb] . GA[5] - ((-4*GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . \ -GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GS[nb] . GSLR[v, n, nb] . \ -GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5])*SP[n, p4])/2 + (GS[n] . \ -GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . \ -GA[5]*SP[nb, p4])/2 - 2*SP[n, p3]*(2*GS[nb] . GSLR[v, n, nb] . \ -GA[5]*SPLR[p4, v, n, nb] - GS[nb] . GSLR[p4, n, nb] . GA[5]*SPLR[v, \ -v, n, nb] - ((-GS[n] . GS[nb] . GA[5] + 4*GA[5])*SP[nb, p4]*SPLR[v, \ -v, n, nb])/2)))/2))/2"}, +"-GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . +GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[nb] . GSLR[v, n, nb] . +GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, +p4])/2 + ((GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, +n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, +nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2)*SP[nb, p3])/2 - +(GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . +GSLR[v, n, nb] . GA[5]*SP[nb, p4])/2 + (SP[n, p3]*(GS[nb] . GSLR[v, n, nb] . +GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - +((4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5] - +GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, +nb] . GA[5])*SP[nb, p4])/2))/2 + (SP[n, p2]*(-GS[nb] . GSLR[v, n, nb] . GSLR[p1, +n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + ((-4*GSLR[v, +n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . +GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . +GA[5] - 2*GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, +p4])*SP[nb, p3])/2 + ((4*GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, +n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, +nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2))/2 + (SP[nb, p2]*(-GS[n] . GSLR[v, n, +nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + +(GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . +GA[5]*SP[n, p4])/2 + (SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p1, n, nb] . +GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - 2*GS[n] . GSLR[v, n, nb] . GSLR[p1, n, nb] . +GSLR[v, n, nb] . GA[5]*SP[nb, p4]))/2))/2 + (SP[nb, p1]*(GS[n] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - (GS[n] . GS[nb] . +GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])/2 - +(SP[n, p3]*(-GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p4, n, nb] . GSLR[v, +n, nb] . GA[5] - 2*GS[n] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[v, n, nb] . GA[5]*SP[nb, +p4]))/2 - (SP[n, p2]*(GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . +GSLR[v, n, nb] . GA[5] + 2*GS[n] . GSLR[v, n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . +GA[5]*SP[nb, p4] - 2*SP[nb, p3]*(2*GS[n] . GSLR[v, n, nb] . GA[5]*SPLR[p4, v, n, nb] - +GS[n] . GSLR[p4, n, nb] . GA[5]*SPLR[v, v, n, nb] - (GS[n] . GS[nb] . GA[5]*SP[n, p4]*SPLR[v, +v, n, nb])/2)))/2))/2 + (SP[n, p1]*(GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, nb] . GSLR[p3, n, +nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - ((-4*GSLR[v, n, nb] . GSLR[p2, n, nb] . +GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - 2*GS[nb] . GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4])*SP[nb, p3])/2 - ((4*GSLR[v, n, nb] . GSLR[p2, n, +nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, n, nb] . GSLR[p2, +n, nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5])*SP[nb, p4])/2 - (SP[nb, p2]*(4*GSLR[v, +n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] - GS[n] . GS[nb] . GSLR[v, +n, nb] . GSLR[p3, n, nb] . GSLR[p4, n, nb] . GSLR[v, n, nb] . GA[5] + 2*GS[nb] . GSLR[v, n, +nb] . GSLR[p3, n, nb] . GSLR[v, n, nb] . GA[5]*SP[n, p4] - 2*SP[n, p3]*(2*GS[nb] . GSLR[v, n, +nb] . GA[5]*SPLR[p4, v, n, nb] - GS[nb] . GSLR[p4, n, nb] . GA[5]*SPLR[v, v, n, nb] - +((-GS[n] . GS[nb] . GA[5] + 4*GA[5])*SP[nb, p4]*SPLR[v, v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID117", "DiracTrick[GSLRD[v].GA[5].GSLRD[v],FCE->True]", "-(GA[5]*SPLRD[v, v, n, nb])"}, @@ -4126,39 +3517,27 @@ nb] . GA[5]*SPLRD[v, v] - (GSD[nb] . GA[5]*FVD[n, mu1]*SPLRD[v, v, n, \ nb])/2 - (GSD[n] . GA[5]*FVD[nb, mu1]*SPLRD[v, v, n, nb])/2"}, {"fcstDiracTrickLightCone-ID124", "DiracTrick[GSLRD[v].GA[5].GAD[mu1,mu2,mu3].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . \ -GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSLRD[v, n, \ -nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*FVD[n, mu3])/2 - (GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] \ -. GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[nb, mu3])/2 - \ -(FVD[nb, mu2]*(-GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . \ -GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, \ -mu3])/2 - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . \ -GSLRD[v, n, nb] . GA[5]*FVD[nb, mu3])/2))/2 - (FVD[n, mu2]*(-GSD[nb] \ -. GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, \ -n, nb] . GA[5] - (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, \ -nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2 + ((-4*GSLRD[v, n, nb] . \ -GALRD[mu1, n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb] . \ -GA[5])*FVD[nb, mu3])/2))/2 - (FVD[n, mu1]*(GSD[nb] . GSLRD[v, n, nb] \ -. GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] + \ -(GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, \ -n, nb] . GA[5]*FVD[n, mu3])/2 - ((-4*GSLRD[v, n, nb] . GALRD[mu2, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5])*FVD[nb, mu3])/2 - \ -(FVD[nb, mu2]*(2*(4*GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GA[5])*FVLRD[v, mu3, n, nb] - (4*GALRD[mu3, n, nb] \ -. GA[5] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])*SPLRD[v, v] - \ -2*GSD[nb] . GA[5]*FVD[n, mu3]*SPLRD[v, v, n, nb]))/2))/2 - (FVD[nb, \ -mu1]*(GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2 + (GSD[n] \ -. GSD[n] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, \ -n, nb] . GA[5]*FVLRD[v, mu3, n, nb] - GSD[n] . GSD[nb] . GALRD[mu3, \ -n, nb] . GA[5]*SPLRD[v, v] - 2*GSD[n] . GA[5]*FVD[nb, mu3]*SPLRD[v, v, \ -n, nb]))/2))/2"}, +"GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . +GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, +n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2 - ((-GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, +n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, +nb] . GALRD[mu1, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2)*FVD[nb, mu2])/2 - +(GSD[n] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] . +GA[5]*FVD[nb, mu3])/2 - (FVD[n, mu2]*(-GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . +GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] + ((-4*GSLRD[v, n, nb] . GALRD[mu1, n, nb] . +GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu1, n, nb] . GSLRD[v, +n, nb] . GA[5])*FVD[nb, mu3])/2))/2 - (FVD[n, mu1]*(GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, +n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] - ((-4*GSLRD[v, n, nb] . GALRD[mu2, +n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GALRD[mu2, n, nb] . +GSLRD[v, n, nb] . GA[5])*FVD[nb, mu3])/2 - (FVD[nb, mu2]*(2*(4*GSLRD[v, n, nb] . GA[5] - +GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GA[5])*FVLRD[v, mu3, n, nb] - (4*GALRD[mu3, n, nb] . +GA[5] - GSD[n] . GSD[nb] . GALRD[mu3, n, nb] . GA[5])*SPLRD[v, v, n, nb] - 2*GSD[nb] . +GA[5]*FVD[n, mu3]*SPLRD[v, v, n, nb]))/2))/2 - (FVD[nb, mu1]*(GSD[n] . GSLRD[v, n, nb] . +GALRD[mu2, n, nb] . GALRD[mu3, n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . +GSLRD[v, n, nb] . GALRD[mu2, n, nb] . GSLRD[v, n, nb] . GA[5]*FVD[n, mu3])/2 - (FVD[n, +mu2]*(2*GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GA[5]*FVLRD[v, mu3, n, nb] - GSD[n] . +GSD[nb] . GALRD[mu3, n, nb] . GA[5]*SPLRD[v, v, n, nb] - 2*GSD[n] . GA[5]*FVD[nb, +mu3]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID125", "DiracTrick[GSLRD[v].GA[5].GSD[p1].GSLRD[v],FCE->True]", "-(GSLRD[p1, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSLRD[v, n, nb] . \ @@ -4178,156 +3557,62 @@ GA[5]*SPLRD[p2, v, n, nb] - ((-GSD[n] . GSD[nb] . GA[5] + \ 4*GA[5])*SPD[nb, p2]*SPLRD[v, v, n, nb])/2))/2"}, {"fcstDiracTrickLightCone-ID127", "DiracTrick[GSLRD[v].GA[5].GSD[p1,p2,p3].GSLRD[v],FCE->True]", -"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, \ -p3])/2 - (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p3])/2 - (SPD[nb, p2]*(-GSD[n] \ -. GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] \ -. GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 - (GSD[n] . GSD[n] . GSLRD[v, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, \ -p3])/2))/2 - (SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSD[nb] \ -. GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, \ -p3])/2 + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . \ -GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[v, n, nb] . GA[5])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] . GA[5] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] \ -. GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 - ((-4*GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, \ -p3])/2 - (SPD[nb, p2]*(-((4*GSLRD[p3, n, nb] . GA[5] - GSD[n] . \ -GSD[nb] . GSLRD[p3, n, nb] . GA[5])*SPLRD[v, v]) + 2*(4*GSLRD[v, n, nb] \ -. GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GA[5])*SPLRD[p3, v, n, \ -nb] - 2*GSD[nb] . GA[5]*SPD[n, p3]*SPLRD[v, v, n, nb]))/2))/2 - \ -(SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, \ -n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 + \ -(GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, \ -nb] . GA[5]*SPD[nb, p3])/2 - (SPD[n, p2]*(-(GSD[n] . GSD[nb] . \ -GSLRD[p3, n, nb] . GA[5]*SPLRD[v, v]) + 2*GSD[n] . GSD[nb] . GSLRD[v, \ -n, nb] . GA[5]*SPLRD[p3, v, n, nb] - 2*GSD[n] . GA[5]*SPD[nb, \ -p3]*SPLRD[v, v, n, nb]))/2))/2"}, +"GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - +(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 - +((-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - +(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2)*SPD[nb, +p2])/2 - (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . +GA[5]*SPD[nb, p3])/2 - (SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, +n, nb] . GSLRD[v, n, nb] . GA[5] + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, +nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . +GA[5])*SPD[nb, p3])/2))/2 - (SPD[n, p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . +GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - ((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . +GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, +n, nb] . GA[5])*SPD[nb, p3])/2 - (SPD[nb, p2]*(2*(4*GSLRD[v, n, nb] . GA[5] - GSD[n] . +GSD[nb] . GSLRD[v, n, nb] . GA[5])*SPLRD[p3, v, n, nb] - (4*GSLRD[p3, n, nb] . GA[5] - +GSD[n] . GSD[nb] . GSLRD[p3, n, nb] . GA[5])*SPLRD[v, v, n, nb] - 2*GSD[nb] . GA[5]*SPD[n, +p3]*SPLRD[v, v, n, nb]))/2))/2 - (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . +GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, +n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p3])/2 - (SPD[n, p2]*(2*GSD[n] . GSD[nb] . GSLRD[v, +n, nb] . GA[5]*SPLRD[p3, v, n, nb] - GSD[n] . GSD[nb] . GSLRD[p3, n, nb] . GA[5]*SPLRD[v, v, +n, nb] - 2*GSD[n] . GA[5]*SPD[nb, p3]*SPLRD[v, v, n, nb]))/2))/2"}, {"fcstDiracTrickLightCone-ID128", "DiracTrick[GSLRD[v].GA[5].GSD[p1,p2,p3,p4].GSLRD[v],FCE->True]", -"-GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - \ -(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2 + (SPD[nb, p3]*(GSD[n] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, \ -nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, \ -p4])/2 - (GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2))/2 + \ -(SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, \ -n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - ((4*GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5] - \ -GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2))/2 + (SPD[nb, \ -p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] \ -. GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] . GA[5]*SPD[n, p4])/2 + (GSD[n] . GSD[n] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, \ -p4])/2 + (SPD[nb, p3]*(-GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, \ -n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . \ -GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, \ -nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, \ -nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2))/2 + \ -(SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[n, p4])/2 + ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, \ -p4])/2))/2))/2 + (SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . \ -GA[5] + (GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 + \ -((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, \ -n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2 + \ -(SPD[nb, p3]*(-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + \ -((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . \ -GA[5] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[v, n, nb] . GA[5])*SPD[n, p4])/2 - (GSD[n] . GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[nb, p4])/2))/2 + (SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . \ -GA[5] - (GSD[nb] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, \ -nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[nb, p4])/2))/2))/2 + (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] \ -. GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, \ -n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - \ -(GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2 - (SPD[nb, p3]*(-GSD[n] \ -. GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - \ -(GSD[n] . GSD[n] . GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2))/2 - (SPD[n, p3]*(-GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . \ -GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, \ -nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 + \ -((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . \ -GA[5] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, \ -nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2))/2 - (SPD[n, \ -p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . \ -GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[n, p4])/2 - ((-4*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, \ -n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2 - \ -2*SPD[nb, p3]*(-(GSD[n] . GSLRD[p4, n, nb] . GA[5]*SPLRD[v, v]) + \ -2*GSD[n] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, n, nb] - (GSD[n] . \ -GSD[nb] . GA[5]*SPD[n, p4]*SPLRD[v, v, n, nb])/2)))/2))/2 + (SPD[n, \ -p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] \ -. GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] . GA[5]*SPD[n, p4])/2 - ((4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . \ -GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, \ -nb] . GA[5])*SPD[nb, p4])/2 - (SPD[nb, p3]*(-4*GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + \ -GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, \ -nb] . GSLRD[v, n, nb] . GA[5] + ((-4*GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . \ -GA[5])*SPD[n, p4])/2 - (GSD[n] . GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2))/2 - \ -(SPD[n, p3]*(-GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] \ -. GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[nb] . GSD[nb] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[n, p4])/2 - (GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2))/2 - \ -(SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] \ -. GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . \ -GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - \ -((-4*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . \ -GA[5] + GSD[n] . GSD[nb] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, \ -nb] . GSLRD[v, n, nb] . GA[5])*SPD[n, p4])/2 + (GSD[n] . GSD[n] . \ -GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . \ -GA[5]*SPD[nb, p4])/2 - 2*SPD[n, p3]*(-(GSD[nb] . GSLRD[p4, n, nb] . \ -GA[5]*SPLRD[v, v]) + 2*GSD[nb] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, \ -n, nb] - ((-GSD[n] . GSD[nb] . GA[5] + 4*GA[5])*SPD[nb, p4]*SPLRD[v, \ -v, n, nb])/2)))/2))/2"}, -{"fcstDiracTrickLightCone-ID129", "DiracTrick[GSD[nb,n],FCE->True]", - "4 - GSD[n] . GSD[nb]"}, -{"fcstDiracTrickLightCone-ID130", -"DiracTrick[GSD[nb].GSD[n].GALRD[Lor4,n,nb].GSLRD[l1,n,nb].GALRD[\ -Lor4,n,nb].GSD[nb].GSD[n],FCE->True]", -"-4*(-4 + D)*(-GSD[n] . GSD[nb] . GSLRD[l1, n, nb] + 4*GSLRD[l1, \ -n, nb])"}, +"-GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, +nb] . GA[5] - (GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, +nb] . GA[5]*SPD[n, p4])/2 + ((GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . +GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . +GA[5]*SPD[n, p4])/2)*SPD[nb, p3])/2 - (GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . +GSLRD[v, n, nb] . GA[5]*SPD[nb, p4])/2 + (SPD[n, p3]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . +GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - ((4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . +GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p2, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, +p4])/2))/2 + (SPD[n, p2]*(-GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . +GSLRD[v, n, nb] . GA[5] + ((-4*GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + +GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - 2*GSD[nb] . +GSLRD[v, n, nb] . GSLRD[p1, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])*SPD[nb, p3])/2 + ((4*GSLRD[v, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . +GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5])*SPD[nb, p4])/2))/2 + (SPD[nb, p2]*(-GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, +n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p1, +n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 + (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . +GSLRD[p1, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - 2*GSD[n] . GSLRD[v, n, nb] . GSLRD[p1, n, nb] . +GSLRD[v, n, nb] . GA[5]*SPD[nb, p4]))/2))/2 + (SPD[nb, p1]*(GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, +n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - (GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . +GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])/2 - (SPD[n, p3]*(-GSD[n] . GSD[nb] . GSLRD[v, n, nb] . +GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - 2*GSD[n] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . +GSLRD[v, n, nb] . GA[5]*SPD[nb, p4]))/2 - (SPD[n, p2]*(GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . +GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + 2*GSD[n] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . +GA[5]*SPD[nb, p4] - 2*SPD[nb, p3]*(2*GSD[n] . GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, n, nb] - GSD[n] . GSLRD[p4, +n, nb] . GA[5]*SPLRD[v, v, n, nb] - (GSD[n] . GSD[nb] . GA[5]*SPD[n, p4]*SPLRD[v, v, n, nb])/2)))/2))/2 + (SPD[n, +p1]*(GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - +((-4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] + GSD[n] . GSD[nb] . GSLRD[v, +n, nb] . GSLRD[p2, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . GA[5] - 2*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, +n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4])*SPD[nb, p3])/2 - ((4*GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, +n, nb] . GSLRD[v, n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p2, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, +n, nb] . GA[5])*SPD[nb, p4])/2 - (SPD[nb, p2]*(4*GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, +n, nb] . GA[5] - GSD[n] . GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[p4, n, nb] . GSLRD[v, n, nb] . +GA[5] + 2*GSD[nb] . GSLRD[v, n, nb] . GSLRD[p3, n, nb] . GSLRD[v, n, nb] . GA[5]*SPD[n, p4] - 2*SPD[n, p3]*(2*GSD[nb] . +GSLRD[v, n, nb] . GA[5]*SPLRD[p4, v, n, nb] - GSD[nb] . GSLRD[p4, n, nb] . GA[5]*SPLRD[v, v, n, nb] - ((-GSD[n] . +GSD[nb] . GA[5] + 4*GA[5])*SPD[nb, p4]*SPLRD[v, v, n, nb])/2)))/2))/2"}, {"fcstDiracTrickLightCone-ID131", "DiracTrick[GSD[nb].GSD[n].GSLRD[Polarization[p,\[ImaginaryI]],n,\ nb].GSLRD[k2,n,nb].GALRD[Lor4,n,nb].GSLRD[l1,n,nb].GALRD[Lor4,n,nb].\ From 85900808c952a3df63f5c6c246f7df877adaf5b0 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Sun, 11 Feb 2024 22:17:05 +0100 Subject: [PATCH 15/67] Added new option FinalSubstitutions to Tdec to allow for tensor decompositions with special kinematic constraints (thanks to J. Mueller). --- FeynCalc/Documentation/Markdown/Tdec.md | 11 +- .../Mathematica/LoopIntegrals/Tdec.m | 8 ++ FeynCalc/LoopIntegrals/Tdec.m | 29 +++-- Tests/LoopIntegrals/Tdec.test | 100 ++++++++++-------- 4 files changed, 94 insertions(+), 54 deletions(-) diff --git a/FeynCalc/Documentation/Markdown/Tdec.md b/FeynCalc/Documentation/Markdown/Tdec.md index f348e73a..85e70235 100644 --- a/FeynCalc/Documentation/Markdown/Tdec.md +++ b/FeynCalc/Documentation/Markdown/Tdec.md @@ -32,4 +32,13 @@ Contract[% FVD[p, \[Mu]] FVD[p, \[Nu]] FVD[p, \[Rho]]] // Factor $$\frac{p^{\rho } g^{\mu \nu } \left(p\cdot q_3\right) \left(\left(p\cdot q_1\right) \left(p\cdot q_2\right)-p^2 \left(q_1\cdot q_2\right)\right)}{(1-D) p^4}+\frac{p^{\nu } g^{\mu \rho } \left(p\cdot q_2\right) \left(\left(p\cdot q_1\right) \left(p\cdot q_3\right)-p^2 \left(q_1\cdot q_3\right)\right)}{(1-D) p^4}+\frac{p^{\mu } g^{\nu \rho } \left(p\cdot q_1\right) \left(\left(p\cdot q_2\right) \left(p\cdot q_3\right)-p^2 \left(q_2\cdot q_3\right)\right)}{(1-D) p^4}-\frac{p^{\mu } p^{\nu } p^{\rho } \left(D \left(p\cdot q_1\right) \left(p\cdot q_2\right) \left(p\cdot q_3\right)+2 \left(p\cdot q_1\right) \left(p\cdot q_2\right) \left(p\cdot q_3\right)-p^2 \left(q_1\cdot q_2\right) \left(p\cdot q_3\right)-p^2 \left(q_1\cdot q_3\right) \left(p\cdot q_2\right)-p^2 \left(q_2\cdot q_3\right) \left(p\cdot q_1\right)\right)}{(1-D) p^6}$$ -$$\left(p\cdot q_1\right) \left(p\cdot q_2\right) \left(p\cdot q_3\right)$$ \ No newline at end of file +$$\left(p\cdot q_1\right) \left(p\cdot q_2\right) \left(p\cdot q_3\right)$$ + +To calculate a tensor decomposition with specific kinematic constraints, use the option `FinalSubstitutions`. Notice that kinematic configurations involving zero Gram determinants are not supported. + +```mathematica +Tdec[{{l, \[Mu]}, {l, \[Nu]}}, {p1, p2}, + FinalSubstitutions -> {SPD[p1] -> 0, SPD[p2] -> 0}, FCE -> True, List -> False] +``` + +$$-\frac{g^{\mu \nu } \left(l^2 (\text{p1}\cdot \;\text{p2})^2-2 (l\cdot \;\text{p1}) (l\cdot \;\text{p2}) (\text{p1}\cdot \;\text{p2})\right)}{(2-D) (\text{p1}\cdot \;\text{p2})^2}+\frac{\text{p2}^{\mu } \;\text{p2}^{\nu } \left(2 (l\cdot \;\text{p1})^2 (\text{p1}\cdot \;\text{p2})^2-D (l\cdot \;\text{p1})^2 (\text{p1}\cdot \;\text{p2})^2\right)}{(2-D) (\text{p1}\cdot \;\text{p2})^4}+\frac{\text{p1}^{\mu } \;\text{p1}^{\nu } \left(2 (l\cdot \;\text{p2})^2 (\text{p1}\cdot \;\text{p2})^2-D (l\cdot \;\text{p2})^2 (\text{p1}\cdot \;\text{p2})^2\right)}{(2-D) (\text{p1}\cdot \;\text{p2})^4}-\frac{\text{p1}^{\nu } \;\text{p2}^{\mu } \left(D (l\cdot \;\text{p1}) (l\cdot \;\text{p2}) (\text{p1}\cdot \;\text{p2})^2-l^2 (\text{p1}\cdot \;\text{p2})^3\right)}{(2-D) (\text{p1}\cdot \;\text{p2})^4}-\frac{\text{p1}^{\mu } \;\text{p2}^{\nu } \left(D (l\cdot \;\text{p1}) (l\cdot \;\text{p2}) (\text{p1}\cdot \;\text{p2})^2-l^2 (\text{p1}\cdot \;\text{p2})^3\right)}{(2-D) (\text{p1}\cdot \;\text{p2})^4}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/Tdec.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/Tdec.m index 893b5fa7..0c77f65d 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/Tdec.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/Tdec.m @@ -43,3 +43,11 @@ Tdec[{{Subscript[q, 1],\[Mu]},{Subscript[q, 2],\[Nu]},{Subscript[q, 3],\[Rho]}},{p},List->False] Contract[% FVD[p,\[Mu]]FVD[p,\[Nu]] FVD[p,\[Rho]]]//Factor + + +(* ::Text:: *) +(*To calculate a tensor decomposition with specific kinematic constraints, use the option `FinalSubstitutions`. Notice that kinematic configurations involving zero Gram determinants are not supported.*) + + +Tdec[{{l, \[Mu]}, {l, \[Nu]}}, {p1, p2}, +FinalSubstitutions -> {SPD[p1] -> 0, SPD[p2] -> 0}, FCE -> True,List->False] diff --git a/FeynCalc/LoopIntegrals/Tdec.m b/FeynCalc/LoopIntegrals/Tdec.m index 4c7554c4..ead01288 100644 --- a/FeynCalc/LoopIntegrals/Tdec.m +++ b/FeynCalc/LoopIntegrals/Tdec.m @@ -72,6 +72,7 @@ FCE -> True, FCVerbose -> False, Factoring -> {Factor2, Factor}, + FinalSubstitutions -> {}, Head -> Identity, List -> True, Parallelize -> True, @@ -101,16 +102,17 @@ tensorCoeffAbbreviationsBack, nttt, optList, optFCE, time, time1, symbolicVars, variableAbbreviations, tensorCoeffAbbreviations, sol,ii,ce,xy, optHead, tmp, extMom, basisonly, multiLoop=False, - lorInds, loopMoms, basis,multiLoopSyms={}, + lorInds, loopMoms, basis,multiLoopSyms={}, optFinalSubstitutions, dummyHead1, dummyHead2, symRules, optSolve}, - dim = OptionValue[Dimension]; - optList = OptionValue[List]; - optFCE = OptionValue[FCE]; - optFactoring = OptionValue[Factoring]; - basisonly = OptionValue[BasisOnly]; - optHead = OptionValue[Head]; - optSolve = OptionValue[Solve]; + dim = OptionValue[Dimension]; + optList = OptionValue[List]; + optFCE = OptionValue[FCE]; + optFactoring = OptionValue[Factoring]; + basisonly = OptionValue[BasisOnly]; + optHead = OptionValue[Head]; + optSolve = OptionValue[Solve]; + optFinalSubstitutions = OptionValue[FinalSubstitutions]; If [OptionValue[FCVerbose]===False, tdecVerbose=$VeryVerbose, @@ -217,6 +219,8 @@ basis = basis /. CC[x__] :> CC[Transpose[{x}]] ]; + + (* if we were requested to provide only the symmetrized tensor basis, we stop here *) If[ basisonly, If[multiLoop, @@ -264,6 +268,12 @@ with the original tensor equations to get a system of linear (scalar) equations If[ !FreeQ2[linearSystem,{PairContract2}], linearSystem = linearSystem /. PairContract2 -> Pair ]; + + If[ optFinalSubstitutions=!={}, + optFinalSubstitutions = FCI[optFinalSubstitutions] /. Thread[Rule[extMomsRaw,extMoms]]; + linearSystem = linearSystem /. optFinalSubstitutions + ]; + FCPrint[1, "Tdec: Done building a system of scalar equations, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->tdecVerbose]; FCPrint[1, "Tdec: Need to solve ", Length[linearSystem], " equations for ", Length[tensorCoeffs] , " variables", FCDoControl->tdecVerbose]; @@ -289,6 +299,9 @@ with the original tensor equations to get a system of linear (scalar) equations FCPrint[1, "This decomposition formula is available in TIDL, skipping calculation.", FCDoControl->tdecVerbose]; tensorEq = TIDL[li,extMoms,Dimension->dim]; FCPrint[3, "Result from TIDL: ", tensorEq, FCDoControl->tdecVerbose]; + If[ optFinalSubstitutions=!={}, + tensorEq = tensorEq /. optFinalSubstitutions + ]; If[ optList, tensorEq = FeynCalcInternal[FCE[tensorEq] /. Dispatch[FCE[variableAbbreviations]]]; diff --git a/Tests/LoopIntegrals/Tdec.test b/Tests/LoopIntegrals/Tdec.test index 2f7f8154..fe2abaa6 100644 --- a/Tests/LoopIntegrals/Tdec.test +++ b/Tests/LoopIntegrals/Tdec.test @@ -71,64 +71,64 @@ Parallelize -> False, List -> False]","-(((FVD[k1, mu1]*MTD[mu2, mu5]*MTD[mu3, m Dimension -> D, List -> False, UseTIDL -> False, FCE -> True]", "-(((MTD[$3047, $3489]*MTD[$3050, $3488] + MTD[$3047, $3050]*MTD[$3488, $3489])*(2*SPD[k1, q1]^2* - SPD[k1, q2]^2 - D*SPD[k1, q1]^2*SPD[k1, q2]^2 - + SPD[k1, q2]^2 - D*SPD[k1, q1]^2*SPD[k1, q2]^2 - SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - 2*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + 2*D*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + SPD[k1, k1]^2*SPD[q1, q2]^2 - D*SPD[k1, k1]^2*SPD[q1, q2]^2 - SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* - SPD[k1, k1]^2)) + ((FVD[k1, $3488]*FVD[k1, $3489]* - MTD[$3047, $3050] + - FVD[k1, $3050]*FVD[k1, $3488]*MTD[$3047, $3489] + - FVD[k1, $3047]*FVD[k1, $3489]*MTD[$3050, $3488] + - FVD[k1, $3047]*FVD[k1, $3050]*MTD[$3488, $3489])*(4* - SPD[k1, q1]^2*SPD[k1, q2]^2 - D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - - SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - D*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - D^2*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - SPD[k1, k1]^2*SPD[q1, q2]^2 - D*SPD[k1, k1]^2*SPD[q1, q2]^2 - - SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + - SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* + SPD[k1, k1]^2)) + ((FVD[k1, $3488]*FVD[k1, $3489]* + MTD[$3047, $3050] + + FVD[k1, $3050]*FVD[k1, $3488]*MTD[$3047, $3489] + + FVD[k1, $3047]*FVD[k1, $3489]*MTD[$3050, $3488] + + FVD[k1, $3047]*FVD[k1, $3050]*MTD[$3488, $3489])*(4* + SPD[k1, q1]^2*SPD[k1, q2]^2 - D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - + SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + D*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + D^2*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + SPD[k1, k1]^2*SPD[q1, q2]^2 - D*SPD[k1, k1]^2*SPD[q1, q2]^2 - + SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + + SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* SPD[k1, k1]^3) - (FVD[k1, $3047]*FVD[k1, $3050]*FVD[k1, $3488]* FVD[k1, $3489]*(8*SPD[k1, q1]^2*SPD[k1, q2]^2 + - 6*D*SPD[k1, q1]^2*SPD[k1, q2]^2 + - D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - - 2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - 8*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] - - 4*D*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - 2*SPD[k1, k1]^2*SPD[q1, q2]^2 - - 2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - - D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + - SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((1 - D^2)* + 6*D*SPD[k1, q1]^2*SPD[k1, q2]^2 + + D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - + 2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + 8*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] - + 4*D*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + 2*SPD[k1, k1]^2*SPD[q1, q2]^2 - + 2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - + D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + + SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((1 - D^2)* SPD[k1, k1]^4) - (MTD[$3047, $3488]* MTD[$3050, $3489]*(2*SPD[k1, q1]^2*SPD[k1, q2]^2 - - D*SPD[k1, q1]^2*SPD[k1, q2]^2 + - D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - 2*SPD[k1, k1]^2*SPD[q1, q2]^2 + - D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - - D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* + D*SPD[k1, q1]^2*SPD[k1, q2]^2 + + D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + 2*SPD[k1, k1]^2*SPD[q1, q2]^2 + + D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - + D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* SPD[k1, k1]^2) + (FVD[k1, $3047]*FVD[k1, $3488]* MTD[$3050, $3489]*(4*SPD[k1, q1]^2*SPD[k1, q2]^2 - - D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - - 2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] + - D^2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - 2*SPD[k1, k1]^2*SPD[q1, q2]^2 + - D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - - D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* + D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 - + 2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] + + D^2*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + 2*SPD[k1, k1]^2*SPD[q1, q2]^2 + + D*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - + D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* SPD[k1, k1]^3) + (FVD[k1, $3050]*FVD[k1, $3489]* MTD[$3047, $3488]*(4*SPD[k1, q1]^2*SPD[k1, q2]^2 - - D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 + - D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - - 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + - 2*SPD[k1, k1]^2*SPD[q1, q2]^2 - - 2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + - D^2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - - D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* + D^2*SPD[k1, q1]^2*SPD[k1, q2]^2 + + D*SPD[k1, k1]*SPD[k1, q2]^2*SPD[q1, q1] - + 4*SPD[k1, k1]*SPD[k1, q1]*SPD[k1, q2]*SPD[q1, q2] + + 2*SPD[k1, k1]^2*SPD[q1, q2]^2 - + 2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] + + D^2*SPD[k1, k1]*SPD[k1, q1]^2*SPD[q2, q2] - + D*SPD[k1, k1]^2*SPD[q1, q1]*SPD[q2, q2]))/((2 - D)*(1 - D^2)* SPD[k1, k1]^3)"}, {"fcstTdec-ID17","Tdec[{{l, i1}, {l, i2}}, {p1}, Head -> mom]", "{{X1 -> D, X2 -> SPD[l, l], X3 -> SPD[l, mom[p1]], @@ -576,7 +576,17 @@ k4]*SPD[k2, k3]*SPD[k5, k6] + 2*SPD[k1, k3]*SPD[k2, k4]*SPD[k5, k6] + \ D*SPD[k1, k3]*SPD[k2, k4]*SPD[k5, k6] + 2*SPD[k1, k2]*SPD[k3, \ k4]*SPD[k5, k6] - 3*D*SPD[k1, k2]*SPD[k3, k4]*SPD[k5, k6] - \ D^2*SPD[k1, k2]*SPD[k3, k4]*SPD[k5, k6]))/((1 - D)*D*(4 + D)*(4 - \ -D^2))"} +D^2))"}, +{"fcstTdecGrc-ID4", +"Tdec[{{l, mu}, {l, nu}}, {p1, p2}, +FinalSubstitutions -> {SPD[p1] -> 0, SPD[p2] -> 0}, FCE -> True]", +"{{X1 -> D, X2 -> SPD[l, l], X3 -> SPD[l, p1], X4 -> SPD[l, p2], +X5 -> SPD[p1, p2]}, ((2*X4^2*X5^2 - X1*X4^2*X5^2)*FVD[p1, +mu]*FVD[p1, nu])/((2 - X1)*X5^4) - +((X1*X3*X4*X5^2 - X2*X5^3)*FVD[p1, nu]*FVD[p2, mu])/((2 - X1)*X5^4) - +((X1*X3*X4*X5^2 - X2*X5^3)*FVD[p1, mu]*FVD[p2, nu])/((2 - X1)*X5^4) + +((2*X3^2*X5^2 - X1*X3^2*X5^2)*FVD[p2, mu]*FVD[p2, nu])/((2 - X1)*X5^4) - +((-2*X3*X4*X5 + X2*X5^2)*MTD[mu, nu])/((2 - X1)*X5^2)}"} }); From c1a9ff9a1e00130eab742f53123a93ed0f58b2c7 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Sun, 11 Feb 2024 22:51:33 +0100 Subject: [PATCH 16/67] First steps towards making FeynCalc parallelizable. --- .../Markdown/$ParallelizeFeynCalc.md | 15 ++++ .../Documentation/Markdown/Extra/FeynCalc.md | 3 +- .../Markdown/Extra/Parallelization.md | 26 +++++++ .../Mathematica/Main/$ParallelizeFeynCalc.m | 26 +++++++ FeynCalc/FCMain.m | 21 +++++- FeynCalc/LoopIntegrals/FCFeynmanPrepare.m | 57 ++++++++++----- .../FCLoopFindIntegralMappings.m | 9 ++- FeynCalc/LoopIntegrals/FCLoopFromGLI.m | 73 ++++++++++++++++--- FeynCalc/LoopIntegrals/FCLoopSelectTopology.m | 63 +++++++--------- FeynCalc/LoopIntegrals/FCLoopToPakForm.m | 48 +++++++++--- FeynCalc/fc.m | 2 + Tests/LoopIntegrals/FCLoopSelectTopology.test | 27 ++++++- 12 files changed, 292 insertions(+), 78 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/$ParallelizeFeynCalc.md create mode 100644 FeynCalc/Documentation/Markdown/Extra/Parallelization.md create mode 100644 FeynCalc/Documentation/Mathematica/Main/$ParallelizeFeynCalc.m diff --git a/FeynCalc/Documentation/Markdown/$ParallelizeFeynCalc.md b/FeynCalc/Documentation/Markdown/$ParallelizeFeynCalc.md new file mode 100644 index 00000000..90c1f953 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/$ParallelizeFeynCalc.md @@ -0,0 +1,15 @@ +## $ParallelizeFeynCalc + +`$ParallelizeFeynCalc` is a global switch that enables FeynCalc to evaluate some subroutines on using parallel kernels. It should be explicitly activated by setting `$ParallelizeFeynCalc` to `True`. However, before that one should evaluate `LaunchKernels[n]` with `n` being the number of parallel kernels to launch. The default value is `False`. + +### See also + +[Overview](Extra/FeynCalc.md) + +### Examples + +```mathematica +$ParallelizeFeynCalc +``` + +$$\text{False}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index 283bebdb..d4ea6a7f 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -4,6 +4,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [Installation](Install.md) - [Loading the package](Load.md) +- [Parallelization](Parallelization.md) - [Upper and lower indices](UpperLowerIndices.md) - [Master integrals](MasterIntegrals.md) - [New FeynArts sign conventions](FeynArtsSigns.md) @@ -456,7 +457,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th ## Options -- [\$DisableMemSet](../\$DisableMemSet.md), [\$FAPatch](../\$FAPatch.md), [\$FCCheckContext](../\$FCCheckContext.md), [\$FCCloudTraditionalForm](../\$FCCloudTraditionalForm.md), [\$FCTraditionalFormOutput](../\$FCTraditionalFormOutput.md), [\$FeynArtsDirectory](../\$FeynArtsDirectory.md), [\$FeynCalcDevelopmentVersion](../\$FeynCalcDevelopmentVersion.md), [\$FeynCalcDirectory](../\$FeynCalcDirectory.md), [\$FeynCalcLastCommitDateHash](../\$FeynCalcLastCommitDateHash.md) [\$FeynCalcStartupMessages](../\$FeynCalcStartupMessages.md), [\$LoadAddOns](../\$LoadAddOns.md), [\$Multiplications](../\$Multiplications.md), [\$RenameFeynCalcObjects](../\$RenameFeynCalcObjects.md) - global switches that can be set before loading FeynCalc +- [\$DisableMemSet](../\$DisableMemSet.md), [\$FAPatch](../\$FAPatch.md), [\$FCCheckContext](../\$FCCheckContext.md), [\$FCCloudTraditionalForm](../\$FCCloudTraditionalForm.md), [\$FCTraditionalFormOutput](../\$FCTraditionalFormOutput.md), [\$FeynArtsDirectory](../\$FeynArtsDirectory.md), [\$FeynCalcDevelopmentVersion](../\$FeynCalcDevelopmentVersion.md), [\$FeynCalcDirectory](../\$FeynCalcDirectory.md), [\$FeynCalcLastCommitDateHash](../\$FeynCalcLastCommitDateHash.md) [\$FeynCalcStartupMessages](../\$FeynCalcStartupMessages.md), [\$LoadAddOns](../\$LoadAddOns.md), [\$Multiplications](../\$Multiplications.md), [\$RenameFeynCalcObjects](../\$RenameFeynCalcObjects.md), [\$ParallelizeFeynCalc](../\$ParallelizeFeynCalc.md) - global switches that can be set before loading FeynCalc - [\$Containers](../\$Containers.md), [\$DistributiveFunctions](../\$DistributiveFunctions.md), [\$DisableMemSet](../\$DisableMemSet.md), [\$FCAdvice](../\$FCAdvice.md), [\$FCMemoryAvailable](../\$FCMemoryAvailable.md), [\$FCShowIEta](../\$FCShowIEta.md), [\$FortranContinuationCharacter](../\$FortranContinuationCharacter.md), [\$KeepLogDivergentScalelessIntegrals](../\$KeepLogDivergentScalelessIntegrals.md), [\$LeviCivitaSign](../\$LeviCivitaSign.md), [\$LimitTo4](../\$LimitTo4.md), [\$LimitTo4IRUnsafe](../\$LimitTo4IRUnsafe.md), [\$VeryVerbose](../\$VeryVerbose.md), [\$FAPatch](../\$FAPatch.md) - global switches that can be changed during the operation of FeynCalc - [\$Abbreviations](../\$Abbreviations.md), [\$AL](../\$AL.md), [\$FCTensorList](../\$FCTensorList.md), [\$FeynCalcVersion](../\$FeynCalcVersion.md), [\$MU](../\$MU.md), [\$NonComm](../\$NonComm.md), [\$ScalarProducts](../\$ScalarProducts.md) - global variables needed for the proper functioning of FeynCalc - [A0ToB0](../A0ToB0.md), [AuxiliaryMomenta](../AuxiliaryMomenta.md), [B0Real](../B0Real.md), [B0Unique](../B0Unique.md), [Bracket](../Bracket.md), [BReduce](../BReduce.md), [CartesianIndexNames](../CartesianIndexNames.md), [ClearHeads](../ClearHeads.md), [Collecting](../Collecting.md), [CombineGraphs](../CombineGraphs.md), [CounterT](../CounterT.md), [CouplingConstant](../CouplingConstant.md), [CustomIndexNames](../CustomIndexNames.md), [D0Convention](../D0Convention.md), [DetectLoopTopologies](../DetectLoopTopologies.md), [Dimension](../Dimension.md), [DiracIndexNames](../DiracIndexNames.md), [DiracSpinorNormalization](../DiracSpinorNormalization.md), [DiracTraceEvaluate](../DiracTraceEvaluate.md), [Divideout](../Divideout.md), [DotPower](../DotPower.md), [DotSimplifyRelations](../DotSimplifyRelations.md), [DropScaleless](../DropScaleless.md), [DropSumOver](../DropSumOver.md), [DummyIndex](../DummyIndex.md), [EpsDiscard](../EpsDiscard.md), [EpsExpand](../EpsExpand.md), [EpsilonOrder](../EpsilonOrder.md), [EtaSign](../EtaSign.md), [ExceptHeads](../ExceptHeads.md), [ExcludeMasses](../ExcludeMasses.md), [Expanding](../Expanding.md), [ExtraFactor](../ExtraFactor.md), [ExtraPropagators](../ExtraPropagators.md), [ExtraVariables](../ExtraVariables.md), [FactorFull](../FactorFull.md), [Factoring](../Factoring.md), [FactoringDenominator](../FactoringDenominator.md), [Factorout](../Factorout.md), [FAModelsDirectory](../FAModelsDirectory.md), [FCDoControl](../FCDoControl.md), [FCJoinDOTs](../FCJoinDOTs.md), [FCVerbose](../FCVerbose.md), [FeynmanIntegralPrefactor](../FeynmanIntegralPrefactor.md), [FinalFunction](../FinalFunction.md), [FinalSubstitutions](../FinalSubstitutions.md), [ForceSave](../ForceSave.md), [FORMAbbreviations](../FORMAbbreviations.md), [FORMEpilog](../FORMEpilog.md), [FORMIdStatements](../FORMIdStatements.md), [FORMProlog](../FORMProlog.md), [FortranFormatDoublePrecision](../FortranFormatDoublePrecision.md), [FunctionLimits](../FunctionLimits.md), [Gauge](../Gauge.md), [IncomingMomenta](../IncomingMomenta.md), [IndexPosition](../IndexPosition.md), [InitialFunction](../InitialFunction.md), [InitialSubstitutions](../InitialSubstitutions.md), [InsideDiracTrace](../InsideDiracTrace.md), [InsidePauliTrace](../InsidePauliTrace.md), [IntegralTable](../IntegralTable.md), [IntermediateSubstitutions](../IntermediateSubstitutions.md), [IsolateFast](../IsolateFast.md), [IsolateNames](../IsolateNames.md), [IsolatePlus](../IsolatePlus.md), [IsolatePrint](../IsolatePrint.md), [IsolateSplit](../IsolateSplit.md), [IsolateTimes](../IsolateTimes.md), [LarinMVV](../LarinMVV.md), [LightPak](../LightPak.md), [\$FCDefaultLightconeVectorN](../\$FCDefaultLightconeVectorN.md), [\$FCDefaultLightconeVectorNB](../\$FCDefaultLightconeVectorNB.md), [Loop](../Loop.md), [LoopMomenta](../LoopMomenta.md), [LorentzIndexNames](../LorentzIndexNames.md), [Mandelstam](../Mandelstam.md), [MultiLoop](../MultiLoop.md), [NoSave](../NoSave.md), [NumberOfPolarizations](../NumberOfPolarizations.md), [NotMomentum](../NotMomentum.md), [OtherLoopMomenta](../OtherLoopMomenta.md), [OutgoingMomenta](../OutgoingMomenta.md), [PairCollect](../PairCollect.md), [PartialDRelations](../PartialDRelations.md), [PatchModelsOnly](../PatchModelsOnly.md),[PauliIndexNames](../PauliIndexNames.md), [PauliReduce](../PauliReduce.md), [PauliTraceEvaluate](../PauliTraceEvaluate.md), [PaVeAutoOrder](../PaVeAutoOrder.md), [PaVeAutoReduce](../PaVeAutoReduce.md), [PaVeIntegralHeads](../PaVeIntegralHeads.md), [PaVeOrderList](../PaVeOrderList.md), [PostFortranFile](../PostFortranFile.md), [Prefactor](../Prefactor.md), [PreferredIntegrals](../PreferredIntegrals.md), [PreferredTopologies](../PreferredTopologies.md), [PreFortranFile](../PreFortranFile.md), [PreservePropagatorStructures](../PreservePropagatorStructures.md), [QuarkMass](../QuarkMass.md), [ReduceGamma](../ReduceGamma.md), [ReduceToScalars](../ReduceToScalars.md), [Rename](../Rename.md), [SameSideExternalEdges](../SameSideExternalEdges.md), [SchoutenAllowNegativeGain](../SchoutenAllowNegativeGain.md), [SchoutenAllowZeroGain](../SchoutenAllowZeroGain.md), [SelectGraphs](../SelectGraphs.md), [SetDimensions](../SetDimensions.md), [SmallVariables](../SmallVariables.md), [SplitSymbolicPowers](../SplitSymbolicPowers.md), [SubLoop](../SubLoop.md), [SubtopologyMarker](../SubtopologyMarker.md), [SUNFJacobi](../SUNFJacobi.md), [SUNIndexNames](../SUNIndexNames.md), [SUNFIndexNames](../SUNFIndexNames.md), [SUNTraceEvaluate](../SUNTraceEvaluate.md), [SUNNToCACF](../SUNNToCACF.md), [TraceDimension](../TraceDimension.md), [TraceOfOne](../TraceOfOne.md), [Transversality](../Transversality.md), [TransversePolarizationVectors](../TransversePolarizationVectors.md), [UndoChiralSplittings](../UndoChiralSplittings.md), [UsePaVeBasis](../UsePaVeBasis.md), [UseTIDL](../UseTIDL.md), [UseWriteString](../UseWriteString.md), [VirtualBoson](../VirtualBoson.md), [West](../West.md), [WriteOut](../WriteOut.md), [WriteOutPaVe](../WriteOutPaVe.md), [WriteStringOutput](../WriteStringOutput.md), [ZeroMomentumInsertion](../ZeroMomentumInsertion.md) - options of various functions and symbols diff --git a/FeynCalc/Documentation/Markdown/Extra/Parallelization.md b/FeynCalc/Documentation/Markdown/Extra/Parallelization.md new file mode 100644 index 00000000..a3e9d33d --- /dev/null +++ b/FeynCalc/Documentation/Markdown/Extra/Parallelization.md @@ -0,0 +1,26 @@ +## Parallelization + +### See also + +[Overview](FeynCalc.md). + +Some FeynCalc routines can be parallelized meaning that the code will try to distribute chunks of the calculation to multiple Mathematica kernels. + +To this aim the number of subkernels should roughly correspond to the number of CPU cores + +### Enabling parallelization + +To enable the parallelization you need to actively launch some parallel kernels and then set the variable `$ParallelizeFeynCalc` to `True`. In this case a copy of FeynCalc will be loaded on each of the parallel kernels and used to parallelize some selected operations. For example, + +```mathematica +LaunchKernels[8] +$ParallelizeFeynCalc = True +``` + +### Functions that support automatic execution on parallel kernels + + - `FCLoopFromGLI` + - `FCFeynmanPrepare` + - `FCLoopToPakForm` + - `FCLoopFindIntegralMappings` + diff --git a/FeynCalc/Documentation/Mathematica/Main/$ParallelizeFeynCalc.m b/FeynCalc/Documentation/Mathematica/Main/$ParallelizeFeynCalc.m new file mode 100644 index 00000000..9c1d7a84 --- /dev/null +++ b/FeynCalc/Documentation/Mathematica/Main/$ParallelizeFeynCalc.m @@ -0,0 +1,26 @@ +(* ::Package:: *) + + + + +(* ::Section:: *) +(*$ParallelizeFeynCalc*) + + +(* ::Text:: *) +(*`$ParallelizeFeynCalc` is a global switch that enables FeynCalc to evaluate some subroutines on using parallel kernels. It should be explicitly activated by setting `$ParallelizeFeynCalc` to `True`. However, before that one should evaluate `LaunchKernels[n]` with `n` being the number of parallel kernels to launch. The default value is `False`.*) + + +(* ::Subsection:: *) +(*See also*) + + +(* ::Text:: *) +(*[Overview](Extra/FeynCalc.md)*) + + +(* ::Subsection:: *) +(*Examples*) + + +$ParallelizeFeynCalc diff --git a/FeynCalc/FCMain.m b/FeynCalc/FCMain.m index 7304651a..4492aad8 100644 --- a/FeynCalc/FCMain.m +++ b/FeynCalc/FCMain.m @@ -105,6 +105,13 @@ StandardForm output (Mathematica's default) will be used. the last commit in the branch from which the current FeynCalc version originates."; +$ParallelizeFeynCalc::usage = +"$ParallelizeFeynCalc is a global switch that enables FeynCalc to evaluate some +subroutines on using parallel kernels. It should be explicitly activated by +setting $ParallelizeFeynCalc to True. However, before that one should evaluate +LaunchKernels[n] with n being the number of parallel kernels to launch. The +default value is False."; + $FCTensorList::usage = "$FCTensorList contains a list of all tensor heads present."; @@ -367,7 +374,7 @@ before FeynCalc is loaded (monkey patching). The value of - \"None\" - This is the default value. The anticommutator relation is not applied to $D-1$ dimensional Pauli matrices. -- \"Naive\" - Naively apply the commutator relation in $D-1$-dimensions, i.e. +- \"Naive\" - Naively apply the commutator relation in $D-1$-dimensions, i.e. $\{\\sigma^i, \\sigma^j \} = 2 i \\varepsilon^{ijk} \\sigma^k$. The Levi-Civita tensor lives in $D-1$-dimensions, so that a contraction of two such tensors which have all indices in common yields $(D-3) (D-2) (D-1)$."; @@ -416,6 +423,7 @@ before FeynCalc is loaded (monkey patching). The value of "\r" -> "" }; +$ParallelizeFeynCalc = False; $Containers = {}; $DisableMemSet = False; $DistributiveFunctions = {Conjugate, Transpose}; @@ -428,6 +436,17 @@ before FeynCalc is loaded (monkey patching). The value of $Multiplications = {Times, DOT}; $OPEWard = False; + +$ParallelizeFeynCalc/: + Set[$ParallelizeFeynCalc, True]:= + ( + With[{str = FileNameJoin[{$FeynCalcDirectory, "fc.m"}]}, + ParallelEvaluate[Get[str],Kernels[]] + ]; + OwnValues[$ParallelizeFeynCalc] = {HoldPattern[$ParallelizeFeynCalc] :> True}; + True + ) + (* Mathematica versions 8 and 9 do not have the $SystemMemory variable, so for them we set the available memory for memoization to 4 GiB*) If[ !MatchQ[$FCMemoryAvailable,_Integer?NonNegative], diff --git a/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m b/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m index 6a03c788..721525cc 100755 --- a/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m +++ b/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m @@ -100,8 +100,7 @@ FCFeynmanPrepare[gli_, topos:{__FCTopology}, opts:OptionsPattern[]] := - FCFeynmanPrepare[gli,FCLoopSelectTopology[gli,topos],opts]/; - MatchQ[gli, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])]; + FCFeynmanPrepare[gli,FCLoopSelectTopology[gli,topos],opts]/; MatchQ[gli, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])]; FCFeynmanPrepare[gli_, topo_FCTopology, opts:OptionsPattern[]] := Block[{int,optFinalSubstitutions, lmomsHead, lmoms, optLoopMomenta}, @@ -133,16 +132,13 @@ lmoms = topo[[3]] ]; - - FCFeynmanPrepare[int, lmoms, Join[{FCI->True,FinalSubstitutions->optFinalSubstitutions}, FilterRules[{opts}, Except[FCI | FinalSubstitutions]]]] - ]/; MatchQ[gli, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])]; - + ]/; MatchQ[gli, {__GLI}] || MatchQ[gli, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])]; FCFeynmanPrepare[glis_, topos:{__FCTopology}, opts:OptionsPattern[]] := Block[{ ints, finalSubstitutions, relTopos, lmomsList, optLoopMomenta, - lmomsHead}, + lmomsHead, time, res, time1}, If[ OptionValue[FCVerbose]===False, fcszVerbose=$VeryVerbose, @@ -151,25 +147,33 @@ ]; ]; - FCPrint[1,"FCFeynmanPrepare: Entry point: single GLI and multiple topologies.", FCDoControl->fcszVerbose]; - + FCPrint[1,"FCFeynmanPrepare: Entry point: multiple GLIs and multiple topologies.", FCDoControl->fcszVerbose]; optLoopMomenta = OptionValue[LoopMomenta]; lmomsHead = Head[optLoopMomenta[1,1]]; + time=AbsoluteTime[]; + FCPrint[1, "FCFeynmanPrepare: Applying FCLoopFromGLI.", FCDoControl -> fcszVerbose]; ints = FCLoopFromGLI[glis, topos, FCI->OptionValue[FCI], LoopMomenta->optLoopMomenta, FeynAmpDenominatorExplicit->False]; + FCPrint[1, "FCFeynmanPrepare: Done applying FCLoopFromGLI, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose]; - (*relTopos is a list of lists*) - relTopos= FCLoopSelectTopology[{#},topos]&/@glis; + + time=AbsoluteTime[]; + FCPrint[1, "FCFeynmanPrepare: Applying FCLoopSelectTopology.", FCDoControl -> fcszVerbose]; + (*relTopos is a list of lists, this is needed to cover the cases with products of GLIs!*) + relTopos = FCLoopSelectTopology[glis,topos,Check->False,"OneToOneCorrespondence"->True]; + FCPrint[1, "FCFeynmanPrepare: Done applying FCLoopSelectTopology, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose]; + + time=AbsoluteTime[]; + FCPrint[1, "FCFeynmanPrepare: Doing some intermediate steps.", FCDoControl -> fcszVerbose]; If[ !MatchQ[relTopos,{{__FCTopology}..}], Message[FCFeynmanPrepare::failmsg, "Something went wrong when extracting topologies relevant for the given GLIs."]; Abort[] ]; - finalSubstitutions = Flatten /@ Map[Function[x, Map[#[[5]] &, x]], relTopos]; - (*TODO: Tricky, if different topologies define different substitutions w.r.t. the same scalar products ...*) + finalSubstitutions = Flatten /@ Map[Function[x, Map[#[[5]] &, x]], relTopos]; lmomsList = Union[Flatten[#[[3]]&/@Flatten[relTopos]]]; @@ -186,14 +190,33 @@ finalSubstitutions = FCI@FRH[finalSubstitutions]; - MapThread[FCFeynmanPrepare[#1, lmomsList, Join[{FCI->True,FinalSubstitutions->#2}, - FilterRules[{opts}, Except[FCI | FinalSubstitutions]]]]&,{ints,finalSubstitutions}] + FCPrint[1, "FCFeynmanPrepare: Intermediate steps done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose]; + time=AbsoluteTime[]; - ]/; MatchQ[glis,{(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..}]; + If[ $ParallelizeFeynCalc, + FCPrint[1,"FCFeynmanPrepare: Applying FCFeynmanPrepare in parallel.", FCDoControl->fcszVerbose]; + With[{xxx = lmomsList}, ParallelEvaluate[FCContext`FCFeynmanPrepare`lmomsList = xxx;, DistributedContexts -> None]]; + res = ParallelMap[FCFeynmanPrepare[#[[1]], FCContext`FCFeynmanPrepare`lmomsList, Join[{FCI->True,FinalSubstitutions->#[[2]]}, + FilterRules[{opts}, Except[FCI | FinalSubstitutions | FCVerbose]]]]&,Transpose[{ints,finalSubstitutions}], + DistributedContexts -> None, Method -> "CoarsestGrained"]; + FCPrint[1, "FCFeynmanPrepare: Done applying FCFeynmanPrepare in parallel, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose], + + FCPrint[1,"FCFeynmanPrepare: Applying FCFeynmanPrepare.", FCDoControl->fcszVerbose]; + res = MapThread[FCFeynmanPrepare[#1, lmomsList, Join[{FCI->True,FinalSubstitutions->#2}, + FilterRules[{opts}, Except[FCI | FinalSubstitutions| FCVerbose]]]]&,{ints,finalSubstitutions}]; + FCPrint[1, "FCFeynmanPrepare: Done applying FCFeynmanPrepare, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose] + ]; + + res + + ]/; MatchQ[glis, {__GLI}] || MatchQ[glis,{(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..}]; FCFeynmanPrepare[toposRaw: {__FCTopology}, opts:OptionsPattern[]]:= - FCFeynmanPrepare[#, opts]&/@toposRaw; + If[ $ParallelizeFeynCalc, + ParallelMap[FCFeynmanPrepare[#, opts]&,toposRaw, DistributedContexts->None, Method -> "CoarsestGrained"], + Map[FCFeynmanPrepare[#, opts]&,toposRaw] + ]; FCFeynmanPrepare[topoRaw_FCTopology, opts:OptionsPattern[]] := Block[{topo,optFinalSubstitutions}, diff --git a/FeynCalc/LoopIntegrals/FCLoopFindIntegralMappings.m b/FeynCalc/LoopIntegrals/FCLoopFindIntegralMappings.m index a7e9c1bd..790510f1 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindIntegralMappings.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindIntegralMappings.m @@ -98,11 +98,16 @@ lmoms=Flatten[lmomsRaw] ]; - If[ MatchQ[exprRaw,{(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..}], + + If[ (MatchQ[exprRaw,{__GLI}] || MatchQ[exprRaw,{(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..}]), + time=AbsoluteTime[]; + FCPrint[1, "FCLoopFindIntegralMappings: Calling FCLoopSelectTopology.", FCDoControl -> fcfpmVerbose]; expr = Union[Join[exprRaw,optPreferredIntegrals]]; (*Make sure that we have all the topologies needed *) - lmoms = FCLoopSelectTopology[expr,lmoms], + lmoms = FCLoopSelectTopology[expr,lmoms]; + FCPrint[1, "FCLoopFindIntegralMappings: FCLoopSelectTopology done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcfpmVerbose], expr = exprRaw + ]; time=AbsoluteTime[]; diff --git a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m index 3e2f09ca..60575d80 100644 --- a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m +++ b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m @@ -50,7 +50,7 @@ FCLoopFromGLI[expr,{topo}, opts]; FCLoopFromGLI[expr_, toposRaw_List, OptionsPattern[]] := - Block[{ res, topos, listGLI, rule, optLoopMomenta, gliHead, + Block[{ res, topos, listGLI, rule, optLoopMomenta, gliHead, time, time1, pattern, fromGliRule, listGLIEval, ruleFinal, relevantTopos, optList}, optFeynAmpDenominatorExplicit = OptionValue[FeynAmpDenominatorExplicit]; @@ -79,15 +79,23 @@ FCI is applied only to the propagators in the topologies, not to the full expression. This is fine, since a GLI havs no FCE representation *) + + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Applying FCI." , FCDoControl->fgliVerbose]; If[ !OptionValue[FCI], topos = FCI[toposRaw], topos = toposRaw ]; + FCPrint[1,"FCLoopFromGLI: Done applying FCI, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; + + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Applying FCLoopValidTopologyQ." , FCDoControl->fgliVerbose]; If[ !FCLoopValidTopologyQ[topos], Message[FCLoopFromGLI::failmsg, "The list of the supplied topologies is incorrect."]; Abort[] ]; + FCPrint[1,"FCLoopFromGLI: Done applying FCLoopValidTopologyQ, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; If[ FreeQ[expr,GLI], FCPrint[1,"FCLoopFromGLI: Nothing to do.", FCDoControl->fgliVerbose]; @@ -106,6 +114,10 @@ For the time being we simply assume that an amplitude contains no products of GLIs. *) Which[ + (*This is to catch big lists of GLIs and avoid max recursion exceeded error messages*) + MatchQ[expr, {__GLI}], + listGLI = expr; + res = gliHead/@listGLI, MatchQ[expr, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..])], listGLI = {expr}; res = gliHead[expr], @@ -118,24 +130,58 @@ res = expr /. a_GLI :> gliHead[a] ]; + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Selecting relevant topologies." , FCDoControl->fgliVerbose]; relevantTopos = Union[FCLoopSelectTopology[listGLI,topos]]; + FCPrint[1,"FCLoopFromGLI: Done selecting relevant topologies, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Relevant topologies: ", relevantTopos, FCDoControl->fgliVerbose]; - fromGliRule = Map[rule[GLI[#[[1]], - Table[pattern[ToExpression["n"<>ToString[i]],_],{i,1,Length[#[[2]]]}]], powFu[#[[2]]]]&,relevantTopos]/.pattern->Pattern/.rule->RuleDelayed; + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Creating conversion rules." , FCDoControl->fgliVerbose]; + If[ $ParallelizeFeynCalc, + fromGliRule = ParallelMap[(rule[GLI[#[[1]], Table[pattern[ToExpression["n"<>ToString[i]],_],{i,1,Length[#[[2]]]}]], + powFu[#[[2]]]] /.pattern->Pattern/.rule->RuleDelayed)&,relevantTopos, DistributedContexts->None,Method->"CoarsestGrained"], + fromGliRule = Map[rule[GLI[#[[1]], Table[pattern[ToExpression["n"<>ToString[i]],_],{i,1,Length[#[[2]]]}]], + powFu[#[[2]]]]&,relevantTopos]/.pattern->Pattern/.rule->RuleDelayed; + ]; + FCPrint[1,"FCLoopFromGLI: Done creating conversion rules, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Conversion rules: ", fromGliRule, FCDoControl->fgliVerbose]; + + FCPrint[1,"FCLoopFromGLI: Applying conversion rules." , FCDoControl->fgliVerbose]; If[ !MatchQ[listGLI,{__GLI}], - listGLIEval = (gliToFAD[#,fromGliRule, relevantTopos, optLoopMomenta]&/@listGLI) /. powerHold->power, - listGLIEval = listGLI /. Dispatch[fromGliRule] /. powerHold->power + + If[ $ParallelizeFeynCalc, + + listGLIEval = (ParallelMap[gliToFAD[#,fromGliRule, relevantTopos, optLoopMomenta]&,listGLI, DistributedContexts->None(*, Method -> "CoarsestGrained"*)]) /. powerHold->power, + listGLIEval = (Map[gliToFAD[#,fromGliRule, relevantTopos, optLoopMomenta]&,listGLI]) /. powerHold->power + ], + + If[ $ParallelizeFeynCalc, + + time1=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Distributing conversion rules among the parallel kernels", FCDoControl->fgliVerbose]; + With[{xxx = Compress[fromGliRule]}, ParallelEvaluate[FCContextFCLoopFromGLI`fromGliRule = xxx;, DistributedContexts -> None]]; + ParallelEvaluate[FCContextFCLoopFromGLI`fromGliRule = Dispatch[Uncompress[FCContextFCLoopFromGLI`fromGliRule]];, DistributedContexts -> None]; + FCPrint[1,"FCLoopFromGLI: Done distributing conversion rules among the parallel kernels, timing: ", N[AbsoluteTime[] - time1, 4] , FCDoControl->fgliVerbose]; + + time1=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Applying conversion rules on parallel kernels", FCDoControl->fgliVerbose]; + listGLIEval = ParallelMap[(#/. FCContextFCLoopFromGLI`fromGliRule /. powerHold->power)&,Partition[listGLI, UpTo[Ceiling[Length[listGLI]/Length[Kernels[]]]]], + DistributedContexts->None, Method -> "CoarsestGrained"]; + listGLIEval = Flatten[listGLIEval]; + FCPrint[1,"FCLoopFromGLI: Done applying conversion rules on parallel, timing: ", N[AbsoluteTime[] - time1, 4] , FCDoControl->fgliVerbose];, + + listGLIEval = listGLI /. Dispatch[fromGliRule] /. powerHold->power + ] ]; + FCPrint[1,"FCLoopFromGLI: Done applying conversion rules, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Converted GLIs: ", listGLIEval, FCDoControl->fgliVerbose]; - Switch[optList, True, listGLIEval = listGLIEval/. list->List, @@ -153,17 +199,24 @@ Abort[] ]; - If[ OptionValue[FeynAmpDenominatorCombine], - listGLIEval = FeynAmpDenominatorCombine[#,FCI->True]&/@listGLIEval + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Applying FeynAmpDenominatorCombine." , FCDoControl->fgliVerbose]; + listGLIEval = FeynAmpDenominatorCombine[#,FCI->True]&/@listGLIEval; + FCPrint[1,"FCLoopFromGLI: Done applying FeynAmpDenominatorCombine, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; ]; + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Creating the final replacement rule." , FCDoControl->fgliVerbose]; ruleFinal = Thread[Rule[gliHead/@listGLI,listGLIEval]]; + FCPrint[1,"FCLoopFromGLI: Done creating the final replacement rule, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Final set of the replacement rules: ", ruleFinal, FCDoControl->fgliVerbose]; - + time=AbsoluteTime[]; + FCPrint[1,"FCLoopFromGLI: Applying the final replacement rule." , FCDoControl->fgliVerbose]; res = res /. Dispatch[ruleFinal]; + FCPrint[1,"FCLoopFromGLI: Done applying the final replacement rule, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Raw result: ", res, FCDoControl->fgliVerbose]; @@ -210,8 +263,6 @@ ]; - - power[_. _FeynAmpDenominator, 0]:= 1; diff --git a/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m b/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m index 3d4e1af2..514e220a 100755 --- a/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m +++ b/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m @@ -34,15 +34,16 @@ fclsVerbose::usage = ""; Options[FCLoopSelectTopology] = { - FCE -> False, - Check -> True + FCE -> False, + Check -> True, + "OneToOneCorrespondence" -> False }; FCLoopSelectTopology[ex_/;Head[ex]=!=List, topos:{__FCTopology}, opts:OptionsPattern[]] := First[FCLoopSelectTopology[{ex}, topos, opts]]; FCLoopSelectTopology[glisRaw_List, topos:{__FCTopology}, OptionsPattern[]] := - Block[{res, glis, gliTopos,null}, + Block[{res, glis, gliTopos, null, optOneToOne, aux}, If[ OptionValue[Check], If[ !FCLoopValidTopologyQ[topos], @@ -51,55 +52,45 @@ ]; ]; - If[ TrueQ[!MatchQ[glisRaw, {__GLI}]], - glis = Cases2[glisRaw+null,GLI], - glis = glisRaw - ]; - - gliTopos=Union[First/@glis]; + optOneToOne = OptionValue["OneToOneCorrespondence"]; - res = Sort[Select[topos,MemberQ[gliTopos,First[#]]&]]; + If[ TrueQ[!MatchQ[glisRaw, {__GLI}]], - If[ res==={}, - Message[FCLoopSelectTopology::failmsg,"There are no topologies that appear in the given list of GLIs"]; - Abort[] + If[ TrueQ[MatchQ[glisRaw,{(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..}]], + (*List of GLIs involving products*) + glis = Cases2[#+null,GLI]&/@glisRaw; + gliTopos=glis /. GLI[id_,__] :> id, + + (*Amplitude*) + glis = Cases2[glisRaw+null,GLI]; + gliTopos=List/@First/@glis + ], + (*List of GLIs without any products*) + glis = glisRaw; + gliTopos=List/@First/@glis; ]; - (* - If[MatchQ[glisRaw, {_GLI}], - res=First[res] - ];*) - If[ OptionValue[FCE], - res =FCE[res] + If[ !optOneToOne, + gliTopos = Union[Flatten[gliTopos]] ]; - res - ] -(* -FCLoopSelectTopology[GLI[id_,_List], topos:{__FCTopology}, OptionsPattern[]] := - Block[{res}, - - If[ OptionValue[Check], - If[ !FCLoopValidTopologyQ[topos], - Message[FCLoopSelectTopology::failmsg, "The supplied list of topologie is incorrect."]; - Abort[] - ]; + If[ !optOneToOne, + res = Sort[Select[topos,MemberQ[gliTopos,First[#]]&]], + aux = Map[Rule[#[[1]], #] &, topos]; + res = gliTopos /. Dispatch[aux] ]; - res = Select[topos,(#[[1]]===id)&]; If[ res==={}, - Message[FCLoopSelectTopology::failmsg,"There are no topologies with the id " <> ToString[id]]; + Message[FCLoopSelectTopology::failmsg,"There are no topologies that appear in the given list of GLIs"]; Abort[] ]; - res = First[res]; - If[ OptionValue[FCE], res =FCE[res] ]; res - ] -*) + ]; + FCPrint[1,"FCLoopSelectTopology.m loaded."]; End[] diff --git a/FeynCalc/LoopIntegrals/FCLoopToPakForm.m b/FeynCalc/LoopIntegrals/FCLoopToPakForm.m index da3b8a66..afc2c32c 100755 --- a/FeynCalc/LoopIntegrals/FCLoopToPakForm.m +++ b/FeynCalc/LoopIntegrals/FCLoopToPakForm.m @@ -106,21 +106,24 @@ ]; Which[ + (*List of integrals, the first condition avoids the "Recursion limit exceeded; positive match might be missed" error *) + MatchQ[ex, {__GLI}] || MatchQ[ex, {(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..} | {__FCTopology}], + FCPrint[1, "FCLoopToPakForm: We are dealing with a list of GLIs.", FCDoControl -> fctpfVerbose]; + tmp = FCFeynmanPrepare[ex, lmoms, FCI -> True, FinalSubstitutions -> optFinalSubstitutions, + Names -> OptionValue[Names], Indexed -> OptionValue[Indexed], Check->OptionValue[Check], + Collecting -> OptionValue[Collecting], FCLoopGetEtaSigns -> False], (*Single integral *) MatchQ[ex,_. _FeynAmpDenominator] || MatchQ[ex, (_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) | _FCTopology], notList = True; + FCPrint[1, "FCLoopToPakForm: We are dealing with a single integral.", FCDoControl -> fctpfVerbose]; tmp = FCFeynmanPrepare[ex, lmoms, FCI -> True, FinalSubstitutions -> optFinalSubstitutions, Names -> OptionValue[Names], Indexed -> OptionValue[Indexed], Check->OptionValue[Check], Collecting -> OptionValue[Collecting], FCLoopGetEtaSigns -> False]; tmp = {tmp}; ex = {ex}, (*List of integrals *) - MatchQ[ex, {(_GLI | Power[_GLI, _] | HoldPattern[Times][(_GLI | Power[_GLI, _]) ..]) ..} | {__FCTopology}], - tmp = FCFeynmanPrepare[ex, lmoms, FCI -> True, FinalSubstitutions -> optFinalSubstitutions, - Names -> OptionValue[Names], Indexed -> OptionValue[Indexed], Check->OptionValue[Check], - Collecting -> OptionValue[Collecting], FCLoopGetEtaSigns -> False], - (*List of integrals *) MatchQ[ex, {_. _FeynAmpDenominator ..}], + FCPrint[1, "FCLoopToPakForm: We are dealing with a list of integrals.", FCDoControl -> fctpfVerbose]; tmp = FCFeynmanPrepare[#, lmoms, FCI -> True, FinalSubstitutions -> optFinalSubstitutions, Names -> OptionValue[Names], Indexed -> OptionValue[Indexed], Check->OptionValue[Check], Collecting -> OptionValue[Collecting], FCLoopGetEtaSigns -> False]&/@ex, @@ -133,11 +136,20 @@ FCPrint[3, "FCLoopToPakForm: Output of FCFeynmanPrepare: ", tmp, FCDoControl->fctpfVerbose]; + time=AbsoluteTime[]; - FCPrint[1, "FCLoopToPakForm: Calling pakProcess.", FCDoControl -> fctpfVerbose]; - tmp = pakProcess[#,{optFactoring,optPowerMark,optCharacteristicPolynomial, optFCLoopPakOrder}]&/@tmp; + If[ $ParallelizeFeynCalc, + + FCPrint[1, "FCLoopToPakForm: Calling pakProcess in parallel.", FCDoControl -> fctpfVerbose]; + With[{xxx = {optFactoring,optPowerMark,optCharacteristicPolynomial, optFCLoopPakOrder}}, + ParallelEvaluate[FCParallelContext`FCLoopToPakForm`pakProcessOptions = xxx;, DistributedContexts -> None]]; + res = ParallelMap[pakProcess[#,FCParallelContext`FCLoopToPakForm`pakProcessOptions]&,tmp, DistributedContexts -> None, Method -> "CoarsestGrained"], + + FCPrint[1, "FCLoopToPakForm: Calling pakProcess.", FCDoControl -> fctpfVerbose]; + tmp = pakProcess[#,{optFactoring,optPowerMark,optCharacteristicPolynomial, optFCLoopPakOrder}]&/@tmp + ]; FCPrint[1, "FCLoopToPakForm: pakProcess done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fctpfVerbose]; If[ !FreeQ[tmp,pakProcess], @@ -145,8 +157,26 @@ Abort[] ]; - (* Function[{U, F, charPoly, pows, head, int, sigma}, {int, head[ExpandAll[charPoly], Transpose[pows]]}]*) - res = MapThread[OptionValue[Function][Sequence@@(#1[[1;;4]]), OptionValue[Head], #2, #1[[5]]]&,{tmp,ex}]; + + time=AbsoluteTime[]; + + If[ $ParallelizeFeynCalc, + + FCPrint[1, "FCLoopToPakForm: Building up the final result in parallel.", FCDoControl -> fctpfVerbose]; + With[{xxx = OptionValue[Function], yyy= OptionValue[Head]}, + ParallelEvaluate[( FCParallelContext`FCLoopToPakForm`optValFunction = xxx; + FCParallelContext`FCLoopToPakForm`optValHead = yyy;), DistributedContexts -> None]]; + + res = ParallelMap[FCParallelContext`FCLoopToPakForm`optValFunction[Sequence@@(#[[1]][[1;;4]]), FCParallelContext`FCLoopToPakForm`optValHead, + #[[2]], #[[1]][[5]]]&,Transpose[{tmp,ex}], + DistributedContexts -> None, Method -> "CoarsestGrained"], + + FCPrint[1, "FCLoopToPakForm: Building up the final result.", FCDoControl -> fctpfVerbose]; + (* Function[{U, F, charPoly, pows, head, int, sigma}, {int, head[ExpandAll[charPoly], Transpose[pows]]}]*) + res = MapThread[OptionValue[Function][Sequence@@(#1[[1;;4]]), OptionValue[Head], #2, #1[[5]]]&,{tmp,ex}]; + ]; + + FCPrint[1, "FCLoopToPakForm: Done building up the final result, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fctpfVerbose]; If[ notList, res = First[res] diff --git a/FeynCalc/fc.m b/FeynCalc/fc.m index be60551f..b0ee392f 100644 --- a/FeynCalc/fc.m +++ b/FeynCalc/fc.m @@ -1 +1,3 @@ +$FeynCalcStartupMessages=False; +$FCCheckContext=False; Needs["FeynCalc`"]; diff --git a/Tests/LoopIntegrals/FCLoopSelectTopology.test b/Tests/LoopIntegrals/FCLoopSelectTopology.test index 1130125e..793ff3e6 100644 --- a/Tests/LoopIntegrals/FCLoopSelectTopology.test +++ b/Tests/LoopIntegrals/FCLoopSelectTopology.test @@ -72,5 +72,30 @@ p1,0},{-m1^2,-1},1}],SFAD[{{I*(p1+q1),0},{-m3^2,-1},1}],SFAD[{{I*p3,0}\ "{FCTopology[prop2Ltopo13311, {SFAD[{{I*p1, 0}, {-m1^2, -1}, 1}], SFAD[{{I*(p1 + q1), 0}, {-m3^2, -1}, 1}], SFAD[{{I*p3, 0}, {-m3^2, -1}, 1}], SFAD[{{I*(p3 + q1), 0}, {-m1^2, -1}, 1}], SFAD[{{I*(p1 - p3), 0}, {-m1^2, -1}, 1}]}, -{p1, p3}, {q1}, {SPD[q1, q1] -> m1^2}, {}]}"} +{p1, p3}, {q1}, {SPD[q1, q1] -> m1^2}, {}]}"}, + +{"fcstFCLoopSelectTopology-ID8", +"FCLoopSelectTopology[{GLI[ +asyR2prop2Ltopo13011X11011N1, {1, 1, 1, 0, 0}], +GLI[asyR2prop2Ltopo13011X11011N1, {0, 1, 1, 0, 0}] GLI[ + tad1Ltopo1, {1}]}, {FCTopology[ +asyR2prop2Ltopo13011X11011N1, {SFAD[{{ + -I p3, 0}, {-m1^2, -1}, 1}], + SFAD[{{I p1, 0}, {-m3^2, -1}, 1}], + SFAD[{{0, 2 p1 . q}, {0, -1}, 1}], + SFAD[{{0, p1 . p3}, {0, -1}, 1}], + SFAD[{{0, p3 . q}, {0, -1}, 1}]}, {p1, + p3}, {q}, {SPD[q, q] -> m1^2}, {}], +FCTopology[ +tad1Ltopo1, {SFAD[{{I p1, 0}, {-m1^2, -1}, 1}]}, {p1}, {}, {SPD[ + q1, q1] -> m1^2}, {}]}, \"OneToOneCorrespondence\" -> True, +FCE -> True]", +"{{FCTopology[asyR2prop2Ltopo13011X11011N1, {SFAD[{{(-I)*p3, 0}, {-m1^2, -1}, 1}], +SFAD[{{I*p1, 0}, {-m3^2, -1}, 1}], SFAD[{{0, 2*p1 . q}, {0, -1}, 1}], SFAD[{{0, p1 . p3}, +{0, -1}, 1}], SFAD[{{0, p3 . q}, {0, -1}, 1}]}, +{p1, p3}, {q}, {SPD[q, q] -> m1^2}, {}]}, {FCTopology[asyR2prop2Ltopo13011X11011N1, +{SFAD[{{(-I)*p3, 0}, {-m1^2, -1}, 1}], SFAD[{{I*p1, 0}, {-m3^2, -1}, 1}], SFAD[{{0, 2*p1 . q}, +{0, -1}, 1}], SFAD[{{0, p1 . p3}, {0, -1}, 1}], SFAD[{{0, p3 . q}, {0, -1}, 1}]}, {p1, p3}, +{q}, {SPD[q, q] -> m1^2}, {}], FCTopology[tad1Ltopo1, {SFAD[{{I*p1, 0}, {-m1^2, -1}, 1}]}, +{p1}, {}, {SPD[q1, q1] -> m1^2}, {}]}}"} }); From 119134794c6a3d8100d7a6dab788edd81cebd32c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 20 Feb 2024 17:04:50 +0100 Subject: [PATCH 17/67] Fixed a bug in the docu script for generating HTML files. --- FeynCalc/Documentation/Scripts/generateHTML.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/FeynCalc/Documentation/Scripts/generateHTML.sh b/FeynCalc/Documentation/Scripts/generateHTML.sh index 722edffb..93519522 100755 --- a/FeynCalc/Documentation/Scripts/generateHTML.sh +++ b/FeynCalc/Documentation/Scripts/generateHTML.sh @@ -91,12 +91,14 @@ fi parallel -j $nThreads -u --eta --bar "$scriptDIR/generateHTML.sh {} $OUTDIR" ::: ${allFiles[@]}; -if [ -z ${mainDir}/Extra ]; then - mkdir $OUTDIR/Extra &> /dev/null; +if [ -d ${mainDir}/Markdown/Extra ]; then + mkdir $OUTDIR/Extra &> /dev/null; allFilesExtra=$(find $mainDir/Markdown/Extra -type f -name '*.md' -print) allFilesExtra=($(printf "%s\n" "${allFilesExtra[@]}" | sort -V)) for i in "${allFilesExtra[@]}"; do name=$(basename -s .md $i); + echo $OUTDIR/$name.html to $OUTDIR/Extra/ + mv $OUTDIR/$name.html $OUTDIR/Extra/; sed -i -e "s|css/feyncalc.css|../css/feyncalc.css|g" $OUTDIR/Extra/$name.html; sed -i -e "s|js/|../js/|g" $OUTDIR/Extra/$name.html; From 4620aa43f3768d90d69de59d2f3c0fbdafb6acb6 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 21 Feb 2024 18:08:06 +0100 Subject: [PATCH 18/67] Added an example for calculating the LO SCET Soft function using the new light-cone tools. --- .../Tree/Mathematica/Ga-QQbar-SoftFunction.m | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 FeynCalc/Examples/QCD/Tree/Mathematica/Ga-QQbar-SoftFunction.m diff --git a/FeynCalc/Examples/QCD/Tree/Mathematica/Ga-QQbar-SoftFunction.m b/FeynCalc/Examples/QCD/Tree/Mathematica/Ga-QQbar-SoftFunction.m new file mode 100644 index 00000000..54eb9674 --- /dev/null +++ b/FeynCalc/Examples/QCD/Tree/Mathematica/Ga-QQbar-SoftFunction.m @@ -0,0 +1,234 @@ +(* ::Package:: *) + +(* :Title: Ga-QQbar-SoftFunction *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Ga^* -> Q Qbar, QCD, SCET soft function, tree *) + +(* ------------------------------------------------------------------------ *) + + + +(* ::Title:: *) +(*LO SCET Soft function*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +description="Ga^* -> Q Qbar, QCD, SCET soft function, tree"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +$LoadAddOns={"FeynArts"}; +< 2], {V[1]} -> + {F[3, {1}], -F[3, {1}]}, InsertionLevel -> {Classes}, Model -> "SMQCD"]; +Paint[diagQQ, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{512,256}]; + + +diagsQQG = InsertFields[CreateTopologies[0, 1 -> 3], {V[1]} -> + {F[3, {1}], -F[3, {1}], V[5]}, InsertionLevel -> {Classes}, + Model -> "SMQCD"]; +Paint[diagsQQG, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{512,256}]; + + +(* ::Section:: *) +(*Obtain the amplitudes*) + + +ampQQ[0] = FCFAConvert[CreateFeynAmp[diagQQ], IncomingMomenta->{p}, + OutgoingMomenta->{k1,k2},UndoChiralSplittings->True,ChangeDimension->D, + List->False, SMP->True, Contract->True,DropSumOver->True, + Prefactor->3/2 SMP["e_Q"],FinalSubstitutions->{SMP["m_u"]->0}] + + +ampQQG[0] = FCFAConvert[CreateFeynAmp[diagsQQG], IncomingMomenta->{p}, + OutgoingMomenta->{k1,k2,k},UndoChiralSplittings->True,ChangeDimension->D, + List->True, SMP->True, Contract->True,DropSumOver->True, + Prefactor->3/2 SMP["e_Q"],FinalSubstitutions->{SMP["m_u"]->0}] + + +(* ::Section:: *) +(*Fix the kinematics*) + + +(* ::Text:: *) +(*quark k1 is collinear so that k1 = n^mu (k1.nb) with k1 ~ (la^2,1,la)*) +(*antiquark k2 is anticollinear so that k2 = nb^mu (k2.n) with k2 ~ (1,la^2,la)*) +(*gluon k is ultrasoft with k ~ (la^2, la^2, la^2)*) + + +$FCDefaultLightconeVectorN=n; +$FCDefaultLightconeVectorNB=nb; +FCClearScalarProducts[] +ScalarProduct[nb]=0; +ScalarProduct[n,nb]=2; +ScalarProduct[n]=0; +ScalarProduct[k]=0; +ScalarProduct[k1,n]=0; +ScalarProduct[k2,nb]=0; + + +LightConePerpendicularComponent[Momentum[k1],Momentum[n],Momentum[nb]]=0; +LightConePerpendicularComponent[Momentum[k2],Momentum[n],Momentum[nb]]=0; +LightConePerpendicularComponent[Momentum[k1,D],Momentum[n,D],Momentum[nb,D]]=0; +LightConePerpendicularComponent[Momentum[k2,D],Momentum[n,D],Momentum[nb,D]]=0; + + +DataType[Q,FCVariable]=True; +DataType[la,FCVariable]=True; + + +(* ::Section:: *) +(*Auxiliary code *) + + +(* ::Text:: *) +(*This code handles the decomposition of spinors containing only collinear and anticollinear components*) + + +ClearAll[spinorDecomposeD]; +spinorDecomposeD[ex_,cMoms_List,acMoms_List,n_,nb_]:= + Block[{expr,holdDOT,res,Pmin,Pplus,hold}, + Pmin=GSD[nb,n]/4; + Pplus=GSD[n,nb]/4; + expr=ex/.DOT->holdDOT; + expr=expr//.{ + (*ubar_xi_c n_slash = 0*) + (*vbar_xi_c n_slash = 0*) + holdDOT[Spinor[c_. Momentum[mom_,D],r___],rest___]/;MemberQ[cMoms,mom]:> + holdDOT[hold[Spinor][c Momentum[mom,D],r],Pmin,rest], + + (*n_slash u_xi_c = 0*) + (*n_slash v_xi_c = 0*) + holdDOT[rest___,Spinor[c_. Momentum[mom_,D],r___]]/;MemberQ[cMoms,mom]:> + holdDOT[rest,Pplus,hold[Spinor][c Momentum[mom,D],r]], + + (*ubar_xi_cbar nbar_slash = 0*) + (*vbar_xi_cbar nbar_slash = 0*) + holdDOT[Spinor[c_. Momentum[mom_,D],r___],rest___]/;MemberQ[acMoms,mom]:> + holdDOT[hold[Spinor][c Momentum[mom,D],r],Pplus,rest], + + (*nbar_slash u_xi_cbar = 0*) + (*nbar_slash v_xi_cbar = 0*) + holdDOT[rest___,Spinor[c_. Momentum[mom_,D],r___]]/;MemberQ[acMoms,mom]:> + holdDOT[rest,Pmin,hold[Spinor][c Momentum[mom,D],r]] + }; + res=expr/.holdDOT->DOT/.hold->Identity; + res + ]; + + +(* ::Section:: *) +(*Expand and square the amplitudes*) + + +(* ::Text:: *) +(*Born amplitude rewritten in terms of large components of the collinear fields*) + + +ampQQ[1]=ampQQ[0]//ToLightConeComponents//spinorDecomposeD[#,{k1},{k2},n,nb]&// +DiracSimplify + + +ampQQSq[1]=SUNSimplify[ampQQ[1]ComplexConjugate[ampQQ[1]]]//Simplify + + +(* ::Text:: *) +(*Introduce the lightcone components, simplify Dirac algebra, add scaling of k for the expansion*) + + +ampQQG[1]=ampQQG[0]//FeynAmpDenominatorExplicit//ToLightConeComponents// +DiracSimplify//FCReplaceMomenta[#,{k->la^2 k}]&; + + +(* ::Text:: *) +(*Expand up to leading power, reorder Dirac matrices*) + + +ampQQG[2]=Series[ampQQG[1],{la,0,-2}]//Normal//DotSimplify// +DiracSimplify[#,DiracOrder->{n,nb,Polarization}]&//ReplaceAll[#,la->1]& + + +(* ::Text:: *) +(*Introduce large components of the collinear fields*) + + +ampQQG[3]=ampQQG[2]//spinorDecomposeD[#,{k1},{k2},n,nb]&//DiracSimplify + + +(* ::Text:: *) +(*Square the amplitudes, sum over the gluon polarizations*) + + +ampQQGSq[1]=Total[ampQQG[3]]ComplexConjugate[Total[ampQQG[3]]]//SUNSimplify// +DoPolarizationSums[#,k,aux]& + + +(* ::Section:: *) +(*Final LO soft function*) + + +(* ::Text:: *) +(*Divide out the born amplitude squared*) + + +aux=(ampQQGSq[1]/ampQQSq[1])/.SMP["g_s"]->Sqrt[4Pi SMP["alpha_s"]] + + +(* ::Text:: *) +(*Account for the extra prefactor*) + + +pref=1/(32Pi^2); + + +res = aux pref + + +(* ::Section:: *) +(*Check the final results*) + + +knownResults = { + (CF*SMP["alpha_s"])/(2*Pi*Pair[Momentum[k, D], Momentum[n, D]]*Pair[Momentum[k, D], Momentum[nb, D]]) +}; +FCCompareResults[{res},knownResults, +Text->{"\tCompare to Automation, \ +of Calculations in Soft-Collinear Effective Theory by R. Rahn, Eq. 5.3", +"CORRECT.","WRONG!"}, Interrupt->{Hold[Quit[1]],Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[],4],0.001], " s."]; + + + From f4600dc58a27a32d368cfb9c3ed2c03c6b87bae0 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 28 Feb 2024 18:18:11 +0100 Subject: [PATCH 19/67] Fixed a bug in TARCER due to a missprint in Eq.92 of hep-ph/9703319, cf. also Eq. 2.4 in 2210.10593. Thanks to Y. Schroeder! --- FeynCalc/AddOns/TARCER/README.MD | 2 +- FeynCalc/AddOns/TARCER/TARCERSource.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FeynCalc/AddOns/TARCER/README.MD b/FeynCalc/AddOns/TARCER/README.MD index f54af363..5ca1dc15 100755 --- a/FeynCalc/AddOns/TARCER/README.MD +++ b/FeynCalc/AddOns/TARCER/README.MD @@ -3,7 +3,7 @@ TARCER is a Mathematica program for the reduction of two-loop propagator integra # Requirements -The latest versions of TARCER are designed as an addon for FeynCalc. To use TARCER you need FeynCalc and Mathematica (at least version 8). +The latest versions of TARCER are designed as an addon for FeynCalc. To use TARCER you need FeynCalc and Mathematica (at least version 10). # Installation diff --git a/FeynCalc/AddOns/TARCER/TARCERSource.m b/FeynCalc/AddOns/TARCER/TARCERSource.m index 7b21b08b..484a3167 100644 --- a/FeynCalc/AddOns/TARCER/TARCERSource.m +++ b/FeynCalc/AddOns/TARCER/TARCERSource.m @@ -2867,12 +2867,12 @@ generate a separate notebook (if and only if $Comment is True) where \ Subscript[e, 92] = 2*Subscript[m, 2]*Subscript[m,3]*(Subscript[m, 2] + Subscript[m, 3])*(d - 2*Subscript[\[Nu], 1] - 2*Subscript[\[Nu], 2] - - 2*Subscript[\[Nu], 3] - 1)*Schiebe[1, "+"] TKI[d, {Subscript[\[Nu], 1], Subscript[\[Nu], 2], Subscript[\[Nu], 3]}] == + 2*Subscript[\[Nu], 3] - 1)*Schiebe[1, "+"] TKI[d+2, {Subscript[\[Nu], 1], Subscript[\[Nu], 2], Subscript[\[Nu], 3]}] == (Subscript[m, 2]*((d - Subscript[\[Nu], 1] - Subscript[\[Nu], 2] - 2*Subscript[\[Nu], 3] - 1)*(Schiebe[1, "+"]*Schiebe[2, "-"] -1) + (Subscript[\[Nu], 1] - Subscript[\[Nu], 2] + 1)*Schiebe[1, "+"]*Schiebe[3, "-"]) + Subscript[m, 3]*((d - Subscript[\[Nu], 1] - 2*Subscript[\[Nu], 2] - Subscript[\[Nu], 3] - 1)*(Schiebe[1, "+"]*Schiebe[3, "-"] - 1) + (Subscript[\[Nu], 1] - Subscript[\[Nu], 3] + 1)*Schiebe[1, "+"]*Schiebe[2, "-"]))* - TKI[d, {Subscript[\[Nu], 1], Subscript[\[Nu], 2], Subscript[\[Nu], 3]}]; + TKI[d+2, {Subscript[\[Nu], 1], Subscript[\[Nu], 2], Subscript[\[Nu], 3]}]; Subscript[s, 92] = OperatorApplyK[Subscript[e, 92]]; From cab39a3fc1283fa76bcb8975185b64c74e974e5f Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 28 Feb 2024 18:18:33 +0100 Subject: [PATCH 20/67] Minor adjustment in the documentation scripts. --- FeynCalc/Documentation/Scripts/CheckMissingDocu.m | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/FeynCalc/Documentation/Scripts/CheckMissingDocu.m b/FeynCalc/Documentation/Scripts/CheckMissingDocu.m index c66aa78c..806a4234 100644 --- a/FeynCalc/Documentation/Scripts/CheckMissingDocu.m +++ b/FeynCalc/Documentation/Scripts/CheckMissingDocu.m @@ -56,7 +56,7 @@ "FeynCalc", Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerSolve","FeynCalc","SharedObjects","FCLoopBasis","ToSymbol"}],docFiles],"\n"]], "FeynHelpers", - Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerSolve","FerShared","LTools","QGShared"}],docFiles],"\n"]] + Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerSolve","FerShared","LTools","QGShared","file"}],docFiles],"\n"]] ]; @@ -92,7 +92,7 @@ "FeynCalc", Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerSolve","FeynCalc","SharedObjects","FCLoopBasis","ToSymbol"}],overviewSymbols],"\n"]];, "FeynHelpers", - Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerShared","LTools","QGShared"}],overviewSymbols],"\n"]] + Print[StringRiffle[Complement[SelectFree[fcSymbols,{"FerShared","LTools","QGShared","file"}],overviewSymbols],"\n"]] ]; @@ -105,5 +105,3 @@ StringRiffle[SelectFree[Complement[overviewSymbols,fcSymbols],"FerSolve"],"\n"] ]; - - From 9e8f29b9b9893807e8c280b87c74b15094b5883d Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 28 Feb 2024 18:18:40 +0100 Subject: [PATCH 21/67] Updated .gitignore. --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index fb99adfc..7d7d3eb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ FeynCalc/FeynArts FeynCalc/FeynArts/* -FeynCalc/Database/*.db -FeynCalc/Database/*/*.lbases -FeynCalc/Database/*/*.sbases +FeynCalc/Database/* FeynCalc/Examples/Temp FeynCalc/Examples/*/WIP FeynCalc/Examples/WIP From 0048c8be4a2f1259276d4ddb5f66f6c5e371556c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 1 Mar 2024 17:57:38 +0100 Subject: [PATCH 22/67] Fixed an issue in parallelizing FCLoopFromGLI. --- FeynCalc/LoopIntegrals/FCLoopFromGLI.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m index 60575d80..5ec0a5f1 100644 --- a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m +++ b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m @@ -154,13 +154,13 @@ FCPrint[1,"FCLoopFromGLI: Applying conversion rules." , FCDoControl->fgliVerbose]; If[ !MatchQ[listGLI,{__GLI}], - If[ $ParallelizeFeynCalc, + If[ $ParallelizeFeynCalc && Length[topos]=!=1, listGLIEval = (ParallelMap[gliToFAD[#,fromGliRule, relevantTopos, optLoopMomenta]&,listGLI, DistributedContexts->None(*, Method -> "CoarsestGrained"*)]) /. powerHold->power, listGLIEval = (Map[gliToFAD[#,fromGliRule, relevantTopos, optLoopMomenta]&,listGLI]) /. powerHold->power ], - If[ $ParallelizeFeynCalc, + If[ $ParallelizeFeynCalc && Length[topos]=!=1, time1=AbsoluteTime[]; FCPrint[1,"FCLoopFromGLI: Distributing conversion rules among the parallel kernels", FCDoControl->fgliVerbose]; From 14c77a8d064a77943cda4708360fe632eb9db07d Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 1 Mar 2024 17:58:12 +0100 Subject: [PATCH 23/67] Infos from the wiki translated to the main docu. --- .../Markdown/Extra/Development.md | 105 +++++++ .../Documentation/Markdown/Extra/FeynArts.md | 73 +++++ .../Documentation/Markdown/Extra/FeynCalc.md | 3 + .../Extra/FrequentlyAskedQuestions.md | 274 ++++++++++++++++++ .../Documentation/Markdown/Extra/Install.md | 6 +- 5 files changed, 458 insertions(+), 3 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/Extra/Development.md create mode 100644 FeynCalc/Documentation/Markdown/Extra/FeynArts.md create mode 100644 FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md diff --git a/FeynCalc/Documentation/Markdown/Extra/Development.md b/FeynCalc/Documentation/Markdown/Extra/Development.md new file mode 100644 index 00000000..0c01c863 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/Extra/Development.md @@ -0,0 +1,105 @@ +## Development + +### See also + +[Overview](FeynCalc.md). + +If you are using FeynCalc in your research activities on a regular basis, sooner or later you will encounter situations, where FeynCalc is missing something that you need. Provided that you have some knowledge in Mathematica programming, you can in principle extend FeynCalc with whatever you want, where the only limits are your skills and the amount of time you want to invest into it. + +Here we collect some tips and recommendations for extending/modifying FeynCalc + +### Unit tests + +To improve the code quality of FeynCalc and avoid new bugs or regressions we employ a large number of [unit tests](https://en.wikipedia.org/wiki/Unit_testing). The tests are written using Mathematica's native framework `MUnit` and can be found in the [Tests](https://github.com/FeynCalc/feyncalc/tree/master/Tests) directory of the FeynCalc repository + +The unit tests are useful not only for the developers. If you are modifying the source code of FeynCalc for your own needs or using FeynCalc together with other packages on the same kernel, it might be useful to check if FeynCalc is still working properly. This can be done by running the test suite and analyzing the results. + +### Modifying the source code + +In general, it is not a very good idea to modify the source code of FeynCalc directly, since this may give you a lot of troubles when updating to a newer version. Also, there is a fair chance to break existing functionality which might lead to erroneous results. However, for some deep modifications this might be sometimes necessary. + +Still, if you think that the feature that you want to implement could be useful also for other people, it won't harm to publish your request on the mailing list. + + +* The source code of FeynCalc is located in the `$FeynCalcDirectory` directory. The package is loaded via the `FeynCalc.m` file. +* In `FeynCalc.m` there is a code snippet that starts with `boostrappingList = ...`. This is where different parts of the FeynCalc package are loaded. Those parts are contained in different directories inside `$FeynCalcDirectory` (e.g. `Shared`, `NonCommAlgebra`, `Lorentz`) depending on their purpose. Every .m file from those directories is loaded into Mathematica. + +### Add-ons + +Starting with the version 9.0, FeynCalc features a new add-on system. The purpose of add-ons is to extend FeynCalc with new features without the need to modify FeynCalc itself. + +The add-ons are placed in the directory `AddOns` inside `$FeynCalcDirectory`. They are loaded in the same fashion as regular FeynCalc objects and functions and live in the context ``FeynCalc`NameOfTheAddon` ``. + +A toy add-on [FVProjection](https://github.com/FeynCalc/feyncalc/tree/master/FeynCalc/AddOns/FVProjection) that represents a minimal working example is shipped together with FeynCalc. You can use its source code as a template for writing your own addons. The general structure of the main .m file (e.g. `MyAddon.m`) for an add-on looks like + +```Mathematica + +Foo::usage= +"Description of Foo"; + +Bar::usage= +"Description of Bar"; + +$MyAddonVersion::usage= +"$MyAddonVersion is the string that represents the version of MyAddon"; + +$MyAddonDirectory::usage= +"$MyAddonDirectory is the string that represents the full path to the MyAddon directory"; + +Begin["`Package`"] +End[] + +$MyAddonVersion="1.0.0"; + +$MyAddonDirectory = +ToFileName[{$FeynCalcDirectory, "AddOns", "MyAddon"}]; + +Begin["`MyAddon`Private`"]; + +Foo[x_,y_]:= Pair[Momentum[x],Momentum[y]]; +Bar[x_,y_]:= DiracGamma[LorentzIndex[x]].DiracGamma[Momentum[y]]; + +(* Print startup message *) +If[ Global`$FeynCalcStartupMessages =!= False, + Print[Style["MyAddon ", "Text", Bold], Style[$MyAddonVersion <> " loaded.", "Text"]] +]; + + +End[] + +``` + +### Packages that use FeynCalc + +Starting with FeynCalc 9.0 one can easily write something like + +```Mathematica +BeginPackage["MyPackage`",{"FeynCalc`"}] + +MySP::usage= +"Description of MySP"; + +Begin["`Private`"]; + +MySP[a_,b_]:= FCI[SP[a,b]]; + +End[] +EndPackage[] + +``` + +### Package or add-on? + +The decision, whether you want to write an add-on or a separate package that requires FeynCalc should be made depending on your working style. + + - If you use FeynCalc as your primary tool for doing computations, an add-on would be the best way to add things that you're missing. + - If for you FeynCalc is only a part of a bigger framework, then a package that combines different tools (including FeynCalc) would probably be a better idea. + + + + + + + + + diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynArts.md b/FeynCalc/Documentation/Markdown/Extra/FeynArts.md new file mode 100644 index 00000000..0356d7ec --- /dev/null +++ b/FeynCalc/Documentation/Markdown/Extra/FeynArts.md @@ -0,0 +1,73 @@ +## FeynArts + +### See also + +[Overview](FeynCalc.md). + + + +### What is FeynArts? + +FeynArts is a Mathematica package for generating Feynman diagrams and the corresponding amplitudes. The original FeynArts was created by J. Küblbeck, M. Böhm and A. Denner in 1990 ([INSPIRE](http://inspirehep.net/record/27276)). Since 1998 it is developed further by Thomas Hahn ([hep-ph/0012260](http://arxiv.org/abs/hep-ph/0012260)). For more information about FeynArts please visit the [official site](http://www.feynarts.de/). The manual is available [here](http://www.feynarts.de/FA3Guide.pdf). + +### Using FeynArts with FeynCalc + +FeynArts is not a part of FeynCalc but its output can be used by FeynCalc to evaluate the generated amplitudes. +Unfortunately, many FeynArts functions have the same name as the FeynCalc functions which makes Mathematica produce lots of warnings when loading both packages in the same session. + +One possible workaround is to first generate the amplitudes with FeynArts, then save them in a notebook, quit Mathematica, open the notebook and only then load FeynCalc and evaluate the amplitudes. However, this method is rather inconvenient if one wants to play with different options and see how this affects the final result. + +The preferred way of using FeynArts with FeynCalc is to patch FeynArts, such that all corresponding FeynArts functions are renamed and no shadowing occurs. In this case one can use FeynArts and FeynCalc in the same Mathematica session without any unwanted interference effects. + +### Patching FeynArts for FeynCalc + +If you install the stable or development version of FeynCalc using the [automatic installer](https://github.com/FeynCalc/feyncalc/wiki/Installation), you will be asked if the latest version of FeynArts should be downloaded and patched. Therefore, no additional steps are necessary. + +However, it may happen that you want to update your version of FeynArts without resintalling FeynCalc. In this case follow these steps: + + - Download the [latest version](http://www.feynarts.de/) of FeynArts and extract the tarball into + + ```Mathematica + << FeynCalc` + Print[$FeynArtsDirectory] + ``` + + - Start Mathematica and type + + ```Mathematica + $LoadFeynArts = True; + < 2]; + diags = InsertFields[tops, ...]; + Paint[diags]; +``` +Second, you can prevent FeynArts from printing info messages by setting + +```Mathematica + $FAVerbose=0; +``` + +Finally, as far as the graphical output via `Paint` is concerned, you can use the options ```Numbering``` and ```SheetHeader``` to control the amount of additional information when visualizing your diagrams. Last but not least, using the ```ColumnsXRows``` option can make the diagrams look bigger and thus more readable. Compare the output of + +```Mathematica + tops = CreateTopologies[0, 2 -> 2] + diags = InsertFields[tops, {F[2, {1}], -F[2, {1}]} -> {F[2, {1}], -F[2, {1}]}, + InsertionLevel -> {Classes}, Model -> "SM", ExcludeParticles -> {S[1], S[2], V[2]}] + Paint[diags] +``` + +with + +```Mathematica + $FAVerbose=0; + tops = CreateTopologies[0, 2 -> 2]; + diags = InsertFields[ tops, {F[2, {1}], -F[2, {1}]} -> {F[2, {1}], -F[2, {1}]}, + InsertionLevel -> {Classes}, Model -> "SM", ExcludeParticles -> {S[1], S[2], V[2]}]; + Paint[diags, ColumnsXRows -> {2, 1}, Numbering -> None, SheetHeader -> False]; +``` + +and you will immediately see the difference. + +### Why DiracTrace doesn't evaluate my expression? +By default `DiracTrace` isn't immediately applied. This is because in practical computations one often does not evaluate the trace right away, either because one wants to work with the expression inside the trace first or because it is desirable to have the final result with an unevaluated trace. An immediate evaluation of DiracTrace can be invoked by setting the option `DiracTraceEvaluate` to `True` or applying `DiracSimplify` to the whole expression. For example, `DiracTrace[GA[mu, nu]]` remains unevaluated but `DiracTrace[GA[mu, nu],DiracTraceEvaluate -> True]` or `DiracTrace[GA[mu, nu]]//DiracSimplify` are evaluated immediately. + + +### Can I use FeynCalc's tensors together with Mathematica's tensors (e.g. `KroneckerDelta`, `LeviCivitaTensor`) and tensor functions (e.g. `TensorContract`, `TensorTranspose`, `TensorProduct`)? + +No, you cannot mix those objects. FeynCalc's tensor functions like `Contract` can work properly only with tensors that are defined in FeynCalc (i.e. `FV`, `MTD`, `TensorFunction`). The same goes for Mathematica's `TensorContract` applied to FeynCalc's tensors. Trying to combine tensors from Mathematica and FeynCalc will either not evaluate at all or produce wrong results. + +### Why there is no Kronecker delta in FeynCalc? +FeynCalc doesn't really distinguish between upper and lower Lorentz indices. This is perfectly fine as long as you're working with manifestly Lorentz covariant expressions where Einstein summation convention is understood (which is normally the case in relativistic, manifestly Lorentz covariant QFTs like QED, QCD etc.). Hence, instead of Kronecker's delta you would use the metric tensor `MT[mu,nu]` (in 4-dimensions) or `MTD[mu,nu]` (in D-dimensions). This is not surprising since the Minkowskian Kronecker delta is just the metric tensor with one index up and the other down. If one of those indices is a dummy index, you can always pull it upstairs or downstairs, thus converting your Kronecker delta into a metric tensor with both indices up or down. + +### FeynCalc denotes all spinors with a $\varphi$ letter. How do I distinguish between $u$, $\bar{u}$, $v$ and $\bar{v}$? +FeynCalc (and FeynArts) figure out the type of the spinor depending on its position in the chain and the sign of its momentum. The first spinor in the chain with positive momentum is $\bar{u}$ (outgoing fermion) and if the momentum is negative it is $\bar{v}$ (ingoing antifermion). Likewise, the last spinor in the chain with positive momentum is $u$ (ingoing fermion) and if the momentum is negative it is $v$ (outgoing antifermion). + + +### In FeynCalc the Lorentz indices of the epsilon tensor are sometimes replaced by 4-momenta. What does this mean? +It is just a convention (also used e.g. in FORM) to denote contractions between 4-vectors and the epsilon tensor. So, `LC[mu, nu, rho][p]` is the same as `Contract[LC[mu, nu, rho, si] FV[p, si]]`. There is also a technical reason for using this notation. Writing conctractions without explicitly introducing dummy indices avoids the necessity to canonicalize the indices, e.g. to ensure that say `LC[mu, nu, rho, si] FV[p, si] - LC[mu, nu, rho, tau] FV[p, tau]` is indeed zero. + +### How are the loop integrals in FeynCalc normalized? +FeynCalc contains several objects that represent loop integrals: `FAD` (and its varieties such as `SFAD`, `CFAD` and `GFAD`), `PaVe` and `GLI`. `FAD`is the denominator of a general loop integral and does not imply any normalization factors. E.g. +`FAD[{p,m}]` stands for $\int d^D p \frac{1}{p^2-m^2}$. `PaVe` stands (depending on its arguments) for a Passarino-Veltman coefficient or scalar function. In FeynCalc they are normalized differently as compared to the literature, +such that `PaVe[0, {}, {m}]` (1-point scalar function) denotes `\frac{1}{i Pi^2} \int d^D p \frac{1}{p^2-m^2}`. +The same normalization holds also for all the other PaVe functions. This normalization is used also e.g. in the OneLoop package. + +To sum it up, if we denote $\int \frac{d^D p}{(2 \pi)^4} \frac{1}{p^2-m^2}$ (1-loop tadpole integral with the standard +normalization) as $I_0$ and $-i (16 \pi^2) I_0$ (1-point PaVe scalar function with the standard +normalization) as $A_0$, then we have + +$$ +\texttt{FAD}[\{p,m\}] = (2\pi)^D I_0 = I \pi^2 (2 \pi)^{D-4} A_0 = i \pi^2 \, \texttt{PaVe}[0, \{\}, \{m\}] +$$ + +This is consistent with the well-known relation + +$$ +I_0 = \frac{i}{16 \pi^2} A_0 +$$ + +Note, than when you convert `FAD`-type loop integrals to `PaVe`, FeynCalc automatically introduces the prefactor $\frac{1}{\pi^2}$, to account for the fact that + +$$ +\texttt{PaVe}[0, \{\}, \{m\}] \to \frac{1}{i \pi^2} \texttt{FAD}[\{p,m\}] +$$ + +If the prefactor $\frac{1}{(\pi^2)^D}$ in front of each 1-loop integral from `FAD` or `PaVe` is taken to be implicit (i.e. it understood but not written down explicitly), then one can conveniently work with the following replacements + + - `FAD[{p,m}]` $\to I_0$ + - `FAD[{p,m}]` $\to \frac{i}{16 \pi^2} A_0$ + - `PaVe[0, {}, {m}]` $\to \frac{1}{i \pi^2} I_0$ + - `PaVe[0, {}, {m}]` $\to \frac{1}{(2 \pi)^4} A_0$ + +For practical purposes, this approach is indeed the most convenient one. If you are generating your amplitudes with FeynArts, you need to use the option `Prefactor` of `CreateFeynAmp` to prevent FeynArts from adding explicit `1/(2Pi)^D` prefactors. For example, `CreateFeynAmp[myDiagrams, PreFactor -> 1]` will generate you the amplitude (I*M) without those prefactors. + + +### How can I define a complex four vector? +The simplest way is to write something like `FV[{a,I},mu]`. The presence of an explicit `I` will make this vector change under `ComplexConjugate`, such that + +``` +ComplexConjugate[FV[{a,I},mu]]//FCE +``` + +will give you `FV[{a,-I},mu]`. + +### I created a custom model for FeynArts using FeynRules. How can I use it for calculations with FeynCalc? + +You need to copy your model to `FileNameJoin[{$FeynArtsDirectory, "Models"}]` and evaluate (needed only once) + +```Mathematica +FAPatch[PatchModelsOnly -> True]; +``` + +This will patch the new model to be compatible with FeynCalc, after which you can follow the standard procedure of +generating amplitudes with patched FeynArts and converting them to FeynCalc using `FCFAConvert`. Notice that some models you create with FeynRules might not work with FeynCalc, if they contain objects that are not present in FeynCalc. + +### How does FeynCalc treat the 5th Dirac matrix $\gamma^5$ in $D$ dimensions? + +FeynCalc essentially offers two ways to handle the Dirac algebra involving $\gamma^5$ in $D$ dimensions. The default is anticommuting $\gamma^5$ which corresponds to the naive dimensional regularization (NDR). That is, + +```mathematica +DiracSimplify[GA[5].GAD[mu]] +``` + +returns + +```mathematica +-GAD[mu].GA[5] +``` + +As far as Dirac traces are concerned, a trace that contains an even number of $\gamma^5$ (so that they can be anticommuted to the very right and eliminated via $(\gamma^5)^2 = 1$ can be computed directly, e.g. + +```mathematica +DiracSimplify[DiracTrace[GAD[i1,i2,i3,i4].GA[5].GAD[i5,i6].GA[5]]] +``` + +does not cause any problems. If the trace contains an odd number of $\gamma^5$, NDR does not provide an unambiguous prescription to deal with such quantities. Therefore, FeynCalc will refuse to calculate such a trace, cf. + +```mathematica +DiracSimplify[DiracTrace[GAD[i1,i2,i3,i4].GA[5]]] +``` + +An alternative prescription to handle $\gamma^5$ available in FeynCalc is the so-called t'Hooft-Veltman scheme, also known as Breitenlohner-Maison-t'Hooft-Veltman (BMHV) scheme. This scheme is algebraically consistent in the sense that D-dimensional traces involving any number of $\gamma^5$ can be evaluated unambiguously. However, it is often perceived as cumbersome, +as in this scheme we must explicitly distinguish between quantities (Dirac matrices, Lorentz vectors etc.) that live in $D$, $4$ and $D-4$ dimensions. Furthermore, this scheme breaks axial Ward identitites that have to be manually restored with a special counter-term. Cf. e.g. arXiv:1809.01830, p. 101 for a brief overview. This scheme is activated by setting the global variable `$BreitMaison` to `True`. After that FeynCalc can directly calculate traces with an odd number of $\gamma^5$ + +```mathematica +$BreitMaison=True; +DiracSimplify[DiracTrace[GAD[i1,i2,i3,i4,i5,i6].GA[5]]] +``` + +As one can immediately see, the price to pay is that the algebra involving $\gamma^5$ becomes more complicated + +```mathematica +DiracSimplify[GA[5].GAD[mu]] +``` + +In this context quantities living in different dimensions are distinguished by having a bar (4-dimensions) +a hat (D-4 dimensions) or no additional markers (D-dimensions). Cf. + +```mathematica +{GAD[mu], GSD[mu], FVD[p,mu], SPD[p,q]} (*D-dim*) +{GA[mu], GS[mu], FV[p,mu], SP[p,q]} (*4-dim*) +{GAE[mu], GSE[mu], FVE[p,mu], SPE[p,q]} (*D-4-dim*) +``` + +To return to the NDR scheme, you need to set + +```mathematica +$BreitMaison=False +``` + +Notice that FeynCalc merely evaluates the user expressions according to the scheme setting. Since $\gamma^5$ in $D$ dimensions is always a problematic topic, it is up to you to make sure that what you are calculating makes sense from the physics point of view. Moreover, in case of the BMHV scheme, it is your task to workout the additional counter terms (which is often very nontrivial) and ensure that the axial current conservation is restored. + +### Why should I avoid using OneLoop? + +`OneLoop` is a legacy function that was originally introduced to completely handle the evaluation of 1-loop amplitudes in FeynCalc. Over the years, we realized that this approach is not very flexible and that it is often better to tackle the evaluation of the amplitude by applying lower level functions such as `TID`, `DiracSimplify`, `SUNSimplify` etc. in the order determined by the type of the given amplitude. Moreover, it was observed that in some cases `OneLoop` may return inconsistent results, especially when calculating diagrams that involve $\gamma^5$. Unfortunately, the enormous complexity of the `OneLoop` source code makes it unlikely that it can be fixed and debugged in the near future. This is why we recommend the FeynCalc users to avoid calling `OneLoop` altogether and use other (simpler) functions instead. In particular, as far as the tensor reduction of 1-loop integrals is concerned, `TID` can do everything (and even more) than is offered by `OneLoop`. + +### Tensor reduction with TID is very slow, is there a way to accelerate it? +By default `TID` attempts to reduce all the occurring tensor integrals to scalar ones (tadpole, bubble, triangle and box). For integrals that are of a high rank and/or depend on many complicated invariants, such a reduction will +generate a huge number of terms. This is why in such cases `TID` might require a lot of time to generate the output. However, very often the reduction to the basic scalar integrals is not really needed. If the output will be evaluated numerically (e.g. using `LoopTools`) or analytically with the aid of `FeynHelpers`, it is fully sufficient to reduce each tensor integral to the corresponding Passarino-Veltman coefficient functions. In this case the reduction occurs much faster and the output is very compact. This mode can be activated via the option `UsePaVeBasis`. +Compare e.g. the output of + +```mathematica +TID[FVD[p, mu] FVD[p, nu] FAD[{p, m0}, {p + q1, m1}, {p + q2, m2}], p] +``` + +with + +```mathematica +TID[FVD[p, mu] FVD[p, nu] FAD[{p, m0}, {p + q1, m1}, {p + q2, m2}], p, + UsePaVeBasis -> True] +``` +to see the difference. + + diff --git a/FeynCalc/Documentation/Markdown/Extra/Install.md b/FeynCalc/Documentation/Markdown/Extra/Install.md index c9e7127f..f2cac352 100644 --- a/FeynCalc/Documentation/Markdown/Extra/Install.md +++ b/FeynCalc/Documentation/Markdown/Extra/Install.md @@ -10,7 +10,7 @@ The installation of FeynCalc can be done either automatically using the provided #### Stable version -The stable version is the latest official release of FeynCalc. We don't have fixed development cycles so that the stable version is released just when it's ready. The code of the stable version is located in the [hotfix-stable](https://github.com/FeynCalc/feyncalc/tree/hotfix-stable) branch of our main repository. Since FeynCalc 9, all the bugs that are discovered in the latest stable version will be fixed in that branch. When you install FeynCalc using the automatic installer you will automatically receive all the current fixes. Note that the stable branch will not contain any new features until the next stable release. +The stable version is the latest official release of FeynCalc. We don't have fixed development cycles so that the stable version is released just when it's ready. The code of the stable version is located in the [hotfix-stable](https://github.com/FeynCalc/feyncalc/tree/hotfix-stable) branch of our main repository. Bugs that are discovered in the latest stable version will be fixed in that branch. When you install FeynCalc using the automatic installer you will automatically receive all the current fixes. Note that the stable branch will not contain any new features until the next stable release. To install the stable version run the following instruction in a Kernel or Notebook session of Mathematica. @@ -32,14 +32,14 @@ InstallFeynCalc[InstallFeynCalcDevelopmentVersion -> True] #### Troubleshooting -On Linux (possibly also Windows 10 and macOS) the above code might fail when run with Mathematica 8, 9, 10 or 11. The error messages will look like `URLSave::invhttp: SSL connect error` or `URLSave::invhttp`. This is most likely caused by some library incompatibilities. A workaround for versions 10 and 11 is available [here](https://mathematica.stackexchange.com/questions/212453/urlsave-in-mathematica-10-and-11-on-linux). For versions 9 and 8 see [here](https://mathematica.stackexchange.com/questions/212455/ssl-errors-when-using-urlfetch-or-urlsave-in-versions-8-or-9). If nothing helps, you can still download the necessary files by yourself and run the automatic installer offline. +On Linux (possibly also Windows and macOS) the above code might fail when run with Mathematica 10 or 11. The error messages will look like `URLSave::invhttp: SSL connect error` or `URLSave::invhttp`. This is most likely caused by some library incompatibilities. A workaround for versions 10 and 11 is available [here](https://mathematica.stackexchange.com/questions/212453/urlsave-in-mathematica-10-and-11-on-linux). If nothing helps, you can still download the necessary files by yourself and run the automatic installer offline. ### Manual installation Manual installation is also possible, but is slightly less convenient as compared to using the automatic installer. * Download [this](https://github.com/FeynCalc/feyncalc/archive/hotfix-stable.zip) (for the stable version) or [this](https://github.com/FeynCalc/feyncalc/archive/master.zip) (for the development version) zip file. -* Copy the *FeynCalc* directory from the extracted archive to the *Applications* directory inside ```$UserBaseDirectory``` (evaluate ``FileNameJoin[{$UserBaseDirectory, "Applications"}]``` in Mathematica). +* Copy the *FeynCalc* directory from the extracted archive to the *Applications* directory inside ```$UserBaseDirectory``` (evaluate ```FileNameJoin[{$UserBaseDirectory, "Applications"}]``` in Mathematica). * If you want to allow `FeynCalc` to activate `TraditionalForm` typesetting when it is loaded, create "FCConfig.m" inside *FeynCalc* directory and add there the following line ```Mathematica From c9882c8b33625e74323b26290f69b49c4d66bfb5 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 1 Mar 2024 18:06:31 +0100 Subject: [PATCH 24/67] Removed references to the defunct wiki. --- FeynCalc/FeynCalc.m | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/FeynCalc/FeynCalc.m b/FeynCalc/FeynCalc.m index c5d0b3fb..b0217d56 100644 --- a/FeynCalc/FeynCalc.m +++ b/FeynCalc/FeynCalc.m @@ -300,16 +300,11 @@ Style[$FeynCalcVersion <> " (stable version" <> If[FeynCalc`$FeynCalcLastCommitDateHash=!="",", ", ""] <> FeynCalc`$FeynCalcLastCommitDateHash <>"). For help, use the ", "Text"] ], - Style[DisplayForm@ButtonBox["online documentation", ButtonData :> {URL["https://feyncalc.github.io/referenceDev"], None},BaseStyle -> "Hyperlink", + Style[DisplayForm@ButtonBox["online documentation,", ButtonData :> {URL["https://feyncalc.github.io/referenceDev"], None},BaseStyle -> "Hyperlink", ButtonNote -> "https://feyncalc.github.io/referenceDev"], "Text"], - Style[", check out the ", "Text"], - Style[DisplayForm@ButtonBox["wiki", ButtonData :> {URL["https://github.com/FeynCalc/feyncalc/wiki"], None},BaseStyle -> "Hyperlink", - ButtonNote -> "https://github.com/FeynCalc/feyncalc/wiki"],"Text"], - Style[" or visit the ", "Text"], - Style[DisplayForm@ButtonBox["forum.", ButtonData :> {URL["https://github.com/FeynCalc/feyncalc/discussions"], None},BaseStyle -> "Hyperlink", - ButtonNote -> "https://github.com/FeynCalc/feyncalc/discussions/"],"Text"]]; - Print[Style["Please check our ","Text"], Style[DisplayForm@ButtonBox["FAQ",ButtonData :> {URL["https://github.com/FeynCalc/feyncalc/wiki/FAQ"], None},BaseStyle -> "Hyperlink", - ButtonNote -> "https://github.com/FeynCalc/feyncalc/wiki"],"Text"] , Style[" for answers to some common FeynCalc questions and have a look at the supplied ","Text"], + Style[" visit the ", "Text"], + Style[DisplayForm@ButtonBox["forum", ButtonData :> {URL["https://github.com/FeynCalc/feyncalc/discussions"], None},BaseStyle -> "Hyperlink", + ButtonNote -> "https://github.com/FeynCalc/feyncalc/discussions/"],"Text"], Style[" and have a look at the supplied ","Text"], Style[DisplayForm@ButtonBox["examples.", BaseStyle -> "Hyperlink", ButtonFunction :> SystemOpen[FileNameJoin[{$FeynCalcDirectory, "Examples"}]], Evaluator -> Automatic, Method -> "Preemptive"], "Text"]]; From 66fd1a3e564a4cb712908500b109e22fa2a44fe9 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 8 Mar 2024 17:39:04 +0100 Subject: [PATCH 25/67] Fixed a bug in FCLoopFindTopologyMappings where the function could not deal with extra objects in the last slot of FCTopology. --- FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m b/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m index de976693..78f0560a 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m @@ -154,11 +154,8 @@ subTopos = SelectNotFree[relevantTopos, optSubtopologyMarker]; bigTopos = Complement[allTopos,subTopos]; -(* - bigTopos = SelectFree[relevantTopos, optSubtopologyMarker]; - subTopos = Complement[relevantTopos, bigTopos];*) - tmp = Map[Select[bigTopos, Function[{xx}, First[xx] === (optSubtopologyMarker /. #[[6]])]] &, subTopos]; + tmp = Map[Select[bigTopos, Function[{xx}, First[xx] === (optSubtopologyMarker /. SelectNotFree[#[[6]],optSubtopologyMarker] )]] &, subTopos]; rulesSubtopoToTopo = MapThread[ If[ Length[#1] === 1, FCLoopCreateRuleGLIToGLI[First[#1], #2,FCI->True], Unevaluated[Sequence[]] From 5523da8914fb0c5e1f289471f105579adc371852 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 8 Mar 2024 17:41:32 +0100 Subject: [PATCH 26/67] Added some useful information on renormalization. --- .../Documentation/Markdown/Extra/FeynCalc.md | 1 + .../Extra/FrequentlyAskedQuestions.md | 40 +- .../Markdown/Extra/Renormalization.md | 518 ++++++++++++++++++ 3 files changed, 537 insertions(+), 22 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/Extra/Renormalization.md diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index 5448edc6..c283f04c 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -12,6 +12,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [New FeynArts sign conventions](FeynArtsSigns.md) - [Custom FeynRules models](CustomModels.md) - [Useful formulas for Dirac algebra](DiracAlgebraFormulas.md) +- [Renormalization](Renormalization.md) - [Development](Development.md) ## Tutorials diff --git a/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md b/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md index 113d5e4d..6ee83ff9 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md +++ b/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md @@ -62,14 +62,8 @@ FeynCalc can handle objects in `4` and `D` dimensions, where `D` is understood i rather inconvenient and verbose when used by the user for _working_ with FeynCalc. To address this issue FeynCalc also supports a different notation, called `FeynCalcExternal` or `FCE` which is much shorter and easier to use than `FCI`. For example, a `D`-dimensional momentum vector in the FCI notation reads ```Pair[LorentzIndex[mu, D], Momentum[p, D]]``` while in the `FCE`-notation it is just ```FVD[p,mu]```. FeynCalc provides the functions ```FeynCalcInternal``` or ```FCI``` and ```FeynCalcExternal``` or ```FCE``` to convert between the two notations. The user input can use any of the two notations or even mix them. For example, -```Contract[FV[p,mu] MT[mu,nu]]```, - -```Contract[Pair[LorentzIndex[mu], LorentzIndex[nu]]*Pair[LorentzIndex[mu], Momentum[p]]]``` and - -```Contract[Pair[LorentzIndex[mu], Momentum[p] MT[mu,nu]]]``` - -are all valid FeynCalc expressions. This is because all FeynCalc functions first convert the -user input to the FCI notation. Some commonly used FCE functions are +`Contract[FV[p,mu] MT[mu,nu]]`, `Contract[Pair[LorentzIndex[mu], LorentzIndex[nu]]*Pair[LorentzIndex[mu], Momentum[p]]]` and +`Contract[Pair[LorentzIndex[mu], Momentum[p] MT[mu,nu]]]` are all valid FeynCalc expressions. This is because all FeynCalc functions first convert the user input to the `FCI` notation. Some commonly used FCE functions are - ```GA[mu]``` (Dirac matrix in `4` dimensions) for ```DiracGamma[LorentzIndex[mu]]``` - ```GS[p]``` (Dirac slash in `4` dimensions) for ```DiracGamma[Momentum[p]]``` @@ -135,40 +129,42 @@ FeynCalc (and FeynArts) figure out the type of the spinor depending on its posit ### In FeynCalc the Lorentz indices of the epsilon tensor are sometimes replaced by 4-momenta. What does this mean? -It is just a convention (also used e.g. in FORM) to denote contractions between 4-vectors and the epsilon tensor. So, `LC[mu, nu, rho][p]` is the same as `Contract[LC[mu, nu, rho, si] FV[p, si]]`. There is also a technical reason for using this notation. Writing conctractions without explicitly introducing dummy indices avoids the necessity to canonicalize the indices, e.g. to ensure that say `LC[mu, nu, rho, si] FV[p, si] - LC[mu, nu, rho, tau] FV[p, tau]` is indeed zero. +It is just a convention (also used e.g. in FORM) to denote contractions between 4-vectors and the epsilon tensor. So, `LC[mu, nu, rho][p]` is the same as `Contract[LC[mu, nu, rho, si] FV[p, si]]`. There is also a technical reason for using this notation. Writing contractions without explicitly introducing dummy indices avoids the necessity to canonicalize the indices, e.g. to ensure that say `LC[mu, nu, rho, si] FV[p, si] - LC[mu, nu, rho, tau] FV[p, tau]` is indeed zero. ### How are the loop integrals in FeynCalc normalized? FeynCalc contains several objects that represent loop integrals: `FAD` (and its varieties such as `SFAD`, `CFAD` and `GFAD`), `PaVe` and `GLI`. `FAD`is the denominator of a general loop integral and does not imply any normalization factors. E.g. `FAD[{p,m}]` stands for $\int d^D p \frac{1}{p^2-m^2}$. `PaVe` stands (depending on its arguments) for a Passarino-Veltman coefficient or scalar function. In FeynCalc they are normalized differently as compared to the literature, -such that `PaVe[0, {}, {m}]` (1-point scalar function) denotes `\frac{1}{i Pi^2} \int d^D p \frac{1}{p^2-m^2}`. +such that `PaVe[0, {}, {m}]` (1-point scalar function) denotes $\frac{1}{i Pi^2} \int d^D p \frac{1}{p^2-m^2}$. The same normalization holds also for all the other PaVe functions. This normalization is used also e.g. in the OneLoop package. To sum it up, if we denote $\int \frac{d^D p}{(2 \pi)^4} \frac{1}{p^2-m^2}$ (1-loop tadpole integral with the standard normalization) as $I_0$ and $-i (16 \pi^2) I_0$ (1-point PaVe scalar function with the standard normalization) as $A_0$, then we have -$$ -\texttt{FAD}[\{p,m\}] = (2\pi)^D I_0 = I \pi^2 (2 \pi)^{D-4} A_0 = i \pi^2 \, \texttt{PaVe}[0, \{\}, \{m\}] -$$ +\begin{align*} +\mathtt{FAD}[\{p,m\}] = (2\pi)^D I_0 = I \pi^2 (2 \pi)^{D-4} A_0 = i \pi^2 \, \mathtt{PaVe}[0, \{\}, \{m\}] +\end{align*} This is consistent with the well-known relation -$$ +\begin{align*} I_0 = \frac{i}{16 \pi^2} A_0 -$$ +\end{align*} Note, than when you convert `FAD`-type loop integrals to `PaVe`, FeynCalc automatically introduces the prefactor $\frac{1}{\pi^2}$, to account for the fact that -$$ -\texttt{PaVe}[0, \{\}, \{m\}] \to \frac{1}{i \pi^2} \texttt{FAD}[\{p,m\}] -$$ +\begin{align*} +\mathtt{PaVe}[0, \{\}, \{m\}] \to \frac{1}{i \pi^2} \mathtt{FAD}[\{p,m\}] +\end{align*} If the prefactor $\frac{1}{(\pi^2)^D}$ in front of each 1-loop integral from `FAD` or `PaVe` is taken to be implicit (i.e. it understood but not written down explicitly), then one can conveniently work with the following replacements - - `FAD[{p,m}]` $\to I_0$ - - `FAD[{p,m}]` $\to \frac{i}{16 \pi^2} A_0$ - - `PaVe[0, {}, {m}]` $\to \frac{1}{i \pi^2} I_0$ - - `PaVe[0, {}, {m}]` $\to \frac{1}{(2 \pi)^4} A_0$ +\begin{align*} +\mathtt{FAD}[\{p,m\}] &\to I_0, \\ +\mathtt{FAD}[\{p,m\}] &\to \frac{i}{16 \pi^2} A_0, \\ +\mathtt{PaVe}[0, \{\}, \{m\}] &\to \frac{1}{i \pi^2} I_0, \\ +\mathtt{PaVe}[0, \{\}, \{m\}] &\to \frac{1}{(2 \pi)^4} A_0. +\end{align*} For practical purposes, this approach is indeed the most convenient one. If you are generating your amplitudes with FeynArts, you need to use the option `Prefactor` of `CreateFeynAmp` to prevent FeynArts from adding explicit `1/(2Pi)^D` prefactors. For example, `CreateFeynAmp[myDiagrams, PreFactor -> 1]` will generate you the amplitude (I*M) without those prefactors. diff --git a/FeynCalc/Documentation/Markdown/Extra/Renormalization.md b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md new file mode 100644 index 00000000..89044a46 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md @@ -0,0 +1,518 @@ +## Renormalization + +### See also + +[Overview](FeynCalc.md). + +### Renormalization constants and mass dimensions + +The procedure of renormalization allows us to get rid of the UV poles in a renormalizable theory. However, for that aim we need to know explicit values of the renormalization constants. + +The first step is to rewrite the (bare) Lagrangian of our theory in terms of the renormalized Lagrangian $\mathcal{L}_{\textrm{ren}}$ and the counter-term Lagrangian $\mathcal{L}_{\textrm{ct}}$ + +\begin{equation} +\mathcal{L} = \mathcal{L}_{\textrm{ren}} + \mathcal{L}_{\textrm{ct}} +\end{equation} + +The renormalization constants $Z_x$ establish a connection between bare and renormalized quantities +appearing in the Lagrangian. For some generic masses, coupling constants and fields we can write + +\begin{align*} +g_{\textrm{bare}} &= \mu^{n \varepsilon} Z_g g_{\textrm{ren}} \\ +m_{\textrm{bare}} &= Z_m m_{\textrm{ren}} \\ +\psi_{\textrm{bare}} &= \sqrt{Z_m} \psi_{\textrm{ren}} \\ +A^\mu_{\textrm{bare}} &= \sqrt{Z_A} A^\mu_{\textrm{ren}} \\ +\end{align*} + +The renormalization scale $\mu$ is needed to account for the fact, that when going from $4$ to $D$ dimensions, dimensionless coupling constants suddenly become dimensionful. + +For example, a scalar field (mass dimension 1 in 4 dimensions) gets mass dimension $(D-2)/2$ in $D$ dimensions. This can be deduced by looking at the kinetic term and using that the mass dimension of the partial derivative remains unity, + +\begin{align*} +[(\partial_\mu \phi_{\textrm{bare}})^2] &= D \Rightarrow [\partial_\mu \phi_{\textrm{bare}}] = \frac{D}{2}, \\ +[\partial_\mu] & = 1 \Rightarrow [\phi_{\textrm{bare}}] = \frac{D-2}{2} +\end{align*} + +Then for the $\lambda \phi^4$-vertex we follow that + +\begin{equation} +[\lambda_{\textrm{bare}} \phi_{\textrm{bare}}^4] = D \Rightarrow [\lambda_{\textrm{bare}}] = D - 4 \frac{D-2}{2} = 4 - D, +\end{equation} + +For $D = 4- 2 \varepsilon$ this yields $[\lambda_{\textrm{bare}}] = 2 \varepsilon$, which is precisely compensated by imposing + +\begin{equation} +\lambda_{\textrm{bare}} = \mu^{2 \varepsilon} Z_\lambda \lambda_{\textrm{ren}}, +\end{equation} + +so that $[\lambda_{\textrm{ren}}] = 0$. + +A similar exercise for the fermion yields + +\begin{equation} +[\bar{\psi}_{\textrm{bare}} i \gamma \cdot \partial \psi_{\textrm{bare}} ] = D \Rightarrow [\psi_{\textrm{bare}}] = \frac{D-1}{2} +\end{equation} + +The splitting of the bare Lagrangian $\mathcal{L}$ into $\mathcal{L}_{\textrm{ren}}$ and $\mathcal{L}_{\textrm{ct}}$ +is done by first replacing all bare quantities by the renormalized ones and then using the trivial decompositions + +\begin{align*} +\sqrt{Z_x} &= (\sqrt{Z_x} - 1) + 1, \\ +Z_x &= (Z_x - 1) + 1, \\ +Z_x^2 &= (Z_x^2 - 1) + 1, \\ +Z_y Z_x^2 &= (Z_y Z_x^2 - 1) + 1. \\ +\end{align*} + +Each of the renormalization constants can be written as + +\begin{equation} +Z_x = 1 + \delta Z_x, +\end{equation} + +where $\delta Z_x$ contains poles in $\varepsilon$ and possibly also finite pieces (depending on the chosen renormalization scheme). Parametrically, $Z_x$ is of order of the small coupling constant so that we can "expand" in it as if $Z_x \ll 1$. + +### Examples of renormalized and counter-term Lagrangians + +In the following, for the sake of convenience we drop the subscript "ren" in the renormalized Lagrangian + +In the case of the **real $\phi^4$-theory** (cf. e.g. [arXiv:1606.0921](https://arxiv.org/pdf/1606.09210.pdf)) we have + +\begin{align*} +\mathcal{L}_{\phi^4} &= \frac{1}{2} \partial_\mu \phi_{\textrm{bare}} \partial^\mu \phi_{\textrm{bare}} - \frac{1}{2} m_{\textrm{bare}}^2 \phi_{\textrm{bare}}^2 - \frac{\lambda}{4!} \phi_{\textrm{bare}}^4 \\ +& = \frac{1}{2} Z_\phi \partial_\mu \phi \partial^\mu \phi - \frac{1}{2} Z_m^2 Z_\phi m^2 \phi^2 - \mu^{2 \varepsilon} Z_\lambda Z_\phi^2 \frac{\lambda}{4!} \phi^4 \\ + & = \mathcal{L}_{\phi,\textrm{ren}} + \mathcal{L}_{\phi,\textrm{ct}} +\end{align*} + +with + +\begin{equation} +\mathcal{L}_{\phi,{\textrm{ren}}} = \frac{1}{2} \partial_\mu \phi \partial^\mu \phi - \frac{1}{2} m^2 \phi^2 - \frac{\lambda}{4!} \phi^4 +\end{equation} + +and + +\begin{equation} +\mathcal{L}_{\phi,{\textrm{ct}}} = \frac{1}{2} (Z_\phi - 1) \partial_\mu \phi \partial^\mu \phi - \frac{1}{2} (Z_m^2 Z_\phi - 1) m^2 \phi^2 - (Z_\lambda Z_\phi^2 - 1) \frac{\lambda}{4!} \phi^4 +\end{equation} + +Another simple example is the **scalar Yukawa theory** with + +\begin{equation} +\mathcal{L}_{Y,{\textrm{ren}}} = \bar{\psi} (i \gamma \cdot \partial - M) \psi + \frac{1}{2} \partial_\mu \phi \partial^\mu \phi - \frac{1}{2} m^2 \phi^2 - \frac{\lambda}{4!} \phi^4 - g \bar{\psi} \psi \phi +\end{equation} + +and + +\begin{align*} +\mathcal{L}_{Y,{\textrm{ct}}} &= (Z_\psi - 1) \bar{\psi} i \gamma \cdot \partial \psi - (Z_M Z_\psi - 1) M \bar{\psi} \psi + \frac{1}{2} (Z_\phi - 1) \partial_\mu \phi \partial^\mu \phi \\ +&- \frac{1}{2} (Z_m Z_\phi -1) m^2 \phi^2 - (Z_\lambda Z_\phi^2 -1) \frac{\lambda}{4!} \phi^4 - (Z_g Z_x \sqrt{Z_\phi} -1) g \bar{\psi} \psi \phi +\end{align*} + +Finally, in the case of **QED** we have + +\begin{equation} + \mathcal{L}_{\textrm{QED},\textrm{ren}} = -\frac{1}{4} F_{\mu \nu}F^{\mu \nu} - \frac{1}{2 \xi}(\partial^\mu A_\mu)^2 + + \bar{\psi} (i \gamma \cdot \partial -m) \psi + e \bar{\psi} \gamma \cdot A \psi ,\\ +\end{equation} + +and + +\begin{align*} + \mathcal{L}_{\textrm{QED},\textrm{ct}} & = - (Z_A-1) \frac{1}{4}F_{\mu \nu}F^{\mu \nu} - \frac{1}{2\xi} (Z_A Z^{-1}_\xi - 1) (\partial^\mu A_\mu)^2 \nonumber \\ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + & + (Z_\psi-1) \bar{\psi} i \gamma \cdot \partial \psi- (Z_\psi Z_m -1) m \bar{\psi} \psi + (Z_\psi \sqrt{Z_A} Z_e -1) e \bar{\psi} \gamma^\mu \psi A_\mu. +\end{align*} + +Notice that Ward identities for the photon propagator and the electron-photon vertex link some of the renromalization constants to each other + +\begin{equation} +Z_\xi = Z_A, \quad Z_e = 1/\sqrt{Z_A}. +\end{equation} + +This way we only need to determine $Z_A$, $Z_\psi$ and $Z_m$, which can be done by looking at the self-energies of the electron and photon fields. + +### Feynman rules + +Having clarified the situation with the Lagrangian, let us discuss the derivation of the Feynman rules. The main difference as compared to the usual calculations is that here we also need to derive additional Feynman rules for the counter terms. + +Although those can be always derived by hand, doing so automatically is more convenient and allows to avoid many stupid mistakes. To this aim it useful to employ [FeynRules](https://feynrules.irmp.ucl.ac.be/) for generating the corresponding FeynArts model. When writing down the Lagrangian of our model we need to multiply every term in the counter term Lagragnian by `FR$CT`, for example + +```mathematica +LPhi4 = LPhi4R + LPhi4CT; + +LPhi4R = 1/2 del[phi, mu] del[phi, mu] - 1/2 Mphi^2*phi^2 - 1/(4!) g*phi^4; +LPhi4CT = 1/2 FR$CT (Zphi-1) del[phi, mu] del[phi, mu] - 1/2 Mphi^2 FR$CT (Zm Zphi-1)*phi^2 - 1/(4!) FR$CT (Zg Zphi^2-1)*g*phi^4; +``` + +Furthermore, before saving the FeynArts model via `WriteFeynArtsOutput` we need to set the global variable `FR$Loop` to `True`. For example, + +``` +FR$Loop=True; +SetDirectory[FileNameJoin[{$UserBaseDirectory,"Applications","FeynCalc","FeynArts","Models"}]]; +WriteFeynArtsOutput[LPhi4,Output->"Phi4",CouplingRename->False]; +``` + +### Renormalization schemes + +From the computational point of view, the most convenient scheme is Modified Minimal Subtraction $\overline{\textrm{MS}}$. In this scheme all $\delta Z_x$ are chosen such, that they subtract the poles and certain terms involving $\gamma_E$ and $\log(4\pi)$. More precisely, at 1-loop for $D= 4 - 2 \varepsilon$ we subtract + +\begin{equation} +\frac{1}{\varepsilon} - \gamma_E + \log (4\pi) +\end{equation} + +$\overline{\textrm{MS}}$ renormalization constants are comparably easy to calculate, since we only need to extract the UV-poles of the occurring loop integrals and can ignore their finite parts. + +On the other hand, we should be very careful to regularize all IR-divergences in such a way, that they do not show up as $\varepsilon$ poles. Otherwise we would include IR poles into our renormalization constants and obtain wrong results. In practice, this issue arises when dealing with theories containing massless particles. It can be avoided by giving those particles fictitious masses or using more advances techniques such as infrared rearrangement. + +Unfortunately, in most cases $\overline{\textrm{MS}}$ renormalization constants alone are not sufficient to make physical predictions. First of all, according to the LSZ reduction formula, in physical observables such as cross sections or decay rates, external legs must be renormalized in the on-shell (OS) scheme. This is why we at least need to know $Z^{\textrm{OS}}$ for all external fields in our computation. + +Second, in many effective field theories the expansion in heavy masses relies on the fact that those masses are also defined in the OS scheme. + +Apart from that there are many other renormalization schemes such as Momentum Subtraction (MOM) etc. They can be useful in special cases, but usually what we are most interested in are the $\overline{\textrm{MS}}$ and OS schemes. + +#### Renormalization conditions for the OS scheme + +Following the presentation in [Gauge theories of the strong and electroweak interaction](https://inspirehep.net/literature/571258) by Boehm, Denner and Joos let us provide explicit formulas for the on-shell renormalization conditions when dealing with two-point functions of different field types + +##### Scalar field + +The bare 2-point vertex function for the scalar field is defined as + +\begin{equation} +\Gamma(q^2) = (q^2 - m^2) + \Pi(q^2) +\end{equation} + +and the renormalized one reads + +\begin{equation} +\Gamma_R(q^2) = \Gamma(q^2) + \textrm{CT} = (q^2 - m^2) + \Pi(q^2) + \delta Z_{\phi} q^2 - m^2 (\delta Z_{\phi} + \delta Z_{m} ) +\end{equation} + +For convenience we also introduce + +\begin{equation} +\tilde{\Gamma}_R(q^2) = \Pi(q^2) + \delta Z_{\phi} q^2 - m^2 (\delta Z_{\phi} + \delta Z_{m} ) +\end{equation} + +which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. + +The renormalization condition reads + +\begin{equation} +\lim_{q^2 \to m^2} \left [ \frac{\Gamma_R (q^2)}{q^2 - m^2} = 1 \right ] +\end{equation} + +Multiplying both sides of the equality by $q^2-m^2$ we get + +\begin{equation} +\Gamma_R (q^2) = ( q^2-m^2) \overset{q^2 \to m^2}{=} 0 \Rightarrow \Gamma_R (q^2) \biggl |_{q^2=m^2} = 0 +\end{equation} + +which implies that $m$ is the physical mass of the particle and that the renormalized particle propagator has residue 1. + +Using + +\begin{equation} +\Gamma_R (q^2) = \Gamma_R (m^2) + (q^2 - m^2) \Gamma'_R (m^2) + \mathcal{O}( (q^2 - m^2)^2) +\end{equation} + +we arrive at + +\begin{equation} +\Gamma_R(m^2) = 0, \quad \Gamma_R'(m^2) = 1 +\end{equation} + +which is equivalent to + +\begin{equation} +\tilde{\Gamma}_R(m^2) = 0, \quad \tilde{\Gamma}_R'(m^2) = 0 +\end{equation} + +because setting $q^2 = m^2$ kills the $(q^2-m^2)$-term. + +##### Massless vector field + +The bare 2-point function for the massless vector field is defined as + +\begin{equation} + \Gamma^{\mu \nu} (q) = -g^{\mu \nu} q^2 - \frac{1-\xi}{\xi} q^{\mu} q^{\nu} - \Pi^{\mu \nu} (q) +\end{equation} + +and the renormalized one reads + +\begin{equation} + \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \text{CT}. +\end{equation} + +For convenience we also introduce + +\begin{equation} + \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \text{CT} +\end{equation} + +which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. + +The renormalization condition reads, + +\begin{equation} +\lim_{q^2 \to 0} \left [ \frac{\Gamma_R^{\mu \nu} (q) \varepsilon(q)_\nu}{q^2} = - \varepsilon_{\mu}(q) \right ] +\end{equation} + +where the minus sign comes from the fact that $\varepsilon^{\ast \mu} \varepsilon_\mu = -1$ and $\varepsilon^\mu q_\mu =0$ for the projection onto the physical degrees of freedom of an on-shell massless vector boson. + +Multiplying both sides of the equality by $q^2$ we get + +\begin{equation} +\Gamma_R^{\mu \nu} (q^2) \varepsilon_\nu (q) = - q^2 \varepsilon^{\mu}(q) \overset{q^2 \to 0}{=} 0 \Rightarrow \Gamma_R^{\mu \nu} (q^2) \varepsilon_\nu (q) \biggl|_{q^2=0} = 0, +\end{equation} + +which implies that the physical particle is massless and that the renormalized particle propagator has residue 1. + +It is always possible to decompose this into transverse and longitudinal parts + +\begin{equation} +\Gamma_R^{\mu \nu} (q) = \left ( g^{\mu \nu} - \frac{q^\mu q^\nu}{q^2} \right ) \Gamma_{R,T} (q^2) + \frac{q^\mu q^\nu}{q^2} \Gamma_{R,L} (q^2). +\end{equation} + +Plugging this into the renormalization condition and using that $\varepsilon^\mu q_\mu = 0$, we end up with + +\begin{equation} + \lim_{q^2 \to 0} \left [ \frac{\varepsilon_{\mu}(q) \Gamma_{R,T} (q)}{q^2} = - \varepsilon_{\mu}(q) \right ] +\end{equation} + +which implies + +\begin{equation} + \lim_{q^2 \to 0} \left [ \frac{\Gamma_{R,T} (q^2)}{q^2} \right ] = - 1 \Leftrightarrow \frac{\partial \Gamma_{R,T} (q^2) }{\partial q^2} \biggl |_{q^2=0} = - 1 +\end{equation} + +and is equivalent to + +\begin{equation} + \frac{\partial \tilde{\Gamma}_{R,T} (q^2) }{\partial q^2} \biggl |_{q^2=0} = 0 +\end{equation} + +Notice that if our $\Gamma_R^{\mu \nu}$ does not happen to have a transverse structure, then most likely something went wrong in the calculation, since the longitudinal part is not supposed to receive higher-order corrections! + +In practice, we will of course use projectors to extract the transverse and longitudinal components +\begin{align*} + P^{\mu \nu}_T &= \frac{1}{D-1} \left ( g^{\mu \nu} - \frac{q^\mu q^\nu}{q^2} \right ), \\ + P^{\mu \nu}_L &= \frac{q^\mu q^\nu}{q^2}. +\end{align*} + +In the special case of the QED photon things can be further simplified by making use of the Ward identity for the renormalized propagator as Green function + +\begin{equation} + -\frac{1}{Z_\xi} \frac{1}{\xi} q^2 q_\mu Z_A \Gamma_R^{\mu \nu} (q) = i q^\nu, +\end{equation} + +which implies that $Z_A/Z_{\xi}$ must be finite so that one can fix $Z_\xi = Z_A$. + +Decomposing the propagator into transverse and longitudinal parts and applying the Ward identity for the renormalized propagator as vertex function (1PI-part of the Green function) + +\begin{equation} + q_\mu \Gamma_R^{\mu \nu} (q) = - \frac{1}{\xi} q^2 q^\nu +\end{equation} + +we get + +\begin{equation} + q_\mu \Gamma_R^{\mu \nu} (q) = q_\mu \Gamma_{R,L}^{\mu \nu} (q) = - \frac{1}{\xi} q^2 q^\nu \Rightarrow \Gamma_{R,L} (q^2) = - \frac{1}{\xi} q^2 +\end{equation} + +which means that the longitudinal part does not receive higher-order corrections. + +From the Ward identity and the absence of poles in vertex functions one can follow that the transverse part of the vertex function vanishes at $q^2=0$ + +\begin{equation} + \Gamma_{R,T} (0) = \Gamma_{R,L} (0) = 0. +\end{equation} + + +##### Massive vector field renormalization + +The bare 2-point function for the massive vector field is defined as + +\begin{equation} + \Gamma^{\mu \nu} (q) = -g^{\mu \nu} (q^2 - m^2) - \frac{1-\xi}{\xi} q^{\mu} q^{\nu} - \Pi^{\mu \nu} (q) +\end{equation} + +and the renormalized one reads + +\begin{equation} + \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \text{CT} +\end{equation} + +For convenience we also introduce + +\begin{equation} + \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \text{CT} +\end{equation} + +which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. + +The renormalization condition reads, + +\begin{equation} + \lim_{q^2 \to m^2} \left [ \frac{\Gamma_R^{\mu \nu} (q) \varepsilon(q)_\nu}{q^2 - m^2} = - \varepsilon^{\mu}(q) \right ] +\end{equation} + +Multiplying both sides of the equality by $q^2$ we get + +\begin{equation} + \Gamma_R^{\mu \nu} (q^2) \varepsilon_\nu (q) = - (q^2 - m^2) \varepsilon^{\mu}(q) \overset{q^2 \to m^2}{=} 0 \Rightarrow \Gamma_R^{\mu \nu} (q^2) \varepsilon_\nu(q) \biggl|_{q^2=m^2} = 0. +\end{equation} + +Decomposition into transverse and longitudinal parts + +\begin{equation} + \Gamma_R^{\mu \nu} (q) = \left ( g^{\mu \nu} - \frac{q^\mu q^\nu}{q^2} \right ) \Gamma_{R,T} (q^2) + \frac{q^\mu q^\nu}{q^2} \Gamma_{R,L} (q^2), +\end{equation} + +Contracting with the polarization vector we find + +\begin{equation} + \Gamma_R^{\mu \nu} (q^2) \varepsilon_\nu (q) \biggl |_{q^2=m^2} = 0 \Rightarrow \varepsilon^\mu (q) \, \Gamma_{R,T} (m^2) = 0 \Rightarrow \Gamma_{R,T} (m^2) = 0 +\end{equation} + +Plugging the decomposition into the renormalization condition and choosing the vector to be transverse we end up with + +\begin{equation} + \lim_{q^2 \to m^2} \left [ \frac{\varepsilon_{\mu}(q) \Gamma_{R,T} (q)}{q^2 -m ^2} = - \varepsilon_{\mu}(q) \right ] +\end{equation} + +Using + +\begin{equation} + \Gamma_{R,T} (q^2) = \Gamma_{R,T} (m^2) + (q^2 - m^2) \Gamma'_{R,T} (m^2) + \mathcal{O}( (q^2 - m^2)^2) +\end{equation} + +we arrive at + +\begin{equation} + \Gamma_{R,T}(m^2) = 0, \quad \Gamma_{R,T}'(m^2) = -1 +\end{equation} + +which is equivalent to + +\begin{equation} + \tilde{\Gamma}_{R,T}(m^2) = 0, \quad \tilde{\Gamma}_{R,T}'(m^2) = 0 +\end{equation} + + +##### Fermion field renormalization +The bare 2-point vertex function for the fermion field is defined as + +\begin{equation} + \Gamma(p) = (\gamma \cdot p - m) + \Sigma(p) +\end{equation} + +and the renormalized one reads + +\begin{equation} + \Gamma_R(p) = \Gamma(p) + \textrm{CT} = (\gamma \cdot p - m) + \Sigma(p) + (\gamma \cdot p - m) \delta Z_{\psi} - m \delta Z_{m} +\end{equation} + +For convenience we also introduce + +\begin{equation} + \tilde{\Gamma}_R(p) = \Sigma(p) + (\gamma \cdot p - m) \delta Z_{\psi} - m \delta Z_{m} \equiv (\gamma \cdot p - m) {\Sigma}_{V,R}(p^2) + m ({\Sigma}_{V,R}(p^2) + {\Sigma}_{S,R}(p^2)) +\end{equation} + +which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. + +The renormalization constants $Z_m$ and $Z_\psi$ are fixed by the condition + +\begin{equation} + \lim_{p^2 \to m^2} \left [ \frac{(\gamma \cdot p + m )\Gamma_R (p) u(p)}{p^2-m^2} = u(p) \right ], +\end{equation} + +where + +\begin{equation} + (\gamma \cdot p-m) u (p) = 0, \quad (\gamma \cdot p+m) (\gamma \cdot p-m) = p^2 - m^2. +\end{equation} + +Multiplying both sides of the equality by $p^2-m^2$ we get + +\begin{equation} + (\gamma \cdot p + m )\Gamma_R (p) u(p) = u(p)( p^2-m^2) \overset{p^2 \to m^2}{=} 0 \Rightarrow \Gamma_R (p) u(p) \biggl|_{p^2=m^2} = 0, +\end{equation} + +which implies that $m$ is the physical mass of the particle and that the renormalized particle propagator has residue 1. + +We can apply the usual decomposition + +\begin{equation} + \Sigma (\gamma \cdot p) = \gamma \cdot p \Sigma_V (p^2) + m \Sigma_S (p^2) = (\gamma \cdot p -m) \Sigma_V (p^2) + m (\Sigma_V (p^2) + \Sigma_S (p^2)) , +\end{equation} + +Expanding it around $\gamma \cdot p=m$ we find + +\begin{align*} + \Sigma (\gamma \cdot p) & = \Sigma (\gamma \cdot p) \biggl|_{\gamma \cdot p=m} + (\gamma \cdot p-m) \frac{ \partial \Sigma (\gamma \cdot p)}{\partial \gamma \cdot p } \biggl|_{\gamma \cdot p=m} + \mathcal{O} ((\gamma \cdot p-m)^2) \\ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + & = m (\Sigma_V(m^2) + \Sigma_S(m^2) ) + (\gamma \cdot p - m) \left [ \Sigma_V(m^2) + 2 m^2 \left ( \frac{\partial \Sigma_S (p^2) }{\partial p^2} + \frac{\partial \Sigma_V (p^2) }{\partial p^2} \right )\biggl|_{p^2 = m^2} \right ] + \mathcal{O} ((\gamma \cdot p-m)^2) \\ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + & = m (\Sigma_V(m^2) + \Sigma_S(m^2) ) + (\gamma \cdot p - m) \left [ \Sigma_V(m^2) + 2 m^2 \left ( \Sigma'_S (m^2) + \Sigma'_V (m^2) \right ) \right ] + \mathcal{O} ((\gamma \cdot p-m)^2). +\end{align*} + +Plugging the expansion into the renormalization condition we arrive at + +\begin{equation} + \lim_{p^2 \to m^2} \left [ \frac{2m^2}{p^2-m^2} (\Sigma_V(m^2) + \Sigma_S(m^2) - \delta Z_m) + + \left ( \Sigma_V(m^2) + 2 m^2 \left ( \Sigma'_S (m^2) + \Sigma'_V (m^2) \right) + \delta Z_\psi \right ) = 0 \right ], +\end{equation} + +which amounts to the requirements + +\begin{equation} + \Gamma_{R,V}(m^2) + \Gamma_{R,S}(m^2) = 0, \\ + \left ( \Gamma_{R,V}(m^2) + 2 m^2 \left ( \Gamma'_{R,S} (m^2) + \Gamma'_{R,V} (m^2) \right) \right ) = 1, +\end{equation} + or equivalently + +\begin{equation} + \Sigma_{V,R}(m^2) + \Sigma_{S,R}(m^2) = 0, \\ + \left ( \Sigma_{V,R}(m^2) + 2 m^2 \left ( \Sigma'_{S,R} (m^2) + \Sigma'_{V,R} (m^2) \right) \right ) = 0, +\end{equation} +where the first one fixes $Z_m$ and the second one $Z_\psi$. + +In practical calculations it is better to introduce a projector that can extract $\Sigma_i(m^2)$ ( or well $\Sigma_{i,R}(m^2)$) directly + +\begin{align*} +\mathrm{Tr} \left( \frac{\gamma \cdot p+m}{4m^2} \Sigma (\gamma \cdot p) \right ) & = \Sigma_S (p^2) + \frac{p^2}{m^2} \Sigma_V(p^2) = \Sigma_S (p^2) + \Sigma_V(p^2) + \frac{p^2-m^2}{m^2} \Sigma_V(p^2) \\ + & = \Sigma_1 (p^2) + \frac{p^2-m^2}{m^2} \Sigma_2(p^2). +\end{align*} + +Applying the projector to the series expansion yields + +\begin{equation} + \mathrm{Tr} \left( \frac{\gamma \cdot p+m}{4m^2} \Sigma (\gamma \cdot p) \right ) = \Sigma_1(m^2) + + \frac{p^2-m^2}{m^2} \left [ \Sigma_2(m^2) + 2 m^2 \Sigma'_1 (m^2) \right ] + \mathcal{O}((p^2 -m^2)^2) +\end{equation} + +Of course, one can also get $\Sigma_V$ and $\Sigma_S$ separately using projectors + +\begin{equation} +\Sigma_V = \frac{1}{4} \mathrm{Tr}(\gamma \cdot p \Sigma (\gamma \cdot p)), \quad \Sigma_S = \frac{1}{4 m} \mathrm{Tr}(\Sigma (\gamma \cdot p)) +\end{equation} + +Notice also that + +\begin{equation} + \frac{\partial \Sigma_{S,V}(p^2)}{\partial p^\mu} = \frac{\partial \Sigma_{S,V}(p^2)}{\partial p^2} \frac{\partial p^2}{\partial p^\mu} = 2 p^\mu \frac{\partial \Sigma_{S,V}(p^2)}{\partial p^2} \Rightarrow + \frac{\partial \Sigma_{S,V}(p^2)}{\partial p^2} = \frac{p_\mu}{2 p^2 } \frac{\partial \Sigma_{S,V}(p^2)}{\partial p^\mu} +\end{equation} + +### One-loop renormalization + +At one loop the calculations on renormalization constants can be very much streamlined using the capabilities of FeynCalc and FeynHelpers. + +As far as the $\overline{\textrm{MS}}$ scheme is concerned, it is not really necessary to regularize IR divergences with fake masses. Instead, we can set the global variable `$KeepLogDivergentScalelessIntegrals` to `True`, which will prevent FeynCalc from setting $\log$-divergent integrals (i.e. the ones that are proportional to $1/\varepsilon_{\textrm{UV}} - 1/\varepsilon_{\textrm{IR}}$). Then, we can either use Package-X or directly employ the built-in function `PaVeUVPart` to extract the UV poles of all occurring 1-loop integrals. + +As long as we are dealing with amplitudes containing only quadratic propagators, this toolset is fully sufficient to determine the +$\overline{\textrm{MS}}$ renormalization constants of any theory at one loop. + +The OS renormalization usually requires slightly more effort, but using the formulas provided in this document and the capabilities of Package-X provided via FeynHelpers, such calculations are always doable. + From a3d26394ac49978584a0f5501a63dc8267d8561c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 12 Mar 2024 12:08:14 +0100 Subject: [PATCH 27/67] Added some useful information on gamma5 to the manual. --- .../Documentation/Markdown/Extra/FeynCalc.md | 9 +- .../Documentation/Markdown/Extra/Gamma5.md | 115 ++++++++++++++++++ 2 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/Extra/Gamma5.md diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index c283f04c..87d9b7c3 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -4,15 +4,16 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [Installation](Install.md) - [Loading the package](Load.md) -- [FrequentlyAskedQuestions](FrequentlyAskedQuestions.md) -- [FeynArts](FeynArts.md) +- [Frequently Asked Questions about FeynCalc](FrequentlyAskedQuestions.md) +- [Frequently Asked Questions about FeynArts](FeynArts.md) +- [FeynArts sign conventions](FeynArtsSigns.md) - [Parallelization](Parallelization.md) - [Upper and lower indices](UpperLowerIndices.md) -- [Master integrals](MasterIntegrals.md) -- [New FeynArts sign conventions](FeynArtsSigns.md) - [Custom FeynRules models](CustomModels.md) +- [Treatment of gamma5 in D dimensions](Gamma5.md) - [Useful formulas for Dirac algebra](DiracAlgebraFormulas.md) - [Renormalization](Renormalization.md) +- [Master integrals](MasterIntegrals.md) - [Development](Development.md) ## Tutorials diff --git a/FeynCalc/Documentation/Markdown/Extra/Gamma5.md b/FeynCalc/Documentation/Markdown/Extra/Gamma5.md new file mode 100644 index 00000000..8f36adc1 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/Extra/Gamma5.md @@ -0,0 +1,115 @@ +## Treatment of gamma5 in D dimensions + +### See also + +[Overview](FeynCalc.md). + +### Nature of the problem + +It is a well-known fact (cf. eg. [Jegerlehner:2000dz](https://arxiv.org/pdf/hep-th/0005255)) that the definition of $\gamma^5$ in 4 dimensions cannot be consistently extended to $D$ dimensions without giving up either the anticommutativity property + +\begin{equation} +\{\gamma^5, \gamma^\mu\} = 0 +\end{equation} + +or the cyclicity of the Dirac trace, e.g. that + +\begin{equation} +\mathrm{Tr}( \gamma^{\mu_1} \ldots \gamma^{\mu_{2n}} \gamma^5 ) = \mathrm{Tr}( \gamma^{\mu_2} \ldots \gamma^{\mu_{2n}} \gamma^5 \gamma^{\mu_1} ) = \mathrm{Tr}( \gamma^{\mu_3} \ldots \gamma^{\mu_{2n}} \gamma^5 \gamma^{\mu_1} \gamma^{\mu_2} ) = \ldots +\end{equation} + +This explains the existence of multiple prescriptions (called $\gamma^5$-schemes) that aim at avoiding these issues and obtaining physical results in the _given calculation_. + +Indeed, as of now there is no simple solution or cookbook recipe that can be readily applied to any theory at any loop order in a fully automatic fashion. + +The reason for this is that calculations involving $\gamma^5$ are not limited to the algebraic manipulations of Dirac matrices. In general, once $\gamma^5$ shows up in $D$-dimensional amplitudes, +there is a high chance that the final result will violate some of the essential symmetries, such as generalized Ward identities or Bose symmetry. + +Once this happens, symmetries violated due to the chosen $\gamma^5$ scheme must be restored by hand, e.g. by introducing special finite counterterms. Unfortunately, an explicit determination of such counterterms for a given model is a nontrivial task, especially beyond 1-loop. This explains why people usually try to avoid this situation and would rather opt for figuring out special tricks that work only for this particular calculation but manage to preserve the symmetries. + +Further discussions on this topic can be found e.g. in + +- chapter D of [Blondel:2018mad](https://arxiv.org/pdf/1809.01830) +- [Trueman:1995ca](https://arxiv.org/pdf/hep-ph/9504315.pdf) +- [Denner:2019vbn](https://arxiv.org/pdf/1912.06823.pdf) +- [Gnendiger:2017pys](https://arxiv.org/abs/1705.01827) +- [Stockinger:2023ndm](https://arxiv.org/abs/2312.11291) + + +### FeynCalc implementation + +FeynCalc has built-in support for several $\gamma^5$-schemes in the sense that it can manipulate $D$-dimensional algebraic expressions involving $\gamma^5$ in accordance with the rules provided by the scheme authors. + +The nonalgebraic part of a typical $\gamma^5$-calculation, e.g. checking for violated symmetries and restoring them is **not handled** by FeynCalc. This is also not something easy to automatize (due to the reasons explained above) so that here we expect the user to employ their understanding of physics and common sense. + +The responsibility of FeynCalc is to ensure that algebraic manipulations of Dirac matrices +(including $\gamma^5$) are consistent within the chosen scheme. For the purpose of dealing with $\gamma^5$ in $D$ dimensions FeynCalc implements three different schemes. + +#### NDR + +The Naive or Conventional Dimensional Regularization (NDR or CDR respectively) [Chanowitz:1979zu](https://doi.org/10.1016/0550-3213(79)90333-X) simply _assumes_ that one can define a $D$-dimensional $\gamma^5$ that anticommutes with any other Dirac matrix and does not break the cyclicity of the trace. For FeynCalc this means that in every string of Dirac matrices all $\gamma^5$ can be safely anticommuted to the right end of the string. In the course of this operation FeynCalc can always apply $(\gamma^5)^2 = 1$. + +Consequently, all Dirac traces with an even number of $\gamma^5$ can be rewritten as traces that involve only the first four $\gamma$-matrices and evaluated directly, e.g. + +\begin{equation} +\mathrm{Tr}( \gamma^{\mu_1} \gamma^{\mu_2} \gamma^5 \gamma^{\mu_3} \ldots \gamma^{\mu_{2n}} \gamma^5 ) = +\mathrm{Tr}( \gamma^{\mu_1} \gamma^{\mu_2} \ldots \gamma^{\mu_{2n}} ) +\end{equation} + +The problematic cases are $\gamma^5$-odd traces with an even number of other Dirac matrices, where the $\mathcal{O}(D-4)$ pieces of the result depend on the initial position of $\gamma^5$ in the string. Using the anticommutativity property they can be always rewritten as traces of a string of other Dirac matrices and one $\gamma^5$. If the number of the other Dirac matrices is odd, such a trace is put to zero i.e. +\begin{equation} +\mathrm{Tr}(\gamma^{\mu_1} \ldots \gamma^{\mu_{2n-1}} \gamma^5) = 0, \quad n \in \mathbb{N} +\end{equation} +If the number is even, the trace +\begin{equation} +\mathrm{Tr}(\gamma^{\mu_1} \ldots \gamma^{\mu_{2n}} \gamma^5) +\end{equation} +is returned unevaluated, since FeynCalc does not know how to calculate it in a consistent way. A user who knows how these ambiguous objects should be treated in the particular calculation can still take care of the remaining traces by hand. This ensures that the output produced by FeynCalc is algebraically consistent to the maximal extent possible in the NDR scheme without extra assumptions. + +In FeynCalc, this scheme the default choice. It can also be explicitly activated via + +```mathematica +FCSetDiracGammaScheme["NDR"] +``` + +Sometimes $\gamma^5$ may show up in the calculation as an artifact of using a particular set of operators or projectors even though the results itself is not supposed to be affected by the +$\gamma^5$-problem. For such cases FeynCalc offers a variety of the NDR scheme, where all traces of the form +\begin{equation} +\mathrm{Tr}(\gamma^{\mu_1} \ldots \gamma^{\mu_{2n}} \gamma^5) +\end{equation} +are simply put to zero. It can be used to e.g. examine the effects of the chosen scheme on the final result and can be activated via +```mathematica +FCSetDiracGammaScheme["NDR-Discard"] +``` + +### BMHV + +FeynCalc also supports the Breitenlohner-Maison implementation [Breitenlohner:1977hr](https://doi.org/10.1007/BF01609069) of the t'Hooft-Veltman [tHooft:1972tcz](https://doi.org/10.1016/0550-3213(72)90279-9) prescription, often abbreviated as BMHV, HVBM, HV or BM scheme. In this approach $\gamma^5$ is treated as a purely 4-dimensional object, while $D$-dimensional Dirac matrices and 4-vectors are decomposed into $4$- and $D-4$-dimensional components. Following [Buras:1989xd](https://doi.org/10.1016/0550-3213(90)90223-Z) FeynCalc typesets the former with a bar and the latter with a hat e.g. + +\begin{equation} +\gamma^\mu = \bar{\gamma}^\mu + \hat{\gamma}^\mu, \quad p^\mu = \bar{p}^\mu + \hat{p}^\mu +\end{equation} + +The main advantage of the BMHV scheme is that the Dirac algebra (including traces) can be evaluated without any algebraic ambiguities. However, calculations involving tensors from three different spaces ($D$, $4$ and $D-4$) often turn out to be rather cumbersome, even when using computer codes. Moreover, this prescription is known to artificially violate Ward identities in chiral theories, which is something that can be often avoided when using NDR. Within BMHV FeynCalc can simplify arbitrary strings of Dirac matrices and calculate arbitrary traces out-of-the-box. The evaluation of $\gamma^5$-odd Dirac traces is performed using the West-formula from [West:1991xv](https://doi.org/10.1016/0010-4655(93)90011-Z). It is worth noting that $D-4$-dimensional components of external momenta are not set to zero by default, as it is conventionally done in the literature. If this is required, the user should evaluate `Momentum[pi,D-4]=0` for each relevant momentum $p_i$. To remove such assignments one should use `FCClearScalarProducts[]`. + +This scheme is activated by evaluating + +```mathematica +FCSetDiracGammaScheme["BMHV"] +``` + +### Larin's scheme + +Larin's scheme [Larin:1993tq](https://arxiv.org/pdf/hep-ph/9302240.pdf) is a variety of the BMHV scheme that has been extensively used in QCD calculations involving axial vector currents. The main idea is to replace the products of $\gamma^\mu$ and $\gamma^5$ in a chiral trace as in + +\begin{equation} +\gamma^\mu \gamma^5 \to \frac{1}{6} i \varepsilon^{\mu \nu \rho \sigma} \gamma_\nu \gamma_\rho \gamma_\sigma +\end{equation} + +and then calculate the resulting trace. Then, all $\varepsilon^{\mu \nu \rho \sigma}$-tensors occurring in the amplitude should be evaluated in $D$ dimensions. Together with the correct counterterm, this prescription is known to give the same result as when using the full BMHV scheme. + +FeynCalc implement the so-called Moch-Vermaseren-Vogt MVV formula from [Moch:2015usa](https://arxiv.org/pdf/1506.04517.pdf) for calculating $\gamma^5$-traces in this scheme. The scheme itself is activated by setting + +```mathematica +FCSetDiracGammaScheme["Larin"] +``` From b139bc48e6fc8fcab3948c44689da923e35304ef Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 13 Mar 2024 17:56:56 +0100 Subject: [PATCH 28/67] Fixed docu script. --- .../Markdown/FCLoopGLIRaiseDimension.md | 31 +++++++++++++++++++ .../Documentation/Scripts/CheckMissingDocu.m | 9 ++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/FCLoopGLIRaiseDimension.md diff --git a/FeynCalc/Documentation/Markdown/FCLoopGLIRaiseDimension.md b/FeynCalc/Documentation/Markdown/FCLoopGLIRaiseDimension.md new file mode 100644 index 00000000..37ad6dd3 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopGLIRaiseDimension.md @@ -0,0 +1,31 @@ +## FCLoopGLIRaiseDimension + +`FCLoopGLIRaiseDimension[gli, topo]` raises the dimension of the given `GLI` from N to N+2 and expresses it in terms of `N`-dimensional loop integrals returned in the output. + +The algorithm is based on the code of the function `RaisingDRR` from R. Lee's LiteRed + +### See also + +[Overview](Extra/FeynCalc.md), [FCLoopGLILowerDimension](FCLoopGLILowerDimension.md). + +### Examples + +```mathematica +topo = FCTopology[ + topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], + SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}] +``` + +$$\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{((-\text{p1}-\text{p2}+Q)^2+i \eta )},\frac{1}{((Q-\text{p2})^2+i \eta )},\frac{1}{((Q-\text{p1})^2+i \eta )}\right\},\{\text{p1},\text{p2}\},\{Q\},\{\text{Hold}[\text{SPD}(Q)]\to \;\text{qq}\},\{\}\right)$$ + +```mathematica +FCLoopGLIRaiseDimension[GLI[topo1, {1, 1, 1, 1, 1}], topo] +``` + +$$-\frac{G^{\text{topo1}}(-1,0,1,1,1)}{(1-D) (2-D) Q^2}-\frac{Q^2 G^{\text{topo1}}(1,1,0,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(0,-1,1,1,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(0,0,0,1,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(0,0,1,0,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(0,0,1,1,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(0,1,0,0,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(0,1,1,0,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(1,0,0,1,0)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(1,0,1,0,0)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(1,1,0,0,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(1,1,1,-1,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(1,1,1,0,-1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(0,0,1,1,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(0,1,0,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(0,1,1,1,0)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(1,0,0,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(1,0,1,0,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(1,1,-1,1,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(1,1,0,0,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(1,1,0,1,0)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(1,1,1,0,0)}{(1-D) (2-D)}$$ + +```mathematica +FCLoopGLIRaiseDimension[GLI[topo1, {n1, n2, n3, 1, 1}], topo] +``` + +$$-\frac{G^{\text{topo1}}(\text{n1}-2,\text{n2}-1,\text{n3},1,1)}{(1-D) (2-D) Q^2}-\frac{Q^2 G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}-1,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2}-2,\text{n3},1,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2}-1,\text{n3}-1,1,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2}-1,\text{n3},0,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2}-1,\text{n3},1,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2},\text{n3}-1,0,1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2},\text{n3},0,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(\text{n1},\text{n2}-1,\text{n3}-1,1,0)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1},\text{n2}-1,\text{n3},0,0)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}-1,0,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},-1,0)}{(1-D) (2-D) Q^2}-\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},0,-1)}{(1-D) (2-D) Q^2}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2}-1,\text{n3},1,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2},\text{n3}-1,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(\text{n1}-1,\text{n2},\text{n3},1,0)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(\text{n1},\text{n2}-1,\text{n3}-1,1,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(\text{n1},\text{n2}-1,\text{n3},0,1)}{(1-D) (2-D)}-\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}-2,1,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}-1,0,1)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}-1,1,0)}{(1-D) (2-D)}+\frac{G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},0,0)}{(1-D) (2-D)}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Scripts/CheckMissingDocu.m b/FeynCalc/Documentation/Scripts/CheckMissingDocu.m index 806a4234..3f6e9c7f 100644 --- a/FeynCalc/Documentation/Scripts/CheckMissingDocu.m +++ b/FeynCalc/Documentation/Scripts/CheckMissingDocu.m @@ -62,11 +62,16 @@ Print[""]; Print[""]; Print["Documentation pages for nonexisting symbols:"]; -Print[StringRiffle[SelectFree[Complement[docFiles,fcSymbols],{"Vectors","FerSolve"}],"\n"]]; +Print[StringRiffle[SelectFree[Complement[docFiles,fcSymbols],{"Vectors","FerSolve","ColorAlgebra","Contractions", +"Dimensions","DiracAlgebra","Expansions","Indices","InternalExternal", +"Kinematics","LightCone","Loops","Nonrelativistic","ColorAlgebra" +}],"\n"]]; Switch[FileBaseName[indexFile], "FeynCalc", - Print[StringRiffle[SelectFree[Complement[docFiles,fcSymbols],{"Vectors"}],"\n"]], + Print[StringRiffle[SelectFree[Complement[docFiles,fcSymbols],{"Vectors","ColorAlgebra","Contractions", +"Dimensions","DiracAlgebra","Expansions","Indices","InternalExternal", +"Kinematics","LightCone","Loops","Nonrelativistic","ColorAlgebra"}],"\n"]], "FeynHelpers", Print[StringRiffle[SelectFree[Complement[docFiles,fcSymbols],{"FerSolve"}],"\n"]] ]; From 6622e33490479f54e1dfc95da5f551127b233f3c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 13 Mar 2024 17:58:24 +0100 Subject: [PATCH 29/67] Added FCLoopGLILowerDimension and FCLoopGLIRaiseDimension for doing dimension shifts on GLIs. --- .../Markdown/Extra/Development.md | 5 +- .../Documentation/Markdown/Extra/FeynCalc.md | 2 + .../Extra/FrequentlyAskedQuestions.md | 2 +- .../Markdown/Extra/Renormalization.md | 10 +- .../Markdown/FCLoopGLILowerDimension.md | 31 ++++ .../LoopIntegrals/FCLoopGLILowerDimension.m | 38 ++++ .../LoopIntegrals/FCLoopGLIRaiseDimension.m | 38 ++++ .../LoopIntegrals/FCLoopGLILowerDimension.m | 165 ++++++++++++++++++ .../LoopIntegrals/FCLoopGLIRaiseDimension.m | 134 ++++++++++++++ .../FCLoopGLILowerDimension.test | 39 +++++ .../FCLoopGLIRaiseDimension.test | 50 ++++++ 11 files changed, 505 insertions(+), 9 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/FCLoopGLILowerDimension.md create mode 100644 FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLILowerDimension.m create mode 100644 FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLIRaiseDimension.m create mode 100644 FeynCalc/LoopIntegrals/FCLoopGLILowerDimension.m create mode 100644 FeynCalc/LoopIntegrals/FCLoopGLIRaiseDimension.m create mode 100644 Tests/LoopIntegrals/FCLoopGLILowerDimension.test create mode 100644 Tests/LoopIntegrals/FCLoopGLIRaiseDimension.test diff --git a/FeynCalc/Documentation/Markdown/Extra/Development.md b/FeynCalc/Documentation/Markdown/Extra/Development.md index 0c01c863..298bca2c 100644 --- a/FeynCalc/Documentation/Markdown/Extra/Development.md +++ b/FeynCalc/Documentation/Markdown/Extra/Development.md @@ -32,7 +32,7 @@ The add-ons are placed in the directory `AddOns` inside `$FeynCalcDirectory`. Th A toy add-on [FVProjection](https://github.com/FeynCalc/feyncalc/tree/master/FeynCalc/AddOns/FVProjection) that represents a minimal working example is shipped together with FeynCalc. You can use its source code as a template for writing your own addons. The general structure of the main .m file (e.g. `MyAddon.m`) for an add-on looks like -```Mathematica +```mathematica Foo::usage= "Description of Foo"; @@ -66,14 +66,13 @@ If[ Global`$FeynCalcStartupMessages =!= False, End[] - ``` ### Packages that use FeynCalc Starting with FeynCalc 9.0 one can easily write something like -```Mathematica +```mathematica BeginPackage["MyPackage`",{"FeynCalc`"}] MySP::usage= diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index 87d9b7c3..7211c90a 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -1,3 +1,4 @@ + FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Theory and semi-automatic evaluation of Feynman Diagrams. ## Useful information @@ -336,6 +337,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [FCLoopGetEtaSigns](../FCLoopGetEtaSigns.md) - extracts the signs of $i \eta$ from all propagators - [FCLoopGetKinematicInvariants](../FCLoopGetKinematicInvariants.md) - kinematic invariants from the given topology. - [FCLoopGLIDifferentiate](../FCLoopGLIDifferentiate.md) - differentiates [GLI](../GLI.md)s with respect to a scalar variable. +- [FCLoopGLILowerDimension](../FCLoopGLILowerDimension.md), [FCLoopGLIRaiseDimension](../FCLoopGLIRaiseDimension.md) - shifts dimensions of [GLI](../GLI.md)s to $D-2$ or $D+2$. - [FCLoopAddScalingParameter](../FCLoopAddScalingParameter.md), [FCLoopGLIExpand](../FCLoopGLIExpand.md) - series expansion of expressions with [GLI](../GLI.md)s with respect to a scalar variable - [FCLoopIBPReducableQ](../FCLoopIBPReducableQ.md) - checks if the integral contains propagators raised to integer powers - [FCLoopIntegralToPropagators](../FCLoopIntegralToPropagators.md) - auxiliary function that converts a loop integral into a list of propagators diff --git a/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md b/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md index 6ee83ff9..f0732de5 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md +++ b/FeynCalc/Documentation/Markdown/Extra/FrequentlyAskedQuestions.md @@ -172,7 +172,7 @@ For practical purposes, this approach is indeed the most convenient one. If you ### How can I define a complex four vector? The simplest way is to write something like `FV[{a,I},mu]`. The presence of an explicit `I` will make this vector change under `ComplexConjugate`, such that -``` +```mathematica ComplexConjugate[FV[{a,I},mu]]//FCE ``` diff --git a/FeynCalc/Documentation/Markdown/Extra/Renormalization.md b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md index 89044a46..b95fe664 100644 --- a/FeynCalc/Documentation/Markdown/Extra/Renormalization.md +++ b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md @@ -146,7 +146,7 @@ LPhi4CT = 1/2 FR$CT (Zphi-1) del[phi, mu] del[phi, mu] - 1/2 Mphi^2 FR$CT (Zm Z Furthermore, before saving the FeynArts model via `WriteFeynArtsOutput` we need to set the global variable `FR$Loop` to `True`. For example, -``` +```mathematica FR$Loop=True; SetDirectory[FileNameJoin[{$UserBaseDirectory,"Applications","FeynCalc","FeynArts","Models"}]]; WriteFeynArtsOutput[LPhi4,Output->"Phi4",CouplingRename->False]; @@ -241,13 +241,13 @@ The bare 2-point function for the massless vector field is defined as and the renormalized one reads \begin{equation} - \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \text{CT}. + \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \;\text{CT}. \end{equation} For convenience we also introduce \begin{equation} - \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \text{CT} + \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \;\text{CT} \end{equation} which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. @@ -340,13 +340,13 @@ The bare 2-point function for the massive vector field is defined as and the renormalized one reads \begin{equation} - \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \text{CT} + \Gamma_R^{\mu \nu} (q) = \Gamma^{\mu \nu} (q) + \;\text{CT} \end{equation} For convenience we also introduce \begin{equation} - \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \text{CT} + \tilde{\Gamma}^{\mu \nu}_R(q) = - \Pi^{\mu \nu} (q) + \;\text{CT} \end{equation} which corresponds to what one actually calculates when considering the sum of a bare amplitude and the corresponding counter-term. diff --git a/FeynCalc/Documentation/Markdown/FCLoopGLILowerDimension.md b/FeynCalc/Documentation/Markdown/FCLoopGLILowerDimension.md new file mode 100644 index 00000000..6d4f46c2 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopGLILowerDimension.md @@ -0,0 +1,31 @@ +## FCLoopGLILowerDimension + +`FCLoopGLILowerDimension[gli, topo]` lowers the dimension of the given `GLI` from `D` to `D-2` and expresses it in terms of `D`-dimensional loop integrals returned in the output. + +The algorithm is based on the code of the function `RaisingDRR` from R. Lee's LiteRed + +### See also + +[Overview](Extra/FeynCalc.md), [FCLoopGLIRaiseDimension](FCLoopGLIRaiseDimension.md). + +### Examples + +```mathematica +topo = FCTopology[ + topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], + SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}] +``` + +$$\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{((-\text{p1}-\text{p2}+Q)^2+i \eta )},\frac{1}{((Q-\text{p2})^2+i \eta )},\frac{1}{((Q-\text{p1})^2+i \eta )}\right\},\{\text{p1},\text{p2}\},\{Q\},\{\text{Hold}[\text{SPD}(Q)]\to \;\text{qq}\},\{\}\right)$$ + +```mathematica +FCLoopGLILowerDimension[GLI[topo1, {1, 1, 1, 1, 1}], topo] +``` + +$$G^{\text{topo1}}(1,1,1,2,2)+G^{\text{topo1}}(1,1,2,1,2)+G^{\text{topo1}}(1,1,2,2,1)+G^{\text{topo1}}(1,2,1,1,2)+G^{\text{topo1}}(1,2,2,1,1)+G^{\text{topo1}}(2,1,1,2,1)+G^{\text{topo1}}(2,1,2,1,1)+G^{\text{topo1}}(2,2,1,1,1)$$ + +```mathematica +FCLoopGLILowerDimension[GLI[topo1, {n1, n2, n3, 1, 1}], topo] +``` + +$$G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},2,2)+\text{n3} G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}+1,1,2)+\text{n3} G^{\text{topo1}}(\text{n1},\text{n2},\text{n3}+1,2,1)+\text{n2} G^{\text{topo1}}(\text{n1},\text{n2}+1,\text{n3},1,2)+\text{n2} \;\text{n3} G^{\text{topo1}}(\text{n1},\text{n2}+1,\text{n3}+1,1,1)+\text{n1} G^{\text{topo1}}(\text{n1}+1,\text{n2},\text{n3},2,1)+\text{n1} \;\text{n3} G^{\text{topo1}}(\text{n1}+1,\text{n2},\text{n3}+1,1,1)+\text{n1} \;\text{n2} G^{\text{topo1}}(\text{n1}+1,\text{n2}+1,\text{n3},1,1)$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLILowerDimension.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLILowerDimension.m new file mode 100644 index 00000000..025e36d7 --- /dev/null +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLILowerDimension.m @@ -0,0 +1,38 @@ +(* ::Package:: *) + + + + +(* ::Section:: *) +(*FCLoopGLILowerDimension*) + + +(* ::Text:: *) +(*`FCLoopGLILowerDimension[gli, topo]` lowers the dimension of the given `GLI` from `D` to `D-2` and expresses it in terms of `D`-dimensional loop integrals returned in the output.*) + + +(* ::Text:: *) +(*The algorithm is based on the code of the function `RaisingDRR` from R. Lee's LiteRed*) + + +(* ::Subsection:: *) +(*See also*) + + +(* ::Text:: *) +(*[Overview](Extra/FeynCalc.md), [FCLoopGLIRaiseDimension](FCLoopGLIRaiseDimension.md).*) + + +(* ::Subsection:: *) +(*Examples*) + + +topo=FCTopology[ +topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], +SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}] + + +FCLoopGLILowerDimension[GLI[topo1, {1, 1, 1, 1, 1}],topo] + + +FCLoopGLILowerDimension[GLI[topo1, {n1,n2, n3, 1, 1}],topo] diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLIRaiseDimension.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLIRaiseDimension.m new file mode 100644 index 00000000..fea29474 --- /dev/null +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopGLIRaiseDimension.m @@ -0,0 +1,38 @@ +(* ::Package:: *) + + + + +(* ::Section:: *) +(*FCLoopGLIRaiseDimension*) + + +(* ::Text:: *) +(*`FCLoopGLIRaiseDimension[gli, topo]` raises the dimension of the given `GLI` from N to N+2 and expresses it in terms of `N`-dimensional loop integrals returned in the output.*) + + +(* ::Text:: *) +(*The algorithm is based on the code of the function `RaisingDRR` from R. Lee's LiteRed*) + + +(* ::Subsection:: *) +(*See also*) + + +(* ::Text:: *) +(*[Overview](Extra/FeynCalc.md), [FCLoopGLILowerDimension](FCLoopGLILowerDimension.md).*) + + +(* ::Subsection:: *) +(*Examples*) + + +topo=FCTopology[ +topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], +SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}] + + +FCLoopGLIRaiseDimension[GLI[topo1, {1, 1, 1, 1, 1}],topo] + + +FCLoopGLIRaiseDimension[GLI[topo1, {n1,n2, n3, 1, 1}],topo] diff --git a/FeynCalc/LoopIntegrals/FCLoopGLILowerDimension.m b/FeynCalc/LoopIntegrals/FCLoopGLILowerDimension.m new file mode 100644 index 00000000..bb31f21d --- /dev/null +++ b/FeynCalc/LoopIntegrals/FCLoopGLILowerDimension.m @@ -0,0 +1,165 @@ +(* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) + +(* :Title: FCLoopGLILowerDimension *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Lowering dimension shift *) + +(* ------------------------------------------------------------------------ *) + +FCLoopGLILowerDimension::usage = +"FCLoopGLILowerDimension[gli, topo] lowers the dimension of the given GLI from +D to D-2 and expresses it in terms of D-dimensional loop integrals returned in +the output. + +The algorithm is based on the code of the function RaisingDRR from R. Lee's +LiteRed"; + +FCLoopGLILowerDimension::failmsg = +"Error! FCLoopGLILowerDimension has encountered a fatal problem and must abort the computation. The problem reads: `1`"; + + +Begin["`Package`"] +End[] + +Begin["`FCLoopGLILowerDimension`Private`"]; + +rgdVerbose::usage=""; +holdDerivative::usage=""; +CC::usage=""; +aux::usage=""; +tempSimp::usage=""; + +Options[FCLoopGLILowerDimension] = { + Collecting -> True, + FCE -> False, + FCI -> False, + FCVerbose -> False, + Factoring -> {Factor2,5000}, + TimeConstrained -> 3 +}; + +FCLoopGLILowerDimension[gli_GLI, topos_List, opts:OptionsPattern[]]:= + FCLoopGLILowerDimension[gli,FCLoopSelectTopology[gli,topos],opts]; + +FCLoopGLILowerDimension[gli_GLI, {topoRaw_FCTopology}, opts:OptionsPattern[]] := + FCLoopGLILowerDimension[gli, topoRaw, opts]; + +FCLoopGLILowerDimension[gli_GLI, topoRaw_FCTopology, OptionsPattern[]] := + Block[{ res, ex, topo, nProps, lMoms, nLoops, extMoms, + invProps, dim, coeffs, dot, null1, null2, tmp, + optCollecting, optFactoring, optTimeConstrained}, + + optCollecting = OptionValue[Collecting]; + optFactoring = OptionValue[Factoring]; + optTimeConstrained = OptionValue[TimeConstrained]; + + If [OptionValue[FCVerbose]===False, + rgdVerbose=$VeryVerbose, + If[MatchQ[OptionValue[FCVerbose], _Integer], + rgdVerbose=OptionValue[FCVerbose] + ]; + ]; + + If[ !OptionValue[FCI], + topo = FCI[topoRaw], + topo= topoRaw + ]; + + FCPrint[1,"FCLoopGLILowerDimension: Entering.", FCDoControl->rgdVerbose]; + FCPrint[3,"FCLoopGLILowerDimension: Entering with: ", gli, FCDoControl->rgdVerbose]; + FCPrint[3,"FCLoopGLILowerDimension: Topology: ", topo, FCDoControl->rgdVerbose]; + + If[ !FCLoopValidTopologyQ[topo], + Message[FCLoopGLILowerDimension::failmsg, "The supplied topology is incorrect."]; + Abort[] + ]; + + nProps = Length[topo[[2]]]; + nLoops = Length[topo[[3]]]; + lMoms = topo[[3]]; + extMoms = Length[topo[[4]]]; + invProps = 1/FeynAmpDenominatorExplicit[topo[[2]],ExpandScalarProduct->True,FCI->True]; + + dim = FCGetDimensions[invProps]; + + If[ Length[dim]=!=1, + Message[FCLoopGLILowerDimension::failmsg, "The topology contains multiple dimensions."]; + ]; + (*TODO check symbolic and stufff...*) + + If[ !FreeQ2[topo,{CartesianMomentum,CartesianIndex}], + Message[FCLoopGLILowerDimension::failmsg, "Cartesian integrals are not supported."]; + Abort[] + ]; + + dim = First[dim]; + coeffs = Table[CC[i],{i,1,nProps}]; + + tmp = Table[ + dot[ + Map[(If[i===k,1,1/2]* Coefficient[#,Pair[Momentum[lMoms[[i]],dim],Momentum[lMoms[[k]],dim]]])&, invProps], + coeffs], {i,1,nLoops},{k,1,nLoops} + ]; + + FCPrint[3,"FCLoopGLILowerDimension: Preliminary result: ", tmp, FCDoControl->rgdVerbose]; + + tmp = Det[tmp /. dot->Dot]; + + FCPrint[3,"FCLoopGLILowerDimension: Preliminary result: ", tmp, FCDoControl->rgdVerbose]; + + tmp = gli (List@@(tmp+null1+null2)/. null1|null2 -> Unevaluated[Sequence[]]); + + tmp = Collect2[tmp,{gli,CC},Factoring->optFactoring, TimeConstrained->optTimeConstrained]; + + FCPrint[3,"FCLoopGLILowerDimension: Preliminary result: ", tmp, FCDoControl->rgdVerbose]; + + res = termSimp/@tmp; + + FCPrint[3,"FCLoopGLILowerDimension: Preliminary result: ", res, FCDoControl->rgdVerbose]; + + If[!FreeQ[res,termSimp], + Message[FCLoopGLILowerDimension::failmsg,"Something went wrong when simplyfing the prefactors"]; + Abort[] + ]; + + res = Total[res]; + + If[ optCollecting=!=False, + Which[ + optCollecting===True, + res = Collect2[res,GLI,Factoring->optFactoring, TimeConstrained->optTimeConstrained], + Head[optCollecting]===List, + res = Collect2[res,optCollecting,Factoring->optFactoring, TimeConstrained->optTimeConstrained], + True, + Message[FCLoopGLILowerDimension::failmsg, "Unsupported value of the Collecting option."]; + Abort[] + ] + ]; + + If[ OptionValue[FCE], + res = FCE[res] + ]; + + FCPrint[1,"FCLoopGLILowerDimension: Leaving.", FCDoControl->rgdVerbose]; + + res + ]; + +termSimp[a_Plus]:= + termSimp/@a; + +termSimp[rest_. CC[i_]^j_. GLI[id_, inds_List] ]:= + Pochhammer[inds[[i]],j] termSimp[rest GLI[id, ReplacePart[inds, i -> inds[[i]] + j]]]; + +termSimp[rest_. GLI[id_,{inds__}] ]:= + rest GLI[id,{inds}]/; FreeQ[rest,CC]; + + +End[] diff --git a/FeynCalc/LoopIntegrals/FCLoopGLIRaiseDimension.m b/FeynCalc/LoopIntegrals/FCLoopGLIRaiseDimension.m new file mode 100644 index 00000000..4924c6eb --- /dev/null +++ b/FeynCalc/LoopIntegrals/FCLoopGLIRaiseDimension.m @@ -0,0 +1,134 @@ +(* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) + +(* :Title: FCLoopGLIRaiseDimension *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Raising dimension shift *) + +(* ------------------------------------------------------------------------ *) + +FCLoopGLIRaiseDimension::usage = +"FCLoopGLIRaiseDimension[gli, topo] raises the dimension of the given GLI from +N to N+2 and expresses it in terms of N-dimensional loop integrals returned in +the output. + +The algorithm is based on the code of the function RaisingDRR from R. Lee's +LiteRed"; + +FCLoopGLIRaiseDimension::failmsg = +"Error! FCLoopGLIRaiseDimension has encountered a fatal problem and must abort the computation. The problem reads: `1`"; + + +Begin["`Package`"] +End[] + +Begin["`FCLoopGLIRaiseDimension`Private`"]; + +rgdVerbose::usage=""; +holdDerivative::usage=""; +CC::usage=""; +aux::usage=""; + +Options[FCLoopGLIRaiseDimension] = { + Collecting -> True, + FCE -> False, + FCI -> False, + FCVerbose -> False, + Factoring -> {Factor2,5000}, + TimeConstrained -> 3 +}; + +FCLoopGLIRaiseDimension[gli_GLI, topos_List, opts:OptionsPattern[]]:= + FCLoopGLIRaiseDimension[gli,FCLoopSelectTopology[gli,topos],opts]; + +FCLoopGLIRaiseDimension[gli_GLI, {topoRaw_FCTopology}, opts:OptionsPattern[]] := + FCLoopGLIRaiseDimension[gli, topoRaw, opts]; + +FCLoopGLIRaiseDimension[gli_GLI, topoRaw_FCTopology, OptionsPattern[]] := + Block[{ res, ex, topo, nProps, lMoms, nLoops, extMoms, + invProps, dim, coeffs, dot, null1, null2, tmp, + optCollecting, optFactoring, optTimeConstrained, + gramDet, nExtMoms, numRules}, + + optCollecting = OptionValue[Collecting]; + optFactoring = OptionValue[Factoring]; + optTimeConstrained = OptionValue[TimeConstrained]; + + If [OptionValue[FCVerbose]===False, + rgdVerbose=$VeryVerbose, + If[MatchQ[OptionValue[FCVerbose], _Integer], + rgdVerbose=OptionValue[FCVerbose] + ]; + ]; + + If[ !OptionValue[FCI], + topo = FCI[topoRaw], + topo= topoRaw + ]; + + FCPrint[1,"FCLoopGLIRaiseDimension: Entering.", FCDoControl->rgdVerbose]; + FCPrint[3,"FCLoopGLIRaiseDimension: Entering with: ", gli, FCDoControl->rgdVerbose]; + FCPrint[3,"FCLoopGLIRaiseDimension: Topology: ", topo, FCDoControl->rgdVerbose]; + + If[ !FCLoopValidTopologyQ[topo], + Message[FCLoopGLIRaiseDimension::failmsg, "The supplied topology is incorrect."]; + Abort[] + ]; + + nProps = Length[topo[[2]]]; + nLoops = Length[topo[[3]]]; + lMoms = topo[[3]]; + extMoms = topo[[4]]; + nExtMoms = Length[topo[[4]]]; + invProps = 1/FeynAmpDenominatorExplicit[topo[[2]],ExpandScalarProduct->True,FCI->True]; + + dim = FCGetDimensions[invProps]; + + If[ Length[dim]=!=1, + Message[FCLoopGLIRaiseDimension::failmsg, "The topology contains multiple dimensions."]; + ]; + dim = First[dim]; + + gramDet = FCGramDeterminant[extMoms, Prefactor -> 1]; + + tmp = 2^nLoops/gramDet/Pochhammer[((dim + 1) - nLoops) - nExtMoms, nLoops]; + + + gramDet = FCGramDeterminant[Join[lMoms,extMoms], Prefactor -> 1]; + + numRules = FCLoopCreateRulesToGLI[topo]//Flatten; + + gramDet = gramDet/.numRules; + + + res = tmp*Expand2[gli gramDet,GLI]/.GLI->GLIMultiply /. GLIMultiply->GLI; + + + If[ optCollecting=!=False, + Which[ + optCollecting===True, + res = Collect2[res,GLI,Factoring->optFactoring, TimeConstrained->optTimeConstrained], + Head[optCollecting]===List, + res = Collect2[res,optCollecting,Factoring->optFactoring, TimeConstrained->optTimeConstrained], + True, + Message[FCLoopGLIRaiseDimension::failmsg, "Unsupported value of the Collecting option."]; + Abort[] + ] + ]; + + If[ OptionValue[FCE], + res = FCE[res] + ]; + + FCPrint[1,"FCLoopGLIRaiseDimension: Leaving.", FCDoControl->rgdVerbose]; + + res + ]; + +End[] diff --git a/Tests/LoopIntegrals/FCLoopGLILowerDimension.test b/Tests/LoopIntegrals/FCLoopGLILowerDimension.test new file mode 100644 index 00000000..0be70a77 --- /dev/null +++ b/Tests/LoopIntegrals/FCLoopGLILowerDimension.test @@ -0,0 +1,39 @@ + + +(* :Title: fcstFCLoopGLILowerDimension.test *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Framework independent unit tests for + fcstFCLoopGLILowerDimension *) + +(* ------------------------------------------------------------------------ *) + +Tests`LoopIntegrals`fcstFCLoopGLILowerDimension = +({ +{"fcstFCLoopGLILowerDimension-ID1", +"FCLoopGLILowerDimension[GLI[topo1, {0, 1, 1, 1, 1, 1, 0, 0, 0}], +FCTopology[ +topo1, {FAD[p3], FAD[p1 - p3 - p4] , FAD[p4], FAD[p1 + q1], +FAD[{p1 - p4, 1}], FAD[p1], FAD[p1 + p3], FAD[q1 + p3], +FAD[q1 + p4]}, {p1, p3, p4}, {q1}, {Hold[SPD][q1] -> 1}, {}]]", +"GLI[topo1, {0, 2, 1, 1, 2, 2, 0, 0, 0}] + GLI[topo1, {0, 2, 1, 2, 2, 1, 0, 0, 0}] + GLI[topo1, {0, 2, 2, 1, 1, 2, 0, 0, 0}] + +GLI[topo1, {0, 2, 2, 1, 2, 1, 0, 0, 0}] + GLI[topo1, {0, 2, 2, 2, 1, 1, 0, 0, 0}]"}, +{"fcstFCLoopGLILowerDimension-ID2", +"FCLoopGLILowerDimension[GLI[topo1, {1, 1, 1, 1, 1}], +FCTopology[ +topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], +SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}]]", +"GLI[topo1, {1, 1, 1, 2, 2}] + GLI[topo1, {1, 1, 2, 1, 2}] + GLI[topo1, {1, 1, 2, 2, 1}] + +GLI[topo1, {1, 2, 1, 1, 2}] + GLI[topo1, {1, 2, 2, 1, 1}] + +GLI[topo1, {2, 1, 1, 2, 1}] + GLI[topo1, {2, 1, 2, 1, 1}] + GLI[topo1, {2, 2, 1, 1, 1}]"}, +{"fcstFCLoopGLILowerDimension-ID3", +"FCLoopGLILowerDimension[GLI[topo1, {1}], +FCTopology[tad1L, {SFAD[{p, m^2}]}, {p}, {}, {}, {}]]", +"GLI[topo1, {2}]"} +}); diff --git a/Tests/LoopIntegrals/FCLoopGLIRaiseDimension.test b/Tests/LoopIntegrals/FCLoopGLIRaiseDimension.test new file mode 100644 index 00000000..4f300fba --- /dev/null +++ b/Tests/LoopIntegrals/FCLoopGLIRaiseDimension.test @@ -0,0 +1,50 @@ + + +(* :Title: fcstFCLoopGLIRaiseDimension.test *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Framework independent unit tests for + fcstFCLoopGLIRaiseDimension *) + +(* ------------------------------------------------------------------------ *) + +Tests`LoopIntegrals`fcstFCLoopGLIRaiseDimension = +({ +{"fcstFCLoopGLIRaiseDimension-ID1", +"FCLoopGLIRaiseDimension[GLI[topo1, {1, 1, 1, 1, 1}], FCTopology[ +topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], + SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}], +FCE -> True]", +"GLI[topo1, {0, 0, 1, 1, 1}]/((1 - D)*(2 - D)) + GLI[topo1, {0, 1, 0, 1, 1}]/((1 - D)*(2 - D)) - GLI[topo1, {0, 1, 1, 1, 0}]/((1 - D)*(2 - D)) + +GLI[topo1, {1, 0, 0, 1, 1}]/((1 - D)*(2 - D)) - GLI[topo1, {1, 0, 1, 0, 1}]/((1 - D)*(2 - D)) - GLI[topo1, {1, 1, -1, 1, 1}]/((1 - D)*(2 - D)) + +GLI[topo1, {1, 1, 0, 0, 1}]/((1 - D)*(2 - D)) + GLI[topo1, {1, 1, 0, 1, 0}]/((1 - D)*(2 - D)) + GLI[topo1, {1, 1, 1, 0, 0}]/((1 - D)*(2 - D)) - +GLI[topo1, {-1, 0, 1, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) - GLI[topo1, {0, -1, 1, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {0, 0, 0, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {0, 0, 1, 0, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {0, 0, 1, 1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - GLI[topo1, {0, 1, 0, 0, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {0, 1, 1, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - GLI[topo1, {1, 0, 0, 1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {1, 0, 1, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {1, 1, 0, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +GLI[topo1, {1, 1, 1, -1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - GLI[topo1, {1, 1, 1, 0, -1}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +(GLI[topo1, {1, 1, 0, 1, 1}]*SPD[Q, Q])/((1 - D)*(2 - D))"}, +{"fcstFCLoopGLIRaiseDimension-ID2", +"FCLoopGLIRaiseDimension[GLI[topo1, {n1, n2, n3, 1, 1}], FCTopology[ +topo1, {SFAD[p1], SFAD[p2], SFAD[Q - p1 - p2], SFAD[Q - p2], +SFAD[Q - p1]}, {p1, p2}, {Q}, {Hold[SPD[Q]] -> qq}, {}], +FCE -> True]", +"GLI[topo1, {-1 + n1, -1 + n2, n3, 1, 1}]/((1 - D)*(2 - D)) + GLI[topo1, {-1 + n1, n2, -1 + n3, 1, 1}]/((1 - D)*(2 - D)) - +GLI[topo1, {-1 + n1, n2, n3, 1, 0}]/((1 - D)*(2 - D)) + GLI[topo1, {n1, -1 + n2, -1 + n3, 1, 1}]/((1 - D)*(2 - D)) - +GLI[topo1, {n1, -1 + n2, n3, 0, 1}]/((1 - D)*(2 - D)) - GLI[topo1, {n1, n2, -2 + n3, 1, 1}]/((1 - D)*(2 - D)) + +GLI[topo1, {n1, n2, -1 + n3, 0, 1}]/((1 - D)*(2 - D)) + GLI[topo1, {n1, n2, -1 + n3, 1, 0}]/((1 - D)*(2 - D)) + +GLI[topo1, {n1, n2, n3, 0, 0}]/((1 - D)*(2 - D)) - GLI[topo1, {-2 + n1, -1 + n2, n3, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +GLI[topo1, {-1 + n1, -2 + n2, n3, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {-1 + n1, -1 + n2, -1 + n3, 1, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {-1 + n1, -1 + n2, n3, 0, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {-1 + n1, -1 + n2, n3, 1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +GLI[topo1, {-1 + n1, n2, -1 + n3, 0, 1}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {-1 + n1, n2, n3, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +GLI[topo1, {n1, -1 + n2, -1 + n3, 1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) + GLI[topo1, {n1, -1 + n2, n3, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) + +GLI[topo1, {n1, n2, -1 + n3, 0, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - GLI[topo1, {n1, n2, n3, -1, 0}]/((1 - D)*(2 - D)*SPD[Q, Q]) - +GLI[topo1, {n1, n2, n3, 0, -1}]/((1 - D)*(2 - D)*SPD[Q, Q]) - (GLI[topo1, {n1, n2, -1 + n3, 1, 1}]*SPD[Q, Q])/((1 - D)*(2 - D))"} +}); From d2e1757ff2650ef3d0d7bf5cff8883afb3faf454 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 29 Mar 2024 13:53:22 +0100 Subject: [PATCH 30/67] Updated the greeting message. --- FeynCalc/FeynCalc.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/FeynCalc/FeynCalc.m b/FeynCalc/FeynCalc.m index b0217d56..8132b7c0 100644 --- a/FeynCalc/FeynCalc.m +++ b/FeynCalc/FeynCalc.m @@ -307,7 +307,11 @@ ButtonNote -> "https://github.com/FeynCalc/feyncalc/discussions/"],"Text"], Style[" and have a look at the supplied ","Text"], Style[DisplayForm@ButtonBox["examples.", BaseStyle -> "Hyperlink", ButtonFunction :> SystemOpen[FileNameJoin[{$FeynCalcDirectory, "Examples"}]], - Evaluator -> Automatic, Method -> "Preemptive"], "Text"]]; + Evaluator -> Automatic, Method -> "Preemptive"], "Text"], + Style["The PDF-version of the manual can be downloaded ", "Text"], + Style[DisplayForm@ButtonBox["here.", ButtonData :> {URL["https://github.com/FeynCalc/feyncalc-manual/releases/download/dev-manual/FeynCalcManual.pdf"], + None},BaseStyle -> "Hyperlink", ButtonNote -> "https://github.com/FeynCalc/feyncalc-manual/releases/download/dev-manual/FeynCalcManual.pdf"], "Text"] + ]; Print[Style["If you use FeynCalc in your research, please evaluate FeynCalcHowToCite[] to learn how to cite this software.","Text"]]; Print[Style["Please keep in mind that the proper academic attribution of our work is crucial to ensure the future development of this package!", {"Text", Italic}]]; From 030d4ecc9b102fdae31b46b2bcf19683bf8aebd3 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 29 Mar 2024 13:53:31 +0100 Subject: [PATCH 31/67] Small manual updates. --- .../Documentation/Markdown/Extra/Renormalization.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/FeynCalc/Documentation/Markdown/Extra/Renormalization.md b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md index b95fe664..538660a3 100644 --- a/FeynCalc/Documentation/Markdown/Extra/Renormalization.md +++ b/FeynCalc/Documentation/Markdown/Extra/Renormalization.md @@ -18,10 +18,10 @@ The renormalization constants $Z_x$ establish a connection between bare and reno appearing in the Lagrangian. For some generic masses, coupling constants and fields we can write \begin{align*} -g_{\textrm{bare}} &= \mu^{n \varepsilon} Z_g g_{\textrm{ren}} \\ -m_{\textrm{bare}} &= Z_m m_{\textrm{ren}} \\ -\psi_{\textrm{bare}} &= \sqrt{Z_m} \psi_{\textrm{ren}} \\ -A^\mu_{\textrm{bare}} &= \sqrt{Z_A} A^\mu_{\textrm{ren}} \\ +g_{\textrm{bare}} &= \mu^{n \varepsilon} Z_g g_{\textrm{ren}}, \\ +m_{\textrm{bare}} &= Z_m m_{\textrm{ren}}, \\ +\psi_{\textrm{bare}} &= \sqrt{Z_m} \psi_{\textrm{ren}}, \\ +A^\mu_{\textrm{bare}} &= \sqrt{Z_A} A^\mu_{\textrm{ren}}. \\ \end{align*} The renormalization scale $\mu$ is needed to account for the fact, that when going from $4$ to $D$ dimensions, dimensionless coupling constants suddenly become dimensionful. @@ -69,7 +69,7 @@ Each of the renormalization constants can be written as Z_x = 1 + \delta Z_x, \end{equation} -where $\delta Z_x$ contains poles in $\varepsilon$ and possibly also finite pieces (depending on the chosen renormalization scheme). Parametrically, $Z_x$ is of order of the small coupling constant so that we can "expand" in it as if $Z_x \ll 1$. +where $\delta Z_x$ contains poles in $\varepsilon$ and possibly also finite pieces (depending on the chosen renormalization scheme). Parametrically, $\delta Z_x$ is of order of the small coupling constant so that we can "expand" in it as if $\delta Z_x \ll 1$. ### Examples of renormalized and counter-term Lagrangians @@ -135,7 +135,7 @@ This way we only need to determine $Z_A$, $Z_\psi$ and $Z_m$, which can be done Having clarified the situation with the Lagrangian, let us discuss the derivation of the Feynman rules. The main difference as compared to the usual calculations is that here we also need to derive additional Feynman rules for the counter terms. -Although those can be always derived by hand, doing so automatically is more convenient and allows to avoid many stupid mistakes. To this aim it useful to employ [FeynRules](https://feynrules.irmp.ucl.ac.be/) for generating the corresponding FeynArts model. When writing down the Lagrangian of our model we need to multiply every term in the counter term Lagragnian by `FR$CT`, for example +Although those can be always derived by hand, doing so automatically is more convenient and allows to avoid many stupid mistakes. To this aim it is useful to employ [FeynRules](https://feynrules.irmp.ucl.ac.be/) for generating the corresponding FeynArts model. When writing down the Lagrangian of our model we need to multiply every term in the counter term Lagragnian by `FR$CT`, for example ```mathematica LPhi4 = LPhi4R + LPhi4CT; From 75d75fb635ced0767b6a6a97575b943708ee0ab7 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 29 Mar 2024 13:53:46 +0100 Subject: [PATCH 32/67] Added a Yukawa example. --- .../FeynRules/Yukawa/GenerateModelYukawa.m | 40 +++ FeynCalc/Examples/FeynRules/Yukawa/Yukawa.fr | 43 +++ .../OneLoop/Mathematica/Renormalization.m | 300 ++++++++++++++++++ 3 files changed, 383 insertions(+) create mode 100644 FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m create mode 100644 FeynCalc/Examples/FeynRules/Yukawa/Yukawa.fr create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Mathematica/Renormalization.m diff --git a/FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m b/FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m new file mode 100644 index 00000000..728d151e --- /dev/null +++ b/FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m @@ -0,0 +1,40 @@ +(* ::Package:: *) + +(* ::Section:: *) +(*Yukawa model for FeynArts*) + + +(* ::Subsection:: *) +(*Load FeynRules*) + + +FR$Parallel=False; +$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +<"LY",CouplingRename->False] + + + diff --git a/FeynCalc/Examples/FeynRules/Yukawa/Yukawa.fr b/FeynCalc/Examples/FeynRules/Yukawa/Yukawa.fr new file mode 100644 index 00000000..84fd88ba --- /dev/null +++ b/FeynCalc/Examples/FeynRules/Yukawa/Yukawa.fr @@ -0,0 +1,43 @@ +M$ModelName = "DM"; + +M$Information = { + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "25.03.2024" +}; + +M$Parameters = { + la == {ParameterType -> Internal}, + ga == {ParameterType -> Internal} +} + +M$ClassesDescription = { + +F[10] == { + ClassName -> x, + ClassMembers -> {X}, + SelfConjugate -> False, + Mass -> Mx, + PropagatorLabel -> {"X"}, + PropagatorType -> Straight, + PropagatorArrow -> Forward +}, + +S[1] == { + ClassName -> phi, + ParticleName -> "\[Phi]", + PropagatorLabel -> "\[Phi]", + SelfConjugate -> True, + Mass -> Mphi + } +}; + + +LY = LYR + LYCT; + +LYR =( I xbar.Ga[imu].del[x, imu] - Mx xbar.x + 1/2 del[phi, mu] del[phi, mu] -1/2 phi^2 Mphi^2 + - 1/(4!)*la*phi^4 - g xbar.x phi); + +LYCT = FR$CT*( (Zx - 1) * I xbar.Ga[imu].del[x, imu] - (Zmx Zx - 1) Mx xbar.x + + 1/2 (Zphi - 1) del[phi, mu] del[phi, mu] -1/2 (Zphi Zmphi -1) phi^2 Mphi^2 - (Zla Zphi^2 - 1) 1/(4!)*la*phi^4 - + (Zg Zx Sqrt[Zphi] - 1) g xbar.x phi); diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Mathematica/Renormalization.m b/FeynCalc/Examples/Yukawa/OneLoop/Mathematica/Renormalization.m new file mode 100644 index 00000000..b7d3252f --- /dev/null +++ b/FeynCalc/Examples/Yukawa/OneLoop/Mathematica/Renormalization.m @@ -0,0 +1,300 @@ +(* ::Package:: *) + +(* :Title: Renormalization *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Renormalization, Yukawa, MS and MSbar, 1-loop *) + +(* ------------------------------------------------------------------------ *) + + + +(* ::Title:: *) +(*1-loop Yukawa renormalization in the minimal subtraction schemes*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +(* ::Text:: *) +(*This example uses a custom QED model created with FeynRules. Please evaluate the file*) +(*FeynCalc/Examples/FeynRules/QED/GenerateModelYukawa.m before running it for the first time.*) + + +description="Renormalization, Yukawa, MS and MSbar, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +$LoadAddOns={"FeynArts"}; +<True]; + + +(* ::Section:: *) +(*Generate Feynman diagrams*) + + +params={InsertionLevel->{Particles},Model -> FileNameJoin[{"LY","LY"}], +GenericModel -> FileNameJoin[{"LY","LY"}],ExcludeParticles->{}}; +top[i_,j_]:=CreateTopologies[1, i -> j, +ExcludeTopologies -> {Tadpoles,WFCorrections,WFCorrectionCTs}]; +topCT[i_,j_]:=CreateCTTopologies[1, i ->j, +ExcludeTopologies ->{Tadpoles,WFCorrections,WFCorrectionCTs}]; + +{diagFermionSE,diagFermionSECT} = InsertFields[#, {F[10]} -> {F[10]}, +Sequence@@params]&/@{top[1,1],topCT[1,1]}; +{diagScalarSE,diagScalarSECT} = InsertFields[#, {S[1]} -> {S[1]}, +Sequence@@params]&/@{top[1,1],topCT[1,1]}; +{diagVertexFFS,diagVertexFFSCT} = InsertFields[#, {F[10],S[1]}->{F[10]}, +Sequence@@params]&/@{top[2,1],topCT[2,1]}; +{diagVertexSSSS,diagVertexSSSSCT} = InsertFields[#, {S[1],S[1]}->{S[1],S[1]}, +Sequence@@params]&/@{top[2,2],topCT[2,2]}; + + +diag1[0]=diagFermionSE[[0]][diagFermionSE[[1]],diagFermionSECT[[1]]]; +diag2[0]=diagScalarSE[[0]][diagScalarSE[[1]],diagScalarSECT[[1]]]; +diag3[0]=diagVertexFFS[[0]][diagVertexFFS[[1]],diagVertexFFSCT[[1]]]; +diag4[0]=diagVertexSSSS[[0]][diagVertexSSSS[[1]],diagVertexSSSSCT[[1]]]; + + +Paint[diag1[0], ColumnsXRows -> {2, 1},SheetHeader->None, +Numbering -> Simple, ImageSize->256{2,1}]; + + +Paint[diag2[0], ColumnsXRows -> {2, 1},SheetHeader->None, +Numbering -> Simple, ImageSize->256{2,1}]; + + +Paint[diag3[0], ColumnsXRows -> {2, 1},SheetHeader->None, +Numbering -> Simple, ImageSize->256{2,1}]; + + +Paint[diag4[0], ColumnsXRows -> {3, 1},SheetHeader->None, +Numbering -> Simple, ImageSize->256{3,1}]; + + +(* ::Section:: *) +(*Obtain the amplitudes*) + + +(* ::Text:: *) +(*The 1/(2Pi)^D prefactor is implicit.*) + + +(* ::Text:: *) +(*Fermion self-energy including the counter-term*) + + +amp1[0] = FCFAConvert[CreateFeynAmp[diag1[0],Truncated->True, + GaugeRules->{},PreFactor->1], + IncomingMomenta->{p}, OutgoingMomenta->{p}, + LoopMomenta->{l}, UndoChiralSplittings->True, + ChangeDimension->D, List->False, SMP->True, + FinalSubstitutions->{},Contract->True] + + +(* ::Text:: *) +(*Scalar self-energy including the counter-term*) + + +amp2[0] = FCFAConvert[CreateFeynAmp[diag2[0],Truncated->True, + GaugeRules->{}, PreFactor->1], + IncomingMomenta->{p}, OutgoingMomenta->{p}, + LoopMomenta->{l}, UndoChiralSplittings->True, + ChangeDimension->D, List->False, SMP->True, Contract->True] + + +(* ::Text:: *) +(*Fermion-scalar vertex including the counter-term*) + + +amp3[0] = FCFAConvert[CreateFeynAmp[diag3[0],Truncated->True, + GaugeRules->{}, PreFactor->1], + IncomingMomenta->{p1,k}, OutgoingMomenta->{p2}, + LoopMomenta->{l}, UndoChiralSplittings->True, ChangeDimension->D, + List->False, SMP->True, Contract->True] + + +(* ::Text:: *) +(*Scalar self-interaction vertex including the counter-term*) + + +amp4[0] = FCFAConvert[CreateFeynAmp[diag4[0],Truncated->True, + GaugeRules->{}, PreFactor->1], + IncomingMomenta->{p1,p2}, OutgoingMomenta->{p3,p4}, + LoopMomenta->{l}, UndoChiralSplittings->True, ChangeDimension->D, + List->False, SMP->True, Contract->True] + + +(* ::Section:: *) +(*Calculate the amplitudes*) + + +(* ::Subsection:: *) +(*Fermion self-energy*) + + +amp1[1] = amp1[0]//ReplaceAll[#,{Zx->1+alpha dZx, +Zmx->1+alpha dZmx}]&//Series[#,{alpha,0,1}]&// +Normal//ReplaceAll[#,alpha->1]& + + +(* ::Text:: *) +(*Tensor reduction allows us to express the electron self-energy in tems of the Passarino-Veltman coefficient functions.*) + + +amp1[2]=TID[amp1[1],l,ToPaVe->True] + + +(* ::Text:: *) +(*Discard all the finite pieces of the 1-loop amplitude*) + + +amp1Div[0]=PaVeUVPart[amp1[2],Prefactor->1/(2Pi)^D]// +FCReplaceD[#,D->4-2Epsilon]&//Series[#,{Epsilon,0,0}]&//Normal// +FCHideEpsilon//SelectNotFree2[#,{SMP["Delta"],dZx, +dZmx}]&//Simplify//Collect2[#,DiracGamma]& + + +(* ::Text:: *) +(*Equating the result to zero and solving for dZx and dZmx we obtain the renormalization constants in *) +(*the minimal subtraction schemes.*) + + +solMSbar1=FCMatchSolve[amp1Div[0],{g,la,Mx,DiracGamma,SMP}]; +solMS1=solMSbar1/.SMP["Delta"]->1/Epsilon + + +(* ::Subsection:: *) +(*Scalar self-energy*) + + +amp2[0] + + +amp2[1] = amp2[0]//ReplaceRepeated[#,{Zphi->1+alpha dZphi, +Zmphi->1+alpha dZmphi}]&//Series[#,{alpha,0,1}]&// +Normal//ReplaceAll[#,alpha->1]& + + +(* ::Text:: *) +(*Tensor reduction allows us to express the scalar self-energy in tems of the Passarino-Veltman coefficient functions.*) + + +amp2[2]=TID[amp2[1],l,ToPaVe->True] + + +(* ::Text:: *) +(*Discard all the finite pieces of the 1-loop amplitude*) + + +amp2Div[0]=PaVeUVPart[amp2[2],Prefactor->1/(2Pi)^D]// +FCReplaceD[#,D->4-2Epsilon]&//Series[#,{Epsilon,0,0}]&//Normal// +FCHideEpsilon//SelectNotFree2[#,{SMP["Delta"],dZphi,dZmphi}]&//Simplify// +Collect2[#,p,Mphi]& + + +(* ::Text:: *) +(*Equating this to zero and solving for dZphi and dZmphi obtain the renormalization constants in the minimal subtraction schemes.*) + + +solMSbar2=FCMatchSolve[amp2Div[0],{g,la,Mphi,p,SMP,GaugeXi}] +solMS2=solMSbar2/.SMP["Delta"]->1/Epsilon; + + +(* ::Subsection:: *) +(*Fermion-scalar vertex*) + + +amp3[1] = amp3[0]//ReplaceRepeated[#,{Zphi->1+alpha dZphi, +Zx->1+alpha dZx,Zg->1+alpha dZg}]&// +Series[#,{alpha,0,1}]&//Normal//ReplaceAll[#,alpha->1]& + + +(* ::Text:: *) +(*The result of the tensor reduction is quite large, since we keep the full gauge dependence and do not specify the kinematics*) + + +amp3[2]=TID[amp3[1],l,ToPaVe->True,UsePaVeBasis->True] + + +(* ::Text:: *) +(*Discard all the finite pieces of the 1-loop amplitude*) + + +amp3Div[0]=PaVeUVPart[amp3[2],Prefactor->1/(2Pi)^D]//DiracSimplify// +FCReplaceD[#,D->4-2Epsilon]&//Series[#,{Epsilon,0,0}]&//Normal// +FCHideEpsilon//SelectNotFree2[#,{SMP["Delta"],dZphi, +dZx,dZg}]&//ReplaceAll[#,Join[solMSbar1,solMSbar2]]&//Simplify//FCFactorOut[#,g]& + + +(* ::Text:: *) +(*Equating this to zero and solving for dZg we obtain the renormalization constant in the minimal subtraction schemes.*) + + +solMSbar3=FCMatchSolve[amp3Div[0],{g,SMP}] +solMS3=solMSbar3/.SMP["Delta"]->1/Epsilon; + + +(* ::Subsection:: *) +(*Scalar self-interaction vertex*) + + +amp4[1] = amp4[0]//ReplaceRepeated[#,{Zphi->1+alpha dZphi, +Zla->1+alpha dZla}]&// +Series[#,{alpha,0,1}]&//Normal//ReplaceAll[#,alpha->1]& + + +(* ::Text:: *) +(*The result of the tensor reduction is quite large, since we keep the full gauge dependence and do not specify the kinematics*) + + +amp4[2]=TID[amp4[1],l,ToPaVe->True,UsePaVeBasis->True] + + +(* ::Text:: *) +(*Discard all the finite pieces of the 1-loop amplitude*) + + +amp4Div[0]=PaVeUVPart[amp4[2],Prefactor->1/(2Pi)^D]//DiracSimplify// +FCReplaceD[#,D->4-2Epsilon]&//Series[#,{Epsilon,0,0}]&//Normal// +FCHideEpsilon//SelectNotFree2[#,{SMP["Delta"],dZphi, +dZla}]&//ReplaceAll[#,Join[solMSbar1,solMSbar2]]&//Simplify + + +(* ::Text:: *) +(*Equating this to zero and solving for dZg we obtain the renormalization constant in the minimal subtraction schemes.*) + + +solMSbar4=FCMatchSolve[amp4Div[0],{g,SMP,la}] +solMS4=solMSbar4/.SMP["Delta"]->1/Epsilon; + + +Join[solMSbar1,solMSbar2,solMSbar3,solMSbar4]//TableForm From 65615f64ea80caa27d155c026a2d94ed182d1333 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 29 Mar 2024 13:54:10 +0100 Subject: [PATCH 33/67] Added few results for master integrals. --- .../MasterIntegrals/Mincer/prop1L00.m | 6 ++ .../Mincer/prop3L3topo000000000X101111010.m | 40 ++++++++++ .../Mincer/prop3L3topo000000000X111111110.m | 17 ++++ .../Mincer/prop3L3topo010000000X001111000.m | 48 +++++++++++ .../Examples/MasterIntegrals/Tadpoles/tad1L.m | 3 + .../propXLMassive/prop1Lm11asy.m | 46 +++++++++++ .../propXLMassive/prop1Lx01x0mAsy.m | 38 +++++++++ FeynCalc/Examples/Misc/MiCalculations.m | 80 +++++++++++++++++++ 8 files changed, 278 insertions(+) create mode 100644 FeynCalc/Examples/MasterIntegrals/Mincer/prop1L00.m create mode 100644 FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X101111010.m create mode 100644 FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X111111110.m create mode 100644 FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo010000000X001111000.m create mode 100644 FeynCalc/Examples/MasterIntegrals/Tadpoles/tad1L.m create mode 100644 FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lm11asy.m create mode 100644 FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lx01x0mAsy.m create mode 100644 FeynCalc/Examples/Misc/MiCalculations.m diff --git a/FeynCalc/Examples/MasterIntegrals/Mincer/prop1L00.m b/FeynCalc/Examples/MasterIntegrals/Mincer/prop1L00.m new file mode 100644 index 00000000..32449232 --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/Mincer/prop1L00.m @@ -0,0 +1,6 @@ +{GLI[prop1L00, {1, 1}] -> (E^(ep*EulerGamma)*Gamma[1 - ep]^2*Gamma[ep])/ + (((-I)*eta - qq)^ep*Gamma[2 - 2*ep]), + {FCTopology[prop1L00, {FeynAmpDenominator[StandardPropagatorDenominator[ + Momentum[l, D], 0, 0, {1, 1}]], FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[l - q, D], 0, 0, {1, 1}]]}, {l}, + {q}, {Pair[Momentum[q, D], Momentum[q, D]] -> qq}, {}]}} diff --git a/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X101111010.m b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X101111010.m new file mode 100644 index 00000000..201d802d --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X101111010.m @@ -0,0 +1,40 @@ +{GLI[prop3L3topo000000000, {1, 0, 1, 1, 1, 1, 0, 1, 0}] -> + 103/3 + 1/(3*ep^3) + 7/(3*ep^2) + 31/(3*ep) + (235*ep)/3 + (19*ep^2)/3 + + (31*I)*Pi + (I*Pi)/ep^2 + ((7*I)*Pi)/ep + (103*I)*ep*Pi + + (235*I)*ep^2*Pi - (133*Pi^2)/12 - (19*Pi^2)/(12*ep) - (589*ep*Pi^2)/12 - + (1957*ep^2*Pi^2)/12 - ((7*I)/4)*Pi^3 - ((49*I)/4)*ep*Pi^3 - + ((217*I)/4)*ep^2*Pi^3 + (149*ep*Pi^4)/96 + (1043*ep^2*Pi^4)/96 + + ((193*I)/160)*ep^2*Pi^5 + (1 + I)*ep^3*epFlag[1889] - 31*Log[s] - + Log[s]/ep^2 - (7*Log[s])/ep - 103*ep*Log[s] - 235*ep^2*Log[s] - + (21*I)*Pi*Log[s] - ((3*I)*Pi*Log[s])/ep - (93*I)*ep*Pi*Log[s] - + (309*I)*ep^2*Pi*Log[s] + (19*Pi^2*Log[s])/4 + (133*ep*Pi^2*Log[s])/4 + + (589*ep^2*Pi^2*Log[s])/4 + ((21*I)/4)*ep*Pi^3*Log[s] + + ((147*I)/4)*ep^2*Pi^3*Log[s] - (149*ep^2*Pi^4*Log[s])/32 + + (21*Log[s]^2)/2 + (3*Log[s]^2)/(2*ep) + (93*ep*Log[s]^2)/2 + + (309*ep^2*Log[s]^2)/2 + ((9*I)/2)*Pi*Log[s]^2 + + ((63*I)/2)*ep*Pi*Log[s]^2 + ((279*I)/2)*ep^2*Pi*Log[s]^2 - + (57*ep*Pi^2*Log[s]^2)/8 - (399*ep^2*Pi^2*Log[s]^2)/8 - + ((63*I)/8)*ep^2*Pi^3*Log[s]^2 - (3*Log[s]^3)/2 - (21*ep*Log[s]^3)/2 - + (93*ep^2*Log[s]^3)/2 - ((9*I)/2)*ep*Pi*Log[s]^3 - + ((63*I)/2)*ep^2*Pi*Log[s]^3 + (57*ep^2*Pi^2*Log[s]^3)/8 + + (9*ep*Log[s]^4)/8 + (63*ep^2*Log[s]^4)/8 + ((27*I)/8)*ep^2*Pi*Log[s]^4 - + (27*ep^2*Log[s]^5)/40 + (7*Zeta[3])/3 + (49*ep*Zeta[3])/3 + + (289*ep^2*Zeta[3])/3 + (7*I)*ep*Pi*Zeta[3] + (49*I)*ep^2*Pi*Zeta[3] - + (133*ep^2*Pi^2*Zeta[3])/12 - 7*ep*Log[s]*Zeta[3] - + 49*ep^2*Log[s]*Zeta[3] - (21*I)*ep^2*Pi*Log[s]*Zeta[3] + + (21*ep^2*Log[s]^2*Zeta[3])/2 + (599*ep^2*Zeta[5])/5, + FCTopology[prop3L3topo000000000, + {FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l3, D], 0, 0, {1, 1}]], FeynAmpDenominator[ + StandardPropagatorDenominator[-Momentum[l2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l3, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l2 - l3, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l2 + l3 + q, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l2 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[0, + Pair[Momentum[l3, D], Momentum[q, D]], 0, {1, 1}]]}, {l1, l2, l3}, {q}, + {Pair[Momentum[q, D], Momentum[q, D]] -> s}, {}]} diff --git a/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X111111110.m b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X111111110.m new file mode 100644 index 00000000..ac62d75e --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo000000000X111111110.m @@ -0,0 +1,17 @@ +{GLI[prop3L3topo000000000, {1, 1, 1, 1, 1, 1, 1, 1, 0}] -> + (1 + I)*ep*epFlag[7703] + (20*Zeta[5])/s^2, + FCTopology[prop3L3topo000000000, + {FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l3, D], 0, 0, {1, 1}]], FeynAmpDenominator[ + StandardPropagatorDenominator[-Momentum[l2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l3, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l2 - l3, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l2 + l3 + q, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l2 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[0, + Pair[Momentum[l3, D], Momentum[q, D]], 0, {1, 1}]]}, {l1, l2, l3}, {q}, + {Pair[Momentum[q, D], Momentum[q, D]] -> s}, {}]} diff --git a/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo010000000X001111000.m b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo010000000X001111000.m new file mode 100644 index 00000000..59025b18 --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/Mincer/prop3L3topo010000000X001111000.m @@ -0,0 +1,48 @@ +{GLI[prop3L3topo010000000, {0, 0, 1, 1, 1, 1, 0, 0, 0}] -> + (71*s^2)/216 + s^2/(36*ep) + (3115*ep*s^2)/1296 + (109403*ep^2*s^2)/7776 + + (3386467*ep^3*s^2)/46656 + (96885467*ep^4*s^2)/279936 + (I/12)*Pi*s^2 + + ((71*I)/72)*ep*Pi*s^2 + ((3115*I)/432)*ep^2*Pi*s^2 + + ((109403*I)/2592)*ep^3*Pi*s^2 + ((3386467*I)/15552)*ep^4*Pi*s^2 - + (19*ep*Pi^2*s^2)/144 - (1349*ep^2*Pi^2*s^2)/864 - + (59185*ep^3*Pi^2*s^2)/5184 - (2078657*ep^4*Pi^2*s^2)/31104 - + ((7*I)/48)*ep^2*Pi^3*s^2 - ((497*I)/288)*ep^3*Pi^3*s^2 - + ((21805*I)/1728)*ep^4*Pi^3*s^2 + (649*ep^3*Pi^4*s^2)/5760 + + (46079*ep^4*Pi^4*s^2)/34560 + ((97*I)/1920)*ep^4*Pi^5*s^2 + + (1 + I)*ep^5*epFlag[9733] - (s^2*Log[s])/12 - (71*ep*s^2*Log[s])/72 - + (3115*ep^2*s^2*Log[s])/432 - (109403*ep^3*s^2*Log[s])/2592 - + (3386467*ep^4*s^2*Log[s])/15552 - (I/4)*ep*Pi*s^2*Log[s] - + ((71*I)/24)*ep^2*Pi*s^2*Log[s] - ((3115*I)/144)*ep^3*Pi*s^2*Log[s] - + ((109403*I)/864)*ep^4*Pi*s^2*Log[s] + (19*ep^2*Pi^2*s^2*Log[s])/48 + + (1349*ep^3*Pi^2*s^2*Log[s])/288 + (59185*ep^4*Pi^2*s^2*Log[s])/1728 + + ((7*I)/16)*ep^3*Pi^3*s^2*Log[s] + ((497*I)/96)*ep^4*Pi^3*s^2*Log[s] - + (649*ep^4*Pi^4*s^2*Log[s])/1920 + (ep*s^2*Log[s]^2)/8 + + (71*ep^2*s^2*Log[s]^2)/48 + (3115*ep^3*s^2*Log[s]^2)/288 + + (109403*ep^4*s^2*Log[s]^2)/1728 + ((3*I)/8)*ep^2*Pi*s^2*Log[s]^2 + + ((71*I)/16)*ep^3*Pi*s^2*Log[s]^2 + ((3115*I)/96)*ep^4*Pi*s^2*Log[s]^2 - + (19*ep^3*Pi^2*s^2*Log[s]^2)/32 - (1349*ep^4*Pi^2*s^2*Log[s]^2)/192 - + ((21*I)/32)*ep^4*Pi^3*s^2*Log[s]^2 - (ep^2*s^2*Log[s]^3)/8 - + (71*ep^3*s^2*Log[s]^3)/48 - (3115*ep^4*s^2*Log[s]^3)/288 - + ((3*I)/8)*ep^3*Pi*s^2*Log[s]^3 - ((71*I)/16)*ep^4*Pi*s^2*Log[s]^3 + + (19*ep^4*Pi^2*s^2*Log[s]^3)/32 + (3*ep^3*s^2*Log[s]^4)/32 + + (71*ep^4*s^2*Log[s]^4)/64 + ((9*I)/32)*ep^4*Pi*s^2*Log[s]^4 - + (9*ep^4*s^2*Log[s]^5)/160 - (29*ep^2*s^2*Zeta[3])/36 - + (2059*ep^3*s^2*Zeta[3])/216 - (90335*ep^4*s^2*Zeta[3])/1296 - + ((29*I)/12)*ep^3*Pi*s^2*Zeta[3] - ((2059*I)/72)*ep^4*Pi*s^2*Zeta[3] + + (551*ep^4*Pi^2*s^2*Zeta[3])/144 + (29*ep^3*s^2*Log[s]*Zeta[3])/12 + + (2059*ep^4*s^2*Log[s]*Zeta[3])/72 + ((29*I)/4)*ep^4*Pi*s^2*Log[s]* + Zeta[3] - (29*ep^4*s^2*Log[s]^2*Zeta[3])/8 - (421*ep^4*s^2*Zeta[5])/60, + FCTopology[prop3L3topo010000000, + {FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l3, D], 0, -s, {1, 1}]], FeynAmpDenominator[ + StandardPropagatorDenominator[-Momentum[l2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l3, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l1 - l2 - l3, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l1 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + -Momentum[l2 + l3 + q, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[-Momentum[l2 + q, D], 0, + 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[0, + Pair[Momentum[l3, D], Momentum[q, D]], 0, {1, 1}]]}, {l1, l2, l3}, {q}, + {Pair[Momentum[q, D], Momentum[q, D]] -> s}, {}]} diff --git a/FeynCalc/Examples/MasterIntegrals/Tadpoles/tad1L.m b/FeynCalc/Examples/MasterIntegrals/Tadpoles/tad1L.m new file mode 100644 index 00000000..cd2b74e2 --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/Tadpoles/tad1L.m @@ -0,0 +1,3 @@ +{GLI[tad1L, {1}] -> -(E^(ep*EulerGamma)*(m1^2)^(1 - ep)*Gamma[-1 + ep]), + {FCTopology[tad1L, {FeynAmpDenominator[StandardPropagatorDenominator[ + Momentum[l, D], 0, -m1^2, {1, 1}]]}, {l}, {}, {}, {}]}} diff --git a/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lm11asy.m b/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lm11asy.m new file mode 100644 index 00000000..5da03711 --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lm11asy.m @@ -0,0 +1,46 @@ +{GLI[prop1Lm11asy, {1, 1}] -> 2 + ep^(-1) + (2*m1^2*(1 - I*Pi))/m2^2 + I*Pi - + (I*m1^4*(-I + 2*Pi))/m2^4 + (2*ep*m1^2*(3 + 2*Pi^2))/(3*m2^2) - + (ep*(-48 - (24*I)*Pi + 7*Pi^2))/12 + (ep*m1^4*(21 - (24*I)*Pi + 8*Pi^2))/ + (6*m2^4) - (4*m1^4*Log[m1])/m2^4 - (6*ep*m1^4*Log[m1])/m2^4 - + (4*m1^2*Log[m1])/m2^2 - (4*ep*m1^2*Log[m1])/m2^2 - + (ep^2*m1^2*(12 + Pi^2)*Log[m1])/(3*m2^2) - (ep^2*m1^4*(21 + Pi^2)*Log[m1])/ + (3*m2^4) + (4*ep*m1^4*Log[m1]^2)/m2^4 + (6*ep^2*m1^4*Log[m1]^2)/m2^4 + + (4*ep*m1^2*Log[m1]^2)/m2^2 + (4*ep^2*m1^2*Log[m1]^2)/m2^2 + + (ep^3*m1^2*(12 + Pi^2)*Log[m1]^2)/(3*m2^2) + + (ep^3*m1^4*(21 + Pi^2)*Log[m1]^2)/(3*m2^4) - (8*ep^2*m1^4*Log[m1]^3)/ + (3*m2^4) - (4*ep^3*m1^4*Log[m1]^3)/m2^4 - (8*ep^2*m1^2*Log[m1]^3)/ + (3*m2^2) - (8*ep^3*m1^2*Log[m1]^3)/(3*m2^2) + + (4*ep^3*m1^4*Log[m1]^4)/(3*m2^4) + (4*ep^3*m1^2*Log[m1]^4)/(3*m2^2) - + 2*Log[m2] + (4*m1^4*Log[m2])/m2^4 + (4*m1^2*Log[m2])/m2^2 + + (4*ep*m1^4*(2 + I*Pi)*Log[m2])/m2^4 + ((4*I)*ep*m1^2*Pi*Log[m2])/m2^2 - + (7*ep^2*m1^2*Pi^2*Log[m2])/(3*m2^2) - (2*I)*ep*(-2*I + Pi)*Log[m2] - + (ep^2*m1^4*Pi*(-24*I + 7*Pi)*Log[m2])/(3*m2^4) + + (ep^2*(-48 - (24*I)*Pi + 7*Pi^2)*Log[m2])/6 + 2*ep*Log[m2]^2 - + (4*ep*m1^4*Log[m2]^2)/m2^4 - (4*ep*m1^2*Log[m2]^2)/m2^2 + + 2*ep^2*(2 + I*Pi)*Log[m2]^2 - ((4*I)*ep^2*m1^2*Pi*Log[m2]^2)/m2^2 + + (7*ep^3*m1^2*Pi^2*Log[m2]^2)/(3*m2^2) - + ((4*I)*ep^2*m1^4*(-2*I + Pi)*Log[m2]^2)/m2^4 + + (ep^3*m1^4*Pi*(-24*I + 7*Pi)*Log[m2]^2)/(3*m2^4) - + (ep^3*(-48 - (24*I)*Pi + 7*Pi^2)*Log[m2]^2)/6 - (4*ep^2*Log[m2]^3)/3 + + (8*ep^2*m1^4*Log[m2]^3)/(3*m2^4) + (8*ep^2*m1^2*Log[m2]^3)/(3*m2^2) + + (8*ep^3*m1^4*(2 + I*Pi)*Log[m2]^3)/(3*m2^4) + + (((8*I)/3)*ep^3*m1^2*Pi*Log[m2]^3)/m2^2 - ((4*I)/3)*ep^3*(-2*I + Pi)* + Log[m2]^3 + (2*ep^3*Log[m2]^4)/3 - (4*ep^3*m1^4*Log[m2]^4)/(3*m2^4) - + (4*ep^3*m1^2*Log[m2]^4)/(3*m2^2) + + (ep^2*(96 + (48*I)*Pi - 14*Pi^2 - (3*I)*Pi^3 - 28*Zeta[3]))/12 - + (ep^3*m1^4*Log[m1]*(45 + 3*Pi^2 - 8*Zeta[3]))/(6*m2^4) - + (ep^3*m1^2*Log[m1]*(12 + Pi^2 - 4*Zeta[3]))/(3*m2^2) - + ((I/3)*ep^3*m1^2*Log[m2]*(3*Pi^3 - (28*I)*Zeta[3]))/m2^2 - + ((I/3)*ep^3*m1^4*Log[m2]*((-14*I)*Pi^2 + 3*Pi^3 - (28*I)*Zeta[3]))/m2^4 + + (ep^2*m1^2*(12 + Pi^2 + (3*I)*Pi^3 + 24*Zeta[3]))/(6*m2^2) + + (ep^3*Log[m2]*(-96 - (48*I)*Pi + 14*Pi^2 + (3*I)*Pi^3 + 28*Zeta[3]))/6 + + (ep^2*m1^4*(45 + 31*Pi^2 + (6*I)*Pi^3 + 48*Zeta[3]))/(12*m2^4) - + (ep^3*m1^2*(-180 - 15*Pi^2 + 8*Pi^4 + 60*Zeta[3] - (420*I)*Pi*Zeta[3]))/ + (90*m2^2) - (ep^3*m1^4*(-1395 - 105*Pi^2 - (360*I)*Pi^3 + 32*Pi^4 - + 3000*Zeta[3] - (1680*I)*Pi*Zeta[3]))/(360*m2^4) + + (ep^3*(23040 + (11520*I)*Pi - 3360*Pi^2 - (720*I)*Pi^3 + 73*Pi^4 - + 6720*Zeta[3] - (3360*I)*Pi*Zeta[3]))/1440, + FCTopology[prop1Lm11asy, {FeynAmpDenominator[StandardPropagatorDenominator[ + Momentum[l, D], 0, -m1^2, {1, 1}]], FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[l + q, D], 0, -m1^2, {1, 1}]]}, + {l}, {q}, {Pair[Momentum[q, D], Momentum[q, D]] -> m2^2}, {}]} diff --git a/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lx01x0mAsy.m b/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lx01x0mAsy.m new file mode 100644 index 00000000..3b81d5e0 --- /dev/null +++ b/FeynCalc/Examples/MasterIntegrals/propXLMassive/prop1Lx01x0mAsy.m @@ -0,0 +1,38 @@ +{GLI[prop1Lx01x0mAsy, {1, 1}] -> 2 + ep^(-1) - m1^4/(2*m2^4) + + (m1^2*(1 - I*Pi))/m2^2 + (ep*m1^4*(3 - (4*I)*Pi))/(4*m2^4) + I*Pi + + (ep*m1^2*(3 + 2*Pi^2))/(3*m2^2) + (ep^2*m1^4*(7 + 5*Pi^2))/(8*m2^4) - + (ep*(-48 - (24*I)*Pi + 7*Pi^2))/12 - (ep*m1^4*Log[m1])/m2^4 - + (3*ep^2*m1^4*Log[m1])/(2*m2^4) - (2*m1^2*Log[m1])/m2^2 - + (2*ep*m1^2*Log[m1])/m2^2 - (ep^2*m1^2*(12 + Pi^2)*Log[m1])/(6*m2^2) - + (ep^3*m1^4*(21 + Pi^2)*Log[m1])/(12*m2^4) + (ep^2*m1^4*Log[m1]^2)/m2^4 + + (3*ep^3*m1^4*Log[m1]^2)/(2*m2^4) + (2*ep*m1^2*Log[m1]^2)/m2^2 + + (2*ep^2*m1^2*Log[m1]^2)/m2^2 + (ep^3*m1^2*(12 + Pi^2)*Log[m1]^2)/ + (6*m2^2) - (2*ep^3*m1^4*Log[m1]^3)/(3*m2^4) - + (4*ep^2*m1^2*Log[m1]^3)/(3*m2^2) - (4*ep^3*m1^2*Log[m1]^3)/(3*m2^2) + + (2*ep^3*m1^2*Log[m1]^4)/(3*m2^2) - 2*Log[m2] + (2*ep*m1^4*Log[m2])/m2^4 + + (2*m1^2*Log[m2])/m2^2 + ((2*I)*ep^2*m1^4*Pi*Log[m2])/m2^4 + + ((2*I)*ep*m1^2*Pi*Log[m2])/m2^2 - (7*ep^3*m1^4*Pi^2*Log[m2])/(6*m2^4) - + (7*ep^2*m1^2*Pi^2*Log[m2])/(6*m2^2) - (2*I)*ep*(-2*I + Pi)*Log[m2] + + (ep^2*(-48 - (24*I)*Pi + 7*Pi^2)*Log[m2])/6 + 2*ep*Log[m2]^2 - + (2*ep^2*m1^4*Log[m2]^2)/m2^4 - (2*ep*m1^2*Log[m2]^2)/m2^2 + + 2*ep^2*(2 + I*Pi)*Log[m2]^2 - ((2*I)*ep^3*m1^4*Pi*Log[m2]^2)/m2^4 - + ((2*I)*ep^2*m1^2*Pi*Log[m2]^2)/m2^2 + (7*ep^3*m1^2*Pi^2*Log[m2]^2)/ + (6*m2^2) - (ep^3*(-48 - (24*I)*Pi + 7*Pi^2)*Log[m2]^2)/6 - + (4*ep^2*Log[m2]^3)/3 + (4*ep^3*m1^4*Log[m2]^3)/(3*m2^4) + + (4*ep^2*m1^2*Log[m2]^3)/(3*m2^2) + (((4*I)/3)*ep^3*m1^2*Pi*Log[m2]^3)/ + m2^2 - ((4*I)/3)*ep^3*(-2*I + Pi)*Log[m2]^3 + (2*ep^3*Log[m2]^4)/3 - + (2*ep^3*m1^2*Log[m2]^4)/(3*m2^2) + + (ep^2*(96 + (48*I)*Pi - 14*Pi^2 - (3*I)*Pi^3 - 28*Zeta[3]))/12 - + (ep^3*m1^2*Log[m1]*(12 + Pi^2 - 4*Zeta[3]))/(6*m2^2) - + ((I/6)*ep^3*m1^2*Log[m2]*(3*Pi^3 - (28*I)*Zeta[3]))/m2^2 + + (ep^2*m1^2*(12 + Pi^2 + (3*I)*Pi^3 + 24*Zeta[3]))/(12*m2^2) + + (ep^3*Log[m2]*(-96 - (48*I)*Pi + 14*Pi^2 + (3*I)*Pi^3 + 28*Zeta[3]))/6 + + (ep^3*m1^4*(45 + 3*Pi^2 + (12*I)*Pi^3 + 104*Zeta[3]))/(48*m2^4) - + (ep^3*m1^2*(-180 - 15*Pi^2 + 8*Pi^4 + 60*Zeta[3] - (420*I)*Pi*Zeta[3]))/ + (180*m2^2) + (ep^3*(23040 + (11520*I)*Pi - 3360*Pi^2 - (720*I)*Pi^3 + + 73*Pi^4 - 6720*Zeta[3] - (3360*I)*Pi*Zeta[3]))/1440, + FCTopology[prop1Lx01x0mAsy, + {FeynAmpDenominator[StandardPropagatorDenominator[Momentum[l, D], 0, 0, + {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[ + Momentum[l + q, D], 0, -m1^2, {1, 1}]]}, {l}, {q}, + {Pair[Momentum[q, D], Momentum[q, D]] -> m2^2}, {}]} diff --git a/FeynCalc/Examples/Misc/MiCalculations.m b/FeynCalc/Examples/Misc/MiCalculations.m new file mode 100644 index 00000000..1d37ffa5 --- /dev/null +++ b/FeynCalc/Examples/Misc/MiCalculations.m @@ -0,0 +1,80 @@ +(* ::Package:: *) + +(* :Title: MiCalculations *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Computation of some simple loop integrals using FeynCalc only. *) + +(* ------------------------------------------------------------------------ *) + + + +(* ::Section:: *) +(*Load FeynCalc*) + + +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print["Computation of some tensor decompositions for multi-loop integrals + that are needed to renormalize Gross-Neveu model at 4 loops."]; +]; +<{},Head->Identity,Names->Function[{x},tad1L]] + + +{fpInt,pref}=FCFeynmanParametrize[int,topo,Names->x,FCReplaceD->{D->4-2ep}, +FeynmanIntegralPrefactor->"Multiloop2"][[1;;2]] + + +res= fpInt pref + + +res + + +finalResult={int->res,topo} + + +(*Put[finalResult,FileNameJoin[{$FeynCalcDirectory,"Examples","MasterIntegrals","Tadpoles","tad1L.m"}]]*) + + +(* ::Section:: *) +(*prop1L00*) + + +intRaw=SFAD[l,l-q] + + +{int,topo}=FCLoopFindTopologies[intRaw,{l},FinalSubstitutions->{SPD[q]->qq},Head->Identity,Names->Function[{x},prop1L00]] + + +{fpInt,pref}=FCFeynmanParametrize[int,topo,Names->x,FCReplaceD->{D->4-2ep},EtaSign->True, +FeynmanIntegralPrefactor->"Multiloop2"][[1;;2]] + + +aux1=Integrate[fpInt/.SMP["Eta"]->0/.x[2]->1,{x[1],0,Infinity},Assumptions->{qq>0,m>0,ep>0,ep<1}]/.qq->qq+ I eta + + +res= aux1 pref + + +finalResult={int->res,topo} + + +(*Put[finalResult,FileNameJoin[{$FeynCalcDirectory,"Examples","MasterIntegrals","Mincer","prop1L00.m"}]]*) From 4618e9fb1c5c8fca118b232f6d66d0a9a9d65c9c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 9 Apr 2024 16:07:02 +0200 Subject: [PATCH 34/67] Fixed a bug in SUNSimplify related to a wrong symmetry relation for sunf2 (issue #259). --- FeynCalc/SUN/SUNSimplify.m | 8 +++++++- FeynCalc/Shared/SharedObjects.m | 2 +- Tests/SUN/SUNSimplify.test | 22 +++++++++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/FeynCalc/SUN/SUNSimplify.m b/FeynCalc/SUN/SUNSimplify.m index 02042a81..1812d893 100644 --- a/FeynCalc/SUN/SUNSimplify.m +++ b/FeynCalc/SUN/SUNSimplify.m @@ -128,6 +128,7 @@ you must also set the option SUNTraceEvaluate to False (default is Automatic) FCPrint[3, "SUNSimplify: After renaming, ", temp, FCDoControl->sunSiVerbose]; ex = temp; + listColoredObjects = Cases2[temp, sunObj]; @@ -452,6 +453,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an (* ... T^a T^b T^a ... *) colorSimplifyGeneric[rest_. holdDOTColor[xx___, SUNT[a_SUNIndex], SUNT[b_SUNIndex], SUNT[a_SUNIndex], yy___]] := (-1)/(2 SUNN) colorSimplifyGeneric[rest holdDOTColor[xx, SUNT[b], yy]]; + (* [... T^a T^b T^a ...]_ij *) colorSimplifyGeneric[rest_. SUNTF[{xx___,a_SUNIndex,b_SUNIndex,a_SUNIndex,yy___},i_,j_]] := (-1)/(2 SUNN) colorSimplifyGeneric[rest SUNTF[{xx,b,yy}, i,j]]; @@ -534,6 +536,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an Since we intend to catch all such SUNF*SUND products here, there is no need to consider them later when dealing with SUND2/SUNF2 symbols *) + colorSimplifyGeneric[_. sunf[___,a_SUNIndex,___,b_SUNIndex,___] sund[___,a_SUNIndex,___,b_SUNIndex,___]]:= 0; @@ -596,6 +599,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an (* ---------------------------------------------------------------------- *) (* SUNTFs *) + colorSimplifyGeneric[rest_. SUNTF[{x__}, i_, j_SUNFIndex] SUNTF[{y__}, j_SUNFIndex, k_]] := colorSimplifyGeneric[rest SUNTF[{x,y}, i, k]]; @@ -656,6 +660,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an colorSimplifyGeneric[rest_. sunf2[b_, c_SUNIndex, d_, a_SUNIndex] sunf[r1___,a_SUNIndex,r2___,c_SUNIndex,r3___]] := SUNN/2 (-1)^(Length[{r2}]+1) colorSimplifyGeneric[rest sunf[b,d,r2,r3,r1]]; + (* Instead of trying to work out all possible products of two sunf2 symbols, it is easier to convert one of them into a product of two sunf symbols. @@ -693,6 +698,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an Can be derived using SUNSimplify[SUND[i, a, b] SUND[j, b, c] SUND[k, c, a], Explicit -> True, SUNNToCACF -> False, SUNTrace -> True] *) + colorSimplifyGeneric[rest_. sund2[l1___,a_SUNIndex,l2_,b_SUNIndex,l3___] sund[r1___,a_SUNIndex,r2___,b_SUNIndex,r3___]] := (SUNN/2 - 6/SUNN) colorSimplifyGeneric[rest sund[l1,l2,l3,r1,r2,r3]] /; Length[{l1,l2,l3}]===2; @@ -757,7 +763,7 @@ Introducing SU(N) structure constants, this must be the last operation, since an -sunf2[a,b,d,c]/; !OrderedQ[{c,d}] && FCPatternFreeQ[{a,b,c,d}]; sunf2[a_,b_,c_,d_]:= - -sunf2[c,d,a,b]/; !OrderedQ[{{a,b},{c,d}}] && FCPatternFreeQ[{a,b,c,d}]; + sunf2[c,d,a,b]/; !OrderedQ[{{a,b},{c,d}}] && FCPatternFreeQ[{a,b,c,d}]; sunf2[a_SUNIndex,b_,a_SUNIndex,c_]:= SUNN SUNDelta[b,c]; diff --git a/FeynCalc/Shared/SharedObjects.m b/FeynCalc/Shared/SharedObjects.m index 11f2271e..1cb5c0b7 100644 --- a/FeynCalc/Shared/SharedObjects.m +++ b/FeynCalc/Shared/SharedObjects.m @@ -2659,7 +2659,7 @@ ftype with (possible) Lorentz-indices lorind and $SU(N)$ indices sunind. The Length[{a,x,b,x,c}] == 3; HoldPattern[SUNF[a___, x_, y_, b___, OptionsPattern[]]] := - -SUNF[a, y, x, b] /; FreeQ[{a,x,y,b}, Pattern] && Length[{a,x,y,b}] === 3 && (!OrderedQ[{x, y}]) && + -SUNF[a, y, x, b] /; FeynCalc`FCPatternFreeQ[{a,x,y,b}] && Length[{a,x,y,b}] === 3 && (!OrderedQ[{x, y}]) && Head[x] === SUNIndex && Head[y] === SUNIndex; diff --git a/Tests/SUN/SUNSimplify.test b/Tests/SUN/SUNSimplify.test index 61e43005..762a1961 100644 --- a/Tests/SUN/SUNSimplify.test +++ b/Tests/SUN/SUNSimplify.test @@ -228,6 +228,26 @@ SUNTraceEvaluate -> False]", SUNTrace[SUNT[SUNIndex[a]] . SUNT[SUNIndex[c]] . SUNT[SUNIndex[b]]]"}, {"fcstSUNSimplify-ID66", "SUNSimplify[SUNTrace[SUNT[a, a, b, b]]]", -"CA CF^2"} +"CA CF^2"}, +{"fcstSUNSimplify-ID67", +"SUNSimplify[-(SUNF[Glu1, h1, h2]* + SUNF[Glu2, h2, + h3]*(I*SUNN*SUNTF[{Glu1}, $AL[$20], Col3]* + SUNTF[{Glu2}, Col4, $AL[$20]] - + I*SUNN*SUNTF[{Glu1}, Col4, $AL[$20]]* + SUNTF[{Glu2}, $AL[$20], Col3] + + SUNN*SUNF[Glu1, Glu2, $AL[$19]]*SUNTF[{$AL[$19]}, Col4, Col3])* + SUNTF[{h1, h3}, Col3, Col4])]", +"(I/2)*CA^4*CF"}, +{"fcstSUNSimplify-ID68", +"SUNSimplify[-(SUNF[a1, a2, Glu1]* + SUNF[a2, a3, + Glu2]*(I*SUNN*SUNTF[{Glu1}, $AL[$20], Col3]* + SUNTF[{Glu2}, Col4, $AL[$20]] - + I*SUNN*SUNTF[{Glu1}, Col4, $AL[$20]]* + SUNTF[{Glu2}, $AL[$20], Col3] + + SUNN*SUNF[Glu1, Glu2, $AL[$19]]*SUNTF[{$AL[$19]}, Col4, Col3])* + SUNTF[{a1, a3}, Col3, Col4])]", +"(I/2)*CA^4*CF"} }; From 7b531cef5fd765e1a0e03708828ccc2b7700591c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 12 Apr 2024 16:02:25 +0200 Subject: [PATCH 35/67] Added an option to disable the extraction of the kinematic invariants from the topologies in FCLoopFindTopologies. --- FeynCalc/LoopIntegrals/FCLoopFindTopologies.m | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopFindTopologies.m b/FeynCalc/LoopIntegrals/FCLoopFindTopologies.m index 1b0fb82d..bd1aa068 100644 --- a/FeynCalc/LoopIntegrals/FCLoopFindTopologies.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindTopologies.m @@ -51,26 +51,27 @@ optPreferredTopologies::usage=""; Options[FCLoopFindTopologies] = { - Collecting -> True, - ExtraPropagators -> {}, - FCE -> False, - FCI -> False, - FCLoopBasisOverdeterminedQ -> False, - FCLoopIsolate -> True, - FCLoopScalelessQ -> False, - FCVerbose -> False, - FDS -> True, - Factoring -> False, - FinalSubstitutions -> {}, - Head -> {Identity, FCGV["GLIProduct"]}, - IsolateFast -> False, - IsolateNames -> False, - MomentumCombine -> True, - Names -> "fctopology", - "NonstandardPropagators" -> False, - Ordering -> {}, - PreferredTopologies -> {}, - SetDimensions -> {D} + Collecting -> True, + ExtraPropagators -> {}, + FCE -> False, + FCI -> False, + FCLoopBasisOverdeterminedQ -> False, + FCLoopGetKinematicInvariants -> True, + FCLoopIsolate -> True, + FCLoopScalelessQ -> False, + FCVerbose -> False, + FDS -> True, + Factoring -> False, + FinalSubstitutions -> {}, + Head -> {Identity, FCGV["GLIProduct"]}, + IsolateFast -> False, + IsolateNames -> False, + MomentumCombine -> True, + Names -> "fctopology", + "NonstandardPropagators" -> False, + Ordering -> {}, + PreferredTopologies -> {}, + SetDimensions -> {D} }; sortingFu[x_, y_] := @@ -629,15 +630,16 @@ provided that there are extra propagators (e.g. cut propagators) to be added. ]; res = {exFinal,finalTopologies} /. topoName->Identity; + If[ OptionValue[FCLoopGetKinematicInvariants], + kinInvs = FCLoopGetKinematicInvariants[finalTopologies, FCFeynmanPrepare->!OptionValue["NonstandardPropagators"]]; - kinInvs = FCLoopGetKinematicInvariants[finalTopologies, FCFeynmanPrepare->!OptionValue["NonstandardPropagators"]]; + If[ kinInvs=!={}, + check = ToString /@ kinInvs; - If[ kinInvs=!={}, - check = ToString /@ kinInvs; - - If[!MatchQ[LowerCaseQ /@ StringReplace[check,"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"->""], {True...}], - FCPrint[0, "FCLoopFindTopologies: ",FCStyle["Your topologies depend on the follwing kinematic invariants that are not all entirely lowercase: ", {Darker[Yellow,0.55], Bold}], check, FCDoControl->fcfsopVerbose]; - FCPrint[0, "FCLoopFindTopologies: ",FCStyle["This may lead to issues if these topologies are meant to be processed using tools such as FIRE, KIRA or Fermat.", {Darker[Yellow,0.55], Bold}], FCDoControl->fcfsopVerbose]; + If[!MatchQ[LowerCaseQ /@ StringReplace[check,"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"->""], {True...}], + FCPrint[0, "FCLoopFindTopologies: ",FCStyle["Your topologies depend on the follwing kinematic invariants that are not all entirely lowercase: ", {Darker[Yellow,0.55], Bold}], check, FCDoControl->fcfsopVerbose]; + FCPrint[0, "FCLoopFindTopologies: ",FCStyle["This may lead to issues if these topologies are meant to be processed using tools such as FIRE, KIRA or Fermat.", {Darker[Yellow,0.55], Bold}], FCDoControl->fcfsopVerbose]; + ]; ]; ]; From 9b19bcea1f6fdb502ee361472c898abd7fbc9895 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 14 May 2024 22:07:15 +0200 Subject: [PATCH 36/67] Fixed a typo in the FeynCalc greeter. --- FeynCalc/FeynCalc.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FeynCalc/FeynCalc.m b/FeynCalc/FeynCalc.m index 8132b7c0..bfba247d 100644 --- a/FeynCalc/FeynCalc.m +++ b/FeynCalc/FeynCalc.m @@ -308,7 +308,7 @@ Style[DisplayForm@ButtonBox["examples.", BaseStyle -> "Hyperlink", ButtonFunction :> SystemOpen[FileNameJoin[{$FeynCalcDirectory, "Examples"}]], Evaluator -> Automatic, Method -> "Preemptive"], "Text"], - Style["The PDF-version of the manual can be downloaded ", "Text"], + Style[" The PDF-version of the manual can be downloaded ", "Text"], Style[DisplayForm@ButtonBox["here.", ButtonData :> {URL["https://github.com/FeynCalc/feyncalc-manual/releases/download/dev-manual/FeynCalcManual.pdf"], None},BaseStyle -> "Hyperlink", ButtonNote -> "https://github.com/FeynCalc/feyncalc-manual/releases/download/dev-manual/FeynCalcManual.pdf"], "Text"] ]; From 7be87abb9a9d815a3f302babca9b601bc0fa7217 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 14 May 2024 22:17:56 +0200 Subject: [PATCH 37/67] Fixed a small bug in FCLoopSelectTopology. --- FeynCalc/LoopIntegrals/FCLoopSelectTopology.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m b/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m index 514e220a..652f34a8 100755 --- a/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m +++ b/FeynCalc/LoopIntegrals/FCLoopSelectTopology.m @@ -39,6 +39,9 @@ "OneToOneCorrespondence" -> False }; +FCLoopSelectTopology[glisRaw_, topo_FCTopology, opts:OptionsPattern[]] := + FCLoopSelectTopology[glisRaw, {topo}, opts]; + FCLoopSelectTopology[ex_/;Head[ex]=!=List, topos:{__FCTopology}, opts:OptionsPattern[]] := First[FCLoopSelectTopology[{ex}, topos, opts]]; From 486edca3ae6666fc5364da34df1ee04df7393f4c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 17 May 2024 13:15:10 +0200 Subject: [PATCH 38/67] Fixed a bug in FCGetFreeIndices (Issue #269) --- FeynCalc/Lorentz/FCGetFreeIndices.m | 50 +++++++++++++++++++++++------ Tests/Lorentz/FCGetFreeIndices.test | 19 ++++++++++- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/FeynCalc/Lorentz/FCGetFreeIndices.m b/FeynCalc/Lorentz/FCGetFreeIndices.m index c84b5abd..60062251 100755 --- a/FeynCalc/Lorentz/FCGetFreeIndices.m +++ b/FeynCalc/Lorentz/FCGetFreeIndices.m @@ -39,11 +39,14 @@ fcgfiVerbose::usage=""; Options[FCGetFreeIndices] = { - DotSimplify -> True, - Expanding -> True, - First -> False, - FCVerbose -> False, - Inverse -> False + DiracChainExpand -> True, + DotSimplify -> True, + Expanding -> True, + FCTraceExpand -> True, + FCVerbose -> False, + First -> False, + Inverse -> False, + PauliChainExpand -> True }; FCGetFreeIndices[_, {}, OptionsPattern[]] := @@ -75,22 +78,49 @@ ex = expr ]; - ex = ExpandAll2[ex]; - If[Head[ex]===Plus && optFirst && !optInverse, - ex=First[ex] - ]; + If[ OptionValue[FCTraceExpand], + time=AbsoluteTime[]; + FCPrint[1, "FCGetFreeIndices: Applying FCTraceExpand.", FCDoControl->fcgfiVerbose]; + ex = FCTraceExpand[ex,FCI->True]; + FCPrint[1, "FCGetFreeIndices: FCTraceExpand done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcgfiVerbose]; + FCPrint[3, "FCGetFreeIndices: After FCTraceExpand: ", ex, FCDoControl->fcgfiVerbose]; + ]; + If[ OptionValue[DotSimplify], time=AbsoluteTime[]; FCPrint[1, "FCGetFreeIndices: Applying DotSimplify.", FCDoControl->fcgfiVerbose]; ex = DotSimplify[ex, FCI->True, Expanding->optExpanding]; FCPrint[1, "FCGetFreeIndices: DotSimplify done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcgfiVerbose]; - FCPrint[3, "FCGetFreeIndices: After FCColorIsolate: ", ex, FCDoControl->fcgfiVerbose]; + FCPrint[3, "FCGetFreeIndices: After DotSimplify: ", ex, FCDoControl->fcgfiVerbose]; + + ]; + + If[ OptionValue[DiracChainExpand] && !FreeQ[ex,DiracChain], + time=AbsoluteTime[]; + FCPrint[1, "FCGetFreeIndices: Applying DiracChainExpand.", FCDoControl->fcgfiVerbose]; + ex = DiracChainExpand[ex,FCI->True]; + FCPrint[1, "FCGetFreeIndices: DiracChainExpand done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcgfiVerbose]; + FCPrint[3, "FCGetFreeIndices: After DiracChainExpand: ", ex, FCDoControl->fcgfiVerbose]; + ]; + + If[ OptionValue[PauliChainExpand] && !FreeQ[ex,PauliChain], + time=AbsoluteTime[]; + FCPrint[1, "FCGetFreeIndices: Applying PauliChainExpand.", FCDoControl->fcgfiVerbose]; + ex = PauliChainExpand[ex,FCI->True]; + FCPrint[1, "FCGetFreeIndices: PauliChainExpand done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcgfiVerbose]; + FCPrint[3, "FCGetFreeIndices: After PauliChainExpand: ", ex, FCDoControl->fcgfiVerbose]; + ]; + ex = ExpandAll2[ex]; + + If[Head[ex]===Plus && optFirst && !optInverse, + ex=First[ex] ]; + If[ !FreeQ[ex, Power], ex = ex /. Power[a_, b_Integer?Positive] /; !FreeQ2[a, heads] :> Apply[times, Table[a, {i, b}]]; diff --git a/Tests/Lorentz/FCGetFreeIndices.test b/Tests/Lorentz/FCGetFreeIndices.test index edc48357..4dfd38f8 100644 --- a/Tests/Lorentz/FCGetFreeIndices.test +++ b/Tests/Lorentz/FCGetFreeIndices.test @@ -44,5 +44,22 @@ FCI[GA[la] . (c1 FV[p, mu] + c2 FV[q, mu]) . GA[la]], {LorentzIndex}, DotSimplify -> False]", "{}"}, {"fcstFCGetFreeIndices-ID11", "FCGetFreeIndices[ -FCI[GA[la] . (c1 FV[p, mu] + c2 FV[q, mu]) . GA[la]], {LorentzIndex}]", "{mu}"} +FCI[GA[la] . (c1 FV[p, mu] + c2 FV[q, mu]) . GA[la]], {LorentzIndex}]", "{mu}"}, +{"fcstFCGetFreeIndices-ID12", +"FCGetFreeIndices[ +FCI[DiracTrace[ +Dot[Plus[DiracGamma[Momentum[Plus[p3, q1], D], D], MQU[3]], + Times[Complex[0, Rational[2, 3]], + DiracGamma[LorentzIndex[Lor3, D], D], r], + Plus[DiracGamma[Momentum[Plus[Times[-1, p4], q1], D], D], MQU[3]], + Times[Complex[0, Rational[2, 3]], + DiracGamma[LorentzIndex[Lor1, D], D], r], + Plus[DiracGamma[Momentum[q1, D], D], MQU[3]], + Times[Complex[0, Rational[-1, 2]], sa, sb, Power[sb2, -1], + Power[SW2, -1], MQU[3], e, Power[mW, -1], + sinW]]]], {LorentzIndex}]", "{Lor1,Lor3}"}, +{"fcstFCGetFreeIndices-ID13", +"FCGetFreeIndices[ +FCI[DiracTrace[ +Dot[GSD[p3 + p4] + m, GAD[mu], GAD[nu]]]], {LorentzIndex}]", "{mu,nu}"} }) From 309bcc0649bad8d58ba80a99035881944f86a385 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 17 May 2024 13:15:29 +0200 Subject: [PATCH 39/67] Fixed a unit test for FourDivergence. --- Tests/Lorentz/FourDivergence.test | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Tests/Lorentz/FourDivergence.test b/Tests/Lorentz/FourDivergence.test index 117d5509..38a7211f 100644 --- a/Tests/Lorentz/FourDivergence.test +++ b/Tests/Lorentz/FourDivergence.test @@ -32,8 +32,7 @@ Spinor[Momentum[p2], m, 1] . DiracGamma[LorentzIndex[a]] . Spinor[Momentum[p1], {"fcstFourDivergence-ID10","FourDivergence[FAD[{p + q, m}], FVD[p, mu], FCE->True]", "FAD[{p + q, m}, {p + q, m}]*(-2*FVD[p, mu] - 2*FVD[q, mu])"}, {"fcstFourDivergence-ID11","FourDivergence[FAD[{p + k, m}, {k - l, m}], FVD[k, mu], FCE->True]", - "FAD[{k + p, m}, {k - l, m}, {k - l, m}] (-2 FVD[k, mu] + - 2 FVD[l, mu]) + FAD[{k - l, m}, {k + p, m}, {k + p, m}] (-2 FVD[k, mu] - 2 FVD[p, mu])"}, + "FAD[{k - l, m}, {k - l, m}, {k + p, m}]*(-2*FVD[k, mu] + 2*FVD[l, mu]) + FAD[{k - l, m}, {k + p, m}, {k + p, m}]*(-2*FVD[k, mu] - 2*FVD[p, mu])"}, {"fcstFourDivergence-ID12","FourDivergence[GSD[p], FVD[p, mu], FCE->True]", "GAD[mu]"}, {"fcstFourDivergence-ID13","FourDivergence[GS[p], FV[p, mu], FCE->True]", From 2d2b7e51108242d7d3a5bf300d1449fe865d804f Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 17 May 2024 15:42:17 +0200 Subject: [PATCH 40/67] Added new options to FCLoopGetEtaSign. --- FeynCalc/LoopIntegrals/FCLoopGetEtaSigns.m | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopGetEtaSigns.m b/FeynCalc/LoopIntegrals/FCLoopGetEtaSigns.m index 1d06a63c..399c0539 100644 --- a/FeynCalc/LoopIntegrals/FCLoopGetEtaSigns.m +++ b/FeynCalc/LoopIntegrals/FCLoopGetEtaSigns.m @@ -36,11 +36,14 @@ Options[FCLoopGetEtaSigns] = { ToSFAD -> True, - FCI -> False + FCI -> False, + CFAD -> True, + GFAD -> True, + SFAD -> True }; -FCLoopGetEtaSigns[expr_,OptionsPattern[]] := - Block[{ ex, res, signs}, +FCLoopGetEtaSigns[expr_, OptionsPattern[]] := + Block[{ ex, res, signs, propTypes={}}, If[ OptionValue[FCI], ex = expr, @@ -51,7 +54,21 @@ ex = ToSFAD[ex,FCI->True] ]; - signs = Cases[ex, (StandardPropagatorDenominator|CartesianPropagatorDenominator|GenericPropagatorDenominator)[__,{_,s_}]:>s, Infinity]; + If[ OptionValue[SFAD], + propTypes = Join[propTypes,{StandardPropagatorDenominator}] + ]; + + If[ OptionValue[CFAD], + propTypes = Join[propTypes,{CartesianPropagatorDenominator}] + ]; + + If[ OptionValue[GFAD], + propTypes = Join[propTypes,{GenericPropagatorDenominator}] + ]; + + propTypes = Alternatives@@propTypes; + + signs = Cases[ex, propTypes[__,{_,s_}]:>s, Infinity]; res = Union[Flatten[signs]]; res From ad9fc8fed5284512ad9f9d8816c701d216725820 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 17 May 2024 15:43:22 +0200 Subject: [PATCH 41/67] Fixed a bug in FCLoopBasisExtract where integrals containing propagators with different i*eta presriptions were not treated consistently. --- FeynCalc/LoopIntegrals/FCLoopBasis.m | 50 ++++++++++++++++--- Tests/LoopIntegrals/ApartFF.test | 8 +-- Tests/LoopIntegrals/FCApart.test | 38 +++++++------- Tests/LoopIntegrals/FCLoopBasis.test | 33 ++++++------ .../FCLoopIntegralToPropagators.test | 8 +-- 5 files changed, 82 insertions(+), 55 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopBasis.m b/FeynCalc/LoopIntegrals/FCLoopBasis.m index 959d7e6a..e614495d 100755 --- a/FeynCalc/LoopIntegrals/FCLoopBasis.m +++ b/FeynCalc/LoopIntegrals/FCLoopBasis.m @@ -218,7 +218,9 @@ to be included in the loop integral int (that depends on the loop momenta q1, Block[{ expr, coeffs, lmoms,allmoms, extmoms, basisElements, availableDims, dims, res, useToSFAD, integralBasis, integralBasisT, coeffsPair, coeffsCartesianPair, coeffsTemporalPair, - lorentzianDims, cartesianDims, null1, null2, aux, optSortBy, optFinalSubstitutions}, + lorentzianDims, cartesianDims, null1, null2, aux, optSortBy, + optFinalSubstitutions, etaSigns, etaSignsLorentzian, + etaSignsCartesian, etaSignsGeneric}, If [OptionValue[FCVerbose]===False, fclbeVerbose=$VeryVerbose, @@ -251,14 +253,48 @@ to be included in the loop integral int (that depends on the loop momenta q1, FCPrint[3,"FCLoopBasisExtract: Entering with: ", expr, FCDoControl->fclbeVerbose]; FCPrint[3,"FCLoopBasisExtract: Loop momenta: ", loopmoms, FCDoControl->fclbeVerbose]; - (*If[ !FCLoopNonIntegerPropagatorPowersFreeQ[expr], - Message[FCLoopBasisExtract::failmsg, "Integrals with noninteger propagator powers are not supported."]; - Abort[] - ];*) - useToSFAD = !FreeQ[expr, StandardPropagatorDenominator]; - integralBasis = FCLoopIntegralToPropagators[expr, loopmoms, FCI->True, Rest->OptionValue[Rest], Negative->True, Tally->True, + + etaSignsLorentzian = FCLoopGetEtaSigns[expr, SFAD->True, GFAD->False, CFAD->False]; + etaSignsCartesian = FCLoopGetEtaSigns[expr, SFAD->False, GFAD->False, CFAD->True]; + etaSignsGeneric = FCLoopGetEtaSigns[expr, SFAD->False, GFAD->True, CFAD->False]; + + + (*{} accounts for input like {SPD[q1] - m1^2} *) + If[ etaSignsLorentzian==={}, + etaSignsLorentzian={1} + ]; + + If[ etaSignsCartesian==={}, + etaSignsCartesian={-1} + ]; + + If[ etaSignsGeneric==={}, + etaSignsGeneric={1} + ]; + + + If[ !MatchQ[etaSignsLorentzian,{1}|{-1}], + Message[FCLoopBasisExtract::failmsg, "The integral contains Lorentzian propagators with different EtaSign prescriptions. " <> + "Please use FCLoopSwitchEtaSign to have the same prescription in all propagators."]; + Abort[] + ]; + + If[ !MatchQ[etaSignsCartesian,{1}|{-1}], + Message[FCLoopBasisExtract::failmsg, "The integral contains Cartesian propagators with different EtaSign prescriptions. " <> + "Please use FCLoopSwitchEtaSign to have the same prescription in all propagators."]; + Abort[] + ]; + + If[ !MatchQ[etaSignsGeneric,{1}|{-1}], + Message[FCLoopBasisExtract::failmsg, "The integral contains generic propagators with different EtaSign prescriptions. " <> + "Please use FCLoopSwitchEtaSign to have the same prescription in all propagators."]; + Abort[] + ]; + + integralBasis = FCLoopIntegralToPropagators[expr, loopmoms, FCI->True, EtaSign->{etaSignsLorentzian[[1]],etaSignsCartesian[[1]],etaSignsGeneric[[1]]}, + Rest->OptionValue[Rest], Negative->True, Tally->True, Pair->True,CartesianPair->True, ToSFAD->useToSFAD, MomentumCombine -> True, ExpandScalarProduct->True, Sort->False ]; diff --git a/Tests/LoopIntegrals/ApartFF.test b/Tests/LoopIntegrals/ApartFF.test index 42cb555f..743f3214 100644 --- a/Tests/LoopIntegrals/ApartFF.test +++ b/Tests/LoopIntegrals/ApartFF.test @@ -158,7 +158,7 @@ CSPD[p, p] KDD[i, j]))/(4 (-2 + D))"}, TemporalMomentum -> True, FCE -> True]", "x GFAD[{{-x + TC[q], 1}, 1}] SFAD[{{0, p.q}, {x, 1}, 1}]"}, {"fcstApartFF-ID37", "ApartFF[CFAD[{{k - p, 0}, {0, -1}, 1}] CSPD[k, - p] GFAD[{{Sqrt[CSPD[k, k]], 1}, 1}] CFAD[k], CSPD[k], {k}] // + p] GFAD[{{Sqrt[CSPD[k, k]], -1}, 1}] CFAD[k], CSPD[k], {k}] // ApartFF[#, {k}] &//FCE", "-(CFAD[{{k, 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]])/2 + (CFAD[{{k - p, 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]])/2 + (CFAD[{{k, 0}, {0, -1}, 1}, {{k - p, 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]]*CSPD[p, p])/2"}, @@ -175,7 +175,7 @@ k])/2 + (SFAD[{{0, k . l}, {0, 1}, 1}, {{k - p, 0}, {0, 1}, \ 0}, {0, -1}, 1}]*CSPD[k, k]*CSPD[p, p])/2"}, {"fcstApartFF-ID40", "ApartFF[CFAD[{{k-p,0},{0,-1},1}] CSPD[k,p] GFAD[{{\!\(\*SqrtBox[\ -\(CSPD[k, k]\)]\),1},1}]CFAD[k],CSPD[k],{k}]//ApartFF[#,{k}]&//FCE", +\(CSPD[k, k]\)]\),-1},1}]CFAD[k],CSPD[k],{k}]//ApartFF[#,{k}]&//FCE", "-(CFAD[{{k, 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]])/2 + (CFAD[{{k - p, \ 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]])/2 + (CFAD[{{k, 0}, {0, -1}, 1}, \ {{k - p, 0}, {0, -1}, 1}]*Sqrt[CSPD[k, k]]*CSPD[p, p])/2"}, @@ -198,11 +198,11 @@ ApartFF[#, {v1, v2},FCE->True] &", "-(SFAD[{{0, p.v1}, {0, 1}, 1}]/y) + SFAD[{{0, p.v1}, {0, 1}, 1}, {{0, p.(v1 - v2)}, {y, 1}, 1}]"}, {"fcstApartFF-ID45", -"ApartFF[SFAD[{{0, n . k}, {0, -1}, +"ApartFF[SFAD[{{0, n . k}, {0, 1}, al}, {{k, -m^2/Q k . n - k . nb Q}, {-m^2, 1}}, {{k, -m^2/Q k . nb - k . n Q}, {-m^2, 1}}, {k, m^2}], {k}, FCE -> True]", -"SFAD[{{k, 0}, {m^2, 1}, 1}, {{0, k . n}, {0, -1}, al}, {{k, -(Q*k . n) - (m^2*k . nb)/Q}, +"SFAD[{{k, 0}, {m^2, 1}, 1}, {{0, k . n}, {0, 1}, al}, {{k, -(Q*k . n) - (m^2*k . nb)/Q}, {-m^2, 1}, 1}, {{k, -((m^2*k . n)/Q) - Q*k . nb}, {-m^2, 1}, 1}]"}, diff --git a/Tests/LoopIntegrals/FCApart.test b/Tests/LoopIntegrals/FCApart.test index 0391f7c1..d663857a 100644 --- a/Tests/LoopIntegrals/FCApart.test +++ b/Tests/LoopIntegrals/FCApart.test @@ -403,18 +403,14 @@ FCApart[SFAD[{{0, c1 + p1.Q}}] SFAD[{{0, c2 + p1.Q}}] SFAD[{{p1, FDS -> False]][[1]] < 1.5) || $VersionNumber < 10.", "True"}, {"fcstFCApart-ID54", -"FCApart[CFAD[{{k, 0}, {0, -1}, 1}, {{k - P, 0}, {0, -1}, 1}] CSPD[k, -P]^2 GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}], {k}, FCE -> True]", -"-(1/2) CFAD[{{k, 0}, {0, -1}, 1}] CSPD[k, -P] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}] + -1/2 CFAD[{{k - P, 0}, {0, -1}, 1}] CSPD[k, -P] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}] - -1/4 CFAD[{{k, 0}, {0, -1}, 1}] CSPD[P, -P] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}] + -1/4 CFAD[{{k - P, 0}, {0, -1}, 1}] CSPD[P, -P] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}] + -1/4 CFAD[{{k, 0}, {0, -1}, 1}, {{k - P, 0}, {0, -1}, 1}] CSPD[P, -P]^2 GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}]"}, +"FCApart[CFAD[{{k, 0}, {0, -1}, 1}, {{k - P, 0}, {0, -1}, 1}] CSPD[k, +P]^2 GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}], {k}, FCE -> True]", +"-1/2*(CFAD[{{k, 0}, {0, -1}, 1}]*CSPD[k, P]*GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}]) + +(CFAD[{{k - P, 0}, {0, -1}, 1}]*CSPD[k, P]*GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}])/2 - +(CFAD[{{k, 0}, {0, -1}, 1}]*CSPD[P, P]*GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}])/4 + +(CFAD[{{k - P, 0}, {0, -1}, 1}]*CSPD[P, P]*GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}])/4 + +(CFAD[{{k, 0}, {0, -1}, 1}, {{k - P, 0}, {0, -1}, 1}]*CSPD[P, P]^2*GFAD[{{-EN + V0 - +Sqrt[CSPD[k, k]], -1}, 1}])/4"}, {"fcstFCApart-ID55", "DeclareFCTensor[myR1]; \n DeclareNonCommutative[myR1]; \n tmp = FCApart[myR1[CartesianMomentum[P]] CFAD[P - k, {P, c^2}], {P},FCE->True]; \n @@ -432,13 +428,13 @@ UnDeclareFCTensor[myR1]; \n UnDeclareNonCommutative[myR1]; tmp", 1/2 CFAD[{{P, 0}, {0, -1}, 1}, {{k + P, 0}, {c^2, -1}, 1}] (c^2 - CSPD[k, k]) myR1[CartesianMomentum[P]]"}, {"fcstFCApart-ID57", -"FCApart[CFAD[{{k-p,0},{0,-1},1}] CSPD[k,p] GFAD[{{\!\(\*SqrtBox[\ -\(CSPD[k, k]\)]\),1},1}]CFAD[k],CSPD[k],{k},FCE\[Rule]True]", -"-(CFAD[{{k, 0}, {0, -1}, 1}]*CSPD[k, k]*GFAD[{{Sqrt[CSPD[k, k]], \ -1}, 1}])/2 + (CFAD[{{k - p, 0}, {0, -1}, 1}]*CSPD[k, \ -k]*GFAD[{{Sqrt[CSPD[k, k]], 1}, 1}])/2 + (CFAD[{{k, 0}, {0, -1}, 1}, \ -{{k - p, 0}, {0, -1}, 1}]*CSPD[k, k]*CSPD[p, p]*GFAD[{{Sqrt[CSPD[k, \ -k]], 1}, 1}])/2"}, +"FCApart[CFAD[{{k - p, 0}, {0, -1}, 1}] CSPD[k, +p] GFAD[{{-Sqrt[CSPD[k, k]], -1}, 1}] CFAD[k], CSPD[k], {k}, +FCE -> True]", +"-1/2*(CFAD[{{k, 0}, {0, -1}, 1}]*CSPD[k, k]*GFAD[{{-Sqrt[CSPD[k, k]], -1}, 1}]) + +(CFAD[{{k - p, 0}, {0, -1}, 1}]*CSPD[k, k]*GFAD[{{-Sqrt[CSPD[k, k]], -1}, 1}])/2 + +(CFAD[{{k, 0}, {0, -1}, 1}, {{k - p, 0}, {0, -1}, 1}]*CSPD[k, k]*CSPD[p, +p]*GFAD[{{-Sqrt[CSPD[k, k]], -1}, 1}])/2"}, {"fcstFCApart-ID58", "FCApart[SPD[k]^2SFAD[{{0,k.k}}],{k},DropScaleless\[Rule]False]", "Pair[Momentum[k, D], Momentum[k, D]]"}, @@ -503,8 +499,8 @@ FeynAmpDenominator[StandardPropagatorDenominator[Momentum[q1, D],0, -QGMassV^2, "-(FeynAmpDenominator[StandardPropagatorDenominator[Momentum[q1, D],0, -QGMassV^2, {1, 1}]]*TemporalPair[ExplicitLorentzIndex[0], TemporalMomentum[q1]]^2)"}, {"fcstFCApart-ID67", -"FCApart[SFAD[{{0, n . k}, {0, -1}, al}, {{k, -m^2/Q k . n - k . nb Q}, {-m^2,1}}, +"FCApart[SFAD[{{0, n . k}, {0, 1}, al}, {{k, -m^2/Q k . n - k . nb Q}, {-m^2,1}}, {{k, -m^2/Q k . nb - k . n Q}, {-m^2, 1}}, {k, m^2}], {k},FCE -> True]", -"SFAD[{{0, k . n}, {0, -1}, al}, {{k, -((m^2*k . n)/Q) - Q*k . nb}, {-m^2, 1}, 1}, +"SFAD[{{0, k . n}, {0, 1}, al}, {{k, -((m^2*k . n)/Q) - Q*k . nb}, {-m^2, 1}, 1}, {{k, -(Q*k . n) - (m^2*k . nb)/Q}, {-m^2, 1}, 1}, {{k, 0}, {m^2, 1}, 1}]"} }) diff --git a/Tests/LoopIntegrals/FCLoopBasis.test b/Tests/LoopIntegrals/FCLoopBasis.test index 2775a4eb..2c7160c9 100644 --- a/Tests/LoopIntegrals/FCLoopBasis.test +++ b/Tests/LoopIntegrals/FCLoopBasis.test @@ -229,11 +229,11 @@ GFAD[{p1.q p2.q + x}] SFAD[p1] SPD[p2, r]^2, {p1, p2}]", "False"}, {"fcstFCLoopBasisOverdeterminedQ-ID44", "FCLoopBasisOverdeterminedQ[ CFAD[{{-k + P, 0}, {0, -1}, -1}] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}], {k}]", "False"}, +1}] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], -1}, 1}], {k}]", "False"}, {"fcstFCLoopBasisOverdeterminedQ-ID45", "FCLoopBasisOverdeterminedQ[ CFAD[{{k, 0}, {-TC[k]^2, -1}, 1}, {{-k + P, 0}, {0, -1}, - 1}] GFAD[{{EN - V0 - TC[k], 1}, 1}] TC[k], {k}]", "True"}, + 1}] GFAD[{{EN - V0 - TC[k], -1}, 1}] TC[k], {k}]", "True"}, {"fcstFCLoopBasisOverdeterminedQ-ID46", "FCLoopBasisOverdeterminedQ[FCTopology[topo1,{FAD[p1],FAD[p2], FAD[p1-q],FAD[p2-q],FAD[p1-p2],FAD[p1+p2+q]},{p1,p2},{q},{},{}]]", "True"}, @@ -686,19 +686,17 @@ x)] SFAD[{{0, p.q}, x}], {q}, FCE -> True]", SPD[q, q], TC[q]}, {1, 1, -1}, {SFAD[{{0, p.q}, {x, 1}, 1}], GFAD[{{-x + TC[q], 1}, 1}], GFAD[{{TC[q], 1}, -1}]}}"}, {"fcstFCLoopBasisExtract-ID16","FCLoopBasisExtract[ -CFAD[{{-k + P, 0}, {0, -1}, 1}] GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}], {k}, FCE -> True]", -"{{EN - V0 + Sqrt[CSPD[k, k]], -CSPD[k, k] - 2*CSPD[k, P] + CSPD[P, P]}, {CSPD[k, k], CSPD[k, P], -Sqrt[CSPD[k, k]]}, {1, -1}, {GFAD[{{EN - V0 + Sqrt[CSPD[k, k]], 1}, 1}], -CFAD[{{-k + P, 0}, {0, -1}, 1}]}}"}, +CFAD[{{-k + P, 0}, {0, -1}, + 1}] GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, 1}], {k}, +FCE -> True]", +"{{-EN + V0 - Sqrt[CSPD[k, k]], CSPD[k, k] - 2*CSPD[k, P] + CSPD[P, P]}, +{CSPD[k, k], CSPD[k, P], Sqrt[CSPD[k, k]]}, {1, 1}, {GFAD[{{-EN + V0 - Sqrt[CSPD[k, k]], -1}, +1}], CFAD[{{-k + P, 0}, {0, -1}, 1}]}}"}, {"fcstFCLoopBasisExtract-ID17","FCLoopBasisExtract[ CFAD[{{k, 0}, {-TC[k]^2, -1}, 1}, {{-k + P, 0}, {0, -1}, - 1}] GFAD[{{EN - V0 - TC[k], 1}, 1}] TC[k], {k}, FCE -> True]", -"{{CSPD[k, k] - TC[k]^2, CSPD[k, k] - 2*CSPD[k, P] + CSPD[P, P], EN - V0 - TC[k], -TC[k]}, {CSPD[k, k], CSPD[k, P], TC[k], TC[k]^2}, {1, 1, 1, -1}, {CFAD[{{k, 0}, -{-TC[k]^2, -1}, 1}], CFAD[{{-k + P, 0}, {0, -1}, 1}], GFAD[{{EN - V0 - -TC[k], 1}, 1}], GFAD[{{TC[k], 1}, -1}]}}"}, + 1}] GFAD[{{-EN + V0 - TC[k], -1}, 1}] TC[k], {k}, FCE -> True]", +"{{CSPD[k, k] - TC[k]^2, CSPD[k, k] - 2*CSPD[k, P] + CSPD[P, P], -EN + V0 - TC[k], TC[k]}, {CSPD[k, k], CSPD[k, P], TC[k], TC[k]^2}, {1, 1, 1, -1}, +{CFAD[{{k, 0}, {-TC[k]^2, -1}, 1}], CFAD[{{-k + P, 0}, {0, -1}, 1}], GFAD[{{-EN + V0 - TC[k], -1}, 1}], GFAD[{{TC[k], -1}, -1}]}}"}, {"fcstFCLoopBasisExtract-ID17", "FCLoopBasisExtract[{FAD[q1-p1],SPD[q1,p]},{q1},SetDimensions\ \[Rule]{D},FCE\[Rule]True]", @@ -732,12 +730,9 @@ q2]},{q1,q2},FCE\[Rule]True]", {FAD[q1], FAD[q2], FAD[-k1 + q1], FAD[q1 + q2], 2*SPD[k1, q1] + 4*SPD[k1, q2] - SPD[q1, q1] - 2*SPD[q1, q2]}}"}, {"fcstFCLoopBasisExtract-ID23", "FCLoopBasisExtract[ -GFAD[{{CSPD[k, k] x[1] + (CSPD[k, k - 2 p] + CSPD[p, p]) x[2], 1}, -1 + s}] CFAD[{k, -c^2}], {k}, FCE -> True]", -"{{CSPD[k, k]*x[1] + CSPD[k, k]*x[2] - 2*CSPD[k, p]*x[2] + CSPD[p, p]*x[2], --c^2 + CSPD[k, k]}, {CSPD[k, k], CSPD[k, p]}, {1 + s, 1}, -{GFAD[{{CSPD[k, k]*x[1] + (CSPD[k, k - 2*p] + -CSPD[p, p])*x[2], 1}, 1}], CFAD[{{k, 0}, {-c^2, -1}, 1}]}}"}, +GFAD[{{CSPD[k, k] x[1] + (CSPD[k, k - 2 p] + CSPD[p, p]) x[2], -1}, 1 + s}] CFAD[{k, -c^2}], {k}, FCE -> True]", +"{{CSPD[k, k]*x[1] + CSPD[k, k]*x[2] - 2*CSPD[k, p]*x[2] + CSPD[p, p]*x[2], -c^2 + CSPD[k, k]}, {CSPD[k, k], CSPD[k, p]}, {1 + s, 1}, +{GFAD[{{CSPD[k, k]*x[1] + (CSPD[k, k - 2*p] + CSPD[p, p])*x[2], -1}, 1}], CFAD[{{k, 0}, {-c^2, -1}, 1}]}}"}, {"fcstFCLoopBasisExtract-ID24","FCLoopBasisExtract[SFAD[p, p - q] SPD[p, q], {p}, SortBy -> Function[x, x[[2]] < 0], FCE -> True]", "{{SPD[p, p], SPD[p, p] - 2 SPD[p, q] + SPD[q, q], diff --git a/Tests/LoopIntegrals/FCLoopIntegralToPropagators.test b/Tests/LoopIntegrals/FCLoopIntegralToPropagators.test index b051d03b..1df1466e 100644 --- a/Tests/LoopIntegrals/FCLoopIntegralToPropagators.test +++ b/Tests/LoopIntegrals/FCLoopIntegralToPropagators.test @@ -337,12 +337,12 @@ Sqrt[CSPD[k]] GFAD[Sqrt[CSPD[k]] - x], {k}, FCE -> True]", "{GFAD[{{-x + Sqrt[CSPD[k, k]], 1}, 1}], GFAD[{{Sqrt[CSPD[k, k]], 1}, -1}]}"}, {"fcstFCLoopIntegralToPropagators-ID61", -"FCLoopBasisExtract[ +"FCLoopIntegralToPropagators[ GFAD[{{CSPD[k, k] x[1] + (CSPD[k, k - 2 p] + CSPD[p, p]) x[2], 1}, 1 + s}] CFAD[{k, -c^2}], {k}, FCE -> True]", -"{{CSPD[k, k]*x[1] + CSPD[k, k]*x[2] - 2*CSPD[k, p]*x[2] + -CSPD[p, p]*x[2], -c^2 + CSPD[k, k]}, {CSPD[k, k], CSPD[k, p]}, {1 + s, 1}, -{GFAD[{{CSPD[k, k]*x[1] + (CSPD[k, k - 2*p] + CSPD[p, p])*x[2], 1}, 1}], CFAD[{{k, 0}, {-c^2, -1}, 1}]}}"}, +"{CFAD[{{k, 0}, {-c^2, -1}, 1}], +GFAD[{{CSPD[k, k] x[1] + (CSPD[k, k - 2 p] + CSPD[p, p]) x[2], 1}, +Sign[1 + s]}]}"}, {"fcstFCLoopIntegralToPropagators-ID62", "FCLoopIntegralToPropagators[ FCI[CFAD[{{k, 0}, {0, -1}, 1}, {{k, 0}, {0, -1}, From 51733ec31f5c0c3791214783bf98f067143dd7b3 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 24 May 2024 16:29:40 +0200 Subject: [PATCH 42/67] Fixed some bugs in FCLoopFindIntegralMappings when running in the parallelized settings. --- FeynCalc/LoopIntegrals/FCLoopFromGLI.m | 9 ++- FeynCalc/LoopIntegrals/FCLoopToPakForm.m | 2 +- .../FCLoopFindIntegralMappings.test | 73 +++++++++++++++++- Tests/LoopIntegrals/FCLoopFromGLI.test | 76 ++++++++++++++++++- 4 files changed, 154 insertions(+), 6 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m index 5ec0a5f1..b792c93b 100644 --- a/FeynCalc/LoopIntegrals/FCLoopFromGLI.m +++ b/FeynCalc/LoopIntegrals/FCLoopFromGLI.m @@ -140,9 +140,13 @@ time=AbsoluteTime[]; FCPrint[1,"FCLoopFromGLI: Creating conversion rules." , FCDoControl->fgliVerbose]; If[ $ParallelizeFeynCalc, + FCPrint[1,"FCLoopFromGLI: Running in parallel." , FCDoControl->fgliVerbose]; + With[{xxx = powFu}, + ParallelEvaluate[FCParallelContext`FCLoopFromGLI`powFu = xxx;, DistributedContexts -> None]]; fromGliRule = ParallelMap[(rule[GLI[#[[1]], Table[pattern[ToExpression["n"<>ToString[i]],_],{i,1,Length[#[[2]]]}]], - powFu[#[[2]]]] /.pattern->Pattern/.rule->RuleDelayed)&,relevantTopos, DistributedContexts->None,Method->"CoarsestGrained"], + FCParallelContext`FCLoopFromGLI`powFu[#[[2]]]]/.pattern->Pattern)&,relevantTopos, DistributedContexts->None,Method->"CoarsestGrained"]; + fromGliRule = fromGliRule/.rule->RuleDelayed, fromGliRule = Map[rule[GLI[#[[1]], Table[pattern[ToExpression["n"<>ToString[i]],_],{i,1,Length[#[[2]]]}]], powFu[#[[2]]]]&,relevantTopos]/.pattern->Pattern/.rule->RuleDelayed; @@ -150,7 +154,6 @@ FCPrint[1,"FCLoopFromGLI: Done creating conversion rules, timing: ", N[AbsoluteTime[] - time, 4] , FCDoControl->fgliVerbose]; FCPrint[3,"FCLoopFromGLI: Conversion rules: ", fromGliRule, FCDoControl->fgliVerbose]; - FCPrint[1,"FCLoopFromGLI: Applying conversion rules." , FCDoControl->fgliVerbose]; If[ !MatchQ[listGLI,{__GLI}], @@ -282,7 +285,7 @@ c^i FeynAmpDenominator[h[a,{i, s}]]; -powFu[x_]:= +powFu[x_List]:= list@@MapIndexed[powerHold[#1,ToExpression["n"<>ToString[First[#2]]]]&,x]; list[a___,1,b___]:= diff --git a/FeynCalc/LoopIntegrals/FCLoopToPakForm.m b/FeynCalc/LoopIntegrals/FCLoopToPakForm.m index afc2c32c..29424fcb 100755 --- a/FeynCalc/LoopIntegrals/FCLoopToPakForm.m +++ b/FeynCalc/LoopIntegrals/FCLoopToPakForm.m @@ -145,7 +145,7 @@ FCPrint[1, "FCLoopToPakForm: Calling pakProcess in parallel.", FCDoControl -> fctpfVerbose]; With[{xxx = {optFactoring,optPowerMark,optCharacteristicPolynomial, optFCLoopPakOrder}}, ParallelEvaluate[FCParallelContext`FCLoopToPakForm`pakProcessOptions = xxx;, DistributedContexts -> None]]; - res = ParallelMap[pakProcess[#,FCParallelContext`FCLoopToPakForm`pakProcessOptions]&,tmp, DistributedContexts -> None, Method -> "CoarsestGrained"], + tmp = ParallelMap[pakProcess[#,FCParallelContext`FCLoopToPakForm`pakProcessOptions]&,tmp, DistributedContexts -> None, Method -> "CoarsestGrained"], FCPrint[1, "FCLoopToPakForm: Calling pakProcess.", FCDoControl -> fctpfVerbose]; tmp = pakProcess[#,{optFactoring,optPowerMark,optCharacteristicPolynomial, optFCLoopPakOrder}]&/@tmp diff --git a/Tests/LoopIntegrals/FCLoopFindIntegralMappings.test b/Tests/LoopIntegrals/FCLoopFindIntegralMappings.test index 470eaba9..bddf4ff8 100644 --- a/Tests/LoopIntegrals/FCLoopFindIntegralMappings.test +++ b/Tests/LoopIntegrals/FCLoopFindIntegralMappings.test @@ -448,5 +448,76 @@ fctopology4, {SFAD[{{l, 0}, {mq^2, 1}, 1}], Momentum[Polarization[k1, -I, Transversality -> True], D]] -> 0}, {}]}]", "{{GLI[fctopology4, {1, 1, 1}] -> GLI[fctopology3, {1, 1, 1}]}, {GLI[fctopology3, {1, 1, 1}]}}" -} +}, + + +{"fcstFCLoopFindIntegralMappings-ID14", +"$ParallelizeFeynCalc = True; +tmp = FCLoopFindIntegralMappings[{GLI[ + topology10, {1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0}], + GLI[topology10, {1, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, + 0}]}, {FCTopology[ + topology10, {FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k3, D], 0, 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, + D], -(meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]]), + 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[0, + Pair[Momentum[k1 + k2, D], Momentum[nb, D]], -2*gkin*meta* + u0b, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*gkin*meta*u0b* + Pair[Momentum[k1, D], Momentum[n, D]], 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1, D], + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - + meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], -2*gkin* + meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 + k2, D], + 2*gkin*meta*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[nb, D]], -2* + gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 + k2, D], + 2*gkin*meta*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[n, D]] + + Pair[Momentum[k3, D], Momentum[-2*k1 - 2*k2 + k3, D]] - + 2*gkin*meta*Pair[Momentum[k3, D], Momentum[n, D]] + + 2*gkin*meta*u0b*Pair[Momentum[k3, D], Momentum[n, D]] + + meta*u0b* + Pair[Momentum[-k1 - k2 + k3, D], Momentum[nb, D]], -2*gkin* + meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[0, + Pair[Momentum[k1, D], Momentum[nb, D]] - + Pair[Momentum[k3, D], Momentum[nb, D]], 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*Pair[Momentum[k1, D], Momentum[k3, D]] + + Pair[Momentum[k3, D], Momentum[k3, D]] + + meta*u0b*(Pair[Momentum[k1, D], Momentum[nb, D]] - + Pair[Momentum[k3, D], Momentum[nb, D]]), 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*Pair[Momentum[k1, D], Momentum[k3, D]] + + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + + Pair[Momentum[k3, D], Momentum[k3, D]] - + 2*gkin*meta*Pair[Momentum[k3, D], Momentum[n, D]], + 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 - k2, D], 0, + 0, {1, 1}]]}, {k1, k2, k3}, {n, nb}, {Hold[SPD][n] -> 0, + Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]}]; +$ParallelizeFeynCalc = False; tmp", +"{{}, {GLI[topology10, {1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0}], +GLI[topology10, {1, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0}]}}"} }); diff --git a/Tests/LoopIntegrals/FCLoopFromGLI.test b/Tests/LoopIntegrals/FCLoopFromGLI.test index 5eea1ac0..c7dc8ceb 100644 --- a/Tests/LoopIntegrals/FCLoopFromGLI.test +++ b/Tests/LoopIntegrals/FCLoopFromGLI.test @@ -201,6 +201,80 @@ topoTad2L, {FAD[{q1, m1}], FAD[{q2, m2}], FAD[{q1 - q2, 0}]}, {q1, q2}, {}, {}, {}]}, FeynAmpDenominatorCombine -> False, List -> FeynAmpDenominator, FCE->True]", "a1 FAD[{q, m0}, {p1 + q, m1}, {p2 + q, m2}, {p2 + q, m3}] + -a2 FAD[{q1, m1}, {q2, m2}, {q2, m2}, q1 - q2, q1 - q2]"} +a2 FAD[{q1, m1}, {q2, m2}, {q2, m2}, q1 - q2, q1 - q2]"}, + +{"fcstFCLoopFromGLI-ID29", +"$ParallelizeFeynCalc = True; tmp = +FCLoopFromGLI[GLI[topology10, {1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0}], +FCTopology[ +topology10, {FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k3, D], 0, 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, + D], -(meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]]), + 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[0, + Pair[Momentum[k1 + k2, D], Momentum[nb, D]], -2*gkin*meta* + u0b, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*gkin*meta*u0b* + Pair[Momentum[k1, D], Momentum[n, D]], 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1, D], + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - + meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], -2*gkin* + meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 + k2, D], + 2*gkin*meta*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[nb, D]], -2*gkin* + meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 + k2, D], + 2*gkin*meta*Pair[Momentum[k1 + k2, D], Momentum[n, D]] - + 2*gkin*meta*u0b*Pair[Momentum[k1 + k2, D], Momentum[n, D]] + + Pair[Momentum[k3, D], Momentum[-2*k1 - 2*k2 + k3, D]] - + 2*gkin*meta*Pair[Momentum[k3, D], Momentum[n, D]] + + 2*gkin*meta*u0b*Pair[Momentum[k3, D], Momentum[n, D]] + + meta*u0b*Pair[Momentum[-k1 - k2 + k3, D], Momentum[nb, D]], -2* + gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[0, + Pair[Momentum[k1, D], Momentum[nb, D]] - + Pair[Momentum[k3, D], Momentum[nb, D]], 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*Pair[Momentum[k1, D], Momentum[k3, D]] + + Pair[Momentum[k3, D], Momentum[k3, D]] + + meta*u0b*(Pair[Momentum[k1, D], Momentum[nb, D]] - + Pair[Momentum[k3, D], Momentum[nb, D]]), 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D], -2*Pair[Momentum[k1, D], Momentum[k3, D]] + + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + + Pair[Momentum[k3, D], Momentum[k3, D]] - + 2*gkin*meta*Pair[Momentum[k3, D], Momentum[n, D]], 0, {1, 1}]], + FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1 - k2, D], 0, + 0, {1, 1}]]}, {k1, k2, k3}, {n, nb}, {Hold[SPD][n] -> 0, + Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}], +FCE -> True]; $ParallelizeFeynCalc = False; tmp", +"SFAD[{{0, (k1 + k2) . nb}, {2 gkin meta u0b, 1}, +1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, +1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, +1}] SFAD[{{k2, 0}, {0, 1}, +1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n + + k3 . (-2 k1 - 2 k2 + k3) - 2 gkin meta k3 . n + + 2 gkin meta u0b k3 . n + + meta u0b (-k1 - k2 + k3) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}] SFAD[{{k3, 0}, {0, 1}, 1}]"} }); From 6c897a39c7818aff082ff428db4dd079409c9648 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 3 Jul 2024 13:16:13 +0200 Subject: [PATCH 43/67] Fixed a bug in the automatic installer when using Mma 14. --- install.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.m b/install.m index d59fe379..eb81637d 100644 --- a/install.m +++ b/install.m @@ -203,7 +203,7 @@ WriteString["stdout", "FeynArts zip file was saved to ", tmpzip,".\n"]; WriteString["stdout", "Extracting FeynArts zip file to ", faDir, " ..."]; - If[$VersionNumber=!=13.3, + If[$VersionNumber<13.3, If[ ExtractArchive[tmpzip, unzipDir]===$Failed, WriteString["stdout", "\nFailed to extract the FeynArts zip. The file might be corrupted.\nInstallation aborted!"]; From c28ee69a214d90528c94ab6e8f213fa9a2d720a1 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 12 Jul 2024 14:07:51 +0200 Subject: [PATCH 44/67] Added two reworked 1-loop examples using the new multiloop functionality. --- .../QED/OneLoop/Mathematica/ElAel-ElAel2.m | 398 ++++++++++++++++++ .../QED/OneLoop/Mathematica/ElAel-MuAmu2.m | 366 ++++++++++++++++ .../Mathematica/ReductionTable-ElAel-ElAel.m | 116 +++++ .../Mathematica/ReductionTable-ElAel-MuAmu.m | 65 +++ 4 files changed, 945 insertions(+) create mode 100644 FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-ElAel2.m create mode 100644 FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu2.m create mode 100644 FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-ElAel.m create mode 100644 FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-MuAmu.m diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-ElAel2.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-ElAel2.m new file mode 100644 index 00000000..808a07f8 --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-ElAel2.m @@ -0,0 +1,398 @@ +(* ::Package:: *) + + + + +(* :Title: ElAel-ElAel2 *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: El Ael -> El Ael, QED, Born-virtual, 1-loop *) + +(* ------------------------------------------------------------------------ *) + + + +(* ::Title:: *) +(*Bhabha scattering*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +description="El Ael -> El Ael, QED, Born-virtual, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +$LoadAddOns={"FeynArts"}; +< 2, + ExcludeTopologies->{Tadpoles,WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2,{1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; +Paint[diagsTree, ColumnsXRows -> {6, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,256}]; + + +diagsLoop=InsertFields[CreateTopologies[1, 2 -> 2, + ExcludeTopologies->{Tadpoles,WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2,{1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; +Paint[DiagramExtract[diagsLoop,1..8,9,11], ColumnsXRows -> {4, 3}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,480}]; + + +diagsLoopCT=InsertFields[CreateCTTopologies[1, 2 -> 2,ExcludeTopologies->{Tadpoles,WFCorrectionCTs}], + {F[2, {1}], -F[2, {1}]} ->{F[2,{1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; + +Paint[diagsLoopCT, ColumnsXRows -> {4, 3}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,480}]; + + +(* ::Section:: *) +(*Obtain the amplitudes*) + + +ampLoopCT[0]=FCFAConvert[CreateFeynAmp[diagsLoopCT,Truncated -> False,PreFactor->1]//. +{(h:dZfL1|dZfR1)[z__]:>dZf1[z],Conjugate[(h:dZfL1|dZfR1)[z__]]:>dZf1[z],dZZA1->0}, +IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2},LoopMomenta->{l},ChangeDimension->D, +DropSumOver->True,UndoChiralSplittings->True,SMP->True, +FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +ampLoop[0]=FCFAConvert[CreateFeynAmp[DiagramExtract[diagsLoop,1..8,9,11], + Truncated -> False,PreFactor->1],IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2}, + LoopMomenta->{q},ChangeDimension->D,DropSumOver->True,UndoChiralSplittings->True, + SMP->True,FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +ampTree[0]=FCFAConvert[CreateFeynAmp[diagsTree,Truncated -> False,PreFactor->1], + IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2}, + ChangeDimension->D,DropSumOver->True,UndoChiralSplittings->True, + SMP->True, FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +(* ::Section:: *) +(*Fix the kinematics*) + + +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0] + + +(* ::Section:: *) +(*Evaluate the amplitudes*) + + +ampTree[1]= + (FCTraceFactor/@DotSimplify[#,Expanding->False]&/@ampTree[0]); + + +ampTree[2]=(Total[ampTree[1]]//Contract//DiracSimplify)//FeynAmpDenominatorExplicit// + FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu}]& + + +ampLoopCT[1]= + (FCTraceFactor/@DotSimplify[#,Expanding->False]&/@ampLoopCT[0]); + + +amlLoop[0]=Join[ampLoop[0][[1;;8]],Nf ampLoop[0][[9;;9]],Nf ampLoop[0][[10;;10]]]; + + +AbsoluteTiming[amlLoop[1]=amlLoop[0]//Contract//DiracSimplify;] + + +(* ::Section:: *) +(*Identify and minimize the topologies*) + + +{amlLoop[2],topos}=FCLoopFindTopologies[amlLoop[1],{q}]; + + +subtopos=FCLoopFindSubtopologies[topos]; + + +mappings=FCLoopFindTopologyMappings[topos,PreferredTopologies->subtopos]; + + +(* ::Section:: *) +(*Rewrite the amplitude in terms of GLIs*) + + +AbsoluteTiming[ampReduced=FCLoopTensorReduce[amlLoop[2],topos];] + + +AbsoluteTiming[ampPreFinal=FCLoopApplyTopologyMappings[ampReduced,mappings];] + + +AbsoluteTiming[ampFinal=ampPreFinal//DiracSimplify//FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu,nu,rho}]&//FeynAmpDenominatorExplicit//Collect2[#,DOT]&;] + + +(*FCClearScalarProducts[]; +FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-ElAel.m"}]]; +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0];*) + + +reductionTable=Get[FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-ElAel.m"}]]; + + +resPreFinal=Collect2[Total[ampFinal/.reductionTable],GLI]; + + +integralMappings=FCLoopFindIntegralMappings[Cases2[resPreFinal,GLI],mappings[[2]]] + + +resFinal=Collect2[(resPreFinal/.integralMappings[[1]]),GLI]; + + +(* ::Text:: *) +(*Obtain the Born-virtual interference term*) + + +(*about 10 seconds*) +AbsoluteTiming[bornVirtualUnrenormalized[0]= + Collect2[resFinal,Spinor,LorentzIndex,IsolateNames->KK] * + ComplexConjugate[ampTree[2]]// + FermionSpinSum[#,ExtraFactor->1/2^2]&//DiracSimplify// + FRH//Collect2[#,GLI]&;] + + +(* ::Text:: *) +(*Master integrals using the standard textbook normalization*) + + +ruleMasters={GLI["fctopology1", {0, 1, 0, 1}] -> (I/16)/(ep*Pi^2) + (2*I - I*EulerGamma + Pi)/(16*Pi^2) + +(ep*(48*I - (24*I)*EulerGamma + (6*I)*EulerGamma^2 + 24*Pi - 12*EulerGamma*Pi - (7*I)*Pi^2))/ + (192*Pi^2) + ((I/8)*Log[2])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[2])/(8*Pi^2) + ((I/8)*ep*Log[2]^2)/Pi^2 + + ((I/16)*Log[Pi])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[Pi])/(16*Pi^2) + + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-t - u])/Pi^2 - + (ep*(2*I - I*EulerGamma + Pi)*Log[-t - u])/(16*Pi^2) - ((I/8)*ep*Log[2]*Log[-t - u])/Pi^2 - + ((I/16)*ep*Log[Pi]*Log[-t - u])/Pi^2 + ((I/32)*ep*Log[-t - u]^2)/Pi^2, + GLI["fctopology1", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - + ((I/16)*Log[-t])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-t])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-t])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-t])/Pi^2 + ((I/32)*ep*Log[-t]^2)/Pi^2, + GLI["fctopology2", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-u])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-u])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-u])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-u])/Pi^2 + + ((I/32)*ep*Log[-u]^2)/Pi^2, GLI["fctopology1", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*t*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*t*(t + u)) - ((I/2)*Log[2])/(ep*Pi^2*t*(t + u)) + + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*t*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*t*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*t*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*t*(t + u)) + ((I/8)*Log[-t])/(ep*Pi^2*t*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-t])/(8*Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*t*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*t*(t + u)) - ((I/8)*Log[-t]*Log[-t - u])/(Pi^2*t*(t + u)), + GLI["fctopology2", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*u*(t + u)) + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*u*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*u*(t + u)) - + ((I/2)*Log[2])/(ep*Pi^2*u*(t + u)) + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*u*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*u*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*u*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*u*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*u*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*u*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*u*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/8)*Log[-u])/(ep*Pi^2*u*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-u])/(8*Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-u])/(Pi^2*u*(t + u)) - ((I/8)*Log[-t - u]*Log[-u])/(Pi^2*u*(t + u)), + GLI["fctopology3", {1, 1, 1, 1}] -> (I/4)/(ep^2*Pi^2*t*u) - ((I/4)*EulerGamma)/(ep*Pi^2*t*u) + + ((I/24)*(3*EulerGamma^2 - 2*Pi^2))/(Pi^2*t*u) + ((I/2)*Log[2])/(ep*Pi^2*t*u) - + ((I/2)*EulerGamma*Log[2])/(Pi^2*t*u) + ((I/2)*Log[2]^2)/(Pi^2*t*u) + ((I/4)*Log[Pi])/(ep*Pi^2*t*u) - + ((I/4)*EulerGamma*Log[Pi])/(Pi^2*t*u) + ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*u) + + ((I/8)*Log[Pi]^2)/(Pi^2*t*u) - ((I/8)*Log[-t])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-t])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*u) - + ((I/8)*Log[-u])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-u])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-u])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-u])/(Pi^2*t*u) + ((I/8)*Log[-t]*Log[-u])/(Pi^2*t*u)}; + + +bornVirtualUnrenormalized[1]=Collect2[FCReplaceD[(bornVirtualUnrenormalized[0]/.ruleMasters),D->4-2ep],ep, +IsolateNames->KK]//Series[#,{ep,0,0}]&//Normal//FRH//Collect2[#,ep]&; + + +(* ::Text:: *) +(*The explicit expressions for the PaVe functions can be obtained e.g. using Package-X / PaXEvaluate*) + + +(* ::Text:: *) +(*Put together the counter-term contribution. The wave-function renormalization must be done in the OS scheme, which gives no contribution due to massless electrons and muons.*) + + +MSbarRC={ + SMP["dZ_psi"]->0, + SMP["dZ_A"]-> - Nf SMP["e"]^2/(12Pi^2) (1/ep-EulerGamma+Log[4Pi]) +}; + + +RuleRS={ + dZe1-> - 1/2 SMP["dZ_A"], + dZAA1->SMP["dZ_A"], + (dZf1|dZf2)[__]-> SMP["dZ_psi"] +}; + + +fullCTAndResidue[0]=(Total[ampLoopCT[1]]/.RuleRS/.MSbarRC)//FeynAmpDenominatorExplicit//Contract// + DiracSimplify//FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu}]&; + + +(* ::Text:: *) +(*Get the interference of the counter term and residue contribution with the Born amplitude*) + + +bornCTAndResidue[0]= fullCTAndResidue[0] ComplexConjugate[ampTree[2]]//FermionSpinSum[#,ExtraFactor->1/2^2]&// +DiracSimplify//Simplify//FCReplaceD[#,D->4-2ep]&//Series[#,{ep,0,0}]&//Normal + + +(* ::Text:: *) +(*Finally, we obtain the UV-finite but IR-divergent Born-virtual interference term*) + + +bornVirtualRenormalized[0]=(bornVirtualUnrenormalized[1]+bornCTAndResidue[0])//Collect2[#,ep]&; + + +(* ::Text:: *) +(*Introduce the prefactor from the literature that removes $\Gamma_E$ and logs of $\pi$*) + + +bornVirtualRenormalized[1]=Series[FCReplaceD[1/Exp[ep(Log[4Pi]-EulerGamma)] bornVirtualRenormalized[0],D->4-2ep],{ep,0,0}]//Normal// +ReplaceAll[#,Log[4Pi]->2Log[2]+Log[Pi]]&//Collect2[#,ep]& + + +(* ::Text:: *) +(*We can compare our O(eps^0) result to Eq. 2.32 in arXiv:hep-ph/0010075*) + + +ClearAll[LitA,LitATilde,auxBox6,Box6Eval,TriEval]; +Li4=PolyLog[4,#1]&; +ruleLit={LitV->Log[-s/u],LitW->Log[-t/u],v->s/u,w->t/u}; + + +LitA= ( +4*GaugeXi*(1-2 ep)*u/s^2((2-3*ep)u^2-6*ep*t*u+3(2-ep)t^2)*Box6[s,t] + +-4 GaugeXi/(1-2 ep)*t/s^2*((4-12*ep+7*ep^2)t^2- +6*ep*(1-2*ep)*t*u+(4-10*ep+5*ep^2)*u^2)*Tri[t] + +-8/((1-2*ep)(3-2*ep))*1/s*(2ep(1-ep)*t*((1-ep)*t-ep*u)*Nf- +ep(3-2*ep)*(2-ep+2*ep^2)*t*u+ +(1-ep)(3-2*ep)(2-(1-GaugeXi)*ep+2 ep^2)t^2)*Tri[s]); + + +LitATilde= ( + 8(1-2ep)u/(s t)((1-4 ep+ep^2)t^2- + 2 ep(2-ep)t*u+(1-ep)^2 u^2)Box6[s,t] + ++ 8(1-2ep)1/s(ep(2-3ep-ep^2)t^2+ +2ep(1-3ep-ep^2)t*u-(2-2ep+3ep^2+ep^3)u^2)Box6[s,u] + +- 8(1-ep)/((1-2*ep)(3-2*ep))*1/t(2ep*(1-ep)(u^2+ep s t)Nf +-(3-2ep)(2ep(1+ep^2)t^2+ep(3+2ep^2)t*u- + 2(1-ep+ep^2)u^2))Tri[s] + ++ 8/(1-2*ep)*1/s(ep(2-5ep+2ep^2-ep^3)t^2+ + ep(1-3ep+ep^2-ep^3)t*u- + (1-ep)(2-3ep-ep^2)u^2) Tri[t] + +- 8/(1-2*ep)*u/(s t)(ep(2-4ep+ep^2-ep^3)t^2+ + ep(2-3ep-ep^3)t*u-(1-ep)(2-4ep-ep^2)u^2)Tri[u]); + + +auxBox6=(1/2((LitV-LitW)^2+Pi^2)+2*ep*(Li3[-v]-LitV Li2[-v]-1/3 LitV^3-Pi^2/2 LitV) +-2 ep^2 (Li4[-v]+LitW Li3[-v]-1/2 LitV^2 Li2[-v]-1/8 LitV^4- +1/6 LitV^3 LitW + 1/4*LitV^2*LitW^2- Pi^2/4 LitV^2-Pi^2/3 LitV LitW - 2 Zeta4)); + +Box6Eval[s,t]=u^(-1-ep)/(2(1-2*ep))(1- Pi^2/12 ep^2)( +auxBox6 + (auxBox6/.{LitW->LitV,LitV->LitW,v->w,w->v})); + +Box6Eval[s,u]=Box6Eval[s,t]/.ruleLit/.{t->u,u->t}; + +TriEval[s_]:=-(-s)^(-1-ep)/ep^2 (1-Pi^2/12 ep^2- + 7/3 Zeta[3] ep^3-47/16 Zeta4 ep^4) + + +reLitAux=(( 2/3 Nf/ep*8((t^2+u^2)/s^2-ep) + ++((LitA/.{Tri->TriEval,Box6->Box6Eval}/.ruleLit)+ + (LitA/.{Tri->TriEval,Box6->Box6Eval}/. +{GaugeXi->-GaugeXi}/. ruleLit/.{t->u,u->t}))/.GaugeXi->1)+ + ++2/3 Nf/ep*8*(1-ep)((u^2)/(s t)+ep) + ++((LitATilde/.{Tri->TriEval,Box6->Box6Eval}/.ruleLit))); + + +(* ::Text:: *) +(*knownResult is the 1-loop result. Notice that is also an implicit overall prefactor prefLit from Eq. 2.8*) + + +prefLit=32 Pi^2/SMP["e"]^6; + + +knownResult=(reLitAux+(reLitAux/.{s->t,t->s})); + + +knownResultExpanded=Series[FCReplaceD[knownResult,D->4-2ep],{ep,0,0}]//Normal; + + +((prefLit bornVirtualRenormalized[1]-knownResultExpanded)/.s->-t-u)//PowerExpand//ReplaceRepeated[#,Log[-t-u]->Log[t+u]- I Pi]&//Simplify + + +diff=((prefLit bornVirtualRenormalized[1]-knownResultExpanded)/.s->-t-u)//PowerExpand// +ReplaceRepeated[#,Log[-t-u]->Log[t+u]- I Pi]&//Simplify + + +(* ::Section:: *) +(*Check the final results*) + + +FCCompareResults[0,diff, +Text->{"\tCompare to arXiv:hep-ph/0010075:", +"CORRECT.","WRONG!"}, Interrupt->{Hold[Quit[1]],Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[],4],0.001], " s."]; + + + diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu2.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu2.m new file mode 100644 index 00000000..0154b8c3 --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Mathematica/ElAel-MuAmu2.m @@ -0,0 +1,366 @@ +(* ::Package:: *) + +(* :Title: ElAel-MuAmu2 *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: El Ael -> Mu Amu, QED, Born-virtual, 1-loop *) + +(* ------------------------------------------------------------------------ *) + + +(* ::Title:: *) +(*Muon production*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +description="El Ael -> El Ael, QED, Born-virtual, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +$LoadAddOns={"FeynArts"}; +< 2, + ExcludeTopologies->{Tadpoles,WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2,{2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; +Paint[diagsTree, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,256}]; + + +diagsLoop=InsertFields[CreateTopologies[1, 2 -> 2, + ExcludeTopologies->{Tadpoles,WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2,{2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; +Paint[DiagramExtract[diagsLoop,1..5], ColumnsXRows -> {5, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,196}]; + + +diagsLoopCT=InsertFields[CreateCTTopologies[1, 2 -> 2,ExcludeTopologies->{Tadpoles,WFCorrectionCTs}], + {F[2, {1}], -F[2, {1}]} ->{F[2,{2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions->QEDOnly,ExcludeParticles->{F[1|3|4,_],F[2,{3}]}]; + +Paint[diagsLoopCT, ColumnsXRows -> {3, 1}, Numbering -> Simple, + SheetHeader->None,ImageSize->{1024,196}]; + + +(* ::Section:: *) +(*Obtain the amplitudes*) + + +ampLoopCT[0]=FCFAConvert[CreateFeynAmp[diagsLoopCT,Truncated -> False,PreFactor->1]//. +{(h:dZfL1|dZfR1)[z__]:>dZf1[z],Conjugate[(h:dZfL1|dZfR1)[z__]]:>dZf1[z],dZZA1->0}, +IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2},LoopMomenta->{l},ChangeDimension->D, +DropSumOver->True,UndoChiralSplittings->True,SMP->True, +FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +ampLoop[0]=FCFAConvert[CreateFeynAmp[DiagramExtract[diagsLoop,1..5], + Truncated -> False,PreFactor->1],IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2}, + LoopMomenta->{q},ChangeDimension->D,DropSumOver->True,UndoChiralSplittings->True, + SMP->True,FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +ampTree[0]=FCFAConvert[CreateFeynAmp[diagsTree,Truncated -> False,PreFactor->1], + IncomingMomenta->{p1,p2},OutgoingMomenta->{k1,k2}, + ChangeDimension->D,DropSumOver->True,UndoChiralSplittings->True, + SMP->True, FinalSubstitutions->{SMP["m_e"]->0,SMP["m_mu"]->0}]; + + +(* ::Section:: *) +(*Fix the kinematics*) + + +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0] + + +(* ::Section:: *) +(*Evaluate the amplitudes*) + + +ampTree[1]= + (FCTraceFactor/@DotSimplify[#,Expanding->False]&/@ampTree[0]); + + +ampTree[2]=(Total[ampTree[1]]//Contract//DiracSimplify)//FeynAmpDenominatorExplicit// + FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu}]& + + +ampLoopCT[1]= + (FCTraceFactor/@DotSimplify[#,Expanding->False]&/@ampLoopCT[0]); + + +amlLoop[0]=Join[ampLoop[0][[1;;4]],Nf ampLoop[0][[5;;5]]]; + + +AbsoluteTiming[amlLoop[1]=amlLoop[0]//Contract//DiracSimplify;] + + +(* ::Section:: *) +(*Identify and minimize the topologies*) + + +{amlLoop[2],topos}=FCLoopFindTopologies[amlLoop[1],{q}]; + + +subtopos=FCLoopFindSubtopologies[topos]; + + +mappings=FCLoopFindTopologyMappings[topos,PreferredTopologies->subtopos]; + + +(* ::Section:: *) +(*Rewrite the amplitude in terms of GLIs*) + + +AbsoluteTiming[ampReduced=FCLoopTensorReduce[amlLoop[2],topos];] + + +AbsoluteTiming[ampPreFinal=FCLoopApplyTopologyMappings[ampReduced,mappings];] + + +AbsoluteTiming[ampFinal=ampPreFinal//DiracSimplify//FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu,nu,rho}]&//FeynAmpDenominatorExplicit//Collect2[#,DOT]&;] + + +(*FCClearScalarProducts[]; +FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-MuAmu.m"}]]; +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0];*) + + +reductionTable=Get[FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-MuAmu.m"}]]; + + +resPreFinal=Collect2[Total[ampFinal/.reductionTable],GLI]; + + +integralMappings=FCLoopFindIntegralMappings[Cases2[resPreFinal,GLI],mappings[[2]]] + + +resFinal=Collect2[(resPreFinal/.integralMappings[[1]]),GLI]; + + +(* ::Text:: *) +(*Obtain the Born-virtual interference term*) + + +(*about 10 seconds*) +AbsoluteTiming[bornVirtualUnrenormalized[0]= + Collect2[resFinal,Spinor,LorentzIndex,IsolateNames->KK] * + ComplexConjugate[ampTree[2]]// + FermionSpinSum[#,ExtraFactor->1/2^2]&//DiracSimplify// + FRH//Collect2[#,GLI]&;] + + +(* ::Text:: *) +(*Master integrals using the standard textbook normalization*) + + +ruleMasters={GLI["fctopology1", {0, 1, 0, 1}] -> (I/16)/(ep*Pi^2) + (2*I - I*EulerGamma + Pi)/(16*Pi^2) + +(ep*(48*I - (24*I)*EulerGamma + (6*I)*EulerGamma^2 + 24*Pi - 12*EulerGamma*Pi - (7*I)*Pi^2))/ + (192*Pi^2) + ((I/8)*Log[2])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[2])/(8*Pi^2) + ((I/8)*ep*Log[2]^2)/Pi^2 + + ((I/16)*Log[Pi])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[Pi])/(16*Pi^2) + + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-t - u])/Pi^2 - + (ep*(2*I - I*EulerGamma + Pi)*Log[-t - u])/(16*Pi^2) - ((I/8)*ep*Log[2]*Log[-t - u])/Pi^2 - + ((I/16)*ep*Log[Pi]*Log[-t - u])/Pi^2 + ((I/32)*ep*Log[-t - u]^2)/Pi^2, + GLI["fctopology1", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - + ((I/16)*Log[-t])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-t])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-t])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-t])/Pi^2 + ((I/32)*ep*Log[-t]^2)/Pi^2, + GLI["fctopology2", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-u])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-u])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-u])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-u])/Pi^2 + + ((I/32)*ep*Log[-u]^2)/Pi^2, GLI["fctopology1", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*t*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*t*(t + u)) - ((I/2)*Log[2])/(ep*Pi^2*t*(t + u)) + + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*t*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*t*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*t*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*t*(t + u)) + ((I/8)*Log[-t])/(ep*Pi^2*t*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-t])/(8*Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*t*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*t*(t + u)) - ((I/8)*Log[-t]*Log[-t - u])/(Pi^2*t*(t + u)), + GLI["fctopology2", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*u*(t + u)) + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*u*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*u*(t + u)) - + ((I/2)*Log[2])/(ep*Pi^2*u*(t + u)) + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*u*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*u*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*u*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*u*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*u*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*u*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*u*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/8)*Log[-u])/(ep*Pi^2*u*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-u])/(8*Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-u])/(Pi^2*u*(t + u)) - ((I/8)*Log[-t - u]*Log[-u])/(Pi^2*u*(t + u)), + GLI["fctopology3", {1, 1, 1, 1}] -> (I/4)/(ep^2*Pi^2*t*u) - ((I/4)*EulerGamma)/(ep*Pi^2*t*u) + + ((I/24)*(3*EulerGamma^2 - 2*Pi^2))/(Pi^2*t*u) + ((I/2)*Log[2])/(ep*Pi^2*t*u) - + ((I/2)*EulerGamma*Log[2])/(Pi^2*t*u) + ((I/2)*Log[2]^2)/(Pi^2*t*u) + ((I/4)*Log[Pi])/(ep*Pi^2*t*u) - + ((I/4)*EulerGamma*Log[Pi])/(Pi^2*t*u) + ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*u) + + ((I/8)*Log[Pi]^2)/(Pi^2*t*u) - ((I/8)*Log[-t])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-t])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*u) - + ((I/8)*Log[-u])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-u])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-u])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-u])/(Pi^2*t*u) + ((I/8)*Log[-t]*Log[-u])/(Pi^2*t*u)}; + + +bornVirtualUnrenormalized[1]=Collect2[FCReplaceD[(bornVirtualUnrenormalized[0]/.ruleMasters),D->4-2ep],ep, +IsolateNames->KK]//Series[#,{ep,0,0}]&//Normal//FRH//Collect2[#,ep]&; + + +(* ::Text:: *) +(*The explicit expressions for the PaVe functions can be obtained e.g. using Package-X / PaXEvaluate*) + + +(* ::Text:: *) +(*Put together the counter-term contribution. The wave-function renormalization must be done in the OS scheme, *) +(*which gives no contribution due to massless electrons and muons.*) + + +MSbarRC={ + SMP["dZ_psi"]->0, + SMP["dZ_A"]-> - Nf SMP["e"]^2/(12Pi^2) (1/ep-EulerGamma+Log[4Pi]) +}; + + +RuleRS={ + dZe1-> - 1/2 SMP["dZ_A"], + dZAA1->SMP["dZ_A"], + (dZf1|dZf2)[__]-> SMP["dZ_psi"] +}; + + +fullCTAndResidue[0]=(Total[ampLoopCT[1]]/.RuleRS/.MSbarRC)//FeynAmpDenominatorExplicit//Contract// + DiracSimplify//FCCanonicalizeDummyIndices[#,LorentzIndexNames->{mu}]&; + + +(* ::Text:: *) +(*Get the interference of the counter term and residue contribution with the Born amplitude*) + + +bornCTAndResidue[0]= fullCTAndResidue[0] ComplexConjugate[ampTree[2]]//FermionSpinSum[#,ExtraFactor->1/2^2]&// +DiracSimplify//Simplify//FCReplaceD[#,D->4-2ep]&//Series[#,{ep,0,0}]&//Normal + + +(* ::Text:: *) +(*Finally, we obtain the UV-finite but IR-divergent Born-virtual interference term*) + + +bornVirtualRenormalized[0]=(bornVirtualUnrenormalized[1]+bornCTAndResidue[0])//Collect2[#,ep]&; + + +(* ::Text:: *) +(*Introduce the prefactor from the literature that removes $\Gamma_E$ and logs of $\pi$*) + + +bornVirtualRenormalized[1]=Series[FCReplaceD[1/Exp[ep(Log[4Pi]-EulerGamma)] bornVirtualRenormalized[0],D->4-2ep],{ep,0,0}]//Normal// +ReplaceAll[#,Log[4Pi]->2Log[2]+Log[Pi]]&//Collect2[#,ep]& + + +(* ::Text:: *) +(*We can compare our O(eps^0) result to Eq. 2.32 in arXiv:hep-ph/0010075*) + + +ClearAll[LitA,LitATilde,auxBox6,Box6Eval,TriEval]; +Li4=PolyLog[4,#1]&; +ruleLit={LitV->Log[-s/u],LitW->Log[-t/u],v->s/u,w->t/u}; + + +LitA= ( +4*GaugeXi*(1-2 ep)*u/s^2((2-3*ep)u^2-6*ep*t*u+3(2-ep)t^2)*Box6[s,t] + +-4 GaugeXi/(1-2 ep)*t/s^2*((4-12*ep+7*ep^2)t^2- +6*ep*(1-2*ep)*t*u+(4-10*ep+5*ep^2)*u^2)*Tri[t] + +-8/((1-2*ep)(3-2*ep))*1/s*(2ep(1-ep)*t*((1-ep)*t-ep*u)*Nf- +ep(3-2*ep)*(2-ep+2*ep^2)*t*u+ +(1-ep)(3-2*ep)(2-(1-GaugeXi)*ep+2 ep^2)t^2)*Tri[s]); + + +auxBox6=(1/2((LitV-LitW)^2+Pi^2)+2*ep*(Li3[-v]-LitV Li2[-v]-1/3 LitV^3-Pi^2/2 LitV) +-2 ep^2 (Li4[-v]+LitW Li3[-v]-1/2 LitV^2 Li2[-v]-1/8 LitV^4- +1/6 LitV^3 LitW + 1/4*LitV^2*LitW^2- Pi^2/4 LitV^2-Pi^2/3 LitV LitW - 2 Zeta4)); + +Box6Eval[s,t]=u^(-1-ep)/(2(1-2*ep))(1- Pi^2/12 ep^2)( +auxBox6 + (auxBox6/.{LitW->LitV,LitV->LitW,v->w,w->v})); + +Box6Eval[s,u]=Box6Eval[s,t]/.ruleLit/.{t->u,u->t}; + +TriEval[s_]:=-(-s)^(-1-ep)/ep^2 (1-Pi^2/12 ep^2- + 7/3 Zeta[3] ep^3-47/16 Zeta4 ep^4) + + +knownResult=(( 2/3 Nf/ep*8((t^2+u^2)/s^2-ep) + ++((LitA/.{Tri->TriEval,Box6->Box6Eval}/.ruleLit)+ + (LitA/.{Tri->TriEval,Box6->Box6Eval}/. +{GaugeXi->-GaugeXi}/. ruleLit/.{t->u,u->t}))/.GaugeXi->1)); + + +(* ::Text:: *) +(*knownResult is the 1-loop result. Notice that is also an implicit overall prefactor prefLit from Eq. 2.8*) + + +prefLit=32 Pi^2/SMP["e"]^6; + + +knownResultExpanded=Series[FCReplaceD[knownResult,D->4-2ep],{ep,0,0}]//Normal; + + +diff=((prefLit bornVirtualRenormalized[1]-knownResultExpanded)/.s->-t-u)//PowerExpand// +ReplaceRepeated[#,Log[-t-u]->Log[t+u]- I Pi]&//Simplify + + +(* ::Section:: *) +(*Check the final results*) + + +FCCompareResults[0,diff, +Text->{"\tCompare to arXiv:hep-ph/0010075:", +"CORRECT.","WRONG!"}, Interrupt->{Hold[Quit[1]],Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[],4],0.001], " s."]; + + + diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-ElAel.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-ElAel.m new file mode 100644 index 00000000..6f5504ab --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-ElAel.m @@ -0,0 +1,116 @@ +{GLI["fctopology1", {1, 1, 1, 1}] -> GLI["fctopology1", {1, 1, 1, 1}], + GLI["fctopology1", {1, 1, -2, 1}] -> + (((-2*D + D^2)*t^2 + (-8*D + 2*D^2)*t*u + (8 - 6*D + D^2)*u^2)* + GLI["fctopology1", {0, 1, 0, 1}])/((16 - 12*D + 2*D^2)*t + + (16 - 12*D + 2*D^2)*u), GLI["fctopology1", {1, 1, -1, 1}] -> + (((-2 + D)*t + (-4 + D)*u)*GLI["fctopology1", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology1", {1, 1, 0, 1}] -> + ((-6 + 2*D)*GLI["fctopology1", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology1", {1, 1, 1, -1}] -> + (((-2 + D)*t + 2*u)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {1, 1, 1, 0}] -> + ((6 - 2*D)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {-1, 1, 1, 1}] -> + (((-2 + D)*t + (-4 + D)*u)*GLI["fctopology1", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology1", {0, 1, 1, 1}] -> + ((-6 + 2*D)*GLI["fctopology1", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology1", {1, -1, 1, 1}] -> + (((-2 + D)*t + 2*u)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {1, 0, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {0, 1, -2, 1}] -> + ((D*t^2 + 2*D*t*u + D*u^2)*GLI["fctopology1", {0, 1, 0, 1}])/(-4 + 4*D), + GLI["fctopology1", {0, 1, -1, 1}] -> + ((t + u)*GLI["fctopology1", {0, 1, 0, 1}])/2, + GLI["fctopology1", {-1, 1, 0, 1}] -> + ((t + u)*GLI["fctopology1", {0, 1, 0, 1}])/2, + GLI["fctopology1", {0, 1, 0, 1}] -> GLI["fctopology1", {0, 1, 0, 1}], + GLI["fctopology1", {1, 0, 1, -2}] -> + (D*t^2*GLI["fctopology1", {1, 0, 1, 0}])/(-4 + 4*D), + GLI["fctopology1", {1, -1, 1, -1}] -> + (((-2 + D)*t^2 - 2*t*u)*GLI["fctopology1", {1, 0, 1, 0}])/(-4 + 4*D), + GLI["fctopology1", {1, -2, 1, 0}] -> + (D*t^2*GLI["fctopology1", {1, 0, 1, 0}])/(-4 + 4*D), + GLI["fctopology1", {1, 0, 1, -1}] -> + -1/2*(t*GLI["fctopology1", {1, 0, 1, 0}]), + GLI["fctopology1", {1, -1, 1, 0}] -> + -1/2*(t*GLI["fctopology1", {1, 0, 1, 0}]), + GLI["fctopology1", {1, 0, 1, 0}] -> GLI["fctopology1", {1, 0, 1, 0}], + GLI["fctopology1", {1, 1, 0, 0}] -> 0, GLI["fctopology1", {1, 1, 0, -1}] -> + 0, GLI["fctopology1", {1, 1, -1, 0}] -> 0, + GLI["fctopology1", {1, 0, 0, 1}] -> 0, GLI["fctopology1", {1, 0, 0, 0}] -> + 0, GLI["fctopology1", {1, 0, 0, -1}] -> 0, + GLI["fctopology1", {1, 0, -1, 1}] -> 0, GLI["fctopology1", {1, 0, -1, 0}] -> + 0, GLI["fctopology1", {1, -1, 0, 1}] -> 0, + GLI["fctopology1", {1, -1, 0, 0}] -> 0, GLI["fctopology1", {0, 1, 1, 0}] -> + 0, GLI["fctopology1", {0, 1, 0, 0}] -> 0, + GLI["fctopology1", {0, 1, 0, -1}] -> 0, GLI["fctopology1", {0, 1, -1, 0}] -> + 0, GLI["fctopology1", {0, 0, 1, 1}] -> 0, + GLI["fctopology1", {0, 0, 1, 0}] -> 0, GLI["fctopology1", {0, 0, 1, -1}] -> + 0, GLI["fctopology1", {0, 0, 0, 1}] -> 0, + GLI["fctopology1", {0, 0, 0, 0}] -> 0, GLI["fctopology1", {0, 0, -1, 1}] -> + 0, GLI["fctopology1", {0, -1, 1, 0}] -> 0, + GLI["fctopology1", {0, -1, 0, 1}] -> 0, GLI["fctopology1", {-1, 0, 1, 0}] -> + 0, GLI["fctopology2", {1, 1, 1, 1}] -> GLI["fctopology2", {1, 1, 1, 1}], + GLI["fctopology2", {1, 1, -1, 1}] -> + (((-4 + D)*t + (-2 + D)*u)*GLI["fctopology2", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology2", {1, 1, 0, 1}] -> + ((-6 + 2*D)*GLI["fctopology2", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology2", {1, 1, 1, -1}] -> + ((2*t + (-2 + D)*u)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {1, 1, 1, 0}] -> + ((6 - 2*D)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {-1, 1, 1, 1}] -> + (((-4 + D)*t + (-2 + D)*u)*GLI["fctopology2", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology2", {0, 1, 1, 1}] -> + ((-6 + 2*D)*GLI["fctopology2", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology2", {1, -1, 1, 1}] -> + ((2*t + (-2 + D)*u)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {1, 0, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {0, 1, -1, 1}] -> + ((t + u)*GLI["fctopology2", {0, 1, 0, 1}])/2, + GLI["fctopology2", {0, 1, 0, 1}] -> GLI["fctopology2", {0, 1, 0, 1}], + GLI["fctopology2", {1, 0, 1, 0}] -> GLI["fctopology2", {1, 0, 1, 0}], + GLI["fctopology2", {1, 1, 0, 0}] -> 0, GLI["fctopology2", {1, 0, 0, 1}] -> + 0, GLI["fctopology2", {0, 1, 1, 0}] -> 0, + GLI["fctopology2", {0, 1, 1, -1}] -> 0, GLI["fctopology2", {0, 1, 0, 0}] -> + 0, GLI["fctopology2", {0, 0, 1, 1}] -> 0, + GLI["fctopology2", {0, 0, 1, 0}] -> 0, GLI["fctopology2", {0, 0, 0, 1}] -> + 0, GLI["fctopology2", {0, -1, 1, 1}] -> 0, + GLI["fctopology3", {1, 1, 1, 1}] -> GLI["fctopology3", {1, 1, 1, 1}], + GLI["fctopology3", {1, 1, -2, 1}] -> + (((-8 + 6*D - D^2)*t^2 + (-16 + 4*D)*t*u - 8*u^2)* + GLI["fctopology3", {0, 1, 0, 1}])/((16 - 12*D + 2*D^2)*t), + GLI["fctopology3", {1, 1, -1, 1}] -> + (((-4 + D)*t - 2*u)*GLI["fctopology3", {0, 1, 0, 1}])/((-4 + D)*t), + GLI["fctopology3", {1, 1, 0, 1}] -> + ((6 - 2*D)*GLI["fctopology3", {0, 1, 0, 1}])/((-4 + D)*t), + GLI["fctopology3", {1, 1, 1, -1}] -> + ((-2*t + (-4 + D)*u)*GLI["fctopology3", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology3", {1, 1, 1, 0}] -> + ((6 - 2*D)*GLI["fctopology3", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology3", {-1, 1, 1, 1}] -> + (((-4 + D)*t - 2*u)*GLI["fctopology3", {0, 1, 0, 1}])/((-4 + D)*t), + GLI["fctopology3", {0, 1, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology3", {0, 1, 0, 1}])/((-4 + D)*t), + GLI["fctopology3", {1, -1, 1, 1}] -> + ((-2*t + (-4 + D)*u)*GLI["fctopology3", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology3", {1, 0, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology3", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology3", {0, 1, -1, 1}] -> + -1/2*(t*GLI["fctopology3", {0, 1, 0, 1}]), + GLI["fctopology3", {-1, 1, 0, 1}] -> + -1/2*(t*GLI["fctopology3", {0, 1, 0, 1}]), + GLI["fctopology3", {0, 1, 0, 1}] -> GLI["fctopology3", {0, 1, 0, 1}], + GLI["fctopology3", {1, 0, 1, 0}] -> GLI["fctopology3", {1, 0, 1, 0}], + GLI["fctopology3", {1, 1, 0, 0}] -> 0, GLI["fctopology3", {1, 1, 0, -1}] -> + 0, GLI["fctopology3", {1, 1, -1, 0}] -> 0, + GLI["fctopology3", {1, 0, 0, 1}] -> 0, GLI["fctopology3", {1, 0, 0, 0}] -> + 0, GLI["fctopology3", {1, 0, -1, 1}] -> 0, + GLI["fctopology3", {1, -1, 0, 1}] -> 0, GLI["fctopology3", {0, 1, 1, 0}] -> + 0, GLI["fctopology3", {0, 1, 1, -1}] -> 0, + GLI["fctopology3", {0, 1, 0, 0}] -> 0, GLI["fctopology3", {0, 0, 1, 1}] -> + 0, GLI["fctopology3", {0, 0, 1, 0}] -> 0, + GLI["fctopology3", {0, 0, 0, 1}] -> 0, GLI["fctopology3", {0, -1, 1, 1}] -> + 0} diff --git a/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-MuAmu.m b/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-MuAmu.m new file mode 100644 index 00000000..9c0f6053 --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Mathematica/ReductionTable-ElAel-MuAmu.m @@ -0,0 +1,65 @@ +{GLI["fctopology1", {1, 1, 1, 1}] -> GLI["fctopology1", {1, 1, 1, 1}], + GLI["fctopology1", {1, 1, -2, 1}] -> + (((-2*D + D^2)*t^2 + (-8*D + 2*D^2)*t*u + (8 - 6*D + D^2)*u^2)* + GLI["fctopology1", {0, 1, 0, 1}])/((16 - 12*D + 2*D^2)*t + + (16 - 12*D + 2*D^2)*u), GLI["fctopology1", {1, 1, -1, 1}] -> + (((-2 + D)*t + (-4 + D)*u)*GLI["fctopology1", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology1", {1, 1, 0, 1}] -> + ((-6 + 2*D)*GLI["fctopology1", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology1", {1, 1, 1, -1}] -> + (((-2 + D)*t + 2*u)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {1, 1, 1, 0}] -> + ((6 - 2*D)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {-1, 1, 1, 1}] -> + (((-2 + D)*t + (-4 + D)*u)*GLI["fctopology1", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology1", {0, 1, 1, 1}] -> + ((-6 + 2*D)*GLI["fctopology1", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology1", {1, -1, 1, 1}] -> + (((-2 + D)*t + 2*u)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {1, 0, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology1", {1, 0, 1, 0}])/((-4 + D)*t), + GLI["fctopology1", {0, 1, -2, 1}] -> + ((D*t^2 + 2*D*t*u + D*u^2)*GLI["fctopology1", {0, 1, 0, 1}])/(-4 + 4*D), + GLI["fctopology1", {0, 1, -1, 1}] -> + ((t + u)*GLI["fctopology1", {0, 1, 0, 1}])/2, + GLI["fctopology1", {-1, 1, 0, 1}] -> + ((t + u)*GLI["fctopology1", {0, 1, 0, 1}])/2, + GLI["fctopology1", {0, 1, 0, 1}] -> GLI["fctopology1", {0, 1, 0, 1}], + GLI["fctopology1", {1, 0, 1, 0}] -> GLI["fctopology1", {1, 0, 1, 0}], + GLI["fctopology1", {1, 1, 0, 0}] -> 0, GLI["fctopology1", {1, 1, 0, -1}] -> + 0, GLI["fctopology1", {1, 1, -1, 0}] -> 0, + GLI["fctopology1", {1, 0, 0, 1}] -> 0, GLI["fctopology1", {1, 0, 0, 0}] -> + 0, GLI["fctopology1", {1, 0, -1, 1}] -> 0, + GLI["fctopology1", {1, -1, 0, 1}] -> 0, GLI["fctopology1", {0, 1, 1, 0}] -> + 0, GLI["fctopology1", {0, 1, 0, 0}] -> 0, + GLI["fctopology1", {0, 1, 0, -1}] -> 0, GLI["fctopology1", {0, 1, -1, 0}] -> + 0, GLI["fctopology1", {0, 0, 1, 1}] -> 0, + GLI["fctopology1", {0, 0, 0, 1}] -> 0, GLI["fctopology1", {0, 0, 0, 0}] -> + 0, GLI["fctopology1", {0, 0, -1, 1}] -> 0, + GLI["fctopology1", {0, -1, 0, 1}] -> 0, GLI["fctopology2", {1, 1, 1, 1}] -> + GLI["fctopology2", {1, 1, 1, 1}], GLI["fctopology2", {1, 1, -1, 1}] -> + (((-4 + D)*t + (-2 + D)*u)*GLI["fctopology2", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology2", {1, 1, 0, 1}] -> + ((-6 + 2*D)*GLI["fctopology2", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology2", {1, 1, 1, -1}] -> + ((2*t + (-2 + D)*u)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {1, 1, 1, 0}] -> + ((6 - 2*D)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {-1, 1, 1, 1}] -> + (((-4 + D)*t + (-2 + D)*u)*GLI["fctopology2", {0, 1, 0, 1}])/ + ((-4 + D)*t + (-4 + D)*u), GLI["fctopology2", {0, 1, 1, 1}] -> + ((-6 + 2*D)*GLI["fctopology2", {0, 1, 0, 1}])/((-4 + D)*t + (-4 + D)*u), + GLI["fctopology2", {1, -1, 1, 1}] -> + ((2*t + (-2 + D)*u)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {1, 0, 1, 1}] -> + ((6 - 2*D)*GLI["fctopology2", {1, 0, 1, 0}])/((-4 + D)*u), + GLI["fctopology2", {0, 1, -1, 1}] -> + ((t + u)*GLI["fctopology2", {0, 1, 0, 1}])/2, + GLI["fctopology2", {0, 1, 0, 1}] -> GLI["fctopology2", {0, 1, 0, 1}], + GLI["fctopology2", {1, 0, 1, 0}] -> GLI["fctopology2", {1, 0, 1, 0}], + GLI["fctopology2", {1, 1, 0, 0}] -> 0, GLI["fctopology2", {1, 0, 0, 1}] -> + 0, GLI["fctopology2", {0, 1, 1, 0}] -> 0, + GLI["fctopology2", {0, 1, 1, -1}] -> 0, GLI["fctopology2", {0, 1, 0, 0}] -> + 0, GLI["fctopology2", {0, 0, 1, 1}] -> 0, + GLI["fctopology2", {0, 0, 1, 0}] -> 0, GLI["fctopology2", {0, 0, 0, 1}] -> + 0, GLI["fctopology2", {0, -1, 1, 1}] -> 0} From 1f3aa3706a4ef83ee9b610842e0fb505542d418f Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 12 Jul 2024 14:10:33 +0200 Subject: [PATCH 45/67] Reworked the two-loop Gh-Gh example to benefit from the new multiloop functionality. --- .../QCD/TwoLoops/Mathematica/Gh-Gh-2.m | 174 ++++++++++ .../Mathematica/ReductionTable-Gh-Gh.m | 324 ++++++++++++++++++ 2 files changed, 498 insertions(+) create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Mathematica/Gh-Gh-2.m create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Mathematica/ReductionTable-Gh-Gh.m diff --git a/FeynCalc/Examples/QCD/TwoLoops/Mathematica/Gh-Gh-2.m b/FeynCalc/Examples/QCD/TwoLoops/Mathematica/Gh-Gh-2.m new file mode 100644 index 00000000..6747062a --- /dev/null +++ b/FeynCalc/Examples/QCD/TwoLoops/Mathematica/Gh-Gh-2.m @@ -0,0 +1,174 @@ +(* ::Package:: *) + +(* :Title: Gh-Gh *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Gh -> Gh, massless QCD, 2-loops *) + +(* ------------------------------------------------------------------------ *) + + +(* ::Title:: *) +(*QCD ghost self-energy*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +description="Gh -> Gh, massless QCD, 2-loops"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +$LoadAddOns={"FeynArts"}; +< 1,ExcludeTopologies -> {Tadpoles}], {U[5]} -> {U[5]}, +InsertionLevel -> {Classes}, ExcludeParticles->{V[1|2|3],S[_]},Model->SMQCD]; + + +Paint[diags,ColumnsXRows->{4,1},SheetHeader -> False, +Numbering -> True,ImageSize->{1024,256}]; + + +(* ::Section:: *) +(*Obtain the amplitude*) + + +ampRaw = FCFAConvert[CreateFeynAmp[DiagramExtract[diags,{2,3,4,6,7,8,9}], Truncated -> True, + PreFactor->1,GaugeRules->{}], IncomingMomenta->{p}, OutgoingMomenta->{p},LoopMomenta->{q1,q2}, + UndoChiralSplittings->True, ChangeDimension->D, List->True, SMP->True, + DropSumOver->True,FinalSubstitutions->{MQU[Index[Generation, 3]]->0,GaugeXi[_]->1-GaugeXi}]//SMPToSymbol; + + +(* ::Section:: *) +(*Fix the kinematics*) + + +FCClearScalarProducts[]; +ScalarProduct[p,p]=pp; + + +(* ::Section:: *) +(*Calculate the amplitude*) + + +AbsoluteTiming[ampSimp=(ampRaw)//Contract//DiracSimplify//SUNSimplify;] + + +(* ::Section:: *) +(*Identify and minimize the topologies*) + + +{amp,topos}=FCLoopFindTopologies[ampSimp,{q1,q2}]; + + +subtopos=FCLoopFindSubtopologies[topos]; + + +mappings=FCLoopFindTopologyMappings[topos,PreferredTopologies->subtopos]; + + +(* ::Section:: *) +(*Rewrite the amplitude in terms of GLIs*) + + +AbsoluteTiming[ampReduced=FCLoopTensorReduce[amp,topos];] + + +AbsoluteTiming[ampPreFinal=FCLoopApplyTopologyMappings[ampReduced,mappings];] + + +AbsoluteTiming[ampFinal=ampPreFinal//DiracSimplify//SUNSimplify;] + + +(*FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-Gh-Gh.m"}]];*) + + +reductionTable=Get[FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-Gh-Gh.m"}]]; + + +resPreFinal=Collect2[Total[ampFinal/.reductionTable]//FeynAmpDenominatorExplicit,GLI] + + +integralMappings=FCLoopFindIntegralMappings[Cases2[resPreFinal,GLI],mappings[[2]]] + + +resFinal=Collect2[resPreFinal/.integralMappings[[1]],GLI] + + +ruleMasters={ +GLI["fctopology1", {0, 1, 1, 0, 1}] -> (-pp)^(1 - 2*ep)*(13/8 + 1/(4*ep) + (115*ep)/16 + (49*ep^2)/2 - (ep*Zeta2)/4 - (13*ep^2*Zeta2)/8 + (9*ep^2*(9/4 - 2*Zeta[3]))/8 - (5*ep^2*Zeta[3])/12), + GLI["fctopology1", {1, 1, 0, 1, 1}] -> (2 + ep^(-1) + 4*ep + (16*ep^2)/3 - (ep*Zeta2)/2 - ep^2*Zeta2 + (4*ep^2*(2 - 2*Zeta[3]))/3 + (ep^2*Zeta[3])/3)^2/(-pp)^(2*ep) +} + + +resEpPre=FCReplaceD[resFinal/.ruleMasters,D->4-2ep] + + +(* ::Text:: *) +(*To bring our result into the suitable form comparable with the literature, we must divide it (1- Zeta2/2 ep^2)^2 and again expand it in ep. This yields a prefactor called eta^2. *) +(*We also factor out the prefactor (-pp)^(-2ep)*) + + +resEp=Collect2[Series[eta^2/(1- Zeta2/2 ep^2)^2 FCReplaceD[Cancel[resEpPre/(-pp)^(-2ep)],D->4-2ep],{ep,0,0}]//Normal//SUNSimplify,ep,CA,ep] + + +(* ::Section:: *) +(*Check the final results*) + + +G2xPaper=(((CA^2*eta^2*gs^4)/(-pp)^(2*ep)) * ((83/16 + 7/32*GaugeXi)/ep + (5/4 + 7/16*GaugeXi - 1/32 GaugeXi^2)/ep^2 + +599/32 - 3/4 Zeta[3] - 9/64 GaugeXi + 3/8 GaugeXi^2 - 3/16 GaugeXi^2 Zeta[3] )/(4*Pi)^D); + + +G2qPaper=(((CA*eta^2*gs^4*Tf)/(-pp)^(2*ep))*(-53/8 - 1/(2*ep^2) - 7/(4*ep))/(4*Pi)^D); + + +G2xPaperFinal=pp FCI@SUNDelta[Glu1,Glu2]Collect2[Series[FCReplaceD[I (4Pi)^D Cancel[(G2xPaper)/(-pp)^(-2ep)],{D->4-2ep}],{ep,0,0}]//Normal//PowerExpand,ep] +G2qPaperFinal=pp FCI@SUNDelta[Glu1,Glu2]Collect2[Series[FCReplaceD[I (4Pi)^D Cancel[(G2qPaper)/(-pp)^(-2ep)],{D->4-2ep}],{ep,0,0}]//Normal//PowerExpand,ep]/.Tf->1/2 + + +resLit=G2xPaperFinal+G2qPaperFinal + + +FCCompareResults[resLit, resEp, + Text -> {"\tCompare to Davydychev, Osland and Tarasov, \ + hep-ph/9801380, Eqs. 6.14-6.15:", "CORRECT.", "WRONG!"}, + Interrupt -> {Hold[Quit[1]], Automatic}, + Factoring -> Simplify]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], + " s."]; + + + diff --git a/FeynCalc/Examples/QCD/TwoLoops/Mathematica/ReductionTable-Gh-Gh.m b/FeynCalc/Examples/QCD/TwoLoops/Mathematica/ReductionTable-Gh-Gh.m new file mode 100644 index 00000000..99fd1449 --- /dev/null +++ b/FeynCalc/Examples/QCD/TwoLoops/Mathematica/ReductionTable-Gh-Gh.m @@ -0,0 +1,324 @@ +{GLI["fctopology1", {1, 1, 1, 2, 1}] -> + ((1200 - 1050*D + 297*D^2 - 27*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^3) + + ((-6 + 2*D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp^2, + GLI["fctopology1", {1, 1, 1, 1, 2}] -> + ((1200 - 1050*D + 297*D^2 - 27*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^3) + + ((-6 + 2*D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp^2, + GLI["fctopology1", {1, 1, 1, 1, 1}] -> + ((160 - 108*D + 18*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((16 - 8*D + D^2)*pp^2) + ((6 - 2*D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {1, -2, 2, 1, 1}] -> + ((32 - 30*D + 9*D^2 - D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + (24 - 10*D + D^2), GLI["fctopology1", {1, -2, 1, 2, 1}] -> + ((-2*D + 3*D^2 - D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + (24 - 10*D + D^2), GLI["fctopology1", {2, -1, 1, 1, 1}] -> + ((8 - 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/pp, + GLI["fctopology1", {1, -1, 2, 1, 1}] -> + ((112 - 98*D + 29*D^2 - 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp), GLI["fctopology1", {1, -1, 1, 2, 1}] -> + ((32 - 44*D + 20*D^2 - 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp), GLI["fctopology1", {1, -1, 1, 1, 1}] -> + ((-2 + D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {2, 0, 1, 1, 1}] -> + ((-80 + 54*D - 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp^2), + GLI["fctopology1", {1, 0, 1, 2, 1}] -> + ((240 - 242*D + 81*D^2 - 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^2), GLI["fctopology1", {1, 0, 1, 1, 2}] -> + ((80 - 54*D + 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^2), GLI["fctopology1", {1, 0, 1, 1, 1}] -> + ((-8 + 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {1, 1, 1, -1, 2}] -> + ((8 - 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/pp, + GLI["fctopology1", {1, 1, 1, -1, 1}] -> + ((-2 + D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {1, 1, 1, 0, 2}] -> + ((-80 + 54*D - 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp^2), + GLI["fctopology1", {1, 1, 1, 0, 1}] -> + ((-8 + 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {1, 1, 1, 2, -1}] -> + ((8 - 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/pp, + GLI["fctopology1", {1, 1, 1, 1, -1}] -> + ((-2 + D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {1, 1, 1, 2, 0}] -> + ((-80 + 54*D - 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp^2), + GLI["fctopology1", {1, 1, 1, 1, 0}] -> + ((-8 + 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {-2, 1, 2, 1, 1}] -> + ((32 - 30*D + 9*D^2 - D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + (24 - 10*D + D^2), GLI["fctopology1", {-2, 1, 1, 2, 1}] -> + ((-2*D + D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(24 - 10*D + D^2), + GLI["fctopology1", {-2, 1, 1, 1, 2}] -> + ((-2*D + 3*D^2 - D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + (24 - 10*D + D^2), GLI["fctopology1", {-1, 1, 2, 1, 1}] -> + ((112 - 98*D + 29*D^2 - 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp), GLI["fctopology1", {-1, 1, 1, 2, 1}] -> + ((16 - 14*D + 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp), GLI["fctopology1", {-1, 1, 1, 1, 2}] -> + ((32 - 44*D + 20*D^2 - 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp), GLI["fctopology1", {-1, 1, 1, 1, 1}] -> + ((-2 + D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {0, 2, 1, 1, 1}] -> + ((-80 + 54*D - 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp^2), + GLI["fctopology1", {0, 1, 1, 2, 1}] -> + ((80 - 54*D + 9*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^2), GLI["fctopology1", {0, 1, 1, 1, 2}] -> + ((240 - 242*D + 81*D^2 - 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((24 - 10*D + D^2)*pp^2), GLI["fctopology1", {0, 1, 1, 1, 1}] -> + ((-8 + 3*D)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {2, 1, -1, 2, 1}] -> + ((-2 + 4*D - D^2)*GLI["fctopology1", {1, 1, 0, 1, 1}])/(2*pp), + GLI["fctopology1", {1, 1, -1, 2, 2}] -> + ((-4 + 4*D - D^2)*GLI["fctopology1", {1, 1, 0, 1, 1}])/(2*pp), + GLI["fctopology1", {2, 1, -1, 1, 1}] -> + ((-2 + D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/2, + GLI["fctopology1", {1, 1, -1, 2, 1}] -> + ((-2 + D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/2, + GLI["fctopology1", {1, 1, -1, 1, 2}] -> + ((-2 + D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/2, + GLI["fctopology1", {1, 1, 0, 2, 2}] -> + ((9 - 6*D + D^2)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp^2, + GLI["fctopology1", {1, 1, -1, 1, 1}] -> + -1/2*(pp*GLI["fctopology1", {1, 1, 0, 1, 1}]), + GLI["fctopology1", {2, 1, 0, 1, 1}] -> + ((3 - D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp, + GLI["fctopology1", {1, 1, 0, 2, 1}] -> + ((3 - D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp, + GLI["fctopology1", {1, 1, 0, 1, 2}] -> + ((3 - D)*GLI["fctopology1", {1, 1, 0, 1, 1}])/pp, + GLI["fctopology1", {1, 1, 0, 1, 1}] -> GLI["fctopology1", {1, 1, 0, 1, 1}], + GLI["fctopology1", {2, -1, 1, 2, -1}] -> + (7 - 5*D + D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {1, -1, 2, 2, -1}] -> + ((-48 + 43*D - 12*D^2 + D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {1, -2, 2, 2, 0}] -> + ((-12 + 16*D - 7*D^2 + D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {2, 0, 1, 2, -1}] -> + ((-72 + 75*D - 26*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {2, -1, 1, 2, 0}] -> + ((-72 + 75*D - 26*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {1, 0, 2, 2, -1}] -> + ((-144 + 126*D - 35*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {1, -1, 2, 2, 0}] -> + ((-72 + 75*D - 26*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {2, 0, 1, 1, -1}] -> + ((-4 + 4*D - D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {2, -1, 1, 1, 0}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {1, 0, 2, 1, -1}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {1, 0, 1, 2, -1}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {1, -1, 2, 1, 0}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {1, -1, 1, 2, 0}] -> + ((-4 + 4*D - D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {2, 0, 1, 2, 0}] -> + ((-240 + 242*D - 81*D^2 + 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp^2), GLI["fctopology1", {1, 0, 2, 2, 0}] -> + ((-240 + 242*D - 81*D^2 + 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp^2), GLI["fctopology1", {2, 0, 1, 1, 0}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {1, 0, 2, 1, 0}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {1, 0, 1, 2, 0}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {1, 0, 1, 1, 0}] -> GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {0, 2, 1, -2, 2}] -> + ((-12 + 16*D - 7*D^2 + D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {0, 1, 2, -2, 2}] -> (18 - 9*D + D^2)* + GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {-1, 1, 2, -1, 2}] -> + ((-48 + 43*D - 12*D^2 + D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {-2, 1, 2, 0, 2}] -> + ((-12 + 16*D - 7*D^2 + D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {0, 2, 1, -1, 2}] -> + ((-72 + 75*D - 26*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {0, 1, 2, -1, 2}] -> + ((-144 + 126*D - 35*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {-1, 1, 2, 0, 2}] -> + ((-72 + 75*D - 26*D^2 + 3*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp), GLI["fctopology1", {0, 2, 1, -1, 1}] -> + ((-4 + 4*D - D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {0, 1, 2, -1, 1}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {0, 1, 1, -1, 2}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {-1, 1, 2, 0, 1}] -> + (3 - D)*GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {-1, 1, 1, 0, 2}] -> + ((-4 + 4*D - D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/(-4 + D), + GLI["fctopology1", {0, 2, 1, 0, 2}] -> + ((-240 + 242*D - 81*D^2 + 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp^2), GLI["fctopology1", {0, 1, 2, 0, 2}] -> + ((-240 + 242*D - 81*D^2 + 9*D^3)*GLI["fctopology1", {0, 1, 1, 0, 1}])/ + ((-4 + D)*pp^2), GLI["fctopology1", {0, 2, 1, 0, 1}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {0, 1, 2, 0, 1}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {0, 1, 1, 0, 2}] -> + ((-24 + 17*D - 3*D^2)*GLI["fctopology1", {0, 1, 1, 0, 1}])/((-4 + D)*pp), + GLI["fctopology1", {0, 1, 1, 0, 1}] -> GLI["fctopology1", {0, 1, 1, 0, 1}], + GLI["fctopology1", {2, 1, 0, 2, 0}] -> 0, + GLI["fctopology1", {2, 1, 0, 2, -1}] -> 0, + GLI["fctopology1", {2, 1, 0, 1, 0}] -> 0, + GLI["fctopology1", {2, 1, 0, 1, -1}] -> 0, + GLI["fctopology1", {2, 1, 0, 0, 1}] -> 0, + GLI["fctopology1", {2, 1, 0, 0, 0}] -> 0, + GLI["fctopology1", {2, 1, -1, 2, 0}] -> 0, + GLI["fctopology1", {2, 1, -1, 1, 0}] -> 0, + GLI["fctopology1", {2, 0, 1, 0, 1}] -> 0, + GLI["fctopology1", {2, 0, 1, 0, 0}] -> 0, + GLI["fctopology1", {2, 0, 0, 2, 1}] -> 0, + GLI["fctopology1", {2, 0, 0, 2, 0}] -> 0, + GLI["fctopology1", {2, 0, 0, 2, -1}] -> 0, + GLI["fctopology1", {2, 0, 0, 1, 1}] -> 0, + GLI["fctopology1", {2, 0, 0, 1, 0}] -> 0, + GLI["fctopology1", {2, 0, -1, 2, 1}] -> 0, + GLI["fctopology1", {2, 0, -1, 2, 0}] -> 0, + GLI["fctopology1", {2, -1, 0, 2, 1}] -> 0, + GLI["fctopology1", {2, -1, 0, 2, 0}] -> 0, + GLI["fctopology1", {1, 1, 1, 0, 0}] -> 0, + GLI["fctopology1", {1, 1, 0, 2, 0}] -> 0, + GLI["fctopology1", {1, 1, 0, 1, 0}] -> 0, + GLI["fctopology1", {1, 1, 0, 0, 2}] -> 0, + GLI["fctopology1", {1, 1, 0, 0, 1}] -> 0, + GLI["fctopology1", {1, 1, 0, 0, 0}] -> 0, + GLI["fctopology1", {1, 0, 2, 0, 2}] -> 0, + GLI["fctopology1", {1, 0, 2, 0, 1}] -> 0, + GLI["fctopology1", {1, 0, 2, 0, 0}] -> 0, + GLI["fctopology1", {1, 0, 2, -1, 2}] -> 0, + GLI["fctopology1", {1, 0, 2, -1, 1}] -> 0, + GLI["fctopology1", {1, 0, 1, 0, 2}] -> 0, + GLI["fctopology1", {1, 0, 1, 0, 1}] -> 0, + GLI["fctopology1", {1, 0, 0, 2, 2}] -> 0, + GLI["fctopology1", {1, 0, 0, 2, 1}] -> 0, + GLI["fctopology1", {1, 0, 0, 2, 0}] -> 0, + GLI["fctopology1", {1, 0, 0, 1, 2}] -> 0, + GLI["fctopology1", {1, 0, 0, 1, 1}] -> 0, + GLI["fctopology1", {1, 0, 0, 1, 0}] -> 0, + GLI["fctopology1", {1, 0, -1, 2, 2}] -> 0, + GLI["fctopology1", {1, 0, -1, 2, 1}] -> 0, + GLI["fctopology1", {1, -1, 2, 0, 2}] -> 0, + GLI["fctopology1", {1, -1, 2, 0, 1}] -> 0, + GLI["fctopology1", {1, -1, 0, 2, 2}] -> 0, + GLI["fctopology1", {1, -1, 0, 2, 1}] -> 0, + GLI["fctopology1", {1, -1, 0, 2, 0}] -> 0, + GLI["fctopology1", {0, 2, 1, 2, 0}] -> 0, + GLI["fctopology1", {0, 2, 1, 1, 0}] -> 0, + GLI["fctopology1", {0, 2, 1, 0, 0}] -> 0, + GLI["fctopology1", {0, 2, 0, 2, 1}] -> 0, + GLI["fctopology1", {0, 2, 0, 1, 2}] -> 0, + GLI["fctopology1", {0, 2, 0, 1, 1}] -> 0, + GLI["fctopology1", {0, 2, 0, 0, 2}] -> 0, + GLI["fctopology1", {0, 2, 0, 0, 1}] -> 0, + GLI["fctopology1", {0, 2, 0, -1, 2}] -> 0, + GLI["fctopology1", {0, 2, -1, 2, 2}] -> 0, + GLI["fctopology1", {0, 2, -1, 1, 2}] -> 0, + GLI["fctopology1", {0, 2, -1, 0, 2}] -> 0, + GLI["fctopology1", {0, 1, 2, 4, -2}] -> 0, + GLI["fctopology1", {0, 1, 2, 3, -1}] -> 0, + GLI["fctopology1", {0, 1, 2, 3, -2}] -> 0, + GLI["fctopology1", {0, 1, 2, 2, 0}] -> 0, + GLI["fctopology1", {0, 1, 2, 2, -1}] -> 0, + GLI["fctopology1", {0, 1, 2, 2, -2}] -> 0, + GLI["fctopology1", {0, 1, 2, 1, 0}] -> 0, + GLI["fctopology1", {0, 1, 2, 1, -1}] -> 0, + GLI["fctopology1", {0, 1, 2, 0, 0}] -> 0, + GLI["fctopology1", {0, 1, 1, 4, -1}] -> 0, + GLI["fctopology1", {0, 1, 1, 3, 0}] -> 0, + GLI["fctopology1", {0, 1, 1, 3, -1}] -> 0, + GLI["fctopology1", {0, 1, 1, 2, 0}] -> 0, + GLI["fctopology1", {0, 1, 1, 2, -1}] -> 0, + GLI["fctopology1", {0, 1, 1, 1, 0}] -> 0, + GLI["fctopology1", {0, 1, 0, 4, 0}] -> 0, + GLI["fctopology1", {0, 1, 0, 3, 1}] -> 0, + GLI["fctopology1", {0, 1, 0, 2, 2}] -> 0, + GLI["fctopology1", {0, 1, 0, 2, 1}] -> 0, + GLI["fctopology1", {0, 1, 0, 2, 0}] -> 0, + GLI["fctopology1", {0, 1, 0, 1, 2}] -> 0, + GLI["fctopology1", {0, 1, 0, 1, 1}] -> 0, + GLI["fctopology1", {0, 1, 0, 0, 2}] -> 0, + GLI["fctopology1", {0, 1, 0, 0, 1}] -> 0, + GLI["fctopology1", {0, 1, -1, 4, 1}] -> 0, + GLI["fctopology1", {0, 1, -1, 3, 2}] -> 0, + GLI["fctopology1", {0, 1, -1, 3, 1}] -> 0, + GLI["fctopology1", {0, 1, -1, 2, 2}] -> 0, + GLI["fctopology1", {0, 1, -1, 2, 1}] -> 0, + GLI["fctopology1", {0, 1, -1, 1, 2}] -> 0, + GLI["fctopology1", {0, 1, -2, 4, 2}] -> 0, + GLI["fctopology1", {0, 1, -2, 3, 2}] -> 0, + GLI["fctopology1", {0, 1, -2, 2, 2}] -> 0, + GLI["fctopology1", {0, 0, 2, 4, -2}] -> 0, + GLI["fctopology1", {0, 0, 2, 3, -1}] -> 0, + GLI["fctopology1", {0, 0, 2, 3, -2}] -> 0, + GLI["fctopology1", {0, 0, 2, 2, 0}] -> 0, + GLI["fctopology1", {0, 0, 2, 2, -1}] -> 0, + GLI["fctopology1", {0, 0, 2, 1, 1}] -> 0, + GLI["fctopology1", {0, 0, 2, 1, 0}] -> 0, + GLI["fctopology1", {0, 0, 2, 0, 2}] -> 0, + GLI["fctopology1", {0, 0, 2, 0, 1}] -> 0, + GLI["fctopology1", {0, 0, 2, -1, 2}] -> 0, + GLI["fctopology1", {0, 0, 1, 4, -1}] -> 0, + GLI["fctopology1", {0, 0, 1, 3, 0}] -> 0, + GLI["fctopology1", {0, 0, 1, 3, -1}] -> 0, + GLI["fctopology1", {0, 0, 1, 2, 1}] -> 0, + GLI["fctopology1", {0, 0, 1, 2, 0}] -> 0, + GLI["fctopology1", {0, 0, 1, 1, 2}] -> 0, + GLI["fctopology1", {0, 0, 1, 1, 1}] -> 0, + GLI["fctopology1", {0, 0, 1, 0, 2}] -> 0, + GLI["fctopology1", {0, 0, 0, 4, 0}] -> 0, + GLI["fctopology1", {0, 0, 0, 3, 1}] -> 0, + GLI["fctopology1", {0, 0, 0, 2, 2}] -> 0, + GLI["fctopology1", {0, 0, 0, 2, 1}] -> 0, + GLI["fctopology1", {0, 0, 0, 1, 2}] -> 0, + GLI["fctopology1", {0, 0, 0, 1, 1}] -> 0, + GLI["fctopology1", {0, 0, -1, 4, 1}] -> 0, + GLI["fctopology1", {0, 0, -1, 3, 2}] -> 0, + GLI["fctopology1", {0, 0, -1, 3, 1}] -> 0, + GLI["fctopology1", {0, 0, -1, 2, 2}] -> 0, + GLI["fctopology1", {0, 0, -2, 4, 2}] -> 0, + GLI["fctopology1", {0, 0, -2, 3, 2}] -> 0, + GLI["fctopology1", {0, -1, 2, 4, -2}] -> 0, + GLI["fctopology1", {0, -1, 2, 3, -1}] -> 0, + GLI["fctopology1", {0, -1, 2, 2, 0}] -> 0, + GLI["fctopology1", {0, -1, 2, 1, 1}] -> 0, + GLI["fctopology1", {0, -1, 2, 0, 2}] -> 0, + GLI["fctopology1", {0, -1, 1, 4, -1}] -> 0, + GLI["fctopology1", {0, -1, 1, 3, 0}] -> 0, + GLI["fctopology1", {0, -1, 1, 2, 1}] -> 0, + GLI["fctopology1", {0, -1, 0, 4, 0}] -> 0, + GLI["fctopology1", {0, -1, 0, 3, 1}] -> 0, + GLI["fctopology1", {0, -1, 0, 2, 2}] -> 0, + GLI["fctopology1", {0, -1, 0, 2, 1}] -> 0, + GLI["fctopology1", {0, -1, -1, 4, 1}] -> 0, + GLI["fctopology1", {0, -1, -1, 3, 2}] -> 0, + GLI["fctopology1", {0, -1, -2, 4, 2}] -> 0, + GLI["fctopology1", {-1, 1, 2, 3, -1}] -> 0, + GLI["fctopology1", {-1, 1, 2, 2, 0}] -> 0, + GLI["fctopology1", {-1, 1, 2, 2, -1}] -> 0, + GLI["fctopology1", {-1, 1, 2, 1, 0}] -> 0, + GLI["fctopology1", {-1, 1, 1, 3, 0}] -> 0, + GLI["fctopology1", {-1, 1, 1, 2, 0}] -> 0, + GLI["fctopology1", {-1, 1, 0, 3, 1}] -> 0, + GLI["fctopology1", {-1, 1, 0, 2, 2}] -> 0, + GLI["fctopology1", {-1, 1, 0, 2, 1}] -> 0, + GLI["fctopology1", {-1, 1, 0, 1, 2}] -> 0, + GLI["fctopology1", {-1, 1, 0, 0, 2}] -> 0, + GLI["fctopology1", {-1, 1, -1, 3, 2}] -> 0, + GLI["fctopology1", {-1, 1, -1, 2, 2}] -> 0, + GLI["fctopology1", {-1, 0, 2, 3, -1}] -> 0, + GLI["fctopology1", {-1, 0, 2, 2, 0}] -> 0, + GLI["fctopology1", {-1, 0, 2, 1, 1}] -> 0, + GLI["fctopology1", {-1, 0, 2, 0, 2}] -> 0, + GLI["fctopology1", {-1, 0, 1, 3, 0}] -> 0, + GLI["fctopology1", {-1, 0, 1, 2, 1}] -> 0, + GLI["fctopology1", {-1, 0, 1, 1, 2}] -> 0, + GLI["fctopology1", {-1, 0, 0, 3, 1}] -> 0, + GLI["fctopology1", {-1, 0, 0, 2, 2}] -> 0, + GLI["fctopology1", {-1, 0, 0, 1, 2}] -> 0, + GLI["fctopology1", {-1, 0, -1, 3, 2}] -> 0, + GLI["fctopology1", {-1, -1, 0, 2, 2}] -> 0, + GLI["fctopology1", {-2, 1, 2, 2, 0}] -> 0, + GLI["fctopology1", {-2, 1, 0, 2, 2}] -> 0} From f72a24087a2aea9fe0f57b8e72ddc39060df90e8 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 12 Jul 2024 17:55:57 +0200 Subject: [PATCH 46/67] Fixed some mistakes in the documentation. --- .../Markdown/Extra/Development.md | 2 +- .../Documentation/Markdown/FCLoopFromGLI.md | 14 ++-- FeynCalc/Documentation/Markdown/LightCone.md | 2 +- FeynCalc/Documentation/Markdown/SFAD.md | 44 ++++++++++-- .../Markdown/img/0jtbiuq3nviq2.svg | 69 +++++++++++++++++++ .../Mathematica/LoopIntegrals/FCLoopFromGLI.m | 2 +- .../Mathematica/Shared/Symbols/SFAD.m | 33 ++++++++- .../Mathematica/Tutorials/LightCone.m | 2 +- FeynCalc/Shared/SharedObjects.m | 18 +++-- 9 files changed, 161 insertions(+), 25 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/img/0jtbiuq3nviq2.svg diff --git a/FeynCalc/Documentation/Markdown/Extra/Development.md b/FeynCalc/Documentation/Markdown/Extra/Development.md index 298bca2c..4c3db3ed 100644 --- a/FeynCalc/Documentation/Markdown/Extra/Development.md +++ b/FeynCalc/Documentation/Markdown/Extra/Development.md @@ -85,7 +85,7 @@ MySP[a_,b_]:= FCI[SP[a,b]]; End[] EndPackage[] -``` +```mathematica ### Package or add-on? diff --git a/FeynCalc/Documentation/Markdown/FCLoopFromGLI.md b/FeynCalc/Documentation/Markdown/FCLoopFromGLI.md index bf4e7bf0..cac2085e 100644 --- a/FeynCalc/Documentation/Markdown/FCLoopFromGLI.md +++ b/FeynCalc/Documentation/Markdown/FCLoopFromGLI.md @@ -10,12 +10,12 @@ ```mathematica topos = { - FCTopology["topoBox1L", {FAD[{q, m0}], FAD[{q + p1, m1}], FAD[{q + p2, m2}], FAD[{q + p2, m3}]}, + FCTopology["topoBox1L", {FAD[{q, m0}], FAD[{q + p1, m1}], FAD[{q + p2, m2}], FAD[{q + p3, m3}]}, {q}, {p1, p2, p3}, {}, {}], FCTopology["topoTad2L", {FAD[{q1, m1}], FAD[{q2, m2}], FAD[{q1 - q2, 0}]}, {q1, q2}, {}, {}, {}]} ``` -$$\left\{\text{FCTopology}\left(\text{topoBox1L},\left\{\frac{1}{q^2-\text{m0}^2},\frac{1}{(\text{p1}+q)^2-\text{m1}^2},\frac{1}{(\text{p2}+q)^2-\text{m2}^2},\frac{1}{(\text{p2}+q)^2-\text{m3}^2}\right\},\{q\},\{\text{p1},\text{p2},\text{p3}\},\{\},\{\}\right),\text{FCTopology}\left(\text{topoTad2L},\left\{\frac{1}{\text{q1}^2-\text{m1}^2},\frac{1}{\text{q2}^2-\text{m2}^2},\frac{1}{(\text{q1}-\text{q2})^2}\right\},\{\text{q1},\text{q2}\},\{\},\{\},\{\}\right)\right\}$$ +$$\left\{\text{FCTopology}\left(\text{topoBox1L},\left\{\frac{1}{q^2-\text{m0}^2},\frac{1}{(\text{p1}+q)^2-\text{m1}^2},\frac{1}{(\text{p2}+q)^2-\text{m2}^2},\frac{1}{(\text{p3}+q)^2-\text{m3}^2}\right\},\{q\},\{\text{p1},\text{p2},\text{p3}\},\{\},\{\}\right),\text{FCTopology}\left(\text{topoTad2L},\left\{\frac{1}{\text{q1}^2-\text{m1}^2},\frac{1}{\text{q2}^2-\text{m2}^2},\frac{1}{(\text{q1}-\text{q2})^2}\right\},\{\text{q1},\text{q2}\},\{\},\{\},\{\}\right)\right\}$$ ```mathematica exp = a1 GLI["topoBox1L", {1, 1, 1, 1}] + a2 GLI["topoTad2L", {1, 2, 2}] @@ -27,7 +27,7 @@ $$\text{a1} G^{\text{topoBox1L}}(1,1,1,1)+\text{a2} G^{\text{topoTad2L}}(1,2,2)$ FCLoopFromGLI[exp, topos] ``` -$$\frac{\text{a1}}{\left(q^2-\text{m0}^2\right) \left((\text{p1}+q)^2-\text{m1}^2\right) \left((\text{p2}+q)^2-\text{m2}^2\right) \left((\text{p2}+q)^2-\text{m3}^2\right)}+\frac{\text{a2}}{\left(\text{q1}^2-\text{m1}^2\right) \left(\text{q2}^2-\text{m2}^2\right)^2 (\text{q1}-\text{q2})^4}$$ +$$\frac{\text{a1}}{\left(q^2-\text{m0}^2\right) \left((\text{p1}+q)^2-\text{m1}^2\right) \left((\text{p2}+q)^2-\text{m2}^2\right) \left((\text{p3}+q)^2-\text{m3}^2\right)}+\frac{\text{a2}}{\left(\text{q1}^2-\text{m1}^2\right) \left(\text{q2}^2-\text{m2}^2\right)^2 (\text{q1}-\text{q2})^4}$$ Notice that it is necessary to specify all topologies present in `exp`. The function will not accept `GLI`s defined for unknown topologies @@ -36,7 +36,7 @@ defined for unknown topologies FCLoopFromGLI[GLI["topoXYZ", {1, 1, 1, 1, 1}], topos] ``` -![047duy8jklfe9](img/047duy8jklfe9.svg) +![0jtbiuq3nviq2](img/0jtbiuq3nviq2.svg) $$\text{\$Aborted}$$ @@ -46,7 +46,7 @@ $$\text{\$Aborted}$$ FCLoopFromGLI[GLI["topoBox1L", {1, 0, 1, 0}] GLI["topoBox1L", {0, 1, 0, 1}], topos] ``` -$$\frac{1}{\left(\text{FCGV}(\text{lmom21})^2-\text{m0}^2\right) \left((\text{p1}+\text{FCGV}(\text{lmom11}))^2-\text{m1}^2\right) \left((\text{p2}+\text{FCGV}(\text{lmom11}))^2-\text{m3}^2\right) \left((\text{p2}+\text{FCGV}(\text{lmom21}))^2-\text{m2}^2\right)}$$ +$$\frac{1}{\left(\text{FCGV}(\text{lmom21})^2-\text{m0}^2\right) \left((\text{p1}+\text{FCGV}(\text{lmom11}))^2-\text{m1}^2\right) \left((\text{p3}+\text{FCGV}(\text{lmom11}))^2-\text{m3}^2\right) \left((\text{p2}+\text{FCGV}(\text{lmom21}))^2-\text{m2}^2\right)}$$ You can customize the naming scheme for the momenta via the `LoopMomentum` option. The first argument gives the number of the loop integral, while the second corresponds to a particular loop momentum this integral depends on. @@ -61,7 +61,7 @@ FCLoopFromGLI[GLI["topoBox1L", {1, 0, 1, 0}] GLI["topoBox1L", {0, 1, 0, 1}], top LoopMomenta -> Function[{x, y}, "p" <> ToString[x] <> ToString[x]]] ``` -$$\frac{1}{\left(\text{p22}^2-\text{m0}^2\right) \left((\text{p11}+\text{p1})^2-\text{m1}^2\right) \left((\text{p22}+\text{p2})^2-\text{m2}^2\right) \left((\text{p11}+\text{p2})^2-\text{m3}^2\right)}$$ +$$\frac{1}{\left(\text{p22}^2-\text{m0}^2\right) \left((\text{p11}+\text{p1})^2-\text{m1}^2\right) \left((\text{p22}+\text{p2})^2-\text{m2}^2\right) \left((\text{p11}+\text{p3})^2-\text{m3}^2\right)}$$ In general, `FCLoopFromGLI` can change the ordering of propagators inside `FeynAmpDenominator`, as compared to the their ordering inside `FCTopology`. This is because by default it calls `FeynAmpDenominatorCombine`. Ordering may also change when applying `FeynAmpDenominatorSimplify`. You want the ordering to remain unchanged, the following should help @@ -70,4 +70,4 @@ as compared to the their ordering inside `FCTopology`. This is because by defaul FCLoopFromGLI[exp, topos, FeynAmpDenominatorCombine -> False, List -> FeynAmpDenominator] ``` -$$\frac{\text{a1}}{\left(q^2-\text{m0}^2\right).\left((\text{p1}+q)^2-\text{m1}^2\right).\left((\text{p2}+q)^2-\text{m2}^2\right).\left((\text{p2}+q)^2-\text{m3}^2\right)}+\frac{\text{a2}}{\left(\text{q1}^2-\text{m1}^2\right).\left(\text{q2}^2-\text{m2}^2\right)^2.(\text{q1}-\text{q2})^4}$$ \ No newline at end of file +$$\frac{\text{a1}}{\left(q^2-\text{m0}^2\right).\left((\text{p1}+q)^2-\text{m1}^2\right).\left((\text{p2}+q)^2-\text{m2}^2\right).\left((\text{p3}+q)^2-\text{m3}^2\right)}+\frac{\text{a2}}{\left(\text{q1}^2-\text{m1}^2\right).\left(\text{q2}^2-\text{m2}^2\right)^2.(\text{q1}-\text{q2})^4}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/LightCone.md b/FeynCalc/Documentation/Markdown/LightCone.md index 23ab0bb4..cbb7a845 100644 --- a/FeynCalc/Documentation/Markdown/LightCone.md +++ b/FeynCalc/Documentation/Markdown/LightCone.md @@ -128,7 +128,7 @@ $$g^{\mu \nu } g^{\mu \nu }{}_{\perp }$$ $$D-2$$ -### Dirac matrices with light-cone components +### Dirac matrices with light-cone components Dirac algebra involving matrices contracted to light-cone momenta or having particular light-cone components is fully supported. The general strategy followed by `DiracSimplify` is to move all perpendicular components to the very right of the chain. diff --git a/FeynCalc/Documentation/Markdown/SFAD.md b/FeynCalc/Documentation/Markdown/SFAD.md index c68898b6..e0ea663f 100644 --- a/FeynCalc/Documentation/Markdown/SFAD.md +++ b/FeynCalc/Documentation/Markdown/SFAD.md @@ -1,12 +1,14 @@ ## SFAD -`SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a Cartesian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Cartesian scalar products in $D-1$ dimensions. +`SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a standard Lorentzian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Lorentzian scalar products in $D$ dimensions. For brevity one can also use shorter forms such as `SFAD[{q1+ ..., m^2}, ...]`, `SFAD[{q1+ ..., m^2 , n}, ...]`, `SFAD[{q1+ ..., {m^2, -1}}, ...]`, `SFAD[q1,...]` etc. -If `s` is not explicitly specified, its value is determined by the option `EtaSign`, which has the default value `+1`. +If `s` is not explicitly specified, its value is determined by the option `EtaSign`, which has the default value `+1` and corresponds to $+ i \eta$ -If `n` is not explicitly specified, then the default value `1` is assumed. Translation into FeynCalcI internal form is performed by `FeynCalcInternal`, where a `SFAD` is encoded using the special head `CartesianPropagatorDenominator`. +If `n` is not explicitly specified, then the default value `1` is assumed. Translation into the FeynCalc internal form is performed by `FeynCalcInternal`, where an `SFAD` is encoded using the special head `StandardPropagatorDenominator`. + +`SFAD` can represent more versatile propagators as compared to the old `FAD`. In particular, `FAD` does not allow one to enter eikonal propagators, track the sign of the $i \eta$ or change the sign and the form of the mass term. ### See also @@ -42,4 +44,38 @@ $$\frac{1}{(p\cdot q-m^2+i \eta )}$$ SFAD[{{0, n . q}}] ``` -$$\frac{1}{(n\cdot q+i \eta )}$$ \ No newline at end of file +$$\frac{1}{(n\cdot q+i \eta )}$$ + +```mathematica +SFAD[{{p, p . q}, m^2}] +``` + +$$\frac{1}{(p^2+p\cdot q-m^2+i \eta )}$$ + +The so called Smirnov-notation for propagators can be achieved by multiplying the quadratic part by `I` and switching the sign of the mass term. + +```mathematica +SFAD[{{I*p, 0}, -m^2}] +``` + +$$\frac{1}{(-p^2+m^2+i \eta )}$$ + +If one wants to have additional variables multiplying loop or external momenta, those need to be declared to be of the `FCVariable` type + +```mathematica +DataType[la, FCVariable] = True +``` + +$$\text{True}$$ + +```mathematica +SFAD[{{0, la p . q}, m^2}] +``` + +$$\frac{1}{(\text{la} (p\cdot q)-m^2+i \eta )}$$ + +```mathematica +% // FCI // StandardForm + +(*FeynAmpDenominator[StandardPropagatorDenominator[0, la Pair[Momentum[p, D], Momentum[q, D]], -m^2, {1, 1}]]*) +``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/img/0jtbiuq3nviq2.svg b/FeynCalc/Documentation/Markdown/img/0jtbiuq3nviq2.svg new file mode 100644 index 00000000..19437325 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/0jtbiuq3nviq2.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFromGLI.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFromGLI.m index f42e5f0e..e7d426fd 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFromGLI.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFromGLI.m @@ -21,7 +21,7 @@ topos={ -FCTopology["topoBox1L",{FAD[{q,m0}],FAD[{q+p1,m1}],FAD[{q+p2,m2}],FAD[{q+p2,m3}]}, +FCTopology["topoBox1L",{FAD[{q,m0}],FAD[{q+p1,m1}],FAD[{q+p2,m2}],FAD[{q+p3,m3}]}, {q},{p1,p2,p3},{},{}], FCTopology["topoTad2L",{FAD[{q1,m1}],FAD[{q2,m2}],FAD[{q1-q2,0}]},{q1,q2},{},{},{}]} diff --git a/FeynCalc/Documentation/Mathematica/Shared/Symbols/SFAD.m b/FeynCalc/Documentation/Mathematica/Shared/Symbols/SFAD.m index 194f45a9..fc2d6aca 100644 --- a/FeynCalc/Documentation/Mathematica/Shared/Symbols/SFAD.m +++ b/FeynCalc/Documentation/Mathematica/Shared/Symbols/SFAD.m @@ -8,7 +8,7 @@ (* ::Text:: *) -(*`SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a Cartesian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Cartesian scalar products in $D-1$ dimensions.*) +(*`SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...]` denotes a standard Lorentzian propagator given by $\frac{1}{[(q_1+\ldots)^2 + p_1 \cdot q_2 ... + m^2 + s i \eta]^n}$, where $q_1^2$ and $p_1 \cdot q_2$ are Lorentzian scalar products in $D$ dimensions.*) (* ::Text:: *) @@ -16,11 +16,15 @@ (* ::Text:: *) -(*If `s` is not explicitly specified, its value is determined by the option `EtaSign`, which has the default value `+1`.*) +(*If `s` is not explicitly specified, its value is determined by the option `EtaSign`, which has the default value `+1` and corresponds to $+ i \eta$*) (* ::Text:: *) -(*If `n` is not explicitly specified, then the default value `1` is assumed. Translation into FeynCalcI internal form is performed by `FeynCalcInternal`, where a `SFAD` is encoded using the special head `CartesianPropagatorDenominator`.*) +(*If `n` is not explicitly specified, then the default value `1` is assumed. Translation into the FeynCalc internal form is performed by `FeynCalcInternal`, where an `SFAD` is encoded using the special head `StandardPropagatorDenominator`.*) + + +(* ::Text:: *) +(*`SFAD` can represent more versatile propagators as compared to the old `FAD`. In particular, `FAD` does not allow one to enter eikonal propagators, track the sign of the $i \eta$ or change the sign and the form of the mass term.*) (* ::Subsection:: *) @@ -48,3 +52,26 @@ SFAD[{{0,n . q}}] + + +SFAD[{{p,p . q},m^2}] + + +(* ::Text:: *) +(*The so called Smirnov-notation for propagators can be achieved by multiplying the quadratic part by `I` and switching the sign of the mass term.*) + + +SFAD[{{I*p,0},-m^2}] + + +(* ::Text:: *) +(*If one wants to have additional variables multiplying loop or external momenta, those need to be declared to be of the `FCVariable` type*) + + +DataType[la,FCVariable]=True + + +SFAD[{{0,la p . q},m^2}] + + +%//FCI//StandardForm diff --git a/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m b/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m index 5a56c32c..96e15b4d 100644 --- a/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m +++ b/FeynCalc/Documentation/Mathematica/Tutorials/LightCone.m @@ -109,7 +109,7 @@ (* ::Subsection:: *) -(*Dirac matrices with light-cone components *) +(*Dirac matrices with light-cone components*) (* ::Text:: *) diff --git a/FeynCalc/Shared/SharedObjects.m b/FeynCalc/Shared/SharedObjects.m index 1cb5c0b7..1a6d3531 100644 --- a/FeynCalc/Shared/SharedObjects.m +++ b/FeynCalc/Shared/SharedObjects.m @@ -572,21 +572,25 @@ ftype with (possible) Lorentz-indices lorind and $SU(N)$ indices sunind. The integrals."; SFAD::usage = -"SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...] denotes a Cartesian -propagator given by $\\frac{1}{[(q_1+\\ldots)^2 + p_1 \\cdot q_2 ... + m^2 + s i -\\eta]^n}$, where $q_1^2$ and $p_1 \\cdot q_2$ are Cartesian scalar products in -$D-1$ dimensions. +"SFAD[{{q1 +..., p1 . q2 +...,} {m^2, s}, n}, ...] denotes a standard +Lorentzian propagator given by $\\frac{1}{[(q_1+\\ldots)^2 + p_1 \\cdot q_2 ... ++ m^2 + s i \\eta]^n}$, where $q_1^2$ and $p_1 \\cdot q_2$ are Lorentzian scalar +products in $D$ dimensions. For brevity one can also use shorter forms such as SFAD[{q1+ ..., m^2}, ...], SFAD[{q1+ ..., m^2 , n}, ...], SFAD[{q1+ ..., {m^2, -1}}, ...], SFAD[q1,...] etc. If s is not explicitly specified, its value is determined by the option -EtaSign, which has the default value +1. +EtaSign, which has the default value +1 and corresponds to $+ i \\eta$ If n is not explicitly specified, then the default value 1 is assumed. -Translation into FeynCalcI internal form is performed by FeynCalcInternal, -where a SFAD is encoded using the special head CartesianPropagatorDenominator."; +Translation into the FeynCalc internal form is performed by FeynCalcInternal, +where an SFAD is encoded using the special head StandardPropagatorDenominator. + +SFAD can represent more versatile propagators as compared to the old FAD. In +particular, FAD does not allow one to enter eikonal propagators, track the +sign of the $i \\eta$ or change the sign and the form of the mass term."; StandardPropagatorDenominator::usage = "StandardPropagatorDenominator[propSq + ..., propEik +..., m^2, {n, s}] encodes From 5d510ade627dc86f347f4952ca556949f2855322 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 12 Jul 2024 17:56:11 +0200 Subject: [PATCH 47/67] Added FCLoopAddMissingHigherOrdersWarning --- .../Documentation/Markdown/Extra/FeynCalc.md | 1 + .../FCLoopAddMissingHigherOrdersWarning.md | 39 +++++++ .../FCLoopAddMissingHigherOrdersWarning.m | 38 ++++++ .../FCLoopAddMissingHigherOrdersWarning.m | 110 ++++++++++++++++++ .../FCLoopAddMissingHigherOrdersWarning.test | 49 ++++++++ 5 files changed, 237 insertions(+) create mode 100644 FeynCalc/Documentation/Markdown/FCLoopAddMissingHigherOrdersWarning.md create mode 100644 FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m create mode 100755 FeynCalc/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m create mode 100644 Tests/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.test diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index 7211c90a..d6e4cd20 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -319,6 +319,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [FCIteratedIntegralEvaluate](../FCIteratedIntegralEvaluate.md), [FCIteratedIntegralSimplify](../FCIteratedIntegralSimplify.md) - manipulations of Chen's iterated integrals - [FCFeynmanFindDivergences](../FCFeynmanFindDivergences.md), [FCFeynmanRegularizeDivergence](../FCFeynmanRegularizeDivergence.md), [FCFeynmanParameterJoin](../FCFeynmanParameterJoin.md), [FCFeynmanParametrize](../FCFeynmanParametrize.md), [FCFeynmanPrepare](../FCFeynmanPrepare.md), [FCFeynmanProjectiveQ](../FCFeynmanProjectiveQ.md), [FCFeynmanProjectivize](../FCFeynmanProjectivize.md), [FCMellinJoin](../FCMellinJoin.md) - derivation and manipulation of Feynman parameter integrals - [FCLoopAddEdgeTags](../FCLoopAddEdgeTags.md), [FCLoopGraphPlot](../FCLoopGraphPlot.md), [FCLoopIntegralToGraph](../FCLoopIntegralToGraph.md), [FCLoopPropagatorsToLineMomenta](../FCLoopPropagatorsToLineMomenta.md) - create and plot graphs representing loop integrals +- [FCLoopAddMissingHigherOrdersWarning](../FCLoopAddMissingHigherOrdersWarning.md) - adds a warning flag to the given $\epsilon$-expansion - [FCLoopApplyTopologyMappings](../FCLoopApplyTopologyMappings.md), [FCLoopCreateRuleGLIToGLI](../FCLoopCreateRuleGLIToGLI.md), [FCLoopFindMomentumShifts](../FCLoopFindMomentumShifts.md), [FCLoopFindIntegralMappings](../FCLoopFindIntegralMappings.md), [FCLoopFindSubtopologies](../FCLoopFindSubtopologies.md), [FCLoopFindTopologies](../FCLoopFindTopologies.md), [FCLoopFindTopologyMappings](../FCLoopFindTopologyMappings.md), [FCLoopPakOrder](../FCLoopPakOrder.md), [FCLoopToPakForm](../FCLoopToPakForm.md) - loop integral topology identification and minimization - [FCGraphCuttableQ](../FCGraphCuttableQ.md), [FCGraphFindPath](../FCGraphFindPath.md) - graph manipulations - [FCLoopBasisCreateScalarProducts](../FCLoopBasisCreateScalarProducts.md) - auxiliary function that generates all possible loop momenta dependent scalar products diff --git a/FeynCalc/Documentation/Markdown/FCLoopAddMissingHigherOrdersWarning.md b/FeynCalc/Documentation/Markdown/FCLoopAddMissingHigherOrdersWarning.md new file mode 100644 index 00000000..32e025c9 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopAddMissingHigherOrdersWarning.md @@ -0,0 +1,39 @@ +## FCLoopAddMissingHigherOrdersWarning + +`FCLoopAddMissingHigherOrdersWarning[expr, ep, fun]` determines the highest `ep`-power $n$ in the given expression and adds a warning flag of order $\textrm{ep}^n+1$. This is meant to prevent incorrect results stemming insufficient high expansions of `expr` in `ep` + +### See also + +[Overview](Extra/FeynCalc.md), [FCFeynmanParametrize](FCFeynmanParametrize.md), [FCFeynmanPrepare](FCFeynmanPrepare.md). + +### Examples + +```mathematica +FCLoopAddMissingHigherOrdersWarning[1/ep^2 cc1 + 1/ep cc2, ep, epHelp] +``` + +$$\frac{\text{cc1}}{\text{ep}^2}+\frac{\text{cc2}}{\text{ep}}+(1+i) \;\text{epHelp}$$ + +```mathematica +FCLoopAddMissingHigherOrdersWarning[cc1, ep, epHelp] +``` + +$$\text{cc1}+(1+i) \;\text{ep} \;\text{epHelp}$$ + +```mathematica +FCLoopAddMissingHigherOrdersWarning[cc1, ep, epHelp, Complex -> False] +``` + +$$\text{cc1}+\text{ep} \;\text{epHelp}$$ + +```mathematica +FCLoopAddMissingHigherOrdersWarning[cc1, ep, epHelp, Names -> False] +``` + +$$\text{cc1}+(1+i) \;\text{ep} \;\text{epHelp}$$ + +```mathematica +FCLoopAddMissingHigherOrdersWarning[GLI[topo1, {1, 1, 1, 1, 1}] -> cc1/ep^2 + cc2/ep + cc3 , ep, epHelp] +``` + +$$G^{\text{topo1}}(1,1,1,1,1)\to \frac{\text{cc1}}{\text{ep}^2}+\frac{\text{cc2}}{\text{ep}}+\text{cc3}+(1+i) \;\text{ep} \;\text{epHelp}(\text{topo1X11111})$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m new file mode 100644 index 00000000..2afa2510 --- /dev/null +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m @@ -0,0 +1,38 @@ +(* ::Package:: *) + + + + +(* ::Section:: *) +(*FCLoopAddMissingHigherOrdersWarning*) + + +(* ::Text:: *) +(*`FCLoopAddMissingHigherOrdersWarning[expr, ep, fun]` determines the highest `ep`-power $n$ in the given expression and adds a warning flag of order $\textrm{ep}^n+1$. This is meant to prevent incorrect results stemming insufficient high expansions of `expr` in `ep`*) + + +(* ::Subsection:: *) +(*See also*) + + +(* ::Text:: *) +(*[Overview](Extra/FeynCalc.md), [FCFeynmanParametrize](FCFeynmanParametrize.md), [FCFeynmanPrepare](FCFeynmanPrepare.md).*) + + +(* ::Subsection:: *) +(*Examples*) + + +FCLoopAddMissingHigherOrdersWarning[1/ep^2cc1+1/ep cc2,ep,epHelp] + + +FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp] + + +FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp,Complex->False] + + +FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp,Names->False] + + +FCLoopAddMissingHigherOrdersWarning[GLI[topo1,{1,1,1,1,1}]->cc1/ep^2+cc2/ep+cc3 ,ep,epHelp] diff --git a/FeynCalc/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m b/FeynCalc/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m new file mode 100755 index 00000000..20eb9ac8 --- /dev/null +++ b/FeynCalc/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.m @@ -0,0 +1,110 @@ +(* ::Package:: *) + +(* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) + +(* :Title: FCLoopAddMissingHigherOrdersWarning *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Add scalings of masses and momenta *) + +(* ------------------------------------------------------------------------ *) + +FCLoopAddMissingHigherOrdersWarning::usage = +"FCLoopAddMissingHigherOrdersWarning[expr, ep, fun] determines the highest +ep-power $n$ in the given expression and adds a warning flag of order +$\\textrm{ep}^n+1$. This is meant to prevent incorrect results stemming +insufficient high expansions of expr in ep"; + +FCLoopAddMissingHigherOrdersWarning::failmsg = +"Error! FCLoopAddMissingHigherOrdersWarning has encountered a fatal problem and must abort the computation. \ +The problem reads: `1`" + +Begin["`Package`"] +End[] + +Begin["`FCLoopAddMissingHigherOrdersWarning`Private`"] + +fclamhoVerbose::usage = ""; + +Options[FCLoopAddMissingHigherOrdersWarning] = { + FCE -> False, + FCI -> False, + FCVerbose -> False, + Names -> Automatic, + "LHS" -> None, + Complex -> True +}; + +FCLoopAddMissingHigherOrdersWarning[ex_List, ep_, fun_, opts:OptionsPattern[]]:= + Map[FCLoopAddMissingHigherOrdersWarning[#, ep, fun, opts]&,ex]; + +FCLoopAddMissingHigherOrdersWarning[Rule[a_,b_], ep_, fun_, opts:OptionsPattern[]]:= + Rule[a,FCLoopAddMissingHigherOrdersWarning[b, ep, fun, opts, "LHS"->a]]; + +FCLoopAddMissingHigherOrdersWarning[RuleDelayed[a_,b_], ep_, fun_, opts:OptionsPattern[]]:= + rd[a,FCLoopAddMissingHigherOrdersWarning[b, ep, fun, opts, "LHS"->a]] /. rd ->RuleDelayed; + +FCLoopAddMissingHigherOrdersWarning[expr_, ep_, fun_, OptionsPattern[]] := +Block[{ epPower, res , optNames, pref, epHelpName, optLHS}, + + + optNames = OptionValue[Names]; + optLHS = OptionValue["LHS"]; + + If [OptionValue[FCVerbose]===False, + fclamhoVerbose=$VeryVerbose, + If[MatchQ[OptionValue[FCVerbose], _Integer], + fclamhoVerbose=OptionValue[FCVerbose] + ]; + ]; + + If[ OptionValue[Complex], + pref = (1+I), + pref = 1 + ]; + + If[ optNames===Automatic, + + If[ optLHS===None, + epHelpName = fun, + Which[ + Head[optLHS]===GLI, + epHelpName=fun[FCLoopGLIToSymbol[optLHS]], + True, + Message[FCLoopAddMissingHigherOrdersWarning::failmsg, "Unsupported value of the LHS option."]; + Abort[] + ]; + ], + + + epHelpName = fun + ]; + + + FCPrint[1,"FCLoopAddMissingHigherOrdersWarning: Entering.", FCDoControl->fclamhoVerbose]; + FCPrint[3,"FCLoopAddMissingHigherOrdersWarning: Entering with: ", expr, FCDoControl->fclamhoVerbose]; + + epPower = Exponent[expr,ep]; + + If[ !IntegerQ[epPower], + Message[FCLoopAddMissingHigherOrdersWarning::failmsg, "Failed to extract the highest power of " <> ToString[ep]]; + Abort[] + ]; + + res = expr + pref*epHelpName*ep^(epPower+1); + + FCPrint[1,"FCLoopAddMissingHigherOrdersWarning: Leaving.", FCDoControl->fclamhoVerbose]; + + res + +]/; !MemberQ[{Rule,RuleDelayed,List},Head[expr]] + + +FCPrint[1,"FCLoopAddMissingHigherOrdersWarning.m loaded."]; +End[] diff --git a/Tests/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.test b/Tests/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.test new file mode 100644 index 00000000..e01913d2 --- /dev/null +++ b/Tests/LoopIntegrals/FCLoopAddMissingHigherOrdersWarning.test @@ -0,0 +1,49 @@ + + +(* :Title: FCLoopAddMissingHigherOrdersWarning.test *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Framework independent unit tests for FCLoopAddMissingHigherOrdersWarning *) + +(* ------------------------------------------------------------------------ *) + +Tests`LoopIntegrals`fcstFCLoopAddMissingHigherOrdersWarning = +({ +{"fcstFCLoopAddMissingHigherOrdersWarning-ID1", +"FCLoopAddMissingHigherOrdersWarning[1/ep^2cc,ep,epHelp]", +"cc/ep^2 + ((1 + I)*epHelp)/ep"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID2", +"FCLoopAddMissingHigherOrdersWarning[1/ep^2cc1+1/ep \ +cc2,ep,epHelp]", "cc1/ep^2 + cc2/ep + (1 + I)*epHelp"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID3", +"FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp]", +"cc1 + (1 + I)*ep*epHelp"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID4", +"FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp,Complex->False]\ +", "cc1 + ep*epHelp"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID5", +"FCLoopAddMissingHigherOrdersWarning[cc1,ep,epHelp,Names->False]", +"cc1 + (1 + I)*ep*epHelp"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID6", +"FCLoopAddMissingHigherOrdersWarning[GLI[topo1,{1,1,1,1,1}]->cc1/\ +ep^2+cc2/ep+cc3 ,ep,epHelp,Names->False]", +"GLI[topo1, {1, 1, 1, 1, 1}] -> cc3 + cc1/ep^2 + cc2/ep + (1 + \ +I)*ep*epHelp"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID7", +"FCLoopAddMissingHigherOrdersWarning[GLI[topo1,{1,1,1,1,1}]->cc1/\ +ep^2+cc2/ep+cc3 ,ep,epHelp]", +"GLI[topo1, {1, 1, 1, 1, 1}] -> cc3 + cc1/ep^2 + cc2/ep + (1 + \ +I)*ep*epHelp[topo1X11111]"}, +{"fcstFCLoopAddMissingHigherOrdersWarning-ID8", +"FCLoopAddMissingHigherOrdersWarning[{GLI[topo1,{1,1,1,1,1}]->cc1/\ +ep^2+cc2/ep+cc3} ,ep,epHelp]", +"{GLI[topo1, {1, 1, 1, 1, 1}] -> cc3 + cc1/ep^2 + cc2/ep + (1 + \ +I)*ep*epHelp[topo1X11111]}"} +}) + From cbf955f9465a365b6ebda8698913a8b913631dad Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 24 Jul 2024 13:40:56 +0200 Subject: [PATCH 48/67] Fixed a bug where Dirac trace with a g^5 at the beginning of the chain couldn't be evaluated in the Larin scheme (thanks to M. Lang) --- FeynCalc/Dirac/DiracTrace.m | 1 - FeynCalc/Dirac/DiracTrick.m | 10 +++++++++- Tests/Dirac/DiracTrace.test | 8 +++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrace.m b/FeynCalc/Dirac/DiracTrace.m index 3fdfe6e9..b86be20d 100755 --- a/FeynCalc/Dirac/DiracTrace.m +++ b/FeynCalc/Dirac/DiracTrace.m @@ -292,7 +292,6 @@ tmp = tmp/. spurHead[x__]/; !NonCommFreeQ[{x}/.DiracGamma->null1] :> noSpur[x]; FCPrint[3,"DiracTrace: diracTraceEvaluate: Trace contains unknown non-commutative objects: ", !FreeQ[tmp, noSpur], FCDoControl->diTrVerbose]; - (* Split chiral projectors here *) tmp = tmp /. {spurHead[x___,DiracGamma[6]] :> 1/2 spurHead[x] + 1/2 spurHead[x,DiracGamma[5]], spurHead[x___,DiracGamma[7]] :> 1/2 spurHead[x] - 1/2 spurHead[x,DiracGamma[5]]} /. spurHead[] -> 1; diff --git a/FeynCalc/Dirac/DiracTrick.m b/FeynCalc/Dirac/DiracTrick.m index 6d462ec6..afea81b0 100755 --- a/FeynCalc/Dirac/DiracTrick.m +++ b/FeynCalc/Dirac/DiracTrick.m @@ -349,12 +349,17 @@ create replacement rules (standard) and substitute the results back. diracTrickEvalFast[DiracGamma[6|7]]:= 1/2/; insideDiracTrace; +(* Reordering of Dirac matrices using cyclicity of the trace *) + diracTrickEvalFast[DOT[DiracGamma[(a:6|7)],b___,DiracGamma[(a:6|7)]]] := diracTrickEvalFast[DOT[b,DiracGamma[a]]]/; insideDiracTrace; diracTrickEvalFast[DOT[DiracGamma[(h1:5|6|7)],b___,DiracGamma[(h2:5|6|7)]]] := ga67MatSign[h1,h2] diracTrickEvalFast[DOT[b,ga67Mat[h1,h2]]]/; h1=!=h2 && insideDiracTrace; +diracTrickEvalFast[DOT[DiracGamma[(h:5|6|7)],b__]] := + diracTrickEvalFast[DOT[b,DiracGamma[h]]]/; insideDiracTrace; + (* Generic simplifications *) diracTrickEvalFast[DOT[b___,DiracGamma[l_LorentzIndex], DiracGamma[l_LorentzIndex], d___]] := @@ -375,6 +380,8 @@ create replacement rules (standard) and substitute the results back. diracTrickEvalFast[DOT[b___,DiracGamma[l_LorentzIndex, dim_:4], DiracGamma[c_Momentum, dim_:4], DiracGamma[l_LorentzIndex, dim_:4], d___]] := (2 - dim) diracTrickEvalFast[DOT[ b, DiracGamma[c, dim], d ]]; +(* Neighboring g^5 and chiral projectors *) + diracTrickEvalFast[DOT[b___,DiracGamma[5], DiracGamma[5], d___]] := diracTrickEvalFast[DOT[ b,d ]]; @@ -387,6 +394,7 @@ create replacement rules (standard) and substitute the results back. diracTrickEvalFast[DOT[b___, DiracGamma[(hh1:6|7)],DiracGamma[(hh2:6|7)], c___]] := ga67Val2[hh1,hh2] diracTrickEvalFast[DOT[b, DiracGamma[hh2], c]]; +(* D-dimensional formulas for anticommuting g^5 (NDR only) *) diracTrickEvalFast[DOT[b___,DiracGamma[5], c:DiracGamma[_[_,__],_].. , d___]] := (-1)^Length[{c}] diracTrickEvalFast[DOT[ b,c,DiracGamma[5],d]]/; MemberQ[{"NDR","NDR-Discard"},FeynCalc`Package`DiracGammaScheme] && @@ -424,7 +432,7 @@ create replacement rules (standard) and substitute the results back. diracTrickEvalFast[DOT[b, dg, xy, DiracGamma[h], c]]/; OddQ[Length[{xy}]] && MemberQ[{"NDR","NDR-Discard"},FeynCalc`Package`DiracGammaScheme] && MatchQ[FCGetDimensions[{dg,xy}],{_Symbol}]; - +(* 4-dimensional formulas for anticommuting g^5 *) diracTrickEvalFast[DOT[b___,DiracGamma[5], c:DiracGamma[_[__]].. , d___]] := (-1)^Length[{c}] diracTrickEvalFast[DOT[ b,c,DiracGamma[5],d]]; diff --git a/Tests/Dirac/DiracTrace.test b/Tests/Dirac/DiracTrace.test index 0827830b..33de1be6 100644 --- a/Tests/Dirac/DiracTrace.test +++ b/Tests/Dirac/DiracTrace.test @@ -491,5 +491,11 @@ DiracTraceEvaluate -> True, FCE -> True]", 2 FVD[x, mu] FVE[x, lor2] MTE[lora, nu] + MTE[lor2, nu] MTE[lora, mu] SPD[x, x] - MTE[lor2, mu] MTE[lora, nu] SPD[x, x] + -MTE[lor2, lora] MTE[mu, nu] SPD[x, x])"} +MTE[lor2, lora] MTE[mu, nu] SPD[x, x])"}, +{"fcstDiracTrace-ID63", "FCSetDiracGammaScheme[\"Larin\"];\n DiracTrace[ +GSD[p1] . (1 - GA[5]) . (1 - GSD[v]) . (1 - GSD[v]) . GA[5], +DiracTraceEvaluate -> True, EpsContract -> True, FCE -> True]", "(4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"}, +{"fcstDiracTrace-ID64", "FCSetDiracGammaScheme[\"Larin\"];\n DiracTrace[ +GA[5] . GSD[p1] . (1 - GA[5]) . (1 - GSD[v]) . (1 - GSD[v]), +DiracTraceEvaluate -> True, EpsContract -> True, FCE->True]", "(4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"} }); From a5219a8b210e72667641b2eaf085e7a2e4f517ee Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 24 Jul 2024 18:00:26 +0200 Subject: [PATCH 49/67] Added new option EpsEvaluate to DiracTrace that allows to disable the application of EpsEvaluate to the intermediate results. --- FeynCalc/Dirac/DiracTrace.m | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrace.m b/FeynCalc/Dirac/DiracTrace.m index b86be20d..e2878250 100755 --- a/FeynCalc/Dirac/DiracTrace.m +++ b/FeynCalc/Dirac/DiracTrace.m @@ -55,6 +55,7 @@ DiracTraceEvaluate -> False, EpsContract -> False, EpsExpand -> True, + EpsEvaluate -> True, Expand -> True, FCVerbose -> False, Factoring -> Automatic, @@ -217,11 +218,10 @@ unitMatrixTrace expr; diracTraceEvaluate[expr_/;!FreeQ[expr,DiracGamma], opts:OptionsPattern[]] := - Block[ { diractrres, tmp = expr, diractrfact, - diractrcoll, - dtmp,dWrap,wrapRule,prepSpur,time,time2,contract,spurHeadList,spurHeadListChiral,spurHeadListNonChiral, - gammaFree,gammaPart, - traceListChiral,traceListNonChiral,repRule,null1,null2,dummyIndexFreeQ}, + Block[{ diractrres, tmp = expr, diractrfact, diractrcoll, + dtmp,dWrap,wrapRule,prepSpur,time,time2,contract,spurHeadList, + spurHeadListChiral,spurHeadListNonChiral,gammaFree,gammaPart, + traceListChiral,traceListNonChiral,repRule,null1,null2,dummyIndexFreeQ, epsEvaluate}, wrapRule = {dWrap[5]->0, dWrap[6]->1/2, dWrap[7]->1/2, dWrap[LorentzIndex[_,_:4],___]->0, dWrap[_. Momentum[_,_:4]+_:0,___]->0}; @@ -229,6 +229,7 @@ diractrfact = OptionValue[DiracTrace,{opts},Factoring]; diractrcoll = OptionValue[DiracTrace,{opts},PairCollect]; contract = OptionValue[DiracTrace,{opts},Contract]; + epsEvaluate = OptionValue[DiracTrace,{opts},EpsEvaluate]; west = OptionValue[DiracTrace,{opts},West]; larinMVV = OptionValue[DiracTrace,{opts},LarinMVV]; @@ -370,7 +371,7 @@ (* Evaluate the traces *) time2=AbsoluteTime[]; - FCPrint[1,"DiracTrace: diracTraceEvaluate: Calculating non-chiral traces.", FCDoControl->diTrVerbose]; + FCPrint[1,"DiracTrace: diracTraceEvaluate: Calculating ", Length[spurHeadListChiral], " nonchiral traces.", FCDoControl->diTrVerbose]; traceListNonChiral = spurHeadListNonChiral/. spurHead-> spurNo5; FCPrint[1,"DiracTrace: diracTraceEvaluate: Done calculating non-chiral traces, timing: ", N[AbsoluteTime[] - time2, 4], FCDoControl->diTrVerbose]; @@ -383,7 +384,7 @@ ]; time2=AbsoluteTime[]; - FCPrint[1,"DiracTrace: diracTraceEvaluate: Calculating chiral traces.", FCDoControl->diTrVerbose]; + FCPrint[1,"DiracTrace: diracTraceEvaluate: Calculating ",Length[spurHeadListChiral]," chiral traces.", FCDoControl->diTrVerbose]; (* Purely 4 dimensional traces are always computed in the same way, regardless of the chosen scheme: Eq 2.18 of R. Mertig, M. Boehm, A. Denner. Comp. Phys. Commun., 64 (1991)) *) traceListChiral = spurHeadListChiral/. spurHead[x__]/;(FCGetDimensions[{x},ChangeDimension->True]==={4}) :> spur5In4Dim[x]; @@ -394,22 +395,25 @@ (* NDR *) "NDR", - FCPrint[3,"DiracTrace: diracTraceEvaluate: Chiral traces will be left untouched (NDR scheme).", FCDoControl->diTrVerbose]; + FCPrint[2,"DiracTrace: diracTraceEvaluate: Chiral traces will be left untouched (NDR scheme).", FCDoControl->diTrVerbose]; traceListChiral = traceListChiral/. spurHead -> noSpur, (* NDR-Discard *) "NDR-Discard", - FCPrint[3,"DiracTrace: diracTraceEvaluate: Chiral traces are set to zero (NDR-Discard scheme).", FCDoControl->diTrVerbose]; + FCPrint[2,"DiracTrace: diracTraceEvaluate: Chiral traces are set to zero (NDR-Discard scheme).", FCDoControl->diTrVerbose]; traceListChiral = ConstantArray[0, Length[traceListChiral]], (* Larin *) "Larin", - FCPrint[3,"DiracTrace: diracTraceEvaluate: Chiral traces will be computed using Larin scheme", FCDoControl->diTrVerbose]; + FCPrint[2,"DiracTrace: diracTraceEvaluate: Chiral traces will be computed using Larin scheme.", FCDoControl->diTrVerbose]; If[ larinMVV, - (* Larin, MVV trace formula *) + FCPrint[2,"DiracTrace: diracTraceEvaluate: Using the MVV trace formula.", FCDoControl->diTrVerbose]; + traceListChiral = traceListChiral/. spurHead -> spur5LarinMVV, - (* Laring, standard (slow!) trace formula *) + + FCPrint[2,"DiracTrace: diracTraceEvaluate: Using the standard slow trace formula.", FCDoControl->diTrVerbose]; + traceListChiral = traceListChiral/. spurHead -> spur5Larin ], @@ -495,7 +499,7 @@ ]; (* Special expansion for expressions that contain Levi-Civita tensors*) - If[ !FreeQ[tmp, Eps], + If[ !FreeQ[tmp, Eps] && epsEvaluate, time=AbsoluteTime[]; FCPrint[1,"DiracTrace: diracTraceEvaluate: Treating Eps tensors.", FCDoControl->diTrVerbose]; tmp = EpsEvaluate[tmp,FCI->True, EpsExpand->OptionValue[DiracTrace,{opts},EpsExpand]]//Expand; From b16e880087e2a45a4e3fd71b1fe42275e5629ad1 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 29 Jul 2024 16:50:28 +0200 Subject: [PATCH 50/67] Fixed a bug in the Larin scheme when dealing with left handed projectors inside the matrix chain (thanks to M. Lang). --- FeynCalc/Dirac/DiracTrick.m | 2 +- Tests/Dirac/DiracTrace.test | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrick.m b/FeynCalc/Dirac/DiracTrick.m index afea81b0..91532d9f 100755 --- a/FeynCalc/Dirac/DiracTrick.m +++ b/FeynCalc/Dirac/DiracTrick.m @@ -1566,7 +1566,7 @@ create replacement rules (standard) and substitute the results back. Block[{li1,li2,li3}, {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; mass chiralTrickLarin[b,DiracGamma[7],d] + - 1/2 chiralTrickLarin[b,dg,d] + + 1/2 chiralTrickLarin[b,dg,d] - I/12 $LeviCivitaSign Eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim],DiracGamma[li2,dim],DiracGamma[li3,dim],d] ]/; !FreeQ2[{d},{DiracGamma[5],DiracGamma[6],DiracGamma[7]}] && NonCommFreeQ[mass]; diff --git a/Tests/Dirac/DiracTrace.test b/Tests/Dirac/DiracTrace.test index 33de1be6..523c23c0 100644 --- a/Tests/Dirac/DiracTrace.test +++ b/Tests/Dirac/DiracTrace.test @@ -494,8 +494,11 @@ MTE[lor2, mu] MTE[lora, nu] SPD[x, x] + MTE[lor2, lora] MTE[mu, nu] SPD[x, x])"}, {"fcstDiracTrace-ID63", "FCSetDiracGammaScheme[\"Larin\"];\n DiracTrace[ GSD[p1] . (1 - GA[5]) . (1 - GSD[v]) . (1 - GSD[v]) . GA[5], -DiracTraceEvaluate -> True, EpsContract -> True, FCE -> True]", "(4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"}, +DiracTraceEvaluate -> True, EpsContract -> True, FCE -> True]", "(-4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"}, {"fcstDiracTrace-ID64", "FCSetDiracGammaScheme[\"Larin\"];\n DiracTrace[ GA[5] . GSD[p1] . (1 - GA[5]) . (1 - GSD[v]) . (1 - GSD[v]), -DiracTraceEvaluate -> True, EpsContract -> True, FCE->True]", "(4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"} +DiracTraceEvaluate -> True, EpsContract -> True, FCE->True]", "(-4*(-3 + D)*(-2 + D)*(-1 + D)*SPD[p1, v])/3"}, +{"fcstDiracTrace-ID65", "FCSetDiracGammaScheme[\"Larin\"];\n DiracTrace[ +GSD[p1] . (1 - GA[5]) . (1 - GSD[v]) . (1 - GSD[v]) . GA[5], +DiracTraceEvaluate -> True, EpsContract -> True]", "(-4*(-3 + D)*(-2 + D)*(-1 + D)*Pair[Momentum[p1, D], Momentum[v, D]])/3"} }); From 61cf2ab5e2667f8a11bdc3e13724e8e3a36a94bd Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 1 Aug 2024 17:33:18 +0200 Subject: [PATCH 51/67] Vastly improved MomentumCombine to have more control over the way expressions get combined. --- .../Documentation/Markdown/MomentumCombine.md | 118 ----------- .../Mathematica/Lorentz/MomentumCombine.m | 59 ++++++ FeynCalc/Lorentz/MomentumCombine.m | 190 +++++++++++++++--- Tests/Lorentz/MomentumCombine.test | 53 ++++- 4 files changed, 270 insertions(+), 150 deletions(-) delete mode 100644 FeynCalc/Documentation/Markdown/MomentumCombine.md diff --git a/FeynCalc/Documentation/Markdown/MomentumCombine.md b/FeynCalc/Documentation/Markdown/MomentumCombine.md deleted file mode 100644 index b6ec82a3..00000000 --- a/FeynCalc/Documentation/Markdown/MomentumCombine.md +++ /dev/null @@ -1,118 +0,0 @@ -## MomentumCombine - -`MomentumCombine[expr]` is the inverse operation to `MomentumExpand` and `ExpandScalarProduct`. `MomentumCombine` combines also `Pair`s. - -### See also - -[Overview](Extra/FeynCalc.md), [ExpandScalarProduct](ExpandScalarProduct.md), [Momentum](Momentum.md), [MomentumExpand](MomentumExpand.md). - -### Examples - -```mathematica -Momentum[p] - 2 Momentum[q] // MomentumCombine // StandardForm - -(*Momentum[p - 2 q]*) -``` - -```mathematica -FV[p, \[Mu]] + 2 FV[q, \[Mu]] - -ex = MomentumCombine[%] -``` - -$$\overline{p}^{\mu }+2 \overline{q}^{\mu }$$ - -$$\left(\overline{p}+2 \overline{q}\right)^{\mu }$$ - -```mathematica -ex // StandardForm - -(*Pair[LorentzIndex[\[Mu]], Momentum[p + 2 q]]*) -``` - -```mathematica -ex // ExpandScalarProduct -``` - -$$\overline{p}^{\mu }+2 \overline{q}^{\mu }$$ - -```mathematica -3 Pair[LorentzIndex[\[Mu]], Momentum[p]] + 2 Pair[LorentzIndex[\[Mu]], Momentum[q]] - -ex = MomentumCombine[%] -``` - -$$3 \overline{p}^{\mu }+2 \overline{q}^{\mu }$$ - -$$\left(3 \overline{p}+2 \overline{q}\right)^{\mu }$$ - -```mathematica -ex // StandardForm - -(*Pair[LorentzIndex[\[Mu]], Momentum[3 p + 2 q]]*) -``` - -In some cases one might need a better control over the types of expressions getting combined. For example, the following -expression will not be combined by default, since the coefficients of scalar products are not numbers - -```mathematica -DataType[a1, FCVariable] = True; -DataType[a2, FCVariable] = True; -``` - -```mathematica -ex = SPD[a1 p, n] + SPD[a2 p, nb] -``` - -$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)$$ - -```mathematica -MomentumCombine[ex] -``` - -$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)$$ - -Setting the option `NumberQ` to `False` we can still achieve the desired form - -```mathematica -MomentumCombine[ex, NumberQ -> False] -``` - -$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p$$ - -However, in the following case combing $p^2$ with the other two scalar products is not useful - -```mathematica -ex = SPD[p] + SPD[a1 p, n] + SPD[a2 p, nb] -``` - -$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)+p^2$$ - -```mathematica -MomentumCombine[ex, NumberQ -> False] -``` - -$$p\cdot (\text{a1} n+\text{a2} \;\text{nb}+p)$$ - -To prevent this from happening there is a somewhat hidden option `"Quadratic"` that can be set to `False` - -```mathematica -MomentumCombine[ex, NumberQ -> False, "Quadratic" -> False] -``` - -$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p+p^2$$ - -```mathematica -ex = SPD[p] + SPD[a1 p, n] + SPD[a2 p, nb] + SPD[p, l] + SPD[p, k] -``` - -$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)+k\cdot p+l\cdot p+p^2$$ - -In this case we we would like to prevent the scalar products involving `l` and `k` from being combined with -the rest. To that end we need to use the option `Except` - -```mathematica -MomentumCombine[ex, NumberQ -> False, "Quadratic" -> False, Except -> {k, l}] -``` - -$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p+k\cdot p+l\cdot p+p^2$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m b/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m index 00e9021a..19b9833b 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m @@ -9,6 +9,31 @@ (* ::Text:: *) (*`MomentumCombine[expr]` is the inverse operation to `MomentumExpand` and `ExpandScalarProduct`. `MomentumCombine` combines also `Pair`s.*) +(*Notice, that `MomentumCombine` cannot complete squares. It can, however, bring expressions containing scalar products to a suitable form that allows for a square completion using other means.*) + + +(* ::Text:: *) +(*This function offers multiple options.*) + + +(* ::Text:: *) +(*The option `NumberQ` (default is `True`) specifies whether one should only merge quantities with numerical prefactors or not. Setting it to `False` allows for symbolic prefactors.*) + + +(* ::Text:: *) +(*Setting the option `"Quadratic"` to `False` (default is `True`) effectively means that momenta squared will not be combined with anything else.*) + + +(* ::Text:: *) +(*With the option `"ExcludeScalarProducts"` we can ensure that scalar products containing any of the momenta listed are not merged with anything else. So `a.x + a.y` can be merged either if `a` contains no such momenta, or if both `x` and `y` are free of them.*) + + +(* ::Text:: *) +(*The option `Except` forbids merging the listed momenta with anything else. It is much more restrictive than `"ExcludeScalarProducts"` that allows for merging terms linear in the listed momenta.*) + + +(* ::Text:: *) +(*The option `Select` allows for gathering all terms linear in the given momenta before applying any other combining rules.*) (* ::Subsection:: *) @@ -93,3 +118,37 @@ MomentumCombine[ex,NumberQ->False,"Quadratic"->False,Except->{k,l}] + + +(* ::Text:: *) +(*Suppose that we have an expression that can be written as a square. To achieve the desired combination of momenta we need to*) + + +(DataType[#,FCVariable]=True)&/@{gkin,meta,u0b}; + + +ex=SPD[k1,k1]-2 SPD[k1,k2]+2 gkin meta SPD[k1,n]-2 gkin meta u0b SPD[k1,n]-meta u0b SPD[k1,nb]+ +SPD[k2,k2]-2 gkin meta SPD[k2,n]+2 gkin meta u0b SPD[k2,n]+meta u0b SPD[k2,nb] + + +(* ::Text:: *) +(*The naive application of `MomentumCombine` doesn't return anything useful*) + + +MomentumCombine[ex] + + +(* ::Text:: *) +(*Here we actually want to gather terms linear in `k1` and `k2`first before trying to combine them together. To that aim we can use the option `Select`.*) +(*Employing the options `"Quadratic"` and `"ExcludeScalarProducts"` we can prevent `k1` and `k2` from getting combined with anything containing *) +(*those momenta. Furthermore, we enable symbolical prefactor by setting `NumberQ` to false*) + + +MomentumCombine[ex,Select->{k1,k2},"Quadratic"->False,"ExcludeScalarProducts"->{k1,k2},NumberQ->False] + + +(* ::Text:: *) +(*This result looks very good, but `k1` and `k2` were not combined because they are contracted to long linear combinations of 4-momenta that were not properly factorized. The option `Factoring` solves this issue*) + + +res=MomentumCombine[ex,Select->{k1,k2},"Quadratic"->False,"ExcludeScalarProducts"->{k1,k2},NumberQ->False,Factoring->Factor2] diff --git a/FeynCalc/Lorentz/MomentumCombine.m b/FeynCalc/Lorentz/MomentumCombine.m index 51a5c1c6..8f33df94 100644 --- a/FeynCalc/Lorentz/MomentumCombine.m +++ b/FeynCalc/Lorentz/MomentumCombine.m @@ -30,32 +30,41 @@ optNumberQ::usage=""; optQuadratic::usage=""; optExcept::usage=""; +optExcludeScalarProducts::usage=""; Options[MomentumCombine] = { - Complex -> True, - FCE -> False, - FCI -> False, - FV -> True, - LC -> True, - LeafCount -> 1, - Except -> {}, - NumberQ -> True, - "Quadratic" -> True, - SP -> True + "ExcludeScalarProducts" -> {}, + "Quadratic" -> True, + Complex -> True, + Except -> {}, + FCE -> False, + FCI -> False, + FV -> True, + Factoring -> False, + LC -> True, + LeafCount -> 1, + NumberQ -> True, + Select -> {}, + SP -> True }; MomentumCombine[expr_, OptionsPattern[]] := - Block[{ex,res,rules=rulesMain}, + Block[{ ex, res, rules, optFactoring, moms, momsFac, optSelect}, - optNumberQ = OptionValue[NumberQ]; - optQuadratic = OptionValue["Quadratic"]; - optExcept = OptionValue[Except]; + optNumberQ = OptionValue[NumberQ]; + optQuadratic = OptionValue["Quadratic"]; + optExcludeScalarProducts = OptionValue["ExcludeScalarProducts"]; + optExcept = OptionValue[Except]; + optFactoring = OptionValue[Factoring]; + optSelect = OptionValue[Select]; If[ !OptionValue[FCI], ex = FCI[expr], ex = expr ]; + rules=rulesMain; + If[ OptionValue[FV], rules = Join[rules,rulesFV] ]; @@ -72,8 +81,18 @@ Return[ex] ]; - res = ex //. Dispatch[rules]; + If[ optSelect=!={}, + ex = Fold[(#1 //. rulesSpecificSP[#2])&, ex,optSelect]; + + If[ optFactoring=!=False, + moms = Cases2[ex,Momentum]; + momsFac = moms /. Momentum[a_, dim___] :> Momentum[optFactoring[a], dim]; + ex = ex /. Dispatch[Thread[Rule[moms,momsFac]]] + ]; + ]; + + res = ex //. Dispatch[rules]; If[ OptionValue[Complex] && !FreeQ[res,Complex], res = res /. { @@ -82,6 +101,13 @@ } ]; + If[optFactoring=!=False, + + moms = Cases2[res,Momentum]; + momsFac = moms /. Momentum[a_, dim___] :> Momentum[optFactoring[a], dim]; + res = res /. Dispatch[Thread[Rule[moms,momsFac]]] + ]; + If[ OptionValue[FCE], res = FCE[res] ]; @@ -94,7 +120,7 @@ complex[a_, b_] := a + im b; - +(* Joining single momenta inside pairs or Cartesian pairs *) rulesMain = { (n3_. Momentum[x_, dim_:4] + n4_. Momentum[y_, dim_:4]):> (Momentum[ Expand[n3 x + n4 y],dim]/; (NumberQ[n3] && NumberQ[n4])), @@ -121,35 +147,137 @@ (CartesianMomentum[ Expand[n3 x + n4 y],dim]/; !optNumberQ && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}]) }; +rulesSpecificSP[chosenMom_] := { + + (* Quadratic on, numeric on: 2 k1.n + 3 k2.n = (2*k1+3*k2).n or 2 k1.k1 + 3 k1.n = (2*k1+3*n).k1 *) + (n3_. Pair[Momentum[chosenMom,dim_:4], Momentum[x_, dim_:4]] + n4_. Pair[Momentum[chosenMom,dim_:4], Momentum[y_, dim_:4]]):> + Pair[Momentum[chosenMom,dim], Momentum[Expand[n3 x + n4 y],dim]]/; optQuadratic && + (NumberQ[n3] && NumberQ[n4]) && + (FreeQ2[{x,y},optExcludeScalarProducts]) && + !IntersectingQ[{x,y},optExcept], + + (* Quadratic on, numeric off: x k1.n + y k2.n = (x*k1+y*k2).n or x k1.k1 + y k1.n = (x*k1+y*n).k1 *) + (n3_. Pair[Momentum[chosenMom,dim_:4], Momentum[x_, dim_:4]] + n4_. Pair[Momentum[chosenMom,dim_:4], Momentum[y_, dim_:4]]):> + Pair[Momentum[chosenMom,dim], Momentum[Expand[n3 x + n4 y],dim]]/; optQuadratic && + !optNumberQ && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts]) && + !IntersectingQ[{x,y},optExcept], + + (* Quadratic off, numeric on: 2 k1.n + 3 k2.n = (2*k1+3*k2).n only *) + (n3_. Pair[Momentum[chosenMom,dim_:4], Momentum[x_, dim_:4]] + n4_. Pair[Momentum[chosenMom,dim_:4], Momentum[y_, dim_:4]]):> + Pair[Momentum[chosenMom,dim], Momentum[Expand[n3 x + n4 y],dim]]/; !optQuadratic && (chosenMom=!=x && chosenMom=!=y) && + (NumberQ[n3] && NumberQ[n4]) && + (FreeQ2[{x,y},optExcludeScalarProducts]) && + !IntersectingQ[{x,y},optExcept], + + (* Quadratic off, numeric off: x k1.n + y k2.n = (x*k1+y*k2).n only *) + (n3_. Pair[Momentum[chosenMom,dim_:4], Momentum[x_, dim_:4]] + n4_. Pair[Momentum[chosenMom,dim_:4], Momentum[y_, dim_:4]]):> + Pair[Momentum[chosenMom,dim], Momentum[Expand[n3 x + n4 y],dim]]/; !optQuadratic && chosenMom=!=x && chosenMom=!=y && + !optNumberQ && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts]) && + !IntersectingQ[{x,y},optExcept] + +}; -(*"Quadratic"->False effectively means that k^2 will not be combined with anything else*) +(* Joining scalar products *) rulesSP = { + +(* + "Quadratic"->False effectively means that momenta squared will not be combined with anything else + + With the "ExcludeScalarProducts" option we can ensure that scalar products containing any of the + momenta listed are not merged with anything else. So "a.x + a.y" can be merged either if "a" contains + no such momenta, or if both "x" and "y" are free of them. + + The "Except" option completely prohibits joining scalar products containing listed momenta with anything + else. +*) + + (* Quadratic on, numeric on: 2 k1.n + 3 k2.n = (2*k1+3*k2).n or 2 k1.k1 + 3 k1.n = (2*k1+3*n).k1 *) (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n4_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> - Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; optQuadratic && (NumberQ[n3] && NumberQ[n4] && n3=!=n4) && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; optQuadratic && + (NumberQ[n3] && NumberQ[n4] && n3=!=n4) && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[{a},optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + (* Quadratic on, numeric off: x k1.n + y k2.n = (x*k1+y*k2).n or x k1.k1 + y k1.n = (x*k1+y*n).k1 *) (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n4_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> - Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; !optQuadratic && (a[[1]]=!=x && a[[1]]=!=y && NumberQ[n3] && NumberQ[n4]) && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; optQuadratic && + !optNumberQ && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + (* Quadratic off, numeric on: 2 k1.n + 3 k2.n = (2*k1+3*k2).n only *) (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n4_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> - Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; !optNumberQ && a[[1]]=!=x && a[[1]]=!=y && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; !optQuadratic && (a[[1]]=!=x && a[[1]]=!=y) && + (NumberQ[n3] && NumberQ[n4] && n3=!=n4) && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], - (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n3_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> - n3 Pair[a, Momentum[Expand[x + y],dim]]/; optQuadratic && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + (* Quadratic off, numeric off: x k1.n + y k2.n = (x*k1+y*k2).n only *) + (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n4_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> + Pair[a, Momentum[Expand[n3 x + n4 y],dim]]/; !optQuadratic && a[[1]]=!=x && a[[1]]=!=y && + !optNumberQ && FreeQ2[{n3,n4},{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + (* These rules apply both for numerical and symbolical prefactors *) + + (* Quadratic on, + *) + (n_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> + n Pair[a, Momentum[Expand[x + y],dim]]/; optQuadratic && + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + (* Quadratic off, + *) + (n_. Pair[a_Momentum, Momentum[x_, dim_:4]] + n_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> + n Pair[a, Momentum[Expand[x + y],dim]]/; !optQuadratic && !optNumberQ && a[[1]]=!=x && a[[1]]=!=y && + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + (* Quadratic on, - *) + (n_. Pair[a_Momentum, Momentum[x_, dim_:4]] - n_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> + n Pair[a, Momentum[Expand[x - y],dim]]/; optQuadratic && + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + (* Quadratic off, - *) + (n_. Pair[a_Momentum, Momentum[x_, dim_:4]] - n_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> + n Pair[a, Momentum[Expand[x - y],dim]]/; !optQuadratic && !optNumberQ && a[[1]]=!=x && a[[1]]=!=y && + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + (*TODO add all the above options here *) - (n3_. Pair[a_Momentum, Momentum[x_, dim_:4]] - n3_. Pair[a_Momentum, Momentum[y_, dim_:4]]):> - n3 Pair[a, Momentum[Expand[x - y],dim]]/; optQuadratic && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], (n3_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[x_, dim_:4],n_,nb_]] + n4_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[y_, dim_:4],n_,nb_]]):> - Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[n3 x + n4 y],dim],n,nb]]/;(NumberQ[n3] && NumberQ[n4] && n3=!=n4) && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[n3 x + n4 y],dim],n,nb]]/; + (NumberQ[n3] && NumberQ[n4] && n3=!=n4) && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], + + + (* These rules apply both for numerical and symbolical prefactors *) + + (n1_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[x_, dim_:4],n_,nb_]] + + n1_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[y_, dim_:4],n_,nb_]]):> + n1 Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[x + y],dim],n,nb]]/; + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], - (n3_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[x_, dim_:4],n_,nb_]] + - n3_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[y_, dim_:4],n_,nb_]]):> - n3 Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[x + y],dim],n,nb]] && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], + (n1_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[x_, dim_:4],n_,nb_]] - + n1_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[y_, dim_:4],n_,nb_]]):> + n1 Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[x - y],dim],n,nb]]/; + FreeQ2[n,{Pair,CartesianPair,TemporalPair,FeynAmpDenominator,DOT}] && + (FreeQ2[{x,y},optExcludeScalarProducts] || FreeQ2[a[[1]],optExcludeScalarProducts]) && + !IntersectingQ[{a,x,y},optExcept], - (n3_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[x_, dim_:4],n_,nb_]] - - n3_. Pair[LightConePerpendicularComponent[a_Momentum,n_,nb_], LightConePerpendicularComponent[Momentum[y_, dim_:4],n_,nb_]]):> - n3 Pair[LightConePerpendicularComponent[a,n,nb], LightConePerpendicularComponent[Momentum[Expand[x - y],dim],n,nb]] && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], (n3_. CartesianPair[a_CartesianMomentum, CartesianMomentum[x_, dim_:3]] + n4_. CartesianPair[a_CartesianMomentum, CartesianMomentum[y_, dim_:3]]):> CartesianPair[a, CartesianMomentum[Expand[n3 x + n4 y],dim]]/;(NumberQ[n3] && NumberQ[n4] && n3=!=n4) && !MemberQ[optExcept,x] && !MemberQ[optExcept,y], diff --git a/Tests/Lorentz/MomentumCombine.test b/Tests/Lorentz/MomentumCombine.test index b54b1264..4f8adbac 100644 --- a/Tests/Lorentz/MomentumCombine.test +++ b/Tests/Lorentz/MomentumCombine.test @@ -324,5 +324,56 @@ p,nb]+SPD[p,l]+SPD[p,k],NumberQ\[Rule]False,\"Quadratic\"\[Rule]False,\ Except\[Rule]{k,l}]", "Pair[Momentum[k, D], Momentum[p, D]] + Pair[Momentum[l, D], \ Momentum[p, D]] + Pair[Momentum[a1*n + a2*nb, D], Momentum[p, D]] + \ -Pair[Momentum[p, D], Momentum[p, D]]"} +Pair[Momentum[p, D], Momentum[p, D]]"}, +{"fcstMomentumCombine-ID82", +"(DataType[#, FCVariable] = True) & /@ {gkin, meta, u0b}; +MomentumCombine[ +SPD[k1] + 2 SPD[k1, k2] + +meta Pair[Momentum[k1, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]] + +Pair[Momentum[k2, D], Momentum[k2, D]] - +meta Pair[Momentum[k2, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]]]", +"Pair[Momentum[k1, D], Momentum[k1 + 2*k2, D]] + meta*Pair[Momentum[k1 - k2, D], +Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D]] + Pair[Momentum[k2, D], Momentum[k2, D]]"}, +{"fcstMomentumCombine-ID83", +"(DataType[#, FCVariable] = True) & /@ {gkin, meta, u0b}; +MomentumCombine[ +SPD[k1] + 2 SPD[k1, k2] + +meta Pair[Momentum[k1, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]] + +Pair[Momentum[k2, D], Momentum[k2, D]] - +meta Pair[Momentum[k2, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]], +NumberQ -> False]", +"Pair[Momentum[k1, D], Momentum[k1 + 2*k2 + 2*gkin*meta*n - 2*gkin*meta*n*u0b - meta*nb*u0b, D]] + +Pair[Momentum[k2, D], Momentum[k2 - 2*gkin*meta*n + 2*gkin*meta*n*u0b + meta*nb*u0b, D]]"}, +{"fcstMomentumCombine-ID84", +"(DataType[#, FCVariable] = True) & /@ {gkin, meta, u0b}; +MomentumCombine[ +SPD[k1] - 2 SPD[k1, k2] + +meta Pair[Momentum[k1, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]] + +Pair[Momentum[k2, D], Momentum[k2, D]] - +meta Pair[Momentum[k2, D], + Momentum[2 gkin n - 2 gkin n u0b - nb u0b, D]], +NumberQ -> False, \"ExcludeScalarProducts\" -> {k1, k2}, +Factoring -> Factor2]", +"Pair[Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], Momentum[k2, D]] + +meta*Pair[Momentum[k1 - k2, D], Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D]] + Pair[Momentum[k2, D], Momentum[k2, D]]"}, +{"fcstMomentumCombine-ID85", +"MomentumCombine[SPD[k1] + 2 SPD[k1, k2]]","Pair[Momentum[k1, D], Momentum[k1 + 2*k2, D]]"}, +{"fcstMomentumCombine-ID86", +"MomentumCombine[SPD[k1] + 2 SPD[k1, k2], \"Quadratic\" -> False]", +"Pair[Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], Momentum[k2, D]]"}, +{"fcstMomentumCombine-ID87", +"MomentumCombine[ +SPD[k1, k1] - 2 SPD[k1, k2] + 2 gkin meta SPD[k1, n] - +2 gkin meta u0b SPD[k1, n] - meta u0b SPD[k1, nb] + +SPD[k2, k2] - 2 gkin meta SPD[k2, n] + +2 gkin meta u0b SPD[k2, n] + meta u0b SPD[k2, nb], +Select -> {k1, k2}, \"Quadratic\" -> False, +\"ExcludeScalarProducts\" -> {k1, k2}, NumberQ -> False, +Factoring -> Factor2, FCE -> True]", +"SPD[k1, k1] - 2*SPD[k1, k2] + meta*SPD[k1 - k2, 2*gkin*n - 2*gkin*n*u0b - nb*u0b] + SPD[k2, k2]"} }; From 3ef9d655a385ea6de5581908193081b655707b10 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 5 Aug 2024 12:02:49 +0200 Subject: [PATCH 52/67] Added new option "OnlyMixedQuadraticEikonalPropagators" to ToGFAD. --- FeynCalc/Documentation/Markdown/ToGFAD.md | 47 ------------------- .../Mathematica/LoopIntegrals/ToGFAD.m | 23 ++++++++- FeynCalc/LoopIntegrals/ToGFAD.m | 30 +++++++----- Tests/LoopIntegrals/ToGFAD.test | 11 ++++- 4 files changed, 49 insertions(+), 62 deletions(-) delete mode 100644 FeynCalc/Documentation/Markdown/ToGFAD.md diff --git a/FeynCalc/Documentation/Markdown/ToGFAD.md b/FeynCalc/Documentation/Markdown/ToGFAD.md deleted file mode 100644 index d4e8b4f0..00000000 --- a/FeynCalc/Documentation/Markdown/ToGFAD.md +++ /dev/null @@ -1,47 +0,0 @@ -## ToGFAD - -`ToGFAD[exp]` converts all occurring propagator types (`FAD`, `SFAD`, `CFAD`) to `GFAD`s. This is mainly useful when doing expansions in kinematic invariants, where e.g. scalar products may not be appear explicitly when using `FAD`- or `SFAD`-notation. - -ToGFAD is the inverse operation to FromGFAD. - -### See also - -[Overview](Extra/FeynCalc.md), [GFAD](GFAD.md), [SFAD](SFAD.md), [CFAD](CFAD.md), [FeynAmpDenominatorExplicit](FeynAmpDenominatorExplicit.md), [FromGFAD](FromGFAD.md) - -### Examples - -```mathematica -ToGFAD[FAD[p]] -``` - -$$\frac{1}{(p^2+i \eta )}$$ - -```mathematica -ToGFAD[FAD[p]] // StandardForm - -(*FeynAmpDenominator[GenericPropagatorDenominator[Pair[Momentum[p, D], Momentum[p, D]], {1, 1}]]*) -``` - -```mathematica -ToGFAD[SFAD[{p + q, m^2}]] -``` - -$$\frac{1}{(-m^2+p^2+2 (p\cdot q)+q^2+i \eta )}$$ - -```mathematica -ToGFAD[SFAD[{p + q, m^2}]] // StandardForm - -(*FeynAmpDenominator[GenericPropagatorDenominator[-m^2 + Pair[Momentum[p, D], Momentum[p, D]] + 2 Pair[Momentum[p, D], Momentum[q, D]] + Pair[Momentum[q, D], Momentum[q, D]], {1, 1}]]*) -``` - -```mathematica -ToGFAD[SFAD[{p + q, m^2}], FinalSubstitutions -> {SPD[q] -> 0}] -``` - -$$\frac{1}{(-m^2+p^2+2 (p\cdot q)+i \eta )}$$ - -```mathematica -ToGFAD[SFAD[{p + q, m^2}], FinalSubstitutions -> {SPD[q] -> 0}] // StandardForm - -(*FeynAmpDenominator[GenericPropagatorDenominator[-m^2 + Pair[Momentum[p, D], Momentum[p, D]] + 2 Pair[Momentum[p, D], Momentum[q, D]], {1, 1}]]*) -``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToGFAD.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToGFAD.m index 5c3407d2..c655bf9a 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToGFAD.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/ToGFAD.m @@ -12,7 +12,11 @@ (* ::Text:: *) -(*ToGFAD is the inverse operation to FromGFAD.*) +(*`ToGFAD` is the inverse operation to `FromGFAD`.*) + + +(* ::Text:: *) +(*Using the option "OnlyMixedQuadraticEikonalPropagators" one can limit the conversion to a particular type of standard and Cartesian propagator denominators that contain both quadratic and eikonal pieces. Those are the ones that usually cause issues when doing topology minimization*) (* ::Subsection:: *) @@ -43,3 +47,20 @@ ToGFAD[SFAD[{p+q,m^2}],FinalSubstitutions->{SPD[q]->0}]//StandardForm + + +(* ::Text:: *) +(*This is not a mixed quadratic-eikonal propagator so it remains unchanged*) + + +ToGFAD[SFAD[{{k2,0},{0,1},1}],"OnlyMixedQuadraticEikonalPropagators"->True, +FCE->True]//StandardForm + + +(* ::Text:: *) +(*This is a mixed propagator that will be converted to a `GFAD`*) + + +ToGFAD[SFAD[{{k1,2 gkin meta k1 . n-2 gkin meta u0b k1 . n-meta u0b k1 . nb}, +{2 gkin meta^2 u0b-2 gkin meta^2 u0b^2,1},1}], +"OnlyMixedQuadraticEikonalPropagators"->True,FCE->True]//StandardForm diff --git a/FeynCalc/LoopIntegrals/ToGFAD.m b/FeynCalc/LoopIntegrals/ToGFAD.m index 3598d8e5..0427d1a5 100755 --- a/FeynCalc/LoopIntegrals/ToGFAD.m +++ b/FeynCalc/LoopIntegrals/ToGFAD.m @@ -36,21 +36,22 @@ Begin["`ToGFAD`Private`"] tgfVerbose::usage=""; -dummy::usage=""; -optPowerExpand::usage=""; +optOnlyMixedQuadraticEikonalPropagators::usage=""; Options[ToGFAD] = { - FCE -> False, - FCI -> False, - FCVerbose -> False, - FinalSubstitutions -> {} + "OnlyMixedQuadraticEikonalPropagators" -> False, + FCE -> False, + FCI -> False, + FCVerbose -> False, + FinalSubstitutions -> {} }; ToGFAD[expr_, OptionsPattern[]] := Block[{ res, ex, pds,pdsConverted,rulePds, check, optFinalSubstitutions}, - optFinalSubstitutions = OptionValue[FinalSubstitutions]; + optFinalSubstitutions = OptionValue[FinalSubstitutions]; + optOnlyMixedQuadraticEikonalPropagators = OptionValue["OnlyMixedQuadraticEikonalPropagators"]; If [OptionValue[FCVerbose]===False, @@ -78,11 +79,13 @@ FCPrint[3, "ToGFAD: Unique PropagatorDenominators: ", pds, FCDoControl->tgfVerbose]; - pdsConverted = (toGFAD/@pds); + pdsConverted = (toGFAD/@pds) /. toGFAD -> Identity; FCPrint[3, "ToGFAD: After ToGFAD: ", pdsConverted, FCDoControl->tgfVerbose]; - If[ !FreeQ2[pdsConverted,{toGFAD,PropagatorDenominator,StandardPropagatorDenominator,CartesianPropagatorDenominator}], + pdsConverted = pdsConverted /. toGFAD -> Identity; + + If[ !FreeQ2[pdsConverted,{toGFAD,PropagatorDenominator,StandardPropagatorDenominator,CartesianPropagatorDenominator}] && !optOnlyMixedQuadraticEikonalPropagators, Message[ToGFAD::failmsg, "Failed to convert all propagators to GFADs"]; Abort[] ]; @@ -91,12 +94,10 @@ FCPrint[3, "ToGFAD: After applying substitution rules: ", pdsConverted, FCDoControl->tgfVerbose]; - rulePds = Thread[Rule[pds,pdsConverted]]; FCPrint[3, "ToGFAD: Final replacement rule: ", rulePds, FCDoControl->tgfVerbose]; - res = ex /. Dispatch[rulePds]; If[ OptionValue[FCE], @@ -110,8 +111,11 @@ ]; -toGFAD[(h:StandardPropagatorDenominator|CartesianPropagatorDenominator)[args__,{n_,s_}]] := - GenericPropagatorDenominator[1/FeynAmpDenominatorExplicit[FeynAmpDenominator[h[args,{1,s}]],FCI->True,ExpandScalarProduct->True],{n,s}]; +toGFAD[(h:StandardPropagatorDenominator|CartesianPropagatorDenominator)[args__, {n_,s_}]] := + GenericPropagatorDenominator[1/FeynAmpDenominatorExplicit[FeynAmpDenominator[h[args,{1,s}]],FCI->True,ExpandScalarProduct->True],{n,s}] /; !optOnlyMixedQuadraticEikonalPropagators; + +toGFAD[(h:StandardPropagatorDenominator|CartesianPropagatorDenominator)[a_/;a=!=0,b_/;b=!=0, c_, {n_,s_}]] := + GenericPropagatorDenominator[1/FeynAmpDenominatorExplicit[FeynAmpDenominator[h[a,b,c,{1,s}]],FCI->True,ExpandScalarProduct->True],{n,s}] /; optOnlyMixedQuadraticEikonalPropagators; toGFAD[PropagatorDenominator[args__]] := GenericPropagatorDenominator[1/FeynAmpDenominatorExplicit[FeynAmpDenominator[PropagatorDenominator[args]],FCI->True,ExpandScalarProduct->True],{1,1}]; diff --git a/Tests/LoopIntegrals/ToGFAD.test b/Tests/LoopIntegrals/ToGFAD.test index bc05afc3..bed84040 100644 --- a/Tests/LoopIntegrals/ToGFAD.test +++ b/Tests/LoopIntegrals/ToGFAD.test @@ -85,5 +85,14 @@ D]], {1, -1}]]"}, "FeynAmpDenominator[GenericPropagatorDenominator[m^2 + \ CartesianPair[CartesianMomentum[p, -1 + D], CartesianMomentum[p, -1 + \ D]] + CartesianPair[CartesianMomentum[p, -1 + D], \ -CartesianMomentum[q, -1 + D]], {1, -1}]]"} +CartesianMomentum[q, -1 + D]], {1, -1}]]"}, +{"fcstToGFAD-ID18", "ToGFAD[SFAD[{{k2, 0}, {0, 1}, 1}], +\"OnlyMixedQuadraticEikonalPropagators\" -> True, FCE -> True]", +"SFAD[{{k2, 0}, {0, 1}, 1}]"}, +{"fcstToGFAD-ID19", "ToGFAD[SFAD[{{k1, +2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - +meta u0b k1 . nb}, {2 gkin meta^2 u0b - +2 gkin meta^2 u0b^2, 1}, 1}], \"OnlyMixedQuadraticEikonalPropagators\" -> True, FCE -> True]", +"GFAD[{{-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2 + SPD[k1, k1] + +2*gkin*meta*SPD[k1, n] - 2*gkin*meta*u0b*SPD[k1, n] - meta*u0b*SPD[k1, nb], 1}, 1}]"} }); From 4b30ada2dd0b5e6f205a90a06e7740193373d376 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 5 Aug 2024 13:30:50 +0200 Subject: [PATCH 53/67] Improved the conversion of mixed quadratic-eikonal propagators to purely quadratic ones using FromGFAD. --- FeynCalc/Documentation/Markdown/FromGFAD.md | 144 ---- .../Mathematica/LoopIntegrals/FromGFAD.m | 89 ++- FeynCalc/LoopIntegrals/FromGFAD.m | 58 +- Tests/LoopIntegrals/FromGFAD.test | 614 +++++++++++++++++- 4 files changed, 731 insertions(+), 174 deletions(-) delete mode 100644 FeynCalc/Documentation/Markdown/FromGFAD.md diff --git a/FeynCalc/Documentation/Markdown/FromGFAD.md b/FeynCalc/Documentation/Markdown/FromGFAD.md deleted file mode 100644 index 3542c5df..00000000 --- a/FeynCalc/Documentation/Markdown/FromGFAD.md +++ /dev/null @@ -1,144 +0,0 @@ -## FromGFAD - -`FromGFAD[exp]` converts all suitable generic propagator denominators into standard and Cartesian propagator denominators. - -The options `InitialSubstitutions` and `IntermediateSubstitutions` can be used to help the function handle nontrivial propagators. - -For propagators containing symbolic variables it might be necessary to tell the function that those are larger than zero (if applicable), so that expressions such as $\sqrt{\lambda^2}$ can be simplified accordingly. - -### See also - -[Overview](Extra/FeynCalc.md), [GFAD](GFAD.md), [SFAD](SFAD.md), [CFAD](CFAD.md), [FeynAmpDenominatorExplicit](FeynAmpDenominatorExplicit.md). - -### Examples - -```mathematica -GFAD[SPD[p1]] - -ex = FromGFAD[%] -``` - -$$\frac{1}{(\text{p1}^2+i \eta )}$$ - -$$\frac{1}{(\text{p1}^2+i \eta )}$$ - -```mathematica -ex // StandardForm - -(*FeynAmpDenominator[StandardPropagatorDenominator[Momentum[p1, D], 0, 0, {1, 1}]]*) -``` - -```mathematica -GFAD[SPD[p1] + 2 SPD[p1, p2]] - -ex = FromGFAD[%] -``` - -$$\frac{1}{(\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})+i \eta )}$$ - -$$\frac{1}{(\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})+i \eta )}$$ - -```mathematica -ex // StandardForm - -(*FeynAmpDenominator[StandardPropagatorDenominator[Momentum[p1, D], 2 Pair[Momentum[p1, D], Momentum[p2, D]], 0, {1, 1}]]*) -``` - -```mathematica -GFAD[{{CSPD[p1] + 2 CSPD[p1, p2] + m^2, -1}, 2}] - -ex = FromGFAD[%] -``` - -$$\frac{1}{(m^2+\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})-i \eta )^2}$$ - -$$\frac{1}{(\text{p1}^2+2 (\text{p1}\cdot \;\text{p2})+m^2-i \eta )^2}$$ - -```mathematica -ex // StandardForm - -(*FeynAmpDenominator[CartesianPropagatorDenominator[0, CartesianPair[CartesianMomentum[p1, -1 + D], CartesianMomentum[p1, -1 + D]] + 2 CartesianPair[CartesianMomentum[p1, -1 + D], CartesianMomentum[p2, -1 + D]], m^2, {2, -1}]]*) -``` - -```mathematica -prop = FeynAmpDenominator[GenericPropagatorDenominator[-la Pair[Momentum[p1, D], - Momentum[p1, D]] + 2 Pair[Momentum[p1, D], Momentum[q, D]], {1,1}]] -``` - -$$\frac{1}{(2 (\text{p1}\cdot q)-\text{la} \;\text{p1}^2+i \eta )}$$ - -```mathematica -ex = FromGFAD[prop] -``` - -$$\frac{1}{(-\text{la} \;\text{p1}^2+2 (\text{p1}\cdot q)+i \eta )}$$ - -```mathematica -ex // StandardForm -``` - -$$\text{FeynAmpDenominator}\left[\text{StandardPropagatorDenominator}\left[\sqrt{-\text{la}} \;\text{Momentum}[\text{p1},D],2 \;\text{Pair}[\text{Momentum}[\text{p1},D],\text{Momentum}[q,D]],0,\{1,1\}\right]\right]$$ - -```mathematica -ex = FromGFAD[prop, PowerExpand -> {la}] -``` - -$$\frac{1}{(-\text{la} \;\text{p1}^2+2 (\text{p1}\cdot q)+i \eta )}$$ - -```mathematica -ex // StandardForm -``` - -$$\text{FeynAmpDenominator}\left[\text{StandardPropagatorDenominator}\left[i \sqrt{\text{la}} \;\text{Momentum}[\text{p1},D],2 \;\text{Pair}[\text{Momentum}[\text{p1},D],\text{Momentum}[q,D]],0,\{1,1\}\right]\right]$$ - -```mathematica -ex = GFAD[{{-SPD[p1, p1], 1}, 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]* - GFAD[{{-SPD[p3, p3], 1}, 1}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]* - SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] + (-2*mg^2*GFAD[{{-SPD[p1, p1], 1}, 2}]* - GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]*GFAD[{{-SPD[p3, p3], 1}, 1}]* - SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]*SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] - - 2*mg^2*GFAD[{{-SPD[p1, p1], 1}, 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], - 1}, 2}]*GFAD[{{-SPD[p3, p3], 1}, 1}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]* - SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] - 2*mg^2*GFAD[{{-SPD[p1, p1], 1}, - 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]*GFAD[{{-SPD[p3, p3], - 1}, 2}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]*SFAD[{{I*(p3 + q), 0}, - {-mb^2, 1}, 1}])/2 -``` - -$$\frac{1}{2} \left(-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta )^2 (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (\text{p1}\cdot (2 \;\text{p3}-\text{p1})-\text{p3}^2+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (\text{p1}\cdot (2 \;\text{p3}-\text{p1})-\text{p3}^2+i \eta )^2}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta )^2 (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (\text{p1}\cdot (2 \;\text{p3}-\text{p1})-\text{p3}^2+i \eta )}\right)+\frac{1}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (\text{p1}\cdot (2 \;\text{p3}-\text{p1})-\text{p3}^2+i \eta )}$$ - -```mathematica -FromGFAD[ex] -``` - -$$\frac{1}{2} \left(-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta )^2 (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta )^2 (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}-\frac{2 \;\text{mg}^2}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )^2}\right)+\frac{1}{(-\text{p1}^2+i \eta ) (-\text{p3}^2+i \eta ) (-(\text{p1}+q)^2+\text{mb}^2+i \eta ) (-(\text{p3}+q)^2+\text{mb}^2+i \eta ) (-\text{p3}^2+2 (\text{p1}\cdot \;\text{p3})-\text{p1}^2+i \eta )}$$ - -Using the option `InitialSubstitutions` one can perform certain replacement that might not be found automatically - -```mathematica -ex = GFAD[SPD[k1] + 2 SPD[k1, k2] + SPD[k2] + SPD[k1, n]] -``` - -$$\frac{1}{(\text{k1}^2+2 (\text{k1}\cdot \;\text{k2})+\text{k1}\cdot n+\text{k2}^2+i \eta )}$$ - -```mathematica -FromGFAD[ex, FCE -> True] -% // InputForm -``` - -$$\frac{1}{(\text{k1}^2+\text{k1}\cdot (2 \;\text{k2}+n)+\text{k2}^2+i \eta )}$$ - -```mathematica -SFAD[{{k1, k1 . (2*k2 + n) + k2 . k2}, {0, 1}, 1}] -``` - -```mathematica -FromGFAD[ex, FCE -> True, InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}] -% // InputForm -``` - -$$\frac{1}{((\text{k1}+\text{k2})^2+\text{k1}\cdot n+i \eta )}$$ - -```mathematica -SFAD[{{k1 + k2, k1 . n}, {0, 1}, 1}] -``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m index b3618dd3..92e3d08b 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m @@ -12,11 +12,15 @@ (* ::Text:: *) -(*The options `InitialSubstitutions` and `IntermediateSubstitutions` can be used to help the function handle nontrivial propagators.*) +(*The options `InitialSubstitutions` and `IntermediateSubstitutions` can be used to help the function handle nontrivial propagators. In particular, `InitialSubstitutions` can define rules for completing the square in the loop momenta of the propagator, while `IntermediateSubstitutions` contains relations for scalar products appearing in those rules.*) (* ::Text:: *) -(*For propagators containing symbolic variables it might be necessary to tell the function that those are larger than zero (if applicable), so that expressions such as $\sqrt{\lambda^2}$ can be simplified accordingly.*) +(*Another useful option is `LoopMomenta` which is particularly helpful when converting mixed quadratic-eikonal propagators to quadratic ones.*) + + +(* ::Text:: *) +(*For propagators containing symbolic variables it might be necessary to tell the function that those are larger than zero (if applicable), so that expressions such as $\sqrt{\lambda^2}$ can be simplified accordingly. To that aim one should use the option `PowerExpand`.*) (* ::Subsection:: *) @@ -39,9 +43,17 @@ ex//StandardForm -GFAD[SPD[p1]+2 SPD[p1,p2]] +ex=GFAD[SPD[p1]+2 SPD[p1,p2]] + + +FromGFAD[ex] -ex=FromGFAD[%] + +(* ::Text:: *) +(*We can get a proper conversion into a quadratic propagator using the option `LoopMomenta`. Notice that here `p2.p2` is being put into the mass slot*) + + +FromGFAD[ex,LoopMomenta->{p1}] ex//StandardForm @@ -55,6 +67,7 @@ ex//StandardForm +DataType[la,FCVariable]=True; prop=FeynAmpDenominator[GenericPropagatorDenominator[-la Pair[Momentum[p1,D], Momentum[p1,D]]+2 Pair[Momentum[p1,D],Momentum[q,D]],{1,1}]] @@ -62,13 +75,7 @@ ex=FromGFAD[prop] -ex//StandardForm - - -ex=FromGFAD[prop,PowerExpand->{la}] - - -ex//StandardForm +ex=FromGFAD[prop,LoopMomenta->{p1}] ex=GFAD[{{-SPD[p1, p1], 1}, 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]* @@ -84,19 +91,71 @@ {-mb^2, 1}, 1}])/2 +(* ::Text:: *) +(*Notice that `FromGFAD` does not expand scalar products in the propagators before trying to convert*) +(*them to `SFAD`s or `CFAD`s. If this is needed, the user should better apply ExpandScalarProduct to the expression by hand.*) + + FromGFAD[ex] +FromGFAD[ExpandScalarProduct[ex]] + + +(* ::Text:: *) +(*Using the option `InitialSubstitutions` one can perform certain replacement that might not be found automatically. The values of scalar products can be set using `IntermediateSubstitutions`*) + + +ex=GFAD[{{SPD[k1, k1] - 2*gkin*meta*u0b*SPD[k1, n], 1}, 1}]; + + (* ::Text:: *) -(*Using the option `InitialSubstitutions` one can perform certain replacement that might not be found automatically*) +(*Notice that we need to declare the appearing variables as `FCVariable`s*) -ex=GFAD[SPD[k1]+2SPD[k1,k2]+SPD[k2]+SPD[k1,n]] +(DataType[#,FCVariable]=True)&/@{gkin,meta,u0b}; + + +(* ::Text:: *) +(*Without these options we get a mixed quadratic-eikonal propagator that will cause us troubles when doing topology minimizations.*) FromGFAD[ex,FCE->True] %//InputForm -FromGFAD[ex,FCE->True,InitialSubstitutions->{ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]}] -%//InputForm +(* ::Text:: *) +(*But when doing everything right we end up with a purely quadratic propagator*) + + +FromGFAD[ex,InitialSubstitutions->{ExpandScalarProduct[SPD[k1-gkin meta u0b n]]->SPD[k1-gkin meta u0b n]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}] + + +(* ::Text:: *) +(*However, in this case the function can also figure out the necessary square completion on its own if we tell it that `k1` is a momentum w.r.t which the square should be completed. In this case the option `IntermediateSubstitutions` is not really needed*) + + +FromGFAD[ex,LoopMomenta->{k1}] + + +(* ::Text:: *) +(*It is still helpful, though*) + + +FromGFAD[ex,LoopMomenta->{k1},IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}] + + +(* ::Text:: *) +(*If we have multiple loop momenta, we need to first complete the square with respect to them before handling the full expression*) + + +ex=GFAD[{{SPD[k1,k1]+2 SPD[k1,k2]+SPD[k2,k2]+2 gkin meta (SPD[k1,n]+SPD[k2,n]),1},1}] + + +FromGFAD[ex,LoopMomenta->{k1,k2}] + + +FromGFAD[ex,LoopMomenta->{k1,k2}, +InitialSubstitutions->{ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]}, +IntermediateSubstitutions->{SPD[n]->0}] diff --git a/FeynCalc/LoopIntegrals/FromGFAD.m b/FeynCalc/LoopIntegrals/FromGFAD.m index eebbb8a3..d1b5666c 100755 --- a/FeynCalc/LoopIntegrals/FromGFAD.m +++ b/FeynCalc/LoopIntegrals/FromGFAD.m @@ -44,10 +44,14 @@ the function that those are larger than zero (if applicable), so that optFeynAmpDenominatorExplicit=""; noFAD::usage=""; sfadHold::usage=""; +optIntermediateSubstitutions::usage=""; +optLoopMomenta::usage=""; Options[FromGFAD] = { Check -> True, ExpandScalarProduct -> True, + Except -> {}, + Factoring -> Factor2, FCE -> False, FCI -> False, FCVerbose -> False, @@ -60,8 +64,8 @@ the function that those are larger than zero (if applicable), so that }; FromGFAD[expr_, OptionsPattern[]] := - Block[{ res, ex, pds, pdsConverted,rulePds, check, optLoopMomenta, - optInitialSubstitutions, optIntermediateSubstitutions}, + Block[{ res, ex, pds, pdsConverted,rulePds, check, + optInitialSubstitutions, mixedEikProps, null1, null2}, optInitialSubstitutions = OptionValue[InitialSubstitutions]; optIntermediateSubstitutions = OptionValue[IntermediateSubstitutions]; @@ -84,12 +88,19 @@ the function that those are larger than zero (if applicable), so that FCPrint[1, "FromGFAD: Entering.", FCDoControl->fgfVerbose]; FCPrint[3, "FromGFAD: Entering with: ", expr, FCDoControl->fgfVerbose]; + {optInitialSubstitutions,optIntermediateSubstitutions} = FRH[{optInitialSubstitutions,optIntermediateSubstitutions}]; + If[ !OptionValue[FCI], {ex, optInitialSubstitutions, optIntermediateSubstitutions} = FCI[{expr,optInitialSubstitutions, optIntermediateSubstitutions}], ex = expr ]; + optInitialSubstitutions = optInitialSubstitutions /. optIntermediateSubstitutions; + + FCPrint[3, "FromGFAD: Replacement rules for the propagators: ", optInitialSubstitutions, FCDoControl->fgfVerbose]; + + If[ FreeQ2[ex, {GenericPropagatorDenominator}], (* Nothing to do. *) FCPrint[1, "FromGFAD: Leaving (nothing to do).", FCDoControl->fgfVerbose]; @@ -104,17 +115,18 @@ the function that those are larger than zero (if applicable), so that FCPrint[3, "FromGFAD: After initial and intermediate substitutions: ", pdsConverted, FCDoControl->fgfVerbose]; - If[OptionValue[MomentumCombine], - pdsConverted = MomentumCombine[pdsConverted,FCI->True, NumberQ->False, "Quadratic" -> False, Except -> optLoopMomenta] + If[ OptionValue[MomentumCombine], + pdsConverted = MomentumCombine[pdsConverted,FCI->True, NumberQ->False, "Quadratic" -> False, + Select->optLoopMomenta, "ExcludeScalarProducts" -> optLoopMomenta, NumberQ -> False, Factoring -> OptionValue[Factoring]] ]; - FCPrint[3, "FromGFAD: After applying substitution rules: ", pdsConverted, FCDoControl->fgfVerbose]; + FCPrint[3, "FromGFAD: After MomentumCombine: ", pdsConverted, FCDoControl->fgfVerbose]; pdsConverted = (fromGFAD/@pdsConverted) /. fromGFAD->fromGFAD2 /. fromGFAD2->fromGFAD; FCPrint[3, "FromGFAD: After fromGFAD: ", pdsConverted, FCDoControl->fgfVerbose]; - pdsConverted = pdsConverted /. fromGFAD->Identity; + pdsConverted = pdsConverted /. fromGFAD->Identity /. optIntermediateSubstitutions; If[ !FreeQ[pdsConverted,GenericPropagatorDenominator], FCPrint[0, "FromGFAD: Following GFADs could not be eliminated: ", FeynAmpDenominator/@SelectNotFree[pdsConverted,GenericPropagatorDenominator,sfadHold], FCDoControl->fgfVerbose]; @@ -125,7 +137,8 @@ the function that those are larger than zero (if applicable), so that 1/FeynAmpDenominatorExplicit[FeynAmpDenominator/@pds])/. optInitialSubstitutions /. optIntermediateSubstitutions])/. noFAD->Identity]; If[ !MatchQ[check,{0..}], FCPrint[3, "FromGFAD: Check: ", check, FCDoControl->fgfVerbose]; - Message[FromGFAD::failmsg,"Something went wrong when elmiinating GenericPropagatorDenominators."]; + Message[FromGFAD::failmsg,"Something went wrong when eliminating GenericPropagatorDenominators."<> + " If you have symbolic variables in your propagators, did you properly declare them as FCVariable?"]; Abort[] ]; ]; @@ -134,7 +147,6 @@ the function that those are larger than zero (if applicable), so that FCPrint[3, "FromGFAD: Final replacement rule: ", rulePds, FCDoControl->fgfVerbose]; - res = ex /. Dispatch[rulePds]; If[!FreeQ[res,noFAD], @@ -145,6 +157,20 @@ the function that those are larger than zero (if applicable), so that res = ExpandScalarProduct[res, FCI->True] ]; + + mixedEikProps = Cases[res+null1+null2, FeynAmpDenominator[(StandardPropagatorDenominator|CartesianPropagatorDenominator)[a_ /; a =!= 0, + b_ /; b =!= 0, ___]], Infinity] // Union; + + If[ mixedEikProps=!={}, + FCPrint[0, "FromGFAD: ", FCStyle["Some of the converted propagators are not strictly quadratic or eikonal.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fgfVerbose]; + FCPrint[0, "FromGFAD: ", mixedEikProps, FCDoControl -> fgfVerbose]; + + FCPrint[0, "FromGFAD: ", FCStyle["These propagators may later cause issues with topology minimization routines.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fgfVerbose]; + ]; + + If[ OptionValue[FCE], res = FCE[res] ]; @@ -182,6 +208,20 @@ the function that those are larger than zero (if applicable), so that FreeQ2[c,{Pair,CartesianPair,TemporalPair,Momentum,CartesianMomentum,TemporalMomentum}] && Internal`SyntacticNegativeQ[pref1] && Internal`SyntacticNegativeQ[pref3]; + +(* # a.a + # a.b -> (#a+#b)^2 - #b^2 *) +fromGFAD[GenericPropagatorDenominator[pref1_. Pair[Momentum[a_,dim___],Momentum[a_,dim___]] + pref2_. Pair[Momentum[a_,dim___],Momentum[b_,dim___]] ++ c_:0,{n_,s_}]] := + StandardPropagatorDenominator[powExp[Sqrt[pref1] Momentum[a, dim] + pref2/Sqrt[pref1]/2 Momentum[b, dim]],0,ExpandScalarProduct[c- pref2^2/Sqrt[pref1]/4 Pair[Momentum[b, dim],Momentum[b, dim]],FCI->True], + {n, s}]/; FreeQ2[c,optLoopMomenta] && !Internal`SyntacticNegativeQ[pref1] && optLoopMomenta=!={}; + + +(* # -a.a + # a.b -> (I #a- I #b)^2 + #b^2 *) +fromGFAD[GenericPropagatorDenominator[pref1_. Pair[Momentum[a_,dim___],Momentum[a_,dim___]] + pref2_. Pair[Momentum[a_,dim___],Momentum[b_,dim___]] ++ c_:0,{n_,s_}]] := + StandardPropagatorDenominator[ powExp[I Sqrt[-pref1] Momentum[a, dim] - I pref2/Sqrt[-pref1]/2 Momentum[b, dim]],0,c+ pref2^2/(-pref1)/4 Pair[Momentum[b, dim],Momentum[b, dim]],{n, s}]/; + FreeQ2[c,optLoopMomenta] && Internal`SyntacticNegativeQ[pref1] && optLoopMomenta=!={}; + (* # a.a - # a.b + # b.b -> (#a-#b)^2 *) fromGFAD[GenericPropagatorDenominator[pref1_. Pair[Momentum[a_,dim___],Momentum[a_,dim___]] + pref2_. Pair[Momentum[a_,dim___],Momentum[b_,dim___]] + pref3_. Pair[Momentum[b_,dim___],Momentum[b_,dim___]] + c_:0,{n_,s_}]] := @@ -206,7 +246,7 @@ the function that those are larger than zero (if applicable), so that (* # a.a + # b.c -> (#a)^2 + # b.c *) fromGFAD[GenericPropagatorDenominator[pref1_. Pair[Momentum[a1_,dim___],Momentum[a1_,dim___]] + pref2_. Pair[Momentum[a2_,dim___],Momentum[b2_,dim___]] + c_:0,{n_,s_}]] := StandardPropagatorDenominator[powExp[Sqrt[pref1]] Momentum[a1,dim], pref2 Pair[Momentum[a2,dim],Momentum[b2,dim]],c,{n, s}]/; - FreeQ2[c,{Pair,CartesianPair,TemporalPair,Momentum,CartesianMomentum,TemporalMomentum}]; + FreeQ2[c,{Pair,CartesianPair,TemporalPair,Momentum,CartesianMomentum,TemporalMomentum}]/; !MemberQ[optLoopMomenta,a1] && !MemberQ[optLoopMomenta,a2]; fromGFAD[GenericPropagatorDenominator[pref1_. Pair[Momentum[a1_,dim___],Momentum[a1_,dim___]] + pref2_. Pair[Momentum[a2_,dim___],Momentum[b2_,dim___]] + c_:0,{n_,s_}]] := diff --git a/Tests/LoopIntegrals/FromGFAD.test b/Tests/LoopIntegrals/FromGFAD.test index b06a2609..82ed3bea 100644 --- a/Tests/LoopIntegrals/FromGFAD.test +++ b/Tests/LoopIntegrals/FromGFAD.test @@ -30,10 +30,9 @@ la^2 Pair[Momentum[p1, D], Momentum[p1, D]] - 2 la Pair[Momentum[p1, D], Momentum[q, D]] - Pair[Momentum[p3, D], Momentum[p3, D]] + 2 Pair[Momentum[p3, D], Momentum[q, D]], {1, 1}]], -IntermediateSubstitutions -> {-ExpandScalarProduct[ - SPD[p1 la + p3]] -> -SPD[p1 la + p3]}]", -"FeynAmpDenominator[StandardPropagatorDenominator[I*Momentum[la*p1 + p3, D], -2*la*Pair[Momentum[p1, D], Momentum[q, D]] + 2*Pair[Momentum[p3, D], Momentum[q, D]], -mb^2, {1, 1}]]"}, +InitialSubstitutions -> {-ExpandScalarProduct[ + SPD[p1 la + p3]] -> -SPD[p1 la + p3]}, LoopMomenta -> {p1, p3}]", +"FeynAmpDenominator[StandardPropagatorDenominator[I*Momentum[la*p1 + p3, D] - I*Momentum[q, D], 0, -mb^2 + Pair[Momentum[q, D], Momentum[q, D]], {1, 1}]]"}, {"fcstFromGFAD-ID3", "FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[\!\(\*\ SuperscriptBox[\(mb\), \(2\)]\)-\!\(\*SuperscriptBox[\(la\), \(2\)]\) \ @@ -176,6 +175,609 @@ PowerExpand -> {la}, FCE -> True]", "DataType[gkin, FCVariable] = True; DataType[meta, FCVariable] = True; DataType[u0b, FCVariable] = True; \n FromGFAD[GFAD[SPD[k1, k1]]*GFAD[SPD[k1, k1] + 2*gkin*meta*SPD[k1, n] - 2*gkin*meta*u0b*SPD[k1, n]]*GFAD[-2*gkin*meta^2*u0b + SPD[k1, k1] + 2*gkin*meta*SPD[k1, n] - meta*u0b*SPD[k1, nb]],FCE->True]", -"SFAD[{{k1, 0}, {0, 1}, 1}]*SFAD[{{k1, 2*gkin*meta*k1 . n - 2*gkin*meta*u0b*k1 . n}, -{0, 1}, 1}]*SFAD[{{k1, 2*gkin*meta*k1 . n - meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b, 1}, 1}]"} +"SFAD[{{k1, 0}, {0, 1}, 1}]*SFAD[{{k1, 2*gkin*meta*(k1 . n - u0b*k1 . n)}, {0, 1}, 1}]*SFAD[{{k1, meta*(2*gkin*k1 . n - u0b*k1 . nb)}, {2*gkin*meta^2*u0b, 1}, 1}]"}, +{"fcstFromGFAD-ID39", +"DataType[gkin, FCVariable] = True; DataType[meta, FCVariable] = True; DataType[u0b, FCVariable] = True; \n +FromGFAD[GFAD[{{SPD[k1, k1] - 2*gkin*meta*u0b*SPD[k1, n], 1}, 1}],FCE->True,InitialSubstitutions->{ExpandScalarProduct[SPD[k1-gkin meta u0b n]]->SPD[k1-gkin meta u0b n]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}]", +"SFAD[{{k1 - gkin*meta*n*u0b, 0}, {0, 1}, 1}]"}, +{"fcstFromGFAD-ID39", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*gkin*meta*Pair[Momentum[k1, D], \ +Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID40", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*gkin*meta*Pair[Momentum[k1, D], \ +Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID41", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*gkin*meta*u0b*Pair[Momentum[k1, \ +D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID42", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*gkin*meta*u0b*Pair[Momentum[k1, \ +D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID43", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*gkin*meta*Pair[Momentum[k1, D], \ +Momentum[n, D]] - 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID44", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*gkin*meta*Pair[Momentum[k1, D], \ +Momentum[n, D]] + 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID45", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - meta*u0b*Pair[Momentum[k1, D], \ +Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID46", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + meta*u0b*Pair[Momentum[k1, D], \ +Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID47", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, -2*gkin*meta^2*u0b, {1, \ +1}]]"}, +{"fcstFromGFAD-ID48", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + 2*gkin*meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, \ +D]] + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID49", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ ++ (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, -2*gkin*meta^2*u0b^2, \ +{1, 1}]]"}, +{"fcstFromGFAD-ID50", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, -2*gkin*meta^2*u0b, {1, \ +1}]]"}, +{"fcstFromGFAD-ID51", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, -2*gkin*meta^2*u0b^2, \ +{1, 1}]]"}, +{"fcstFromGFAD-ID52", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + 2*gkin*meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, \ +D]] - 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] \ +- (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID53", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] - meta*u0b*Pair[Momentum[k2, \ +D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID54", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID55", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID56", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] - meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b, {1, 1}]]"}, +{"fcstFromGFAD-ID57", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]] + Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID58", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID59", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]] + Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID60", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, D], \ +Momentum[n, D]] - meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], \ +{1, 1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{\ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[\ +k1+k2]]->SPD[k1+k2]},IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,\ +SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, \ +-2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID61", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ +- 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID62", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] - 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] + meta*u0b*Pair[Momentum[k2, \ +D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] - (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID63", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] + meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b, {1, 1}]]"}, +{"fcstFromGFAD-ID64", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] - \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*u0b*Pair[Momentum[k2, D], \ +Momentum[n, D]] + meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], \ +{1, 1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{\ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[\ +k1+k2]]->SPD[k1+k2]},IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,\ +SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, \ +-2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID65", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + 2*gkin*meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, \ +D]] - 2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - \ +k2, D] + (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID66", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] - 2*gkin*meta*u0b*Pair[Momentum[k2, \ +D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ +- gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID67", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, \ +D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ ++ gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID68", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k2, D], \ +Momentum[n, D]] - 2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, \ +D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ ++ gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID69", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k2, D], \ +Momentum[n, D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, \ +D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ +- gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID70", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] - meta*u0b*Pair[Momentum[k2, D], \ +Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ +- (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID71", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k2, D], Momentum[k2, D]] + meta*u0b*Pair[Momentum[k2, D], \ +Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ ++ (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID72", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ ++ (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, -2*gkin*meta^2*u0b, {1, \ +1}]]"}, +{"fcstFromGFAD-ID73", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ ++ (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, -2*gkin*meta^2*u0b^2, \ +{1, 1}]]"}, +{"fcstFromGFAD-ID74", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ +- (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, -2*gkin*meta^2*u0b, {1, \ +1}]]"}, +{"fcstFromGFAD-ID75", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] \ +- (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, -2*gkin*meta^2*u0b^2, \ +{1, 1}]]"}, +{"fcstFromGFAD-ID76", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID77", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + gkin*meta*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID78", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]] + Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID79", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, \ +D]] + Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID80", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ +- 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID81", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] \ ++ 2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID82", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] - meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] - meta*u0b*Pair[Momentum[k2, \ +D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID83", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[Pair[\ +Momentum[k1, D], Momentum[k1, D]] + 2*Pair[Momentum[k1, D], \ +Momentum[k2, D]] + meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + \ +Pair[Momentum[k2, D], Momentum[k2, D]] + meta*u0b*Pair[Momentum[k2, \ +D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + (meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]]"}, +{"fcstFromGFAD-ID84", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] - meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b, {1, 1}]]"}, +{"fcstFromGFAD-ID85", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + 2*gkin*meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, \ +D]] + 2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] + 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] - 2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID86", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] - \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, D], \ +Momentum[n, D]] - meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], \ +{1, 1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{\ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[\ +k1+k2]]->SPD[k1+k2]},IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,\ +SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] + (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, \ +-2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID87", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] + meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - (meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b, {1, 1}]]"}, +{"fcstFromGFAD-ID88", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, D]] + \ +2*Pair[Momentum[k1, D], Momentum[k2, D]] - \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*u0b*Pair[Momentum[k2, D], \ +Momentum[n, D]] + meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], \ +{1, 1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{\ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[\ +k1+k2]]->SPD[k1+k2]},IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,\ +SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, \ +-2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID89", +"FromGFAD[FeynAmpDenominator[GenericPropagatorDenominator[-2*gkin*\ +meta^2*u0b + 2*gkin*meta^2*u0b^2 + Pair[Momentum[k1, D], Momentum[k1, \ +D]] + 2*Pair[Momentum[k1, D], Momentum[k2, D]] - \ +2*gkin*meta*Pair[Momentum[k1, D], Momentum[n, D]] + \ +2*gkin*meta*u0b*Pair[Momentum[k1, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k1, D], Momentum[nb, D]] + Pair[Momentum[k2, \ +D], Momentum[k2, D]] - 2*gkin*meta*Pair[Momentum[k2, D], Momentum[n, \ +D]] + 2*gkin*meta*u0b*Pair[Momentum[k2, D], Momentum[n, D]] + \ +meta*u0b*Pair[Momentum[k2, D], Momentum[nb, D]], {1, \ +1}]],LoopMomenta->{k1,k2},InitialSubstitutions->{ExpandScalarProduct[\ +SPD[k1-k2]]->SPD[k1-k2],ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + \ +k2, D] - (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]"}, +{"fcstFromGFAD-ID90", +"FromGFAD[ +FeynAmpDenominator[ +GenericPropagatorDenominator[-(la* + Pair[Momentum[p1, D], Momentum[p1, D]]) + + 2*Pair[Momentum[p1, D], Momentum[q, D]], {1, 1}]], +PowerExpand -> {la}, LoopMomenta -> {p1}]", +"FeynAmpDenominator[StandardPropagatorDenominator[I*Sqrt[la]*Momentum[p1, +D] - (I*Momentum[q, D])/Sqrt[la], 0, Pair[Momentum[q, D], Momentum[q, D]]/la, {1, 1}]]"} }); From 7baa076764d6e0283c3ac19296d83379de6ddee2 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 5 Aug 2024 13:31:13 +0200 Subject: [PATCH 54/67] Modified the behavior of FCE not to apply MomentumCombine to GFADs. --- FeynCalc/Shared/FeynCalcExternal.m | 9 +++- .../FCLoopAddScalingParameter.test | 30 ++++--------- Tests/LoopIntegrals/FCLoopBasis.test | 5 ++- Tests/LoopIntegrals/FCLoopGLIExpand.test | 14 +++--- Tests/LoopIntegrals/FCMellinJoin.test | 43 +++++++++---------- Tests/LoopIntegrals/TID.test | 8 ++-- Tests/Shared/FeynCalcExternal.test | 12 +++++- 7 files changed, 61 insertions(+), 60 deletions(-) diff --git a/FeynCalc/Shared/FeynCalcExternal.m b/FeynCalc/Shared/FeynCalcExternal.m index 66646f86..141c45d5 100755 --- a/FeynCalc/Shared/FeynCalcExternal.m +++ b/FeynCalc/Shared/FeynCalcExternal.m @@ -109,12 +109,19 @@ TemporalPair, Power2 } /. sequence -> Sequence]; - rv = Map[(# -> ((MomentumCombine[#])/.ru ) )&, vv]//Dispatch; + + rv = Map[(# -> ((momentumCombine[#])/.ru ) )&, vv]//Dispatch; revru = Map[Reverse, SelectFree[ru,Power]]; x /. rv /. Dispatch[revru] ]; +momentumCombine[x_]:= + x /; !FreeQ[x,GenericPropagatorDenominator]; + +momentumCombine[x_]:= + MomentumCombine[x] /; FreeQ[x,GenericPropagatorDenominator]; + diracdelta[i_,j_]:= DIDelta[i,j] /. (DiracIndex|ExplicitDiracIndex) -> iDent; diff --git a/Tests/LoopIntegrals/FCLoopAddScalingParameter.test b/Tests/LoopIntegrals/FCLoopAddScalingParameter.test index 3e9b951a..527f1744 100644 --- a/Tests/LoopIntegrals/FCLoopAddScalingParameter.test +++ b/Tests/LoopIntegrals/FCLoopAddScalingParameter.test @@ -28,9 +28,7 @@ mb^2}, {}]"}, p1,0},{-mc^2,-1},1}],SFAD[{{I \ (p1-q),0},{-mc^2,-1},1}]},{p1},{q},{SPD[q,q]->mb^2},{}],la,{q->la^0 \ q,mc->la^1 mc},FCVerbose->-1,FCE->True]", -"FCTopology[prop1LtopoC11, {GFAD[{{la^2*mc^2 - SPD[p1, p1], -1}, \ -1}], GFAD[{{-mb^2 + la^2*mc^2 + SPD[p1, -p1 + 2*q], -1}, 1}]}, {p1}, \ -{q}, {SPD[q, q] -> mb^2}, {}]"}, +"FCTopology[prop1LtopoC11, {GFAD[{{la^2*mc^2 - SPD[p1, p1], -1}, 1}], GFAD[{{-mb^2 + la^2*mc^2 - SPD[p1, p1] + 2*SPD[p1, q], -1}, 1}]}, {p1}, {q}, {SPD[q, q] -> mb^2}, {}]"}, {"fcstFCLoopAddScalingParameter-ID3", "FCLoopAddScalingParameter[FCTopology[prop1LtopoC11,{SFAD[{{I \ p1,0},{-mc^2,-1},1}],SFAD[{{I \ @@ -38,22 +36,16 @@ p1,0},{-mc^2,-1},1}],SFAD[{{I \ q,mc->la^1 \ mc},Names->Function[{x},ToExpression[ToString[x]<>\"ff\"]],FCVerbose->-\ 1,FCE->True]", -"FCTopology[prop1LtopoC11ff, {GFAD[{{la^2*mc^2 - SPD[p1, p1], -1}, \ -1}], GFAD[{{-mb^2 + la^2*mc^2 + SPD[p1, -p1 + 2*q], -1}, 1}]}, {p1}, \ -{q}, {SPD[q, q] -> mb^2}, {}]"}, +"FCTopology[prop1LtopoC11ff, {GFAD[{{la^2*mc^2 - SPD[p1, p1], -1}, 1}], GFAD[{{-mb^2 + la^2*mc^2 - SPD[p1, p1] + 2*SPD[p1, q], -1}, 1}]}, {p1}, {q}, {SPD[q, q] -> mb^2}, {}]"}, {"fcstFCLoopAddScalingParameter-ID4", "FCLoopAddScalingParameter[FCTopology[prop2Ltopo22012,{SFAD[{{I \ (p1-q),0},{-mc^2,-1},1}],SFAD[{{I p1,0},{-mc^2,-1},1}],SFAD[{{I \ (p1+p3-q),0},{0,-1},1}],SFAD[{{I (p1+p3),0},{-mb^2,-1},1}],SFAD[{{-I \ p3,0},{-mc^2,-1},1}]},{p1,p3},{q},{SPD[q,q]->mb^2},{}],la,{mc->la^1 \ mc,p1->la^1 p1,p3->la^0 p3},FCVerbose->-1,FCE->True]", -"FCTopology[prop2Ltopo22012, {GFAD[{{-mb^2 + la^2*mc^2 - \ -la^2*SPD[p1, p1] + 2*la*SPD[p1, q], -1}, 1}], SFAD[{{I*p1, 0}, \ -{-mc^2, -1}, 1}], GFAD[{{-mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] \ -+ 2*la*SPD[p1, q] + SPD[p3, -p3 + 2*q], -1}, 1}], GFAD[{{mb^2 - \ -la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] - SPD[p3, p3], -1}, 1}], \ -GFAD[{{la^2*mc^2 - SPD[p3, p3], -1}, 1}]}, {p1, p3}, {q}, {SPD[q, q] -> \ -mb^2}, {}]"}, +"FCTopology[prop2Ltopo22012, {GFAD[{{-mb^2 + la^2*mc^2 - la^2*SPD[p1, p1] + 2*la*SPD[p1, q], -1}, 1}], SFAD[{{I*p1, 0}, {-mc^2, -1}, 1}], GFAD[{{-mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] + 2*la*SPD[p1, q] - SPD[p3, p3] + 2*SPD[p3, q], -1}, 1}], +GFAD[{{mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] - SPD[p3, p3], -1}, 1}], +GFAD[{{la^2*mc^2 - SPD[p3, p3], -1}, 1}]}, {p1, p3}, {q}, {SPD[q, q] -> mb^2}, {}]"}, {"fcstFCLoopAddScalingParameter-ID5", "FCLoopAddScalingParameter[{FCTopology[prop1LtopoC11,{SFAD[{{I \ p1,0},{-mc^2,-1},1}],SFAD[{{I \ @@ -63,15 +55,9 @@ p1,0},{-mc^2,-1},1}],SFAD[{{I (p1+p3-q),0},{0,-1},1}],SFAD[{{I \ (p1+p3),0},{-mb^2,-1},1}],SFAD[{{-I \ p3,0},{-mc^2,-1},1}]},{p1,p3},{q},{SPD[q,q]->mb^2},{}]},la,{mc->la^1 \ mc,p1->la^1 p1,p3->la^0 p3},FCVerbose->-1,FCE->True]", -"{FCTopology[prop1LtopoC11, {SFAD[{{I*p1, 0}, {-mc^2, -1}, 1}], \ -GFAD[{{-mb^2 + la^2*mc^2 - la^2*SPD[p1, p1] + 2*la*SPD[p1, q], -1}, \ -1}]}, {p1}, {q}, {SPD[q, q] -> mb^2}, {}], \ -FCTopology[prop2Ltopo22012, {GFAD[{{-mb^2 + la^2*mc^2 - la^2*SPD[p1, \ -p1] + 2*la*SPD[p1, q], -1}, 1}], SFAD[{{I*p1, 0}, {-mc^2, -1}, 1}], \ -GFAD[{{-mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] + 2*la*SPD[p1, q] \ -+ SPD[p3, -p3 + 2*q], -1}, 1}], GFAD[{{mb^2 - la^2*SPD[p1, p1] - \ -2*la*SPD[p1, p3] - SPD[p3, p3], -1}, 1}], GFAD[{{la^2*mc^2 - SPD[p3, \ -p3], -1}, 1}]}, {p1, p3}, {q}, {SPD[q, q] -> mb^2}, {}]}"}, +"{FCTopology[prop1LtopoC11, {SFAD[{{I*p1, 0}, {-mc^2, -1}, 1}], GFAD[{{-mb^2 + la^2*mc^2 - la^2*SPD[p1, p1] + 2*la*SPD[p1, q], -1}, 1}]}, {p1}, {q}, {SPD[q, q] -> mb^2}, {}], +FCTopology[prop2Ltopo22012, {GFAD[{{-mb^2 + la^2*mc^2 - la^2*SPD[p1, p1] + 2*la*SPD[p1, q], -1}, 1}], SFAD[{{I*p1, 0}, {-mc^2, -1}, 1}], GFAD[{{-mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] + 2*la*SPD[p1, q] - SPD[p3, p3] + 2*SPD[p3, q], -1}, 1}], +GFAD[{{mb^2 - la^2*SPD[p1, p1] - 2*la*SPD[p1, p3] - SPD[p3, p3], -1}, 1}], GFAD[{{la^2*mc^2 - SPD[p3, p3], -1}, 1}]}, {p1, p3}, {q}, {SPD[q, q] -> mb^2}, {}]}"}, {"fcstFCLoopAddScalingParameter-ID6", "FCLoopAddScalingParameter[ FCTopology[ diff --git a/Tests/LoopIntegrals/FCLoopBasis.test b/Tests/LoopIntegrals/FCLoopBasis.test index 2c7160c9..b30a62ba 100644 --- a/Tests/LoopIntegrals/FCLoopBasis.test +++ b/Tests/LoopIntegrals/FCLoopBasis.test @@ -731,8 +731,9 @@ q2]},{q1,q2},FCE\[Rule]True]", {"fcstFCLoopBasisExtract-ID23", "FCLoopBasisExtract[ GFAD[{{CSPD[k, k] x[1] + (CSPD[k, k - 2 p] + CSPD[p, p]) x[2], -1}, 1 + s}] CFAD[{k, -c^2}], {k}, FCE -> True]", -"{{CSPD[k, k]*x[1] + CSPD[k, k]*x[2] - 2*CSPD[k, p]*x[2] + CSPD[p, p]*x[2], -c^2 + CSPD[k, k]}, {CSPD[k, k], CSPD[k, p]}, {1 + s, 1}, -{GFAD[{{CSPD[k, k]*x[1] + (CSPD[k, k - 2*p] + CSPD[p, p])*x[2], -1}, 1}], CFAD[{{k, 0}, {-c^2, -1}, 1}]}}"}, +"{{CSPD[k, k]*x[1] + CSPD[k, k]*x[2] - 2*CSPD[k, p]*x[2] + CSPD[p, p]*x[2], -c^2 + CSPD[k, k]}, {CSPD[k, k], +CSPD[k, p]}, {1 + s, 1}, {GFAD[{{CSPD[k, k]*x[1] + (CSPD[k, k] - 2*CSPD[k, p] + CSPD[p, p])*x[2], -1}, 1}], +CFAD[{{k, 0}, {-c^2, -1}, 1}]}}"}, {"fcstFCLoopBasisExtract-ID24","FCLoopBasisExtract[SFAD[p, p - q] SPD[p, q], {p}, SortBy -> Function[x, x[[2]] < 0], FCE -> True]", "{{SPD[p, p], SPD[p, p] - 2 SPD[p, q] + SPD[q, q], diff --git a/Tests/LoopIntegrals/FCLoopGLIExpand.test b/Tests/LoopIntegrals/FCLoopGLIExpand.test index 69f433df..a74efcae 100644 --- a/Tests/LoopIntegrals/FCLoopGLIExpand.test +++ b/Tests/LoopIntegrals/FCLoopGLIExpand.test @@ -39,17 +39,17 @@ FAD[p2], FAD[{p1 - p2, m3}]}, {p1, p2}, {}, {}, {}]}}"}, {"fcstFCLoopGLIExpand-ID4", "FCLoopGLIExpand[ GLI[prop1l,{1,1}], {FCTopology[prop1l, {FAD[{p1, m1}], FAD[{p1+q, m2}]}, {p1}, {q}, {}, \ {}]},{SPD[q],0,1},FCE->True]", -"{GLI[prop1l, {1, 1}] - GLI[prop1l, {1, 2}]*SPD[q, q], \ -{FCTopology[prop1l, {GFAD[{{-m1^2 + SPD[p1, p1], 1}, 1}], \ -GFAD[{{-m2^2 + SPD[p1, p1 + 2*q], 1}, 1}]}, {p1}, {q}, {}, {}]}}"}, +"{GLI[prop1l, {1, 1}] - GLI[prop1l, {1, 2}]*SPD[q, q], +{FCTopology[prop1l, {GFAD[{{-m1^2 + SPD[p1, p1], 1}, 1}], +GFAD[{{-m2^2 + SPD[p1, p1] + 2*SPD[p1, q], 1}, 1}]}, {p1}, {q}, {}, {}]}}"}, {"fcstFCLoopGLIExpand-ID5", "FCLoopGLIExpand[ GLI[prop1l,{1,1}]+SPD[q] GLI[prop1l,{1,0}], {FCTopology[prop1l, {FAD[{p1, m1}], FAD[{p1+q, m2}]}, {p1}, {q}, {}, \ {}]},{SPD[q],0,2},FCE->True,Collecting->False]", -"{GLI[prop1l, {1, 1}] + GLI[prop1l, {1, 0}]*SPD[q, q] - \ -GLI[prop1l, {1, 2}]*SPD[q, q] + GLI[prop1l, {1, 3}]*SPD[q, q]^2, \ -{FCTopology[prop1l, {GFAD[{{-m1^2 + SPD[p1, p1], 1}, 1}], \ -GFAD[{{-m2^2 + SPD[p1, p1 + 2*q], 1}, 1}]}, {p1}, {q}, {}, {}]}}"}, +"{GLI[prop1l, {1, 1}] + GLI[prop1l, {1, 0}]*SPD[q, q] - GLI[prop1l, {1, 2}]*SPD[q, q] + +GLI[prop1l, {1, 3}]*SPD[q, q]^2, {FCTopology[prop1l, +{GFAD[{{-m1^2 + SPD[p1, p1], 1}, 1}], GFAD[{{-m2^2 + +SPD[p1, p1] + 2*SPD[p1, q], 1}, 1}]}, {p1}, {q}, {}, {}]}}"}, {"fcstFCLoopGLIExpand-ID6","FCLoopGLIExpand[ GLI[prop2Ltopo13011, {1, 1, 0, 1, 1}], {FCTopology[ prop2Ltopo13011, {SFAD[{{I*(p1 - q), 0}, {-mb^2, -1}, 1}], diff --git a/Tests/LoopIntegrals/FCMellinJoin.test b/Tests/LoopIntegrals/FCMellinJoin.test index 9becfb0b..d3b4449d 100644 --- a/Tests/LoopIntegrals/FCMellinJoin.test +++ b/Tests/LoopIntegrals/FCMellinJoin.test @@ -19,47 +19,44 @@ Tests`LoopIntegrals`fcstFCMellinJoin = "FCMellinJoin[pr \ FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,m^2}],SFAD[{q-p2,\ m^2}]},Names->z,FCE->True]", -"{-1/4*(pr*Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + \ -z[2]])/Pi^2, GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + z[1]}, \ -{{SPD[p2, p2 - 2*q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, \ -1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, +"{-1/4*(pr*Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + z[2]])/Pi^2, GFAD[{{SPD[p1, p1] - +2*SPD[p1, q] + SPD[q, q], 1}, 2 + z[1]}, {{SPD[p2, p2] - 2*SPD[p2, q] + SPD[q, q], 1}, 1 + +z[2]}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, {"fcstFCMellinJoin-ID2", "FCMellinJoin[pr FVD[q,mu] \ FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,m^2}],SFAD[{q-p2,\ m^2}]},Names->z,FCE->True]", -"{-1/4*(pr*Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + \ -z[2]])/Pi^2, FVD[q, mu]*GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + \ -z[1]}, {{SPD[p2, p2 - 2*q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, \ -{0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, +"{-1/4*(pr*Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + z[2]])/Pi^2, FVD[q, mu]*GFAD[{{SPD[p1, p1] - 2*SPD[p1, +q] + SPD[q, q], 1}, 2 + z[1]}, {{SPD[p2, p2] - 2*SPD[p2, q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, +1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, {"fcstFCMellinJoin-ID3", "FCMellinJoin[FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,\ m^2}],SFAD[{q-p2,m^2}]},Names->z,FCE->True]", -"{-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + \ -z[2]])/Pi^2, GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + z[1]}, \ -{{SPD[p2, p2 - 2*q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, \ -1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, +"{-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + z[2]])/Pi^2, GFAD[{{SPD[p1, p1] - 2*SPD[p1, +q] + SPD[q, q], 1}, 2 + z[1]}, {{SPD[p2, p2] - 2*SPD[p2, q] + SPD[q, q], 1}, +1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, {"fcstFCMellinJoin-ID4", "FCMellinJoin[FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,\ m^2}],SFAD[{q-p2,m^2}]},FCLoopGetEtaSigns->False,Names->z,FCE->True]", - "{-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + \ -z[2]])/Pi^2, GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + z[1]}, \ -{{SPD[p2, p2 - 2*q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, \ + "{-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + z[2]])/Pi^2, + GFAD[{{SPD[p1, p1] - 2*SPD[p1, q] + SPD[q, q], 1}, 2 + z[1]}, {{SPD[p2, p2] - 2*SPD[p2, + q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2])}"}, {"fcstFCMellinJoin-ID5", "FCMellinJoin[FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,\ m^2}],SFAD[{q-p2,m^2}]},FCLoopGetEtaSigns->False,Names->z,\ Indexed->False,FCE->True]", -"{-1/4*(Gamma[-z1]*Gamma[2 + z1]*Gamma[-z2]*Gamma[1 + z2])/Pi^2, \ -GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + z1}, {{SPD[p2, p2 - \ -2*q] + SPD[q, q], 1}, 1 + z2}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 + \ -I*SMP[\"Eta\"])^(z1 + z2)}"}, +"{-1/4*(Gamma[-z1]*Gamma[2 + z1]*Gamma[-z2]*Gamma[1 + z2])/Pi^2, +GFAD[{{SPD[p1, p1] - 2*SPD[p1, q] + SPD[q, q], 1}, 2 + z1}, +{{SPD[p2, p2] - 2*SPD[p2, q] + SPD[q, q], 1}, 1 + z2}]*SFAD[{{q, +0}, {0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z1 + z2)}"}, {"fcstFCMellinJoin-ID6", "FCMellinJoin[FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,\ m^2}],SFAD[{q-p2,m^2}]},Names->z,List->False,FCE->True]", -"-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + \ -z[2]]*GFAD[{{SPD[p1, p1 - 2*q] + SPD[q, q], 1}, 2 + z[1]}, {{SPD[p2, \ -p2 - 2*q] + SPD[q, q], 1}, 1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 \ -+ I*SMP[\"Eta\"])^(z[1] + z[2]))/Pi^2"}, +"-1/4*(Gamma[-z[1]]*Gamma[2 + z[1]]*Gamma[-z[2]]*Gamma[1 + +z[2]]*GFAD[{{SPD[p1, p1] - 2*SPD[p1, q] + SPD[q, q], 1}, +2 + z[1]}, {{SPD[p2, p2] - 2*SPD[p2, q] + SPD[q, q], 1}, +1 + z[2]}]*SFAD[{{q, 0}, {0, 1}, 1}]*(-m^2 + I*SMP[\"Eta\"])^(z[1] + z[2]))/Pi^2"}, {"fcstFCMellinJoin-ID7", "FCMellinJoin[FAD[q,{-p1+q,m},{-p1+q,m},{-p2+q,m}],{q},{SFAD[{q-p1,\ m^2}],SFAD[{q-p2,m^2}]},Names->z,FCSplit->{{q,m,p1},{q,m,p2}},\ diff --git a/Tests/LoopIntegrals/TID.test b/Tests/LoopIntegrals/TID.test index 9d17b9c7..5bf048b1 100644 --- a/Tests/LoopIntegrals/TID.test +++ b/Tests/LoopIntegrals/TID.test @@ -1053,8 +1053,8 @@ CFAD[{{k, 0}, {m2^2 - TC[k]^2, -1}, 1}, {{k - pH, 0}, {m2^2 - TC[k - pH]^2, -1}, {"fcstTID-ID67","TID[FAD[l1] GFAD[{{TC[l1 - p], 1}, 1}] GFAD[{{TC[l1 - p], 1}, 1}] CFAD[{{l1 - p + q, 0}, {0, -1}, 1}] CSPD[l1, l1], l1, FCE -> True]", -"-1/2*(CFAD[{{l1, 0}, {-TC[l1]^2, -1}, 1}, {{l1 - p + q, 0}, {0, -1}, 1}]* -(3*CSPD[p, p] - 2*D*CSPD[p, p] - 6*CSPD[p, q] + 4*D*CSPD[p, q] + 3*CSPD[q, q] - 2*D*CSPD[q, q] - - (-1 + D)*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]) + D*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))* -GFAD[{{TC[l1 - p], 1}, 1}, {{TC[l1 - p], 1}, 1}]*TC[l1]^2)/((2 - D)*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))"} +"-1/2*(CFAD[{{l1, 0}, {-TC[l1]^2, -1}, 1}, {{l1 - p + q, 0}, {0, -1}, 1}]*(3*CSPD[p, p] - 2*D*CSPD[p, +p] - 6*CSPD[p, q] + 4*D*CSPD[p, q] + 3*CSPD[q, q] - 2*D*CSPD[q, q] - (-1 + D)*(CSPD[p, p] - 2*CSPD[p, +q] + CSPD[q, q]) + D*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))*GFAD[{{TC[l1] - TC[p], 1}, 1}, +{{TC[l1] - TC[p], 1}, 1}]*TC[l1]^2)/((2 - D)*(CSPD[p, p] - 2*CSPD[p, q] + CSPD[q, q]))"} }; diff --git a/Tests/Shared/FeynCalcExternal.test b/Tests/Shared/FeynCalcExternal.test index 9a4addd9..e568e179 100644 --- a/Tests/Shared/FeynCalcExternal.test +++ b/Tests/Shared/FeynCalcExternal.test @@ -1758,7 +1758,17 @@ Momentum[n, D], Momentum[nb, d]], d]"}, "DiracGamma[LightConePerpendicularComponent[Momentum[p,d],Momentum[\ n,d],Momentum[nb,d]],d]//FCE", "DiracGamma[LightConePerpendicularComponent[Momentum[p, d], \ -Momentum[n, d], Momentum[nb, d]], d]"} +Momentum[n, d], Momentum[nb, d]], d]"}, +{"fcstFeynCalcExternal-ID444", +"FCE[FeynAmpDenominator[ +GenericPropagatorDenominator[ +Pair[Momentum[k1, D], Momentum[k1, D]] + + 2 Pair[Momentum[k1, D], Momentum[k2, D]] + + Pair[Momentum[k2, D], Momentum[k2, D]] + + 2 gkin meta (Pair[Momentum[k1, D], Momentum[n, D]] + + Pair[Momentum[k2, D], Momentum[n, D]]), {1, 1}]]]", +"GFAD[{{SPD[k1, k1] + 2 SPD[k1, k2] + SPD[k2, k2] + + 2 gkin meta (SPD[k1, n] + SPD[k2, n]), 1}, 1}]"} }; From 46152f5632d60d3e08aef276ae0383525838e459 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 5 Aug 2024 15:21:41 +0200 Subject: [PATCH 55/67] Improved FCLoopFindMomentumShifts to flag the problematic quadratic-eikonal propagators and advice the user on how to get rid of them. Also improved the handling of cases where we obtain multiple solution for possible shifts. --- .../Markdown/FCLoopFindMomentumShifts.md | 133 ------------------ .../LoopIntegrals/FCLoopFindMomentumShifts.m | 41 ++++++ .../LoopIntegrals/FCLoopFindMomentumShifts.m | 96 +++++++++---- 3 files changed, 113 insertions(+), 157 deletions(-) delete mode 100644 FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md b/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md deleted file mode 100644 index c77ae744..00000000 --- a/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md +++ /dev/null @@ -1,133 +0,0 @@ -`FCLoopFindMomentumShifts[source, target, {p1, p2, ...}]` finds loop momentum shifts that bring loop integrals or topologies in the list `source` to the form specified in target. The integrals/topologies in `intFrom` and `intTo` are assumed to be equivalent and their denominators must be properly ordered via `FCLoopToPakForm`. Here the loop momenta `p1, p2, ...` belong to the source topologies. - -`target` must be provided as a list of `FeynAmpDenominator` objects, while `intFrom` is a list of such lists. - -It is also possible to invoke the function as `FCLoopFindMomentumShifts[{FCTopology[...], FCTopology[...]}, FCTopology[...]]`. - -For topologies involving kinematic constraints some mappings may require shifts not only in the loop but also in the external -momenta. Such shifts are disabled by default but can be activated by setting the option `Momentum` to `All`. - -Normally, `FCLoopFindMomentumShifts` will abort the evaluation if it fails to find any suitable shifts. Setting the option -`Abort` to `False` will force the function to merely return an empty list in such situations. - -### See also - -[Overview](Extra/FeynCalc.md), [FCLoopToPakForm](FCLoopToPakForm.md), [FCLoopPakOrder](FCLoopPakOrder.md). - -### Examples - -```mathematica -source = {{FAD[p4], FAD[p1], FAD[p1 - p3 - p4], - FAD[{p1 - p4, m1}], FAD[{p3, m1}], FAD[p3 + q1], - FAD[p1 + q1]}} -``` - -$$\left( -\begin{array}{ccccccc} - \frac{1}{\text{p4}^2} & \frac{1}{\text{p1}^2} & \frac{1}{(\text{p1}-\text{p3}-\text{p4})^2} & \frac{1}{(\text{p1}-\text{p4})^2-\text{m1}^2} & \frac{1}{\text{p3}^2-\text{m1}^2} & \frac{1}{(\text{p3}+\text{q1})^2} & \frac{1}{(\text{p1}+\text{q1})^2} \\ -\end{array} -\right)$$ - -```mathematica -target = {FAD[p4], FAD[p1 + p4 + q1], FAD[p1 - p3 + q1], - FAD[{p1 + q1, m1}], FAD[{p3, m1}], FAD[p3 + q1], - FAD[p1 + p4 + 2 q1]} -``` - -$$\left\{\frac{1}{\text{p4}^2},\frac{1}{(\text{p1}+\text{p4}+\text{q1})^2},\frac{1}{(\text{p1}-\text{p3}+\text{q1})^2},\frac{1}{(\text{p1}+\text{q1})^2-\text{m1}^2},\frac{1}{\text{p3}^2-\text{m1}^2},\frac{1}{(\text{p3}+\text{q1})^2},\frac{1}{(\text{p1}+\text{p4}+2 \;\text{q1})^2}\right\}$$ - -```mathematica -FCLoopFindMomentumShifts[source, target, {p1, p3, p4}] -``` - -$$\{\{\text{p1}\to \;\text{p1}+\text{p4}+\text{q1},\text{p3}\to \;\text{p3},\text{p4}\to \;\text{p4}\}\}$$ - -```mathematica -FCLoopFindMomentumShifts[{{FAD[r4], FAD[r1], FAD[r1 - p3 - r4], - FAD[{r1 - r4, m1}], FAD[{p3, m1}], FAD[p3 + q1], FAD[r1 + q1]}}, - {FAD[p4], FAD[p1 + p4 + q1], FAD[p1 - p3 + q1], FAD[{p1 + q1, m1}], - FAD[{p3, m1}], FAD[p3 + q1], FAD[p1 + p4 + 2 q1]}, {p1, p3, p4, r4,r1}] -``` - -$$\{\{\text{p3}\to \;\text{p3},\text{r4}\to \;\text{p4},\text{r1}\to \;\text{p1}+\text{p4}+\text{q1}\}\}$$ - -```mathematica -source1 = {FCTopology[ - fctopology3, {SFAD[{{p1, 0}, {0, 1}, 1}], - SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], - FCTopology[ - fctopology4, {SFAD[{{p2 + p3, 0}, {0, 1}, 1}], - SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}]} -``` - -$$\left\{\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology4},\left\{\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)\right\}$$ - -```mathematica -target1 = FCTopology[ - fctopology1, {SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], - SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}] -``` - -$$\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)$$ - -```mathematica -FCLoopFindMomentumShifts[source1, target1] -``` - -$$\{\{\text{p1}\to -\text{p1}-\text{p3}+Q,\text{p2}\to -\text{p2}-\text{p3}+Q,\text{p3}\to \;\text{p3}\},\{\text{p1}\to Q-\text{p2},\text{p2}\to Q-\text{p1},\text{p3}\to -\text{p3}\}\}$$ - -```mathematica -source2 = {FCTopology[topo1, { - SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l1 - l2, 0}, {0, 1}, 1}], - SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], - SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, - {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}]} -``` - -$$\left\{\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{((\text{l1}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{l2})^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)\right\}$$ - -```mathematica -target2 = FCTopology[topo2, { - SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], - SFAD[{{l1 - q2, 0}, {0, 1}, 1}], - SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], - SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, - {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}] -``` - -$$\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)$$ - -Mapping these two topologies onto each other requires shifts in the external momenta - -```mathematica -Quiet[FCLoopFindMomentumShifts[source2, target2, Abort -> False]] -``` - -$$\{\{\}\}$$ - -Once we allow such shifts, everything works as expected - -```mathematica -FCLoopFindMomentumShifts[source2, target2, Momentum -> All] -``` - -$$\{\{\text{l1}\to \;\text{l1}-\text{l2}-\text{q2},\text{l2}\to -\text{l2},\text{q1}\to \;\text{q2},\text{q2}\to \;\text{q1}\}\}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m index 9cc43b88..ee31ba75 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m @@ -119,3 +119,44 @@ FCLoopFindMomentumShifts[source2,target2,Momentum->All] + + +(* ::Text:: *) +(*For equivalent topologies containing mixed quadratic-eikonal propagators it's often not possible to find suitable shifts because the function cannot reconstruct the correct momentum flow through such propagators*) + + +source3={FCTopology["pfrTopo303",{SFAD[{{k2,-2 gkin meta k2 . n+meta u0b k2 . nb}, +{2 gkin meta^2 u0b,1},1}],SFAD[{{k1-k2,meta u0b (-k1+k2) . nb},{0,1},1}], +SFAD[{{k1,-2 gkin meta k1 . n},{0,1},1}],SFAD[{{k1,-meta u0b k1 . nb},{0,1},1}], +SFAD[{{0,-k2 . nb},{0,1},1}],SFAD[{{0,-k1 . nb},{0,1},1}]},{k1,k2},{n,nb}, +{Hold[SPD][n]->0,Hold[SPD][nb]->0,Hold[SPD][n,nb]->2},{}]} + + +target3=FCTopology["pfrTopo267",{SFAD[{{k2,0},{0,1},1}],SFAD[{{k1-k2,2 gkin meta k1 . n-2 gkin meta u0b k1 . n-2 gkin meta k2 . n+2 gkin meta u0b k2 . n+meta u0b (-k1+k2) . nb},{2 gkin meta^2 u0b-2 gkin meta^2 u0b^2,1},1}],SFAD[{{k1,2 gkin meta k1 . n-2 gkin meta u0b k1 . n-meta u0b k1 . nb},{2 gkin meta^2 u0b-2 gkin meta^2 u0b^2,1},1}],SFAD[{{k1,-2 gkin meta u0b k1 . n},{0,1},1}],SFAD[{{0,k2 . nb},{2 gkin meta,1},1}],SFAD[{{0,k1 . nb},{2 gkin meta u0b,1},1}]},{k1,k2},{n,nb},{Hold[SPD][n]->0,Hold[SPD][nb]->0,Hold[SPD][n,nb]->2},{}] + + +(DataType[#,FCVariable]=True)&/@\!\(TraditionalForm\`{gkin, meta, u0b}\); + + +FCLoopFindMomentumShifts[source3,target3] + + +(* ::Text:: *) +(*To this aim one can try converting those mixed propagators to purely quadratic ones using `FCLoopReplaceQuadraticEikonalPropagators`*) + + +source3New=FCLoopReplaceQuadraticEikonalPropagators[source3,LoopMomenta->{k1,k2}, +InitialSubstitutions->{ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}] + + +target3New=FCLoopReplaceQuadraticEikonalPropagators[target3,LoopMomenta->{k1,k2}, +InitialSubstitutions->{ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}]//First + + +(* ::Text:: *) +(*With the new topologies everything works as expected*) + + +FCLoopFindMomentumShifts[source3New,target3New] diff --git a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m index 5ed55820..d2f201f4 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m @@ -61,6 +61,7 @@ FCI -> False, FCVerbose -> False, "Kinematics" -> {}, + "TopologyNames" -> {}, InitialSubstitutions -> {}, Momentum -> {} }; @@ -92,12 +93,14 @@ optMomentum = to[[4]] ]; - FCLoopFindMomentumShifts[#[[2]]&/@from, to[[2]], to[[3]], Join[{FCI->True,Momentum->optMomentum,"Kinematics"->optKinematics}, FilterRules[{opts}, Except[FCI|Momentum|"Kinematics"]]]] + + FCLoopFindMomentumShifts[#[[2]]&/@from, to[[2]], to[[3]], Join[{FCI->True,Momentum->optMomentum,"Kinematics"->optKinematics, + "TopologyNames"->{#[[1]]&/@from,to[[1]]}}, FilterRules[{opts}, Except[FCI|Momentum|"Kinematics"|"TopologyNames"]]]] ]; FCLoopFindMomentumShifts[fromRaw_List/;FreeQ[fromRaw,FCTopology], toRaw_/;FreeQ[toRaw,FCTopology], lmoms_List, OptionsPattern[]] := - Block[{from, to, res, time, shifts, optInitialSubstitutions,optKinematics}, + Block[ {from, to, res, time, shifts, optInitialSubstitutions, optKinematics, optTopologyNames}, If[ OptionValue[FCVerbose] === False, fcflsVerbose = $VeryVerbose, @@ -105,11 +108,18 @@ fcflsVerbose = OptionValue[FCVerbose]]; ]; + optInitialSubstitutions = OptionValue[InitialSubstitutions]; + optKinematics = OptionValue["Kinematics"]; + optTopologyNames = OptionValue["TopologyNames"]; + FCPrint[1, "FCLoopFindMomentumShifts: Entering.", FCDoControl -> fcflsVerbose]; FCPrint[2, "FCLoopFindMomentumShifts: Kinematics:", optKinematics, " ", FCDoControl -> fcflsVerbose]; - optInitialSubstitutions = OptionValue[InitialSubstitutions]; - optKinematics = OptionValue["Kinematics"]; + + + If[ optTopologyNames==={}, + optTopologyNames = {ConstantArray["unnamedSourceTopo",Length[fromRaw]],"unnamedTargetTopo"} + ]; If[optKinematics==={}, optKinematics = {ConstantArray[{},Length[fromRaw]], {}} @@ -121,6 +131,12 @@ ]; optMomentum = OptionValue[Momentum]; + + If[ optMomentum===All, + Message[FCLoopFindMomentumShifts::failmsg,"The option Momentum can be set to All only when using FCTopology objects as input."]; + Abort[] + ]; + optAbort = OptionValue[Abort]; @@ -128,8 +144,10 @@ FCPrint[3, "FCLoopFindMomentumShifts: Target topology: ", to, FCDoControl -> fcflsVerbose]; FCPrint[2, "FCLoopFindMomentumShifts: Allowing kinematic shifts for the following external momenta: ", optMomentum, FCDoControl -> fcflsVerbose]; - from = from /. optInitialSubstitutions; - to = to /. optInitialSubstitutions; + + {from, to, optInitialSubstitutions} = MomentumCombine[{from, to, optInitialSubstitutions},FCI->True, NumberQ -> False]; + + {from, to} = {from, to} /. optInitialSubstitutions; FCPrint[3, "FCLoopFindMomentumShifts: Source topologies after InitialSubstitutions: ", from, FCDoControl -> fcflsVerbose]; FCPrint[3, "FCLoopFindMomentumShifts: Target topology after InitialSubstitutions: ", to, FCDoControl -> fcflsVerbose]; @@ -146,7 +164,7 @@ time=AbsoluteTime[]; FCPrint[1, "FCLoopFindMomentumShifts: Finding loop momentum shifts.", FCDoControl -> fcflsVerbose]; - shifts = MapThread[findShifts[#1,to,lmoms,#2,optKinematics[[2]]]&,{from, optKinematics[[1]] }]; + shifts = MapThread[findShifts[#1,to,lmoms,#2,optKinematics[[2]],#3,optTopologyNames[[2]]]&,{from, optKinematics[[1]], optTopologyNames[[1]]}]; FCPrint[1, "FCLoopFindMomentumShifts: Done finding loop momentum shifts, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcflsVerbose]; @@ -157,13 +175,10 @@ ]; -findShifts[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List]:= - Block[{lhs, rhs, eq, mark, vars, sol, res, lmoms, allmoms, extmoms, tmp, auxFrom, auxTo}, +findShifts[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List, topoNamesFrom_, topoNamesTo_]:= + Block[{lhs, rhs, eq, mark, vars, sol, res, lmoms, allmoms, extmoms, tmp, auxFrom, auxTo, mixedProps, rule}, - lhs = MomentumCombine[from,FCI->True, NumberQ -> False]; - rhs = MomentumCombine[to,FCI->True, NumberQ -> False]; - - {lhs, rhs} = {lhs, rhs} /. { + {lhs, rhs} = {from, to} /. { FeynAmpDenominator[PropagatorDenominator[Momentum[mom_, _], _]] :> mom, FeynAmpDenominator[PropagatorDenominator[Complex[0,(1|-1)] Momentum[mom_, _], _]] :> mom, FeynAmpDenominator[StandardPropagatorDenominator[Momentum[mom_, _], 0, _, {1, _}]] :> mom, @@ -178,11 +193,31 @@ FCPrint[3, "FCLoopFindMomentumShifts: Kinematics lhs: ", fromKininematis, ".", FCDoControl -> fcflsVerbose]; FCPrint[3, "FCLoopFindMomentumShifts: Kinematics rhs: ", toKinematics, ".", FCDoControl -> fcflsVerbose]; - tmp = Transpose[{lhs, rhs}]; + mixedProps = Union[Cases[tmp, FeynAmpDenominator[(StandardPropagatorDenominator|CartesianPropagatorDenominator)[a_ /; a =!= 0, b_ /; b =!= 0, ___]], Infinity]]; + (* Remove all propagators where we failed to extract the momentum flow *) tmp = SelectFree[tmp,FeynAmpDenominator]; + If[ mixedProps=!={}, + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["The topologies contain following mixed quadratic-eikonal propagators that complicate the determination of the shifts: " , {Darker[Yellow,0.55], Bold}], + mixedProps, FCDoControl -> fcflsVerbose]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["You can try to trade them for purely quadratic propagators using FCLoopReplaceQuadraticEikonalPropagators." , {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; + ]; + + If[ tmp==={}, + Message[FCLoopFindMomentumShifts::shifts]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> + ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> " due to the presence of nonquadratic propagators.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; + + If[optAbort, + Abort[], + Return[{}] + ] + ]; + {lhs, rhs} = Transpose[tmp]; FCPrint[3, "FCLoopFindMomentumShifts: Preliminary lhs: ", lhs, FCDoControl -> fcflsVerbose]; @@ -204,13 +239,20 @@ FCPrint[3, "FCLoopFindMomentumShifts: Final rhs: ", rhs, FCDoControl -> fcflsVerbose]; FCPrint[3, "FCLoopFindMomentumShifts: Variables to solve for: ", vars, FCDoControl -> fcflsVerbose]; + + eq = Thread[Equal[lhs^2,rhs^2]]; + sol = Solve[eq,vars]; FCPrint[3, "FCLoopFindMomentumShifts: Possible shifts: ", sol, FCDoControl -> fcflsVerbose]; If[ sol==={}, Message[FCLoopFindMomentumShifts::shifts]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> + ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> + ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; If[optAbort, Abort[], Return[{}] @@ -218,12 +260,16 @@ ]; (*We need to pick a solution that doesn't mix external momenta into loop momenta*) + + + If[ optMomentum=!={}, - sol = Map[ If[FreeQ2[(mark/@extmoms)/.#,lmoms], + sol = Map[ If[FreeQ2[(mark/@extmoms)/.#, lmoms], #, Unevaluated[Sequence[]] - ]&, sol + ]&, sol ]; + FCPrint[3, "FCLoopFindMomentumShifts: Remaining shifts: ", sol, FCDoControl -> fcflsVerbose], If[ sol==={}, Message[FCLoopFindMomentumShifts::shifts]; @@ -235,6 +281,8 @@ ]; + + (* In the case of multiple solutions we should select the correct one. For example, in the case of [l^2][l1^2-m^2][l1.q2] and [(l2+q2)^2][l1^2-m^2][l1.q2], a set of shifts containing l1->-l2 is not @@ -250,15 +298,22 @@ FCPrint[3, "FCLoopFindMomentumShifts: Valid shifts: ", sol, FCDoControl -> fcflsVerbose]; + (*Remove trivial rules of the type k1->k1*) + sol = sol /. Rule->rule/. rule[a_,a_]:> Unevaluated[Sequence[]]/.rule->Rule; + If[ sol==={}, Message[FCLoopFindMomentumShifts::shifts]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> + ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> + ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; If[optAbort, Abort[], Return[{}] ] ]; - res = First[sol]; + res = First[SortBy[sol, {Length, LeafCount}]]; res @@ -268,12 +323,5 @@ findShifts[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, _List]:= {}/; Length[from]=!=Length[to]; - - - - - - - FCPrint[1,"FCLoopFindMomentumShifts.m loaded."]; End[] From 8990853defe248ac3255bb9bc83eb9f08c6dbad4 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 6 Aug 2024 14:25:50 +0200 Subject: [PATCH 56/67] Added new function FCLoopReplaceQuadraticEikonalPropagators for rewriting mixed quadratic-eikonal propagators in terms purely quadratic ones. --- .../Documentation/Markdown/Extra/FeynCalc.md | 1 + ...FCLoopReplaceQuadraticEikonalPropagators.m | 49 ++++++ ...FCLoopReplaceQuadraticEikonalPropagators.m | 118 +++++++++++++ ...oopReplaceQuadraticEikonalPropagators.test | 160 ++++++++++++++++++ 4 files changed, 328 insertions(+) create mode 100644 FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m create mode 100755 FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m create mode 100644 Tests/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.test diff --git a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md index d6e4cd20..2db4d61a 100644 --- a/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md +++ b/FeynCalc/Documentation/Markdown/Extra/FeynCalc.md @@ -351,6 +351,7 @@ FeynCalc is a Mathematica package for algebraic calculations in Quantum Field Th - [FCLoopPropagatorPowersExpand](../FCLoopPropagatorPowersExpand.md) - rewrites propagators raised to integer powers as products of propagators - [FCLoopPropagatorsToTopology](../FCLoopPropagatorsToTopology.md) - auxiliary function that generates a list of propagators to describe a topology - [FCLoopRemovePropagator](../FCLoopRemovePropagator.md) - removes specific propagators from given `FCTopology`s or `GLI`s +- [FCLoopReplaceQuadraticEikonalPropagators](../FCLoopReplaceQuadraticEikonalPropagators.md) - tries to eliminate quadratic-eikonal propagators by completing the square - [FCLoopSamePropagatorHeadsQ](../FCLoopSamePropagatorHeadsQ.md) - checks if the integral contains different types of propagators - [FCLoopRemoveNegativePropagatorPowers](../FCLoopRemoveNegativePropagatorPowers.md) - rewrites propagators rasied to negative integer powers as numerators - [FCLoopSelectTopology](../FCLoopSelectTopology.md) - selects topologies belonging for the given `GLI`s diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m new file mode 100644 index 00000000..444dfd9a --- /dev/null +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m @@ -0,0 +1,49 @@ +(* ::Package:: *) + +(* ::Section:: *) +(*FCLoopReplaceQuadraticEikonalPropagators*) + + +(* ::Text:: *) +(*`FCLoopReplaceQuadraticEikonalPropagators[topologies]` identifies `SFAD`s and `CFAD`s in `topologies` that represent mixed quadratic-eikonal propagators, e.g. $[p^2 - 2 p \cdot q]$. Using the information on loop momenta provided by the user the routine will try to rewrite those denominators by completing the square, e.g. as in $[(p-q)^2 - q^2]$.*) + + +(* ::Text:: *) +(*This procedure is useful because one cannot easily determine the momentum flow from looking at quadratic-eikonal propagators as it is possible in the case of purely quadratic ones.*) + + +(* ::Text:: *) +(*For this to work it is crucial to specify the loop momenta via the `LoopMomenta` option as well as the kinematics (`IntermediateSubstitutions`) and the rules for completing the square (`InitialSubstitutions`) on the purely loop-momentum dependent piece of the propagator (e.g. $p_1^2 - 2 p_1 \cdot p_2 + p_2^2$ goes to $(p_1+p_2)^2$.*) + + +(* ::Text:: *) +(*Internally this routine uses `ToGFAD` and `FromGFAD`.*) + + +(* ::Subsection:: *) +(*See also*) + + +(* ::Text:: *) +(*[Overview](Extra/FeynCalc.md), [FCTopology](FCTopology.md), [GFAD](GFAD.md), [FromGFAD](FromGFAD.md), [ToGFAD](ToGFAD.md).*) + + +(* ::Subsection:: *) +(*Examples*) + + +(DataType[#,FCVariable]=True)&/@\!\(TraditionalForm\`{gkin, meta, u0b}\); + + +topos={FCTopology[preTopoDia1,{SFAD[{{k2,0},{0,1},1}],SFAD[{{k1,0},{0,1},1}], +SFAD[{{k1+k2,0},{0,1},1}],SFAD[{{0,-k1.nb},{0,1},1}],SFAD[{{k2,-(meta*u0b*k2.nb)},{0,1},1}], +SFAD[{{k1+k2,-2*gkin*meta*u0b*(k1+k2).n},{0,1},1}],SFAD[{{k1,-2*gkin*meta*k1.n+meta*u0b*k1.nb}, +{2*gkin*meta^2*u0b,1},1}],SFAD[{{k1,-2*gkin*meta*u0b*k1.n+meta*u0b*k1.nb},{2*gkin*meta^2*u0b^2,1},1}]}, +{k1,k2},{n,nb},{Hold[SPD][n]->0,Hold[SPD][nb]->0,Hold[SPD][n,nb]->2},{}]} + + +FCLoopReplaceQuadraticEikonalPropagators[topos,LoopMomenta->{k1,k2}, +InitialSubstitutions->{ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}] diff --git a/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m b/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m new file mode 100755 index 00000000..6b917b21 --- /dev/null +++ b/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m @@ -0,0 +1,118 @@ +(* ::Package:: *) + +(* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) + +(* :Title: FCLoopReplaceQuadraticEikonalPropagators *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Tries to eliminate quadratic-eikonal propagators by + completing the square *) + +(* ------------------------------------------------------------------------ *) + +FCLoopReplaceQuadraticEikonalPropagators::usage = +"FCLoopReplaceQuadraticEikonalPropagators[exp] checks if the integral is free of eikonal +propagators $\\frac{1}{p \\cdot q+x}$. If the option First is set to False, +propagators that have both a quadratic and linear piece, e.g. $\\frac{1}{p^2 + +p \\cdot q+x}$ will also count as eikonal propagators. The option Momentum can +be used to check for the presence of eikonal propagators only with respect to +particular momenta. The check is performed only for +StandardPropagatorDenominator and CartesianPropagatorDenominator."; + +FCLoopReplaceQuadraticEikonalPropagators::failmsg = +"FCLoopReplaceQuadraticEikonalPropagators has encountered a fatal problem and must abort the computation. \ +The problem reads: `1`" + +Begin["`Package`"] +End[] + +Begin["`FCLoopReplaceQuadraticEikonalPropagators`Private`"] + +rqepVerbose::usage=""; + +Options[FCLoopReplaceQuadraticEikonalPropagators] = { + Check -> True, + ExpandScalarProduct -> True, + FCE -> False, + FCI -> False, + FCVerbose -> False, + FeynAmpDenominatorExplicit -> True, + InitialSubstitutions -> {}, + IntermediateSubstitutions -> {}, + LoopMomenta -> {}, + MomentumCombine -> True, + PowerExpand -> {} +}; + +FCLoopReplaceQuadraticEikonalPropagators[topo_FCTopology, opts:OptionsPattern[]]:= + FCLoopReplaceQuadraticEikonalPropagators[{topo}, opts]; + +FCLoopReplaceQuadraticEikonalPropagators[toposRaw:{__FCTopology}, OptionsPattern[]]:= + Block[{ topos, optInitialSubstitutions, optIntermediateSubstitutions, + optPowerExpand, optFeynAmpDenominatorExplicit, optLoopMomenta, + props, propsConverted, repRule}, + + optInitialSubstitutions = OptionValue[InitialSubstitutions]; + optIntermediateSubstitutions = OptionValue[IntermediateSubstitutions]; + + If [OptionValue[FCVerbose]===False, + rqepVerbose=$VeryVerbose, + If[MatchQ[OptionValue[FCVerbose], _Integer], + rqepVerbose=OptionValue[FCVerbose] + ]; + ]; + + FCPrint[1, "FCLoopReplaceQuadraticEikonalPropagators: Entering.", FCDoControl->rqepVerbose]; + FCPrint[3, "FCLoopReplaceQuadraticEikonalPropagators: Entering with: ", {toposRaw}, FCDoControl->rqepVerbose]; + + {optInitialSubstitutions,optIntermediateSubstitutions} = FRH[{optInitialSubstitutions,optIntermediateSubstitutions}]; + + If[ !OptionValue[FCI], + {topos, optInitialSubstitutions, optIntermediateSubstitutions} = + FCI[{toposRaw,optInitialSubstitutions, optIntermediateSubstitutions}], + topos = toposRaw + ]; + + props = Union[Cases[topos, FeynAmpDenominator[(StandardPropagatorDenominator|CartesianPropagatorDenominator)[a_ /; a =!= 0, b_ /; b =!= 0, ___]], Infinity]]; + + If[props==={}, + FCPrint[1, "FCLoopReplaceQuadraticEikonalPropagators: Nothing to do.", FCDoControl->rqepVerbose]; + Return[topos] + ]; + + propsConverted = ToGFAD[props,FCI->True,FinalSubstitutions->optIntermediateSubstitutions]; + + FCPrint[3, "FCLoopReplaceQuadraticEikonalPropagators: After ToGFAD: ", propsConverted, FCDoControl->rqepVerbose]; + + propsConverted = FromGFAD[propsConverted,FCI->True, + InitialSubstitutions->optInitialSubstitutions, + IntermediateSubstitutions->optIntermediateSubstitutions, + PowerExpand->OptionValue[PowerExpand], + FeynAmpDenominatorExplicit->OptionValue[FeynAmpDenominatorExplicit], + ExpandScalarProduct->OptionValue[ExpandScalarProduct], + LoopMomenta->OptionValue[LoopMomenta], + MomentumCombine->OptionValue[MomentumCombine], + Check->OptionValue[Check]]; + + repRule = Thread[Rule[props,propsConverted]]; + + FCPrint[3, "FCLoopReplaceQuadraticEikonalPropagators: Replacement rule: ", repRule, FCDoControl->rqepVerbose]; + + topos = topos /. Dispatch[repRule]; + + FCPrint[1, "FCLoopReplaceQuadraticEikonalPropagators: Leaving.", FCDoControl->rqepVerbose]; + FCPrint[3, "FCLoopReplaceQuadraticEikonalPropagators: Leaving with: ", topos, FCDoControl->rqepVerbose]; + + topos + + + ] + +FCPrint[1,"FCLoopReplaceQuadraticEikonalPropagators.m loaded."]; +End[] diff --git a/Tests/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.test b/Tests/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.test new file mode 100644 index 00000000..c5b2f8ee --- /dev/null +++ b/Tests/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.test @@ -0,0 +1,160 @@ + + +(* :Title: FCLoopReplaceQuadraticEikonalPropagators.test *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: Framework independent unit tests for FCLoopReplaceQuadraticEikonalPropagators *) + +(* ------------------------------------------------------------------------ *) + +Tests`LoopIntegrals`FCLoopReplaceQuadraticEikonalPropagators = +({ +{"fcstFCLoopReplaceQuadraticEikonalPropagators-ID1", +"FCLoopReplaceQuadraticEikonalPropagators[FCTopology[pfrTopo226, \ +{SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], SFAD[{{k1 - \ +(meta*nb*u0b)/2, 0}, {0, 1}, 1}], SFAD[{{k2 + gkin*meta*n*u0b, 0}, \ +{0, 1}, 1}], SFAD[{{k1 - k2 - (meta*nb*u0b)/2, 0}, {0, 1}, 1}], \ +SFAD[{{k1 + (meta*(2*gkin*n - nb)*u0b)/2, 0}, {2*gkin*meta^2*u0b^2, \ +1}, 1}]}, +{k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, \ +Hold[SPD][n, nb] -> 2}, {}]]", +"{FCTopology[ +pfrTopo226, {FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k2, D], 0, 0, {1, 1}]], +FeynAmpDenominator[ + StandardPropagatorDenominator[Momentum[k1, D], 0, 0, {1, 1}]], +FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D] - Momentum[meta*nb*u0b, D]/2, 0, 0, {1, 1}]], +FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k2, D] + Momentum[gkin*meta*n*u0b, D], 0, 0, {1, 1}]], +FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D] - Momentum[k2, D] - Momentum[meta*nb*u0b, D]/2, + 0, 0, {1, 1}]], +FeynAmpDenominator[ + StandardPropagatorDenominator[ + Momentum[k1, D] + Momentum[gkin*meta*n*u0b, D] - + Momentum[meta*nb*u0b, D]/2, + 0, -2*gkin*meta^2*u0b^2, {1, 1}]]}, {k1, k2}, {n, +nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, +Hold[SPD][n, nb] -> 2}, {}]}"}, +{"fcstFCLoopReplaceQuadraticEikonalPropagators-ID2", +"FCLoopReplaceQuadraticEikonalPropagators[{FCTopology[pfrTopo226, \ +{SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], SFAD[{{k1 - \ +(meta*nb*u0b)/2, 0}, {0, 1}, 1}], SFAD[{{k2 + gkin*meta*n*u0b, 0}, \ +{0, 1}, 1}], SFAD[{{k1 - k2 - (meta*nb*u0b)/2, 0}, {0, 1}, 1}], \ +SFAD[{{k1 + (meta*(2*gkin*n - nb)*u0b)/2, 0}, {2*gkin*meta^2*u0b^2, \ +1}, 1}]}, +{k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, \ +Hold[SPD][n, nb] -> 2}, {}],FCTopology[pfrTopo212, {SFAD[{{k2, 0}, \ +{0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], SFAD[{{k2 - (meta*nb*u0b)/2, \ +0}, {0, 1}, 1}], SFAD[{{k1 + gkin*meta*n*u0b, 0}, {0, 1}, 1}], \ +SFAD[{{k1 - k2 + gkin*meta*n*u0b, 0}, {0, 1}, 1}], SFAD[{{k1 + \ +(meta*(2*gkin*n - nb)*u0b)/2, 0}, {2*gkin*meta^2*u0b^2, 1}, 1}]}, +{k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, \ +Hold[SPD][n, nb] -> 2}, \ +{}]}]\[IndentingNewLine](DataType[#,FCVariable]=True)&/@\!\(\*FormBox[\ +\({gkin, meta, u0b}\), + TraditionalForm]\);FCLoopReplaceQuadraticEikonalPropagators[{\ +FCTopology[preTopoDia1,{SFAD[{{k2,0},{0,1},1}],SFAD[{{k1,0},{0,1},1}],\ +SFAD[{{k1+k2,0},{0,1},1}],SFAD[{{0,-k1.nb},{0,1},1}],SFAD[{{k2,-(meta*\ +u0b*k2.nb)},{0,1},1}],SFAD[{{k1+k2,-2*gkin*meta*u0b*(k1+k2).n},{0,1},\ +1}],SFAD[{{k1,-2*gkin*meta*k1.n+meta*u0b*k1.nb},{2*gkin*meta^2*u0b,1},\ +1}],SFAD[{{k1,-2*gkin*meta*u0b*k1.n+meta*u0b*k1.nb},{2*gkin*meta^2*\ +u0b^2,1},1}]},{k1,k2},{n,nb},{Hold[SPD][n]->0,Hold[SPD][nb]->0,Hold[\ +SPD][n,nb]->2},{}]},\[IndentingNewLine]LoopMomenta->{k1,k2},\ +InitialSubstitutions->{ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"{FCTopology[preTopoDia1, \ +{FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D], 0, \ +0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D], 0, \ +0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] + \ +Momentum[k2, D], 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[0, \ +-Pair[Momentum[k1, D], Momentum[nb, D]], 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] - \ +(meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + k2, D] \ +- gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - \ +(meta*Momentum[2*gkin*n - nb*u0b, D])/2, 0, -2*gkin*meta^2*u0b, {1, \ +1}]], FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, \ +D] - (meta*u0b*Momentum[2*gkin*n - nb, D])/2, 0, \ +-2*gkin*meta^2*u0b^2, {1, 1}]]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> \ +0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]}"}, +{"fcstFCLoopReplaceQuadraticEikonalPropagators-ID3", +"FCLoopReplaceQuadraticEikonalPropagators[{FCTopology[preTopoDia2,{\ +SFAD[{{k2,0},{0,1},1}],SFAD[{{k1,0},{0,1},1}],SFAD[{{0,k2.nb},{2*gkin*\ +meta,1},1}],SFAD[{{0,(k1+k2).nb},{2*gkin*meta,1},1}],SFAD[{{k1,-(meta*\ +u0b*k1.nb)},{0,1},1}],SFAD[{{k1,-2*gkin*meta*u0b*k1.n},{0,1},1}],SFAD[\ +{{k1+k2,-2*gkin*meta*(k1+k2).n},{0,1},1}],SFAD[{{k2,-2*gkin*meta*k2.n+\ +2*gkin*meta*u0b*k2.n},{0,1},1}]},{k1,k2},{n,nb},{Hold[SPD][n]->0,Hold[\ +SPD][nb]->0,Hold[SPD][n,nb]->2},{}]},\[IndentingNewLine]LoopMomenta->{\ +k1,k2},InitialSubstitutions->{ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-\ +k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"{FCTopology[preTopoDia2, \ +{FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D], 0, \ +0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D], 0, \ +0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[0, \ +Pair[Momentum[k2, D], Momentum[nb, D]], -2*gkin*meta, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[0, Pair[Momentum[k1, \ +D] + Momentum[k2, D], Momentum[nb, D]], -2*gkin*meta, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - \ +(meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - \ +gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 + k2, D] \ +- gkin*meta*Momentum[n, D], 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D] - \ +gkin*meta*Momentum[n*(1 - u0b), D], 0, 0, {1, 1}]]}, {k1, k2}, {n, \ +nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, \ +{}]}"}, +{"fcstFCLoopReplaceQuadraticEikonalPropagators-ID4", +"FCLoopReplaceQuadraticEikonalPropagators[{FCTopology[preTopoDia3,{\ +SFAD[{{k2,0},{0,1},1}],SFAD[{{k1,0},{0,1},1}],SFAD[{{0,k2.nb},{2*gkin*\ +meta,1},1}],SFAD[{{0,k1.nb},{2*gkin*meta*u0b,1},1}],SFAD[{{k1,-(meta*\ +u0b*k1.nb)},{0,1},1}],SFAD[{{k1,-2*gkin*meta*u0b*k1.n},{0,1},1}],SFAD[\ +{{k1,2*gkin*meta*k1.n-2*gkin*meta*u0b*k1.n-meta*u0b*k1.nb},{2*gkin*\ +meta^2*u0b-2*gkin*meta^2*u0b^2,1},1}],SFAD[{{k1-k2,2*gkin*meta*k1.n-2*\ +gkin*meta*u0b*k1.n-2*gkin*meta*k2.n+2*gkin*meta*u0b*k2.n+meta*u0b*(-\ +k1+k2).nb},{2*gkin*meta^2*u0b-2*gkin*meta^2*u0b^2,1},1}]},{k1,k2},{n,\ +nb},{Hold[SPD][n]->0,Hold[SPD][nb]->0,Hold[SPD][n,nb]->2},{}]},\ +\[IndentingNewLine]LoopMomenta->{k1,k2},InitialSubstitutions->{\ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},\ +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->0}]", +"{FCTopology[preTopoDia3, \ +{FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D], 0, \ +0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D], 0, \ +0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[0, \ +Pair[Momentum[k2, D], Momentum[nb, D]], -2*gkin*meta, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[0, Pair[Momentum[k1, \ +D], Momentum[nb, D]], -2*gkin*meta*u0b, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - \ +(meta*u0b*Momentum[nb, D])/2, 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - \ +gkin*meta*u0b*Momentum[n, D], 0, 0, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] + \ +(meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]], \ +FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1 - k2, D] \ ++ (meta*Momentum[2*gkin*n - 2*gkin*n*u0b - nb*u0b, D])/2, 0, \ +-2*gkin*meta^2*u0b + 2*gkin*meta^2*u0b^2, {1, 1}]]}, {k1, k2}, {n, \ +nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, \ +{}]}"} +}) From c0e61926ff6d070da2962702b9d8c8e2a69ee11c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 6 Aug 2024 14:41:05 +0200 Subject: [PATCH 57/67] Extended the definitions of Momentum and CartesianMomentum to handle cases where the momentum is multiplied by a polynomial in FCVariables. --- FeynCalc/Shared/SharedObjects.m | 10 ++++++++++ Tests/Shared/SharedObjects.test | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/FeynCalc/Shared/SharedObjects.m b/FeynCalc/Shared/SharedObjects.m index 1a6d3531..1ead7f1f 100644 --- a/FeynCalc/Shared/SharedObjects.m +++ b/FeynCalc/Shared/SharedObjects.m @@ -2252,6 +2252,9 @@ ftype with (possible) Lorentz-indices lorind and $SU(N)$ indices sunind. The Momentum[x_ Power[a_/;DataType[a,FCVariable], n_], dim_ :4] := Power[a,n] Momentum[x, dim]; +Momentum[x_ Power[c_. a_^m_. + b_/;DataType[a,FCVariable], n_], dim_ :4] := + Power[c a^m + b,n] Momentum[x, dim]; + Momentum[x_ n_/;DataType[n,FCVariable], dim_ :4] := n Momentum[x, dim]; @@ -2774,6 +2777,13 @@ ftype with (possible) Lorentz-indices lorind and $SU(N)$ indices sunind. The CartesianMomentum[x_ n_?NumberQ, dim_ :3] := n CartesianMomentum[x, dim]; + +CartesianMomentum[x_ Power[a_/;DataType[a,FCVariable], n_], dim_ :3] := + Power[a,n] CartesianMomentum[x, dim]; + +CartesianMomentum[x_ Power[c_. a_^m_. + b_/;DataType[a,FCVariable], n_], dim_ :3] := + Power[c a^m + b,n] CartesianMomentum[x, dim]; + CartesianMomentum[x_ n_/;DataType[n,FCVariable], dim_ :3] := n CartesianMomentum[x, dim]; diff --git a/Tests/Shared/SharedObjects.test b/Tests/Shared/SharedObjects.test index f7f27820..3eb59513 100644 --- a/Tests/Shared/SharedObjects.test +++ b/Tests/Shared/SharedObjects.test @@ -1056,8 +1056,14 @@ SUNTF[a_List, _, _] :> SUNT @@ a", "SUNT[SUNIndex[a1], SUNIndex[a2]]"}, Momentum[nb]]", "0"}, {"fcstSharedObjectsBehavior-ID226", "DataType[myVarFC,FCVariable]=True; LightConePerpendicularComponent[myVarFC Momentum[x], Momentum[n], Momentum[nb]]", "myVarFC LightConePerpendicularComponent[Momentum[x], Momentum[n], Momentum[nb]]"}, -{"fcstSharedObjectsBehavior-ID227", "DiracGamma[a LightConePerpendicularComponent[Momentum[x], Momentum[n], Momentum[nb]]]", -"a DiracGamma[LightConePerpendicularComponent[Momentum[x], Momentum[n], Momentum[nb]]]"} +{"fcstSharedObjectsBehavior-ID227", "Momentum[nb/(1 + 2 myVarFC)]", +"Momentum[nb]/(1 + 2 myVarFC)"}, +{"fcstSharedObjectsBehavior-ID228", "Momentum[nb/(a + 2 myVarFC^2)]", +"Momentum[nb]/(a + 2 myVarFC^2)"}, +{"fcstSharedObjectsBehavior-ID229", "CartesianMomentum[nb/(1 + 2 myVarFC)]", +"CartesianMomentum[nb]/(1 + 2 myVarFC)"}, +{"fcstSharedObjectsBehavior-ID230", "CartesianMomentum[nb/(a + 2 myVarFC^2)]", +"CartesianMomentum[nb]/(a + 2 myVarFC^2)"} } Tests`Shared`fcstSharedObjectsDiracIndex = From bb65294b95cd7e2a49a80756c35075161c729091 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Tue, 6 Aug 2024 17:15:56 +0200 Subject: [PATCH 58/67] Improved the algorithm for topology mappings to avoid some common issues with the determination of momentum shifts. --- .../Markdown/FCLoopFindTopologyMappings.md | 303 ------------------ .../LoopIntegrals/FCLoopFindMomentumShifts.m | 6 +- .../FCLoopFindTopologyMappings.m | 13 +- .../LoopIntegrals/FCLoopFindMomentumShifts.m | 96 +++--- .../FCLoopFindTopologyMappings.m | 33 +- .../FCLoopFindMomentumShifts.test | 18 +- .../FCLoopFindTopologyMappings.test | 240 ++++++-------- 7 files changed, 184 insertions(+), 525 deletions(-) delete mode 100644 FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md b/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md deleted file mode 100644 index ccc6727a..00000000 --- a/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md +++ /dev/null @@ -1,303 +0,0 @@ -## FCLoopFindTopologyMappings - -`FCLoopFindTopologyMappings[{topo1, topo2, ...}]` finds mappings between topologies (written as `FCTopology` objects) `topo1, topo2, ...`. For each source topology the function returns a list of loop momentum shifts and a `GLI` replacement rule needed to map it to the given target topology. If you need to map everything to a particular set of target topologies, you can specify them via the `PreferredTopologies` option. - -The output is a list of two lists, the former containing the mappings and the latter enumerating the final contributing topologies - -To enable shifts in the external momenta you need to set the option `Momentum` to `All`. - -### See also - -[Overview](Extra/FeynCalc.md), [FCTopology](FCTopology.md), [GLI](GLI.md), [FCLoopFindTopologies](FCLoopFindTopologies.md). - -### Examples - -Here we have a set of 5 topologies - -```mathematica -topos1 = { - FCTopology[fctopology1, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], - SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], - FCTopology[fctopology2, {SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], - SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], - FCTopology[fctopology3, {SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], - SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, - {p1, p2, p3}, {Q}, {}, {}], - FCTopology[fctopology4, {SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], - SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], - SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, - {p1, p2, p3}, {Q}, {}, {}], - FCTopology[fctopology5, {SFAD[{{p3, 0}, {0, 1}, 1}], - SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], - SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], - SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, - {p1, p2, p3}, {Q}, {}, {}]}; -``` - -3 of them can be mapped to the other two - -```mathematica -mappings1 = FCLoopFindTopologyMappings[topos1]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }3\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ - -```mathematica -mappings1[[1]] -``` - -$$\left( -\begin{array}{ccc} - \;\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to -\text{p1}-\text{p3}+Q,\text{p2}\to -\text{p2}-\text{p3}+Q,\text{p3}\to \;\text{p3}\} & G^{\text{fctopology3}}(\text{n1$\_$},\text{n7$\_$},\text{n8$\_$},\text{n5$\_$},\text{n6$\_$},\text{n4$\_$},\text{n2$\_$},\text{n3$\_$},\text{n9$\_$}):\to G^{\text{fctopology1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ - \;\text{FCTopology}\left(\text{fctopology4},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to Q-\text{p2},\text{p2}\to Q-\text{p1},\text{p3}\to -\text{p3}\} & G^{\text{fctopology4}}(\text{n1$\_$},\text{n6$\_$},\text{n5$\_$},\text{n8$\_$},\text{n7$\_$},\text{n3$\_$},\text{n2$\_$},\text{n4$\_$},\text{n9$\_$}):\to G^{\text{fctopology1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ - \;\text{FCTopology}\left(\text{fctopology5},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to \;\text{p2},\text{p2}\to \;\text{p1},\text{p3}\to \;\text{p3}\} & G^{\text{fctopology5}}(\text{n1$\_$},\text{n3$\_$},\text{n2$\_$},\text{n4$\_$},\text{n6$\_$},\text{n5$\_$},\text{n7$\_$},\text{n8$\_$},\text{n9$\_$}):\to G^{\text{fctopology2}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ -\end{array} -\right)$$ - -And these are the final topologies - -```mathematica -mappings1[[2]] -``` - -$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)\right\}$$ - -Here is another example - -```mathematica -topos2 = {FCTopology[fctopology1, {SFAD[{{q2, 0}, {0, 1}, 1}], - SFAD[{{q1, 0}, {0, 1}, 1}], SFAD[{{q1 + q2, 0}, {0, 1}, 1}], SFAD[{{p + q1, 0}, {0, 1}, 1}], - SFAD[{{p - q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], - FCTopology[fctopology2, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1, 0}, {0, 1}, 1}], - SFAD[{{p + q2, 0}, {0, 1}, 1}], SFAD[{{p - q1, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], - FCTopology[fctopology3, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1, 0}, {0, 1}, 1}], - SFAD[{{p - q1, 0}, {0, 1}, 1}], SFAD[{{p - q1 + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}]} -``` - -$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((\text{q1}+\text{q2})^2+i \eta )},\frac{1}{((p+\text{q1})^2+i \eta )},\frac{1}{((p-\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p+\text{q2})^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )},\frac{1}{((p-\text{q1}+\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ - -Yet this time we have some preferred set of topologies and want to match to them (if possible) - -```mathematica -preferredTopos2 = {FCTopology[prop2L, {SFAD[{{q1, 0}, {0, 1}, 1}], - SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], SFAD[{{-p + q1, 0}, {0, 1}, 1}], - SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], - FCTopology[prop2LX1, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], - SFAD[{{-p + q1, 0}, {0, 1}, 1}], SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], - FCTopology[prop2LX3, {SFAD[{{q1, 0}, {0, 1}, 1}], SFAD[{{q2, 0}, {0, 1}, 1}], - SFAD[{{-p + q1, 0}, {0, 1}, 1}], SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], - FCTopology[prop2LX15, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], - SFAD[{{-p + q1, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}]} -``` - -$$\left\{\text{FCTopology}\left(\text{prop2L},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX3},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX15},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ - -```mathematica -mappings2 = FCLoopFindTopologyMappings[topos2, PreferredTopologies -> preferredTopos2]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }3\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }3$$ - -```mathematica -mappings2[[1]] -``` - -$$\left( -\begin{array}{ccc} - \;\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((\text{q1}+\text{q2})^2+i \eta )},\frac{1}{((p+\text{q1})^2+i \eta )},\frac{1}{((p-\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to -\text{q2},\text{q2}\to \;\text{q1}\} & G^{\text{fctopology1}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n5$\_$},\text{n4$\_$}):\to G^{\text{prop2L}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5}) \\ - \;\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p+\text{q2})^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to \;\text{q2},\text{q2}\to -\text{q1}\} & G^{\text{fctopology2}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n4$\_$}):\to G^{\text{prop2LX3}}(\text{n1},\text{n2},\text{n3},\text{n4}) \\ - \;\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )},\frac{1}{((p-\text{q1}+\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to \;\text{q2},\text{q2}\to \;\text{q2}-\text{q1}\} & G^{\text{fctopology3}}(\text{n2$\_$},\text{n1$\_$},\text{n4$\_$},\text{n3$\_$}):\to G^{\text{prop2LX1}}(\text{n1},\text{n2},\text{n3},\text{n4}) \\ -\end{array} -\right)$$ - -And these are the final occurring topologies - -```mathematica -mappings2[[2]] -``` - -$$\left\{\text{FCTopology}\left(\text{prop2L},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX3},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ - -If we need to match subtopologies into larger topologies, we first need to generate all possible subtopologies for each relevant topology. - -```mathematica -topos3 = { - FCTopology[fctopology1, { - SFAD[{{l1 + l2 - q1, 0}, {0, 1}, 1}], - SFAD[{{l2, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l2 + q2, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1 - q1, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1 - q1 - q2, 0}, {SMP["m_t"]^2, 1}, 1}]}, {l1, l2}, {q1, q2}, {}, {}], - FCTopology[fctopology9, { - SFAD[{{l1 + l2 + q2, 0}, {0, 1}, 1}], - SFAD[{{l2, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1 + q2, 0}, {SMP["m_t"]^2, 1}, 1}], - SFAD[{{l1 - q1, 0}, {SMP["m_t"]^2, 1}, 1}]}, {l1, l2}, {q1, q2}, {}, {}] - } -``` - -$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{l1}+\text{l2}-\text{q1})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l2}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1}-\text{q2})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology9},\left\{\frac{1}{((\text{l1}+\text{l2}+\text{q2})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l1}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right)\right\}$$ - -```mathematica -subTopos3 = Flatten[FCLoopFindSubtopologies[topos3]]; -``` - -```mathematica -subTopos3 // Length -``` - -$$37$$ - -Now we can match a smaller topology into a larger topology - -```mathematica -mappings3 = FCLoopFindTopologyMappings[topos3, PreferredTopologies -> subTopos3]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ - -```mathematica -mappings3[[1]] -``` - -$$\left( -\begin{array}{ccc} - \;\text{FCTopology}\left(\text{fctopology9},\left\{\frac{1}{((\text{l1}+\text{l2}+\text{q2})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l1}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right) & \{\text{l1}\to \;\text{q1}-\text{l1},\text{l2}\to -\text{l2}-\text{q2}\} & G^{\text{fctopology9}}(\text{n1$\_$},\text{n3$\_$},\text{n4$\_$},\text{n5$\_$},\text{n2$\_$}):\to G^{\text{fctopology1}}(\text{n1},0,\text{n2},\text{n3},\text{n4},\text{n5}) \\ -\end{array} -\right)$$ - -```mathematica -mappings3[[2]] -``` - -$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{l1}+\text{l2}-\text{q1})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l2}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1}-\text{q2})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right)\right\}$$ - -Mapping the following two topologies onto each other requires shifts in the external momenta due to the chosen kinematic constraints. - -```mathematica -topos4 = { - FCTopology[topo1, { - SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l1 - l2, 0}, {0, 1}, 1}], - SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], - SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}], - FCTopology[topo2, { - SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], - SFAD[{{l1 - q2, 0}, {0, 1}, 1}], - SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], - SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], - SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}]} -``` - -$$\left\{\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{((\text{l1}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{l2})^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right),\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)\right\}$$ - -```mathematica -mappings4 = FCLoopFindTopologyMappings[topos4, Momentum -> All]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ - -```mathematica -mappings4[[1]] -``` - -$$\left( -\begin{array}{ccc} - \;\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right) & \{\text{l1}\to -\text{l1}+\text{l2}-\text{q1},\text{l2}\to \;\text{l2},\text{q1}\to -\text{q2},\text{q2}\to -\text{q1}\} & G^{\text{topo2}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n4$\_$},\text{n5$\_$}):\to G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5}) \\ -\end{array} -\right)$$ - -Otherwise no mappings exist - -```mathematica -FCLoopFindTopologyMappings[topos4][[1]] -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ - -$$\{\}$$ - -Topologies containing eikonal or other nonstandard propagators may introduce additional challenges. -Even though two such topologies can be recognized to be identical, the code still would not be able to -work out the correct momentum shifts without some additional input. - -```mathematica -topoEik1 = FCTopology[mytopo67, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], - SFAD[{{k1 + k2, 0}, {0, 1}, 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}], - SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, - {0, 1}, 1}], SFAD[{{k1, -2 gkin meta k1 . n + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}]}, - {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]; -``` - -```mathematica -topoEik2 = FCTopology[mytopo79, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], - SFAD[{{0, k1 . nb}, {0, 1}, 1}], SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], - SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, 1}], SFAD[{{k1, - 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}], - SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n - meta u0b (k1 + k2) . nb}, - {2 gkin meta^2 u0b^2, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, - Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]; -``` - -```mathematica -DataType[meta, FCVariable] = True; -DataType[u0b, FCVariable] = True; -``` - -At first sight these two topologies are independent from each other - -```mathematica -FCLoopFindTopologyMappings[{topoEik1, topoEik2}]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ - -However, if we tell the code how some eikonal propagators can be brought into a quadratic form, -then an explicit mapping can be found - -```mathematica -eikRule = {SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}] -> SFAD[k2 - meta u0b/2 nb]} -``` - -$$\left\{\frac{1}{(\text{k2}^2-\text{meta} \;\text{u0b} (\text{k2}\cdot \;\text{nb})+i \eta )}\to \frac{1}{((\text{k2}-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )}\right\}$$ - -```mathematica -eikMappings = FCLoopFindTopologyMappings[{topoEik1, topoEik2}, - InitialSubstitutions -> eikRule]; -``` - -$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ - -$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ - -```mathematica -eikMappings[[1]][[1]][[2 ;;]] -``` - -$$\left\{\left\{\text{k1}\to -\text{k1},\text{k2}\to \frac{1}{2} (\text{meta} \;\text{nb} \;\text{u0b}-2 \;\text{k2})\right\},G^{\text{mytopo79}}(\text{n5$\_$},\text{n2$\_$},\text{n4$\_$},\text{n1$\_$},\text{n3$\_$},\text{n7$\_$},\text{n6$\_$}):\to G^{\text{mytopo67}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7})\right\}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m index ee31ba75..fe681c31 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindMomentumShifts.m @@ -17,13 +17,11 @@ (* ::Text:: *) -(*For topologies involving kinematic constraints some mappings may require shifts not only in the loop but also in the external*) -(*momenta. Such shifts are disabled by default but can be activated by setting the option `Momentum` to `All`.*) +(*For topologies involving kinematic constraints some mappings may require shifts not only in the loop but also in the external momenta. Such shifts are disabled by default but can be activated by setting the option `Momentum` to `All`. This option can be dangerous, because the amplitude does not necessarily have to be symmetric under shifts of external momenta!*) (* ::Text:: *) -(*Normally, `FCLoopFindMomentumShifts` will abort the evaluation if it fails to find any suitable shifts. Setting the option*) -(*`Abort` to `False` will force the function to merely return an empty list in such situations.*) +(*Normally, `FCLoopFindMomentumShifts` will abort the evaluation if it fails to find any suitable shifts. Setting the option `Abort` to `False` will force the function to merely return an empty list in such situations.*) (* ::Subsection:: *) diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologyMappings.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologyMappings.m index f4f3f0c7..b656dcf2 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologyMappings.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FCLoopFindTopologyMappings.m @@ -217,6 +217,7 @@ Hold[SPD][nb]->0,Hold[SPD][n,nb]->2},{}]; +DataType[gkin,FCVariable]=True; DataType[meta,FCVariable]=True; DataType[u0b,FCVariable]=True; @@ -233,11 +234,15 @@ (*then an explicit mapping can be found*) -eikRule={SFAD[{{k2,-meta u0b k2 . nb},{0,1},1}]->SFAD[k2-meta u0b/2 nb]} +toposNew=FCLoopReplaceQuadraticEikonalPropagators[{topoEik1,topoEik2}, +LoopMomenta->{k1,k2}, +InitialSubstitutions->{ +ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]}, +IntermediateSubstitutions->{SPD[n]->0,SPD[nb]->0,SPD[n,nb]->2}]; -eikMappings=FCLoopFindTopologyMappings[{topoEik1,topoEik2}, -InitialSubstitutions->eikRule]; +eikMappings=FCLoopFindTopologyMappings[toposNew]; + -eikMappings[[1]][[1]][[2;;]] diff --git a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m index d2f201f4..355f7db8 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m @@ -53,8 +53,6 @@ Begin["`FCLoopFindMomentumShifts`Private`"] fcflsVerbose::usage = ""; -optMomentum::usage = ""; -optAbort::usage = ""; Options[FCLoopFindMomentumShifts] = { Abort -> True, @@ -67,7 +65,7 @@ }; FCLoopFindMomentumShifts[fromRaw:{__FCTopology}, toRaw_FCTopology/;!OptionQ[toRaw], opts:OptionsPattern[]] := - Block[{from,to,optKinematics}, + Block[{from,to,optKinematics,optMomentum}, optKinematics = {#[[5]]&/@fromRaw, toRaw[[5]]}; @@ -100,7 +98,7 @@ FCLoopFindMomentumShifts[fromRaw_List/;FreeQ[fromRaw,FCTopology], toRaw_/;FreeQ[toRaw,FCTopology], lmoms_List, OptionsPattern[]] := - Block[ {from, to, res, time, shifts, optInitialSubstitutions, optKinematics, optTopologyNames}, + Block[ {from, to, res, time, shifts, optInitialSubstitutions, optKinematics, optTopologyNames, optMomentum}, If[ OptionValue[FCVerbose] === False, fcflsVerbose = $VeryVerbose, @@ -137,9 +135,6 @@ Abort[] ]; - optAbort = OptionValue[Abort]; - - FCPrint[3, "FCLoopFindMomentumShifts: List of source topologies: ", from, FCDoControl -> fcflsVerbose]; FCPrint[3, "FCLoopFindMomentumShifts: Target topology: ", to, FCDoControl -> fcflsVerbose]; FCPrint[2, "FCLoopFindMomentumShifts: Allowing kinematic shifts for the following external momenta: ", optMomentum, FCDoControl -> fcflsVerbose]; @@ -164,7 +159,8 @@ time=AbsoluteTime[]; FCPrint[1, "FCLoopFindMomentumShifts: Finding loop momentum shifts.", FCDoControl -> fcflsVerbose]; - shifts = MapThread[findShifts[#1,to,lmoms,#2,optKinematics[[2]],#3,optTopologyNames[[2]]]&,{from, optKinematics[[1]], optTopologyNames[[1]]}]; + shifts = MapThread[findShiftsBranching[#1,to,lmoms,#2,optKinematics[[2]],#3,optTopologyNames[[2]],optMomentum, OptionValue[Abort]]&, + {from, optKinematics[[1]], optTopologyNames[[1]]}]; FCPrint[1, "FCLoopFindMomentumShifts: Done finding loop momentum shifts, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcflsVerbose]; @@ -175,7 +171,21 @@ ]; -findShifts[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List, topoNamesFrom_, topoNamesTo_]:= +findShiftsBranching[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List, topoNamesFrom_, topoNamesTo_, momentumOpt_, abortOpt_]:= + findShifts[from,to, lmomsRaw, fromKininematis, toKinematics, topoNamesFrom, topoNamesTo, momentumOpt, False, abortOpt]/; momentumOpt==={}; + +findShiftsBranching[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List, topoNamesFrom_, topoNamesTo_, momentumOpt_, abortOpt_]:= + Block[{tmp}, + (*First try to find shifts that don't involve changing external momenta *) + tmp = findShifts[from,to, lmomsRaw, fromKininematis, toKinematics, topoNamesFrom, topoNamesTo, {}, True, False]; + (*If there are no such shifts, allow for shifts in external momenta *) + If[tmp==={}, + tmp = findShifts[from,to, lmomsRaw, fromKininematis, toKinematics, topoNamesFrom, topoNamesTo, momentumOpt, False, abortOpt] + ]; + tmp + ]/; momentumOpt=!={}; + +findShifts[from:{__FeynAmpDenominator},to:{__FeynAmpDenominator}, lmomsRaw_List, fromKininematis_List, toKinematics_List, topoNamesFrom_, topoNamesTo_, momentumOpt_, suppressFailures_, abortOpt_]:= Block[{lhs, rhs, eq, mark, vars, sol, res, lmoms, allmoms, extmoms, tmp, auxFrom, auxTo, mixedProps, rule}, {lhs, rhs} = {from, to} /. { @@ -206,13 +216,15 @@ FCDoControl -> fcflsVerbose]; ]; - If[ tmp==={}, - Message[FCLoopFindMomentumShifts::shifts]; - FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> - ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> " due to the presence of nonquadratic propagators.", {Darker[Yellow,0.55], Bold}], - FCDoControl -> fcflsVerbose]; - - If[optAbort, + If[ tmp==={} && !suppressFailures, + If[ !suppressFailures, + Message[FCLoopFindMomentumShifts::shifts]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> + ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> + ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; + ]; + If[ abortOpt, Abort[], Return[{}] ] @@ -230,7 +242,7 @@ ]; lmoms = Select[lmomsRaw,!FreeQ[lhs,#]&]; - extmoms = Select[optMomentum,!FreeQ[lhs,#]&]; + extmoms = Select[momentumOpt,!FreeQ[lhs,#]&]; allmoms = Join[lmoms,extmoms]; vars = mark/@(allmoms); lhs = lhs /. Thread[Rule[allmoms,vars]]; @@ -239,21 +251,20 @@ FCPrint[3, "FCLoopFindMomentumShifts: Final rhs: ", rhs, FCDoControl -> fcflsVerbose]; FCPrint[3, "FCLoopFindMomentumShifts: Variables to solve for: ", vars, FCDoControl -> fcflsVerbose]; - - eq = Thread[Equal[lhs^2,rhs^2]]; - sol = Solve[eq,vars]; FCPrint[3, "FCLoopFindMomentumShifts: Possible shifts: ", sol, FCDoControl -> fcflsVerbose]; If[ sol==={}, - Message[FCLoopFindMomentumShifts::shifts]; - FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> - ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> - ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], - FCDoControl -> fcflsVerbose]; - If[optAbort, + If[ !suppressFailures, + Message[FCLoopFindMomentumShifts::shifts]; + FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> + ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> + ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], + FCDoControl -> fcflsVerbose]; + ]; + If[ abortOpt, Abort[], Return[{}] ] @@ -261,9 +272,7 @@ (*We need to pick a solution that doesn't mix external momenta into loop momenta*) - - - If[ optMomentum=!={}, + If[ momentumOpt=!={}, sol = Map[ If[FreeQ2[(mark/@extmoms)/.#, lmoms], #, Unevaluated[Sequence[]] @@ -271,16 +280,17 @@ ]; FCPrint[3, "FCLoopFindMomentumShifts: Remaining shifts: ", sol, FCDoControl -> fcflsVerbose], - If[ sol==={}, + If[ sol==={}, + If[ !suppressFailures, Message[FCLoopFindMomentumShifts::shifts]; - If[ optAbort, - Abort[], - Return[{}] - ] ]; - + If[ abortOpt, + Abort[], + Return[{}] + ] ]; + ]; (* @@ -298,21 +308,27 @@ FCPrint[3, "FCLoopFindMomentumShifts: Valid shifts: ", sol, FCDoControl -> fcflsVerbose]; - (*Remove trivial rules of the type k1->k1*) - sol = sol /. Rule->rule/. rule[a_,a_]:> Unevaluated[Sequence[]]/.rule->Rule; - - If[ sol==={}, + If[ sol==={} && !suppressFailures, Message[FCLoopFindMomentumShifts::shifts]; FCPrint[0, "FCLoopFindMomentumShifts: ", FCStyle["Failed to derive the momentum shifts between topologies " <> ToString[topoNamesFrom] <> " and " <> ToString[topoNamesTo] <> ". This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.", {Darker[Yellow,0.55], Bold}], FCDoControl -> fcflsVerbose]; - If[optAbort, + If[abortOpt, Abort[], Return[{}] ] ]; + (* + Remove trivial rules of the type k1->k1. However, if the solution contains only such + shifts (identical topologies), keep it. + *) + sol = Map[(tmp=#/. Rule->rule/. rule[a_,a_]:> Unevaluated[Sequence[]]/.rule->Rule; + If[tmp==={}, + #, + tmp])&, sol]; + res = First[SortBy[sol, {Length, LeafCount}]]; res diff --git a/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m b/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m index 78f0560a..a56c15c1 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindTopologyMappings.m @@ -41,17 +41,19 @@ fclftpVerbose::usage = ""; optMomentum::usage = ""; optInitialSubstitutions::usage = ""; +optFCVerboseFCLoopFindMomentumShifts::usage = ""; Options[FCLoopFindTopologyMappings] = { - FCE -> False, - FCI -> False, - FCVerbose -> False, - FinalSubstitutions -> {}, - InitialSubstitutions -> {}, - LightPak -> False, - Momentum -> {}, - PreferredTopologies -> {}, - SubtopologyMarker -> FCGV["SubtopologyOf"] + FCE -> False, + FCI -> False, + FCVerbose -> False, + "FCVerboseFCLoopFindMomentumShifts" -> False, + FinalSubstitutions -> {}, + InitialSubstitutions -> {}, + LightPak -> False, + Momentum -> {}, + PreferredTopologies -> {}, + SubtopologyMarker -> FCGV["SubtopologyOf"] }; FCLoopFindTopologyMappings[toposRaw:{__FCTopology}, OptionsPattern[]] := @@ -66,11 +68,12 @@ fclftpVerbose = OptionValue[FCVerbose]]; ]; - optPreferredTopologies = OptionValue[PreferredTopologies]; - optFinalSubstitutions = OptionValue[FinalSubstitutions]; - optSubtopologyMarker = OptionValue[SubtopologyMarker]; - optInitialSubstitutions = OptionValue[InitialSubstitutions]; - optMomentum = OptionValue[Momentum]; + optPreferredTopologies = OptionValue[PreferredTopologies]; + optFinalSubstitutions = OptionValue[FinalSubstitutions]; + optSubtopologyMarker = OptionValue[SubtopologyMarker]; + optInitialSubstitutions = OptionValue[InitialSubstitutions]; + optMomentum = OptionValue[Momentum]; + optFCVerboseFCLoopFindMomentumShifts = OptionValue["FCVerboseFCLoopFindMomentumShifts"]; FCPrint[1, "FCLoopFindTopologyMappings: Entering.", FCDoControl -> fclftpVerbose]; FCPrint[3, "FCLoopFindTopologyMappings: Entering with: ", toposRaw, FCDoControl -> fclftpVerbose]; @@ -228,7 +231,7 @@ (*Some shifts cannot be found unless shifts of external momenta are explicitly allowed!*) shifts = Quiet[FCLoopFindMomentumShifts[Last/@source, Last[target], {Momentum->optMomentum,Abort->False, InitialSubstitutions-> - optInitialSubstitutions}],{FCLoopFindMomentumShifts::shifts,Solve::svars}]; + optInitialSubstitutions}, FCVerbose->optFCVerboseFCLoopFindMomentumShifts],{FCLoopFindMomentumShifts::shifts,Solve::svars}]; (*TODO Redo if shitfs were found only between the preferred topologies*) If[ MatchQ[shifts,{{}..}], diff --git a/Tests/LoopIntegrals/FCLoopFindMomentumShifts.test b/Tests/LoopIntegrals/FCLoopFindMomentumShifts.test index 848f78de..dcd9c1f9 100644 --- a/Tests/LoopIntegrals/FCLoopFindMomentumShifts.test +++ b/Tests/LoopIntegrals/FCLoopFindMomentumShifts.test @@ -19,17 +19,17 @@ Tests`LoopIntegrals`fcstFCLoopFindMomentumShifts = "FCLoopFindMomentumShifts[{{FAD[p4],FAD[p1],FAD[p1-p3-p4],FAD[{p1-\ p4,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[p1+q1]}},{FAD[p4],FAD[p1+p4+q1],\ FAD[p1-p3+q1],FAD[{p1+q1,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[p1+p4+2 \ -q1]},{p1,p3,p4}]", "{{p1 -> p1 + p4 + q1, p3 -> p3, p4 -> p4}}"}, +q1]},{p1,p3,p4}]", "{{p1 -> p1 + p4 + q1}}"}, {"fcstfcstFCLoopFindMomentumShifts-ID2", "FCLoopFindMomentumShifts[{{FAD[r4],FAD[p1],FAD[p1-p3-r4],FAD[{p1-\ r4,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[p1+q1]}},{FAD[p4],FAD[p1+p4+q1],\ FAD[p1-p3+q1],FAD[{p1+q1,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[p1+p4+2 \ -q1]},{p1,p3,p4,r4}]", "{{p1 -> p1 + p4 + q1, p3 -> p3, r4 -> p4}}"}, +q1]},{p1,p3,p4,r4}]", "{{p1 -> p1 + p4 + q1, r4 -> p4}}"}, {"fcstfcstFCLoopFindMomentumShifts-ID3", "FCLoopFindMomentumShifts[{{FAD[r4],FAD[r1],FAD[r1-p3-r4],FAD[{r1-\ r4,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[r1+q1]}},{FAD[p4],FAD[p1+p4+q1],\ FAD[p1-p3+q1],FAD[{p1+q1,m1}],FAD[{p3,m1}],FAD[p3+q1],FAD[p1+p4+2 \ -q1]},{p1,p3,p4,r4,r1}]", "{{p3 -> p3, r4 -> p4, r1 -> p1 + p4 + q1}}"}, +q1]},{p1,p3,p4,r4,r1}]", "{{r4 -> p4, r1 -> p1 + p4 + q1}}"}, {"fcstfcstFCLoopFindMomentumShifts-ID4", "FCLoopFindMomentumShifts[{FCTopology[fctopology3,{SFAD[{{p1,0},{0,\ 1},1}],SFAD[{{p3,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}],SFAD[{{\ @@ -44,8 +44,8 @@ p3-Q,0},{0,1},1}],SFAD[{{p3,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}\ ],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},\ 1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2+p3-Q,\ 0},{0,1},1}]},{p1,p2,p3},{Q},{},{}]]", -"{{p1 -> -p1 - p3 + Q, p2 -> -p2 - p3 + Q, p3 -> p3}, {p1 -> -p2 + \ -Q, p2 -> -p1 + Q, p3 -> -p3}}"}, +"{{p1 -> -p1 - p3 + Q, p2 -> -p2 - p3 + Q}, +{p1 -> -p2 + Q, p2 -> -p1 + Q, p3 -> -p3}}"}, {"fcstfcstFCLoopFindMomentumShifts-ID5", "FCLoopFindMomentumShifts[{FCTopology[fctopology2,{SFAD[{{p3,0},{0,\ 1},1}],SFAD[{{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}],\ @@ -56,7 +56,7 @@ SFAD[{{p2,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},\ SFAD[{{p1,0},{0,1},1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},\ 1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{p2,0},\ {0,1},1}]},{p1,p2,p3},{Q},{},{}]]", -"{{p1 -> p2, p2 -> p1, p3 -> p3}}"}, +"{{p1 -> p2, p2 -> p1}}"}, {"fcstfcstFCLoopFindMomentumShifts-ID6", "FCLoopFindMomentumShifts[{FCTopology[fctopology1,{SFAD[{{q1+q2,0},\ {0,1},1}],SFAD[{{q2,0},{0,1},1}],SFAD[{{p-q2,0},{0,1},1}],SFAD[{{q1,0}\ @@ -87,7 +87,7 @@ FeynAmpDenominator[ l2,0},{0,1},1}],SFAD[{{l1,0},{m^2,1},1}],SFAD[{{0,l1.q2},{0,1},1}]},{\ l1,l2},{q2},{},{}]},FCTopology[fctopology4newR1456,{SFAD[{{l2+q2,0},{\ 0,1},1}],SFAD[{{l1,0},{m^2,1},1}],SFAD[{{0,l1.q2},{0,1},1}]},{l1,l2},{\ -q2},{},{}]]", "{{l1 -> l1, l2 -> -l2 - q2}}"}, +q2},{},{}]]", "{{l2 -> l2 + q2}}"}, {"fcstFCLoopFindMomentumShifts-ID9", "FCLoopFindMomentumShifts[{FCTopology[topo1, {SFAD[{{l1 + q1, 0}, \ {m^2, 1}, 1}], SFAD[{{l1 - l2, 0}, {0, 1}, 1}], SFAD[{{l2 + q1, 0}, \ @@ -100,7 +100,7 @@ q2, 0}, {0, 1}, 1}], SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], SFAD[{{l2 + \ q1, 0}, {m^2, 1}, 1}], SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, \ q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}],Momentum->All]", -"{{l1 -> l1 - l2 - q2, l2 -> -l2, q1 -> q2, q2 -> q1}}"}, +"{{l1 -> -l1 + l2 + q2, q1 -> -q2, q2 -> -q1}}"}, {"fcstFCLoopFindMomentumShifts-ID10", "Quiet[FCLoopFindMomentumShifts[{FCTopology[topo1, {SFAD[{{l1 + \ q1, 0}, {m^2, 1}, 1}], SFAD[{{l1 - l2, 0}, {0, 1}, 1}], SFAD[{{l2 + \ @@ -119,7 +119,7 @@ SFAD[{{l1, l1 . np + l1 . nm}}]}}, {SFAD[l1], SFAD[{{l1, -l1 . np - l1 . nm}}]}, {l1}]", "{{l1 -> -l1}}"}, {"fcstFCLoopFindMomentumShifts-ID12", -"DataType[meta, FCVariable] = True; \n DataType[u0b, FCVariable] = True; \n +"DataType[gkin, FCVariable] = True; \n DataType[meta, FCVariable] = True; \n DataType[u0b, FCVariable] = True; \n FCLoopFindMomentumShifts[{{SFAD[{{k1, 2*gkin*meta*k1 . n - meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], SFAD[{{k1 + k2, 2*gkin*meta*u0b*(k1 + k2) . n - meta*u0b*(k1 + k2) . nb}, {2*gkin*meta^2*u0b^2, 1}, 1}], diff --git a/Tests/LoopIntegrals/FCLoopFindTopologyMappings.test b/Tests/LoopIntegrals/FCLoopFindTopologyMappings.test index 3111639c..0e680ffa 100644 --- a/Tests/LoopIntegrals/FCLoopFindTopologyMappings.test +++ b/Tests/LoopIntegrals/FCLoopFindTopologyMappings.test @@ -81,99 +81,30 @@ fctopology28,{SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p1-\ Q,0},{m1^2,1},1}]},{p1,p2},{Q},{},{}],FCTopology[fctopology29,{SFAD[{{\ p1,0},{0,1},1}],SFAD[{{p2,0},{m1^2,1},1}],SFAD[{{p1,0},{m1^2,1},1}]},{\ p1,p2},{Q},{},{}]},FCE->True]", -"{{{FCTopology[fctopology4, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], \ -SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, \ -1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p2, p2 -> -p1}, \ -GLI[fctopology4, {n3_, n2_, n1_, n5_, n4_}] :> GLI[fctopology1, {n1, \ -n2, n3, n4, n5}]}, {FCTopology[fctopology14, {SFAD[{{p2, 0}, {m1^2, \ -1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {0, \ -1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -{p1 -> -p1 + Q, p2 -> p2}, GLI[fctopology14, {n2_, n4_, n1_, n3_}] :> \ -GLI[fctopology10, {n1, n2, n3, n4}]}, {FCTopology[fctopology19, \ -{SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 \ -- p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, \ -p2}, {Q}, {}, {}], {p1 -> -p1 + Q, p2 -> p2}, GLI[fctopology19, {n4_, \ -n2_, n1_, n3_}] :> GLI[fctopology11, {n1, n2, n3, n4}]}, \ -{FCTopology[fctopology9, {SFAD[{{p1 + Q, 0}, {0, 1}, 1}], SFAD[{{p1 + \ -p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, \ -{m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1, p2 -> -p2}, \ -GLI[fctopology9, {n4_, n1_, n2_, n3_}] :> GLI[fctopology11, {n1, n2, \ -n3, n4}]}, {FCTopology[fctopology7, {SFAD[{{p2 + Q, 0}, {0, 1}, 1}], \ -SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> \ --p2, p2 -> -p1}, GLI[fctopology7, {n3_, n2_, n1_, n4_}] :> \ -GLI[fctopology15, {n1, n2, n3, n4}]}, {FCTopology[fctopology20, \ -{SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 \ -- Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {m1^2, 1}, 1}]}, \ -{p1, p2}, {Q}, {}, {}], {p1 -> -p1 + Q, p2 -> p2}, GLI[fctopology20, \ -{n3_, n1_, n2_, n4_}] :> GLI[fctopology16, {n1, n2, n3, n4}]}, \ -{FCTopology[fctopology21, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, \ -0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1, p2 -> -p2}, \ -GLI[fctopology21, {n1_, n2_, n4_, n3_}] :> GLI[fctopology18, {n1, n2, \ -n3, n4}]}, {FCTopology[fctopology26, {SFAD[{{p2, 0}, {0, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, \ -{p1, p2}, {Q}, {}, {}], {p1 -> -p1, p2 -> -p2}, GLI[fctopology26, \ -{n1_, n2_, n3_}] :> GLI[fctopology25, {n1, n2, n3}]}, \ -{FCTopology[fctopology28, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, \ -{0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, \ -{}], {p1 -> -p1 + Q, p2 -> -p2}, GLI[fctopology28, {n1_, n3_, n2_}] :> \ -GLI[fctopology27, {n1, n2, n3}]}}, {FCTopology[fctopology1, \ -{SFAD[{{p1 + Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology10, {SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, \ -0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, \ -{m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology11, \ -{SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, {p1, \ -p2}, {Q}, {}, {}], FCTopology[fctopology12, {SFAD[{{p1 + p2, 0}, {0, \ -1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, \ -1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology13, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, \ -0}, {m1^2, 1}, 1}], SFAD[{{p2 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, \ -0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology15, \ -{SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + Q, 0}, {m1^2, 1}, 1}]}, \ -{p1, p2}, {Q}, {}, {}], FCTopology[fctopology16, {SFAD[{{p2, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, \ -1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology17, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, \ -0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - \ -Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology18, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, \ -0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology2, \ -{SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology22, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, \ -0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2 + Q, 0}, {m1^2, 1}, 1}]}, {p1, \ -p2}, {Q}, {}, {}], FCTopology[fctopology23, {SFAD[{{p2, 0}, {m1^2, \ -1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2 + Q, 0}, {0, \ -1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology24, \ -{SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 \ -+ p2 + Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology25, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, \ -{}, {}], FCTopology[fctopology27, {SFAD[{{p2, 0}, {0, 1}, 1}], \ -SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, {p1, \ -p2}, {Q}, {}, {}], FCTopology[fctopology29, {SFAD[{{p1, 0}, {0, 1}, \ -1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}]}, \ -{p1, p2}, {Q}, {}, {}], FCTopology[fctopology3, {SFAD[{{p2, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, \ -0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology5, \ -{SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1 - p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], \ -FCTopology[fctopology6, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1 + Q, \ -0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, \ -{m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, \ -{}, {}], FCTopology[fctopology8, {SFAD[{{p2 + Q, 0}, {0, 1}, 1}], \ -SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}]}}"}, +"{{{FCTopology[fctopology4, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p2, p2 -> -p1}, GLI[fctopology4, {n3_, n2_, n1_, n5_, n4_}] :> GLI[fctopology1, {n1, n2, n3, n4, n5}]}, +{FCTopology[fctopology14, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1 + Q}, GLI[fctopology14, {n2_, n4_, n1_, n3_}] :> GLI[fctopology10, {n1, n2, n3, n4}]}, +{FCTopology[fctopology19, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1 + Q}, GLI[fctopology19, {n4_, n2_, n1_, n3_}] :> GLI[fctopology11, {n1, n2, n3, n4}]}, +{FCTopology[fctopology9, {SFAD[{{p1 + Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1, p2 -> -p2}, GLI[fctopology9, {n4_, n1_, n2_, n3_}] :> GLI[fctopology11, {n1, n2, n3, n4}]}, +{FCTopology[fctopology7, {SFAD[{{p2 + Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p2, p2 -> -p1}, GLI[fctopology7, {n3_, n2_, n1_, n4_}] :> GLI[fctopology15, {n1, n2, n3, n4}]}, +{FCTopology[fctopology20, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1 + Q}, GLI[fctopology20, {n3_, n1_, n2_, n4_}] :> GLI[fctopology16, {n1, n2, n3, n4}]}, +{FCTopology[fctopology21, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1, p2 -> -p2}, GLI[fctopology21, {n1_, n2_, n4_, n3_}] :> GLI[fctopology18, {n1, n2, n3, n4}]}, +{FCTopology[fctopology26, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1}, GLI[fctopology26, {n1_, n2_, n3_}] :> GLI[fctopology25, {n1, n2, n3}]}, +{FCTopology[fctopology28, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], {p1 -> -p1 + Q}, GLI[fctopology28, {n1_, n3_, n2_}] :> GLI[fctopology27, {n1, n2, n3}]}}, +{FCTopology[fctopology1, {SFAD[{{p1 + Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology10, {SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology11, {SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, +{p1, p2}, {Q}, {}, {}], FCTopology[fctopology12, {SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology13, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p2 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology15, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology16, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, +{p1, p2}, {Q}, {}, {}], FCTopology[fctopology17, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology18, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology2, {SFAD[{{p1 + p2, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology22, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2 + Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology23, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2 + Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology24, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2 + Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology25, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology27, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], FCTopology[fctopology29, {SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology3, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology5, {SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology6, {SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1 + Q, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 + p2, 0}, {m1^2, 1}, 1}], SFAD[{{p2 - Q, 0}, {m1^2, 1}, 1}]}, {p1, p2}, {Q}, {}, {}], +FCTopology[fctopology8, {SFAD[{{p2 + Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {m1^2, 1}, 1}], SFAD[{{p1, 0}, {m1^2, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}]}, {p1, p2}, {Q}, {}, {}]}}"}, {"fcstFCLoopFindTopologyMappings-ID9", "FCLoopFindTopologyMappings[{FCTopology[fctopology1,{SFAD[{{q1,0},{\ 0,1},1}],SFAD[{{q2,0},{0,1},1}],SFAD[{{p+q1,0},{0,1},1}],SFAD[{{p-q2,\ @@ -214,40 +145,16 @@ p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},\ ,{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{\ p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},\ {0,1},1}]},{p1,p2,p3},{Q},{},{}]},FCE->True]", -"{{{FCTopology[fctopology3, {SFAD[{{p3, 0}, {0, 1}, 1}], \ -SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + \ -p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, \ -0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 \ -- Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, \ -p2, p3}, {Q}, {}, {}], {p1 -> -p1 - p3 + Q, p2 -> -p2 - p3 + Q, p3 -> \ -p3}, GLI[fctopology3, {n1_, n7_, n8_, n5_, n6_, n4_, n2_, n3_, n9_}] :> \ -GLI[fctopology1, {n1, n2, n3, n4, n5, n6, n7, n8, n9}]}, \ -{FCTopology[fctopology4, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, \ -{0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, \ -1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], \ -SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, \ -{}], {p1 -> -p2 + Q, p2 -> -p1 + Q, p3 -> -p3}, GLI[fctopology4, \ -{n1_, n6_, n5_, n8_, n7_, n3_, n2_, n4_, n9_}] :> GLI[fctopology1, \ -{n1, n2, n3, n4, n5, n6, n7, n8, n9}]}, {FCTopology[fctopology5, \ -{SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, \ -0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, \ -{0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, \ -{0, 1}, 1}], SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 \ -- Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], {p1 -> p2, p2 -> \ -p1, p3 -> p3}, GLI[fctopology5, {n1_, n3_, n2_, n4_, n6_, n5_, n7_, \ -n8_, n9_}] :> GLI[fctopology2, {n1, n2, n3, n4, n5, n6, n7, n8, \ -n9}]}}, {FCTopology[fctopology1, {SFAD[{{p3, 0}, {0, 1}, 1}], \ -SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + \ -p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, \ -0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 \ -- Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, \ -p2, p3}, {Q}, {}, {}], FCTopology[fctopology2, {SFAD[{{p3, 0}, {0, \ -1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], \ -SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], \ -SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], \ -SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, \ -1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}]}}"}, +"{{{FCTopology[fctopology3, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], {p1 -> -p1 - p3 + Q, p2 -> -p2 - p3 + Q}, GLI[fctopology3, {n1_, n7_, n8_, n5_, n6_, n4_, n2_, n3_, n9_}] :> + GLI[fctopology1, {n1, n2, n3, n4, n5, n6, n7, n8, n9}]}, {FCTopology[fctopology4, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], {p1 -> -p2 + Q, p2 -> -p1 + Q, p3 -> -p3}, +GLI[fctopology4, {n1_, n6_, n5_, n8_, n7_, n3_, n2_, n4_, n9_}] :> GLI[fctopology1, {n1, n2, n3, n4, n5, n6, n7, n8, n9}]}, +{FCTopology[fctopology5, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], {p1 -> p2, p2 -> p1}, GLI[fctopology5, {n1_, n3_, n2_, n4_, n6_, n5_, n7_, n8_, n9_}] :> GLI[fctopology2, {n1, n2, n3, n4, n5, n6, n7, n8, n9}]}}, +{FCTopology[fctopology1, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], FCTopology[fctopology2, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}]}}"}, {"fcstFCLoopFindTopologyMappings-ID11", "FCLoopFindTopologyMappings[{FCTopology[fctopology1,{SFAD[{{q2,0},{\ 0,1},1}],SFAD[{{q1,0},{0,1},1}],SFAD[{{q1+q2,0},{0,1},1}],SFAD[{{p+q1,\ @@ -312,17 +219,13 @@ SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, 1}, 1}]}, {l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, \ SPD[q1, q2] -> s/2}, {}]},Momentum->All,FCE->True]", -"{{{FCTopology[topo2, {SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], \ -SFAD[{{l1 - q2, 0}, {0, 1}, 1}], SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], \ -SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, \ -l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> \ -s/2}, {}], {l1 -> -l1 + l2 - q1, l2 -> l2, q1 -> -q2, q2 -> -q1}, \ -GLI[topo2, {n1_, n2_, n3_, n4_, n5_}] :> GLI[topo1, {n1, n2, n3, n4, \ -n5}]}}, {FCTopology[topo1, {SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], \ -SFAD[{{l1 - l2, 0}, {0, 1}, 1}], SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], \ -SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, \ -l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> \ -s/2}, {}]}}"}, +"{{{FCTopology[topo2, {SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], SFAD[{{l1 - q2, 0}, {0, 1}, 1}], +SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], SFAD[{{l2, 0}, {0, 1}, 1}]}, +{l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}], +{l1 -> -l1 + l2 - q1, q1 -> -q2, q2 -> -q1}, GLI[topo2, {n1_, n2_, n3_, n4_, n5_}] :> GLI[topo1, {n1, n2, n3, n4, n5}]}}, +{FCTopology[topo1, {SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], SFAD[{{l1 - l2, 0}, {0, 1}, 1}], +SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], SFAD[{{l2, 0}, {0, 1}, 1}]}, +{l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}]}}"}, {"fcstFCLoopFindTopologyMappings-ID14","FCLoopFindTopologyMappings[{FCTopology[ fctopology3, {SFAD[{{l, 0}, {mQ^2, 1}, 1}], @@ -429,16 +332,12 @@ PreferredTopologies -> {{FCTopology[ p3}, {q}, {Hold[Pair][Momentum[q, D], Momentum[q, D]] -> mb^2}, {FCGV[\"SubtopologyOf\"] -> asyR1prop2Ltopo22012X01101NAux1C}]}}, FCE -> True]", - "{{{FCTopology[asyR1prop2Ltopo22012X01101NAux1, {SFAD[{{I*p1, 0}, {0, -1}, 1}], - SFAD[{{(-I)*p3, 0}, {-mc^2, -1}, 1}], SFAD[{{I*(p1 - q), 0}, {0, -1}, 1}]}, - {p1, p3}, {q}, {Hold[Pair][Momentum[q, D], Momentum[q, D]] -> mb^2}, - {}], {p1 -> p1, p3 -> -p3},GLI[asyR1prop2Ltopo22012X01101NAux1, {n1_, n2_, n3_}] :> - GLI[asyR1prop2Ltopo22012X01101NAux1C, {n1, n2, n3, 0, 0}]}}, - {FCTopology[asyR1prop2Ltopo22012X01101NAux1C, {SFAD[{{I*p1, 0}, {0, -1}, 1}], - SFAD[{{(-I)*p3, 0}, {-mc^2, -1}, 1}], SFAD[{{I*(p1 - q), 0}, {0, -1}, 1}], - SFAD[{{0, p1 . p3}, {0, -1}, 1}], SFAD[{{0, p3 . q}, {0, -1}, 1}]}, {p1, p3}, - {q}, {Hold[Pair][Momentum[q, D], Momentum[q, D]] -> mb^2}, {}]}}"}, - + "{{{FCTopology[asyR1prop2Ltopo22012X01101NAux1, {SFAD[{{I*p1, 0}, {0, -1}, 1}], SFAD[{{(-I)*p3, 0}, + {-mc^2, -1}, 1}], SFAD[{{I*(p1 - q), 0}, {0, -1}, 1}]}, {p1, p3}, {q}, {Hold[Pair][Momentum[q, D], Momentum[q, D]] -> mb^2}, {}], {p3 -> -p3}, +GLI[asyR1prop2Ltopo22012X01101NAux1, {n1_, n2_, n3_}] :> GLI[asyR1prop2Ltopo22012X01101NAux1C, {n1, n2, n3, 0, 0}]}}, +{FCTopology[asyR1prop2Ltopo22012X01101NAux1C, {SFAD[{{I*p1, 0}, {0, -1}, 1}], SFAD[{{(-I)*p3, 0}, +{-mc^2, -1}, 1}], SFAD[{{I*(p1 - q), 0}, {0, -1}, 1}], SFAD[{{0, p1 . p3}, {0, -1}, 1}], SFAD[{{0, p3 . q}, {0, -1}, 1}]}, {p1, p3}, {q}, +{Hold[Pair][Momentum[q, D], Momentum[q, D]] -> mb^2}, {}]}}"}, {"fcstFCLoopFindTopologyMappings-ID16","DataType[meta, FCVariable] = True; \n DataType[u0b, FCVariable] = True; \n FCLoopFindTopologyMappings[{FCTopology[mytopo67, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], @@ -456,6 +355,47 @@ PreferredTopologies -> {{FCTopology[ SFAD[{{k1, 2*gkin*meta*k1 . n - meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b, 1}, 1}], SFAD[{{k1 + k2, 2*gkin*meta*u0b*(k1 + k2) . n - meta*u0b*(k1 + k2) . nb}, {2*gkin*meta^2*u0b^2, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}], {k1 -> -k1, k2 -> (-2*k2 + meta*nb*u0b)/2}, GLI[mytopo79, {n5_, n2_, n4_, n1_, n3_, n7_, n6_}] :> GLI[mytopo67, {n1, n2, n3, n4, n5, n6, n7}]}}, {FCTopology[mytopo67, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], SFAD[{{k1 + k2, 0}, {0, 1}, 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}], SFAD[{{k2, -(meta*u0b*k2 . nb)}, {0, 1}, 1}], SFAD[{{k1 + k2, -2*gkin*meta*u0b*(k1 + k2) . n}, {0, 1}, 1}], - SFAD[{{k1, -2*gkin*meta*k1 . n + meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]}}"} - } + SFAD[{{k1, -2*gkin*meta*k1 . n + meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]}}"}, + + + {"fcstFCLoopFindTopologyMappings-ID17", +"DataType[gkin, FCVariable] = True; DataType[meta, FCVariable] = True; +DataType[u0b, +FCVariable] = True; FCLoopFindTopologyMappings[{FCTopology[ +pfrTopo1, {SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, 1}], + SFAD[{{k1 + gkin meta n (1 - u0b), 0}, {0, 1}, 1}], + SFAD[{{k1 + 1/2 meta (2 gkin n - nb u0b), 0}, {2 gkin meta^2 u0b, + 1}, 1}], + SFAD[{{k1 - k2 + 1/2 meta (2 gkin n - nb u0b), + 0}, {2 gkin meta^2 u0b, 1}, 1}]}, {k1, k2}, {n, + nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, + Hold[SPD][n, nb] -> 2}, {}], +FCTopology[ +pfrTopo100, {SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}], + SFAD[{{k1 - gkin meta n (1 - u0b), 0}, {0, 1}, 1}], + SFAD[{{k1 - 1/2 meta (2 gkin n - nb u0b), 0}, {2 gkin meta^2 u0b, + 1}, 1}], + SFAD[{{k1 + k2 - 1/2 meta (2 gkin n - nb u0b), + 0}, {2 gkin meta^2 u0b, 1}, 1}]}, +{k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, + Hold[SPD][n, nb] -> 2}, {}]}, Momentum -> All]", + "{{{FCTopology[pfrTopo100, {FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D], 0, 0, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[0, Pair[Momentum[k1, D], Momentum[nb, D]], -2*gkin*meta, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - gkin*meta*Momentum[n, D] + gkin*meta*u0b*Momentum[n, D], + 0, 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - gkin*meta*Momentum[n, + D] + (meta*u0b*Momentum[nb, D])/2, 0, -2*gkin*meta^2*u0b, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] + Momentum[k2, D] - gkin*meta*Momentum[n, + D] + (meta*u0b*Momentum[nb, D])/2, 0, -2*gkin*meta^2*u0b, {1, 1}]]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, + Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}], {k1 -> -k1}, +GLI[pfrTopo100, {n1_, n2_, n3_, n4_, n5_}] :> GLI[pfrTopo1, {n1, n2, n3, n4, n5}]}}, {FCTopology[pfrTopo1, +{FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k2, D], 0, 0, {1, 1}]], +FeynAmpDenominator[StandardPropagatorDenominator[0, -Pair[Momentum[k1, D], Momentum[nb, D]], -2*gkin*meta, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] + gkin*meta*Momentum[n, D] - gkin*meta*u0b*Momentum[n, + D], 0, 0, {1, 1}]], FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] + gkin*meta*Momentum[n, + D] - (meta*u0b*Momentum[nb, D])/2, 0, -2*gkin*meta^2*u0b, {1, 1}]], + FeynAmpDenominator[StandardPropagatorDenominator[Momentum[k1, D] - Momentum[k2, D] + gkin*meta*Momentum[n, + D] - (meta*u0b*Momentum[nb, D])/2, 0, -2*gkin*meta^2*u0b, {1, 1}]]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, + Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]}}"}} ); From 0061f44ad60fa93fdbd63d720515c05feea2beda Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 7 Aug 2024 16:22:56 +0200 Subject: [PATCH 59/67] Some improvement in FCLoopPropagatorsToLineMomenta. --- .../LoopIntegrals/FCLoopPropagatorsToLineMomenta.m | 12 ++++++------ .../FCLoopPropagatorsToLineMomenta.test | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopPropagatorsToLineMomenta.m b/FeynCalc/LoopIntegrals/FCLoopPropagatorsToLineMomenta.m index ca62ab3a..cab4608c 100644 --- a/FeynCalc/LoopIntegrals/FCLoopPropagatorsToLineMomenta.m +++ b/FeynCalc/LoopIntegrals/FCLoopPropagatorsToLineMomenta.m @@ -74,17 +74,17 @@ FCPrint[1, "FCLoopPropagatorsToLineMomenta: Entering.", FCDoControl->ptlmVerbose]; FCPrint[3, "FCLoopPropagatorsToLineMomenta: Entering with: ", ex, FCDoControl->ptlmVerbose]; - If[ OptionValue[MomentumCombine], - ex = MomentumCombine[ex,FCI->True] + If[ OptionValue[FromGFAD], + ex = FromGFAD[ex,FCI->True] ]; - FCPrint[3, "FCLoopPropagatorsToLineMomenta: After MomentumCombine: ", ex, FCDoControl->ptlmVerbose]; + FCPrint[3, "FCLoopPropagatorsToLineMomenta: After FromGFAD: ", ex, FCDoControl->ptlmVerbose]; - If[ OptionValue[FromGFAD], - ex = FromGFAD[ex,FCI->True,ExpandScalarProduct->False] + If[ OptionValue[MomentumCombine], + ex = MomentumCombine[ex,FCI->True] ]; - FCPrint[3, "FCLoopPropagatorsToLineMomenta: After FromGFAD: ", ex, FCDoControl->ptlmVerbose]; + FCPrint[3, "FCLoopPropagatorsToLineMomenta: After MomentumCombine: ", ex, FCDoControl->ptlmVerbose]; If[ !MatchQ[ex, {FeynAmpDenominator__}], Message[FCLoopPropagatorsToLineMomenta::failmsg, "The input expression is not a valid list of propagators"]; diff --git a/Tests/LoopIntegrals/FCLoopPropagatorsToLineMomenta.test b/Tests/LoopIntegrals/FCLoopPropagatorsToLineMomenta.test index 7776d59a..8047ed60 100644 --- a/Tests/LoopIntegrals/FCLoopPropagatorsToLineMomenta.test +++ b/Tests/LoopIntegrals/FCLoopPropagatorsToLineMomenta.test @@ -261,9 +261,9 @@ StandardPropagatorDenominator[ {"fcstFCLoopPropagatorsToLineMomenta-ID68", "FCLoopPropagatorsToLineMomenta[{GFAD[{{SPD[2 p1 - 2 p3, q], -1}, 1}]}, FCE -> True]", -"{{2*p1 - 2*p3 + q}, {0}, {SFAD[{{0, (2*p1 - 2*p3) . q}, {0, -1}, 1}]}}"}, +"{{p1 - p3 + q}, {0}, {SFAD[{{0, 2*(p1 - p3) . q}, {0, -1}, 1}]}}"}, {"fcstFCLoopPropagatorsToLineMomenta-ID69", "FCLoopPropagatorsToLineMomenta[{GFAD[{{SPD[2 p1 - 2 p3, q] - m^2, -1}, 1}]}, FCE -> True]", -"{{2*p1 - 2*p3 + q/2}, {-m^2}, {SFAD[{{0, (2*p1 - 2*p3) . q}, {m^2, -1}, 1}]}}"} +"{{p1 - p3 + q}, {-m^2}, {SFAD[{{0, 2*(p1 - p3) . q}, {m^2, -1}, 1}]}}"} }); From 2b43b48dc3c83ec97f5b2b509b72dda95c126f14 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 7 Aug 2024 16:23:51 +0200 Subject: [PATCH 60/67] Improved debugging output in FCLoopCreateRuleGLIToGLI. --- .../LoopIntegrals/FCLoopCreateRuleGLIToGLI.m | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopCreateRuleGLIToGLI.m b/FeynCalc/LoopIntegrals/FCLoopCreateRuleGLIToGLI.m index 2404aa7f..2746a732 100644 --- a/FeynCalc/LoopIntegrals/FCLoopCreateRuleGLIToGLI.m +++ b/FeynCalc/LoopIntegrals/FCLoopCreateRuleGLIToGLI.m @@ -67,9 +67,8 @@ FCLoopCreateRuleGLIToGLI[mainTopo_FCTopology, subTopo_FCTopology, OptionsPattern[]] := Block[{ mainProps, subProps, mainName, subName, mainLen, subLen, posList, pattern, lhs, rhs, rule, ruleDelayed, checkGLI, - checkNew, checkOld, optReverse, mainKinematics, subKinematics}, - - + checkNew, checkOld, optReverse, mainKinematics, subKinematics, + mainTopoName, subTopoName}, optReverse = OptionValue[Reverse]; @@ -80,6 +79,9 @@ ]; ]; + mainTopoName = mainTopo[[1]]; + subTopoName = subTopo[[1]]; + FCPrint[1,"FCLoopCreateRuleGLIToGLI: Entering.", FCDoControl->crgtgVerbose]; FCPrint[3,"FCLoopCreateRuleGLIToGLI: Entering with: Main topology: ", mainTopo, FCDoControl->crgtgVerbose]; FCPrint[3,"FCLoopCreateRuleGLIToGLI: Entering with: Subtopology: ", subTopo, FCDoControl->crgtgVerbose]; @@ -141,17 +143,17 @@ ]; If[ subLen > mainLen, - Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology may not be larger than the main topology."]; + Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology " <>ToString[subTopoName] <> " may not be larger than the main topology " <> ToString[mainTopoName]]; Abort[] ]; If[ Union[subProps] =!= Sort[subProps], - Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology may not contain duplicate entries."]; + Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology " <>ToString[subTopoName] <> " may not contain duplicate entries."]; Abort[] ]; If[ Union[mainProps] =!= Sort[mainProps], - Message[FCLoopCreateRuleGLIToGLI::failmsg,"The main topology may not contain duplicate entries."]; + Message[FCLoopCreateRuleGLIToGLI::failmsg,"The main topology " <>ToString[mainTopoName]<> " may not contain duplicate entries."]; Abort[] ]; @@ -161,7 +163,7 @@ If[ !MatchQ[posList, {{{_Integer?Positive}} ..}] || Length[posList] =!= subLen, - Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology does not fit into the given main topology."]; + Message[FCLoopCreateRuleGLIToGLI::failmsg,"The subtopology " <>ToString[subTopoName] <> " does not fit into the main topology " <> ToString[mainTopoName]]; Abort[] ]; From 2f62a22c9db4cef9123cc7bb57d1765aaee1a9a6 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Wed, 7 Aug 2024 16:59:34 +0200 Subject: [PATCH 61/67] Updated documentation. --- .../Markdown/FCLoopFindMomentumShifts.md | 195 +++++++++++ .../Markdown/FCLoopFindTopologyMappings.md | 309 ++++++++++++++++++ ...CLoopReplaceQuadraticEikonalPropagators.md | 37 +++ FeynCalc/Documentation/Markdown/FromGFAD.md | 197 +++++++++++ .../Documentation/Markdown/MomentumCombine.md | 170 ++++++++++ FeynCalc/Documentation/Markdown/ToGFAD.md | 68 ++++ .../Markdown/img/189bbth1nyc1e.svg | 77 +++++ .../Mathematica/LoopIntegrals/FromGFAD.m | 2 +- .../Mathematica/Lorentz/MomentumCombine.m | 2 +- .../LoopIntegrals/FCLoopFindMomentumShifts.m | 12 +- ...FCLoopReplaceQuadraticEikonalPropagators.m | 24 +- FeynCalc/LoopIntegrals/FromGFAD.m | 11 +- FeynCalc/LoopIntegrals/ToGFAD.m | 7 +- FeynCalc/Lorentz/MomentumCombine.m | 26 +- 14 files changed, 1118 insertions(+), 19 deletions(-) create mode 100644 FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md create mode 100644 FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md create mode 100644 FeynCalc/Documentation/Markdown/FCLoopReplaceQuadraticEikonalPropagators.md create mode 100644 FeynCalc/Documentation/Markdown/FromGFAD.md create mode 100644 FeynCalc/Documentation/Markdown/MomentumCombine.md create mode 100644 FeynCalc/Documentation/Markdown/ToGFAD.md create mode 100644 FeynCalc/Documentation/Markdown/img/189bbth1nyc1e.svg diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md b/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md new file mode 100644 index 00000000..26390e14 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopFindMomentumShifts.md @@ -0,0 +1,195 @@ +## FCLoopFindMomentumShifts + +`FCLoopFindMomentumShifts[source, target, {p1, p2, ...}]` finds loop momentum shifts that bring loop integrals or topologies in the list `source` to the form specified in target. The integrals/topologies in `intFrom` and `intTo` are assumed to be equivalent and their denominators must be properly ordered via `FCLoopToPakForm`. Here the loop momenta `p1, p2, ...` belong to the source topologies. + +`target` must be provided as a list of `FeynAmpDenominator` objects, while `intFrom` is a list of such lists. + +It is also possible to invoke the function as `FCLoopFindMomentumShifts[{FCTopology[...], FCTopology[...]}, FCTopology[...]]`. + +For topologies involving kinematic constraints some mappings may require shifts not only in the loop but also in the external momenta. Such shifts are disabled by default but can be activated by setting the option `Momentum` to `All`. This option can be dangerous, because the amplitude does not necessarily have to be symmetric under shifts of external momenta! + +Normally, `FCLoopFindMomentumShifts` will abort the evaluation if it fails to find any suitable shifts. Setting the option `Abort` to `False` will force the function to merely return an empty list in such situations. + +### See also + +[Overview](Extra/FeynCalc.md), [FCLoopToPakForm](FCLoopToPakForm.md), [FCLoopPakOrder](FCLoopPakOrder.md). + +### Examples + +```mathematica +source = {{FAD[p4], FAD[p1], FAD[p1 - p3 - p4], + FAD[{p1 - p4, m1}], FAD[{p3, m1}], FAD[p3 + q1], + FAD[p1 + q1]}} +``` + +$$\left( +\begin{array}{ccccccc} + \frac{1}{\text{p4}^2} & \frac{1}{\text{p1}^2} & \frac{1}{(\text{p1}-\text{p3}-\text{p4})^2} & \frac{1}{(\text{p1}-\text{p4})^2-\text{m1}^2} & \frac{1}{\text{p3}^2-\text{m1}^2} & \frac{1}{(\text{p3}+\text{q1})^2} & \frac{1}{(\text{p1}+\text{q1})^2} \\ +\end{array} +\right)$$ + +```mathematica +target = {FAD[p4], FAD[p1 + p4 + q1], FAD[p1 - p3 + q1], + FAD[{p1 + q1, m1}], FAD[{p3, m1}], FAD[p3 + q1], + FAD[p1 + p4 + 2 q1]} +``` + +$$\left\{\frac{1}{\text{p4}^2},\frac{1}{(\text{p1}+\text{p4}+\text{q1})^2},\frac{1}{(\text{p1}-\text{p3}+\text{q1})^2},\frac{1}{(\text{p1}+\text{q1})^2-\text{m1}^2},\frac{1}{\text{p3}^2-\text{m1}^2},\frac{1}{(\text{p3}+\text{q1})^2},\frac{1}{(\text{p1}+\text{p4}+2 \;\text{q1})^2}\right\}$$ + +```mathematica +FCLoopFindMomentumShifts[source, target, {p1, p3, p4}] +``` + +$$\{\{\text{p1}\to \;\text{p1}+\text{p4}+\text{q1}\}\}$$ + +```mathematica +FCLoopFindMomentumShifts[{{FAD[r4], FAD[r1], FAD[r1 - p3 - r4], + FAD[{r1 - r4, m1}], FAD[{p3, m1}], FAD[p3 + q1], FAD[r1 + q1]}}, + {FAD[p4], FAD[p1 + p4 + q1], FAD[p1 - p3 + q1], FAD[{p1 + q1, m1}], + FAD[{p3, m1}], FAD[p3 + q1], FAD[p1 + p4 + 2 q1]}, {p1, p3, p4, r4,r1}] +``` + +$$\{\{\text{r4}\to \;\text{p4},\text{r1}\to \;\text{p1}+\text{p4}+\text{q1}\}\}$$ + +```mathematica +source1 = {FCTopology[ + fctopology3, {SFAD[{{p1, 0}, {0, 1}, 1}], + SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], + FCTopology[ + fctopology4, {SFAD[{{p2 + p3, 0}, {0, 1}, 1}], + SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology4},\left\{\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)\right\}$$ + +```mathematica +target1 = FCTopology[ + fctopology1, {SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], + SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}] +``` + +$$\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)$$ + +```mathematica +FCLoopFindMomentumShifts[source1, target1] +``` + +$$\{\{\text{p1}\to -\text{p1}-\text{p3}+Q,\text{p2}\to -\text{p2}-\text{p3}+Q\},\{\text{p1}\to Q-\text{p2},\text{p2}\to Q-\text{p1},\text{p3}\to -\text{p3}\}\}$$ + +```mathematica +source2 = {FCTopology[topo1, { + SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l1 - l2, 0}, {0, 1}, 1}], + SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], + SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, + {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{((\text{l1}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{l2})^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)\right\}$$ + +```mathematica +target2 = FCTopology[topo2, { + SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], + SFAD[{{l1 - q2, 0}, {0, 1}, 1}], + SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], + SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, + {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}] +``` + +$$\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)$$ + +Mapping these two topologies onto each other requires shifts in the external momenta + +```mathematica +Quiet[FCLoopFindMomentumShifts[source2, target2, Abort -> False]] +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies topo1 and topo2. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\{\{\}\}$$ + +Once we allow such shifts, everything works as expected + +```mathematica +FCLoopFindMomentumShifts[source2, target2, Momentum -> All] +``` + +$$\{\{\text{l1}\to -\text{l1}+\text{l2}+\text{q2},\text{q1}\to -\text{q2},\text{q2}\to -\text{q1}\}\}$$ + +For equivalent topologies containing mixed quadratic-eikonal propagators it's often not possible to find suitable shifts because the function cannot reconstruct the correct momentum flow through such propagators + +```mathematica +source3 = {FCTopology["pfrTopo303", {SFAD[{{k2, -2 gkin meta k2 . n + meta u0b k2 . nb}, + {2 gkin meta^2 u0b, 1}, 1}], SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, 1}], SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, -k2 . nb}, {0, 1}, 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}]}, {k1, k2}, {n, nb}, + {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{pfrTopo303},\left\{\frac{1}{(\text{k2}^2+\text{meta} \;\text{u0b} (\text{k2}\cdot \;\text{nb})-2 \;\text{gkin} \;\text{meta} (\text{k2}\cdot n)-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{((\text{k1}-\text{k2})^2+\text{meta} \;\text{u0b} ((\text{k2}-\text{k1})\cdot \;\text{nb})+i \eta )},\frac{1}{(\text{k1}^2-2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)+i \eta )},\frac{1}{(\text{k1}^2-\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})+i \eta )},\frac{1}{(-\text{k2}\cdot \;\text{nb}+i \eta )},\frac{1}{(-\text{k1}\cdot \;\text{nb}+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)\right\}$$ + +```mathematica +target3 = FCTopology["pfrTopo267", {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1 - k2, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, 1}], SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, 1}], SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, 1}], SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, 1}], SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}] +``` + +$$\text{FCTopology}\left(\text{pfrTopo267},\left\{\frac{1}{(\text{k2}^2+i \eta )},1\left/\left(((\text{k1}-\text{k2})^2+2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)-2 \;\text{gkin} \;\text{meta} (\text{k2}\cdot n)+2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k2}\cdot n)+\text{meta} \;\text{u0b} ((\text{k2}-\text{k1})\cdot \;\text{nb})+2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )\right)\right.,\frac{1}{(\text{k1}^2+2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)-\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})+2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{(\text{k1}^2-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)+i \eta )},\frac{1}{(\text{k2}\cdot \;\text{nb}-2 \;\text{gkin} \;\text{meta}+i \eta )},\frac{1}{(\text{k1}\cdot \;\text{nb}-2 \;\text{gkin} \;\text{meta} \;\text{u0b}+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)$$ + +$$(\text{DataType}[\#,\text{FCVariable}]=\text{True})\&\text{/@}\{\text{gkin},\text{meta},\text{u0b}\};$$ + +```mathematica +FCLoopFindMomentumShifts[source3, target3] +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{The topologies contain following mixed quadratic-eikonal propagators that complicate the determination of the shifts: }\left\{\frac{1}{(\text{k1}^2-2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)+i \eta )},\frac{1}{(\text{k1}^2-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)+i \eta )},\frac{1}{(\text{k1}^2-\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})+i \eta )},\frac{1}{(\text{k1}^2+n\cdot (2 \;\text{gkin} \;\text{meta} \;\text{k1}-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{k1})-\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})+2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{((\text{k1}-\text{k2})^2+\text{meta} \;\text{u0b} ((\text{k2}-\text{k1})\cdot \;\text{nb})+i \eta )},\frac{1}{((\text{k1}-\text{k2})^2+\text{meta} \;\text{u0b} ((\text{k2}-\text{k1})\cdot \;\text{nb})+n\cdot (2 \;\text{gkin} \;\text{meta} \;\text{k1}-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{k1}-2 \;\text{gkin} \;\text{meta} \;\text{k2}+2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{k2})+2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{(\text{k2}^2+\text{k2}\cdot (\text{meta} \;\text{u0b} \;\text{nb}-2 \;\text{gkin} \;\text{meta} n)-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )}\right\}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{You can try to trade them for purely quadratic propagators using FCLoopReplaceQuadraticEikonalPropagators.}$$ + +![189bbth1nyc1e](img/189bbth1nyc1e.svg) + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo303 and pfrTopo267. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{\$Aborted}$$ + +To this aim one can try converting those mixed propagators to purely quadratic ones using `FCLoopReplaceQuadraticEikonalPropagators` + +```mathematica +source3New = FCLoopReplaceQuadraticEikonalPropagators[source3, LoopMomenta -> {k1, k2}, + InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 - k2]] -> SPD[k1 - k2]}, + IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 2}] +``` + +$$\left\{\text{FCTopology}\left(\text{pfrTopo303},\left\{\frac{1}{((\text{k2}-\text{gkin} \;\text{meta} n+\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{((\text{k1}-\text{k2}-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{((\text{k1}-\text{gkin} \;\text{meta} n)^2+i \eta )},\frac{1}{((\text{k1}-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{(-\text{k2}\cdot \;\text{nb}+i \eta )},\frac{1}{(-\text{k1}\cdot \;\text{nb}+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)\right\}$$ + +```mathematica +target3New = FCLoopReplaceQuadraticEikonalPropagators[target3, LoopMomenta -> {k1, k2}, + InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 - k2]] -> SPD[k1 - k2]}, + IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 2}] // First +``` + +$$\text{FCTopology}\left(\text{pfrTopo267},\left\{\frac{1}{(\text{k2}^2+i \eta )},\frac{1}{((\text{k1}-\text{k2}+\text{gkin} \;\text{meta} n-\text{gkin} \;\text{meta} \;\text{u0b} n-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{((\text{k1}+\text{gkin} \;\text{meta} n-\text{gkin} \;\text{meta} \;\text{u0b} n-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{((\text{k1}-\text{gkin} \;\text{meta} \;\text{u0b} n)^2+i \eta )},\frac{1}{(\text{k2}\cdot \;\text{nb}-2 \;\text{gkin} \;\text{meta}+i \eta )},\frac{1}{(\text{k1}\cdot \;\text{nb}-2 \;\text{gkin} \;\text{meta} \;\text{u0b}+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)$$ + +With the new topologies everything works as expected + +```mathematica +FCLoopFindMomentumShifts[source3New, target3New] +``` + +$$\left\{\left\{\text{k1}\to \;\text{gkin} \;\text{meta} n \;\text{u0b}-\text{k1}+\frac{\text{meta} \;\text{nb} \;\text{u0b}}{2},\text{k2}\to \frac{1}{2} (2 \;\text{gkin} \;\text{meta} n-2 \;\text{k2}-\text{meta} \;\text{nb} \;\text{u0b})\right\}\right\}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md b/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md new file mode 100644 index 00000000..2211839d --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopFindTopologyMappings.md @@ -0,0 +1,309 @@ +## FCLoopFindTopologyMappings + +`FCLoopFindTopologyMappings[{topo1, topo2, ...}]` finds mappings between topologies (written as `FCTopology` objects) `topo1, topo2, ...`. For each source topology the function returns a list of loop momentum shifts and a `GLI` replacement rule needed to map it to the given target topology. If you need to map everything to a particular set of target topologies, you can specify them via the `PreferredTopologies` option. + +The output is a list of two lists, the former containing the mappings and the latter enumerating the final contributing topologies + +To enable shifts in the external momenta you need to set the option `Momentum` to `All`. + +### See also + +[Overview](Extra/FeynCalc.md), [FCTopology](FCTopology.md), [GLI](GLI.md), [FCLoopFindTopologies](FCLoopFindTopologies.md). + +### Examples + +Here we have a set of 5 topologies + +```mathematica +topos1 = { + FCTopology[fctopology1, {SFAD[{{p3, 0}, {0, 1}, 1}], SFAD[{{p2, 0}, {0, 1}, 1}], + SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], + FCTopology[fctopology2, {SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], SFAD[{{p2 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, {p1, p2, p3}, {Q}, {}, {}], + FCTopology[fctopology3, {SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p2 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, + {p1, p2, p3}, {Q}, {}, {}], + FCTopology[fctopology4, {SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], + SFAD[{{p2 + p3, 0}, {0, 1}, 1}], SFAD[{{p1 + p3, 0}, {0, 1}, 1}], + SFAD[{{p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, + {p1, p2, p3}, {Q}, {}, {}], + FCTopology[fctopology5, {SFAD[{{p3, 0}, {0, 1}, 1}], + SFAD[{{p2, 0}, {0, 1}, 1}], SFAD[{{p1, 0}, {0, 1}, 1}], + SFAD[{{p1 + p3, 0}, {0, 1}, 1}], SFAD[{{p2 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p3 - Q, 0}, {0, 1}, 1}], + SFAD[{{p1 + p2 - Q, 0}, {0, 1}, 1}], SFAD[{{p1 + p2 + p3 - Q, 0}, {0, 1}, 1}]}, + {p1, p2, p3}, {Q}, {}, {}]}; +``` + +3 of them can be mapped to the other two + +```mathematica +mappings1 = FCLoopFindTopologyMappings[topos1]; +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }3\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ + +```mathematica +mappings1[[1]] +``` + +$$\left( +\begin{array}{ccc} + \;\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to -\text{p1}-\text{p3}+Q,\text{p2}\to -\text{p2}-\text{p3}+Q\} & G^{\text{fctopology3}}(\text{n1$\_$},\text{n7$\_$},\text{n8$\_$},\text{n5$\_$},\text{n6$\_$},\text{n4$\_$},\text{n2$\_$},\text{n3$\_$},\text{n9$\_$}):\to G^{\text{fctopology1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ + \;\text{FCTopology}\left(\text{fctopology4},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to Q-\text{p2},\text{p2}\to Q-\text{p1},\text{p3}\to -\text{p3}\} & G^{\text{fctopology4}}(\text{n1$\_$},\text{n6$\_$},\text{n5$\_$},\text{n8$\_$},\text{n7$\_$},\text{n3$\_$},\text{n2$\_$},\text{n4$\_$},\text{n9$\_$}):\to G^{\text{fctopology1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ + \;\text{FCTopology}\left(\text{fctopology5},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p1}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right) & \{\text{p1}\to \;\text{p2},\text{p2}\to \;\text{p1}\} & G^{\text{fctopology5}}(\text{n1$\_$},\text{n3$\_$},\text{n2$\_$},\text{n4$\_$},\text{n6$\_$},\text{n5$\_$},\text{n7$\_$},\text{n8$\_$},\text{n9$\_$}):\to G^{\text{fctopology2}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5},\text{n6},\text{n7},\text{n8},\text{n9}) \\ +\end{array} +\right)$$ + +And these are the final topologies + +```mathematica +mappings1[[2]] +``` + +$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{p3}^2+i \eta )},\frac{1}{(\text{p2}^2+i \eta )},\frac{1}{(\text{p1}^2+i \eta )},\frac{1}{((\text{p2}+\text{p3})^2+i \eta )},\frac{1}{((\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}-Q)^2+i \eta )},\frac{1}{((\text{p2}+\text{p3}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}-Q)^2+i \eta )},\frac{1}{((\text{p1}+\text{p2}+\text{p3}-Q)^2+i \eta )}\right\},\{\text{p1},\text{p2},\text{p3}\},\{Q\},\{\},\{\}\right)\right\}$$ + +Here is another example + +```mathematica +topos2 = {FCTopology[fctopology1, {SFAD[{{q2, 0}, {0, 1}, 1}], + SFAD[{{q1, 0}, {0, 1}, 1}], SFAD[{{q1 + q2, 0}, {0, 1}, 1}], SFAD[{{p + q1, 0}, {0, 1}, 1}], + SFAD[{{p - q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], + FCTopology[fctopology2, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1, 0}, {0, 1}, 1}], + SFAD[{{p + q2, 0}, {0, 1}, 1}], SFAD[{{p - q1, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], + FCTopology[fctopology3, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1, 0}, {0, 1}, 1}], + SFAD[{{p - q1, 0}, {0, 1}, 1}], SFAD[{{p - q1 + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((\text{q1}+\text{q2})^2+i \eta )},\frac{1}{((p+\text{q1})^2+i \eta )},\frac{1}{((p-\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p+\text{q2})^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )},\frac{1}{((p-\text{q1}+\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ + +Yet this time we have some preferred set of topologies and want to match to them (if possible) + +```mathematica +preferredTopos2 = {FCTopology[prop2L, {SFAD[{{q1, 0}, {0, 1}, 1}], + SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], SFAD[{{-p + q1, 0}, {0, 1}, 1}], + SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], + FCTopology[prop2LX1, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], + SFAD[{{-p + q1, 0}, {0, 1}, 1}], SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], + FCTopology[prop2LX3, {SFAD[{{q1, 0}, {0, 1}, 1}], SFAD[{{q2, 0}, {0, 1}, 1}], + SFAD[{{-p + q1, 0}, {0, 1}, 1}], SFAD[{{-p + q2, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}], + FCTopology[prop2LX15, {SFAD[{{q2, 0}, {0, 1}, 1}], SFAD[{{q1 - q2, 0}, {0, 1}, 1}], + SFAD[{{-p + q1, 0}, {0, 1}, 1}]}, {q1, q2}, {p}, {}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{prop2L},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX3},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX15},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ + +```mathematica +mappings2 = FCLoopFindTopologyMappings[topos2, PreferredTopologies -> preferredTopos2]; +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }3\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }3$$ + +```mathematica +mappings2[[1]] +``` + +$$\left( +\begin{array}{ccc} + \;\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((\text{q1}+\text{q2})^2+i \eta )},\frac{1}{((p+\text{q1})^2+i \eta )},\frac{1}{((p-\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to -\text{q2},\text{q2}\to \;\text{q1}\} & G^{\text{fctopology1}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n5$\_$},\text{n4$\_$}):\to G^{\text{prop2L}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5}) \\ + \;\text{FCTopology}\left(\text{fctopology2},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p+\text{q2})^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to \;\text{q2},\text{q2}\to -\text{q1}\} & G^{\text{fctopology2}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n4$\_$}):\to G^{\text{prop2LX3}}(\text{n1},\text{n2},\text{n3},\text{n4}) \\ + \;\text{FCTopology}\left(\text{fctopology3},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{((p-\text{q1})^2+i \eta )},\frac{1}{((p-\text{q1}+\text{q2})^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right) & \{\text{q1}\to \;\text{q2},\text{q2}\to \;\text{q2}-\text{q1}\} & G^{\text{fctopology3}}(\text{n2$\_$},\text{n1$\_$},\text{n4$\_$},\text{n3$\_$}):\to G^{\text{prop2LX1}}(\text{n1},\text{n2},\text{n3},\text{n4}) \\ +\end{array} +\right)$$ + +And these are the final occurring topologies + +```mathematica +mappings2[[2]] +``` + +$$\left\{\text{FCTopology}\left(\text{prop2L},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX1},\left\{\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-\text{q2})^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right),\text{FCTopology}\left(\text{prop2LX3},\left\{\frac{1}{(\text{q1}^2+i \eta )},\frac{1}{(\text{q2}^2+i \eta )},\frac{1}{((\text{q1}-p)^2+i \eta )},\frac{1}{((\text{q2}-p)^2+i \eta )}\right\},\{\text{q1},\text{q2}\},\{p\},\{\},\{\}\right)\right\}$$ + +If we need to match subtopologies into larger topologies, we first need to generate all possible subtopologies for each relevant topology. + +```mathematica +topos3 = { + FCTopology[fctopology1, { + SFAD[{{l1 + l2 - q1, 0}, {0, 1}, 1}], + SFAD[{{l2, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l2 + q2, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1 - q1, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1 - q1 - q2, 0}, {SMP["m_t"]^2, 1}, 1}]}, {l1, l2}, {q1, q2}, {}, {}], + FCTopology[fctopology9, { + SFAD[{{l1 + l2 + q2, 0}, {0, 1}, 1}], + SFAD[{{l2, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1 + q2, 0}, {SMP["m_t"]^2, 1}, 1}], + SFAD[{{l1 - q1, 0}, {SMP["m_t"]^2, 1}, 1}]}, {l1, l2}, {q1, q2}, {}, {}] + } +``` + +$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{l1}+\text{l2}-\text{q1})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l2}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1}-\text{q2})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right),\text{FCTopology}\left(\text{fctopology9},\left\{\frac{1}{((\text{l1}+\text{l2}+\text{q2})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l1}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right)\right\}$$ + +```mathematica +subTopos3 = Flatten[FCLoopFindSubtopologies[topos3]]; +``` + +```mathematica +subTopos3 // Length +``` + +$$37$$ + +Now we can match a smaller topology into a larger topology + +```mathematica +mappings3 = FCLoopFindTopologyMappings[topos3, PreferredTopologies -> subTopos3]; +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ + +```mathematica +mappings3[[1]] +``` + +$$\left( +\begin{array}{ccc} + \;\text{FCTopology}\left(\text{fctopology9},\left\{\frac{1}{((\text{l1}+\text{l2}+\text{q2})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l1}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right) & \{\text{l1}\to \;\text{q1}-\text{l1},\text{l2}\to -\text{l2}-\text{q2}\} & G^{\text{fctopology9}}(\text{n1$\_$},\text{n3$\_$},\text{n4$\_$},\text{n5$\_$},\text{n2$\_$}):\to G^{\text{fctopology1}}(\text{n1},0,\text{n2},\text{n3},\text{n4},\text{n5}) \\ +\end{array} +\right)$$ + +```mathematica +mappings3[[2]] +``` + +$$\left\{\text{FCTopology}\left(\text{fctopology1},\left\{\frac{1}{((\text{l1}+\text{l2}-\text{q1})^2+i \eta )},\frac{1}{(\text{l2}^2-m_t^2+i \eta )},\frac{1}{(\text{l1}^2-m_t^2+i \eta )},\frac{1}{((\text{l2}+\text{q2})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1})^2-m_t^2+i \eta )},\frac{1}{((\text{l1}-\text{q1}-\text{q2})^2-m_t^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\{\},\{\}\right)\right\}$$ + +Mapping the following two topologies onto each other requires shifts in the external momenta due to the chosen kinematic constraints. + +```mathematica +topos4 = { + FCTopology[topo1, { + SFAD[{{l1 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l1 - l2, 0}, {0, 1}, 1}], + SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], + SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}], + FCTopology[topo2, { + SFAD[{{l1 - l2, 0}, {m^2, 1}, 1}], + SFAD[{{l1 - q2, 0}, {0, 1}, 1}], + SFAD[{{l2 - q2, 0}, {m^2, 1}, 1}], + SFAD[{{l2 + q1, 0}, {m^2, 1}, 1}], + SFAD[{{l2, 0}, {0, 1}, 1}]}, {l1, l2}, {q1, q2}, {SPD[q1, q1] -> 0, SPD[q2, q2] -> 0, SPD[q1, q2] -> s/2}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{topo1},\left\{\frac{1}{((\text{l1}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{l2})^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right),\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right)\right\}$$ + +```mathematica +mappings4 = FCLoopFindTopologyMappings[topos4, Momentum -> All]; +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ + +```mathematica +mappings4[[1]] +``` + +$$\left( +\begin{array}{ccc} + \;\text{FCTopology}\left(\text{topo2},\left\{\frac{1}{((\text{l1}-\text{l2})^2-m^2+i \eta )},\frac{1}{((\text{l1}-\text{q2})^2+i \eta )},\frac{1}{((\text{l2}-\text{q2})^2-m^2+i \eta )},\frac{1}{((\text{l2}+\text{q1})^2-m^2+i \eta )},\frac{1}{(\text{l2}^2+i \eta )}\right\},\{\text{l1},\text{l2}\},\{\text{q1},\text{q2}\},\left\{\text{q1}^2\to 0,\text{q2}^2\to 0,\text{q1}\cdot \;\text{q2}\to \frac{s}{2}\right\},\{\}\right) & \{\text{l1}\to -\text{l1}+\text{l2}-\text{q1},\text{q1}\to -\text{q2},\text{q2}\to -\text{q1}\} & G^{\text{topo2}}(\text{n1$\_$},\text{n2$\_$},\text{n3$\_$},\text{n4$\_$},\text{n5$\_$}):\to G^{\text{topo1}}(\text{n1},\text{n2},\text{n3},\text{n4},\text{n5}) \\ +\end{array} +\right)$$ + +Otherwise no mappings exist + +```mathematica +FCLoopFindTopologyMappings[topos4][[1]] +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies topo2 and topo1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ + +$$\{\}$$ + +Topologies containing eikonal or other nonstandard propagators may introduce additional challenges. +Even though two such topologies can be recognized to be identical, the code still would not be able to +work out the correct momentum shifts without some additional input. + +```mathematica +topoEik1 = FCTopology[mytopo67, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], + SFAD[{{k1 + k2, 0}, {0, 1}, 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}], + SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, + {0, 1}, 1}], SFAD[{{k1, -2 gkin meta k1 . n + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}]}, + {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]; +``` + +```mathematica +topoEik2 = FCTopology[mytopo79, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}], SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, 1}], SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n - meta u0b (k1 + k2) . nb}, + {2 gkin meta^2 u0b^2, 1}, 1}]}, {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, + Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]; +``` + +```mathematica +DataType[gkin, FCVariable] = True; +DataType[meta, FCVariable] = True; +DataType[u0b, FCVariable] = True; +``` + +At first sight these two topologies are independent from each other + +```mathematica +FCLoopFindTopologyMappings[{topoEik1, topoEik2}]; +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{The topologies contain following mixed quadratic-eikonal propagators that complicate the determination of the shifts: }\left\{\frac{1}{(\text{k1}^2+\text{k1}\cdot (2 \;\text{gkin} \;\text{meta} n-\text{meta} \;\text{u0b} \;\text{nb})-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{(\text{k1}^2+\text{k1}\cdot (\text{meta} \;\text{u0b} \;\text{nb}-2 \;\text{gkin} \;\text{meta} n)-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{(\text{k2}^2-\text{meta} \;\text{u0b} (\text{k2}\cdot \;\text{nb})+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2-2 \;\text{gkin} \;\text{meta} \;\text{u0b} ((\text{k1}+\text{k2})\cdot n)+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2-\text{meta} \;\text{u0b} ((\text{k1}+\text{k2})\cdot \;\text{nb})+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2+(\text{k1}+\text{k2})\cdot (2 \;\text{gkin} \;\text{meta} \;\text{u0b} n-\text{meta} \;\text{u0b} \;\text{nb})-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2+i \eta )}\right\}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{You can try to trade them for purely quadratic propagators using FCLoopReplaceQuadraticEikonalPropagators.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies mytopo79 and mytopo67. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }0\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ + +However, if we tell the code how some eikonal propagators can be brought into a quadratic form, +then an explicit mapping can be found + +```mathematica +toposNew = FCLoopReplaceQuadraticEikonalPropagators[{topoEik1, topoEik2}, + LoopMomenta -> {k1, k2}, + InitialSubstitutions -> { + ExpandScalarProduct[SPD[k1 - k2]] -> SPD[k1 - k2], + ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}, + IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 2}]; +``` + +```mathematica +eikMappings = FCLoopFindTopologyMappings[toposNew]; + +```mathematica + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }1\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FCLoopReplaceQuadraticEikonalPropagators.md b/FeynCalc/Documentation/Markdown/FCLoopReplaceQuadraticEikonalPropagators.md new file mode 100644 index 00000000..279cb550 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FCLoopReplaceQuadraticEikonalPropagators.md @@ -0,0 +1,37 @@ +## FCLoopReplaceQuadraticEikonalPropagators + +`FCLoopReplaceQuadraticEikonalPropagators[topologies]` identifies `SFAD`s and `CFAD`s in `topologies` that represent mixed quadratic-eikonal propagators, e.g. $[p^2 - 2 p \cdot q]$. Using the information on loop momenta provided by the user the routine will try to rewrite those denominators by completing the square, e.g. as in $[(p-q)^2 - q^2]$. + +This procedure is useful because one cannot easily determine the momentum flow from looking at quadratic-eikonal propagators as it is possible in the case of purely quadratic ones. + +For this to work it is crucial to specify the loop momenta via the `LoopMomenta` option as well as the kinematics (`IntermediateSubstitutions`) and the rules for completing the square (`InitialSubstitutions`) on the purely loop-momentum dependent piece of the propagator (e.g. $p_1^2 - 2 p_1 \cdot p_2 + p_2^2$ goes to $(p_1+p_2)^2$. + +Internally this routine uses `ToGFAD` and `FromGFAD`. + +### See also + +[Overview](Extra/FeynCalc.md), [FCTopology](FCTopology.md), [GFAD](GFAD.md), [FromGFAD](FromGFAD.md), [ToGFAD](ToGFAD.md). + +### Examples + +$$(\text{DataType}[\#,\text{FCVariable}]=\text{True})\&\text{/@}\{\text{gkin},\text{meta},\text{u0b}\};$$ + +```mathematica +topos = {FCTopology[preTopoDia1, {SFAD[{{k2, 0}, {0, 1}, 1}], SFAD[{{k1, 0}, {0, 1}, 1}], + SFAD[{{k1 + k2, 0}, {0, 1}, 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}], SFAD[{{k2, -(meta*u0b*k2 . nb)}, {0, 1}, 1}], + SFAD[{{k1 + k2, -2*gkin*meta*u0b*(k1 + k2) . n}, {0, 1}, 1}], SFAD[{{k1, -2*gkin*meta*k1 . n + meta*u0b*k1 . nb}, + {2*gkin*meta^2*u0b, 1}, 1}], SFAD[{{k1, -2*gkin*meta*u0b*k1 . n + meta*u0b*k1 . nb}, {2*gkin*meta^2*u0b^2, 1}, 1}]}, + {k1, k2}, {n, nb}, {Hold[SPD][n] -> 0, Hold[SPD][nb] -> 0, Hold[SPD][n, nb] -> 2}, {}]} +``` + +$$\left\{\text{FCTopology}\left(\text{preTopoDia1},\left\{\frac{1}{(\text{k2}^2+i \eta )},\frac{1}{(\text{k1}^2+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2+i \eta )},\frac{1}{(-\text{k1}\cdot \;\text{nb}+i \eta )},\frac{1}{(\text{k2}^2-\text{meta} \;\text{u0b} (\text{k2}\cdot \;\text{nb})+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2-2 \;\text{gkin} \;\text{meta} \;\text{u0b} ((\text{k1}+\text{k2})\cdot n)+i \eta )},\frac{1}{(\text{k1}^2+\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})-2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{(\text{k1}^2+\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)\right\}$$ + +```mathematica +FCLoopReplaceQuadraticEikonalPropagators[topos, LoopMomenta -> {k1, k2}, + InitialSubstitutions -> { + ExpandScalarProduct[SPD[k1 - k2]] -> SPD[k1 - k2], + ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}, + IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 0}] +``` + +$$\left\{\text{FCTopology}\left(\text{preTopoDia1},\left\{\frac{1}{(\text{k2}^2+i \eta )},\frac{1}{(\text{k1}^2+i \eta )},\frac{1}{((\text{k1}+\text{k2})^2+i \eta )},\frac{1}{(-\text{k1}\cdot \;\text{nb}+i \eta )},\frac{1}{((\text{k2}-\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2+i \eta )},\frac{1}{((\text{k1}+\text{k2}-\text{gkin} \;\text{meta} \;\text{u0b} n)^2+i \eta )},\frac{1}{((\text{k1}-\text{gkin} \;\text{meta} n+\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}+i \eta )},\frac{1}{((\text{k1}-\text{gkin} \;\text{meta} \;\text{u0b} n+\frac{\text{meta} \;\text{u0b} \;\text{nb}}{2})^2-2 \;\text{gkin} \;\text{meta}^2 \;\text{u0b}^2+i \eta )}\right\},\{\text{k1},\text{k2}\},\{n,\text{nb}\},\{\text{Hold}[\text{SPD}][n]\to 0,\text{Hold}[\text{SPD}][\text{nb}]\to 0,\text{Hold}[\text{SPD}][n,\text{nb}]\to 2\},\{\}\right)\right\}$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/FromGFAD.md b/FeynCalc/Documentation/Markdown/FromGFAD.md new file mode 100644 index 00000000..c28fa190 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/FromGFAD.md @@ -0,0 +1,197 @@ +## FromGFAD + +`FromGFAD[exp]` converts all suitable generic propagator denominators into standard and Cartesian propagator denominators. + +The options `InitialSubstitutions` and `IntermediateSubstitutions` can be used to help the function handle nontrivial propagators. In particular, `InitialSubstitutions` can define rules for completing the square in the loop momenta of the propagator, while `IntermediateSubstitutions` contains relations for scalar products appearing in those rules. + +Another useful option is `LoopMomenta` which is particularly helpful when converting mixed quadratic-eikonal propagators to quadratic ones. + +For propagators containing symbolic variables it might be necessary to tell the function that those are larger than zero (if applicable), so that expressions such as $\sqrt{\lambda^2}$ can be simplified accordingly. To that aim one should use the option `PowerExpand`. + +### See also + +[Overview](Extra/FeynCalc.md), [GFAD](GFAD.md), [SFAD](SFAD.md), [CFAD](CFAD.md), [FeynAmpDenominatorExplicit](FeynAmpDenominatorExplicit.md). + +### Examples + +```mathematica +GFAD[SPD[p1]] + +ex = FromGFAD[%] +``` + +$$\text{GFAD}(\text{SPD}(\text{p1}))$$ + +$$\text{FromGFAD}(\text{GFAD}(\text{SPD}(\text{p1})))$$ + +```mathematica +ex // StandardForm + +(*FromGFAD[GFAD[SPD[p1]]]*) +``` + +```mathematica +ex = GFAD[SPD[p1] + 2 SPD[p1, p2]] +``` + +$$\text{GFAD}(2 \;\text{SPD}(\text{p1},\text{p2})+\text{SPD}(\text{p1}))$$ + +```mathematica +FromGFAD[ex] +``` + +$$\text{FromGFAD}(\text{GFAD}(2 \;\text{SPD}(\text{p1},\text{p2})+\text{SPD}(\text{p1})))$$ + +We can get a proper conversion into a quadratic propagator using the option `LoopMomenta`. Notice that here `p2.p2` is being put into the mass slot + +```mathematica +FromGFAD[ex, LoopMomenta -> {p1}] +``` + +$$\text{FromGFAD}(\text{GFAD}(2 \;\text{SPD}(\text{p1},\text{p2})+\text{SPD}(\text{p1})),\text{LoopMomenta}\to \{\text{p1}\})$$ + +```mathematica +ex // StandardForm + +(*GFAD[SPD[p1] + 2 SPD[p1, p2]]*) +``` + +```mathematica +GFAD[{{CSPD[p1] + 2 CSPD[p1, p2] + m^2, -1}, 2}] + +ex = FromGFAD[%] +``` + +$$\text{GFAD}\left(\left\{\left\{2 \;\text{CSPD}(\text{p1},\text{p2})+\text{CSPD}(\text{p1})+m^2,-1\right\},2\right\}\right)$$ + +$$\text{FromGFAD}\left(\text{GFAD}\left(\left\{\left\{2 \;\text{CSPD}(\text{p1},\text{p2})+\text{CSPD}(\text{p1})+m^2,-1\right\},2\right\}\right)\right)$$ + +```mathematica +ex // StandardForm + +(*FromGFAD[GFAD[{{m^2 + CSPD[p1] + 2 CSPD[p1, p2], -1}, 2}]]*) +``` + +```mathematica +DataType[la, FCVariable] = True; +prop = FeynAmpDenominator[GenericPropagatorDenominator[-la Pair[Momentum[p1, D], + Momentum[p1, D]] + 2 Pair[Momentum[p1, D], Momentum[q, D]], {1,1}]] +``` + +$$\text{FeynAmpDenominator}(\text{GenericPropagatorDenominator}(2 \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(q,D))-\text{la} \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(\text{p1},D)),\{1,1\}))$$ + +```mathematica +ex = FromGFAD[prop] +``` + +$$\text{FromGFAD}(\text{FeynAmpDenominator}(\text{GenericPropagatorDenominator}(2 \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(q,D))-\text{la} \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(\text{p1},D)),\{1,1\})))$$ + +```mathematica +ex = FromGFAD[prop, LoopMomenta -> {p1}] +``` + +$$\text{FromGFAD}(\text{FeynAmpDenominator}(\text{GenericPropagatorDenominator}(2 \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(q,D))-\text{la} \;\text{Pair}(\text{Momentum}(\text{p1},D),\text{Momentum}(\text{p1},D)),\{1,1\})),\text{LoopMomenta}\to \{\text{p1}\})$$ + +```mathematica +ex = GFAD[{{-SPD[p1, p1], 1}, 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]* + GFAD[{{-SPD[p3, p3], 1}, 1}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]* + SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] + (-2*mg^2*GFAD[{{-SPD[p1, p1], 1}, 2}]* + GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]*GFAD[{{-SPD[p3, p3], 1}, 1}]* + SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]*SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] - + 2*mg^2*GFAD[{{-SPD[p1, p1], 1}, 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], + 1}, 2}]*GFAD[{{-SPD[p3, p3], 1}, 1}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]* + SFAD[{{I*(p3 + q), 0}, {-mb^2, 1}, 1}] - 2*mg^2*GFAD[{{-SPD[p1, p1], 1}, + 1}]*GFAD[{{SPD[p1, -p1 + 2*p3] - SPD[p3, p3], 1}, 1}]*GFAD[{{-SPD[p3, p3], + 1}, 2}]*SFAD[{{I*(p1 + q), 0}, {-mb^2, 1}, 1}]*SFAD[{{I*(p3 + q), 0}, + {-mb^2, 1}, 1}])/2 +``` + +$$\frac{1}{2} \left(-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},2\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)\right)+\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)$$ + +Notice that `FromGFAD` does not expand scalar products in the propagators before trying to convert +them to `SFAD`s or `CFAD`s. If this is needed, the user should better apply `ExpandScalarProduct` to the expression by hand. + +```mathematica +FromGFAD[ex] +``` + +$$\text{FromGFAD}\left(\frac{1}{2} \left(-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},2\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)\right)+\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)\right)$$ + +```mathematica +FromGFAD[ExpandScalarProduct[ex]] +``` + +$$\text{FromGFAD}\left(\text{ExpandScalarProduct}\left(\frac{1}{2} \left(-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},2\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)-2 \;\text{mg}^2 \;\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},2\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)\right)+\text{GFAD}(\{\{-\text{SPD}(\text{p1},\text{p1}),1\},1\}) \;\text{GFAD}(\{\{-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{GFAD}(\{\{\text{SPD}(\text{p1},2 \;\text{p3}-\text{p1})-\text{SPD}(\text{p3},\text{p3}),1\},1\}) \;\text{SFAD}\left(\left\{\{i (\text{p1}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right) \;\text{SFAD}\left(\left\{\{i (\text{p3}+q),0\},\left\{-\text{mb}^2,1\right\},1\right\}\right)\right)\right)$$ + +Using the option `InitialSubstitutions` one can perform certain replacement that might not be found automatically. The values of scalar products can be set using `IntermediateSubstitutions` + +```mathematica +ex = GFAD[{{SPD[k1, k1] - 2*gkin*meta*u0b*SPD[k1, n], 1}, 1}]; +``` + +Notice that we need to declare the appearing variables as `FCVariable`s + +```mathematica +(DataType[#, FCVariable] = True) & /@ {gkin, meta, u0b}; +``` + +Without these options we get a mixed quadratic-eikonal propagator that will cause us troubles when doing topology minimizations. + +```mathematica +FromGFAD[ex, FCE -> True] +% // InputForm +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{\text{SPD}(\text{k1},\text{k1})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{SPD}(\text{k1},n),1\},1\}),\text{FCE}\to \;\text{True})$$ + +```mathematica +FromGFAD[GFAD[{{SPD[k1, k1] - 2*gkin*meta*u0b*SPD[k1, n], 1}, 1}], + FCE -> True] +``` + +But when doing everything right we end up with a purely quadratic propagator + +```mathematica +FromGFAD[ex, InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 - gkin meta u0b n]] -> SPD[k1 - gkin meta u0b n]}, + IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 2}] +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{\text{SPD}(\text{k1},\text{k1})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{SPD}(\text{k1},n),1\},1\}),\text{InitialSubstitutions}\to \{\text{ExpandScalarProduct}(\text{SPD}(\text{k1}-\text{gkin} \;\text{meta} n \;\text{u0b}))\to \;\text{SPD}(\text{k1}-\text{gkin} \;\text{meta} n \;\text{u0b})\},\text{IntermediateSubstitutions}\to \{\text{SPD}(n)\to 0,\text{SPD}(\text{nb})\to 0,\text{SPD}(n,\text{nb})\to 2\})$$ + +However, in this case the function can also figure out the necessary square completion on its own if we tell it that `k1` is a momentum w.r.t which the square should be completed. In this case the option `IntermediateSubstitutions` is not really needed + +```mathematica +FromGFAD[ex, LoopMomenta -> {k1}] +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{\text{SPD}(\text{k1},\text{k1})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{SPD}(\text{k1},n),1\},1\}),\text{LoopMomenta}\to \{\text{k1}\})$$ + +It is still helpful, though + +```mathematica +FromGFAD[ex, LoopMomenta -> {k1}, IntermediateSubstitutions -> {SPD[n] -> 0, SPD[nb] -> 0, SPD[n, nb] -> 2}] +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{\text{SPD}(\text{k1},\text{k1})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} \;\text{SPD}(\text{k1},n),1\},1\}),\text{LoopMomenta}\to \{\text{k1}\},\text{IntermediateSubstitutions}\to \{\text{SPD}(n)\to 0,\text{SPD}(\text{nb})\to 0,\text{SPD}(n,\text{nb})\to 2\})$$ + +If we have multiple loop momenta, we need to first complete the square with respect to them before handling the full expression + +```mathematica +ex = GFAD[{{SPD[k1, k1] + 2 SPD[k1, k2] + SPD[k2, k2] + 2 gkin meta (SPD[k1, n] + SPD[k2, n]), 1}, 1}] +``` + +$$\text{GFAD}(\{\{2 \;\text{gkin} \;\text{meta} (\text{SPD}(\text{k1},n)+\text{SPD}(\text{k2},n))+2 \;\text{SPD}(\text{k1},\text{k2})+\text{SPD}(\text{k1},\text{k1})+\text{SPD}(\text{k2},\text{k2}),1\},1\})$$ + +```mathematica +FromGFAD[ex, LoopMomenta -> {k1, k2}] +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{2 \;\text{gkin} \;\text{meta} (\text{SPD}(\text{k1},n)+\text{SPD}(\text{k2},n))+2 \;\text{SPD}(\text{k1},\text{k2})+\text{SPD}(\text{k1},\text{k1})+\text{SPD}(\text{k2},\text{k2}),1\},1\}),\text{LoopMomenta}\to \{\text{k1},\text{k2}\})$$ + +```mathematica +FromGFAD[ex, LoopMomenta -> {k1, k2}, + InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}, + IntermediateSubstitutions -> {SPD[n] -> 0}] +``` + +$$\text{FromGFAD}(\text{GFAD}(\{\{2 \;\text{gkin} \;\text{meta} (\text{SPD}(\text{k1},n)+\text{SPD}(\text{k2},n))+2 \;\text{SPD}(\text{k1},\text{k2})+\text{SPD}(\text{k1},\text{k1})+\text{SPD}(\text{k2},\text{k2}),1\},1\}),\text{LoopMomenta}\to \{\text{k1},\text{k2}\},\text{InitialSubstitutions}\to \{\text{ExpandScalarProduct}(\text{SPD}(\text{k1}+\text{k2}))\to \;\text{SPD}(\text{k1}+\text{k2})\},\text{IntermediateSubstitutions}\to \{\text{SPD}(n)\to 0\})$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/MomentumCombine.md b/FeynCalc/Documentation/Markdown/MomentumCombine.md new file mode 100644 index 00000000..67d530d9 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/MomentumCombine.md @@ -0,0 +1,170 @@ +## MomentumCombine + +`MomentumCombine[expr]` is the inverse operation to `MomentumExpand` and `ExpandScalarProduct`. `MomentumCombine` combines also `Pair`s. +Notice, that `MomentumCombine` cannot complete squares. It can, however, bring expressions containing scalar products to a suitable form that allows for a square completion using other means. + +This function offers multiple options. + +The option `NumberQ` (default is `True`) specifies whether one should only merge quantities with numerical prefactors or not. Setting it to `False` allows for symbolic prefactors. + +Setting the option `"Quadratic"` to `False` (default is `True`) effectively means that momenta squared will not be combined with anything else. + +With the option `"ExcludeScalarProducts"` we can ensure that scalar products containing any of the momenta listed are not merged with anything else. So `a.x + a.y` can be merged either if `a` contains no such momenta, or if both `x` and `y` are free of them. + +The option `Except` forbids merging the listed momenta with anything else. It is much more restrictive than `"ExcludeScalarProducts"` that allows for merging terms linear in the listed momenta. + +The option `Select` allows for gathering all terms linear in the given momenta before applying any other combining rules. + +### See also + +[Overview](Extra/FeynCalc.md), [ExpandScalarProduct](ExpandScalarProduct.md), [Momentum](Momentum.md), [MomentumExpand](MomentumExpand.md). + +### Examples + +```mathematica +Momentum[p] - 2 Momentum[q] // MomentumCombine // StandardForm + +(*Momentum[p - 2 q]*) +``` + +```mathematica +FV[p, \[Mu]] + 2 FV[q, \[Mu]] + +ex = MomentumCombine[%] +``` + +$$\overline{p}^{\mu }+2 \overline{q}^{\mu }$$ + +$$\left(\overline{p}+2 \overline{q}\right)^{\mu }$$ + +```mathematica +ex // StandardForm + +(*Pair[LorentzIndex[\[Mu]], Momentum[p + 2 q]]*) +``` + +```mathematica +ex // ExpandScalarProduct +``` + +$$\overline{p}^{\mu }+2 \overline{q}^{\mu }$$ + +```mathematica +3 Pair[LorentzIndex[\[Mu]], Momentum[p]] + 2 Pair[LorentzIndex[\[Mu]], Momentum[q]] + +ex = MomentumCombine[%] +``` + +$$3 \overline{p}^{\mu }+2 \overline{q}^{\mu }$$ + +$$\left(3 \overline{p}+2 \overline{q}\right)^{\mu }$$ + +```mathematica +ex // StandardForm + +(*Pair[LorentzIndex[\[Mu]], Momentum[3 p + 2 q]]*) +``` + +In some cases one might need a better control over the types of expressions getting combined. For example, the following +expression will not be combined by default, since the coefficients of scalar products are not numbers + +```mathematica +DataType[a1, FCVariable] = True; +DataType[a2, FCVariable] = True; +``` + +```mathematica +ex = SPD[a1 p, n] + SPD[a2 p, nb] +``` + +$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)$$ + +```mathematica +MomentumCombine[ex] +``` + +$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)$$ + +Setting the option `NumberQ` to `False` we can still achieve the desired form + +```mathematica +MomentumCombine[ex, NumberQ -> False] +``` + +$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p$$ + +However, in the following case combing $p^2$ with the other two scalar products is not useful + +```mathematica +ex = SPD[p] + SPD[a1 p, n] + SPD[a2 p, nb] +``` + +$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)+p^2$$ + +```mathematica +MomentumCombine[ex, NumberQ -> False] +``` + +$$p\cdot (\text{a1} n+\text{a2} \;\text{nb}+p)$$ + +To prevent this from happening there is a somewhat hidden option `"Quadratic"` that can be set to `False` + +```mathematica +MomentumCombine[ex, NumberQ -> False, "Quadratic" -> False] +``` + +$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p+p^2$$ + +```mathematica +ex = SPD[p] + SPD[a1 p, n] + SPD[a2 p, nb] + SPD[p, l] + SPD[p, k] +``` + +$$\text{a1} (n\cdot p)+\text{a2} (\text{nb}\cdot p)+k\cdot p+l\cdot p+p^2$$ + +In this case we we would like to prevent the scalar products involving `l` and `k` from being combined with +the rest. To that end we need to use the option `Except` + +```mathematica +MomentumCombine[ex, NumberQ -> False, "Quadratic" -> False, Except -> {k, l}] +``` + +$$(\text{a1} n+\text{a2} \;\text{nb})\cdot p+k\cdot p+l\cdot p+p^2$$ + +Suppose that we have an expression that can be written as a square. To achieve the desired combination of momenta we need to + +```mathematica +(DataType[#, FCVariable] = True) & /@ {gkin, meta, u0b}; +``` + +```mathematica +ex = SPD[k1, k1] - 2 SPD[k1, k2] + 2 gkin meta SPD[k1, n] - 2 gkin meta u0b SPD[k1, n] - meta u0b SPD[k1, nb] + + SPD[k2, k2] - 2 gkin meta SPD[k2, n] + 2 gkin meta u0b SPD[k2, n] +meta u0b SPD[k2, nb] +``` + +$$-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)+2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)+2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k2}\cdot n)-2 \;\text{gkin} \;\text{meta} (\text{k2}\cdot n)-2 (\text{k1}\cdot \;\text{k2})-\text{meta} \;\text{u0b} (\text{k1}\cdot \;\text{nb})+\text{k1}^2+\text{meta} \;\text{u0b} (\text{k2}\cdot \;\text{nb})+\text{k2}^2$$ + +The naive application of `MomentumCombine` doesn't return anything useful + +```mathematica +MomentumCombine[ex] +``` + +$$\text{meta} \;\text{u0b} ((\text{k2}-\text{k1})\cdot \;\text{nb})+\text{k1}\cdot (\text{k1}-2 \;\text{k2})-2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k1}\cdot n)+2 \;\text{gkin} \;\text{meta} (\text{k1}\cdot n)+2 \;\text{gkin} \;\text{meta} \;\text{u0b} (\text{k2}\cdot n)-2 \;\text{gkin} \;\text{meta} (\text{k2}\cdot n)+\text{k2}^2$$ + +Here we actually want to gather terms linear in `k1` and `k2`first before trying to combine them together. To that aim we can use the option `Select`. +Employing the options `"Quadratic"` and `"ExcludeScalarProducts"` we can prevent `k1` and `k2` from getting combined with anything containing +those momenta. Furthermore, we enable symbolical prefactor by setting `NumberQ` to false + +```mathematica +MomentumCombine[ex, Select -> {k1, k2}, "Quadratic" -> False, "ExcludeScalarProducts" -> {k1, k2}, NumberQ -> False] +``` + +$$\text{k1}\cdot (-2 \;\text{gkin} \;\text{meta} n \;\text{u0b}+2 \;\text{gkin} \;\text{meta} n-\text{meta} \;\text{nb} \;\text{u0b})+\text{k2}\cdot (2 \;\text{gkin} \;\text{meta} n \;\text{u0b}-2 \;\text{gkin} \;\text{meta} n+\text{meta} \;\text{nb} \;\text{u0b})-2 (\text{k1}\cdot \;\text{k2})+\text{k1}^2+\text{k2}^2$$ + +This result looks very good, but `k1` and `k2` were not combined because they are contracted to long linear combinations of 4-momenta that were not properly factorized. The option `Factoring` solves this issue + +```mathematica +res = MomentumCombine[ex, Select -> {k1, k2}, "Quadratic" -> False, "ExcludeScalarProducts" -> {k1, k2}, NumberQ -> False, Factoring -> Factor2] +``` + +$$\text{meta} ((\text{k1}-\text{k2})\cdot (-2 \;\text{gkin} n \;\text{u0b}+2 \;\text{gkin} n-\text{nb} \;\text{u0b}))-2 (\text{k1}\cdot \;\text{k2})+\text{k1}^2+\text{k2}^2$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/ToGFAD.md b/FeynCalc/Documentation/Markdown/ToGFAD.md new file mode 100644 index 00000000..9e58a3b4 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/ToGFAD.md @@ -0,0 +1,68 @@ +## ToGFAD + +`ToGFAD[exp]` converts all occurring propagator types (`FAD`, `SFAD`, `CFAD`) to `GFAD`s. This is mainly useful when doing expansions in kinematic invariants, where e.g. scalar products may not be appear explicitly when using `FAD`- or `SFAD`-notation. + +`ToGFAD` is the inverse operation to `FromGFAD`. + +Using the option "OnlyMixedQuadraticEikonalPropagators" one can limit the conversion to a particular type of standard and Cartesian propagator denominators that contain both quadratic and eikonal pieces. Those are the ones that usually cause issues when doing topology minimization + +### See also + +[Overview](Extra/FeynCalc.md), [GFAD](GFAD.md), [SFAD](SFAD.md), [CFAD](CFAD.md), [FeynAmpDenominatorExplicit](FeynAmpDenominatorExplicit.md), [FromGFAD](FromGFAD.md) + +### Examples + +```mathematica +ToGFAD[FAD[p]] +``` + +$$\frac{1}{(p^2+i \eta )}$$ + +```mathematica +ToGFAD[FAD[p]] // StandardForm + +(*FeynAmpDenominator[GenericPropagatorDenominator[Pair[Momentum[p, D], Momentum[p, D]], {1, 1}]]*) +``` + +```mathematica +ToGFAD[SFAD[{p + q, m^2}]] +``` + +$$\frac{1}{(-m^2+p^2+2 (p\cdot q)+q^2+i \eta )}$$ + +```mathematica +ToGFAD[SFAD[{p + q, m^2}]] // StandardForm + +(*FeynAmpDenominator[GenericPropagatorDenominator[-m^2 + Pair[Momentum[p, D], Momentum[p, D]] + 2 Pair[Momentum[p, D], Momentum[q, D]] + Pair[Momentum[q, D], Momentum[q, D]], {1, 1}]]*) +``` + +```mathematica +ToGFAD[SFAD[{p + q, m^2}], FinalSubstitutions -> {SPD[q] -> 0}] +``` + +$$\frac{1}{(-m^2+p^2+2 (p\cdot q)+i \eta )}$$ + +```mathematica +ToGFAD[SFAD[{p + q, m^2}], FinalSubstitutions -> {SPD[q] -> 0}] // StandardForm + +(*FeynAmpDenominator[GenericPropagatorDenominator[-m^2 + Pair[Momentum[p, D], Momentum[p, D]] + 2 Pair[Momentum[p, D], Momentum[q, D]], {1, 1}]]*) +``` + +This is not a mixed quadratic-eikonal propagator so it remains unchanged + +```mathematica +ToGFAD[SFAD[{{k2, 0}, {0, 1}, 1}], "OnlyMixedQuadraticEikonalPropagators" -> True, + FCE -> True] // StandardForm + +(*SFAD[{{k2, 0}, {0, 1}, 1}]*) +``` + +This is a mixed propagator that will be converted to a `GFAD` + +```mathematica +ToGFAD[SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, + {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, 1}], + "OnlyMixedQuadraticEikonalPropagators" -> True, FCE -> True] // StandardForm + +(*GFAD[{{-2 gkin meta^2 u0b + 2 gkin meta^2 u0b^2 + SPD[k1, k1] + 2 gkin meta SPD[k1, n] - 2 gkin meta u0b SPD[k1, n] - meta u0b SPD[k1, nb], 1}, 1}]*) +``` \ No newline at end of file diff --git a/FeynCalc/Documentation/Markdown/img/189bbth1nyc1e.svg b/FeynCalc/Documentation/Markdown/img/189bbth1nyc1e.svg new file mode 100644 index 00000000..025402c7 --- /dev/null +++ b/FeynCalc/Documentation/Markdown/img/189bbth1nyc1e.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m index 92e3d08b..aaa374c5 100644 --- a/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m +++ b/FeynCalc/Documentation/Mathematica/LoopIntegrals/FromGFAD.m @@ -93,7 +93,7 @@ (* ::Text:: *) (*Notice that `FromGFAD` does not expand scalar products in the propagators before trying to convert*) -(*them to `SFAD`s or `CFAD`s. If this is needed, the user should better apply ExpandScalarProduct to the expression by hand.*) +(*them to `SFAD`s or `CFAD`s. If this is needed, the user should better apply `ExpandScalarProduct` to the expression by hand.*) FromGFAD[ex] diff --git a/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m b/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m index 19b9833b..01ceffed 100644 --- a/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m +++ b/FeynCalc/Documentation/Mathematica/Lorentz/MomentumCombine.m @@ -140,7 +140,7 @@ (* ::Text:: *) (*Here we actually want to gather terms linear in `k1` and `k2`first before trying to combine them together. To that aim we can use the option `Select`.*) -(*Employing the options `"Quadratic"` and `"ExcludeScalarProducts"` we can prevent `k1` and `k2` from getting combined with anything containing *) +(*Employing the options `"Quadratic"` and `"ExcludeScalarProducts"` we can prevent `k1` and `k2` from getting combined with anything containing*) (*those momenta. Furthermore, we enable symbolical prefactor by setting `NumberQ` to false*) diff --git a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m index 355f7db8..9f29af45 100755 --- a/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m +++ b/FeynCalc/LoopIntegrals/FCLoopFindMomentumShifts.m @@ -30,14 +30,14 @@ FCLoopFindMomentumShifts[{FCTopology[...], FCTopology[...]}, FCTopology[...]]. For topologies involving kinematic constraints some mappings may require -shifts not only in the loop but also in the external -momenta. Such shifts are disabled by default but can be activated by setting -the option Momentum to All. +shifts not only in the loop but also in the external momenta. Such shifts are +disabled by default but can be activated by setting the option Momentum to +All. This option can be dangerous, because the amplitude does not necessarily +have to be symmetric under shifts of external momenta! Normally, FCLoopFindMomentumShifts will abort the evaluation if it fails to -find any suitable shifts. Setting the option -Abort to False will force the function to merely return an empty list in such -situations."; +find any suitable shifts. Setting the option Abort to False will force the +function to merely return an empty list in such situations."; FCLoopFindMomentumShifts::failmsg = "Error! FCLoopFindMomentumShifts has encountered a fatal problem and must abort the computation. \ diff --git a/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m b/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m index 6b917b21..81630d8b 100755 --- a/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m +++ b/FeynCalc/LoopIntegrals/FCLoopReplaceQuadraticEikonalPropagators.m @@ -17,13 +17,23 @@ (* ------------------------------------------------------------------------ *) FCLoopReplaceQuadraticEikonalPropagators::usage = -"FCLoopReplaceQuadraticEikonalPropagators[exp] checks if the integral is free of eikonal -propagators $\\frac{1}{p \\cdot q+x}$. If the option First is set to False, -propagators that have both a quadratic and linear piece, e.g. $\\frac{1}{p^2 + -p \\cdot q+x}$ will also count as eikonal propagators. The option Momentum can -be used to check for the presence of eikonal propagators only with respect to -particular momenta. The check is performed only for -StandardPropagatorDenominator and CartesianPropagatorDenominator."; +"FCLoopReplaceQuadraticEikonalPropagators[topologies] identifies SFADs and +CFADs in topologies that represent mixed quadratic-eikonal propagators, e.g. +$[p^2 - 2 p \\cdot q]$. Using the information on loop momenta provided by the +user the routine will try to rewrite those denominators by completing the +square, e.g. as in $[(p-q)^2 - q^2]$. + +This procedure is useful because one cannot easily determine the momentum flow +from looking at quadratic-eikonal propagators as it is possible in the case of +purely quadratic ones. + +For this to work it is crucial to specify the loop momenta via the LoopMomenta +option as well as the kinematics (IntermediateSubstitutions) and the rules for +completing the square (InitialSubstitutions) on the purely loop-momentum +dependent piece of the propagator (e.g. $p_1^2 - 2 p_1 \\cdot p_2 + p_2^2$ goes +to $(p_1+p_2)^2$. + +Internally this routine uses ToGFAD and FromGFAD."; FCLoopReplaceQuadraticEikonalPropagators::failmsg = "FCLoopReplaceQuadraticEikonalPropagators has encountered a fatal problem and must abort the computation. \ diff --git a/FeynCalc/LoopIntegrals/FromGFAD.m b/FeynCalc/LoopIntegrals/FromGFAD.m index d1b5666c..a9068ad0 100755 --- a/FeynCalc/LoopIntegrals/FromGFAD.m +++ b/FeynCalc/LoopIntegrals/FromGFAD.m @@ -21,11 +21,18 @@ standard and Cartesian propagator denominators. The options InitialSubstitutions and IntermediateSubstitutions can be used to -help the function handle nontrivial propagators. +help the function handle nontrivial propagators. In particular, +InitialSubstitutions can define rules for completing the square in the loop +momenta of the propagator, while IntermediateSubstitutions contains relations +for scalar products appearing in those rules. + +Another useful option is LoopMomenta which is particularly helpful when +converting mixed quadratic-eikonal propagators to quadratic ones. For propagators containing symbolic variables it might be necessary to tell the function that those are larger than zero (if applicable), so that -expressions such as $\\sqrt{\\lambda^2}$ can be simplified accordingly."; +expressions such as $\\sqrt{\\lambda^2}$ can be simplified accordingly. To that +aim one should use the option PowerExpand."; FromGFAD::failmsg = "Error! FromGFAD has encountered a fatal problem and must abort the computation. \ diff --git a/FeynCalc/LoopIntegrals/ToGFAD.m b/FeynCalc/LoopIntegrals/ToGFAD.m index 0427d1a5..a233edd6 100755 --- a/FeynCalc/LoopIntegrals/ToGFAD.m +++ b/FeynCalc/LoopIntegrals/ToGFAD.m @@ -22,7 +22,12 @@ where e.g. scalar products may not be appear explicitly when using FAD- or SFAD-notation. -ToGFAD is the inverse operation to FromGFAD."; +ToGFAD is the inverse operation to FromGFAD. + +Using the option \"OnlyMixedQuadraticEikonalPropagators\" one can limit the +conversion to a particular type of standard and Cartesian propagator +denominators that contain both quadratic and eikonal pieces. Those are the +ones that usually cause issues when doing topology minimization"; ToGFAD::failmsg = "Error! ToGFAD has encountered a fatal problem and must abort the computation. \ diff --git a/FeynCalc/Lorentz/MomentumCombine.m b/FeynCalc/Lorentz/MomentumCombine.m index 8f33df94..4e2e8007 100644 --- a/FeynCalc/Lorentz/MomentumCombine.m +++ b/FeynCalc/Lorentz/MomentumCombine.m @@ -17,7 +17,31 @@ MomentumCombine::usage = "MomentumCombine[expr] is the inverse operation to MomentumExpand and -ExpandScalarProduct. MomentumCombine combines also Pairs."; +ExpandScalarProduct. MomentumCombine combines also Pairs. +Notice, that MomentumCombine cannot complete squares. It can, however, bring +expressions containing scalar products to a suitable form that allows for a +square completion using other means. + +This function offers multiple options. + +The option NumberQ (default is True) specifies whether one should only merge +quantities with numerical prefactors or not. Setting it to False allows for +symbolic prefactors. + +Setting the option \"Quadratic\" to False (default is True) effectively means +that momenta squared will not be combined with anything else. + +With the option \"ExcludeScalarProducts\" we can ensure that scalar products +containing any of the momenta listed are not merged with anything else. So a.x ++ a.y can be merged either if a contains no such momenta, or if both x and y +are free of them. + +The option Except forbids merging the listed momenta with anything else. It is +much more restrictive than \"ExcludeScalarProducts\" that allows for merging +terms linear in the listed momenta. + +The option Select allows for gathering all terms linear in the given momenta +before applying any other combining rules."; (* ------------------------------------------------------------------------ *) From a34e1a85cfabf5371a8af0b0bd1d3c423eb5f45c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 8 Aug 2024 15:47:04 +0200 Subject: [PATCH 62/67] Updated example gallery. --- .../Scripts/GenerateExampleGallery.m | 37 + FeynCalc/Documentation/Scripts/exportToMD.sh | 10 +- .../Markdown/GenerateModelEulerHeisenberg.md | 94 + .../{ => Mathematica}/EulerHeisenberg.fr | 10 +- .../GenerateModelEulerHeisenberg.m | 14 +- .../ValidateModelEulerHeisenberg.m | 0 .../Phi3/Markdown/GenerateModelPhi3.md | 93 + .../{ => Mathematica}/GenerateModelPhi3.m | 15 +- .../FeynRules/Phi3/{ => Mathematica}/Phi3.fr | 8 +- .../Phi34/Markdown/GenerateModelPhi34.md | 93 + .../{ => Mathematica}/GenerateModelPhi34.m | 19 +- .../Phi34/{ => Mathematica}/Phi34.fr | 10 +- .../Phi4/Markdown/GenerateModelPhi4.md | 95 + .../{ => Mathematica}/GenerateModelPhi4.m | 17 +- .../FeynRules/Phi4/{ => Mathematica}/Phi4.fr | 8 +- .../QCD/Markdown/GenerateModelQCD.md | 102 + .../QCD/{ => Mathematica}/GenerateModelQCD.m | 11 +- .../FeynRules/QCD/{ => Mathematica}/QCD.fr | 8 +- .../QCD/{ => Mathematica}/ValidateModelQCD.m | 0 .../QCDBGF/Markdown/GenerateModelQCDBGF.md | 251 +++ .../{ => Mathematica}/GenerateModelQCDBGF.m | 17 +- .../QCDBGF/{ => Mathematica}/QCDBGF.fr | 9 +- .../{ => Mathematica}/ValidateModelQCDBGF.m | 0 .../QED/Markdown/GenerateModelQED.md | 95 + .../QED/{ => Mathematica}/GenerateModelQED.m | 14 +- .../FeynRules/QED/{ => Mathematica}/QED.fr | 8 +- .../QED/{ => Mathematica}/ValidateModelQED.m | 0 .../FeynRules/SM/Markdown/GenerateModelSM.md | 103 + .../SM/{ => Mathematica}/GenerateModelSM.m | 8 +- .../Yukawa/Markdown/GenerateModelYukawa.md | 93 + .../{ => Mathematica}/GenerateModelYukawa.m | 14 +- .../Yukawa/{ => Mathematica}/Yukawa.fr | 4 +- .../Tree/Markdown/Ga-QQbar-SoftFunction.md | 238 ++ .../Examples/QCD/Tree/Markdown/GaGl-QQbar.md | 2 +- .../Examples/QCD/Tree/Markdown/GlGl-GlGl.md | 2 +- .../Examples/QCD/Tree/Markdown/QGa-GlQ.md | 2 +- .../Examples/QCD/Tree/Markdown/QQbar-GaGl.md | 2 +- .../QCD/Tree/Markdown/img/0xaadjw4brm8e.pdf | Bin 0 -> 10960 bytes .../QCD/Tree/Markdown/img/0xaadjw4brm8e.svg | 249 +++ .../Examples/QCD/TwoLoops/Markdown/Gh-Gh-2.md | 222 ++ .../Examples/QCD/TwoLoops/Markdown/Gh-Gh.md | 2 +- .../Examples/QCD/TwoLoops/Markdown/Gl-Gl.md | 2 +- .../TwoLoops/Markdown/img/05sh7fbq1em3j.pdf | Bin 0 -> 15112 bytes .../TwoLoops/Markdown/img/05sh7fbq1em3j.svg | 599 +++++ .../TwoLoops/Markdown/img/07bb7u7mnbgfv.pdf | Bin 0 -> 5781 bytes .../TwoLoops/Markdown/img/07bb7u7mnbgfv.svg | 192 ++ .../TwoLoops/Markdown/img/08o391s12dph8.pdf | Bin 0 -> 13268 bytes .../TwoLoops/Markdown/img/08o391s12dph8.svg | 626 ++++++ .../Examples/QED/OneLoop/Markdown/El-GaEl.md | 2 +- .../QED/OneLoop/Markdown/ElAel-ElAel.md | 2 +- .../QED/OneLoop/Markdown/ElAel-ElAel2.md | 477 ++++ .../QED/OneLoop/Markdown/ElAel-MuAmu.md | 2 +- .../QED/OneLoop/Markdown/ElAel-MuAmu2.md | 422 ++++ .../Examples/QED/OneLoop/Markdown/Ga-Ga.md | 2 +- .../Examples/QED/OneLoop/Markdown/Pi-GaGa.md | 122 + .../QED/OneLoop/Markdown/Renormalization.md | 2 +- .../OneLoop/Markdown/img/0x4h8tk2v0r12.pdf | Bin 0 -> 7693 bytes .../OneLoop/Markdown/img/0x4h8tk2v0r12.svg | 259 +++ .../OneLoop/Markdown/img/186v0xvh59vq4.pdf | Bin 0 -> 21808 bytes .../OneLoop/Markdown/img/1b1hbl2j7nsn1.pdf | Bin 0 -> 11398 bytes .../OneLoop/Markdown/img/1b1hbl2j7nsn1.svg | 740 +++++++ FeynCalc/Examples/README.md | 26 +- .../TwoLoops/Markdown/B-EtaC.md | 288 +++ .../TwoLoops/Mathematica/B-EtaC.m | 267 +++ .../Mathematica/RawTopologies-B-Etac.m | 1965 +++++++++++++++++ .../OneLoop/Markdown/Renormalization.md | 351 +++ .../OneLoop/Markdown/img/0f0jiq05y6868.pdf | Bin 0 -> 6330 bytes .../OneLoop/Markdown/img/0f0jiq05y6868.svg | 182 ++ .../OneLoop/Markdown/img/101xx4gtoi8zd.pdf | Bin 0 -> 7393 bytes .../OneLoop/Markdown/img/1g0ppesv184of.pdf | Bin 0 -> 4747 bytes .../OneLoop/Markdown/img/1g0ppesv184of.svg | 141 ++ .../OneLoop/Markdown/img/1nolf6xwdpe1a.pdf | Bin 0 -> 6505 bytes .../OneLoop/Markdown/img/1nolf6xwdpe1a.svg | 225 ++ 73 files changed, 8767 insertions(+), 106 deletions(-) create mode 100644 FeynCalc/Documentation/Scripts/GenerateExampleGallery.m create mode 100644 FeynCalc/Examples/FeynRules/EulerHeisenberg/Markdown/GenerateModelEulerHeisenberg.md rename FeynCalc/Examples/FeynRules/EulerHeisenberg/{ => Mathematica}/EulerHeisenberg.fr (78%) rename FeynCalc/Examples/FeynRules/EulerHeisenberg/{ => Mathematica}/GenerateModelEulerHeisenberg.m (79%) rename FeynCalc/Examples/FeynRules/EulerHeisenberg/{ => Mathematica}/ValidateModelEulerHeisenberg.m (100%) create mode 100644 FeynCalc/Examples/FeynRules/Phi3/Markdown/GenerateModelPhi3.md rename FeynCalc/Examples/FeynRules/Phi3/{ => Mathematica}/GenerateModelPhi3.m (75%) rename FeynCalc/Examples/FeynRules/Phi3/{ => Mathematica}/Phi3.fr (77%) create mode 100644 FeynCalc/Examples/FeynRules/Phi34/Markdown/GenerateModelPhi34.md rename FeynCalc/Examples/FeynRules/Phi34/{ => Mathematica}/GenerateModelPhi34.m (80%) rename FeynCalc/Examples/FeynRules/Phi34/{ => Mathematica}/Phi34.fr (67%) create mode 100644 FeynCalc/Examples/FeynRules/Phi4/Markdown/GenerateModelPhi4.md rename FeynCalc/Examples/FeynRules/Phi4/{ => Mathematica}/GenerateModelPhi4.m (80%) rename FeynCalc/Examples/FeynRules/Phi4/{ => Mathematica}/Phi4.fr (76%) create mode 100644 FeynCalc/Examples/FeynRules/QCD/Markdown/GenerateModelQCD.md rename FeynCalc/Examples/FeynRules/QCD/{ => Mathematica}/GenerateModelQCD.m (83%) rename FeynCalc/Examples/FeynRules/QCD/{ => Mathematica}/QCD.fr (96%) rename FeynCalc/Examples/FeynRules/QCD/{ => Mathematica}/ValidateModelQCD.m (100%) create mode 100644 FeynCalc/Examples/FeynRules/QCDBGF/Markdown/GenerateModelQCDBGF.md rename FeynCalc/Examples/FeynRules/QCDBGF/{ => Mathematica}/GenerateModelQCDBGF.m (84%) rename FeynCalc/Examples/FeynRules/QCDBGF/{ => Mathematica}/QCDBGF.fr (95%) rename FeynCalc/Examples/FeynRules/QCDBGF/{ => Mathematica}/ValidateModelQCDBGF.m (100%) create mode 100644 FeynCalc/Examples/FeynRules/QED/Markdown/GenerateModelQED.md rename FeynCalc/Examples/FeynRules/QED/{ => Mathematica}/GenerateModelQED.m (79%) rename FeynCalc/Examples/FeynRules/QED/{ => Mathematica}/QED.fr (89%) rename FeynCalc/Examples/FeynRules/QED/{ => Mathematica}/ValidateModelQED.m (100%) create mode 100644 FeynCalc/Examples/FeynRules/SM/Markdown/GenerateModelSM.md rename FeynCalc/Examples/FeynRules/SM/{ => Mathematica}/GenerateModelSM.m (84%) create mode 100644 FeynCalc/Examples/FeynRules/Yukawa/Markdown/GenerateModelYukawa.md rename FeynCalc/Examples/FeynRules/Yukawa/{ => Mathematica}/GenerateModelYukawa.m (68%) rename FeynCalc/Examples/FeynRules/Yukawa/{ => Mathematica}/Yukawa.fr (94%) create mode 100644 FeynCalc/Examples/QCD/Tree/Markdown/Ga-QQbar-SoftFunction.md create mode 100644 FeynCalc/Examples/QCD/Tree/Markdown/img/0xaadjw4brm8e.pdf create mode 100644 FeynCalc/Examples/QCD/Tree/Markdown/img/0xaadjw4brm8e.svg create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh-2.md create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.pdf create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.svg create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/07bb7u7mnbgfv.pdf create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/07bb7u7mnbgfv.svg create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.pdf create mode 100644 FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.svg create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel2.md create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu2.md create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/Pi-GaGa.md create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.pdf create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.svg create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/img/186v0xvh59vq4.pdf create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.pdf create mode 100644 FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.svg create mode 100644 FeynCalc/Examples/TopologyIdentification/TwoLoops/Markdown/B-EtaC.md create mode 100644 FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/B-EtaC.m create mode 100644 FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/RawTopologies-B-Etac.m create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/Renormalization.md create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.pdf create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.svg create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/101xx4gtoi8zd.pdf create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1g0ppesv184of.pdf create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1g0ppesv184of.svg create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.pdf create mode 100644 FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.svg diff --git a/FeynCalc/Documentation/Scripts/GenerateExampleGallery.m b/FeynCalc/Documentation/Scripts/GenerateExampleGallery.m new file mode 100644 index 00000000..7ed03a3e --- /dev/null +++ b/FeynCalc/Documentation/Scripts/GenerateExampleGallery.m @@ -0,0 +1,37 @@ +(* ::Package:: *) + +QuitAbort[]:= +If[$FrontEnd===Null, + Quit[], + Abort[] +]; + + +examplesDir="/media/Data/Projects/VS/FeynCalc/FeynCalc/Examples" +galleryFile="/media/Data/Projects/VS/feyncalc.github.io/_pages/examples.md" + + +If[!DirectoryQ[examplesDir], + Print["ERROR! The directory ", examplesDir, " does not exist!" ]; + QuitAbort[] +]; + + +noMDConversion={"WIP","MasterIntegrals","Misc","ReductionTable","ValidateModel","Raw"}; +mFiles=Select[FileNames["*.m",FileNameJoin[{examplesDir}],Infinity],StringFreeQ[#,noMDConversion]&]; +mdFiles=Select[FileNames["*.md",FileNameJoin[{examplesDir}],Infinity],StringFreeQ[#,"README"]&]; + + +aux=Complement[Sort[StringReplace[mFiles,{".m"->".md","Mathematica"->"Markdown"}]],Sort[mdFiles]]; +If[aux=!={}, +Print["ERROR! Missing some markdown files that should be generated from .m files: ", aux]; +QuitAbort[] +] + + +aux=Complement[Sort[StringReplace[Flatten@StringCases[mdFiles,Shortest["FeynCalc/Examples/"~~x__~~".md"]:>x,Infinity],{"Markdown/"->""}]], +Sort[StringCases[Import[galleryFile,"String"],Shortest["(FeynCalcExamples/"~~x__~~")"]:>x,Infinity]]]; +If[aux=!={}, +Print["ERROR! Missing some files in the example gallery: ", aux]; +QuitAbort[] +] diff --git a/FeynCalc/Documentation/Scripts/exportToMD.sh b/FeynCalc/Documentation/Scripts/exportToMD.sh index 331532d5..a48f1660 100755 --- a/FeynCalc/Documentation/Scripts/exportToMD.sh +++ b/FeynCalc/Documentation/Scripts/exportToMD.sh @@ -46,6 +46,12 @@ else noFC="${MAKE_DO_NOT_LOAD_FEYNCALC}" fi +if [[ -z "${FILES_TO_SKIP}" ]]; then + skipFiles="XXXXXXXXXXXXXXXXXXXXXX" +else + skipFiles="${FILES_TO_SKIP}" +fi + scriptDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" MATH=$1 OUTDIR=$2 @@ -60,10 +66,12 @@ allFilesRaw=($(printf "%s\n" "${allFilesRaw[@]}" | sort -V)) declare -a allFiles for i in "${allFilesRaw[@]}"; do name=$(basename -s .m $i) - fullPath=$OUTDIR/$name".md" + fullPath=$OUTDIR/$name".md" if [ -f $fullPath ]; then true #echo "Skipping $name - file already exists." + elif [[ "$name" =~ ${skipFiles} ]]; then + true else #echo "Adding $name"; allFiles+=($i) diff --git a/FeynCalc/Examples/FeynRules/EulerHeisenberg/Markdown/GenerateModelEulerHeisenberg.md b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Markdown/GenerateModelEulerHeisenberg.md new file mode 100644 index 00000000..f98b024e --- /dev/null +++ b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Markdown/GenerateModelEulerHeisenberg.md @@ -0,0 +1,94 @@ +## Euler-Heisenberg Lagrangian model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "EulerHeisenberg.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading gauge group classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{Euler-Heisenberg Effective Field Theory}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LEH, Output -> "EulerHeisenberg", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$1\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }1.$$ + +$$\text{1 vertex obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{EulerHeisenberg}$$ + +$$\text{Writing FeynArts generic file on }\;\text{EulerHeisenberg.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/EulerHeisenberg/EulerHeisenberg.fr b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/EulerHeisenberg.fr similarity index 78% rename from FeynCalc/Examples/FeynRules/EulerHeisenberg/EulerHeisenberg.fr rename to FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/EulerHeisenberg.fr index dc7994dd..4a921d7a 100644 --- a/FeynCalc/Examples/FeynRules/EulerHeisenberg/EulerHeisenberg.fr +++ b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/EulerHeisenberg.fr @@ -1,12 +1,12 @@ -M$ModelName = "Euler-Heisenberg Lagrangian"; +M$ModelName = "Euler-Heisenberg Effective Field Theory"; $FeymanGauge=True; M$Information = { - Authors -> {"V. Shtabovenko"}, - Institutions -> {"Technische Universität München"}, - Emails -> {"v.shtabovenko@tum.de"}, - Date -> "March 2, 2017" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; M$Parameters = { diff --git a/FeynCalc/Examples/FeynRules/EulerHeisenberg/GenerateModelEulerHeisenberg.m b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/GenerateModelEulerHeisenberg.m similarity index 79% rename from FeynCalc/Examples/FeynRules/EulerHeisenberg/GenerateModelEulerHeisenberg.m rename to FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/GenerateModelEulerHeisenberg.m index 8dd26fd8..1e0af5bf 100644 --- a/FeynCalc/Examples/FeynRules/EulerHeisenberg/GenerateModelEulerHeisenberg.m +++ b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/GenerateModelEulerHeisenberg.m @@ -14,7 +14,6 @@ (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*Euler-Heisenberg Lagrangian model for FeynArts*) @@ -24,7 +23,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; <"EulerHeisenberg",CouplingRename->False]; - - - diff --git a/FeynCalc/Examples/FeynRules/EulerHeisenberg/ValidateModelEulerHeisenberg.m b/FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/ValidateModelEulerHeisenberg.m similarity index 100% rename from FeynCalc/Examples/FeynRules/EulerHeisenberg/ValidateModelEulerHeisenberg.m rename to FeynCalc/Examples/FeynRules/EulerHeisenberg/Mathematica/ValidateModelEulerHeisenberg.m diff --git a/FeynCalc/Examples/FeynRules/Phi3/Markdown/GenerateModelPhi3.md b/FeynCalc/Examples/FeynRules/Phi3/Markdown/GenerateModelPhi3.md new file mode 100644 index 00000000..79d4e95b --- /dev/null +++ b/FeynCalc/Examples/FeynRules/Phi3/Markdown/GenerateModelPhi3.md @@ -0,0 +1,93 @@ +## phi^3 model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "Phi3.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{Phi3}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +FR$Loop = True; +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LPhi3, Output -> "Phi3", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$2\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }2.$$ + +$$2\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{Phi3}$$ + +$$\text{Writing FeynArts generic file on }\;\text{Phi3.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/Phi3/GenerateModelPhi3.m b/FeynCalc/Examples/FeynRules/Phi3/Mathematica/GenerateModelPhi3.m similarity index 75% rename from FeynCalc/Examples/FeynRules/Phi3/GenerateModelPhi3.m rename to FeynCalc/Examples/FeynRules/Phi3/Mathematica/GenerateModelPhi3.m index a0226e74..55aee53a 100644 --- a/FeynCalc/Examples/FeynRules/Phi3/GenerateModelPhi3.m +++ b/FeynCalc/Examples/FeynRules/Phi3/Mathematica/GenerateModelPhi3.m @@ -1,6 +1,6 @@ (* ::Package:: *) -(* :Title: GenerateModelPhi3 *) +(* :Title: GenerateModelPhi3 *) (* This software is covered by the GNU General Public License 3. @@ -9,12 +9,11 @@ Copyright (C) 2014-2024 Vladyslav Shtabovenko *) -(* :Summary: Generates FeynArts model for the scalar phi^3 theory *) +(* :Summary: Generates FeynArts model for the scalar phi^3 theory *) (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*phi^3 model for FeynArts*) @@ -24,7 +23,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; < {"V. Shtabovenko"}, - Institutions -> {"Technische Universität München"}, - Emails -> {"v.shtabovenko@tum.de"}, - Date -> "September 1, 2016" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; M$Parameters = diff --git a/FeynCalc/Examples/FeynRules/Phi34/Markdown/GenerateModelPhi34.md b/FeynCalc/Examples/FeynRules/Phi34/Markdown/GenerateModelPhi34.md new file mode 100644 index 00000000..d4070cb6 --- /dev/null +++ b/FeynCalc/Examples/FeynRules/Phi34/Markdown/GenerateModelPhi34.md @@ -0,0 +1,93 @@ +## phi^3+phi^4 model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "Phi34.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{Phi${}^{\wedge}$3 + Phi${}^{\wedge}$4 theories}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +FR$Loop = True; +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LPhi34, Output -> "Phi34", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$3\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }3.$$ + +$$3\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{Phi34}$$ + +$$\text{Writing FeynArts generic file on }\;\text{Phi34.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/Phi34/GenerateModelPhi34.m b/FeynCalc/Examples/FeynRules/Phi34/Mathematica/GenerateModelPhi34.m similarity index 80% rename from FeynCalc/Examples/FeynRules/Phi34/GenerateModelPhi34.m rename to FeynCalc/Examples/FeynRules/Phi34/Mathematica/GenerateModelPhi34.m index 1b64b2d4..86398b8c 100644 --- a/FeynCalc/Examples/FeynRules/Phi34/GenerateModelPhi34.m +++ b/FeynCalc/Examples/FeynRules/Phi34/Mathematica/GenerateModelPhi34.m @@ -25,7 +25,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; <"Phi34",CouplingRename->False]; - - - - - - - - - diff --git a/FeynCalc/Examples/FeynRules/Phi34/Phi34.fr b/FeynCalc/Examples/FeynRules/Phi34/Mathematica/Phi34.fr similarity index 67% rename from FeynCalc/Examples/FeynRules/Phi34/Phi34.fr rename to FeynCalc/Examples/FeynRules/Phi34/Mathematica/Phi34.fr index b136b60b..d44447c2 100644 --- a/FeynCalc/Examples/FeynRules/Phi34/Phi34.fr +++ b/FeynCalc/Examples/FeynRules/Phi34/Mathematica/Phi34.fr @@ -1,10 +1,10 @@ -M$ModelName = "Phi34"; +M$ModelName = "Phi^3 + Phi^4 theories"; M$Information = { - Authors -> {"V. Shtabovenko"}, - Institutions -> {"Technische Universität München"}, - Emails -> {"v.shtabovenko@tum.de"}, - Date -> "September 1, 2016" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; M$Parameters = diff --git a/FeynCalc/Examples/FeynRules/Phi4/Markdown/GenerateModelPhi4.md b/FeynCalc/Examples/FeynRules/Phi4/Markdown/GenerateModelPhi4.md new file mode 100644 index 00000000..c77af767 --- /dev/null +++ b/FeynCalc/Examples/FeynRules/Phi4/Markdown/GenerateModelPhi4.md @@ -0,0 +1,95 @@ +## phi^4 model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "Phi4.fr"}] +LoadModel[frModelPath]; +``` + +$$\text{/media/Data/Projects/VS/FeynCalc/FeynCalc/Examples/./FeynRules/Phi4/Mathematica/Phi4.fr}$$ + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{Phi4}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +FR$Loop = True; +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LPhi4, Output -> "Phi4", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$2\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }2.$$ + +$$2\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{Phi4}$$ + +$$\text{Writing FeynArts generic file on }\;\text{Phi4.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/Phi4/GenerateModelPhi4.m b/FeynCalc/Examples/FeynRules/Phi4/Mathematica/GenerateModelPhi4.m similarity index 80% rename from FeynCalc/Examples/FeynRules/Phi4/GenerateModelPhi4.m rename to FeynCalc/Examples/FeynRules/Phi4/Mathematica/GenerateModelPhi4.m index 8222716a..534893e3 100644 --- a/FeynCalc/Examples/FeynRules/Phi4/GenerateModelPhi4.m +++ b/FeynCalc/Examples/FeynRules/Phi4/Mathematica/GenerateModelPhi4.m @@ -14,7 +14,6 @@ (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*phi^4 model for FeynArts*) @@ -24,7 +23,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; <"Phi4",CouplingRename->False]; - - - - - - diff --git a/FeynCalc/Examples/FeynRules/Phi4/Phi4.fr b/FeynCalc/Examples/FeynRules/Phi4/Mathematica/Phi4.fr similarity index 76% rename from FeynCalc/Examples/FeynRules/Phi4/Phi4.fr rename to FeynCalc/Examples/FeynRules/Phi4/Mathematica/Phi4.fr index a3325679..ea287cbd 100644 --- a/FeynCalc/Examples/FeynRules/Phi4/Phi4.fr +++ b/FeynCalc/Examples/FeynRules/Phi4/Mathematica/Phi4.fr @@ -1,10 +1,10 @@ M$ModelName = "Phi4"; M$Information = { - Authors -> {"V. Shtabovenko"}, - Institutions -> {"Technische Universität München"}, - Emails -> {"v.shtabovenko@tum.de"}, - Date -> "September 1, 2016" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; M$Parameters = diff --git a/FeynCalc/Examples/FeynRules/QCD/Markdown/GenerateModelQCD.md b/FeynCalc/Examples/FeynRules/QCD/Markdown/GenerateModelQCD.md new file mode 100644 index 00000000..8dd46987 --- /dev/null +++ b/FeynCalc/Examples/FeynRules/QCD/Markdown/GenerateModelQCD.md @@ -0,0 +1,102 @@ +## QCD model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}] +<< FeynRules`; +``` + +$$\text{/home/vs/.Mathematica/Applications/FeynRules}$$ + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "QCD.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading gauge group classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{QCD}\;\text{ loaded.}$$ + +```mathematica +FR$Loop = True; +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LQCD, Output -> "QCD", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$9\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }9.$$ + +$$9\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{QCD}$$ + +$$\text{Writing FeynArts generic file on }\;\text{QCD.gen}.$$ + +```mathematica +input = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models", "QCD", "QCD.gen"}]; +tmp = Import[input, "Text"] <> "\n"; +res = StringJoin[{tmp, "GaugeXi[V[5,___]]=GaugeXi[\"G\"]; \n GaugeXi[U[5,___]]=GaugeXi[\"G\"]; \n"}]; +Export[input, res, "Text"]; +``` \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/QCD/GenerateModelQCD.m b/FeynCalc/Examples/FeynRules/QCD/Mathematica/GenerateModelQCD.m similarity index 83% rename from FeynCalc/Examples/FeynRules/QCD/GenerateModelQCD.m rename to FeynCalc/Examples/FeynRules/QCD/Mathematica/GenerateModelQCD.m index 6e8854a3..7f287490 100644 --- a/FeynCalc/Examples/FeynRules/QCD/GenerateModelQCD.m +++ b/FeynCalc/Examples/FeynRules/QCD/Mathematica/GenerateModelQCD.m @@ -14,7 +14,6 @@ (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*QCD model for FeynArts*) @@ -24,7 +23,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}] < {"V. Shtabovenko"}, -Institutions -> {"Technische Universität München"}, -Emails -> {"v.shtabovenko@tum.de"}, -Date -> "July 15, 2017" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; IndexRange[Index[Gluon ]] = NoUnfold[Range[8]]; diff --git a/FeynCalc/Examples/FeynRules/QCD/ValidateModelQCD.m b/FeynCalc/Examples/FeynRules/QCD/Mathematica/ValidateModelQCD.m similarity index 100% rename from FeynCalc/Examples/FeynRules/QCD/ValidateModelQCD.m rename to FeynCalc/Examples/FeynRules/QCD/Mathematica/ValidateModelQCD.m diff --git a/FeynCalc/Examples/FeynRules/QCDBGF/Markdown/GenerateModelQCDBGF.md b/FeynCalc/Examples/FeynRules/QCDBGF/Markdown/GenerateModelQCDBGF.md new file mode 100644 index 00000000..3f0a4916 --- /dev/null +++ b/FeynCalc/Examples/FeynRules/QCDBGF/Markdown/GenerateModelQCDBGF.md @@ -0,0 +1,251 @@ +## QCD BGF model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "QCDBGF.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading gauge group classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{QCD in the background field formalism}\;\text{ loaded.}$$ + +### Generate Feynman rules + +```mathematica +fRules = FeynmanRules[LQCD] +``` + +$$\text{Starting Feynman rule calculation.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$17\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }17.$$ + +$$17\text{ vertices obtained.}$$ + +$$\left( +\begin{array}{cc} + \left( +\begin{array}{cc} + B & 1 \\ + B & 2 \\ + B & 3 \\ +\end{array} +\right) & -\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_1^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_2^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_1^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_3^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_2^{\mu _1}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_3^{\mu _1} \\ + \left( +\begin{array}{cc} + B & 1 \\ + B & 2 \\ + G & 3 \\ +\end{array} +\right) & \frac{\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_2^{\mu _2}}{\text{GaugeXi}(G)}-\frac{\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_1^{\mu _1}}{\text{GaugeXi}(G)}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_1^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_2^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_1^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_3^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_2^{\mu _1}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_3^{\mu _1} \\ + \left( +\begin{array}{cc} + \;\text{ghG}^{\dagger } & 1 \\ + \;\text{ghG} & 2 \\ + B & 3 \\ +\end{array} +\right) & \;\text{gs} f_{\text{a}_3,\text{a}_1,\text{a}_2} \;\text{p}_1^{\mu _3}-\text{gs} f_{\text{a}_3,\text{a}_1,\text{a}_2} \;\text{p}_2^{\mu _3} \\ + \left( +\begin{array}{cc} + B & 1 \\ + B & 2 \\ + B & 3 \\ + B & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + \;\text{ghG}^{\dagger } & 1 \\ + \;\text{ghG} & 2 \\ + B & 3 \\ + B & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _3,\mu _4} f_{\text{a}_3,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_4,\text{a}_1,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _3,\mu _4} f_{\text{a}_3,\text{a}_1,\text{Gluon\$1}} f_{\text{a}_4,\text{a}_2,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + B & 1 \\ + G & 2 \\ + G & 3 \\ +\end{array} +\right) & \frac{\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_3^{\mu _3}}{\text{GaugeXi}(G)}-\frac{\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_2^{\mu _2}}{\text{GaugeXi}(G)}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_1^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_2^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_1^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_3^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_2^{\mu _1}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_3^{\mu _1} \\ + \left( +\begin{array}{cc} + B & 1 \\ + B & 2 \\ + B & 3 \\ + G & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + \;\text{ghG}^{\dagger } & 1 \\ + \;\text{ghG} & 2 \\ + G & 3 \\ +\end{array} +\right) & \;\text{gs} f_{\text{a}_3,\text{a}_1,\text{a}_2} \;\text{p}_1^{\mu _3} \\ + \left( +\begin{array}{cc} + \;\text{ghG}^{\dagger } & 1 \\ + \;\text{ghG} & 2 \\ + B & 3 \\ + G & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _3,\mu _4} f_{\text{a}_3,\text{a}_1,\text{Gluon\$1}} f_{\text{a}_4,\text{a}_2,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + B & 1 \\ + B & 2 \\ + G & 3 \\ + G & 4 \\ +\end{array} +\right) & -\frac{i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}}{\text{GaugeXi}(G)}-\frac{i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}}{\text{GaugeXi}(G)}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + G & 1 \\ + G & 2 \\ + G & 3 \\ +\end{array} +\right) & -\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_1^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _2} \;\text{p}_2^{\mu _3}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_1^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _1,\mu _3} \;\text{p}_3^{\mu _2}-\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_2^{\mu _1}+\text{gs} f_{\text{a}_1,\text{a}_2,\text{a}_3} \eta _{\mu _2,\mu _3} \;\text{p}_3^{\mu _1} \\ + \left( +\begin{array}{cc} + B & 1 \\ + G & 2 \\ + G & 3 \\ + G & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + G & 1 \\ + G & 2 \\ + G & 3 \\ + G & 4 \\ +\end{array} +\right) & i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _4} \eta _{\mu _2,\mu _3} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}+i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _3} \eta _{\mu _2,\mu _4} f_{\text{a}_1,\text{a}_2,\text{Gluon\$1}} f_{\text{a}_3,\text{a}_4,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_4,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_3,\text{Gluon\$1}}-i \;\text{gs}^2 \eta _{\mu _1,\mu _2} \eta _{\mu _3,\mu _4} f_{\text{a}_1,\text{a}_3,\text{Gluon\$1}} f_{\text{a}_2,\text{a}_4,\text{Gluon\$1}} \\ + \left( +\begin{array}{cc} + \overset{-}{\text{dq}} & 1 \\ + \;\text{dq} & 2 \\ + B & 3 \\ +\end{array} +\right) & -i \;\text{gs} \delta _{\text{f}_1,\text{f}_2} T_{\text{m}_1,\text{m}_2}^{\text{a}_3} \gamma _{\text{s}_1,\text{s}_2}{}^{\mu _3} \\ + \left( +\begin{array}{cc} + \overset{-}{\text{uq}} & 1 \\ + \;\text{uq} & 2 \\ + B & 3 \\ +\end{array} +\right) & -i \;\text{gs} \delta _{\text{f}_1,\text{f}_2} T_{\text{m}_1,\text{m}_2}^{\text{a}_3} \gamma _{\text{s}_1,\text{s}_2}{}^{\mu _3} \\ + \left( +\begin{array}{cc} + \overset{-}{\text{dq}} & 1 \\ + \;\text{dq} & 2 \\ + G & 3 \\ +\end{array} +\right) & -i \;\text{gs} \delta _{\text{f}_1,\text{f}_2} T_{\text{m}_1,\text{m}_2}^{\text{a}_3} \gamma _{\text{s}_1,\text{s}_2}{}^{\mu _3} \\ + \left( +\begin{array}{cc} + \overset{-}{\text{uq}} & 1 \\ + \;\text{uq} & 2 \\ + G & 3 \\ +\end{array} +\right) & -i \;\text{gs} \delta _{\text{f}_1,\text{f}_2} T_{\text{m}_1,\text{m}_2}^{\text{a}_3} \gamma _{\text{s}_1,\text{s}_2}{}^{\mu _3} \\ +\end{array} +\right)$$ + +### Create FeynArts model + +```mathematica +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LQCD, Output -> "QCDBGF", CouplingRename -> False,SelectParticles -> { + {ghG, ghGbar, B}, {ghG, ghGbar, B, B}, {B, G, G}, + {ghG, ghGbar, G}, {ghG, ghGbar, B, G}, {B, B, G, G}, + {G, G, G}, {B, G, G, G}, {G, G, G, G}, {uqbar, uq, G}, {dqbar, dq, G}, + {uqbar, uq, B}, {dqbar, dq, B}}]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Selecting specified field content. Warning! Only mass eigenstates should be selected!}$$ + +$$\text{Neglecting all terms with more than }4\text{ particles.}$$ + +$$\text{Neglecting all terms with less than }3\text{ particles.}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$13\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }13.$$ + +$$13\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{QCDBGF}$$ + +$$\text{Writing FeynArts generic file on }\;\text{QCDBGF.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/QCDBGF/GenerateModelQCDBGF.m b/FeynCalc/Examples/FeynRules/QCDBGF/Mathematica/GenerateModelQCDBGF.m similarity index 84% rename from FeynCalc/Examples/FeynRules/QCDBGF/GenerateModelQCDBGF.m rename to FeynCalc/Examples/FeynRules/QCDBGF/Mathematica/GenerateModelQCDBGF.m index 2c759db5..bc9c9289 100644 --- a/FeynCalc/Examples/FeynRules/QCDBGF/GenerateModelQCDBGF.m +++ b/FeynCalc/Examples/FeynRules/QCDBGF/Mathematica/GenerateModelQCDBGF.m @@ -15,7 +15,6 @@ (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*QCD BGF model for FeynArts*) @@ -25,7 +24,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; < {"V. Shtabovenko"}, - Version -> "1.0.0", - Date -> "09. 10. 2014", - Institutions -> {"Technische Universitaet Muenchen"}, - URLs -> "https://github.com/FeynCalc" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; FeynmanGauge = False; diff --git a/FeynCalc/Examples/FeynRules/QCDBGF/ValidateModelQCDBGF.m b/FeynCalc/Examples/FeynRules/QCDBGF/Mathematica/ValidateModelQCDBGF.m similarity index 100% rename from FeynCalc/Examples/FeynRules/QCDBGF/ValidateModelQCDBGF.m rename to FeynCalc/Examples/FeynRules/QCDBGF/Mathematica/ValidateModelQCDBGF.m diff --git a/FeynCalc/Examples/FeynRules/QED/Markdown/GenerateModelQED.md b/FeynCalc/Examples/FeynRules/QED/Markdown/GenerateModelQED.md new file mode 100644 index 00000000..63e4523c --- /dev/null +++ b/FeynCalc/Examples/FeynRules/QED/Markdown/GenerateModelQED.md @@ -0,0 +1,95 @@ +## QED model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}]; +<< FeynRules`; +``` + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{nbDir, "QED.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{Vladyslav Shtabovenko}$$ + +$$\text{Model Version: }0$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading gauge group classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{QED}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +FR$Loop = True; +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LQED, Output -> "QED", CouplingRename -> False]; +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$3\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }3.$$ + +$$3\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{QED}$$ + +$$\text{Writing FeynArts generic file on }\;\text{QED.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/QED/GenerateModelQED.m b/FeynCalc/Examples/FeynRules/QED/Mathematica/GenerateModelQED.m similarity index 79% rename from FeynCalc/Examples/FeynRules/QED/GenerateModelQED.m rename to FeynCalc/Examples/FeynRules/QED/Mathematica/GenerateModelQED.m index 947cbec5..6061d432 100644 --- a/FeynCalc/Examples/FeynRules/QED/GenerateModelQED.m +++ b/FeynCalc/Examples/FeynRules/QED/Mathematica/GenerateModelQED.m @@ -14,7 +14,6 @@ (* ------------------------------------------------------------------------ *) - (* ::Section:: *) (*QED model for FeynArts*) @@ -24,7 +23,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; <"QED",CouplingRename->False]; - - - diff --git a/FeynCalc/Examples/FeynRules/QED/QED.fr b/FeynCalc/Examples/FeynRules/QED/Mathematica/QED.fr similarity index 89% rename from FeynCalc/Examples/FeynRules/QED/QED.fr rename to FeynCalc/Examples/FeynRules/QED/Mathematica/QED.fr index 9603ecc9..76f6c8bd 100644 --- a/FeynCalc/Examples/FeynRules/QED/QED.fr +++ b/FeynCalc/Examples/FeynRules/QED/Mathematica/QED.fr @@ -3,10 +3,10 @@ M$ModelName = "QED"; FeynmanGauge=False; M$Information = { - Authors -> {"V. Shtabovenko"}, - Institutions -> {"Technische Universität München"}, - Emails -> {"v.shtabovenko@tum.de"}, - Date -> "November 2, 2016" + Authors -> {"Vladyslav Shtabovenko"}, + Institutions -> {"FeynCalc project"}, + Emails -> {""}, + Date -> "08.08.2024" }; IndexRange[Index[Generation]] = Range[3]; diff --git a/FeynCalc/Examples/FeynRules/QED/ValidateModelQED.m b/FeynCalc/Examples/FeynRules/QED/Mathematica/ValidateModelQED.m similarity index 100% rename from FeynCalc/Examples/FeynRules/QED/ValidateModelQED.m rename to FeynCalc/Examples/FeynRules/QED/Mathematica/ValidateModelQED.m diff --git a/FeynCalc/Examples/FeynRules/SM/Markdown/GenerateModelSM.md b/FeynCalc/Examples/FeynRules/SM/Markdown/GenerateModelSM.md new file mode 100644 index 00000000..308f4e48 --- /dev/null +++ b/FeynCalc/Examples/FeynRules/SM/Markdown/GenerateModelSM.md @@ -0,0 +1,103 @@ +## SM model for FeynArts + +### Load FeynRules + +```mathematica +FR$Parallel = False; +$FeynRulesPath = FileNameJoin[{$UserBaseDirectory, "Applications", "FeynRules"}] +<< FeynRules`; +``` + +$$\text{/home/vs/.Mathematica/Applications/FeynRules}$$ + +$$\text{ - FeynRules - }$$ + +$$\text{Version: }\;\text{2.3.49}\;\text{ (} \;\text{29 September 2021}\;\text{).}$$ + +$$\text{Authors: A. Alloul, N. Christensen, C. Degrande, C. Duhr, B. Fuks}$$ + +$$$$ + +$$\text{Please cite:}$$ + +$$\text{ - Comput.Phys.Commun.185:2250-2300,2014 (arXiv:1310.1921);}$$ + +$$\text{ - Comput.Phys.Commun.180:1614-1641,2009 (arXiv:0806.4194).}$$ + +$$$$ + +$$\text{http://feynrules.phys.ucl.ac.be}$$ + +$$$$ + +$$\text{The FeynRules palette can be opened using the command FRPalette[].}$$ + +### Load FeynRules model + +```mathematica +If[$FrontEnd === Null, + nbDir = DirectoryName[$InputFileName], + nbDir = NotebookDirectory[] + ]; +``` + +```mathematica +frModelPath = FileNameJoin[{$FeynRulesPath, "Models", "SM", "SM.fr"}]; +LoadModel[frModelPath]; +``` + +$$\text{This model implementation was created by}$$ + +$$\text{N. Christensen}$$ + +$$\text{C. Duhr}$$ + +$$\text{B. Fuks}$$ + +$$\text{Model Version: }\;\text{1.4.7}$$ + +$$\text{http://feynrules.phys.ucl.ac.be/view/Main/StandardModel}$$ + +$$\text{For more information, type ModelInformation[].}$$ + +$$\text{}$$ + +$$\text{ - Loading particle classes.}$$ + +$$\text{ - Loading gauge group classes.}$$ + +$$\text{ - Loading parameter classes.}$$ + +$$\text{$\backslash $nModel }\;\text{Standard Model}\;\text{ loaded.}$$ + +### Create FeynArts model + +```mathematica +SetDirectory[FileNameJoin[{$UserBaseDirectory, "Applications", "FeynCalc", "FeynArts", "Models"}]]; +WriteFeynArtsOutput[LSM, Output -> "SM", CouplingRename -> False]; + +```mathematica + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$98\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }98.$$ + +$$93\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{SM}$$ + +$$\text{Writing FeynArts generic file on }\;\text{SM.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/SM/GenerateModelSM.m b/FeynCalc/Examples/FeynRules/SM/Mathematica/GenerateModelSM.m similarity index 84% rename from FeynCalc/Examples/FeynRules/SM/GenerateModelSM.m rename to FeynCalc/Examples/FeynRules/SM/Mathematica/GenerateModelSM.m index 52d8d5e0..8cb0b86c 100644 --- a/FeynCalc/Examples/FeynRules/SM/GenerateModelSM.m +++ b/FeynCalc/Examples/FeynRules/SM/Mathematica/GenerateModelSM.m @@ -24,7 +24,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}] < "LY", CouplingRename -> False] + +``` + +$$\text{ - - - FeynRules interface to FeynArts - - -}$$ + +$$\text{ C. Degrande C. Duhr, 2013}$$ + +$$\text{ Counterterms: B. Fuks, 2012}$$ + +$$\text{Calculating Feynman rules for }\;\text{L1}$$ + +$$\text{Starting Feynman rules calculation for L1.}$$ + +$$\text{Expanding the Lagrangian...}$$ + +$$\text{Collecting the different structures that enter the vertex.}$$ + +$$4\text{ possible non-zero vertices have been found -$>$ starting the computation: }\;\text{FeynRules$\grave{ }$FR\$FeynmanRules}\;\text{ / }4.$$ + +$$4\text{ vertices obtained.}$$ + +$$\text{mytimecheck,after LGC}$$ + +$$\text{Writing FeynArts model file into directory }\;\text{LY}$$ + +$$\text{Writing FeynArts generic file on }\;\text{LY.gen}.$$ \ No newline at end of file diff --git a/FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m b/FeynCalc/Examples/FeynRules/Yukawa/Mathematica/GenerateModelYukawa.m similarity index 68% rename from FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m rename to FeynCalc/Examples/FeynRules/Yukawa/Mathematica/GenerateModelYukawa.m index 728d151e..36df0e2b 100644 --- a/FeynCalc/Examples/FeynRules/Yukawa/GenerateModelYukawa.m +++ b/FeynCalc/Examples/FeynRules/Yukawa/Mathematica/GenerateModelYukawa.m @@ -9,7 +9,7 @@ FR$Parallel=False; -$FeynRulesPath=SetDirectory[$UserBaseDirectory<>"/Applications/FeynRules"]; +$FeynRulesPath=FileNameJoin[{$UserBaseDirectory,"Applications","FeynRules"}]; < {"Vladyslav Shtabovenko"}, Institutions -> {"FeynCalc project"}, Emails -> {""}, - Date -> "25.03.2024" + Date -> "08.08.2024" }; M$Parameters = { diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/Ga-QQbar-SoftFunction.md b/FeynCalc/Examples/QCD/Tree/Markdown/Ga-QQbar-SoftFunction.md new file mode 100644 index 00000000..c7632daa --- /dev/null +++ b/FeynCalc/Examples/QCD/Tree/Markdown/Ga-QQbar-SoftFunction.md @@ -0,0 +1,238 @@ +--- +title: LO SCET Soft function +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "Ga^* -> Q Qbar, QCD, SCET soft function, tree"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +$LoadAddOns = {"FeynArts"}; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:59:34 +02:00, 2f62a22c). 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.11 (3 Aug 2020) 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}$$ + +## Generate Feynman diagrams + +Nicer typesetting + +```mathematica +FCAttachTypesettingRule[k1, {SubscriptBox, k, 1}] +FCAttachTypesettingRule[k2, {SubscriptBox, k, 2}] +``` + +```mathematica +diagQQ = InsertFields[CreateTopologies[0, 1 -> 2], {V[1]} -> + {F[3, {1}], -F[3, {1}]}, InsertionLevel -> {Classes}, Model -> "SMQCD"]; +Paint[diagQQ, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {512, 256}]; +``` + +![0iknc4lr6azi5](img/0iknc4lr6azi5.svg) + +```mathematica +diagsQQG = InsertFields[CreateTopologies[0, 1 -> 3], {V[1]} -> + {F[3, {1}], -F[3, {1}], V[5]}, InsertionLevel -> {Classes}, + Model -> "SMQCD"]; +Paint[diagsQQG, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {512, 256}]; +``` + +![0xaadjw4brm8e](img/0xaadjw4brm8e.svg) + +## Obtain the amplitudes + +```mathematica +ampQQ[0] = FCFAConvert[CreateFeynAmp[diagQQ], IncomingMomenta -> {p}, + OutgoingMomenta -> {k1, k2}, UndoChiralSplittings -> True, ChangeDimension -> D, + List -> False, SMP -> True, Contract -> True, DropSumOver -> True, + Prefactor -> 3/2 SMP["e_Q"], FinalSubstitutions -> {SMP["m_u"] -> 0}] +``` + +$$\text{e} e_Q \delta _{\text{Col2}\;\text{Col3}} \left(\varphi (k_1)\right).(\gamma \cdot \varepsilon (p)).\left(\varphi (-k_2)\right)$$ + +```mathematica +ampQQG[0] = FCFAConvert[CreateFeynAmp[diagsQQG], IncomingMomenta -> {p}, + OutgoingMomenta -> {k1, k2, k}, UndoChiralSplittings -> True, ChangeDimension -> D, + List -> True, SMP -> True, Contract -> True, DropSumOver -> True, + Prefactor -> 3/2 SMP["e_Q"], FinalSubstitutions -> {SMP["m_u"] -> 0}] +``` + +$$\left\{\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\varphi (k_1)\right).(\gamma \cdot \varepsilon (p)).\left(\gamma \cdot \left(-k-k_2\right)\right).\left(\gamma \cdot \varepsilon ^*(k)\right).\left(\varphi (-k_2)\right)}{(k+k_2){}^2},\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon ^*(k)\right).\left(\gamma \cdot \left(k+k_1\right)\right).(\gamma \cdot \varepsilon (p)).\left(\varphi (-k_2)\right)}{(-k-k_1){}^2}\right\}$$ + +## Fix the kinematics + +quark k1 is collinear so that k1 = n^mu (k1.nb) with k1 ~ (la^2,1,la) +antiquark k2 is anticollinear so that k2 = nb^mu (k2.n) with k2 ~ (1,la^2,la) +gluon k is ultrasoft with k ~ (la^2, la^2, la^2) + +```mathematica +$FCDefaultLightconeVectorN = n; +$FCDefaultLightconeVectorNB = nb; +FCClearScalarProducts[] +ScalarProduct[nb] = 0; +ScalarProduct[n, nb] = 2; +ScalarProduct[n] = 0; +ScalarProduct[k] = 0; +ScalarProduct[k1, n] = 0; +ScalarProduct[k2, nb] = 0; +``` + +```mathematica +LightConePerpendicularComponent[Momentum[k1], Momentum[n], Momentum[nb]] = 0; +LightConePerpendicularComponent[Momentum[k2], Momentum[n], Momentum[nb]] = 0; +LightConePerpendicularComponent[Momentum[k1, D], Momentum[n, D], Momentum[nb, D]] = 0; +LightConePerpendicularComponent[Momentum[k2, D], Momentum[n, D], Momentum[nb, D]] = 0; +``` + +```mathematica +DataType[Q, FCVariable] = True; +DataType[la, FCVariable] = True; +``` + +## Auxiliary code + +This code handles the decomposition of spinors containing only collinear and anticollinear components + +```mathematica +ClearAll[spinorDecomposeD]; +spinorDecomposeD[ex_, cMoms_List, acMoms_List, n_, nb_] := + Block[{expr, holdDOT, res, Pmin, Pplus, hold}, + Pmin = GSD[nb, n]/4; + Pplus = GSD[n, nb]/4; + expr = ex /. DOT -> holdDOT; + expr = expr //. { + (*ubar_xi_c n_slash = 0*) + (*vbar_xi_c n_slash = 0*) + holdDOT[Spinor[c_. Momentum[mom_, D], r___], rest___] /; MemberQ[cMoms, mom] :> + holdDOT[hold[Spinor][c Momentum[mom, D], r], Pmin, rest], + + (*n_slash u_xi_c = 0*) + (*n_slash v_xi_c = 0*) + holdDOT[rest___, Spinor[c_. Momentum[mom_, D], r___]] /; MemberQ[cMoms, mom] :> + holdDOT[rest, Pplus, hold[Spinor][c Momentum[mom, D], r]], + + (*ubar_xi_cbar nbar_slash = 0*) + (*vbar_xi_cbar nbar_slash = 0*) + holdDOT[Spinor[c_. Momentum[mom_, D], r___], rest___] /; MemberQ[acMoms, mom] :> + holdDOT[hold[Spinor][c Momentum[mom, D], r], Pplus, rest], + + (*nbar_slash u_xi_cbar = 0*) + (*nbar_slash v_xi_cbar = 0*) + holdDOT[rest___, Spinor[c_. Momentum[mom_, D], r___]] /; MemberQ[acMoms, mom] :> + holdDOT[rest, Pmin, hold[Spinor][c Momentum[mom, D], r]] + }; + res = expr /. holdDOT -> DOT /. hold -> Identity; + res + ]; +``` + +## Expand and square the amplitudes + +Born amplitude rewritten in terms of large components of the collinear fields + +```mathematica +ampQQ[1] = ampQQ[0] // ToLightConeComponents // spinorDecomposeD[#, {k1}, {k2}, n, nb] & // + DiracSimplify +``` + +$$\text{e} e_Q \delta _{\text{Col2}\;\text{Col3}} \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)-\frac{1}{4} \;\text{e} e_Q \delta _{\text{Col2}\;\text{Col3}} \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)$$ + +```mathematica +ampQQSq[1] = SUNSimplify[ampQQ[1] ComplexConjugate[ampQQ[1]]] // Simplify +``` + +$$\frac{1}{16} \;\text{e}^2 C_A e_Q^2 \left(4 \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)-\left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)\right) \left(4 \left(\varphi (-k_2)\right).\left(\gamma \cdot \varepsilon ^*(p){}_{\perp }\right).\left(\varphi (k_1)\right)-\left(\varphi (-k_2)\right).\left(\gamma \cdot \varepsilon ^*(p){}_{\perp }\right).(\gamma \cdot \;\text{nb}).(\gamma \cdot n).\left(\varphi (k_1)\right)\right)$$ + +Introduce the lightcone components, simplify Dirac algebra, add scaling of k for the expansion + +```mathematica +ampQQG[1] = ampQQG[0] // FeynAmpDenominatorExplicit // ToLightConeComponents // + DiracSimplify // FCReplaceMomenta[#, {k -> la^2 k}] &; +``` + +Expand up to leading power, reorder Dirac matrices + +```mathematica +ampQQG[2] = Series[ampQQG[1], {la, 0, -2}] // Normal // DotSimplify // + DiracSimplify[#, DiracOrder -> {n, nb, Polarization}] & // ReplaceAll[#, la -> 1] & +``` + +$$\left\{-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\text{nb}\cdot \varepsilon ^*(k)\right) (\text{nb}\cdot \varepsilon (p)) \left(\varphi (k_1)\right).(\gamma \cdot n).\left(\varphi (-k_2)\right)}{2 (k\cdot \;\text{nb})}+\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\text{nb}\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot \;\text{nb})}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} (\text{nb}\cdot \varepsilon (p)) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon ^*(k){}_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot \;\text{nb})}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\text{nb}\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{k\cdot \;\text{nb}}+\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\varphi (k_1)\right).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\gamma \cdot \varepsilon ^*(k){}_{\perp }\right).\left(\varphi (-k_2)\right)}{2 (k\cdot \;\text{nb})},\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(n\cdot \varepsilon ^*(k)\right) (n\cdot \varepsilon (p)) \left(\varphi (k_1)\right).(\gamma \cdot \;\text{nb}).\left(\varphi (-k_2)\right)}{2 (k\cdot n)}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(n\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot n)}+\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} (n\cdot \varepsilon (p)) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon ^*(k){}_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot n)}+\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(n\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{k\cdot n}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\varphi (k_1)\right).(\gamma \cdot n).\left(\gamma \cdot \varepsilon ^*(k){}_{\perp }\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{2 (k\cdot n)}\right\}$$ + +Introduce large components of the collinear fields + +```mathematica +ampQQG[3] = ampQQG[2] // spinorDecomposeD[#, {k1}, {k2}, n, nb] & // DiracSimplify +``` + +$$\left\{\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\text{nb}\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot \;\text{nb})}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(\text{nb}\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{k\cdot \;\text{nb}},\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(n\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{k\cdot n}-\frac{\text{e} e_Q g_s T_{\text{Col2}\;\text{Col3}}^{\text{Glu4}} \left(n\cdot \varepsilon ^*(k)\right) \left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)}{4 (k\cdot n)}\right\}$$ + +Square the amplitudes, sum over the gluon polarizations + +```mathematica +ampQQGSq[1] = Total[ampQQG[3]] ComplexConjugate[Total[ampQQG[3]]] // SUNSimplify // + DoPolarizationSums[#, k, aux] & +``` + +$$\frac{\text{e}^2 C_A C_F e_Q^2 g_s^2 \left(4 \left(\varphi (k_1)\right).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)-\left(\varphi (k_1)\right).(\gamma \cdot n).(\gamma \cdot \;\text{nb}).\left(\gamma \cdot \varepsilon (p)_{\perp }\right).\left(\varphi (-k_2)\right)\right) \left(4 \left(\varphi (-k_2)\right).\left(\gamma \cdot \varepsilon ^*(p){}_{\perp }\right).\left(\varphi (k_1)\right)-\left(\varphi (-k_2)\right).\left(\gamma \cdot \varepsilon ^*(p){}_{\perp }\right).(\gamma \cdot \;\text{nb}).(\gamma \cdot n).\left(\varphi (k_1)\right)\right)}{4 (k\cdot n) (k\cdot \;\text{nb})}$$ + +## Final LO soft function + +Divide out the born amplitude squared + +```mathematica +aux = (ampQQGSq[1]/ampQQSq[1]) /. SMP["g_s"] -> Sqrt[4 Pi SMP["alpha_s"]] +``` + +$$\frac{16 \pi C_F \alpha _s}{(k\cdot n) (k\cdot \;\text{nb})}$$ + +Account for the extra prefactor + +```mathematica +pref = 1/(32 Pi^2); +``` + +```mathematica +res = aux pref +``` + +$$\frac{C_F \alpha _s}{2 \pi (k\cdot n) (k\cdot \;\text{nb})}$$ + +## Check the final results + +```mathematica +knownResults = { + (CF*SMP["alpha_s"])/(2*Pi*Pair[Momentum[k, D], Momentum[n, D]]*Pair[Momentum[k, D], Momentum[nb, D]]) + }; +FCCompareResults[{res}, knownResults, + Text -> {"\tCompare to Automation, of Calculations in Soft-Collinear Effective Theory by R. Rahn, Eq. 5.3", + "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; + +```mathematica + +$$\text{$\backslash $tCompare to Automation, of Calculations in Soft-Collinear Effective Theory by R. Rahn, Eq. 5.3} \;\text{CORRECT.}$$ + +$$\text{$\backslash $tCPU Time used: }15.792\text{ s.}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/GaGl-QQbar.md b/FeynCalc/Examples/QCD/Tree/Markdown/GaGl-QQbar.md index 5183e276..12b677c4 100644 --- a/FeynCalc/Examples/QCD/Tree/Markdown/GaGl-QQbar.md +++ b/FeynCalc/Examples/QCD/Tree/Markdown/GaGl-QQbar.md @@ -114,7 +114,7 @@ FCCompareResults[{ampSquaredMasslessSUNN3[0]}, {knownResults}, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 3], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCheck with R. Field, Applications of Perturbative QCD, Eq 4.3.20:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/GlGl-GlGl.md b/FeynCalc/Examples/QCD/Tree/Markdown/GlGl-GlGl.md index c76f0d68..fe714b54 100644 --- a/FeynCalc/Examples/QCD/Tree/Markdown/GlGl-GlGl.md +++ b/FeynCalc/Examples/QCD/Tree/Markdown/GlGl-GlGl.md @@ -180,7 +180,7 @@ FCCompareResults[{ampSquaredMasslessSUNN3[0]}, {knownResults}, Function[x, Simplify[TrickMandelstam[x, {s, t, u, 0}]]]] Print["\tCPU Time used: ", Round[N[TimeUsed[], 3], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to Ellis, Stirling and Weber, QCD and Collider Physics, Table 7.1:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/QGa-GlQ.md b/FeynCalc/Examples/QCD/Tree/Markdown/QGa-GlQ.md index a7d28532..f14bd744 100644 --- a/FeynCalc/Examples/QCD/Tree/Markdown/QGa-GlQ.md +++ b/FeynCalc/Examples/QCD/Tree/Markdown/QGa-GlQ.md @@ -114,7 +114,7 @@ FCCompareResults[{ampSquaredMasslessSUNN3[0]}, {knownResults}, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 3], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCheck with R. Field, Applications of Perturbative QCD, Eq 4.3.10:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/QQbar-GaGl.md b/FeynCalc/Examples/QCD/Tree/Markdown/QQbar-GaGl.md index 21bd15a8..626e07e9 100644 --- a/FeynCalc/Examples/QCD/Tree/Markdown/QQbar-GaGl.md +++ b/FeynCalc/Examples/QCD/Tree/Markdown/QQbar-GaGl.md @@ -113,7 +113,7 @@ FCCompareResults[{ampSquaredMasslessSUNN3[0]}, {knownResults}, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 3], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCheck with R. Field, Applications of Perturbative QCD, Eq 5.2.3:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/Tree/Markdown/img/0xaadjw4brm8e.pdf b/FeynCalc/Examples/QCD/Tree/Markdown/img/0xaadjw4brm8e.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df834603a153f4b6a4e22d153c52fa70fc89cfe2 GIT binary patch literal 10960 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh-2.md b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh-2.md new file mode 100644 index 00000000..46ea61cb --- /dev/null +++ b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh-2.md @@ -0,0 +1,222 @@ +--- +title: QCD ghost self-energy +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "Gh -> Gh, massless QCD, 2-loops"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +$LoadAddOns = {"FeynArts"}; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:59:34 +02:00, 2f62a22c). 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.11 (3 Aug 2020) 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}$$ + +## Generate Feynman diagrams + +Nicer typesetting + +```mathematica +diags = InsertFields[CreateTopologies[2, 1 -> 1, ExcludeTopologies -> {Tadpoles}], {U[5]} -> {U[5]}, + InsertionLevel -> {Classes}, ExcludeParticles -> {V[1 | 2 | 3], S[_]}, Model -> SMQCD]; +``` + +```mathematica +Paint[diags, ColumnsXRows -> {4, 1}, SheetHeader -> False, + Numbering -> True, ImageSize -> {1024, 256}]; +``` + +![05sh7fbq1em3j](img/05sh7fbq1em3j.svg) + +![08o391s12dph8](img/08o391s12dph8.svg) + +![07bb7u7mnbgfv](img/07bb7u7mnbgfv.svg) + +## Obtain the amplitude + +```mathematica +ampRaw = FCFAConvert[CreateFeynAmp[DiagramExtract[diags, {2, 3, 4, 6, 7, 8, 9}], Truncated -> True, + PreFactor -> 1, GaugeRules -> {}], IncomingMomenta -> {p}, OutgoingMomenta -> {p}, LoopMomenta -> {q1, q2}, + UndoChiralSplittings -> True, ChangeDimension -> D, List -> True, SMP -> True, + DropSumOver -> True, FinalSubstitutions -> {MQU[Index[Generation, 3]] -> 0, GaugeXi[_] -> 1 - GaugeXi}] // SMPToSymbol; +``` + +## Fix the kinematics + +```mathematica +FCClearScalarProducts[]; +ScalarProduct[p, p] = pp; +``` + +## Calculate the amplitude + +```mathematica +AbsoluteTiming[ampSimp = (ampRaw) // Contract // DiracSimplify // SUNSimplify;] +``` + +$$\{2.51085,\text{Null}\}$$ + +## Identify and minimize the topologies + +```mathematica +{amp, topos} = FCLoopFindTopologies[ampSimp, {q1, q2}]; +``` + +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }3$$ + +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }3$$ + +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ + +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }0$$ + +```mathematica +subtopos = FCLoopFindSubtopologies[topos]; +``` + +```mathematica +mappings = FCLoopFindTopologyMappings[topos, PreferredTopologies -> subtopos]; +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }2\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }1$$ + +## Rewrite the amplitude in terms of GLIs + +```mathematica +AbsoluteTiming[ampReduced = FCLoopTensorReduce[amp, topos];] +``` + +$$\{1.10573,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampPreFinal = FCLoopApplyTopologyMappings[ampReduced, mappings];] +``` + +$$\{0.38536,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampFinal = ampPreFinal // DiracSimplify // SUNSimplify;] +``` + +$$\{1.55753,\text{Null}\}$$ + +```mathematica +(*FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-Gh-Gh.m"}]];*) +``` + +```mathematica +reductionTable = Get[FileNameJoin[{FCGetNotebookDirectory[], "ReductionTable-Gh-Gh.m"}]]; +``` + +```mathematica +resPreFinal = Collect2[Total[ampFinal /. reductionTable] // FeynAmpDenominatorExplicit, GLI] +``` + +$$\frac{1}{16 (D-6) (D-4)^2}i \;\text{gs}^4 C_A G^{\text{fctopology1}}(0,1,1,0,1) \delta ^{\text{Glu1}\;\text{Glu2}} \left(6 D^5 \xi ^2 C_A-115 D^4 \xi ^2 C_A+2 D^4 \xi C_A+867 D^3 \xi ^2 C_A-130 D^3 \xi C_A-16 D^3 C_A-3216 D^2 \xi ^2 C_A+1188 D^2 \xi C_A+24 D^2 C_A+5884 D \xi ^2 C_A-3840 D \xi C_A+432 D C_A-4256 \xi ^2 C_A+4160 \xi C_A-1024 C_A+16 D^3-128 D^2+320 D-256\right)-\frac{i \;\text{gs}^4 \;\text{pp} C_A^2 \left(2 D^2 \xi ^2-8 D^2 \xi -15 D \xi ^2+58 D \xi -16 D+26 \xi ^2-104 \xi +56\right) G^{\text{fctopology1}}(1,1,0,1,1) \delta ^{\text{Glu1}\;\text{Glu2}}}{32 (D-4)}$$ + +```mathematica +integralMappings = FCLoopFindIntegralMappings[Cases2[resPreFinal, GLI], mappings[[2]]] +``` + +$$\left\{\{\},\left\{G^{\text{fctopology1}}(0,1,1,0,1),G^{\text{fctopology1}}(1,1,0,1,1)\right\}\right\}$$ + +```mathematica +resFinal = Collect2[resPreFinal /. integralMappings[[1]], GLI] +``` + +$$\frac{1}{16 (D-6) (D-4)^2}i \;\text{gs}^4 C_A G^{\text{fctopology1}}(0,1,1,0,1) \delta ^{\text{Glu1}\;\text{Glu2}} \left(6 D^5 \xi ^2 C_A-115 D^4 \xi ^2 C_A+2 D^4 \xi C_A+867 D^3 \xi ^2 C_A-130 D^3 \xi C_A-16 D^3 C_A-3216 D^2 \xi ^2 C_A+1188 D^2 \xi C_A+24 D^2 C_A+5884 D \xi ^2 C_A-3840 D \xi C_A+432 D C_A-4256 \xi ^2 C_A+4160 \xi C_A-1024 C_A+16 D^3-128 D^2+320 D-256\right)-\frac{i \;\text{gs}^4 \;\text{pp} C_A^2 \left(2 D^2 \xi ^2-8 D^2 \xi -15 D \xi ^2+58 D \xi -16 D+26 \xi ^2-104 \xi +56\right) G^{\text{fctopology1}}(1,1,0,1,1) \delta ^{\text{Glu1}\;\text{Glu2}}}{32 (D-4)}$$ + +```mathematica +ruleMasters = { + GLI["fctopology1", {0, 1, 1, 0, 1}] -> (-pp)^(1 - 2*ep)*(13/8 + 1/(4*ep) + (115*ep)/16 + (49*ep^2)/2 - (ep*Zeta2)/4 - (13*ep^2*Zeta2)/8 + (9*ep^2*(9/4 - 2*Zeta[3]))/8 - (5*ep^2*Zeta[3])/12), + GLI["fctopology1", {1, 1, 0, 1, 1}] -> (2 + ep^(-1) + 4*ep + (16*ep^2)/3 - (ep*Zeta2)/2 - ep^2*Zeta2 + (4*ep^2*(2 - 2*Zeta[3]))/3 + (ep^2*Zeta[3])/3)^2/(-pp)^(2*ep) + } +``` + +$$\left\{G^{\text{fctopology1}}(0,1,1,0,1)\to (-\text{pp})^{1-2 \;\text{ep}} \left(-\frac{13}{8} \;\text{ep}^2 \zeta (2)-\frac{5 \;\text{ep}^2 \zeta (3)}{12}+\frac{9}{8} \;\text{ep}^2 \left(\frac{9}{4}-2 \zeta (3)\right)+\frac{49 \;\text{ep}^2}{2}-\frac{1}{4} \;\text{ep} \zeta (2)+\frac{115 \;\text{ep}}{16}+\frac{1}{4 \;\text{ep}}+\frac{13}{8}\right),G^{\text{fctopology1}}(1,1,0,1,1)\to (-\text{pp})^{-2 \;\text{ep}} \left(\text{ep}^2 (-\zeta (2))+\frac{\text{ep}^2 \zeta (3)}{3}+\frac{4}{3} \;\text{ep}^2 (2-2 \zeta (3))+\frac{16 \;\text{ep}^2}{3}-\frac{1}{2} \;\text{ep} \zeta (2)+4 \;\text{ep}+\frac{1}{\text{ep}}+2\right)^2\right\}$$ + +```mathematica +resEpPre = FCReplaceD[resFinal /. ruleMasters, D -> 4 - 2 ep] +``` + +$$\frac{1}{64 (-2 \;\text{ep}-2) \;\text{ep}^2}i \;\text{gs}^4 C_A (-\text{pp})^{1-2 \;\text{ep}} \left(-\frac{13}{8} \;\text{ep}^2 \zeta (2)-\frac{5 \;\text{ep}^2 \zeta (3)}{12}+\frac{9}{8} \;\text{ep}^2 \left(\frac{9}{4}-2 \zeta (3)\right)+\frac{49 \;\text{ep}^2}{2}-\frac{1}{4} \;\text{ep} \zeta (2)+\frac{115 \;\text{ep}}{16}+\frac{1}{4 \;\text{ep}}+\frac{13}{8}\right) \delta ^{\text{Glu1}\;\text{Glu2}} \left(6 (4-2 \;\text{ep})^5 \xi ^2 C_A-115 (4-2 \;\text{ep})^4 \xi ^2 C_A+2 (4-2 \;\text{ep})^4 \xi C_A+867 (4-2 \;\text{ep})^3 \xi ^2 C_A-130 (4-2 \;\text{ep})^3 \xi C_A-3216 (4-2 \;\text{ep})^2 \xi ^2 C_A+1188 (4-2 \;\text{ep})^2 \xi C_A+5884 (4-2 \;\text{ep}) \xi ^2 C_A-3840 (4-2 \;\text{ep}) \xi C_A-16 (4-2 \;\text{ep})^3 C_A+24 (4-2 \;\text{ep})^2 C_A+432 (4-2 \;\text{ep}) C_A-4256 \xi ^2 C_A+4160 \xi C_A-1024 C_A+16 (4-2 \;\text{ep})^3-128 (4-2 \;\text{ep})^2+320 (4-2 \;\text{ep})-256\right)+\frac{1}{64 \;\text{ep}}i \;\text{gs}^4 \;\text{pp} C_A^2 \left(2 (4-2 \;\text{ep})^2 \xi ^2-8 (4-2 \;\text{ep})^2 \xi -15 (4-2 \;\text{ep}) \xi ^2+58 (4-2 \;\text{ep}) \xi -16 (4-2 \;\text{ep})+26 \xi ^2-104 \xi +56\right) (-\text{pp})^{-2 \;\text{ep}} \left(\text{ep}^2 (-\zeta (2))+\frac{\text{ep}^2 \zeta (3)}{3}+\frac{4}{3} \;\text{ep}^2 (2-2 \zeta (3))+\frac{16 \;\text{ep}^2}{3}-\frac{1}{2} \;\text{ep} \zeta (2)+4 \;\text{ep}+\frac{1}{\text{ep}}+2\right)^2 \delta ^{\text{Glu1}\;\text{Glu2}}$$ + +To bring our result into the suitable form comparable with the literature, we must divide it (1- Zeta2/2 ep^2)^2 and again expand it in ep. This yields a prefactor called eta^2. +We also factor out the prefactor (-pp)^(-2ep) + +```mathematica +resEp = Collect2[Series[eta^2/(1 - Zeta2/2 ep^2)^2 FCReplaceD[Cancel[resEpPre/(-pp)^(-2 ep)], D -> 4 - 2 ep], {ep, 0, 0}] // Normal // SUNSimplify, ep, CA, ep] +``` + +$$-\frac{i \;\text{eta}^2 \;\text{gs}^4 \left(\xi ^2-14 \xi -40\right) \;\text{pp} C_A^2 \delta ^{\text{Glu1}\;\text{Glu2}}}{32 \;\text{ep}^2}-\frac{i \;\text{eta}^2 \;\text{gs}^4 \;\text{pp} C_A \delta ^{\text{Glu1}\;\text{Glu2}}}{4 \;\text{ep}^2}+\frac{i \;\text{eta}^2 \;\text{gs}^4 (7 \xi +166) \;\text{pp} C_A^2 \delta ^{\text{Glu1}\;\text{Glu2}}}{32 \;\text{ep}}-\frac{7 i \;\text{eta}^2 \;\text{gs}^4 \;\text{pp} C_A \delta ^{\text{Glu1}\;\text{Glu2}}}{8 \;\text{ep}}-\frac{53}{16} i \;\text{eta}^2 \;\text{gs}^4 \;\text{pp} C_A \delta ^{\text{Glu1}\;\text{Glu2}}-\frac{1}{64} i \;\text{eta}^2 \;\text{gs}^4 \;\text{pp} C_A^2 \left(-24 \xi ^2+9 \xi +12 \xi ^2 \zeta (3)+48 \zeta (3)-1198\right) \delta ^{\text{Glu1}\;\text{Glu2}}$$ + +## Check the final results + +```mathematica +G2xPaper = (((CA^2*eta^2*gs^4)/(-pp)^(2*ep)) * ((83/16 + 7/32*GaugeXi)/ep + (5/4 + 7/16*GaugeXi - 1/32 GaugeXi^2)/ep^2 + + 599/32 - 3/4 Zeta[3] - 9/64 GaugeXi + 3/8 GaugeXi^2 - 3/16 GaugeXi^2 Zeta[3] )/(4*Pi)^D); +``` + +```mathematica +G2qPaper = (((CA*eta^2*gs^4*Tf)/(-pp)^(2*ep))*(-53/8 - 1/(2*ep^2) - 7/(4*ep))/(4*Pi)^D); +``` + +```mathematica +G2xPaperFinal = pp FCI@SUNDelta[Glu1, Glu2] Collect2[Series[FCReplaceD[I (4 Pi)^D Cancel[(G2xPaper)/(-pp)^(-2 ep)], {D -> 4 - 2 ep}], {ep, 0, 0}] // Normal // PowerExpand, ep] +G2qPaperFinal = pp FCI@SUNDelta[Glu1, Glu2] Collect2[Series[FCReplaceD[I (4 Pi)^D Cancel[(G2qPaper)/(-pp)^(-2 ep)], {D -> 4 - 2 ep}], {ep, 0, 0}] // Normal // PowerExpand, ep] /. Tf -> 1/2 +``` + +$$\text{pp} \delta ^{\text{Glu1}\;\text{Glu2}} \left(-\frac{i \;\text{eta}^2 \;\text{gs}^4 \left(\xi ^2-14 \xi -40\right) C_A^2}{32 \;\text{ep}^2}+\frac{i \;\text{eta}^2 \;\text{gs}^4 (7 \xi +166) C_A^2}{32 \;\text{ep}}-\frac{1}{64} i \;\text{eta}^2 \;\text{gs}^4 C_A^2 \left(-24 \xi ^2+9 \xi +12 \xi ^2 \zeta (3)+48 \zeta (3)-1198\right)\right)$$ + +$$\text{pp} \delta ^{\text{Glu1}\;\text{Glu2}} \left(-\frac{i \;\text{eta}^2 \;\text{gs}^4 C_A}{4 \;\text{ep}^2}-\frac{7 i \;\text{eta}^2 \;\text{gs}^4 C_A}{8 \;\text{ep}}-\frac{53}{16} i \;\text{eta}^2 \;\text{gs}^4 C_A\right)$$ + +```mathematica +resLit = G2xPaperFinal + G2qPaperFinal +``` + +$$\text{pp} \delta ^{\text{Glu1}\;\text{Glu2}} \left(-\frac{i \;\text{eta}^2 \;\text{gs}^4 C_A}{4 \;\text{ep}^2}-\frac{7 i \;\text{eta}^2 \;\text{gs}^4 C_A}{8 \;\text{ep}}-\frac{53}{16} i \;\text{eta}^2 \;\text{gs}^4 C_A\right)+\text{pp} \delta ^{\text{Glu1}\;\text{Glu2}} \left(-\frac{i \;\text{eta}^2 \;\text{gs}^4 \left(\xi ^2-14 \xi -40\right) C_A^2}{32 \;\text{ep}^2}+\frac{i \;\text{eta}^2 \;\text{gs}^4 (7 \xi +166) C_A^2}{32 \;\text{ep}}-\frac{1}{64} i \;\text{eta}^2 \;\text{gs}^4 C_A^2 \left(-24 \xi ^2+9 \xi +12 \xi ^2 \zeta (3)+48 \zeta (3)-1198\right)\right)$$ + +```mathematica +FCCompareResults[resLit, resEp, + Text -> {"\tCompare to Davydychev, Osland and Tarasov, hep-ph/9801380, Eqs. 6.14-6.15:", "CORRECT.", "WRONG!"}, + Interrupt -> {Hold[Quit[1]], Automatic}, + Factoring -> Simplify]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], + " s."]; + +```mathematica + +$$\text{$\backslash $tCompare to Davydychev, Osland and Tarasov, hep-ph/9801380, Eqs. 6.14-6.15:} \;\text{CORRECT.}$$ + +$$\text{$\backslash $tCPU Time used: }21.73\text{ s.}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh.md b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh.md index a8671024..b2a1e413 100644 --- a/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh.md +++ b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gh-Gh.md @@ -253,7 +253,7 @@ FCCompareResults[({G2qFinal, G2xiRedFinal, G2xiIrredFinal, G2xFinal} /. {Dot -> Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to Davydychev, Osland and Tarasov, hep-ph/9801380, Eqs. 6.12-6.15:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gl-Gl.md b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gl-Gl.md index a78983a0..f4b999ff 100644 --- a/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gl-Gl.md +++ b/FeynCalc/Examples/QCD/TwoLoops/Markdown/Gl-Gl.md @@ -231,7 +231,7 @@ FCCompareResults[resLit, resEp, Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to Davydychev, Osland and Tarasov, hep-ph/9801380, Eqs. 6.10-6.11:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.pdf b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e7733f184a5ddaa0eb4c8dc824c079c48a01b37 GIT binary patch literal 15112 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 BQJ??- literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.svg b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.svg new file mode 100644 index 00000000..bc2a4fc8 --- /dev/null +++ b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/05sh7fbq1em3j.svg @@ -0,0 +1,599 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/07bb7u7mnbgfv.pdf b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/07bb7u7mnbgfv.pdf new file mode 100644 index 0000000000000000000000000000000000000000..30a5ee8d2def89edf575ae79a5d250eba8ad6e1b GIT binary patch literal 5781 zcmd5=c|26@+qY$Fu|$i+u}hX2V=$6!ED6~|Wf^9MvCJ?t3_^CwRw+w}vS!Pc3Ry$Q znrtPNP-M*-)$fd!r=H&5`+5I-XME1MzvsH|YdP2bz0P%u7-?!tL8alWBKKyCH(BKX z2tcrRW>r=OWb`q3N3s(D2O$$y003mPajs+x5&U&UkujPW2Lc+ys-nV5A`>wvH&*Y| zG^@5)j1I@>l*P+z^(D`)rhO~|0;M#*j-_g0t{wR{G#XnfQ;#nz6y(Q1%U-Ss+U$Y0 zUiABLX?=bs^g^HOV8_(L8hhAU?wIx17Tjj+8|?A72JN?pyp-<}bK^ccKi&pgdwcQJ=rt`j~j}Q*m9IthsetZS~>R{K6nYkjNn$Kzb zpLnq)P40;HOH?U_?7bE;B^w=1YUz93^`Tg?nPq3T08_%tDsI-ggjy1y84A*mBUhL&~HoDMR;I7??74KzzxR*oz$lLi6 zktYo_r>b47Tc*Vca*DgZN!Zv%P3g1vP6%6-8-*{w3*GC&KH%CY@q~~ReENtrg9Ni5 zRzXot03j~nDV|GtQ@;S;F`AHV#MPd2zo<}Wu)0$+mB;fC5hr}bW5AjBBU@v;DVMrh zahDc7i((8chiGJ=;CS)#w9hbn0tkJ5GGMhQL+)%yInmhN$mTbou(-B`M?5a0eHb%j_d+Cgn|d{i@nB}&|Q!278wI1-Yovjk%zAOqKMyt?dXG(*x;Wy6q6 zFN!O@*+bo$yRb!!OC9`a^tlK2VBiP@wAP@!xX{Mh-ylNJ_6E9KVwET77KR3#Tt4TJS-Tm83g!ADS|ycG!0^R zRxghbIe6u?d-W?>#EfII9-Q2Bi8GP&@noEM1M=7zsjHPr%>$-;69!vu4NPGqu9z7G zAK86e!6670@8RnN!j!9=Rg*u(94|Ya z+=SKTKJQ@B-@RaIn*j4-V}p8QRUSpUz=Xan%4MY$g-LxZ$m?HHM20U~cjwvHt`N0t zOpY?f8Db_ZyACjl4G>!pios3k=V)3lrDCJY1n zaSoI_Z(Kiys?)W2*=W<3vZ(>y$ztJw891db<`kGAgzi-I3WKC#PNGLJkBzhi%My#U zK*211T%M-1SmU+ui#GR9u*R5pP;% zu#kzJX$#2pk`GOn8T?;3(N&e!>DLb|l_O2GB9y!JG# zEj_rN^@YeF?icW$QM3Mi;Oo7w^qcUZ66IA7@3nW@d!{|$;a_J|BQWJZeSgzR`zVwJ zdK@>JA!bO6$*PWwrN1YTC~#cjwf1anQc*rLq=32Poewf2_$hWHc%k#eXRp|^1e;yw zR1PJVC)CsSASFbd0s`GkDpx$8n8xUqp@rO9J*12{Z)-!!d`ayk;q-}0aWYpmT*>lta@>QN#I{-1Nsp(`YK=_wjhsjAL_NbUWNiF%CY# zkb!ov+T@Jk85^jwWbmx8KS!UI`Is_s?OGeV?czgp`{30!KXd)hvO4)JYV~h;+VdJe zJ~0)P7Y})LnNFL?tQNG8>JyeQm}&ngl010AMH_jCW;}9C-Nb81dZ$F=hg|?;G2a+w zOjz3TJDOsn=g0z_|k(F#N2CK0_X>I_a>LY;j3-f8$Kl(Xx zS|qYBlY$GAT~Vx<Id`YJL7dz`Bmm8g9?e}( z(bP5MchRHk+T`7(a*yOA7OML$anJmC!r-DeFA4#koq@s{PAmx zInSc*`$Wd?VF&seNtZayj>#Wl;yAAN03Y2uk+56c_j<(;v&gdOvyUy1M|$sEqnpyh z2Izy7B3f2}tYR6`rHo)%hA_pJY1UeK#wMS)yCR&v%_b&Lo^T!~luCO}PPV^)s=8wu zQ{uDvsee)!8n~s{q;oHCSm#UtsjN=stAS#|=YjhX$G!-jycbcLv+Hi9YL93EuR@^! z$CO~9G<||?xo+!ROOIage5Ky9>zB0&yLL|Qnb9Ea@WeQU8_Lo*+h-iB5tUv!g%?*| zDamZ%CPI!uQfS6(j#4p^O;AMu#zQty9)o*8?g z7c(!alJrKojyYp^Z6-c}W$M~YUd6#P6vq3P`5w(W?oaVFkbpg6aqExzz_mJeuKqvBffkGapHB=oI`~RV&pp_HBe?{y^NjJWIJYvFpsBP+ENPZRk^mN~_MjTV#csqizZChNsh_ zYhIV`WRu;C{0n$6=>?*&+&qMJhC*cki+kJoPfbF1y!`8q1u&CiuV;?DVsMsSpqR5n?}972+nqd^|9Eo2>g=D3dGn2YaY!xc z$Vq!0)?7T~*@|8$Lks%$a&kA0iwt^PkdgQHD!6j9>3L+p{gHK!*|hyxdHxH#Uaqt* z@K4dSU1Y`J(LeeG@IPvYL2WCjzhGklgF>KG0qPL;s{z?=IkddVI;Lc>-2jx8sQ~zq zK|#O)AcIr~pn!}63cP|%2zcZBRYseDC;ujmm4Zk?0QsLy3@8Nt{ZJM{kd+Jqt*k#m;_BdE&gTS+UuwG@yD_ zZ7$ujP*u2EYa@VnU1hUX*|>FV-sVgo0&3M?rqO3*zcdPUp;O1aH-Ng4z6p)0u%s`1U=qGh=n- zDmxB+75bo)`@S&zp!u^7MQj@8(X-C{)!e{)1LcyEs@H{HHmg_{r3mF63(y|mj4c$o zmm+rfo%cxRh`I7DqVwU_!b{g<&Q>G3DDze|&ih+mPL!{8)jTyeu{5(WYQ18cIDECg zljG&#W2z*W&SXMD`6pZVr{^o?8XJ!DGOhAj5o=N$^wvgNvN62Q(A%}6y*>wnc)1bq zwwNotp0xfRB%#nj8%BGxZUFCkd3A*Z;Rp-}-Vlz6sdXGOrvKH+m~rd&F1$O8(r{ zrmuO!e1UvxPVIifyRVO#KDMhI zN#F8;e0RD?jQe1>dtDbxZr6+YEQWx#PDC$jbvz4wErjN^E&6gQKWgp#-2L2ui;HYx z%Pb5oXCY3X93sZXG=- zxi;k-ALLdV>C9Vn{L=dmK9XRIp-em;Nw3UC9p65=AqzR z59Hsm+z!!?V9LT|e+CmurHP+g?)yfkvXCZ*>{TM@kctTy^pJ)Qx@&2BvT6pjn z3Ws+DWGrxabvz086WCtJ0*59$k$zA%HNF3TeBp3v4FB7gdUw05faQT;j>l2Y*#PQ( z{rw^QopIFCMcVdS4~M4uOs#GvzY3HmwVM4_C7{0-zf+!W;0$oG_3sk@)MBtO5(#Ke z2k`Vy+<}_408|oycT&B^j^`gP|FhG%=Fm5O^&H?qC1df2$q!xK`S%|D0L=ggJFa#>6c;>r^0RjDA?*3ECp}(J8 ze&2#f6u3bMj@x!@2j{nHP95u`>@lt+U^@`Mht`{j!LmXCD4Z4Y>jTKc;V?LW1%6;~ zh#bhP)DM9FiNRp9;7iTFFj*-0sQ<(u5a{1>Py`t5Kjq});owvM6NABFe_?VE`M-34 zLHx@;IT+$^Ob(=#f9Zfjp?}!|hsuF8@TV + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.pdf b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d06b0230c36bb68f1c0c8405f44011c75508d031 GIT binary patch literal 13268 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 V>>Ynw9LUVc2}Go%6qOT0{2%bG_Z|QM literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.svg b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.svg new file mode 100644 index 00000000..5869804a --- /dev/null +++ b/FeynCalc/Examples/QCD/TwoLoops/Markdown/img/08o391s12dph8.svg @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/El-GaEl.md b/FeynCalc/Examples/QED/OneLoop/Markdown/El-GaEl.md index 5a049cce..859dc5e0 100644 --- a/FeynCalc/Examples/QED/OneLoop/Markdown/El-GaEl.md +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/El-GaEl.md @@ -155,7 +155,7 @@ FCCompareResults[f2[0], knownResult, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to J. Schwinger, Phys. Rev. 73, 416-417, 1948:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel.md b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel.md index dac85883..7f32408f 100644 --- a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel.md +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel.md @@ -366,7 +366,7 @@ FCCompareResults[0, diff, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to arXiv:hep-ph/0010075:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel2.md b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel2.md new file mode 100644 index 00000000..d58a16bb --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-ElAel2.md @@ -0,0 +1,477 @@ +```mathematica +(* :Title: ElAel-ElAel2 *) + + (* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko + *) + + (* :Summary: El Ael -> El Ael, QED, Born-virtual, 1-loop *) + + (* ------------------------------------------------------------------------ *) + +``` + +--- +title: Bhabha scattering +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "El Ael -> El Ael, QED, Born-virtual, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +$LoadAddOns = {"FeynArts"}; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:25:42 +02:00, 2b43b48d). 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.11 (3 Aug 2020) 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}$$ + +## Generate Feynman diagrams + +Nicer typesetting + +```mathematica +FCAttachTypesettingRule[p1, {SubscriptBox, "p", "1"}] +FCAttachTypesettingRule[p2, {SubscriptBox, "p", "2"}] +FCAttachTypesettingRule[k1, {SubscriptBox, "k", "1"}] +FCAttachTypesettingRule[k2, {SubscriptBox, "k", "2"}] +``` + +```mathematica +diagsTree = InsertFields[CreateTopologies[0, 2 -> 2, + ExcludeTopologies -> {Tadpoles, WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2, {1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; +Paint[diagsTree, ColumnsXRows -> {6, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 256}]; +``` + +![0x4h8tk2v0r12](img/0x4h8tk2v0r12.svg) + +```mathematica +diagsLoop = InsertFields[CreateTopologies[1, 2 -> 2, + ExcludeTopologies -> {Tadpoles, WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2, {1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; +Paint[DiagramExtract[diagsLoop, 1 .. 8, 9, 11], ColumnsXRows -> {4, 3}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 480}]; +``` + +![186v0xvh59vq4](img/186v0xvh59vq4.svg) + +```mathematica +diagsLoopCT = InsertFields[CreateCTTopologies[1, 2 -> 2, ExcludeTopologies -> {Tadpoles, WFCorrectionCTs}], + {F[2, {1}], -F[2, {1}]} -> {F[2, {1}], -F[2, {1}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; + +Paint[diagsLoopCT, ColumnsXRows -> {4, 3}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 480}]; +``` + +![1b1hbl2j7nsn1](img/1b1hbl2j7nsn1.svg) + +## Obtain the amplitudes + +```mathematica +ampLoopCT[0] = FCFAConvert[CreateFeynAmp[diagsLoopCT, Truncated -> False, PreFactor -> 1] //. + {(h : dZfL1 | dZfR1)[z__] :> dZf1[z], Conjugate[(h : dZfL1 | dZfR1)[z__]] :> dZf1[z], dZZA1 -> 0}, + IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {k1, k2}, LoopMomenta -> {l}, ChangeDimension -> D, + DropSumOver -> True, UndoChiralSplittings -> True, SMP -> True, + FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +```mathematica +ampLoop[0] = FCFAConvert[CreateFeynAmp[DiagramExtract[diagsLoop, 1 .. 8, 9, 11], + Truncated -> False, PreFactor -> 1], IncomingMomenta -> {p1, p2},OutgoingMomenta -> {k1, k2}, + LoopMomenta -> {q}, ChangeDimension -> D, DropSumOver -> True, UndoChiralSplittings -> True, + SMP -> True, FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +```mathematica +ampTree[0] = FCFAConvert[CreateFeynAmp[diagsTree, Truncated -> False, PreFactor -> 1], + IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {k1, k2}, + ChangeDimension -> D, DropSumOver -> True, UndoChiralSplittings -> True, + SMP -> True, FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +## Fix the kinematics + +```mathematica +FCClearScalarProducts[]; +SetMandelstam[-t - u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0] +``` + +$$\left( +\begin{array}{cccccccccccccccccccccccccccccccccccccccc} + 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 \\ +\end{array} +\right)$$ + +## Evaluate the amplitudes + +```mathematica +ampTree[1] = + (FCTraceFactor /@ DotSimplify[#, Expanding -> False] & /@ ampTree[0]); +``` + +```mathematica +ampTree[2] = (Total[ampTree[1]] // Contract // DiracSimplify) // FeynAmpDenominatorExplicit // + FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu}] & +``` + +$$\frac{i \;\text{e}^2 \left(\varphi (k_1)\right).\gamma ^{\text{mu}}.\left(\varphi (p_1)\right) \left(\varphi (-p_2)\right).\gamma ^{\text{mu}}.\left(\varphi (-k_2)\right)}{t}-\frac{i \;\text{e}^2 \left(\varphi (k_1)\right).\gamma ^{\text{mu}}.\left(\varphi (-k_2)\right) \left(\varphi (-p_2)\right).\gamma ^{\text{mu}}.\left(\varphi (p_1)\right)}{-t-u}$$ + +```mathematica +ampLoopCT[1] = + (FCTraceFactor /@ DotSimplify[#, Expanding -> False] & /@ ampLoopCT[0]); +``` + +```mathematica +amlLoop[0] = Join[ampLoop[0][[1 ;; 8]], Nf ampLoop[0][[9 ;; 9]], Nf ampLoop[0][[10 ;; 10]]]; +``` + +```mathematica +AbsoluteTiming[amlLoop[1] = amlLoop[0] // Contract // DiracSimplify;] +``` + +$$\{0.783734,\text{Null}\}$$ + +## Identify and minimize the topologies + +```mathematica +{amlLoop[2], topos} = FCLoopFindTopologies[amlLoop[1], {q}]; +``` + +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }9$$ + +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }6$$ + +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ + +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }3$$ + +```mathematica +subtopos = FCLoopFindSubtopologies[topos]; +``` + +```mathematica +mappings = FCLoopFindTopologyMappings[topos, PreferredTopologies -> subtopos]; +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology2R1 and fctopology1R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology4 and fctopology1R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology1R1 and fctopology2R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology3R1 and fctopology1R2. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology5 and fctopology1R2. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology1R2 and fctopology3R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }3\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }3$$ + +## Rewrite the amplitude in terms of GLIs + +```mathematica +AbsoluteTiming[ampReduced = FCLoopTensorReduce[amlLoop[2], topos];] +``` + +$$\{2.69253,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampPreFinal = FCLoopApplyTopologyMappings[ampReduced, mappings];] +``` + +$$\{4.4472,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampFinal = ampPreFinal // DiracSimplify // FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu, nu, rho}] & // FeynAmpDenominatorExplicit // Collect2[#, DOT] &;] +``` + +$$\{15.8274,\text{Null}\}$$ + +```mathematica +(*FCClearScalarProducts[]; +FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-ElAel.m"}]]; +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0];*) +``` + +```mathematica +reductionTable = Get[FileNameJoin[{FCGetNotebookDirectory[], "ReductionTable-ElAel-ElAel.m"}]]; +``` + +```mathematica +resPreFinal = Collect2[Total[ampFinal /. reductionTable], GLI]; +``` + +```mathematica +integralMappings = FCLoopFindIntegralMappings[Cases2[resPreFinal, GLI], mappings[[2]]] +``` + +$$\left\{\left\{G^{\text{fctopology2}}(0,1,0,1)\to G^{\text{fctopology1}}(0,1,0,1),G^{\text{fctopology3}}(0,1,0,1)\to G^{\text{fctopology1}}(1,0,1,0),G^{\text{fctopology3}}(1,0,1,0)\to G^{\text{fctopology2}}(1,0,1,0)\right\},\left\{G^{\text{fctopology1}}(0,1,0,1),G^{\text{fctopology1}}(1,0,1,0),G^{\text{fctopology1}}(1,1,1,1),G^{\text{fctopology2}}(1,0,1,0),G^{\text{fctopology2}}(1,1,1,1),G^{\text{fctopology3}}(1,1,1,1)\right\}\right\}$$ + +```mathematica +resFinal = Collect2[(resPreFinal /. integralMappings[[1]]), GLI]; +``` + +Obtain the Born-virtual interference term + +```mathematica +(*about 10 seconds*) + AbsoluteTiming[bornVirtualUnrenormalized[0] = + Collect2[resFinal, Spinor, LorentzIndex, IsolateNames -> KK] * + ComplexConjugate[ampTree[2]] // + FermionSpinSum[#, ExtraFactor -> 1/2^2] & // DiracSimplify // + FRH // Collect2[#, GLI] &;] +``` + +$$\{9.26055,\text{Null}\}$$ + +Master integrals using the standard textbook normalization + +```mathematica +ruleMasters = {GLI["fctopology1", {0, 1, 0, 1}] -> (I/16)/(ep*Pi^2) + (2*I - I*EulerGamma + Pi)/(16*Pi^2) + + (ep*(48*I - (24*I)*EulerGamma + (6*I)*EulerGamma^2 + 24*Pi - 12*EulerGamma*Pi - (7*I)*Pi^2))/ + (192*Pi^2) + ((I/8)*Log[2])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[2])/(8*Pi^2) + ((I/8)*ep*Log[2]^2)/Pi^2 + + ((I/16)*Log[Pi])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[Pi])/(16*Pi^2) + + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-t - u])/Pi^2 - + (ep*(2*I - I*EulerGamma + Pi)*Log[-t - u])/(16*Pi^2) - ((I/8)*ep*Log[2]*Log[-t - u])/Pi^2 - + ((I/16)*ep*Log[Pi]*Log[-t - u])/Pi^2 + ((I/32)*ep*Log[-t - u]^2)/Pi^2, + GLI["fctopology1", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - + ((I/16)*Log[-t])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-t])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-t])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-t])/Pi^2 + ((I/32)*ep*Log[-t]^2)/Pi^2, + GLI["fctopology2", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-u])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-u])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-u])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-u])/Pi^2 + + ((I/32)*ep*Log[-u]^2)/Pi^2, GLI["fctopology1", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*t*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*t*(t + u)) - ((I/2)*Log[2])/(ep*Pi^2*t*(t + u)) + + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*t*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*t*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*t*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*t*(t + u)) + ((I/8)*Log[-t])/(ep*Pi^2*t*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-t])/(8*Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*t*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*t*(t + u)) - ((I/8)*Log[-t]*Log[-t - u])/(Pi^2*t*(t + u)), + GLI["fctopology2", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*u*(t + u)) + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*u*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*u*(t + u)) - + ((I/2)*Log[2])/(ep*Pi^2*u*(t + u)) + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*u*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*u*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*u*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*u*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*u*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*u*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*u*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/8)*Log[-u])/(ep*Pi^2*u*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-u])/(8*Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-u])/(Pi^2*u*(t + u)) - ((I/8)*Log[-t - u]*Log[-u])/(Pi^2*u*(t + u)), + GLI["fctopology3", {1, 1, 1, 1}] -> (I/4)/(ep^2*Pi^2*t*u) - ((I/4)*EulerGamma)/(ep*Pi^2*t*u) + + ((I/24)*(3*EulerGamma^2 - 2*Pi^2))/(Pi^2*t*u) + ((I/2)*Log[2])/(ep*Pi^2*t*u) - + ((I/2)*EulerGamma*Log[2])/(Pi^2*t*u) + ((I/2)*Log[2]^2)/(Pi^2*t*u) + ((I/4)*Log[Pi])/(ep*Pi^2*t*u) - + ((I/4)*EulerGamma*Log[Pi])/(Pi^2*t*u) + ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*u) + + ((I/8)*Log[Pi]^2)/(Pi^2*t*u) - ((I/8)*Log[-t])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-t])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*u) - + ((I/8)*Log[-u])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-u])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-u])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-u])/(Pi^2*t*u) + ((I/8)*Log[-t]*Log[-u])/(Pi^2*t*u)}; +``` + +```mathematica +bornVirtualUnrenormalized[1] = Collect2[FCReplaceD[(bornVirtualUnrenormalized[0] /. ruleMasters), D -> 4 - 2 ep], ep, + IsolateNames -> KK] // Series[#, {ep, 0, 0}] & // Normal // FRH // Collect2[#, ep] &; +``` + +The explicit expressions for the PaVe functions can be obtained e.g. using Package-X / PaXEvaluate + +Put together the counter-term contribution. The wave-function renormalization must be done in the OS scheme, which gives no contribution due to massless electrons and muons. + +```mathematica +MSbarRC = { + SMP["dZ_psi"] -> 0, + SMP["dZ_A"] -> - Nf SMP["e"]^2/(12 Pi^2) (1/ep - EulerGamma + Log[4 Pi]) + }; +``` + +```mathematica +RuleRS = { + dZe1 -> - 1/2 SMP["dZ_A"], + dZAA1 -> SMP["dZ_A"], + (dZf1 | dZf2)[__] -> SMP["dZ_psi"] + }; +``` + +```mathematica +fullCTAndResidue[0] = (Total[ampLoopCT[1]] /. RuleRS /. MSbarRC) // FeynAmpDenominatorExplicit // Contract // + DiracSimplify // FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu}] &; +``` + +Get the interference of the counter term and residue contribution with the Born amplitude + +```mathematica +bornCTAndResidue[0] = fullCTAndResidue[0] ComplexConjugate[ampTree[2]] // FermionSpinSum[#, ExtraFactor -> 1/2^2] & // + DiracSimplify // Simplify // FCReplaceD[#, D -> 4 - 2 ep] & // Series[#, {ep, 0, 0}] & // Normal +``` + +$$\frac{\text{e}^6 N_f \left(t^4+2 t^3 u+3 t^2 u^2+2 t u^3+u^4\right)}{3 \pi ^2 \;\text{ep} t^2 (t+u)^2}+\frac{\text{e}^6 N_f \left(4 t^2 u^2-4 (\gamma -\log (4 \pi )) \left(t^4+2 t^3 u+3 t^2 u^2+2 t u^3+u^4\right)+4 t u^3\right)}{12 \pi ^2 t^2 (t+u)^2}$$ + +Finally, we obtain the UV-finite but IR-divergent Born-virtual interference term + +```mathematica +bornVirtualRenormalized[0] = (bornVirtualUnrenormalized[1] + bornCTAndResidue[0]) // Collect2[#, ep] &; +``` + +Introduce the prefactor from the literature that removes $\Gamma_E$ and logs of $\pi$ + +```mathematica +bornVirtualRenormalized[1] = Series[FCReplaceD[1/Exp[ep (Log[4 Pi] - EulerGamma)] bornVirtualRenormalized[0], D -> 4 - 2 ep], {ep, 0, 0}] // Normal // + ReplaceAll[#, Log[4 Pi] -> 2 Log[2] + Log[Pi]] & // Collect2[#, ep] & +``` + +$$-\frac{\left(t^2+u t+u^2\right)^2 \;\text{e}^6}{\text{ep}^2 \pi ^2 t^2 (t+u)^2}+\frac{1}{2 \;\text{ep} \pi ^2 t^2 (t+u)^2}\left(2 \log (-t) t^4+2 \log (-t-u) t^4-2 \log (-u) t^4+2 i \pi t^4-3 t^4+4 i \pi u t^3-6 u t^3+4 u \log (-t) t^3+4 u \log (-t-u) t^3-4 u \log (-u) t^3+6 i \pi u^2 t^2-11 u^2 t^2+6 u^2 \log (-t) t^2+6 u^2 \log (-t-u) t^2-6 u^2 \log (-u) t^2+4 i \pi u^3 t-8 u^3 t+4 u^3 \log (-t) t+4 u^3 \log (-t-u) t-4 u^3 \log (-u) t+2 i \pi u^4-3 u^4+2 u^4 \log (-t)+2 u^4 \log (-t-u)-2 u^4 \log (-u)\right) \;\text{e}^6+\frac{1}{72 \pi ^2 t^2 (t+u)^2}\left(-9 \log ^2(-t) t^4-9 \log ^2(-t-u) t^4+18 \log ^2(-u) t^4-40 N_f t^4+12 N_f \log (-t) t^4-72 i \pi \log (-t) t^4+72 \log (-t) t^4+12 N_f \log (-t-u) t^4-72 \log (-t) \log (-t-u) t^4-18 i \pi \log (-t-u) t^4+72 \log (-t-u) t^4+18 \log (-t) \log (-u) t^4+18 \log (-t-u) \log (-u) t^4+18 i \pi \log (-u) t^4-36 \log (-u) t^4+33 \pi ^2 t^4+12 i N_f \pi t^4+72 i \pi t^4-216 t^4-36 u \log ^2(-t) t^3+36 u \log ^2(-u) t^3-80 N_f u t^3+48 \pi ^2 u t^3+18 i \pi u t^3-432 u t^3+48 N_f u \log (-t) t^3-144 i \pi u \log (-t) t^3+270 u \log (-t) t^3+18 u \log (-t-u) t^3-144 u \log (-t) \log (-t-u) t^3-72 u \log (-u) t^3+72 u \log (-t) \log (-u) t^3-120 N_f u^2 t^2+63 \pi ^2 u^2 t^2+72 i \pi u^2 t^2-900 u^2 t^2-36 u^2 \log ^2(-t) t^2+18 u^2 \log ^2(-t-u) t^2+36 u^2 \log ^2(-u) t^2+72 N_f u^2 \log (-t) t^2-270 i \pi u^2 \log (-t) t^2+450 u^2 \log (-t) t^2+36 i \pi u^2 \log (-t-u) t^2+72 u^2 \log (-t-u) t^2-270 u^2 \log (-t) \log (-t-u) t^2+18 i \pi u^2 \log (-u) t^2-126 u^2 \log (-u) t^2+126 u^2 \log (-t) \log (-u) t^2+18 u^2 \log (-t-u) \log (-u) t^2-80 N_f u^3 t+12 \pi ^2 u^3 t-12 i N_f \pi u^3 t+18 i \pi u^3 t-684 u^3 t-45 u^3 \log ^2(-t) t+45 u^3 \log ^2(-t-u) t+18 u^3 \log ^2(-u) t+60 N_f u^3 \log (-t) t-198 i \pi u^3 \log (-t) t+360 u^3 \log (-t) t-12 N_f u^3 \log (-t-u) t+90 i \pi u^3 \log (-t-u) t+18 u^3 \log (-t-u) t-198 u^3 \log (-t) \log (-t-u) t-36 i \pi u^3 \log (-u) t-90 u^3 \log (-u) t+144 u^3 \log (-t) \log (-u) t-36 u^3 \log (-t-u) \log (-u) t-40 N_f u^4+6 \pi ^2 u^4-288 u^4-36 u^4 \log ^2(-t)+24 N_f u^4 \log (-t)-72 i \pi u^4 \log (-t)+108 u^4 \log (-t)-72 u^4 \log (-t) \log (-t-u)+72 u^4 \log (-t) \log (-u)\right) \;\text{e}^6$$ + +We can compare our O(eps^0) result to Eq. 2.32 in arXiv:hep-ph/0010075 + +```mathematica +ClearAll[LitA, LitATilde, auxBox6, Box6Eval, TriEval]; +Li4 = PolyLog[4, #1] &; +ruleLit = {LitV -> Log[-s/u], LitW -> Log[-t/u], v -> s/u, w -> t/u}; +``` + +```mathematica +LitA = ( + 4*GaugeXi*(1 - 2 ep)*u/s^2 ((2 - 3*ep) u^2 - 6*ep*t*u + 3 (2 - ep) t^2)*Box6[s, t] + + - 4 GaugeXi/(1 - 2 ep)*t/s^2*((4 - 12*ep + 7*ep^2) t^2 - + 6*ep*(1 - 2*ep)*t*u + (4 - 10*ep + 5*ep^2)*u^2)*Tri[t] + + - 8/((1 - 2*ep) (3 - 2*ep))*1/s*(2 ep (1 - ep)*t*((1 - ep)*t - ep*u)*Nf - + ep (3 - 2*ep)*(2 - ep + 2*ep^2)*t*u + + (1 - ep) (3 - 2*ep) (2 - (1 - GaugeXi)*ep + 2 ep^2) t^2)*Tri[s]); +``` + +```mathematica +LitATilde = ( + 8 (1 - 2 ep) u/(s t) ((1 - 4 ep + ep^2) t^2 - + 2 ep (2 - ep) t*u + (1 - ep)^2 u^2) Box6[s, t] + + + 8 (1 - 2 ep) 1/s (ep (2 - 3 ep - ep^2) t^2 + + 2 ep (1 - 3 ep - ep^2) t*u - (2 - 2 ep + 3 ep^2 + ep^3) u^2) Box6[s, u] + + - 8 (1 - ep)/((1 - 2*ep) (3 - 2*ep))*1/t (2 ep*(1 - ep) (u^2 + ep s t) Nf + - (3 - 2 ep) (2 ep (1 + ep^2) t^2 + ep (3 + 2 ep^2) t*u - + 2 (1 - ep + ep^2) u^2)) Tri[s] + + + 8/(1 - 2*ep)*1/s (ep (2 - 5 ep + 2 ep^2 - ep^3) t^2 + + ep (1 - 3 ep + ep^2 - ep^3) t*u - + (1 - ep) (2 - 3 ep - ep^2) u^2) Tri[t] + + - 8/(1 - 2*ep)*u/(s t) (ep (2 - 4 ep + ep^2 - ep^3) t^2 + + ep (2 - 3 ep - ep^3) t*u - (1 - ep) (2 - 4 ep - ep^2) u^2) Tri[u]); +``` + +```mathematica +auxBox6 = (1/2 ((LitV - LitW)^2 + Pi^2) + 2*ep*(Li3[-v] - LitV Li2[-v] - 1/3 LitV^3 - Pi^2/2 LitV) + - 2 ep^2 (Li4[-v] + LitW Li3[-v] - 1/2 LitV^2 Li2[-v] - 1/8 LitV^4 - + 1/6 LitV^3 LitW + 1/4*LitV^2*LitW^2 - Pi^2/4 LitV^2 - Pi^2/3 LitV LitW - 2 Zeta4)); + +Box6Eval[s, t] = u^(-1 - ep)/(2 (1 - 2*ep)) (1 - Pi^2/12 ep^2) ( + auxBox6 + (auxBox6 /. {LitW -> LitV, LitV -> LitW, v -> w, w -> v})); + +Box6Eval[s, u] = Box6Eval[s, t] /. ruleLit /. {t -> u, u -> t}; + +TriEval[s_] := -(-s)^(-1 - ep)/ep^2 (1 - Pi^2/12 ep^2 - + 7/3 Zeta[3] ep^3 - 47/16 Zeta4 ep^4) +``` + +```mathematica +reLitAux = (( 2/3 Nf/ep*8 ((t^2 + u^2)/s^2 - ep) + + + ((LitA /. {Tri -> TriEval, Box6 -> Box6Eval} /. ruleLit) + + (LitA /. {Tri -> TriEval, Box6 -> Box6Eval} /. + {GaugeXi -> -GaugeXi} /. ruleLit /. {t -> u, u -> t})) /. GaugeXi -> 1) + + + +2/3 Nf/ep*8*(1 - ep) ((u^2)/(s t) + ep) + + + ((LitATilde /. {Tri -> TriEval, Box6 -> Box6Eval} /. ruleLit))); +``` + +knownResult is the 1-loop result. Notice that is also an implicit overall prefactor prefLit from Eq. 2.8 + +```mathematica +prefLit = 32 Pi^2/SMP["e"]^6; +``` + +```mathematica +knownResult = (reLitAux + (reLitAux /. {s -> t, t -> s})); +``` + +```mathematica +knownResultExpanded = Series[FCReplaceD[knownResult, D -> 4 - 2 ep], {ep, 0, 0}] // Normal; +``` + +```mathematica +((prefLit bornVirtualRenormalized[1] - knownResultExpanded) /. s -> -t - u) // PowerExpand // ReplaceRepeated[#, Log[-t - u] -> Log[t + u] - I Pi] & // Simplify +``` + +$$0$$ + +```mathematica +diff = ((prefLit bornVirtualRenormalized[1] - knownResultExpanded) /. s -> -t - u) // PowerExpand // + ReplaceRepeated[#, Log[-t - u] -> Log[t + u] - I Pi] & // Simplify +``` + +$$0$$ + +## Check the final results + +```mathematica +FCCompareResults[0, diff, + Text -> {"\tCompare to arXiv:hep-ph/0010075:", + "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; + +```mathematica + +$$\text{$\backslash $tCompare to arXiv:hep-ph/0010075:} \;\text{CORRECT.}$$ + +$$\text{$\backslash $tCPU Time used: }59.585\text{ s.}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu.md b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu.md index c8227d09..bfea86e2 100644 --- a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu.md +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu.md @@ -336,7 +336,7 @@ FCCompareResults[0, diff, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCompare to arXiv:hep-ph/0010075:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu2.md b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu2.md new file mode 100644 index 00000000..8a7594c9 --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/ElAel-MuAmu2.md @@ -0,0 +1,422 @@ +--- +title: Muon production +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "El Ael -> El Ael, QED, Born-virtual, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +$LoadAddOns = {"FeynArts"}; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:25:42 +02:00, 2b43b48d). 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.11 (3 Aug 2020) 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}$$ + +## Generate Feynman diagrams + +Nicer typesetting + +```mathematica +FCAttachTypesettingRule[p1, {SubscriptBox, "p", "1"}] +FCAttachTypesettingRule[p2, {SubscriptBox, "p", "2"}] +FCAttachTypesettingRule[k1, {SubscriptBox, "k", "1"}] +FCAttachTypesettingRule[k2, {SubscriptBox, "k", "2"}] +``` + +```mathematica +diagsTree = InsertFields[CreateTopologies[0, 2 -> 2, + ExcludeTopologies -> {Tadpoles, WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2, {2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; +Paint[diagsTree, ColumnsXRows -> {2, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 256}]; +``` + +![0758qtt3uf52x](img/0758qtt3uf52x.svg) + +```mathematica +diagsLoop = InsertFields[CreateTopologies[1, 2 -> 2, + ExcludeTopologies -> {Tadpoles, WFCorrections}], {F[2, {1}], -F[2, {1}]} -> + {F[2, {2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; +Paint[DiagramExtract[diagsLoop, 1 .. 5], ColumnsXRows -> {5, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 196}]; +``` + +![02p122cn86s4z](img/02p122cn86s4z.svg) + +```mathematica +diagsLoopCT = InsertFields[CreateCTTopologies[1, 2 -> 2, ExcludeTopologies -> {Tadpoles, WFCorrectionCTs}], + {F[2, {1}], -F[2, {1}]} -> {F[2, {2}], -F[2, {2}]}, InsertionLevel -> {Particles}, + Restrictions -> QEDOnly, ExcludeParticles -> {F[1 | 3 | 4, _], F[2, {3}]}]; + +Paint[diagsLoopCT, ColumnsXRows -> {3, 1}, Numbering -> Simple, + SheetHeader -> None, ImageSize -> {1024, 196}]; +``` + +![017zis4550exy](img/017zis4550exy.svg) + +## Obtain the amplitudes + +```mathematica +ampLoopCT[0] = FCFAConvert[CreateFeynAmp[diagsLoopCT, Truncated -> False, PreFactor -> 1] //. + {(h : dZfL1 | dZfR1)[z__] :> dZf1[z], Conjugate[(h : dZfL1 | dZfR1)[z__]] :> dZf1[z], dZZA1 -> 0}, + IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {k1, k2}, LoopMomenta -> {l}, ChangeDimension -> D, + DropSumOver -> True, UndoChiralSplittings -> True, SMP -> True, + FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +```mathematica +ampLoop[0] = FCFAConvert[CreateFeynAmp[DiagramExtract[diagsLoop, 1 .. 5], + Truncated -> False, PreFactor -> 1], IncomingMomenta -> {p1, p2},OutgoingMomenta -> {k1, k2}, + LoopMomenta -> {q}, ChangeDimension -> D, DropSumOver -> True, UndoChiralSplittings -> True, + SMP -> True, FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +```mathematica +ampTree[0] = FCFAConvert[CreateFeynAmp[diagsTree, Truncated -> False, PreFactor -> 1], + IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {k1, k2}, + ChangeDimension -> D, DropSumOver -> True, UndoChiralSplittings -> True, + SMP -> True, FinalSubstitutions -> {SMP["m_e"] -> 0, SMP["m_mu"] -> 0}]; +``` + +## Fix the kinematics + +```mathematica +FCClearScalarProducts[]; +SetMandelstam[-t - u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0] +``` + +$$\left( +\begin{array}{cccccccccccccccccccccccccccccccccccccccc} + 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 & 0 & -\frac{t}{2}-\frac{u}{2} & -\frac{t}{2} & -\frac{u}{2} & 0 & -\frac{u}{2} & -\frac{t}{2} & 0 & -\frac{t}{2}-\frac{u}{2} & 0 \\ +\end{array} +\right)$$ + +## Evaluate the amplitudes + +```mathematica +ampTree[1] = + (FCTraceFactor /@ DotSimplify[#, Expanding -> False] & /@ ampTree[0]); +``` + +```mathematica +ampTree[2] = (Total[ampTree[1]] // Contract // DiracSimplify) // FeynAmpDenominatorExplicit // + FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu}] & +``` + +$$-\frac{i \;\text{e}^2 \left(\varphi (k_1)\right).\gamma ^{\text{mu}}.\left(\varphi (-k_2)\right) \left(\varphi (-p_2)\right).\gamma ^{\text{mu}}.\left(\varphi (p_1)\right)}{-t-u}$$ + +```mathematica +ampLoopCT[1] = + (FCTraceFactor /@ DotSimplify[#, Expanding -> False] & /@ ampLoopCT[0]); +``` + +```mathematica +amlLoop[0] = Join[ampLoop[0][[1 ;; 4]], Nf ampLoop[0][[5 ;; 5]]]; +``` + +```mathematica +AbsoluteTiming[amlLoop[1] = amlLoop[0] // Contract // DiracSimplify;] +``` + +$$\{0.397036,\text{Null}\}$$ + +## Identify and minimize the topologies + +```mathematica +{amlLoop[2], topos} = FCLoopFindTopologies[amlLoop[1], {q}]; +``` + +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }5$$ + +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }4$$ + +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ + +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }1$$ + +```mathematica +subtopos = FCLoopFindSubtopologies[topos]; +``` + +```mathematica +mappings = FCLoopFindTopologyMappings[topos, PreferredTopologies -> subtopos]; +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology2R1 and fctopology1R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology3 and fctopology1R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies fctopology1R1 and fctopology2R1. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }2\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }2$$ + +## Rewrite the amplitude in terms of GLIs + +```mathematica +AbsoluteTiming[ampReduced = FCLoopTensorReduce[amlLoop[2], topos];] +``` + +$$\{1.44213,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampPreFinal = FCLoopApplyTopologyMappings[ampReduced, mappings];] +``` + +$$\{2.00559,\text{Null}\}$$ + +```mathematica +AbsoluteTiming[ampFinal = ampPreFinal // DiracSimplify // FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu, nu, rho}] & // FeynAmpDenominatorExplicit // Collect2[#, DOT] &;] +``` + +$$\{7.65099,\text{Null}\}$$ + +```mathematica +(*FCClearScalarProducts[]; +FCReloadAddOns[{"FeynHelpers"}]; +FIREPrepareStartFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateLiteRedFiles[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateStartFile[FCGetNotebookDirectory[],mappings[[2]]] +FIRECreateIntegralFile[Cases2[ampPreFinal,GLI],mappings[[2]],FCGetNotebookDirectory[]] +FIRECreateConfigFile[mappings[[2]],FCGetNotebookDirectory[]] +FIRERunReduction[FCGetNotebookDirectory[],mappings[[2]]] +tables=FIREImportResults[mappings[[2]],FCGetNotebookDirectory[]]//Flatten; +Put[tables,FileNameJoin[{FCGetNotebookDirectory[],"ReductionTable-ElAel-MuAmu.m"}]]; +FCClearScalarProducts[]; +SetMandelstam[-t-u(*s*), t, u, p1, p2, -k1, -k2, 0, 0, 0, 0];*) +``` + +```mathematica +reductionTable = Get[FileNameJoin[{FCGetNotebookDirectory[], "ReductionTable-ElAel-MuAmu.m"}]]; +``` + +```mathematica +resPreFinal = Collect2[Total[ampFinal /. reductionTable], GLI]; +``` + +```mathematica +integralMappings = FCLoopFindIntegralMappings[Cases2[resPreFinal, GLI], mappings[[2]]] +``` + +$$\left\{\left\{G^{\text{fctopology2}}(0,1,0,1)\to G^{\text{fctopology1}}(0,1,0,1)\right\},\left\{G^{\text{fctopology1}}(0,1,0,1),G^{\text{fctopology1}}(1,0,1,0),G^{\text{fctopology1}}(1,1,1,1),G^{\text{fctopology2}}(1,0,1,0),G^{\text{fctopology2}}(1,1,1,1)\right\}\right\}$$ + +```mathematica +resFinal = Collect2[(resPreFinal /. integralMappings[[1]]), GLI]; +``` + +Obtain the Born-virtual interference term + +```mathematica +(*about 10 seconds*) + AbsoluteTiming[bornVirtualUnrenormalized[0] = + Collect2[resFinal, Spinor, LorentzIndex, IsolateNames -> KK] * + ComplexConjugate[ampTree[2]] // + FermionSpinSum[#, ExtraFactor -> 1/2^2] & // DiracSimplify // + FRH // Collect2[#, GLI] &;] +``` + +$$\{3.69891,\text{Null}\}$$ + +Master integrals using the standard textbook normalization + +```mathematica +ruleMasters = {GLI["fctopology1", {0, 1, 0, 1}] -> (I/16)/(ep*Pi^2) + (2*I - I*EulerGamma + Pi)/(16*Pi^2) + + (ep*(48*I - (24*I)*EulerGamma + (6*I)*EulerGamma^2 + 24*Pi - 12*EulerGamma*Pi - (7*I)*Pi^2))/ + (192*Pi^2) + ((I/8)*Log[2])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[2])/(8*Pi^2) + ((I/8)*ep*Log[2]^2)/Pi^2 + + ((I/16)*Log[Pi])/Pi^2 + (ep*(2*I - I*EulerGamma + Pi)*Log[Pi])/(16*Pi^2) + + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-t - u])/Pi^2 - + (ep*(2*I - I*EulerGamma + Pi)*Log[-t - u])/(16*Pi^2) - ((I/8)*ep*Log[2]*Log[-t - u])/Pi^2 - + ((I/16)*ep*Log[Pi]*Log[-t - u])/Pi^2 + ((I/32)*ep*Log[-t - u]^2)/Pi^2, + GLI["fctopology1", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + ((I/32)*ep*Log[Pi]^2)/Pi^2 - + ((I/16)*Log[-t])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-t])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-t])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-t])/Pi^2 + ((I/32)*ep*Log[-t]^2)/Pi^2, + GLI["fctopology2", {1, 0, 1, 0}] -> (I/16)/(ep*Pi^2) - ((I/16)*(-2 + EulerGamma))/Pi^2 - + ((I/192)*ep*(-48 + 24*EulerGamma - 6*EulerGamma^2 + Pi^2))/Pi^2 + ((I/8)*Log[2])/Pi^2 - + ((I/8)*ep*(-2 + EulerGamma)*Log[2])/Pi^2 + ((I/8)*ep*Log[2]^2)/Pi^2 + ((I/16)*Log[Pi])/Pi^2 - + ((I/16)*ep*(-2 + EulerGamma)*Log[Pi])/Pi^2 + ((I/8)*ep*Log[2]*Log[Pi])/Pi^2 + + ((I/32)*ep*Log[Pi]^2)/Pi^2 - ((I/16)*Log[-u])/Pi^2 + ((I/16)*ep*(-2 + EulerGamma)*Log[-u])/Pi^2 - + ((I/8)*ep*Log[2]*Log[-u])/Pi^2 - ((I/16)*ep*Log[Pi]*Log[-u])/Pi^2 + + ((I/32)*ep*Log[-u]^2)/Pi^2, GLI["fctopology1", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*t*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*t*(t + u)) - ((I/2)*Log[2])/(ep*Pi^2*t*(t + u)) + + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*t*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*t*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*t*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*t*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*t*(t + u)) + ((I/8)*Log[-t])/(ep*Pi^2*t*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-t])/(8*Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*t*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*t*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*t*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*t*(t + u)) - ((I/8)*Log[-t]*Log[-t - u])/(Pi^2*t*(t + u)), + GLI["fctopology2", {1, 1, 1, 1}] -> (-1/4*I)/(ep^2*Pi^2*u*(t + u)) + ((I/8)*(2*EulerGamma + I*Pi))/(ep*Pi^2*u*(t + u)) + + ((-3*I)*EulerGamma^2 + 3*EulerGamma*Pi + (2*I)*Pi^2)/(24*Pi^2*u*(t + u)) - + ((I/2)*Log[2])/(ep*Pi^2*u*(t + u)) + ((I/4)*(2*EulerGamma + I*Pi)*Log[2])/(Pi^2*u*(t + u)) - + ((I/2)*Log[2]^2)/(Pi^2*u*(t + u)) - ((I/4)*Log[Pi])/(ep*Pi^2*u*(t + u)) + + ((I/8)*(2*EulerGamma + I*Pi)*Log[Pi])/(Pi^2*u*(t + u)) - ((I/2)*Log[2]*Log[Pi])/(Pi^2*u*(t + u)) - + ((I/8)*Log[Pi]^2)/(Pi^2*u*(t + u)) + ((I/8)*Log[-t - u])/(ep*Pi^2*u*(t + u)) - + ((I/8)*EulerGamma*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-t - u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-t - u])/(Pi^2*u*(t + u)) + ((I/8)*Log[-u])/(ep*Pi^2*u*(t + u)) + + (((-I)*EulerGamma + Pi)*Log[-u])/(8*Pi^2*u*(t + u)) + ((I/4)*Log[2]*Log[-u])/(Pi^2*u*(t + u)) + + ((I/8)*Log[Pi]*Log[-u])/(Pi^2*u*(t + u)) - ((I/8)*Log[-t - u]*Log[-u])/(Pi^2*u*(t + u)), + GLI["fctopology3", {1, 1, 1, 1}] -> (I/4)/(ep^2*Pi^2*t*u) - ((I/4)*EulerGamma)/(ep*Pi^2*t*u) + + ((I/24)*(3*EulerGamma^2 - 2*Pi^2))/(Pi^2*t*u) + ((I/2)*Log[2])/(ep*Pi^2*t*u) - + ((I/2)*EulerGamma*Log[2])/(Pi^2*t*u) + ((I/2)*Log[2]^2)/(Pi^2*t*u) + ((I/4)*Log[Pi])/(ep*Pi^2*t*u) - + ((I/4)*EulerGamma*Log[Pi])/(Pi^2*t*u) + ((I/2)*Log[2]*Log[Pi])/(Pi^2*t*u) + + ((I/8)*Log[Pi]^2)/(Pi^2*t*u) - ((I/8)*Log[-t])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-t])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-t])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-t])/(Pi^2*t*u) - + ((I/8)*Log[-u])/(ep*Pi^2*t*u) + ((I/8)*EulerGamma*Log[-u])/(Pi^2*t*u) - + ((I/4)*Log[2]*Log[-u])/(Pi^2*t*u) - ((I/8)*Log[Pi]*Log[-u])/(Pi^2*t*u) + ((I/8)*Log[-t]*Log[-u])/(Pi^2*t*u)}; +``` + +```mathematica +bornVirtualUnrenormalized[1] = Collect2[FCReplaceD[(bornVirtualUnrenormalized[0] /. ruleMasters), D -> 4 - 2 ep], ep, + IsolateNames -> KK] // Series[#, {ep, 0, 0}] & // Normal // FRH // Collect2[#, ep] &; +``` + +The explicit expressions for the PaVe functions can be obtained e.g. using Package-X / PaXEvaluate + +Put together the counter-term contribution. The wave-function renormalization must be done in the OS scheme, +which gives no contribution due to massless electrons and muons. + +```mathematica +MSbarRC = { + SMP["dZ_psi"] -> 0, + SMP["dZ_A"] -> - Nf SMP["e"]^2/(12 Pi^2) (1/ep - EulerGamma + Log[4 Pi]) + }; +``` + +```mathematica +RuleRS = { + dZe1 -> - 1/2 SMP["dZ_A"], + dZAA1 -> SMP["dZ_A"], + (dZf1 | dZf2)[__] -> SMP["dZ_psi"] + }; +``` + +```mathematica +fullCTAndResidue[0] = (Total[ampLoopCT[1]] /. RuleRS /. MSbarRC) // FeynAmpDenominatorExplicit // Contract // + DiracSimplify // FCCanonicalizeDummyIndices[#, LorentzIndexNames -> {mu}] &; +``` + +Get the interference of the counter term and residue contribution with the Born amplitude + +```mathematica +bornCTAndResidue[0] = fullCTAndResidue[0] ComplexConjugate[ampTree[2]] // FermionSpinSum[#, ExtraFactor -> 1/2^2] & // + DiracSimplify // Simplify // FCReplaceD[#, D -> 4 - 2 ep] & // Series[#, {ep, 0, 0}] & // Normal +``` + +$$\frac{\text{e}^6 N_f \left(t^2+u^2\right)}{6 \pi ^2 \;\text{ep} (t+u)^2}+\frac{\text{e}^6 N_f \left(-2 \left(t^2+2 t u+u^2\right)-2 (\gamma -\log (4 \pi )) \left(t^2+u^2\right)\right)}{12 \pi ^2 (t+u)^2}$$ + +Finally, we obtain the UV-finite but IR-divergent Born-virtual interference term + +```mathematica +bornVirtualRenormalized[0] = (bornVirtualUnrenormalized[1] + bornCTAndResidue[0]) // Collect2[#, ep] &; +``` + +Introduce the prefactor from the literature that removes $\Gamma_E$ and logs of $\pi$ + +```mathematica +bornVirtualRenormalized[1] = Series[FCReplaceD[1/Exp[ep (Log[4 Pi] - EulerGamma)] bornVirtualRenormalized[0], D -> 4 - 2 ep], {ep, 0, 0}] // Normal // + ReplaceAll[#, Log[4 Pi] -> 2 Log[2] + Log[Pi]] & // Collect2[#, ep] & +``` + +$$-\frac{\text{e}^6 \left(t^2+u^2\right)}{2 \pi ^2 \;\text{ep}^2 (t+u)^2}+\frac{\text{e}^6 \left(2 t^2 \log (-t-u)-2 t^2 \log (-u)+2 i \pi t^2-t^2+2 t^2 \log (-t)+2 u^2 \log (-t)+2 u^2 \log (-t-u)+4 t u+2 i \pi u^2-u^2-2 u^2 \log (-u)\right)}{4 \pi ^2 \;\text{ep} (t+u)^2}+\frac{1}{72 \pi ^2 (t+u)^2}\;\text{e}^6 \left(12 t^2 N_f \log (-t-u)-20 t^2 N_f+12 i \pi t^2 N_f+12 u^2 N_f \log (-t-u)-20 u^2 N_f+12 i \pi u^2 N_f+9 t^2 \log ^2(-u)-54 t^2 \log (-t) \log (-t-u)+36 t^2 \log (-t-u)+18 t^2 \log (-u) \log (-t-u)+18 i \pi t^2 \log (-u)+18 t^2 \log (-u)+21 \pi ^2 t^2+36 i \pi t^2-90 t^2+9 t^2 \log ^2(-t)-54 i \pi t^2 \log (-t)-36 t^2 \log (-t)-9 u^2 \log ^2(-t)-36 u^2 \log ^2(-t-u)-18 i \pi u^2 \log (-t)-18 u^2 \log (-t)-72 i \pi u^2 \log (-t-u)-18 u^2 \log (-t) \log (-t-u)+54 u^2 \log (-u) \log (-t-u)-72 i \pi t u+108 t u-54 t u \log (-t)-72 t u \log (-t-u)+54 t u \log (-u)+21 \pi ^2 u^2-90 u^2-9 u^2 \log ^2(-u)+54 i \pi u^2 \log (-u)+36 u^2 \log (-u)\right)$$ + +We can compare our O(eps^0) result to Eq. 2.32 in arXiv:hep-ph/0010075 + +```mathematica +ClearAll[LitA, LitATilde, auxBox6, Box6Eval, TriEval]; +Li4 = PolyLog[4, #1] &; +ruleLit = {LitV -> Log[-s/u], LitW -> Log[-t/u], v -> s/u, w -> t/u}; +``` + +```mathematica +LitA = ( + 4*GaugeXi*(1 - 2 ep)*u/s^2 ((2 - 3*ep) u^2 - 6*ep*t*u + 3 (2 - ep) t^2)*Box6[s, t] + + - 4 GaugeXi/(1 - 2 ep)*t/s^2*((4 - 12*ep + 7*ep^2) t^2 - + 6*ep*(1 - 2*ep)*t*u + (4 - 10*ep + 5*ep^2)*u^2)*Tri[t] + + - 8/((1 - 2*ep) (3 - 2*ep))*1/s*(2 ep (1 - ep)*t*((1 - ep)*t - ep*u)*Nf - + ep (3 - 2*ep)*(2 - ep + 2*ep^2)*t*u + + (1 - ep) (3 - 2*ep) (2 - (1 - GaugeXi)*ep + 2 ep^2) t^2)*Tri[s]); +``` + +```mathematica +auxBox6 = (1/2 ((LitV - LitW)^2 + Pi^2) + 2*ep*(Li3[-v] - LitV Li2[-v] - 1/3 LitV^3 - Pi^2/2 LitV) + - 2 ep^2 (Li4[-v] + LitW Li3[-v] - 1/2 LitV^2 Li2[-v] - 1/8 LitV^4 - + 1/6 LitV^3 LitW + 1/4*LitV^2*LitW^2 - Pi^2/4 LitV^2 - Pi^2/3 LitV LitW - 2 Zeta4)); + +Box6Eval[s, t] = u^(-1 - ep)/(2 (1 - 2*ep)) (1 - Pi^2/12 ep^2) ( + auxBox6 + (auxBox6 /. {LitW -> LitV, LitV -> LitW, v -> w, w -> v})); + +Box6Eval[s, u] = Box6Eval[s, t] /. ruleLit /. {t -> u, u -> t}; + +TriEval[s_] := -(-s)^(-1 - ep)/ep^2 (1 - Pi^2/12 ep^2 - + 7/3 Zeta[3] ep^3 - 47/16 Zeta4 ep^4) +``` + +```mathematica +knownResult = (( 2/3 Nf/ep*8 ((t^2 + u^2)/s^2 - ep) + + + ((LitA /. {Tri -> TriEval, Box6 -> Box6Eval} /. ruleLit) + + (LitA /. {Tri -> TriEval, Box6 -> Box6Eval} /. + {GaugeXi -> -GaugeXi} /. ruleLit /. {t -> u, u -> t})) /. GaugeXi -> 1)); +``` + +knownResult is the 1-loop result. Notice that is also an implicit overall prefactor prefLit from Eq. 2.8 + +```mathematica +prefLit = 32 Pi^2/SMP["e"]^6; +``` + +```mathematica +knownResultExpanded = Series[FCReplaceD[knownResult, D -> 4 - 2 ep], {ep, 0, 0}] // Normal; +``` + +```mathematica +diff = ((prefLit bornVirtualRenormalized[1] - knownResultExpanded) /. s -> -t - u) // PowerExpand // + ReplaceRepeated[#, Log[-t - u] -> Log[t + u] - I Pi] & // Simplify +``` + +$$0$$ + +## Check the final results + +```mathematica +FCCompareResults[0, diff, + Text -> {"\tCompare to arXiv:hep-ph/0010075:", + "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; + +```mathematica + +$$\text{$\backslash $tCompare to arXiv:hep-ph/0010075:} \;\text{CORRECT.}$$ + +$$\text{$\backslash $tCPU Time used: }37.681\text{ s.}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/Ga-Ga.md b/FeynCalc/Examples/QED/OneLoop/Markdown/Ga-Ga.md index 939b3176..2774d0f1 100644 --- a/FeynCalc/Examples/QED/OneLoop/Markdown/Ga-Ga.md +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/Ga-Ga.md @@ -74,7 +74,7 @@ amp[0] = FCFAConvert[CreateFeynAmp[diags, Truncated -> True, PreFactor -> 1], ChangeDimension -> D, List -> False, SMP -> True, Contract -> True] -``` +```mathematica $$\frac{\text{tr}\left(\left(m_e-\gamma \cdot q\right).\left(i \;\text{e} \gamma ^{\nu }\right).\left(m_e+\gamma \cdot (p-q)\right).\left(i \;\text{e} \gamma ^{\mu }\right)\right)}{\left(q^2-m_e^2\right).\left((q-p)^2-m_e^2\right)}$$ diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/Pi-GaGa.md b/FeynCalc/Examples/QED/OneLoop/Markdown/Pi-GaGa.md new file mode 100644 index 00000000..599310bc --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/Pi-GaGa.md @@ -0,0 +1,122 @@ +--- +title: Adler-Bell-Jackiw anomaly in QED +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "Pi -> Ga Ga, QED, axial current, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[9, 3, 1]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:25:42 +02:00, 2b43b48d). 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!}$$ + +## Obtain the amplitude + +Nicer typesetting + +```mathematica +MakeBoxes[mu, TraditionalForm] := "\[Mu]"; +MakeBoxes[nu, TraditionalForm] := "\[Nu]"; +MakeBoxes[la, TraditionalForm] := "\[Lambda]"; +``` + +According to Peskin and Schroeder (Ch 19.2), the amplitude for the first triangle diagram reads + +```mathematica +amp1[0] = ((-1) (-I SMP["e"])^2 DiracTrace[GAD[mu] . GA[5] . + QuarkPropagator[l - k] . GAD[la] . QuarkPropagator[l] . + GAD[nu] . QuarkPropagator[l + p]]) // Explicit +``` + +$$\text{e}^2 \;\text{tr}\left(\gamma ^{\mu }.\bar{\gamma }^5.\frac{i \gamma \cdot (l-k)}{(l-k)^2}.\gamma ^{\lambda }.\frac{i \gamma \cdot l}{l^2}.\gamma ^{\nu }.\frac{i \gamma \cdot (l+p)}{(l+p)^2}\right)$$ + +And the second one follows from the first by interchanging k with p and la with nu + +```mathematica +amp2[0] = amp1[0] /. {k -> p, p -> k, la -> nu, nu -> la} +``` + +$$\text{e}^2 \;\text{tr}\left(\gamma ^{\mu }.\bar{\gamma }^5.\frac{i \gamma \cdot (l-p)}{(l-p)^2}.\gamma ^{\nu }.\frac{i \gamma \cdot l}{l^2}.\gamma ^{\lambda }.\frac{i \gamma \cdot (k+l)}{(k+l)^2}\right)$$ + +## Calculate the amplitude + +Contracting both amplitudes with I*(k+p)^mu we can check the non-conservation of the axial current. + +```mathematica +amp[0] = Contract[I*FVD[k + p, mu] (amp1[0] + amp2[0])] +``` + +$$i \;\text{e}^2 \;\text{tr}\left(-\frac{i (\gamma \cdot (k+p)).\bar{\gamma }^5.(\gamma \cdot (l-p)).\gamma ^{\nu }.(\gamma \cdot l).\gamma ^{\lambda }.(\gamma \cdot (k+l))}{l^2 (k+l)^2 (l-p)^2}\right)+i \;\text{e}^2 \;\text{tr}\left(-\frac{i (\gamma \cdot (k+p)).\bar{\gamma }^5.(\gamma \cdot (l-k)).\gamma ^{\lambda }.(\gamma \cdot l).\gamma ^{\nu }.(\gamma \cdot (l+p))}{l^2 (l-k)^2 (l+p)^2}\right)$$ + +For this calculation it is crucial to use a correct scheme for gamma^5. As in the book, we use the +Breitenlohner-Maison-t'Hooft-Veltman prescription. + +```mathematica +FCSetDiracGammaScheme["BMHV"]; +amp[1] = TID[amp[0] , l, ToPaVe -> True] +``` + +$$\frac{4 \pi ^2 \;\text{B}_0\left(k^2,0,0\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}} \left(-\left((2-D) (k\cdot p)^2\right)-(2-D) k^2 (k\cdot p)-4 k^2 (k\cdot p)+2 k^2 \left(k\cdot p-p^2\right)+(2-D) \left((k\cdot p)^2-k^2 p^2\right)\right) \;\text{e}^2}{(2-D) \left((k\cdot p)^2-k^2 p^2\right)}+\frac{4 \pi ^2 \;\text{B}_0\left(p^2,0,0\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}} \left(-\left((2-D) (k\cdot p)^2\right)-(2-D) p^2 (k\cdot p)-4 p^2 (k\cdot p)-2 \left(k^2-k\cdot p\right) p^2+(2-D) \left((k\cdot p)^2-k^2 p^2\right)\right) \;\text{e}^2}{(2-D) \left((k\cdot p)^2-k^2 p^2\right)}-\frac{1}{(2-D) \left((k\cdot p)^2-k^2 p^2\right)}4 \pi ^2 \;\text{C}_0\left(k^2,p^2,k^2+2 (k\cdot p)+p^2,0,0,0\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}} \left(-2 p^2 k^4-(2-D) (k\cdot p)^2 k^2-2 p^4 k^2-2 (2-D) (k\cdot p) p^2 k^2-4 (k\cdot p) p^2 k^2+(2-D) \left((k\cdot p)^2-k^2 p^2\right) k^2-(2-D) (k\cdot p)^2 p^2+(2-D) p^2 \left((k\cdot p)^2-k^2 p^2\right)\right) \;\text{e}^2+\left(4 \pi ^2 \;\text{B}_0\left(k^2+2 (k\cdot p)+p^2,0,0\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}} \left(4 (2-D) (k\cdot p)^3+4 (2-D) k^2 (k\cdot p)^2+4 (2-D) p^2 (k\cdot p)^2+(2-D) k^4 (k\cdot p)+(2-D) p^4 (k\cdot p)+2 (2-D) k^2 p^2 (k\cdot p)+16 \left((k\cdot p)^2-k^2 p^2\right) (k\cdot p)+4 \left(k^2 \left(-(k\cdot p)-p^2\right)+2 (k\cdot p) \left(-(k\cdot p)-p^2\right)+p^2 \left(-(k\cdot p)-p^2\right)+\left(k^2+2 (k\cdot p)+p^2\right) \left(k^2+2 p^2\right)\right) (k\cdot p)+8 k^2 \left((k\cdot p)^2-k^2 p^2\right)+8 p^2 \left((k\cdot p)^2-k^2 p^2\right)+2 p^2 \left(-k^2 \left(-k^2-k\cdot p\right)-2 (k\cdot p) \left(-k^2-k\cdot p\right)-p^2 \left(-k^2-k\cdot p\right)+\left(k^2-2 (k\cdot p)\right) \left(k^2+2 (k\cdot p)+p^2\right)\right)+2 k^2 \left(k^2 \left(-(k\cdot p)-p^2\right)+2 (k\cdot p) \left(-(k\cdot p)-p^2\right)+p^2 \left(-(k\cdot p)-p^2\right)+3 p^2 \left(k^2+2 (k\cdot p)+p^2\right)\right)\right) \;\text{e}^2\right)/\left((2-D) \left(k^2+2 (k\cdot p)+p^2\right) \left((k\cdot p)^2-k^2 p^2\right)\right)$$ + +```mathematica +FCClearScalarProducts[]; +Momentum[k, D | D - 4] = Momentum[k]; +Momentum[p, D | D - 4] = Momentum[p]; +``` + +The explicit values for the PaVe functions B0 and C0 can be obtained e.g. from H. Patel's Package-X. +Here we just insert the known results. The C0 function is finite here, so because of the prefactor (D-4) it +gives no contribution in the D->4 limit. + +```mathematica +amp[2] = Collect2[amp[1], {B0, C0}] //. { + B0[FCI@SP[p_, p_], 0, 0] :> + 1/(16 Epsilon \[Pi]^4) - (-2 + EulerGamma)/(16 \[Pi]^4) + + Log[-((4 \[Pi] ScaleMu^2)/Pair[Momentum[p], Momentum[p]])]/(16 \[Pi]^4), + B0[FCI[SP[p, p] + 2 SP[p, k] + SP[k, k]], 0, 0] :> + B0[FCI[SP[k + p, k + p]], 0, 0], + (D - 4) ExpandScalarProduct[C0[SP[k], SP[p], SP[k + p], 0, 0, 0]] -> 0 + } +``` + +$$-\frac{4 \pi ^2 (D-4) \;\text{e}^2 \overline{p}^2 \left(\overline{k}\cdot \overline{p}+\overline{k}^2\right) \left(\frac{\log \left(-\frac{4 \pi \mu ^2}{\overline{p}^2}\right)}{16 \pi ^4}+\frac{1}{16 \pi ^4 \varepsilon }-\frac{\gamma -2}{16 \pi ^4}\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}}}{(D-2) \left((\overline{k}\cdot \overline{p})^2-\overline{k}^2 \overline{p}^2\right)}-\frac{4 \pi ^2 (D-4) \;\text{e}^2 \overline{k}^2 \left(\overline{k}\cdot \overline{p}+\overline{p}^2\right) \left(\frac{\log \left(-\frac{4 \pi \mu ^2}{\overline{k}^2}\right)}{16 \pi ^4}+\frac{1}{16 \pi ^4 \varepsilon }-\frac{\gamma -2}{16 \pi ^4}\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}}}{(D-2) \left((\overline{k}\cdot \overline{p})^2-\overline{k}^2 \overline{p}^2\right)}-\frac{4 \pi ^2 (D-4) \;\text{e}^2 \left(\overline{k}\cdot \overline{p}\right) \left(2 \left(\overline{k}\cdot \overline{p}\right)+\overline{k}^2+\overline{p}^2\right) \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}} \left(\frac{\log \left(-\frac{4 \pi \mu ^2}{(\overline{k}+\overline{p})^2}\right)}{16 \pi ^4}+\frac{1}{16 \pi ^4 \varepsilon }-\frac{\gamma -2}{16 \pi ^4}\right)}{(D-2) \left(\overline{k}^2 \overline{p}^2-(\overline{k}\cdot \overline{p})^2\right)}$$ + +Now we insert the explicit values, convert the external momenta to 4 dimensions and expand in Epsilon + +```mathematica +amp[3] = amp[2] // FCReplaceD[#, D -> 4 - 2 Epsilon] & // Series[#, {Epsilon, 0, 0}] & // Normal +``` + +$$-\frac{\text{e}^2 \bar{\epsilon }^{\lambda \nu \overline{k}\overline{p}}}{2 \pi ^2}$$ + +The result should be twice Eq. 19.59 in Peskin and Schroeder + +## Check the final results + +```mathematica +knownResult = 2 (SMP["e"]^2/(4 Pi^2) LC[al, la, be, nu] FV[k, al] FV[p, be]) // Contract; +FCCompareResults[amp[3], knownResult, + Text -> {"\tCompare to Peskin and Schroeder, An Introduction to QFT, Eq 19.59:", + "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; +Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; +``` + +$$\text{$\backslash $tCompare to Peskin and Schroeder, An Introduction to QFT, Eq 19.59:} \;\text{CORRECT.}$$ + +$$\text{$\backslash $tCPU Time used: }24.243\text{ s.}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/Renormalization.md b/FeynCalc/Examples/QED/OneLoop/Markdown/Renormalization.md index 12792fd4..aed0e0d5 100644 --- a/FeynCalc/Examples/QED/OneLoop/Markdown/Renormalization.md +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/Renormalization.md @@ -322,7 +322,7 @@ FCCompareResults[Join[solMS1, solMS2, solMSbar1, solMSbar2], knownResult, "CORRECT.", "WRONG!"}, Interrupt -> {Hold[Quit[1]], Automatic}]; Print["\tCPU Time used: ", Round[N[TimeUsed[], 4], 0.001], " s."]; -``` +```mathematica $$\text{$\backslash $tCheck the final result:} \;\text{CORRECT.}$$ diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.pdf b/FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8113fe48fd6c09380ac166d7c264e0bbd747906a GIT binary patch literal 7693 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

w>MSpkD; z$s6#u-hAVJwuAa{2{+EiD0oJZNX$<+{z8-a(1p-Ji_Ea2Q{0#|Iy)>Oks;9)jB86{ zJqsQ^CrWLUjOO1PWE1%Am{(*!>6;64Q|}2ayow{Qv)8Fp9I=2c8p}Ih6tx-T*ra zIem;+qIO68_u_p4Xlm+dK|X`F2fh$H&7;)!FE=EP}aRv-*o^O zY6dBd;g0&Ln7pPf5d|14Q|BEKF zQLlM)#Tu+OW~W+(hW;zBysL1u*f1eNB8nv795)7y6oA&ZYL{)I684 zpce*}dot_Ct<-XS2l7`q@>~f}Ug^;4S0??g2s^&{qxQp0sleTzL)2G4kvYA}u0U|h zc#un8bL)Ls^!Qn)@vnq^^xb-YGKyx__8s%;Ujhg?Xax%K3r{(tWA4%g4A_5R<=eDxUWQ-}WQ!pAAKXZ{@a`2&K}?I#(Z`gFH$ zlB}(^AZc#7n|#jc`jF{84f@RJ74hPSn-m7D+MCD)8z$5`3;NI38G90ARmkhNRf$Lo zs>Q|FzPU|5zD&!}Ep7=nLcW<#OB{F#5v0W+^9uuh!on<`9@wX6sHe_>ry%c|RaqKO z6+t{jfg3nKsr;UMl};BWwg!2#CR9E5Ow%OP8Sw^%lE{o7T} zV?F?zH(Y)%yYK9Nk%(X_1JMvl1PFFEn`Oxy_&dwmIhZ(y8-EOKkqcL&M7b=6dpM^Ze8e>jTtt5y2=bdOW^+tcOZm1rHK zK@uC)clla)1iXs0Z|;n>iAgQg{vKh}S>nc1S=xUv|FTux(6C@%bHz@P=kaA(F0aGQ zJNj^i*p>`gtLG-gIAHM&8@P#;bCQ4&SHx0-!8n7uthmTE=B1)D@3qfRwT`T z-wB0fTt`0mECCnnJ(zs8ApwQ{6!L$+OCBx_6fBN08v-vRAm44!1|q` zXb%u|4flWNTB#qL!$q%>rXA6^YxriF9cw20_;Xmtv5mf~rnMVJFFu*FS@WSFN?p`# zGywBQ8g|OE$#MG?QJ7mvtyqdeLDhxj)7A-$WMKiCqJS5P>v0At+E=v8tz`5&zU1a; z*!p0;z+8C?Cb>PtFwsZjov@lm-l*SUBku3`_U4m-bH|rh{T$q1u2D?UXjy41WBMVt9@>g;G3&8%5EEZyyOEOG$gm5mO zv+kSSX6UYg!Cvfs3JJnWb{Y8dM!^Hbegp@KBj*Va6my0iu3!(aGbhd?Ik}KAoksGo z1HW;Sv4e^p0HJ`uD4+ouM<&y47Yw{z0fi29qMIYdj-f!KJIJzg4@?vMItnbG02u1_?)^;W#*00m0#LoYky~0gd#Vw;YJSI4fxq z!2*lsz;+4SIULt7P+Om9OLk!ZY)5dq){9QI=Y<1E94~0Y+yf|LFenUQ56sCFLHhvq zJAgVbL!y;Hk3kQI421?W)G1vs!tF^; literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.svg b/FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.svg new file mode 100644 index 00000000..55ef1cb6 --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/img/0x4h8tk2v0r12.svg @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/img/186v0xvh59vq4.pdf b/FeynCalc/Examples/QED/OneLoop/Markdown/img/186v0xvh59vq4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a33195880bbc85ce33adf140379896810d71300b GIT binary patch literal 21808 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

*@O!g$|E+kF3Ssze9#dKDaF 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 MvSWv?$$rRx0BbdqLI3~& literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.pdf b/FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c57b3930f97fd7c10c13f5a9dcd14605decf31ea GIT binary patch literal 11398 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 QP(+9ipOsZnTM7Sv0p{I{x&QzG literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.svg b/FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.svg new file mode 100644 index 00000000..7320387b --- /dev/null +++ b/FeynCalc/Examples/QED/OneLoop/Markdown/img/1b1hbl2j7nsn1.svg @@ -0,0 +1,740 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/README.md b/FeynCalc/Examples/README.md index b02f2d01..d83df706 100644 --- a/FeynCalc/Examples/README.md +++ b/FeynCalc/Examples/README.md @@ -6,23 +6,41 @@ _FeynCalc_. # Generating markdown ``` + +bash + feynCalcDir="/media/Data/Projects/VS/FeynCalc" +cd ${feynCalcDir}/FeynCalc/Examples +readarray -d '' array < <(find . -mindepth 2 -maxdepth 2 -type d -not -path "./WIP/*" -not -path "./MasterIntegrals/*" -print0) + +readarray -d '' array1 < <(find . -mindepth 2 -maxdepth 2 -type d -not -path "./WIP/*" -not -path "./MasterIntegrals/*" -not -path "./FeynRules/*" -print0) +readarray -d '' array2 < <(find . -mindepth 2 -maxdepth 2 -type d -not -path "./WIP/*" -not -path "./MasterIntegrals/*" -not -path "./QED/*" -not -path "./QCD/*" -not -path "./EW/*" -not -path "./Phi3/*" -not -path "./Phi4/*" -not -path "./MSSM/*" -not -path "./Yukawa/*" -not -path "./TopologyIdentification/*" -print0) + cd ${feynCalcDir}/FeynCalc/Documentation/Scripts -for exDir in 'QED/Tree' 'QED/OneLoop' 'QED/TwoLoops' 'QCD/Tree' 'QCD/OneLoop' 'QCD/TwoLoops' 'EW/Tree' 'EW/OneLoop' 'Phi3/OneLoop' 'Phi4/OneLoop' 'MSSM/Tree' +for exDir in "${array[@]}" do echo echo -e "* \c" - export MAKE_DO_NOT_LOAD_FEYNCALC="True" MAKE_DOCU_LOAD_ADDONS="{}"; export DOCU_SOURCE_DIR="${feynCalcDir}/FeynCalc/Examples/${exDir}"; ./exportToMD.sh math "$DOCU_SOURCE_DIR"/Markdown + export MAKE_DO_NOT_LOAD_FEYNCALC="True" MAKE_DOCU_LOAD_ADDONS="{}"; export DOCU_SOURCE_DIR="${feynCalcDir}/FeynCalc/Examples/${exDir}"; export FILES_TO_SKIP="Validate|Raw"; ./exportToMD.sh math "$DOCU_SOURCE_DIR"/Markdown done -for exDir in 'QED/Tree' 'QED/OneLoop' 'QED/TwoLoops' 'QCD/Tree' 'QCD/OneLoop' 'QCD/TwoLoops' 'EW/Tree' 'EW/OneLoop' 'Phi3/OneLoop' 'Phi4/OneLoop' 'MSSM/Tree' + + + +for exDir in "${array1[@]}" do echo echo -e "* \c" - export MAKE_CHANGE_CSS_PATH="../../css/feyncalc.css" MAKE_CHANGE_KATEX_PATH="../../js/" DOCU_SOURCE_DIR="${feynCalcDir}c/FeynCalc/Examples/${exDir}"; ./generateHTML.sh /media/Data/Projects/VS/feyncalc.github.io/FeynCalcExamples/${exDir} + export MAKE_CHANGE_CSS_PATH="../../../FeynCalcBookDev/css/feyncalc.css" MAKE_CHANGE_KATEX_PATH="../../../FeynCalcBookDev/js/" DOCU_SOURCE_DIR="${feynCalcDir}/FeynCalc/Examples/${exDir}"; ./generateHTML.sh /media/Data/Projects/VS/feyncalc.github.io/FeynCalcExamples/${exDir} done +for exDir in "${array2[@]}" +do + echo + echo -e "* \c" + export MAKE_CHANGE_CSS_PATH="../../../FeynCalcBookDev/css/feyncalc.css" MAKE_CHANGE_KATEX_PATH="../../../FeynCalcBookDev/js/" DOCU_SOURCE_DIR="${feynCalcDir}/FeynCalc/Examples/${exDir}"; ./generateHTML.sh /media/Data/Projects/VS/feyncalc.github.io/FeynCalcExamples/${exDir} +done # Directory structure diff --git a/FeynCalc/Examples/TopologyIdentification/TwoLoops/Markdown/B-EtaC.md b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Markdown/B-EtaC.md new file mode 100644 index 00000000..6cd9573e --- /dev/null +++ b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Markdown/B-EtaC.md @@ -0,0 +1,288 @@ +--- +title: B decaying to EtaC +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +```mathematica +description = "B -> EtaC, QCD, topology minimization, 2-loops"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +<< FeynCalc` + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:59:34 +02:00, 2f62a22c). 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!}$$ + +## Load the topologies + +```mathematica +SetDirectory[FCGetNotebookDirectory[]]; +``` + +```mathematica +rawTopologies0 = Get["RawTopologies-B-Etac.m"]; +``` + +## Run the naive topology identification + +$$\text{fcVariables}=\{\text{gkin},\text{meta},\text{u0b}\};$$ + +```mathematica +(DataType[#, FCVariable] = True) & /@ fcVariables; +``` + +```mathematica +rawTopologies = loopHead /@ (rawTopologies0); +``` + +$$\text{kinematics}=\{\text{Hold}[\text{SPD}][n]\text{-$>$}0,\text{Hold}[\text{SPD}][\text{nb}]\text{-$>$}0,\text{Hold}[\text{SPD}][n,\text{nb}]\text{-$>$}2\};$$ + +```mathematica +aux1 = FCLoopFindTopologies[rawTopologies, {k1, k2}, FCLoopIsolate -> loopHead, + FCLoopBasisOverdeterminedQ -> True, FinalSubstitutions -> kinematics, + Names -> "preTopoDia", Head -> Identity, FCLoopGetKinematicInvariants -> False, FCLoopScalelessQ -> False]; +``` + +$$\text{FCLoopFindTopologies: Number of the initial candidate topologies: }248$$ + +$$\text{FCLoopFindTopologies: Number of the identified unique topologies: }184$$ + +$$\text{FCLoopFindTopologies: Number of the preferred topologies among the unique topologies: }0$$ + +$$\text{FCLoopFindTopologies: Number of the identified subtopologies: }64$$ + +$$\text{FCLoopFindTopologies: Follwing identified topologies are scaleless and will be set to zero: }\{\text{preTopoDia31},\text{preTopoDia32},\text{preTopoDia33},\text{preTopoDia34},\text{preTopoDia60},\text{preTopoDia61},\text{preTopoDia77},\text{preTopoDia86},\text{preTopoDia88},\text{preTopoDia98},\text{preTopoDia110},\text{preTopoDia111},\text{preTopoDia118},\text{preTopoDia119},\text{preTopoDia120},\text{preTopoDia123},\text{preTopoDia139},\text{preTopoDia144},\text{preTopoDia152},\text{preTopoDia155},\text{preTopoDia156},\text{preTopoDia157},\text{preTopoDia158},\text{preTopoDia159},\text{preTopoDia160},\text{preTopoDia161},\text{preTopoDia162},\text{preTopoDia163},\text{preTopoDia164},\text{preTopoDia165},\text{preTopoDia166},\text{preTopoDia170},\text{preTopoDia174},\text{preTopoDia175},\text{preTopoDia176},\text{preTopoDia177},\text{preTopoDia178},\text{preTopoDia179},\text{preTopoDia180},\text{preTopoDia181},\text{preTopoDia182},\text{preTopoDia183},\text{preTopoDia184}\}$$ + +This particular set of topologies contains mixed quadratic-eikonal that will cause issues with the topology minimization if we leave them as is. + +To handle this situation we employ the routine `FCLoopReplaceQuadraticEikonalPropagators`, telling it the loop momenta, kinematic constraints and the rules for completing the square for the pure loop parts of the propagators + +```mathematica +topoPre = FCLoopReplaceQuadraticEikonalPropagators[aux1[[2]], LoopMomenta -> {k1, k2}, + InitialSubstitutions -> {ExpandScalarProduct[SPD[k1 - k2]] -> SPD[k1 - k2], + ExpandScalarProduct[SPD[k1 + k2]] -> SPD[k1 + k2]}, IntermediateSubstitutions -> kinematics]; +``` + +## Handle overdetermined propagator bases + +Single out topologies that have an overdetermined sets of propagators + +```mathematica +overdeterminedToposPre = Select[topoPre, FCLoopBasisOverdeterminedQ]; +``` + +```mathematica +overdeterminedToposPre // Length +``` + +$$105$$ + +Generate partial fractioning rules to be applied to the original sets of denominators + +```mathematica +AbsoluteTiming[pfrRules = FCLoopCreatePartialFractioningRules[aux1[[1]], topoPre];] +``` + +$$\{76.2728,\text{Null}\}$$ + +Some examples of such rules are + +```mathematica +pfrRules[[1]][[1 ;; 2]] +``` + +$$\left\{G^{\text{preTopoDia49}}(1,1,0,1,1,1,1)\to \frac{G^{\text{preTopoDia49PFR23}}(1,2,1,1,1)}{\text{meta} \;\text{u0b}}-\frac{G^{\text{preTopoDia49PFR35}}(1,1,2,1,1)}{\text{meta} (\text{u0b}-1)}+\frac{G^{\text{preTopoDia49PFR36}}(1,1,2,1,1)}{\text{meta} (\text{u0b}-1) \;\text{u0b}},G^{\text{preTopoDia126}}(1,1,1,1,1,1)\to \frac{G^{\text{preTopoDia126PFR2}}(1,1,2,1,1)}{\text{meta} \;\text{u0b}}-\frac{G^{\text{preTopoDia126PFR5}}(1,1,1,2,1)}{\text{meta} (\text{u0b}-1)}+\frac{G^{\text{preTopoDia126PFR6}}(1,1,1,2,1)}{\text{meta} (\text{u0b}-1) \;\text{u0b}}\right\}$$ + +These rules can be converted to FORM and used for simplifying the amplitude. + +New topologies after partial fractioning + +```mathematica +pfrToposPre = Union[First /@ pfrRules[[2]]]; +aux2 = {aux1[[1]] /. Dispatch[pfrRules[[1]]], topoPre}; +``` + +Some denominators from original topologies that do not require partial fractioning . Notice that the corresponding topologies themselves still might +contain overdetermined sets of propagators + +```mathematica +remainderDens = SelectNotFree[aux2[[1]], First /@ overdeterminedToposPre] // Union +``` + +$$\left\{G^{\text{preTopoDia100}}(1,1,0,0,1,1,1),G^{\text{preTopoDia100}}(1,1,0,0,1,2,1),G^{\text{preTopoDia105}}(1,1,1,0,0,2,1),G^{\text{preTopoDia116}}(1,1,1,1,1,1,0),G^{\text{preTopoDia126}}(1,1,1,0,0,1),G^{\text{preTopoDia126}}(1,2,1,1,1,0),G^{\text{preTopoDia130}}(1,1,0,0,2,1),G^{\text{preTopoDia142}}(1,1,0,0,2,1),G^{\text{preTopoDia143}}(1,1,1,2,0,1),G^{\text{preTopoDia147}}(1,1,0,1,1,1),G^{\text{preTopoDia147}}(1,1,0,2,1,1),G^{\text{preTopoDia149}}(1,0,1,0,2,1),G^{\text{preTopoDia2}}(1,1,1,0,1,1,0,1),G^{\text{preTopoDia22}}(1,1,0,0,0,0,0,1),G^{\text{preTopoDia23}}(1,1,1,1,1,0,1,0),G^{\text{preTopoDia25}}(1,1,0,1,1,1,0,1),G^{\text{preTopoDia28}}(1,1,0,1,1,1,0,1),G^{\text{preTopoDia39}}(1,0,1,0,1,1,1,1),G^{\text{preTopoDia39}}(1,1,1,0,1,1,0,1),G^{\text{preTopoDia4}}(1,1,0,2,0,1,1,0),G^{\text{preTopoDia49}}(1,1,0,0,1,0,1),G^{\text{preTopoDia76}}(1,1,0,0,1,2,1),G^{\text{preTopoDia79}}(1,1,1,1,1,0,1),G^{\text{preTopoDia93}}(1,1,1,0,2,0,1),G^{\text{preTopoDia95}}(1,1,0,1,1,1,0),G^{\text{preTopoDia95}}(1,1,1,0,1,1,0),G^{\text{preTopoDia96}}(1,1,1,0,0,1,1)\right\}$$ + +Determine which topologies related to these denominators are overdetermined + +```mathematica +overdeterminedTopos = FCLoopSelectTopology[remainderDens, overdeterminedToposPre]; +``` + +Group the remaining denominators together with the corresponding topologies. Remove the now irrelevant propagators from the leftover topologies + +```mathematica +toRemoveList = {#, First@SelectNotFree[overdeterminedTopos, #[[1]]], First /@ Position[#[[2]], 0]} & /@ remainderDens; +newNoPfrGLIs = (FCLoopRemovePropagator[#[[1]], #[[3]]] & /@ toRemoveList); +newNoPfrTopos = (FCLoopRemovePropagator[#[[2]], #[[3]]] & /@ toRemoveList); +``` + +List of all resulting topologies upon doing partial fractioning + +```mathematica +pfrTopos = Union[pfrToposPre, First /@ newNoPfrTopos]; +``` + +Replacement rule for renaming preTopo - topologies (with PFR - suffixes from partial fractioning) to pfrTopo topologies + +```mathematica +pfrToposNew = Table["pfrTopo" <> ToString[i], {i, 1, Length[pfrTopos]}]; +pfrRenRu = Thread[Rule[pfrTopos, pfrToposNew]]; +``` + +An extra rule for mapping the remaining denominators to the corresponding topologies with removed propagators + +```mathematica +gliRulePfr = Thread[Rule[remainderDens, newNoPfrGLIs]] /. pfrRenRu; +``` + +Final list of topologies upon doing partial fractioning + +```mathematica +relevantPFrTopos = Union[Cases[aux2[[1]] /. Dispatch[gliRulePfr], GLI[id_, ___] :> id, Infinity]]; +finalPreToposPfrRaw = SelectNotFree[Join[topoPre, pfrRules[[2]], newNoPfrTopos /. Dispatch[pfrRenRu]],relevantPFrTopos] // Union; +``` + +Identify scaleless topologies among them + +```mathematica +scalelessPfrTopos = Select[finalPreToposPfrRaw, FCLoopScalelessQ] /. Dispatch[pfrRenRu]; +``` + +Remove scaleless topologies. This gives us the final list of topologies after partial fractioning + +```mathematica +finalPreTopos = SelectFree[finalPreToposPfrRaw /. pfrRenRu, scalelessPfrTopos] // Union; +``` + +Check that there are no overdetermined topologies left + +```mathematica +If[Union[FCLoopBasisOverdeterminedQ /@ finalPreTopos] =!= {False}, + Print["ERROR! Not all overdetermined topologies were eliminated."]; + ] +``` + +Finally use `FCLoopFindTopologyMappings` to find mappings between topologies + +```mathematica +AbsoluteTiming[mappedTopos = FCLoopFindTopologyMappings[finalPreTopos];] +``` + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo378 and pfrTopo114. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo413 and pfrTopo114. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo76 and pfrTopo114. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo82 and pfrTopo114. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo97 and pfrTopo114. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo207 and pfrTopo154. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo320 and pfrTopo154. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo327 and pfrTopo154. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo6 and pfrTopo154. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo450 and pfrTopo19. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo80 and pfrTopo19. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo278 and pfrTopo203. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo349 and pfrTopo203. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies pfrTopo63 and pfrTopo23. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindMomentumShifts: }\;\text{Failed to derive the momentum shifts between topologies preTopoDia171 and pfrTopo23. This can be due to the presence of nonquadratic propagators or because shifts in external momenta are also necessary.}$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }190\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }241$$ + +$$\{22.4032,\text{Null}\}$$ + +Allowing for shifts of external momenta would give us even more mapping relations but this is not safe unless we explicitly know that the amplitude is symmetric under such shifts + +```mathematica +AbsoluteTiming[mappedToposTest = FCLoopFindTopologyMappings[finalPreTopos, Momentum -> All];] +``` + +$$\text{FCLoopFindTopologyMappings: }\;\text{Found }205\text{ mapping relations }$$ + +$$\text{FCLoopFindTopologyMappings: }\;\text{Final number of independent topologies: }226$$ + +$$\{23.6277,\text{Null}\}$$ + +Introducing new names for the final topologies + +```mathematica +finTopoNames = First /@ mappedTopos[[2]]; +finTopoNamesNew = Table["finTopo" <> ToString[i], {i, 1, Length[finTopoNames]}]; +finRenRu = Thread[Rule[finTopoNames, finTopoNamesNew]]; +``` + +Some of the final topologies might be incomplete, so we need to account for that as well + +```mathematica +finToposRenamed = mappedTopos[[2]] /. finRenRu; +incompleteTopos = Select[finToposRenamed, FCLoopBasisIncompleteQ]; +``` + +For the basis completion we can use all available propagators + +```mathematica +allProps = Union[Flatten[#[[2]] & /@ finToposRenamed]]; +completedTopos = FCLoopBasisFindCompletion[incompleteTopos, Method -> allProps]; +``` + +Generate basis completion rules + +```mathematica +basisCompletionRules = FCLoopCreateRuleGLIToGLI[completedTopos, List /@ incompleteTopos] //Flatten; +``` + +Generating the ultimate list of topologies where all propagator sets now form a basis + +```mathematica +ultimateTopos = finToposRenamed /. Thread[Rule[incompleteTopos, completedTopos]]; +ultimateToposNewNames = Table["topology" <> ToString[i], {i, 1, Length[finToposRenamed]}]; +ultimateToposRenamingRule = Thread[Rule[First /@ ultimateTopos, ultimateToposNewNames]]; +ultimateToposRenamed = ultimateTopos /. ultimateToposRenamingRule; +fcTopologies = ultimateToposRenamed; +``` + +Finally, we also need rules to eliminate scalar products + +```mathematica +ruGLI = Map[{#[[1]], FCLoopCreateRulesToGLI[#]} &, fcTopologies // FCLoopTopologyNameToSymbol]; +``` + +Names of the final topologies + +```mathematica +sortedTopologyNames = First /@ fcTopologies; +``` \ No newline at end of file diff --git a/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/B-EtaC.m b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/B-EtaC.m new file mode 100644 index 00000000..0658c810 --- /dev/null +++ b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/B-EtaC.m @@ -0,0 +1,267 @@ +(* ::Package:: *) + +(* :Title: B-EtaC *) + +(* + This software is covered by the GNU General Public License 3. + Copyright (C) 1990-2024 Rolf Mertig + Copyright (C) 1997-2024 Frederik Orellana + Copyright (C) 2014-2024 Vladyslav Shtabovenko +*) + +(* :Summary: B -> EtaC, QCD, topology minimization, 2-loops *) + +(* ------------------------------------------------------------------------ *) + + +(* ::Title:: *) +(*B decaying to EtaC*) + + +(* ::Section:: *) +(*Load FeynCalc and the necessary add-ons or other packages*) + + +description="B -> EtaC, QCD, topology minimization, 2-loops"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; +]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False +]; +< 0, \(Hold[SPD]\)[nb] -> 0, \(Hold[SPD]\)[n, nb] -> 2}\); + + +aux1=FCLoopFindTopologies[rawTopologies,{k1,k2},FCLoopIsolate->loopHead, +FCLoopBasisOverdeterminedQ->True,FinalSubstitutions->kinematics, +Names->"preTopoDia",Head->Identity,FCLoopGetKinematicInvariants->False,FCLoopScalelessQ->False]; + + +(* ::Text:: *) +(*This particular set of topologies contains mixed quadratic-eikonal that will cause issues with the topology minimization if we leave them as is.*) + + +(* ::Text:: *) +(*To handle this situation we employ the routine `FCLoopReplaceQuadraticEikonalPropagators`, telling it the loop momenta, kinematic constraints and the rules for completing the square for the pure loop parts of the propagators*) + + +topoPre=FCLoopReplaceQuadraticEikonalPropagators[aux1[[2]],LoopMomenta->{k1,k2}, +InitialSubstitutions->{ExpandScalarProduct[SPD[k1-k2]]->SPD[k1-k2], +ExpandScalarProduct[SPD[k1+k2]]->SPD[k1+k2]},IntermediateSubstitutions->kinematics]; + + +(* ::Section:: *) +(*Handle overdetermined propagator bases*) + + +(* ::Text:: *) +(*Single out topologies that have an overdetermined sets of propagators*) + + +overdeterminedToposPre=Select[topoPre,FCLoopBasisOverdeterminedQ]; + + +overdeterminedToposPre//Length + + +(* ::Text:: *) +(*Generate partial fractioning rules to be applied to the original sets of denominators*) + + +AbsoluteTiming[pfrRules=FCLoopCreatePartialFractioningRules[aux1[[1]],topoPre];] + + +(* ::Text:: *) +(*Some examples of such rules are*) + + +pfrRules[[1]][[1;;2]] + + +(* ::Text:: *) +(*These rules can be converted to FORM and used for simplifying the amplitude.*) + + +(* ::Text:: *) +(*New topologies after partial fractioning*) + + +pfrToposPre=Union[First/@pfrRules[[2]]]; +aux2={aux1[[1]]/.Dispatch[pfrRules[[1]]],topoPre}; + + +(* ::Text:: *) +(*Some denominators from original topologies that do not require partial fractioning . Notice that the corresponding topologies themselves still might *) +(*contain overdetermined sets of propagators *) + + +remainderDens=SelectNotFree[aux2[[1]],First/@overdeterminedToposPre]//Union + + +(* ::Text:: *) +(*Determine which topologies related to these denominators are overdetermined*) + + +overdeterminedTopos=FCLoopSelectTopology[remainderDens,overdeterminedToposPre]; + + +(* ::Text:: *) +(*Group the remaining denominators together with the corresponding topologies. Remove the now irrelevant propagators from the leftover topologies*) + + +toRemoveList={#,First@SelectNotFree[overdeterminedTopos,#[[1]]],First/@Position[#[[2]],0]}&/@remainderDens; +newNoPfrGLIs=(FCLoopRemovePropagator[#[[1]],#[[3]]]&/@toRemoveList); +newNoPfrTopos=(FCLoopRemovePropagator[#[[2]],#[[3]]]&/@toRemoveList); + + +(* ::Text:: *) +(*List of all resulting topologies upon doing partial fractioning*) + + +pfrTopos=Union[pfrToposPre,First/@newNoPfrTopos]; + + +(* ::Text:: *) +(*Replacement rule for renaming preTopo - topologies (with PFR - suffixes from partial fractioning) to pfrTopo topologies*) + + +pfrToposNew=Table["pfrTopo"<>ToString[i],{i,1,Length[pfrTopos]}]; +pfrRenRu=Thread[Rule[pfrTopos,pfrToposNew]]; + + +(* ::Text:: *) +(*An extra rule for mapping the remaining denominators to the corresponding topologies with removed propagators*) + + +gliRulePfr=Thread[Rule[remainderDens,newNoPfrGLIs]]/.pfrRenRu; + + +(* ::Text:: *) +(*Final list of topologies upon doing partial fractioning*) + + +relevantPFrTopos=Union[Cases[aux2[[1]]/.Dispatch[gliRulePfr],GLI[id_,___]:>id,Infinity]]; +finalPreToposPfrRaw=SelectNotFree[Join[topoPre,pfrRules[[2]],newNoPfrTopos/.Dispatch[pfrRenRu]],relevantPFrTopos]//Union; + + +(* ::Text:: *) +(*Identify scaleless topologies among them*) + + +scalelessPfrTopos=Select[finalPreToposPfrRaw,FCLoopScalelessQ]/.Dispatch[pfrRenRu]; + + +(* ::Text:: *) +(*Remove scaleless topologies. This gives us the final list of topologies after partial fractioning*) + + +finalPreTopos=SelectFree[finalPreToposPfrRaw/.pfrRenRu,scalelessPfrTopos]//Union; + + +(* ::Text:: *) +(*Check that there are no overdetermined topologies left*) + + +If[Union[FCLoopBasisOverdeterminedQ/@finalPreTopos]=!={False}, + Print["ERROR! Not all overdetermined topologies were eliminated."]; +] + + +(* ::Text:: *) +(*Finally use `FCLoopFindTopologyMappings` to find mappings between topologies*) + + +AbsoluteTiming[mappedTopos=FCLoopFindTopologyMappings[finalPreTopos];] + + +(* ::Text:: *) +(*Allowing for shifts of external momenta would give us even more mapping relations but this is not safe unless we explicitly know that the amplitude is symmetric under such shifts*) + + +AbsoluteTiming[mappedToposTest=FCLoopFindTopologyMappings[finalPreTopos,Momentum->All];] + + +(* ::Text:: *) +(*Introducing new names for the final topologies*) + + +finTopoNames=First/@mappedTopos[[2]]; +finTopoNamesNew=Table["finTopo"<>ToString[i],{i,1,Length[finTopoNames]}]; +finRenRu=Thread[Rule[finTopoNames,finTopoNamesNew]]; + + +(* ::Text:: *) +(*Some of the final topologies might be incomplete, so we need to account for that as well*) + + +finToposRenamed=mappedTopos[[2]]/.finRenRu; +incompleteTopos=Select[finToposRenamed,FCLoopBasisIncompleteQ]; + + +(* ::Text:: *) +(*For the basis completion we can use all available propagators*) + + +allProps=Union[Flatten[#[[2]]&/@finToposRenamed]]; +completedTopos=FCLoopBasisFindCompletion[incompleteTopos,Method->allProps]; + + +(* ::Text:: *) +(*Generate basis completion rules*) + + +basisCompletionRules=FCLoopCreateRuleGLIToGLI[completedTopos,List/@incompleteTopos]//Flatten; + + +(* ::Text:: *) +(*Generating the ultimate list of topologies where all propagator sets now form a basis*) + + +ultimateTopos=finToposRenamed/.Thread[Rule[incompleteTopos,completedTopos]]; +ultimateToposNewNames=Table["topology"<>ToString[i],{i,1,Length[finToposRenamed]}]; +ultimateToposRenamingRule=Thread[Rule[First/@ultimateTopos,ultimateToposNewNames]]; +ultimateToposRenamed=ultimateTopos/.ultimateToposRenamingRule; +fcTopologies=ultimateToposRenamed; + + +(* ::Text:: *) +(*Finally, we also need rules to eliminate scalar products*) + + +ruGLI=Map[{#[[1]],FCLoopCreateRulesToGLI[#]}&,fcTopologies//FCLoopTopologyNameToSymbol]; + + +(* ::Text:: *) +(*Names of the final topologies*) + + +sortedTopologyNames=First/@fcTopologies; diff --git a/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/RawTopologies-B-Etac.m b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/RawTopologies-B-Etac.m new file mode 100644 index 00000000..3c0085b8 --- /dev/null +++ b/FeynCalc/Examples/TopologyIdentification/TwoLoops/Mathematica/RawTopologies-B-Etac.m @@ -0,0 +1,1965 @@ +{SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}], SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, 1}]^2, + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2, + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}], SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1 - k2, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n + 2 gkin meta k2 . n - + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n + 2 gkin meta k2 . n - + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, (k1 - k2) . nb}, {-2 gkin meta + 2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {2 gkin meta - 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, 1}]^2, + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2, SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {-2 gkin meta + 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {-2 gkin meta + 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1 - k2, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n + 2 gkin meta k2 . n - + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}]^2, + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}]^2 SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, 0}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -k2 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, {0, 1}, + 1}], SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta - 2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, + 1}]^2 SFAD[{{k1 - k2, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n + 2 gkin meta k2 . n - + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {2 gkin meta - 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta - 2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, (k1 - k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, (k1 - k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta u0b k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, + 1}], SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {2 gkin meta - 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 2 gkin meta k1 . n - 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 2 gkin meta k1 . n - 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2, + SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2, + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{0, (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}], SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -k1 . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}]^2 SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -(k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {-2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, 1}]^2, + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2 SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, (k1 - k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, meta u0b (-k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 - k2) . nb}, {2 gkin meta - 2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 - k2) . nb}, {2 gkin meta - 2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, + 1}] SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, (k1 - k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, 2 gkin meta k1 . n - 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -meta u0b (k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta (k1 + k2) . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 + k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {0, 1}, 1}] SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (-k1 + k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}]^2, + SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, + 2 gkin meta k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}]^2 SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta k2 . n}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}]^2 SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, -k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {2 gkin meta - 2 gkin meta u0b, + 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta k2 . n - 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - 2 gkin meta u0b (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, 2 gkin meta k1 . n - 2 gkin meta k2 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, meta u0b k2 . nb}, {0, 1}, 1}], + SFAD[{{0, -k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, meta u0b (k1 + k2) . nb}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta u0b (k1 + k2) . n + + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, 1}], + SFAD[{{0, -k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, + 2 gkin meta u0b k1 . n - 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + + meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, -k2 . nb}, {0, 1}, + 1}] SFAD[{{0, -(k1 + k2) . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n + + 2 gkin meta u0b (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, meta u0b (k1 - k2) . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, -k1 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta (k1 + k2) . n}, {0, 1}, + 1}] SFAD[{{k1 + k2, + 2 gkin meta (k1 + k2) . n - + meta u0b (k1 + k2) . nb}, {2 gkin meta^2 u0b, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n + + meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1 - k2, -2 gkin meta u0b k1 . n + + meta u0b (k1 - k2) . nb + + 2 gkin meta u0b k2 . n}, {2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, 2 gkin meta u0b k2 . n}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta k1 . n + 2 gkin meta u0b k1 . n}, {0, + 1}, 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta u0b k1 . n - meta u0b k1 . nb}, {2 gkin meta^2 u0b^2, + 1}, 1}] SFAD[{{k1 - k2, -2 gkin meta k1 . n + + 2 gkin meta u0b k1 . n + 2 gkin meta k2 . n - + 2 gkin meta u0b k2 . n}, {0, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, + 2 gkin meta k2 . n - meta u0b k2 . nb}, {2 gkin meta^2 u0b, 1}, + 1}], SFAD[{{0, k2 . nb}, {0, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {0, 1}, 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta k1 . n}, {0, 1}, + 1}] SFAD[{{k1, 2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k1 + k2, 2 gkin meta (k1 + k2) . n}, {0, 1}, 1}], + SFAD[{{0, k1 . nb}, {2 gkin meta u0b, 1}, + 1}] SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k1, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + meta u0b k1 . nb}, {2 gkin meta^2 u0b - 2 gkin meta^2 u0b^2, 1}, + 1}] SFAD[{{k1 - k2, + 2 gkin meta k1 . n - 2 gkin meta u0b k1 . n - + 2 gkin meta k2 . n + 2 gkin meta u0b k2 . n + + meta u0b (-k1 + k2) . nb}, {2 gkin meta^2 u0b - + 2 gkin meta^2 u0b^2, 1}, 1}] SFAD[{{k2, 0}, {0, 1}, 1}], + SFAD[{{0, k2 . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{0, (k1 + k2) . nb}, {2 gkin meta, 1}, + 1}] SFAD[{{k1, 0}, {0, 1}, + 1}] SFAD[{{k1, -2 gkin meta u0b k1 . n}, {0, 1}, + 1}] SFAD[{{k1, -meta u0b k1 . nb}, {0, 1}, + 1}] SFAD[{{k2, 0}, {0, 1}, + 1}] SFAD[{{k2, -2 gkin meta k2 . n + 2 gkin meta u0b k2 . n}, {0, + 1}, 1}] SFAD[{{k1 + k2, -2 gkin meta (k1 + k2) . n}, {0, 1}, 1}]} diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/Renormalization.md b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/Renormalization.md new file mode 100644 index 00000000..d5069549 --- /dev/null +++ b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/Renormalization.md @@ -0,0 +1,351 @@ +--- +title: 1-loop Yukawa renormalization in the minimal subtraction schemes +--- + + +## Load FeynCalc and the necessary add-ons or other packages + +This example uses a custom QED model created with FeynRules. Please evaluate the file +FeynCalc/Examples/FeynRules/QED/GenerateModelYukawa.m before running it for the first time. + +```mathematica +description = "Renormalization, Yukawa, MS and MSbar, 1-loop"; +If[ $FrontEnd === Null, + $FeynCalcStartupMessages = False; + Print[description]; + ]; +If[ $Notebooks === False, + $FeynCalcStartupMessages = False + ]; +$LoadAddOns = {"FeynArts"}; +<< FeynCalc` +$FAVerbose = 0; + +FCCheckVersion[10, 0, 0]; +``` + +$$\text{FeynCalc }\;\text{10.0.0 (dev version, 2024-08-07 16:59:34 +02:00, 2f62a22c). 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.11 (3 Aug 2020) 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}$$ + +## Configure some options + +We keep scaleless B0 functions, since otherwise the UV part would not come out right. + +```mathematica +$KeepLogDivergentScalelessIntegrals = True; +``` + +```mathematica +FAPatch[PatchModelsOnly -> True]; + +(*Patched 4 FeynArts models.*) +``` + +## Generate Feynman diagrams + +```mathematica +params = {InsertionLevel -> {Particles}, Model -> FileNameJoin[{"LY", "LY"}], + GenericModel -> FileNameJoin[{"LY", "LY"}], ExcludeParticles -> {}}; +top[i_, j_] := CreateTopologies[1, i -> j, + ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}]; +topCT[i_, j_] := CreateCTTopologies[1, i -> j, + ExcludeTopologies -> {Tadpoles, WFCorrections, WFCorrectionCTs}]; + +{diagFermionSE, diagFermionSECT} = InsertFields[#, {F[10]} -> {F[10]}, + Sequence @@ params] & /@ {top[1, 1], topCT[1, 1]}; +{diagScalarSE, diagScalarSECT} = InsertFields[#, {S[1]} -> {S[1]}, + Sequence @@ params] & /@ {top[1, 1], topCT[1, 1]}; +{diagVertexFFS, diagVertexFFSCT} = InsertFields[#, {F[10], S[1]} -> {F[10]}, + Sequence @@ params] & /@ {top[2, 1], topCT[2, 1]}; +{diagVertexSSSS, diagVertexSSSSCT} = InsertFields[#, {S[1], S[1]} -> {S[1], S[1]}, + Sequence @@ params] & /@ {top[2, 2], topCT[2, 2]}; +``` + +```mathematica +diag1[0] = diagFermionSE[[0]][diagFermionSE[[1]], diagFermionSECT[[1]]]; +diag2[0] = diagScalarSE[[0]][diagScalarSE[[1]], diagScalarSECT[[1]]]; +diag3[0] = diagVertexFFS[[0]][diagVertexFFS[[1]], diagVertexFFSCT[[1]]]; +diag4[0] = diagVertexSSSS[[0]][diagVertexSSSS[[1]], diagVertexSSSSCT[[1]]]; +``` + +```mathematica +Paint[diag1[0], ColumnsXRows -> {2, 1}, SheetHeader -> None, + Numbering -> Simple, ImageSize -> 256 {2, 1}]; +``` + +![0f0jiq05y6868](img/0f0jiq05y6868.svg) + +```mathematica +Paint[diag2[0], ColumnsXRows -> {2, 1}, SheetHeader -> None, + Numbering -> Simple, ImageSize -> 256 {2, 1}]; +``` + +![1g0ppesv184of](img/1g0ppesv184of.svg) + +```mathematica +Paint[diag3[0], ColumnsXRows -> {2, 1}, SheetHeader -> None, + Numbering -> Simple, ImageSize -> 256 {2, 1}]; +``` + +![1nolf6xwdpe1a](img/1nolf6xwdpe1a.svg) + +```mathematica +Paint[diag4[0], ColumnsXRows -> {3, 1}, SheetHeader -> None, + Numbering -> Simple, ImageSize -> 256 {3, 1}]; +``` + +![101xx4gtoi8zd](img/101xx4gtoi8zd.svg) + +## Obtain the amplitudes + +The 1/(2Pi)^D prefactor is implicit. + +Fermion self-energy including the counter-term + +```mathematica +amp1[0] = FCFAConvert[CreateFeynAmp[diag1[0], Truncated -> True, + GaugeRules -> {}, PreFactor -> 1], + IncomingMomenta -> {p}, OutgoingMomenta -> {p}, + LoopMomenta -> {l}, UndoChiralSplittings -> True, + ChangeDimension -> D, List -> False, SMP -> True, + FinalSubstitutions -> {}, Contract -> True] +``` + +$$-\frac{(-i g).(\gamma \cdot l+\text{Mx}).(-i g)}{\left(l^2-\text{Mx}^2\right).\left((l-p)^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i \;\text{Mx} (\text{Zmx} \;\text{Zx}-1)+i (\text{Zx}-1) \gamma \cdot p$$ + +Scalar self-energy including the counter-term + +```mathematica +amp2[0] = FCFAConvert[CreateFeynAmp[diag2[0], Truncated -> True, + GaugeRules -> {}, PreFactor -> 1], + IncomingMomenta -> {p}, OutgoingMomenta -> {p}, + LoopMomenta -> {l}, UndoChiralSplittings -> True, + ChangeDimension -> D, List -> False, SMP -> True, Contract -> True] +``` + +$$\frac{\text{la}}{2 \left(l^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i \;\text{Mphi}^2 (\text{Zmphi} \;\text{Zphi}-1)+i p^2 (\text{Zphi}-1)$$ + +Fermion-scalar vertex including the counter-term + +```mathematica +amp3[0] = FCFAConvert[CreateFeynAmp[diag3[0], Truncated -> True, + GaugeRules -> {}, PreFactor -> 1], + IncomingMomenta -> {p1, k}, OutgoingMomenta -> {p2}, + LoopMomenta -> {l}, UndoChiralSplittings -> True, ChangeDimension -> D, + List -> False, SMP -> True, Contract -> True] +``` + +$$-\frac{i (-i g).(\gamma \cdot (k+l)+\text{Mx}).(-i g).(\gamma \cdot l+\text{Mx}).(-i g)}{\left(l^2-\text{Mx}^2\right).\left((k+l)^2-\text{Mx}^2\right).\left((k+l-\text{p2})^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i g \left(\text{Zg} \sqrt{\text{Zphi}} \;\text{Zx}-1\right)$$ + +Scalar self-interaction vertex including the counter-term + +```mathematica +amp4[0] = FCFAConvert[CreateFeynAmp[diag4[0], Truncated -> True, + GaugeRules -> {}, PreFactor -> 1], + IncomingMomenta -> {p1, p2}, OutgoingMomenta -> {p3, p4}, + LoopMomenta -> {l}, UndoChiralSplittings -> True, ChangeDimension -> D, + List -> False, SMP -> True, Contract -> True] +``` + +$$-\frac{2 \;\text{tr}((\text{Mx}-\gamma \cdot l).(-i g).(\gamma \cdot (-l-\text{p2})+\text{Mx}).(-i g).(\gamma \cdot (-l-\text{p2}+\text{p4})+\text{Mx}).(-i g).(\gamma \cdot (-l-\text{p2}+\text{p3}+\text{p4})+\text{Mx}).(-i g))}{\left(l^2-\text{Mx}^2\right).\left((l+\text{p2})^2-\text{Mx}^2\right).\left((l+\text{p2}-\text{p4})^2-\text{Mx}^2\right).\left((l+\text{p2}-\text{p3}-\text{p4})^2-\text{Mx}^2\right)}-i \;\text{la} \left(\text{Zla} \;\text{Zphi}^2-1\right)$$ + +## Calculate the amplitudes + +### Fermion self-energy + +```mathematica +amp1[1] = amp1[0] // ReplaceAll[#, {Zx -> 1 + alpha dZx, + Zmx -> 1 + alpha dZmx}] & // Series[#, {alpha, 0, 1}] & // + Normal // ReplaceAll[#, alpha -> 1] & +``` + +$$-\frac{(-i g).(\gamma \cdot l+\text{Mx}).(-i g)}{\left(l^2-\text{Mx}^2\right).\left((l-p)^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i \;\text{Mx} (\text{dZmx}+\text{dZx})+i \;\text{dZx} \gamma \cdot p$$ + +Tensor reduction allows us to express the electron self-energy in tems of the Passarino-Veltman coefficient functions. + +```mathematica +amp1[2] = TID[amp1[1], l, ToPaVe -> True] +``` + +$$\frac{i \pi ^2 g^2 \left(\gamma \cdot p \left(\text{Mphi}^2 \left(-\xi _{S(1)}\right)+\text{Mx}^2+p^2\right)+2 \;\text{Mx} p^2\right) \;\text{B}_0\left(p^2,\text{Mx}^2,\text{Mphi}^2 \xi _{S(1)}\right)}{2 p^2}+\frac{i \pi ^2 g^2 \gamma \cdot p \;\text{A}_0\left(\text{Mphi}^2 \xi _{S(1)}\right)}{2 p^2}-\frac{i \pi ^2 g^2 \;\text{A}_0\left(\text{Mx}^2\right) \gamma \cdot p}{2 p^2}-i (\text{dZmx} \;\text{Mx}+\text{dZx} \;\text{Mx}-\text{dZx} \gamma \cdot p)$$ + +Discard all the finite pieces of the 1-loop amplitude + +```mathematica +amp1Div[0] = PaVeUVPart[amp1[2], Prefactor -> 1/(2 Pi)^D] // + FCReplaceD[#, D -> 4 - 2 Epsilon] & // Series[#, {Epsilon, 0, 0}] & // Normal // + FCHideEpsilon // SelectNotFree2[#, {SMP["Delta"], dZx, + dZmx}] & // Simplify // Collect2[#, DiracGamma] & +``` + +$$\frac{i \left(32 \pi ^2 \;\text{dZx}+\Delta g^2\right) \gamma \cdot p}{32 \pi ^2}-\frac{i \;\text{Mx} \left(16 \pi ^2 \;\text{dZmx}+16 \pi ^2 \;\text{dZx}-\Delta g^2\right)}{16 \pi ^2}$$ + +Equating the result to zero and solving for dZx and dZmx we obtain the renormalization constants in +the minimal subtraction schemes. + +```mathematica +solMSbar1 = FCMatchSolve[amp1Div[0], {g, la, Mx, DiracGamma, SMP}]; +solMS1 = solMSbar1 /. SMP["Delta"] -> 1/Epsilon +``` + +$$\text{FCMatchSolve: Solving for: }\{\text{dZmx},\text{dZx}\}$$ + +$$\text{FCMatchSolve: A solution exists.}$$ + +$$\left\{\text{dZmx}\to \frac{3 g^2}{32 \pi ^2 \varepsilon },\text{dZx}\to -\frac{g^2}{32 \pi ^2 \varepsilon }\right\}$$ + +### Scalar self-energy + +```mathematica +amp2[0] +``` + +$$\frac{\text{la}}{2 \left(l^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i \;\text{Mphi}^2 (\text{Zmphi} \;\text{Zphi}-1)+i p^2 (\text{Zphi}-1)$$ + +```mathematica +amp2[1] = amp2[0] // ReplaceRepeated[#, {Zphi -> 1 + alpha dZphi, + Zmphi -> 1 + alpha dZmphi}] & // Series[#, {alpha, 0, 1}] & // + Normal // ReplaceAll[#, alpha -> 1] & +``` + +$$\frac{\text{la}}{2 \left(l^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i \;\text{Mphi}^2 (\text{dZmphi}+\text{dZphi})+i \;\text{dZphi} p^2$$ + +Tensor reduction allows us to express the scalar self-energy in tems of the Passarino-Veltman coefficient functions. + +```mathematica +amp2[2] = TID[amp2[1], l, ToPaVe -> True] +``` + +$$\frac{1}{2} i \pi ^2 \;\text{la} \;\text{A}_0\left(\text{Mphi}^2 \xi _{S(1)}\right)-i \left(\text{dZmphi} \;\text{Mphi}^2+\text{dZphi} \;\text{Mphi}^2-\text{dZphi} p^2\right)$$ + +Discard all the finite pieces of the 1-loop amplitude + +```mathematica +amp2Div[0] = PaVeUVPart[amp2[2], Prefactor -> 1/(2 Pi)^D] // + FCReplaceD[#, D -> 4 - 2 Epsilon] & // Series[#, {Epsilon, 0, 0}] & // Normal // + FCHideEpsilon // SelectNotFree2[#, {SMP["Delta"], dZphi, dZmphi}] & // Simplify // + Collect2[#, p, Mphi] & +``` + +$$i \;\text{dZphi} p^2-\frac{i \;\text{Mphi}^2 \left(32 \pi ^2 \;\text{dZmphi}+32 \pi ^2 \;\text{dZphi}-\Delta \;\text{la} \xi _{S(1)}\right)}{32 \pi ^2}$$ + +Equating this to zero and solving for dZphi and dZmphi obtain the renormalization constants in the minimal subtraction schemes. + +```mathematica +solMSbar2 = FCMatchSolve[amp2Div[0], {g, la, Mphi, p, SMP, GaugeXi}] +solMS2 = solMSbar2 /. SMP["Delta"] -> 1/Epsilon; +``` + +$$\text{FCMatchSolve: Following coefficients trivially vanish: }\{\text{dZphi}\to 0\}$$ + +$$\text{FCMatchSolve: Solving for: }\{\text{dZmphi}\}$$ + +$$\text{FCMatchSolve: A solution exists.}$$ + +$$\left\{\text{dZphi}\to 0,\text{dZmphi}\to \frac{\Delta \;\text{la} \xi _{S(1)}}{32 \pi ^2}\right\}$$ + +### Fermion-scalar vertex + +```mathematica +amp3[1] = amp3[0] // ReplaceRepeated[#, {Zphi -> 1 + alpha dZphi, + Zx -> 1 + alpha dZx, Zg -> 1 + alpha dZg}] & // + Series[#, {alpha, 0, 1}] & // Normal // ReplaceAll[#, alpha -> 1] & +``` + +$$-\frac{i (-i g).(\gamma \cdot (k+l)+\text{Mx}).(-i g).(\gamma \cdot l+\text{Mx}).(-i g)}{\left(l^2-\text{Mx}^2\right).\left((k+l)^2-\text{Mx}^2\right).\left((k+l-\text{p2})^2-\text{Mphi}^2 \xi _{S(1)}\right)}-i g \left(\text{dZg}+\frac{\text{dZphi}}{2}+\text{dZx}\right)$$ + +The result of the tensor reduction is quite large, since we keep the full gauge dependence and do not specify the kinematics + +```mathematica +amp3[2] = TID[amp3[1], l, ToPaVe -> True, UsePaVeBasis -> True] +``` + +$$i \pi ^2 g^3 \;\text{B}_0\left(\text{p2}^2,\text{Mx}^2,\text{Mphi}^2 \xi _{S(1)}\right)+i \pi ^2 g^3 \left(-(\gamma \cdot k).(\gamma \cdot k)-\text{Mx} \gamma \cdot k+2 \;\text{Mx}^2\right) \;\text{C}_0\left(k^2,\text{p2}^2,k^2-2 (k\cdot \;\text{p2})+\text{p2}^2,\text{Mx}^2,\text{Mx}^2,\text{Mphi}^2 \xi _{S(1)}\right)-i \pi ^2 g^3 ((\gamma \cdot k).(\gamma \cdot k)+2 \;\text{Mx} \gamma \cdot k) \;\text{C}_1\left(k^2,-2 (k\cdot \;\text{p2})+k^2+\text{p2}^2,\text{p2}^2,\text{Mx}^2,\text{Mx}^2,\text{Mphi}^2 \xi _{S(1)}\right)-i \pi ^2 g^3 ((\gamma \cdot k).(\gamma \cdot \;\text{p2})+2 \;\text{Mx} \gamma \cdot \;\text{p2}) \;\text{C}_1\left(\text{p2}^2,-2 (k\cdot \;\text{p2})+k^2+\text{p2}^2,k^2,\text{Mx}^2,\text{Mphi}^2 \xi _{S(1)},\text{Mx}^2\right)-\frac{1}{2} i g (2 \;\text{dZg}+\text{dZphi}+2 \;\text{dZx})$$ + +Discard all the finite pieces of the 1-loop amplitude + +```mathematica +amp3Div[0] = PaVeUVPart[amp3[2], Prefactor -> 1/(2 Pi)^D] // DiracSimplify // + FCReplaceD[#, D -> 4 - 2 Epsilon] & // Series[#, {Epsilon, 0, 0}] & // Normal // + FCHideEpsilon // SelectNotFree2[#, {SMP["Delta"], dZphi, + dZx, dZg}] & // ReplaceAll[#, Join[solMSbar1, solMSbar2]] & //Simplify // FCFactorOut[#, g] & +``` + +$$g \left(\frac{3 i \Delta g^2}{32 \pi ^2}-i \;\text{dZg}\right)$$ + +Equating this to zero and solving for dZg we obtain the renormalization constant in the minimal subtraction schemes. + +```mathematica +solMSbar3 = FCMatchSolve[amp3Div[0], {g, SMP}] +solMS3 = solMSbar3 /. SMP["Delta"] -> 1/Epsilon; +``` + +$$\text{FCMatchSolve: Solving for: }\{\text{dZg}\}$$ + +$$\text{FCMatchSolve: A solution exists.}$$ + +$$\left\{\text{dZg}\to \frac{3 \Delta g^2}{32 \pi ^2}\right\}$$ + +### Scalar self-interaction vertex + +```mathematica +amp4[1] = amp4[0] // ReplaceRepeated[#, {Zphi -> 1 + alpha dZphi, + Zla -> 1 + alpha dZla}] & // + Series[#, {alpha, 0, 1}] & // Normal // ReplaceAll[#, alpha -> 1] & +``` + +$$-\frac{2 \;\text{tr}((\text{Mx}-\gamma \cdot l).(-i g).(\gamma \cdot (-l-\text{p2})+\text{Mx}).(-i g).(\gamma \cdot (-l-\text{p2}+\text{p4})+\text{Mx}).(-i g).(\gamma \cdot (-l-\text{p2}+\text{p3}+\text{p4})+\text{Mx}).(-i g))}{\left(l^2-\text{Mx}^2\right).\left((l+\text{p2})^2-\text{Mx}^2\right).\left((l+\text{p2}-\text{p4})^2-\text{Mx}^2\right).\left((l+\text{p2}-\text{p3}-\text{p4})^2-\text{Mx}^2\right)}-i \;\text{la} (\text{dZla}+2 \;\text{dZphi})$$ + +The result of the tensor reduction is quite large, since we keep the full gauge dependence and do not specify the kinematics + +```mathematica +amp4[2] = TID[amp4[1], l, ToPaVe -> True, UsePaVeBasis -> True] +``` + +$$4 i \pi ^2 \;\text{B}_0\left(\text{p2}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-4 i \pi ^2 \;\text{B}_0\left(\text{p2}^2-2 (\text{p2}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-4 i \pi ^2 \;\text{B}_0\left(\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2\right) g^4+4 i \pi ^2 \;\text{B}_0\left(\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-4 i \pi ^2 \;\text{C}_0\left(\text{p2}^2,\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) \left(4 \;\text{Mx}^2-\text{p2}\cdot \;\text{p4}\right) g^4-4 i \pi ^2 \;\text{C}_0\left(\text{p3}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) \left(4 \;\text{Mx}^2+\text{p2}\cdot \;\text{p3}-\text{p3}^2-\text{p3}\cdot \;\text{p4}\right) g^4-4 i \pi ^2 \;\text{C}_0\left(\text{p3}^2,\text{p4}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) \left(4 \;\text{Mx}^2+\text{p3}\cdot \;\text{p4}\right) g^4-4 i \pi ^2 \;\text{C}_0\left(\text{p2}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) \left(2 \;\text{Mx}^2-\text{p2}^2+\text{p2}\cdot \;\text{p3}+\text{p2}\cdot \;\text{p4}+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2\right) g^4-4 i \pi ^2 \;\text{D}_0\left(\text{p2}^2,\text{p4}^2,\text{p3}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p4})+\text{p4}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) \left(16 \;\text{Mx}^4-4 \;\text{p2}^2 \;\text{Mx}^2+4 (\text{p2}\cdot \;\text{p3}) \;\text{Mx}^2+4 (\text{p2}\cdot \;\text{p4}) \;\text{Mx}^2-4 \;\text{p3}^2 \;\text{Mx}^2-4 (\text{p3}\cdot \;\text{p4}) \;\text{Mx}^2-4 \;\text{p4}^2 \;\text{Mx}^2+(\text{p2}\cdot \;\text{p4}) \;\text{p3}^2-\text{p2}^2 (\text{p3}\cdot \;\text{p4})+2 (\text{p2}\cdot \;\text{p4}) (\text{p3}\cdot \;\text{p4})-(\text{p2}\cdot \;\text{p3}) \;\text{p4}^2\right) g^4-8 i \pi ^2 (\text{p2}\cdot \;\text{p3}+\text{p2}\cdot \;\text{p4}) \;\text{C}_1\left(\text{p2}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-8 i \pi ^2 \left(\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2\right) \;\text{C}_1\left(\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-8 i D \pi ^2 \;\text{C}_{00}\left(\text{p2}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-8 i \pi ^2 \;\text{p2}^2 \;\text{C}_{11}\left(\text{p2}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-8 i \pi ^2 \left(\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2\right) \;\text{C}_{11}\left(\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p2}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-16 i \pi ^2 (\text{p2}\cdot \;\text{p3}+\text{p2}\cdot \;\text{p4}) \;\text{C}_{12}\left(\text{p2}^2,\text{p2}^2-2 (\text{p2}\cdot \;\text{p3})-2 (\text{p2}\cdot \;\text{p4})+\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{p3}^2+2 (\text{p3}\cdot \;\text{p4})+\text{p4}^2,\text{Mx}^2,\text{Mx}^2,\text{Mx}^2\right) g^4-i (\text{dZla}+2 \;\text{dZphi}) \;\text{la}$$ + +Discard all the finite pieces of the 1-loop amplitude + +```mathematica +amp4Div[0] = PaVeUVPart[amp4[2], Prefactor -> 1/(2 Pi)^D] // DiracSimplify // + FCReplaceD[#, D -> 4 - 2 Epsilon] & // Series[#, {Epsilon, 0, 0}] & // Normal // + FCHideEpsilon // SelectNotFree2[#, {SMP["Delta"], dZphi, + dZla}] & // ReplaceAll[#, Join[solMSbar1, solMSbar2]] & // Simplify +``` + +$$-\frac{1}{2} i \left(2 \;\text{dZla} \;\text{la}+\frac{\Delta g^4}{\pi ^2}\right)$$ + +Equating this to zero and solving for dZg we obtain the renormalization constant in the minimal subtraction schemes. + +```mathematica +solMSbar4 = FCMatchSolve[amp4Div[0], {g, SMP, la}] +solMS4 = solMSbar4 /. SMP["Delta"] -> 1/Epsilon; +``` + +$$\text{FCMatchSolve: Solving for: }\{\text{dZla}\}$$ + +$$\text{FCMatchSolve: A solution exists.}$$ + +$$\left\{\text{dZla}\to -\frac{\Delta g^4}{2 \pi ^2 \;\text{la}}\right\}$$ + +```mathematica +Join[solMSbar1, solMSbar2, solMSbar3, solMSbar4] // TableForm +``` + +$$\begin{array}{l} + \;\text{dZmx}\to \frac{3 \Delta g^2}{32 \pi ^2} \\ + \;\text{dZx}\to -\frac{\Delta g^2}{32 \pi ^2} \\ + \;\text{dZphi}\to 0 \\ + \;\text{dZmphi}\to \frac{\Delta \;\text{la} \xi _{S(1)}}{32 \pi ^2} \\ + \;\text{dZg}\to \frac{3 \Delta g^2}{32 \pi ^2} \\ + \;\text{dZla}\to -\frac{\Delta g^4}{2 \pi ^2 \;\text{la}} \\ +\end{array}$$ \ No newline at end of file diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.pdf b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.pdf new file mode 100644 index 0000000000000000000000000000000000000000..03e34f8b0243ad70b086ec6c3b15dce55ad848bf GIT binary patch literal 6330 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 literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.svg b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.svg new file mode 100644 index 00000000..7ba6b271 --- /dev/null +++ b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/0f0jiq05y6868.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/101xx4gtoi8zd.pdf b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/101xx4gtoi8zd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6a96ff67600335dfbb99b1641eaf53f20b527042 GIT binary patch literal 7393 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 literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1g0ppesv184of.svg b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1g0ppesv184of.svg new file mode 100644 index 00000000..c70c2fbd --- /dev/null +++ b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1g0ppesv184of.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.pdf b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a015f6fe4c60ae314da0a85e4f504b3652d89d9e GIT binary patch literal 6505 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 OV+fMk+BWNKCI16I$pbL} literal 0 HcmV?d00001 diff --git a/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.svg b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.svg new file mode 100644 index 00000000..b63a7f19 --- /dev/null +++ b/FeynCalc/Examples/Yukawa/OneLoop/Markdown/img/1nolf6xwdpe1a.svg @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e41343c44b4a441214c84bfdfe26fbec1fa79606 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 9 Aug 2024 16:24:21 +0200 Subject: [PATCH 63/67] Added new option "IgnoreNumerator" to FCFeynmanPrepare. This tells the function to ignore any positive indices when deriving the U and F polynomials. This feature is useful when applying Pak's scalefullness check to loop integrals with numerators. --- FeynCalc/LoopIntegrals/FCFeynmanPrepare.m | 8 ++++++++ Tests/LoopIntegrals/FCFeynmanPrepare.test | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m b/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m index 721525cc..fb461cdc 100755 --- a/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m +++ b/FeynCalc/LoopIntegrals/FCFeynmanPrepare.m @@ -90,6 +90,7 @@ Factoring -> {Factor2, 5000}, FinalSubstitutions -> {}, Indexed -> True, + "IgnoreNumerator" -> False, LoopMomenta -> Function[{x,y},FCGV["lmom"][x,y]], LorentzIndexNames -> FCGV["mu"], Names -> FCGV["x"], @@ -375,6 +376,13 @@ FCPrint[1, "FCFeynmanPrepare: Calling FCLoopBasisExtract.", FCDoControl -> fcszVerbose]; tmp = FCLoopBasisExtract[scalarPart, lmoms, SetDimensions->{dim}, SortBy -> sortBy]; + (* We don't need this list of scalar products here and removing it makes the output a transposable matrix *) + tmp[[2]] = ConstantArray[0,Length[tmp[[1]]]]; + + If[ OptionValue["IgnoreNumerator"], + FCPrint[1, "FCFeynmanPrepare: Ignoring the numerator of the loop integral.", FCDoControl -> fcszVerbose]; + tmp = Transpose[Transpose[tmp] /. {_,_,n_/;n<0,_} :> Unevaluated[Sequence[]]] + ]; FCPrint[1, "FCFeynmanPrepare: FCLoopBasisExtract done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fcszVerbose]; diff --git a/Tests/LoopIntegrals/FCFeynmanPrepare.test b/Tests/LoopIntegrals/FCFeynmanPrepare.test index f0efb479..e7d74df0 100644 --- a/Tests/LoopIntegrals/FCFeynmanPrepare.test +++ b/Tests/LoopIntegrals/FCFeynmanPrepare.test @@ -741,5 +741,10 @@ SFAD[{{0, k . (n + nb)}, {0, 1}, 1}], 2}, {x[2], SFAD[{{k, 0}, {m^2, 1}, 1}], 1} {x[3], SFAD[{{k - (m^2*n)/2 - nb/2, 0}, {0, 1}, 1}], 1}, {x[4], SFAD[{{k - n/2 - (m^2*nb)/2, 0}, {0, 1}, 1}], 1}}, {{x[2] + x[3] + x[4]}}, {-1/2*(FVD[n, FCGV[\"mu\"]]*(x[1] - m^2*x[3] - x[4])) - (FVD[nb, FCGV[\"mu\"]]*(x[1] - x[3] - m^2*x[4]))/2}, --(m^2*(x[2] - x[3] - x[4])), 1, 0}"} +-(m^2*(x[2] - x[3] - x[4])), 1, 0}"}, +{"fcstFCFeynmanPrepare-ID71", +"FCFeynmanPrepare[SPD[p, q] FAD[p - q, p - q], {p}, Names -> x, +\"IgnoreNumerator\" -> True]", +"{x[1], 0, {{x[1], FeynAmpDenominator[PropagatorDenominator[Momentum[p - q, D], 0]], 2}}, {{x[1]}}, +{Pair[LorentzIndex[FCGV[\"mu\"], D], Momentum[q, D]]*x[1]}, Pair[Momentum[q, D], Momentum[q, D]]*x[1], 1, 0}"} }); From 2a24a2097042c2fa6547d9da8e3ca8b0e75e352c Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 9 Aug 2024 16:25:09 +0200 Subject: [PATCH 64/67] Fixed a bug in FCLoopScalelessQ where the function would not recognize scaleless integrals whenenver they had some numerators. --- FeynCalc/LoopIntegrals/FCLoopScalelessQ.m | 11 ++++++++--- Tests/LoopIntegrals/FCLoopScalelessQ.test | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FCLoopScalelessQ.m b/FeynCalc/LoopIntegrals/FCLoopScalelessQ.m index c18a1741..750d2679 100755 --- a/FeynCalc/LoopIntegrals/FCLoopScalelessQ.m +++ b/FeynCalc/LoopIntegrals/FCLoopScalelessQ.m @@ -64,6 +64,11 @@ fclsVerbose = OptionValue[FCVerbose]]; ]; + If[ Head[lmomsRaw]=!=List, + Message[FCLoopScalelessQ::failmsg,"The second argument must be a list of loop momenta"]; + Abort[] + ]; + optFinalSubstitutions = OptionValue[FinalSubstitutions]; FCPrint[1, "FCLoopScalelessQ: Entering.", FCDoControl -> fclsVerbose]; @@ -87,19 +92,19 @@ notList = True; tmp = FCFeynmanPrepare[ex, lmoms, FCI -> True, Names -> x, Check->False, Collecting -> OptionValue[Collecting], TimeConstrained -> OptionValue[TimeConstrained], - Factoring -> OptionValue[Factoring], FinalSubstitutions -> optFinalSubstitutions, FCLoopGetEtaSigns -> False]; + Factoring -> OptionValue[Factoring], FinalSubstitutions -> optFinalSubstitutions, FCLoopGetEtaSigns -> False, "IgnoreNumerator" -> True]; tmp = {tmp}; ex = {ex}, (*List of integrals *) MatchQ[ex, {__GLI} | {__FCTopology}], tmp = FCFeynmanPrepare[ex, lmoms, FCI -> True, Names -> x, Check->False, Collecting -> OptionValue[Collecting], TimeConstrained -> OptionValue[TimeConstrained], - Factoring -> OptionValue[Factoring], FinalSubstitutions-> optFinalSubstitutions, FCLoopGetEtaSigns -> False], + Factoring -> OptionValue[Factoring], FinalSubstitutions-> optFinalSubstitutions, FCLoopGetEtaSigns -> False, "IgnoreNumerator" -> True], (*List of integrals *) MatchQ[ex, {_. _FeynAmpDenominator ..}], tmp = FCFeynmanPrepare[#, lmoms, FCI -> True, Names -> x, Check->False, Collecting -> OptionValue[Collecting], TimeConstrained -> OptionValue[TimeConstrained], - Factoring -> OptionValue[Factoring], FinalSubstitutions-> optFinalSubstitutions, FCLoopGetEtaSigns -> False]&/@ex, + Factoring -> OptionValue[Factoring], FinalSubstitutions-> optFinalSubstitutions, FCLoopGetEtaSigns -> False, "IgnoreNumerator" -> True]&/@ex, True, Message[FCLoopScalelessQ::failmsg,"Failed to recognize the form of the input expression."]; Abort[] diff --git a/Tests/LoopIntegrals/FCLoopScalelessQ.test b/Tests/LoopIntegrals/FCLoopScalelessQ.test index 9094204d..3aa33cf7 100644 --- a/Tests/LoopIntegrals/FCLoopScalelessQ.test +++ b/Tests/LoopIntegrals/FCLoopScalelessQ.test @@ -71,5 +71,7 @@ asyR3prop2Ltopo01300X01102N1, {SFAD[{{I*p3, 0}, {0, -1}, 1}], SFAD[{{0, p1 . p1}, {0, -1}, 1}], SFAD[{{0, p1 . p3}, {0, -1}, 1}], SFAD[{{0, p3 . q}, {0, -1}, 1}]}, {p1, p3}, - {q}, {SPD[q, q] -> mb^2}, {}]}]","{True}"} + {q}, {SPD[q, q] -> mb^2}, {}]}]","{True}"}, +{"fcstFCLoopScalelessQ-ID21", +"FCLoopScalelessQ[SPD[p, q] FAD[p - q, p - q], {p}]", "True"} }); From 1e4effa3a8bae99e8f3bb43a6b1269b55b550d44 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Fri, 9 Aug 2024 16:26:02 +0200 Subject: [PATCH 65/67] Improved FDS to apply FCLoopScalelessQ to all loop integrals in the input. This fixes issue #273 --- .../FeynAmpDenominatorSimplify.m | 48 ++++++++++++------- Tests/LoopIntegrals/FCMultiLoopTID.test | 29 +++++++---- .../FeynAmpDenominatorSimplify.test | 10 ++-- Tests/LoopIntegrals/TID.test | 14 +++--- 4 files changed, 62 insertions(+), 39 deletions(-) diff --git a/FeynCalc/LoopIntegrals/FeynAmpDenominatorSimplify.m b/FeynCalc/LoopIntegrals/FeynAmpDenominatorSimplify.m index 98395df2..ae592587 100644 --- a/FeynCalc/LoopIntegrals/FeynAmpDenominatorSimplify.m +++ b/FeynCalc/LoopIntegrals/FeynAmpDenominatorSimplify.m @@ -56,23 +56,25 @@ mLoopHead::usage=""; null1::usage=""; null2::usage=""; +optFCLoopScalelessQ::usage=""; FDS = FeynAmpDenominatorSimplify; Options[FeynAmpDenominatorSimplify] = { - ApartFF -> False, - Collecting -> True, - DetectLoopTopologies -> True, - ExpandScalarProduct -> True, - FCE -> False, - FCI -> False, - FCVerbose -> False, - Factoring -> Factor, - FeynAmpDenominatorCombine -> True, - IntegralTable -> {}, - FCLoopPropagatorPowersExpand -> True, - FCLoopPropagatorPowersCombine -> True, - Rename -> True + ApartFF -> False, + Collecting -> True, + DetectLoopTopologies -> True, + ExpandScalarProduct -> True, + FCE -> False, + FCI -> False, + FCVerbose -> False, + Factoring -> Factor, + FeynAmpDenominatorCombine -> True, + IntegralTable -> {}, + FCLoopPropagatorPowersExpand -> True, + FCLoopPropagatorPowersCombine -> True, + FCLoopScalelessQ -> True, + Rename -> True }; SetAttributes[FeynAmpDenominatorSimplify, Listable]; @@ -80,7 +82,7 @@ FeynAmpDenominatorSimplify[expr_, qs___/;FreeQ[{qs},Momentum], opt:OptionsPattern[]] := Block[ {ex,rest,loopInts,intsUnique, solsList,res,repRule,time, topoCheckUnique, topoCheck, multiLoopHead, solsList2, intsTops, intsTops2, optCollecting, power, fadList, - fadListEval, fadHold, intsUniqueClassified}, + fadListEval, fadHold, intsUniqueClassified, optFCLoopScalelessQ, fdsHold1L, fdsHold2L, fdsHoldXL}, If [OptionValue[FCVerbose]===False, fdsVerbose=$VeryVerbose, @@ -96,6 +98,7 @@ optCollecting = OptionValue[Collecting]; + optFCLoopScalelessQ = OptionValue[FCLoopScalelessQ]; If[ !OptionValue[FCI], ex = FeynCalcInternal[expr], @@ -181,14 +184,25 @@ FCPrint[1,"FDS: Simplifying the unique integrals. ", FCDoControl->fdsVerbose]; time=AbsoluteTime[]; solsList = intsUnique /. { - (loopHead|sLoopHead|cLoopHead)[z_,{l_}] :> fdsOneLoop[z,l], + (loopHead|sLoopHead|cLoopHead)[z_,{l_}] :> fdsHold1L[z,{l}], mLoopHead[z_,{l_}] :> (ToSFAD[z,FCI->True] /. FeynAmpDenominator :> feynord[{l}]), - loopHead[z_,{l1_,l2_}] :> multiLoopHead[oldFeynAmpDenominatorSimplify[z,l1,l2,opt]], - loopHead[z_,{l1_,l2_, l3__}] :> multiLoopHead[fdsMultiLoop[z,l1,l2,l3]], + loopHead[z_,{l1_,l2_}] :> fdsHold2L[z,{l1,l2}], + loopHead[z_,{l1_,l2_, l3__}] :> fdsHoldXL[z,{l1,l2,l3}], sLoopHead[z_,{_,__}] :> z, cLoopHead[z_,{_,__}] :> z }; + If[ TrueQ[optFCLoopScalelessQ] && !$KeepLogDivergentScalelessIntegrals, + solsList = solsList/. (h:fdsHold1L|fdsHold2L|fdsHoldXL)[z_,l_List] :> h[FCProductSplit[z,{FeynAmpDenominator}],l] /. + (h:fdsHold1L|fdsHold2L|fdsHoldXL)[{num_,den_},l_List] :> If[TrueQ[FCLoopScalelessQ[den,l]],0,h[num den, l]] + ]; + + solsList = solsList /. { + fdsHold1L[z_,{l_}] :> fdsOneLoop[z,l], + fdsHold2L[z_,{l1_,l2_}] :> multiLoopHead[oldFeynAmpDenominatorSimplify[z,l1,l2,opt]], + fdsHoldXL[z_,{l1_,l2_,l3__}] :> multiLoopHead[fdsMultiLoop[z,l1,l2,l3]] + }; + If[OptionValue[FCLoopPropagatorPowersCombine], solsList = FCLoopPropagatorPowersCombine[solsList,FCI->True]; ]; diff --git a/Tests/LoopIntegrals/FCMultiLoopTID.test b/Tests/LoopIntegrals/FCMultiLoopTID.test index 0389f562..7224294d 100644 --- a/Tests/LoopIntegrals/FCMultiLoopTID.test +++ b/Tests/LoopIntegrals/FCMultiLoopTID.test @@ -170,14 +170,11 @@ FVD[q1, mu] FVD[q2, nu] LCD[mu, nu][a, FAD[p1, {p2, m}, {p3, m}, p1, p1, p1, {-p1 + p2, m}, {-p1 + p3, m}] FVD[p1, Lor1] FVD[p1, Lor2] (SPD[p1, p1] - 2 (SPD[p1, p2] + SPD[p1, p3] - 2 SPD[p2, p3]))^2, {p1, p2, p3},FCE -> True]", - "(2*FAD[p1, p1, p1, {p1 - p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2])/D - - (4*FAD[p1, p1, p1, {p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2])/D + (2*FAD[p1, p1, {p2, m}, {p1 - p2, m}, - {p1 - p3, m}]*MTD[Lor1, Lor2])/D - (2*FAD[p1, p1, {p2, m}, {p3, m}, {p1 - p2, m}]*MTD[Lor1, Lor2])/D + - (FAD[p1, {p2, m}, {p3, m}, {p1 - p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2])/D + - (4*FAD[p1, p1, p1, {p3, m}, {p1 - p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2])/D - - (16*FAD[{p1, m}, p3, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2])/D - - (8*FAD[{p1, m}, {p2, m}, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2])/D + - (16*FAD[{p1, m}, {p2, m}, p3, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2]^2)/D"}, + "(2*FAD[p1, p1, {p2, m}, {p1 - p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2])/D - (2*FAD[p1, p1, {p2, m}, {p3, m}, {p1 - p2, m}]*MTD[Lor1, Lor2])/D + + (FAD[p1, {p2, m}, {p3, m}, {p1 - p2, m}, {p1 - p3, m}]*MTD[Lor1, Lor2])/D + (4*FAD[p1, p1, p1, {p3, m}, {p1 - p2, m}, {p1 - p3, + m}]*MTD[Lor1, Lor2]*SPD[p1, p2])/D - (16*FAD[{p1, m}, p3, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, + p2])/D - (8*FAD[{p1, m}, {p2, m}, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2])/D + (16*FAD[{p1, + m}, {p2, m}, p3, p3, p3, {p1 - p3, m}, {p2 - p3, m}]*MTD[Lor1, Lor2]*SPD[p1, p2]^2)/D"}, {"fcstFCMultiLoopTID-ID16", "FCMultiLoopTID[(GSD[l] + m) SPD[l, p2] FAD[{l, m1}, {l + p, m2}], {l}, FCE -> True]", "m*FAD[{l, m1}, {l + p, m2}]*SPD[l, p2] - (FAD[{l, m1}, {l - p, m2}]*SPD[l, p2]^2*(GSD[p2]*SPD[p, p] - @@ -315,5 +312,17 @@ k1] (-SPD[k1, k1] + D) SPD[k1, k1]) + (FAD[q1, q1 - q2, -k1 + q2] FVE[ k1, \[Mu]] SPD[k1, q1] SPD[k1, q2] SPE[k1, k1] (-3 SPD[k1, k1] + 2 SPE[k1, k1] + D SPE[k1, k1]))/(2 (1 - - D) SPD[k1, k1]^3))"} -}) + D) SPD[k1, k1]^3))"}, +{"fcstFCMultiLoopTID-ID33", +"FCMultiLoopTID[ FAD[k, -k - p + q, k + p, +p] FVD[-k - p + q, \[Alpha]] FVD[-k - p + q, \[Rho]] SPD[ +k, -k - p + q], {p, k}, FCE -> True]", +"-(FAD[k, p, k + p, k + p - q]*FVD[q, \[Alpha]]*FVD[q, \[Rho]]*SPD[k, k]) - FAD[k, p, k + p, k + p - q]*FVD[q, \[Alpha]]*FVD[q, \[Rho]]*SPD[k, p] + FAD[k, p, k + p, k + p - q]*FVD[q, \[Alpha]]*FVD[q, \[Rho]]*SPD[k, q] + +(FAD[k, k - p, p - q]*FVD[q, \[Alpha]]*FVD[q, \[Rho]]*SPD[k, q])/SPD[q, q] + (FAD[k, k - p, p - q]*SPD[k, p]*(FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/((1 - D)*SPD[q, q]) - +(FAD[k, p, k - p, p - q]*SPD[k, q]*(2*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/(2*(1 - D)) + (FAD[k, k - p, p - q]*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/(2*(1 - D)) + +(FAD[k, k - p, p - q]*SPD[k, q]^2*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/(2*(1 - D)*SPD[q, q]^2) + (FAD[p, k - p, k - q]*SPD[k, q]^2*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/ +((1 - D)*SPD[q, q]^2) - (2*FAD[k, p, k - p, p - q]*SPD[k, q]^3*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/((1 - D)*SPD[q, q]^2) - +(3*FAD[p, k - p, k - q]*SPD[k, q]*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/(2*(1 - D)*SPD[q, q]) + (3*FAD[k, p, k - p, p - q]*SPD[k, q]^2*(D*FVD[q, \[Alpha]]*FVD[q, \[Rho]] - MTD[\[Alpha], \[Rho]]*SPD[q, q]))/ +(2*(1 - D)*SPD[q, q])"} +} +) diff --git a/Tests/LoopIntegrals/FeynAmpDenominatorSimplify.test b/Tests/LoopIntegrals/FeynAmpDenominatorSimplify.test index 8f984fd6..385599a7 100644 --- a/Tests/LoopIntegrals/FeynAmpDenominatorSimplify.test +++ b/Tests/LoopIntegrals/FeynAmpDenominatorSimplify.test @@ -140,30 +140,30 @@ DetectLoopTopologies\[Rule]False,FCE\[Rule]True]", {"fcstFeynAmpDenominatorSimplify-ID28", "FDS[SFAD[{{0, p.q}}], q]","0"}, {"fcstFeynAmpDenominatorSimplify-ID29", -"FDS[SFAD[{{p, p.q}}], q, FCE -> True]","SFAD[{{p, p.q}, {0, 1}, 1}]"}, +"FDS[SFAD[{{p, p.q}}], q, FCE -> True, FCLoopScalelessQ->False]","SFAD[{{p, p.q}, {0, 1}, 1}]"}, {"fcstFeynAmpDenominatorSimplify-ID30", "FDS[SFAD[{{0, p.q}, m^2}], q]","0"}, {"fcstFeynAmpDenominatorSimplify-ID31", -"FDS[TC[q]^2 SFAD[q] CVD[q, i] CVD[q, j], q,FCE->True]", +"FDS[TC[q]^2 SFAD[q] CVD[q, i] CVD[q, j], q,FCE->True, FCLoopScalelessQ->False]", "CVD[q, i] CVD[q, j] SFAD[{{q, 0}, {0, 1}, 1}] TC[q]^2"}, {"fcstFeynAmpDenominatorSimplify-ID32", "FDS[SFAD[{{0,2q.(p+r)},0,2}],q,FCE->True]", "0"}, {"fcstFeynAmpDenominatorSimplify-ID33", "FDS[SFAD[{{0,2q.(p+r)}},{{0,2q.(p+b)}}],q,FCE->True]", "0"}, {"fcstFeynAmpDenominatorSimplify-ID34", -"FDS[SFAD[q,{{0,2q.(p+r)},0,2}],q,FCE->True]", +"FDS[SFAD[q,{{0,2q.(p+r)},0,2}],q,FCE->True, FCLoopScalelessQ->False]", "SFAD[{{q, 0}, {0, 1}, 1}, {{0, 2*q . (p + r)}, {0, 1}, 2}]"}, {"fcstFeynAmpDenominatorSimplify-ID35", "FDS[CFAD[{{0,2q.(p+r)},0,2}],q,FCE->True]", "0"}, {"fcstFeynAmpDenominatorSimplify-ID36", "FDS[CFAD[{{0,2q.(p+r)}},{{0,2q.(p+b)}}],q]", "0"}, {"fcstFeynAmpDenominatorSimplify-ID37", -"FDS[CFAD[q,{{0,2q.(p+r)},0,2}],q,FCE->True]", +"FDS[CFAD[q,{{0,2q.(p+r)},0,2}],q,FCE->True, FCLoopScalelessQ->False]", "CFAD[{{q, 0}, {0, -1}, 1}, {{0, 2*q . (p + r)}, {0, -1}, 2}]"}, {"fcstFeynAmpDenominatorSimplify-ID38", "FDS[TC[q]SFAD[q],q,FCE->True]", "0"}, {"fcstFeynAmpDenominatorSimplify-ID39", -"FDS[TC[q]^2SFAD[q],q,FCE->True]", +"FDS[TC[q]^2SFAD[q],q,FCE->True, FCLoopScalelessQ->False]", "SFAD[{{q, 0}, {0, 1}, 1}]*TC[q]^2"}, {"fcstFeynAmpDenominatorSimplify-ID40", "FDS[CFAD[{q,0,2}],q,FCE->True]", "0"}, diff --git a/Tests/LoopIntegrals/TID.test b/Tests/LoopIntegrals/TID.test index 5bf048b1..ccc88712 100644 --- a/Tests/LoopIntegrals/TID.test +++ b/Tests/LoopIntegrals/TID.test @@ -896,14 +896,14 @@ GA[5].(GAD[nu].GSD[v]-FVD[v,nu]))FVD[k,nu],k,FCE->True]", {-M^2, 1}, 1}, {{0, (-k + r) . v}, {0, 1}, 1}]*(SPD[r, v]^2 + \ M^2*SPD[v, v]))/4"}, {"fcstTID-ID44", -"TID[TC[q]^2SFAD[q]CVD[q,i]CVD[q,j],q,FCE\[Rule]True]", -"-((CFAD[{{q, 0}, {-TC[q]^2, -1}, 1}]*KDD[i, j]*TC[q]^4)/(-1 + \ -D))"}, +"TID[TC[q]^2 SFAD[{q, m}] CVD[q, i] CVD[q, j], q, FCE -> True]", +"(m*CFAD[{{q, 0}, {m - TC[q]^2, -1}, 1}]*KDD[i, j]*TC[q]^2)/(-1 + D) - (CFAD[{{q, 0}, {m - TC[q]^2, -1}, 1}]*KDD[i, j]*TC[q]^4)/(-1 + D)"}, {"fcstTID-ID45", -"TID[SFAD[q]CVD[q,i]CVD[q,j]CVD[q,k]CVD[q,l],q,FCE\[Rule]True]", -"-((CFAD[{{q, 0}, {-TC[q]^2, -1}, 1}]*(KDD[i, l]*KDD[j, k] + \ -KDD[i, k]*KDD[j, l] + KDD[i, j]*KDD[k, l])*TC[q]^4)/((-1 + D)*(1 + \ -D)))"}, +"TID[SFAD[{q, m}] CVD[q, i] CVD[q, j] CVD[q, k] CVD[q, l], q, +FCE -> True]", +"-((m^2*CFAD[{{q, 0}, {m - TC[q]^2, -1}, 1}]*(KDD[i, l]*KDD[j, k] + KDD[i, k]*KDD[j, l] + KDD[i, j]*KDD[k, l]))/((-1 + D)*(1 + D))) + +(2*m*CFAD[{{q, 0}, {m - TC[q]^2, -1}, 1}]*(KDD[i, l]*KDD[j, k] + KDD[i, k]*KDD[j, l] + KDD[i, j]*KDD[k, l])*TC[q]^2)/((-1 + D)*(1 + D)) - +(CFAD[{{q, 0}, {m - TC[q]^2, -1}, 1}]*(KDD[i, l]*KDD[j, k] + KDD[i, k]*KDD[j, l] + KDD[i, j]*KDD[k, l])*TC[q]^4)/((-1 + D)*(1 + D))"}, {"fcstTID-ID46", "TID[TC[q]^2*SFAD[q]CVD[q,i],q]", "0"}, {"fcstTID-ID47", "TID[CVD[k, i] CVD[k, j] SFAD[k, k - q], k, FCE -> True]", "(CFAD[{{k, 0}, {-TC[k - q]^2, -1}, 1}]*(4*CVD[q, i]*CVD[q, j] - 3*(-1 + D)*CVD[q, i]*CVD[q, j] - From 3c03f1be0ebbf795e488b8ecfa43816dc173c3ed Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Mon, 12 Aug 2024 17:30:53 +0200 Subject: [PATCH 66/67] Removed a confusing relation for PlusDistribution (issue #280). --- FeynCalc/Documentation/Markdown/PlusDistribution.md | 8 +------- FeynCalc/Documentation/Mathematica/QCD/PlusDistribution.m | 3 --- FeynCalc/Shared/SharedObjects.m | 3 --- Tests/Shared/SharedObjects.test | 1 - 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/FeynCalc/Documentation/Markdown/PlusDistribution.md b/FeynCalc/Documentation/Markdown/PlusDistribution.md index 97daa03c..bc4f6cb6 100644 --- a/FeynCalc/Documentation/Markdown/PlusDistribution.md +++ b/FeynCalc/Documentation/Markdown/PlusDistribution.md @@ -36,10 +36,4 @@ $$0$$ Integrate2[PlusDistribution[Log[1 - x]^2/(1 - x)], {x, 0, 1}] ``` -$$0$$ - -```mathematica -PlusDistribution[Log[x (1 - x)]/(1 - x)] -``` - -$$\frac{\log (x)}{1-x}+\left(\frac{\log (1-x)}{1-x}\right)_+$$ \ No newline at end of file +$$0$$ \ No newline at end of file diff --git a/FeynCalc/Documentation/Mathematica/QCD/PlusDistribution.m b/FeynCalc/Documentation/Mathematica/QCD/PlusDistribution.m index d8961911..f11bdd4b 100644 --- a/FeynCalc/Documentation/Mathematica/QCD/PlusDistribution.m +++ b/FeynCalc/Documentation/Mathematica/QCD/PlusDistribution.m @@ -36,6 +36,3 @@ Integrate2[PlusDistribution[Log[1-x]^2/(1-x)], {x,0,1}] - - -PlusDistribution[Log[x (1-x)]/(1-x)] diff --git a/FeynCalc/Shared/SharedObjects.m b/FeynCalc/Shared/SharedObjects.m index 1ead7f1f..df283501 100644 --- a/FeynCalc/Shared/SharedObjects.m +++ b/FeynCalc/Shared/SharedObjects.m @@ -2449,9 +2449,6 @@ ftype with (possible) Lorentz-indices lorind and $SU(N)$ indices sunind. The FCPartialD[x_, y__]/; MatchQ[{x,y},{(__LorentzIndex | __ExplicitLorentzIndex | __CartesianIndex | __Momentum | __CartesianMomentum)}] := DOT @@ Map[FCPartialD, {x, y}]; -PlusDistribution[Log[x_ (1-x_)]/(1-x_)] := - Log[x] /(1-x) + PlusDistribution[Log[1-x]/(1-x)]; - PolarizationVector[x_,{y_,z_}] := PolarizationVector[x, y, z]; diff --git a/Tests/Shared/SharedObjects.test b/Tests/Shared/SharedObjects.test index 3eb59513..2a60c8e6 100644 --- a/Tests/Shared/SharedObjects.test +++ b/Tests/Shared/SharedObjects.test @@ -965,7 +965,6 @@ I (CartesianMomentum[p1, D - 1] + 2 CartesianMomentum[q, D - 1])]", {"fcstSharedObjectsBehavior-ID163", "FCPartialD[Momentum[p1], Momentum[p2], Momentum[p3]]", "FCPartialD[Momentum[p1]].FCPartialD[Momentum[p2]].FCPartialD[Momentum[p3]]"}, {"fcstSharedObjectsBehavior-ID164", "FCPartialD[nu, mu, LorentzIndex[rho]]", " FCPartialD[nu, mu, LorentzIndex[rho]]"}, {"fcstSharedObjectsBehavior-ID165", "FCPartialD[LorentzIndex[nu], LorentzIndex[mu], LorentzIndex[rho]]", "FCPartialD[LorentzIndex[nu]].FCPartialD[LorentzIndex[mu]].FCPartialD[LorentzIndex[rho]]"}, -{"fcstSharedObjectsBehavior-ID170", "PlusDistribution[Log[z (1 - z)]/(1 - z)]", " Log[z]/(1 - z) + PlusDistribution[Log[1 - z]/(1 - z)]"}, {"fcstSharedObjectsBehavior-ID171", "Polarization[p]", "Polarization[p]"}, {"fcstSharedObjectsBehavior-ID171.1", "Polarization[p, Transversality->True]", "Polarization[p, Transversality->True]"}, {"fcstSharedObjectsBehavior-ID171.2", "Polarization[p, Transversality->False]", "Polarization[p, Transversality->False]"}, From e965c0801a5d6b3ffc77a90f929d994ed431447b Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Thu, 15 Aug 2024 16:22:48 +0200 Subject: [PATCH 67/67] Preparing for the FC 10.1 release. --- FeynCalc/Changelog.md | 627 +++++---------------------------------- FeynCalc/ChangelogOld.md | 577 +++++++++++++++++++++++++++++++++++ FeynCalc/FeynCalc.m | 2 +- FeynCalc/PacletInfo.m | 7 +- 4 files changed, 647 insertions(+), 566 deletions(-) diff --git a/FeynCalc/Changelog.md b/FeynCalc/Changelog.md index 4ab59ca3..82458aaf 100644 --- a/FeynCalc/Changelog.md +++ b/FeynCalc/Changelog.md @@ -1,575 +1,80 @@ -# Version 10.0.0 (December 2023) - +# Version 10.1.0 (August 2024) ## Removed or renamed functions, options and objects -* Removed the now obsolete options Schouten and Rename in Contract. (602aa979) -* Removed FCSubsetQ and FCDuplicateFreeQ. Now that we require at least Mma 10, one can use the built-in SubsetQ and DuplicateFreeQ instead. (886ddd6f) -* Removed TwoLoopSimplify. The new multiloop capabilities of FeynCalc 10 make it completely unnecessary. (3cdebaee) -* Removed Tr2. Now that SUNSimplify has been properly refactored, there is no need for Tr2 anymore. (551e2bfb) -* Removed overloading of Tr to use TR. One should better avoid meddling with built-in Mma functions. (13be92a1) -* Removed a bunch of obsolete symbols that Rolf used for his research but that are useless for current and new users. (208a4e93) -* Removed the declaration of GA5 as a noncommutative object, since it is always directly evaluated to DiracGamma[5]. (e4470c91) -* Removed the never used SilentTypeSetting and EvaluateFCGV options of FCGV. (3e7c9fa4) -* Removed the F2L shortcut. (f5c17ad5) -* Removed $FCS and Intersection1. (8df8cf5c) -* Removed Smu in favor of FCGV["S_mu"]. (907cdc7e) -* Removed an unused option in FCLoopPakScalelessQ. (7138a6b3) -* Removed the Dimension option in FCFeynmanParametrize and fixed a bug with the dimension of Cartesian integrals (thanks to M. Zanke) (f5ce6e01) -* Removed now obsolete FeynmanParametrize, FeynmanParametrize1, FeynmanReduce, FeynmanDoIntegrals, FeynmanParameterNames, FCIntegrate, FCNIntegrate. (0aac8b2d) - +* None ## New functionality - -* Added new 2L examples. (08edb5a2) -* Make FeynCalc work with Mathics (at least in principle) (b7ad0cc3) -* Finally implemented the MVV formula for the calculation of Larin traces. This is the new default. Old (very inefficient) algorithm can be still activated using the new option LarinMVV set to False. (83816d18) -* Initial version of FCLoopBasisIntegralToGraph, a function that converts a propagator representation of a loop integral to a graph representation. (d65a98b4) -* Allowed setting scalar products of squared vectors via "ScalarProduct[a] = aval;" and "CartesianScalarProduct[a] = aval;". (67ce36f4) -* Added new option ExpandScalarProduct to FromGFAD. (1e9a2502) -* Added an error message when trying to run FCFAConvert on an amplitude containing 4-fermion vertices with truncated spinors. (1c30424b) -* Added new function FCLoopCreatePartialFractioningRules. It allows to derive partial fraction decomposition relations using GLIs and FCTopology symbols i.e. without switching to an explicit propagator representation. (a3f38dce) -* Added new function FCLoopRemovePropagator for removing edges from GLIs and topologies. (3cade21a) -* Added new options FCReplaceMomenta and ExtraPropagators to FCFeynmanParametrize and FCFeynmanPrepare. (4b343205) -* Added new option FinalSubstitutions to FCLoopBasis. (2ae8c5d1) -* Added new function ToLightConeComponents to allow for decompositions along the lightcone. (27c0ae2b) -* Added the possibility to set scalar products for perpendicular lightcone components. (e805b4c9) -* Added new shortcuts for lightcone components of Lorentz vectors, scalar products, metric tensors and Dirac matrices. (1925f2dd) -* Added an experimental symnbol LightConePerpendicularComponent that can be used to work with perpendicular components with respect to lightcone momenta. (475e9245) -* Added FCLoopTopologyNameToSymbol: a convenience function for converting stringy topo ids to symbols. (59254189) -* Added FCDiffEqSolve, a new routine for constructing solutions of one-variable differential equations in a canonical form. (b8169d68) -* Added FCMellinJoin, a routine for splitting propagators into summands as one uses it in Mellin-Barnes calculations. (f9fd6088) -* Added FCHPL and FCGPL, symbols representing HPLs and GPLs. (427ddca7) -* Small adjustments in FCLoopApplyTopologyMappings. (84c2cd76) -* Added new head FCIteratedIntegral for representing Chen's iterated integrals. The new routines FCIteratedIntegralEvaluate and FCIteratedIntegralSimplify are intended to handle such objects. (dfe59fca) -* Added new symbol FCPartialFractionForm and routines for switching from/to this form. (b187e06a) -* Added new option EtaSign to FCFeynmanParametrize and FCFeynmanPrepare. This way one can more easily keep track of the imaginary parts of kinematic variables from the i*eta prescription. (37408334) -* Added new function FCLoopGetKinematicInvariants for extracting kinematic invariants present in the current topology. (8023d602) -* Added a new option Abort to FCFeynmanProjectivize. When set to False, the function will apply the projective transformation to the integral even if it is actually not needed. (42a18920) -* Added new function FCLoopFindSectors needed for the Kira interface in FeynHelpers. (1c1cd21e) -* Added new Kira interface to the docu script. (a9f86d86) -* Added new option List to FCLoopFromGLI. When set to True the function will return a list of propagators. (24cdf616) -* Added new routine FCLoopTensorReduce for doing tensor reduction with isolated expressions involving FCTopology and GLI objects. (76f0e986) -* Updated .gitignore (d7f3b921) -* Added new function FCGetScalarProducts for creating a list of scalar products previously set using down values. (0350f365) -* Added new factoring routine Factor3 that is specifically designed for Feynman parametric integrals and differential equations. (b02839b6) -* Added new function FCGetFreeIndices and FCGetDummyIndices for extracting the corresponding indices from the given expression. (24f9924c) -* Added new option Prefactor to Coefficient2. (9e128fc2) -* Added new options RightPartialD and LeftPartialD to ExpandPartialD. This allows for expansions, where the derivatives are supposed also to act on anything outside of the input expression. (3c46035d) -* Added new function FCTripleProduct for introducing triple products in a more convenient way. (ee03bb1d) -* Added new function ShiftPartialD for moving derivatives away from QuantumFields using IBPs. (f508a34a) -* Added new function FCLoopAddScalingParameter for facilitating asymptotic expansions based on the information obtained from asy.m (75395b1d) -* Added an example for generating the full SM FeynArts model from the template shipped with FeynRules. (3093985c) -* Added new typesetting mode to FCPartialD. (c6c04c15) -* Added LeftNablaD, RightNablaD, LeftRightNablaD and LeftRightNablaD2 to facilitate QuantumField-level derivations in NR theories. (2ae0d7a7) -* Added FCDiffEqChangeVariables, a function for introducing (singel) variable transformation in differential equations. (d111b781) -* Added new data types ImplicitDiracIndex, ImplicitPauliIndex and ImplicitSUNFIndex to avoid problems with quantum fields described in Issue #187. (ee30984c) -* Added FCToTeXReorder and FCToTeXPreviewOrder, two functions that facilitate the task of exporting Mathematica expressions into TeX in a desired way. (9794df55) -* Added new option SubtopologyMarker to FCLoopFindSubtopologies. This helps tracing the origin of the obtained subtopologies. (a85425e0) -* Added new functions FCGraphCuttableQ and FCGraphFindPath for checking whether the given loop integral (in the graph representation) can be cut. (a86da592) -* Added the LoopTools normalization of PaVe functions to FCFeynmanParametrize. (58fdb2bc) -* Added the missing TransversePolarizationVectors option to the examples. (8cfa45c4) -* Added option FinalSubstitutions to FCLoopFindTopologies and improved the function to work with lists. (14e52637) -* Added FCLoopPropagatorPowersCombine to FCLoopBasisIntegralToPropagators. (0cfed2a6) -* Added index generation to the manual. (effc7e6b) -* Added FCFeynmanRegularizeDivergence and FCFeynmanFindDivergences that reimplement findDivergences and dimregPartial from HyperInt. (a1e7c4f6) -* Added FactorList2 that emulates factors from Maple. (3bb6eea3) -* Added FCFeynmanProjectiveQ that checks if the given Feynman parameter integral is projective. (c64f065a) -* Added the LightPak option to FCLoopFindTopologyMappings. (37f76919) -* Added light Pak as a much faster version of Pak's algorithm. (01066dcb) -* Added a check against nonsensical momenta of polarization vectors when summing over polarizations. (6d116388) -* Added the NumericFunction attribute to FCClausen. (416f9b47) -* Added a check to ComplexConjugate for expressions containing multiple spinor chains but no explicit indices (thanks to D. Durbipak). (905c4e69) -* Updated usage informations. (d38c3294) -* Added FCLoopSelectTopology, a handy function for picking up topologies that match the given GLIs. (2dfa3d12) -* Added FCReloadAddOns for a more streamlined debugging of FC add-ons. (7970b823) -* Added FromGFAD to FCLoopPropagatorsToLineMomenta. (57526e26) -* Added a unit test for FCLoopScalelessQ. (ac0b34f5) -* Added FCI->True to various calls of ToSFAD. (00e96020) -* Added new function FCLoopGetEtaSigns and FCLoopSwitchEtaSigns to have a better control of the I*eta prescription in loop integral propagators. (5b986dbe) -* Added new function FCGVToSymbol and FCLoopGLIToSymbol for converting FCGVs and GLIs to symbols. (85c9daeb) -* Added NonCommHeadQ, a simple function for checking whether the head of the given expression is noncommutative. (92617e12) -* Added FCMatrixProduct, a small handy function for multiplying matrices with noncommutative entries. (ccb43cc2) -* Updated the greeting message. (d5918c4c) -* Added FCLoopCreateRulesToGLI, a function for rewriting scalar products as GLIs with negative powers. (6e9e7a93) -* Added FCLoopSingularityStructure, an experimental function for studying the singular behavior of loop integrals. (88ae0bac) -* Added new option Rename to FCLoopPakOrder. It allows for automatic renamings of the input polynomials which is quite handy when comparing functions of U and F polynomials derived by different tools. (a0d545f2) -* Added new option FCFeynmanPrepare to FCFeynmanParametrize which provides direct access to the output of FCFeynmanPrepare. (e0537c64) -* Added ToGFAD, a new function for convering different propagator types to GFADs. (8da9075d) -* Added FCLoopGLIExpand, a function for calculating expansions of GLIs in scalar variables. (d6373c7f) -* Added FCLoopGLIDifferentiate, a routine for differentiating GLIs with respect to some scalar quantity. (d2d7ac0c) -* Added FromGFAD, a function that tries to convert GFADs back into SFADs/CFADs (when possible). This is particularly useful for expansions of loop integrals, where one inevitably ends up with multiple GFAD-type propagators. (c7faa79f) -* Added Lee-Pomeransky parametrization (currently for scalar integrals only, no numerators) to FCFeynmanParametrize. (7dd84566) -* Added a warning about possibly incorrect graphs on Mma versions older than 12.3 (thanks to M. Gerlach). (e3759afb) -* Added FCLoopValidTopologyQ, a function that can validate FCTopology objects. (9a926f29) -* Renamed FCLoopFindPakMappings to FCLoopFindIntegralMappings and added new PreferredIntegrals option. (40aa4299) -* Added FCLoopFromGLI, a function that converts GLIs to FeynAmpDenominator objects. (2e5c2237) -* Added a comprehensible error message for the cases when the automatic installer fails to delete the FeynCalc directory. (5f91973d) -* Added FCReorderList, a function for reordering list and matrices. (7348b098) -* Added FCClausen, a FeynCalc representation of Clausen's function that is handy for the numerics. (697d3d76) -* Made Contract3 an internal function. There is no need to have it invoked directly by the user. (6abc99e1) -* Added FCCompareNumbers, a handy routine for determining how many significant digits agree in the given numerical results. (e9a7c602) -* Added more unit tests to FCLoopScalelessQ. (8914b307) -* Added new option FCLoopPakOrder to FCLoopToPakForm. This way one can disable the (possibly time-consuming) canonical reordering if one is only interested in getting the characteristic polynomial. (62374d52) -* Added FCLoopFindSubtopologies for enumerating all nonvanishing subtopologies inside the given topology. (5f2bb67d) -* Added FCLoopApplyTopologyMappings. (667a7b8b) -* Added FCLoopFindTopologyMappings. (1ce4639a) -* Minor change in FCLoopFindTopologies. (b02b5a3e) -* Added FCLoopScalelessQ and FCLoopPakScalelessQ for detecting scaleless integrals or topologies. (7288cba0) -* Added FCLoopFindTopologies, a function for rewriting loop amplitudes as a linear combination of integrals belonging to different (not necessarily distinct) topologies. (cc00dc48) -* Added GLI, a symbol representing a generic loop integral. (c5925702) -* Added FCPakOrder, FCToPakForm, FCFindPakMappings and FCFindLoopMomentumShifts as first building blocks towards a proper topology identification. (398d4eca) -* Added a check to Collect2 to detect ConditionalExpression right at the very beginning. (331b4b45) -* Added new Option PaVeAutoOrder to ToPaVe2. (3396fcdf) -* Added the previously forgotten FCLoopAddEdgeTags. (b6632ab8) -* Added automatic ordering of scalar D,E and F functions and of the corresponding 00.. coefficient functions. (c122d3a7) -* Added new function PaVeToABCD for converting PaVe symbols to direct PaVe functions (A0,B0, ...). (58ae61de) -* Added new option ToPaVe->Automatic to TID. (48f37ce2) -* Added FCLoopGraphPlot, a function for visualizing graphs of loop integrals created with FCLoopIntegralToGraph. (84c13495) -* Added initial support for Dirac algebra with explicit spatial indices. (a5395a70) -* Added a possibility to set $VeryVerbose before loading FeynCalc. This is useful for debugging the loading process. (8a0c7a67) -* Added some missing semicolons. (2ba3d774) -* Added new option Momentum to FCLoopIntegralToGraph. In the case of integrals where the external momenta in the propagators do not directly correspond to external legs (cf. e.g I_2^e in Fig. 2 of 1907.08227), the user may employ this option to tell the function which external legs are actually present. (90583f85) -* Added new option Reduce to FCMatchSolve. Setting it to False disables the automatic reduction of the number of variables to solve for, which is useful for cases where such a reduction leads to an unsolvable system. (3d39eb1e) -* Added new option Expanding to FCFeynmanParametrize. When set to True (default), exponents and arguments of Gamma functions are expanded via ExpandAll to produce better readable expressions. (9b53499a) -* Added new options FeynmanIntegralPrefactor, Reduce and "Euclidean" (semi-hidden) to FCFeynmanParametrize. Also fixed bugs regarding the option DiracDelta used with a 1-loop tadpole and the treatment of Euclidean integrals (thanks to M. Zanke). (2a3c6d74) -* Added FCLoopPropagatorsToLineMomenta, an auxiliary function for extracting the momentum flowing through a line in a graph from the given propagator. (6b33374b) -* Added UnDeclareAllCommutators[] and UnDeclareAllAntiCommutators[], two handy functions to simultaneously clear all user definitions of (anti)commutator. (c71edfea) -* Extended partial derivatives to support Cartesian heads. This is particularly useful for the derivation of Feynman rules in NR theories. (ed84b653) -* Added PauliChain and friends, which is essentially a Pauli version of the DiracChain. New symbols: PauliChain, PCHN, PIDelta, PauliIndexDelta, PauliIndex, ExplicitPauliIndex, PauliChainCombine, PauliChainExpand, PauliChainFactor, PauliChainJoin. (d02b01c1) -* Added new option EpsExpand to EpsEvaluate and various functions that call EpsEvaluate. Setting EpsExpand to False allows to prevent rewritings of Levi-Civita tensors contracted with sums of momenta into sums of Levi-Civita tensors. This may help to keep the resulting expressions more compact, especially when contractions of multiple epsilon tensors are involved. (87f9e8d3) -* Added FCHighLight, Variables2 and Coefficients2. The former is a small helper for highlightning specific expression in the notebook interface, while the latter two are similar to the standard Variables and Coefficients, but are somewhat more flexible and convenient to use. (6429dc88) -* Added FCMatchSolve, a very handy tool for determining renormalization constants and matching coefficients from suitably collected terms in sums or differences of amplitudes. (4f5e4020) -* Added FCSetScalarProducts, a convenience function for setting multiple kinematic-related objects (such as SPD) in one line. (6671dc80) -* Added a new convenience function FCMakeSymbols. This can save a lot of work when entering expressions such as GAD[mu1,mu2,mu3,...]. (977eca6d) -* Added FCFeynmanProjectivize for projectivizing Feynman integral before applying Cheng-Wu. (779379d3) -* Added FCFeynmanParameterJoin, FCFeynmanParametrize and FCSymanzikPolynomials which are useful routines for calculating loop integrals via the Feynman parametrization method. (9cac86c3) -* Added a new option SortBy to FCLoopBasisExtract. It is used to sort the propagators based on their powers. (557f63fb) -* Added OverscriptBox and FormBox to FCAttachTypesettingRule. (1cc32c3e) -* Updated the issue template. (f90d52b7) -* Added new routine SpinorChainEvaluate that handles the evaluation of suitable spinor inner products. SpinorChainEvaluate is also an option of DiracSimplify and many other functions that call DiracSimplify. Via DiracSpinorNormalization it is now possible to have a spinor normalization different than the standard relativistic one. (f9e0b3b0) -* Added GordonSimplify, a routine for applying Gordon identities to suitable spinor chains of vector or axial-vector current type. (fe8f6a19) -* Added a unit test for ApartFF. (2688f08f) -* Added a warning regarding the DropSumOver option for special classes of Daigrams. (18e2378d) -* Added an extra unit test for DiracSimplify. (d6b36eb2) - +* Added FCLoopAddMissingHigherOrdersWarning (5d510ade) +* Added FCLoopGLILowerDimension and FCLoopGLIRaiseDimension for doing dimension shifts on GLIs. (6622e334) +* First steps towards making FeynCalc parallelizable. (c1a9ff9a) +* Added new function FCLoopReplaceQuadraticEikonalPropagators for rewriting mixed quadratic-eikonal propagators in terms purely quadratic ones. (8990853d) ## Improvements and refactoring -* Better timings in FCLoopGLIDifferentiate. (8f74c905) -* Made FCFeynmanPrepare aware of the i*eta prescription in propagators. If the signs do not agree, the evaluation will be aborted. (61657cc6) -* Updated FCLoopFindTopologies to use FCLoopGetKinematicInvariants and added a warning in the case of variable names that are not compatible with FERMAT. (eabdc3ef) -* Increased the minimal required Mathematica version to 10. (334c6f9f) -* Renamed FCLoopBasisIntegralToGraph to FCLoopIntegralToGraph (1556cd41) -* FCLoopBasisIntegralToGraph can now properly handle dots and the propagator powers are also visible in the output. (1e7119a7) -* Modified the behavior of ExpandScalarProduct when using the Momentum option to pass this option to MomentumExpand. (dda39f58) -* FCFeynmanPrepare (formally FCSymanzikPolynomials) and FCFeynmanParametrize should be now capable of handling tensor integrals. (be83d318) -* Changed the default value of the MomentumCombine option in FCLoopBasisIntegralToPropagators to True. (32ec51d4) -* Modified FCLoopValidTopologyQ to accept topologies with -1 multiplying FeynAmpDenominators. (9665b712) -* Modified the default behavior of SelectFree2 and SelectNotFree2 to make the application of these functions to sums of terms as easy and predictable as possible. (39d2d3f3) -* Minor adjustements in FCLoopIntegralToGraph. (0d99b784) -* Updated FCLoopCreateRuleGLIToGLI to work with lists of topologies. (8029cc37) -* Remove a too restrictive check in FCLoopValidTopologyQ. (49e5611e) -* Renamed the topoid related functions to start with FCLoop and slightly changed FCLoopToPakForm. (58f4b0ee) -* Cleaned up error messages for PaVe functions. (710ee3b4) -* Disabled an extra check in Collec2, it costs too much time for large expressions. (54e41501) -* Cleaned up the FeynCalc loader. (bce0e30a) -* Disabled some questionable transformations for Polarization. Since it is an FCI object we must ensure that the syntax is always correct. (9f2098f5) -* Make FCLoopFindIntegralMappings always flatten the list of topologies. (c2f59427) -* Modified the behavior of FCLoopFindIntegralMappings to keep only the occurring master integrals in the list. (9bad2d92) -* Changed the output of FCLoopApplyTopologyMappings. It is better to keep the head so that one can process the output expression further without the need to apply Collect2 again. (c869f67b) -* Modified FCLoopGraphPlot to return an empty block for integrals where FCLoopIntegralToGraph failed to produce a graph representation. (01d131b1) -* Renamed FCLoopBasisIntegralToPropagators and FCLoopBasisPropagatorsToTopology to FCLoopIntegralToPropagators and FCLoopPropagatorsToTopology respectively. (08933900) -* FCFeynmanParametrize Unit test (04fb90f6) -* Updated automatic installer to suppress the choice dialog shown when patching FeynArts (thanks to NBAlexis, Discussion #158). (e95e98f8) -* Replaced ToString-based caching function with the standard Hash (thanks to J. Park aka j824h for reporting issue #151) (8c41304c) -* Small adjustment in FCReplaceD. (ffeb8e0b) -* Small adjustments in Factor3. (f9019300) -* Code cleanups using hints from CodeInspector. (ee27a8f2) -* Minor cleanups in the tree. (542e26d2) -* Small improvements in FCFactorOut. (fd89e1f7) -* Small improvement in the debugging output of FCFeynmanProjectivize. (80cab7fb) -* Small improvement in the way how FCLoopIntegralToGraph handles the input. (68ba7a8a) -* More improvements in the ExportToMD.m script. (2808b60b) -* Reworked the handling of symbolic propagator powers in FCFeynmanParametrize; Added new option SplitSymbolicPowers to have a better control here. (8fc60b6e) -* Refactored MomentumCombine to allow for more fine-grained combinations of momenta. (f545f622) -* Completely refactored SUNSimplify and SUNTrace to avoid existing issues with expressions remaining unevaluated or not sufficiently simplified. (7750e890) -* More refactoring in Explicit. (39a5b16c) -* Refactored Explicit. (8072f349) -* Some refactoring in ExpandPartialD and ExplicitPartialD. (35ceafe9) -* Refactored DoPolarizationSums to have a more consistent and predictable behavior (thanks to T. Ueda). (155edf8e) -* Some refactoring in DoPolarizationSums. (9a01ff5e) -* Slightly refactored SimplifyPolyLog to avoid issues with Mathematica 12.3 (2fa954d9) -* Some refactoring in ExpandPartialD. (069907f5) -* Refactored Tdec and renamed the Option UseParallelization to Parallelize. Added a debugging option Symmetrize that allows to disable the symmetrizer. (5f00b9e8) -* Refactored MomentumExpand and added a new Option Momentum that allows to expand only w.r.t. the given list of momenta. (f85ddb40) -* Some refactoring in FCMultiLoopTID. (bd2b0915) -* Imporved the option Factoring in FCMatchSolve. (d68e8234) -* Improved FCLoopFindTopologyMappings to find more relations between topologies involving eikonal propagators (provided that those can be rewritten as quadratic propagators) (8902a636) -* Improved the usage of tensor reduction with Fermat. (09c00f15) -* Improved performance of FCLoopSelectTopology. (d90a45d3) -* Improved the text output of FCLoopFindTopologies and FCLoopFindTopologyMappings to have better looking texts when running scripts. (092d0ba5) -* Improved FromGFAD even further, especially when dealing with SCET-like propagators. (46b91f27) -* Improved ApartFF to work with GLIs. (b2da5f08) -* Improved FCLoopFindMomentumShifts when dealing with propagators that have both quadratic and eikonal pieces. (4887e511) -* Improved ToLightConePerpendicularComponent. (0a5b9d2d) -* Improves core properties of Pairs involving perpendicular components. (c79600b3) -* Improved FCLoopTensorReduce and TID to support perpendicular components. (005891e3) -* Improved performance of FeynAmpDenominatorExplicit when working with large expressions. (04ed1efc) -* Improved debugging output in DoPolarizationSums. (40495f18) -* Improved performance of SUNSimplify when introducing CA and CF constants. (9ff14196) -* Improved the treatment of lightcone components in DiracTrick. (55802d78) -* Improved Uncontract to work with perpendicular components of Dirac matrices. (89a20487) -* Improved DiracOrder to work with LightConePerpendicularComponent symbols. (cd2a9ce4) -* Improved DiracGammaCombine to work with LightConePerpendicularComponent. (9c93684c) -* Improved PairContract and Uncontract to work with LightConePerpendicularComponent. (77595c7b) -* Improved MomentumExpand and MomentumCombine to work with LightConePerpendicularComponent. (8b5d38ab) -* Improved the handling of Dirac algebra for lightcone components of Dirac matrices. (62584d22) -* Improved FCIteratedIntegralEvaluate and FCIteratedIntegralSimplify. (96bb6691) -* Improved the welcome message to show the latest commit hash even when FeynCalc is loaded from a cloned git repo. (04350022) -* Improved FeynCal greeter message to display the hash and the date of the last commit (if available). (aa731bce) -* Improved docu on FCTopology. (081bf11f) -* Improved FCLoopFromGLI to return propagators in the same order as in FCTopology, if the option List is set to FeynAmpDenominator, while FeynAmpDenominatorCombine is set to False. (c064f2eb) -* Improved FCLoopFindMomentumShifyts to handle propagators with inverse signs. (6a9cc5dd) -* Improved debugging output in FCLoopIntegralToGraph and other loop-related functions. (996e0289) -* Improved FCLoopFindTopologyMappings to automatically flatten the list of preferred topologies. (c1a34ca7) -* Improved FCLoopFindTopologyMappings for cases where the randomly selected preferred topology is not suitable for mappings because shifts in external momenta are not allowed. (16a045e2) -* Improved FCLoopBasisFindCompletion to reaname the completed topologies. (d3e42d8e) -* Improved debugging output in FCLoopApplyTopologyMappings. (d87b239c) -* Improved debugging output in Contract. (acde4fe6) -* Improved ShiftPartialD by adding new option Select that allows to filter terms that one wants to manipulate. (c687d371) -* Improved ordering of multiple partial derivatives in ExpandPartialD and add new option SortBy that passes the value to SortBy of DotSimplify. (07825205) -* Improved FCLoopFindTopologies to detect kinematic rules set via scalar product down values. (9b0c1dc4) -* Improved FCLoopCanonicalize to support numerators of multiloop integrals. (0739693b) -* Improved an error message in FCFeynmanParametrize. (63940021) -* Improved ToSFAD to handle some Cartesian propagators as well. (ba479821) -* Improved FCLoopValidTopologyQ to accept denominators multiplied by constants. (33cceeb6) -* Improved FCFeynmanParametrize to work with GLIs. (73de7e16) -* Improved ExpandPartialD to handle more cases of an eps-tensor being multiplied with a noncommutative product of fields with indices and derivatives. (cabf8ac0) -* Improved GluonPropagator in the axial gauge to introduce proper eikonal SFADs instead of inverse scalar products. (7ae3749b) -* Improved error messages in FCFeynmanPrepare. (82c7acdc) -* Improved FCLoopIntegralToGraph to remove fake external momenta when reconstructing the graph. (32d7e2ea) -* Improved ToStandardMatrixElement to introduce chiral splitings in a better way. (7f2c478c) -* Improved FCLoopFindTopologies to remove scaleless topologies. Setting the option FCLoopScalelessQ to True will make the function keep such scaleless topologies in the list. (295506c9) -* Improved FCCompareNumbers for cases where the difference vanishes. (fd9a8c7c) -* Improved FCLoopApplyTopologyMappings to deliver final amplitudes writtten in terms of GLIs (provided that tensor decomposition or projectors have already been applied). (be982521) -* Improve FCLoopFindTopologyMappings to properly take subtopologies into account. (20553a32) -* Improved FCLoopFindMomentumShifts to take shifts of external momenta whenever the new option Momentum is set to all or a list of momenta. (4e1e6a03) -* Improved debugging output in FCLoopFindTopologyMappings. (240cc5cc) -* Improved FCFeynmanRegularizeDivergence to handle multiple divergences. (15ba7c7b) -* Improved FCLoopFindIntegralMappings to return only relevant masters from the preferred list; Added memoization for the generation of the mapping rules. (1b7e5f6c) -* Improved FCLoopFindTopologies to allow for expressions that are already isolated. Setting the option FCLoopIsolate to a symbol denoting the corresponding head will skip the application of FCLoopIsolate. (ddc450ea) -* Improved Variables2 to extract variables inside real and imaginary parts. (2e6d667b) -* Improved Collect2 ot have isolation work even if the function does not depend on the variables specified in the second argument. (37e5bd49) -* Improved the framework behind QuantumFields and FCPartialD to allow for derivatives that specify the variable they act on by writing e.g. FCPartialD[{CartesianIndex[i],x}]. (697d901a) -* Improved debugging output of DummyIndexFreeQ. (2707af53) -* Improved FCLoopFromGLI, FCFeynmanPrepare, FCLoopSelectTopology, FCLoopToPakForm and FCLoopFindIntegralMappings to handle products of GLIs. (9717c7dd) -* Improved MomentumCombine on integrals involving I in the propagators. (45be6958) -* Improved FCLoopGLIDifferentiate to support derivatives w.r.t. 4-vectors. (ae8f4197) -* Improve FCLoopPropagatorPowersCombine to use FeynAmpDenominatorCombine. (15c61317) -* Improved FCClearCache to allow for removing all existing memoizations. (0ee62f7a) -* Improved FCLoopBasisPropagatorsToTopology, FCLoopBasisIncompleteQ, FCLoopBasisOverdeterminedQ and FCLoopBasisFindCompletion to properly support FCTopology objects. (c0976b20) -* Improved Pair and CartesianPair to pull out the imaginary number I multiplied with momenta. (d63ae234) -* Improved typesetting of SP, SPD and SPE raised to integer powers. (6232dea5) -* Improved FCLoopFindSubtopologies. (00ac4f46) -* Updated and improved FCLoopIntegralToGraph. (5cb6ce37) -* Refactored and improved FCLoopToPakForm. (a9b48460) -* Improved FCFeynmanPrepare to properly hande FCTopology and GLI input. (4e02cae0) -* Improved FCLoopCreateRuleGLIToGLI to work on lists of subtopologies. (a2c05646) -* Improved FCLooPakOrder so that it is sufficient to specify just a variable head instead of a list of variables. (ad217ceb) -* Improved the option Head of Collect2 to support Head->{Identity,fun}. (291d89e1) -* Improved FCFeynmanPrepare to work with FCTopology input. (7ad5f311) -* Refactored and signficiantly improved the argument ordering of PaVe functions (mainly by rewriting PaVeOrder). (9cce083a) -* Refactored and improved PaVeOrder. (bf6417c6) -* Improved FCReloadFunctionFromFile to determine the location of the file automatically. (68e0acae) -* Improved FCMatchSolve to inform the user when there is only a trivial solution. (2cff0828) -* Improved performance of the Tdec regarding contractions and the search for symmetries. For higher rank integrals (rank 8 and above) the speed up can be up to 1-2 orders of magnitude . (381370dc) -* Refactored and improved FCLoopIntegralToGraph to be really useful in practice. (b5bad710) -* Improved the handling of tadpole integrals with spurious external momenta. (95da7298) -* Improved Tdec's basis symmetrizer to employ Pak's algorithm. (e67cf228) -* Improved FCLoopIsolate to work on equations, replacement rules and lists. (ceb243db) -* Improved DotSimplify to allow for custom ordering functions when applying commutators/anticommutators. (5e39bb5e) -* Improved FCFeynmanParametrize to handle overall prefactors of loop integrals. (59a66fa3) -* Improved debugging output in FCDiracIsolate. (41f803b9) -* Improved performance of FCFeynmanPrepare. (b42b7b3a) -* Improved FCFeynmanParametrize to handle loop integrals with numerators. (ef1b3c3e) -* Improved FCSymanzikPolynomials to return also the Q-vector and the J polynomial. This provides us with all the building blocks required to write down various parametrizations of scalar integrals. (af1a3607) -* Improved FCFeynmanParametrize to handle loop integrals with numerators. (ef1b3c3e) -* Improved FCSymanzikPolynomials to return also the Q-vector and the J polynomial. This provides us with all the building blocks required to write down various parametrizations of scalar integrals. (af1a3607) - +* Removed a confusing relation for PlusDistribution (issue #280). (3c03f1be) +* Improved FDS to apply FCLoopScalelessQ to all loop integrals in the input. This fixes issue #273 (1e4effa3) +* Added new option "IgnoreNumerator" to FCFeynmanPrepare. This tells the function to ignore any positive indices when deriving the U and F polynomials. This feature is useful when applying Pak's scalefullness check to loop integrals with numerators. (e41343c4) +* Updated example gallery. (a34e1a85) +* Improved debugging output in FCLoopCreateRuleGLIToGLI. (2b43b48d) +* Some improvement in FCLoopPropagatorsToLineMomenta. (0061f44a) +* Improved the algorithm for topology mappings to avoid some common issues with the determination of momentum shifts. (bb65294b) +* Extended the definitions of Momentum and CartesianMomentum to handle cases where the momentum is multiplied by a polynomial in FCVariables. (c0e61926) +* Improved FCLoopFindMomentumShifts to flag the problematic quadratic-eikonal propagators and advice the user on how to get rid of them. Also improved the handling of cases where we obtain multiple solution for possible shifts. (46152f56) +* Modified the behavior of FCE not to apply MomentumCombine to GFADs. (7baa0767) +* Improved the conversion of mixed quadratic-eikonal propagators to purely quadratic ones using FromGFAD. (4b30ada2) +* Added new option "OnlyMixedQuadraticEikonalPropagators" to ToGFAD. (3ef9d655) +* Vastly improved MomentumCombine to have more control over the way expressions get combined. (61cf2ab5) +* Added new option EpsEvaluate to DiracTrace that allows to disable the application of EpsEvaluate to the intermediate results. (a5219a8b) +* Reworked the two-loop Gh-Gh example to benefit from the new multiloop functionality. (1f3aa370) +* Added two reworked 1-loop examples using the new multiloop functionality. (c28ee69a) +* Added new options to FCLoopGetEtaSign. (2d2b7e51) +* Added an option to disable the extraction of the kinematic invariants from the topologies in FCLoopFindTopologies. (7b531cef) +* Added few results for master integrals. (65615f64) +* Added a Yukawa example. (75d75fb6) +* Updated the greeting message. (d2e1757f) +* Updated .gitignore. (9e8f29b9) +* Added an example for calculating the LO SCET Soft function using the new light-cone tools. (4620aa43) +* Added new option FinalSubstitutions to Tdec to allow for tensor decompositions with special kinematic constraints (thanks to J. Mueller). (85900808) +* Updated meta informations. (48906b2a) +* Improved debugging output in FCMatchSolve. (a1852159) +* Improved FCCanonicalizeDummyIndices to work with lists. (6bf0434c) +* Some cleanups in the example files. (271bf6c4) ## Documentation -* Clarified the usage of FCFeynmanParameterJoin in conjunction with FCFeynmanParametrize. (3249bf00) -* Corrected a typo in MasterIntegrals.md (656517ba) -* Typos corrected. (20d3d412) -* Typos corrected. (db0d2bbe) -* Small usage information updates. (cc7c201c) -* Added a docu section on patching new FR models. (393a2922) -* Minor updates of docu-related scripts and pages. (5ccd7d36) -* Clarified the usage of FCLoopApplyTopologyMappings (thanks to J.Davies) (0ff63645) -* Added some references to the page about master integrals. (16787e70) -* Updated usage infromation for all FeynCalc symbols. (d61ba9a8) -* Extended the help description of FCFeynmanParametrize. (0d6723ea) -* Added tutorials to the main documentation. (835c579d) -* Documentation cleanups. (1fe7ac1f) -* Documentation updated. (95940fda) -* Small fix in the documentation scripts. (4660f597) -* Documentation updates accounting for the previous commits. (e5a1cbe8) -* SUN-related docu updated. (f4bf3e9c) -* Documentation updates. (fc0adaef) -* Documentation updates. (748b488a) -* Minor fixes in the documentation. (ff577ef8) -* Added a section on Dirac algebra to the documentation. (0709dbd7) -* Updated scripts for generating the docu. (311ae5a4) -* Clarified the notation used for the Levi-Civita tensor in the documentation. (9765266c) -* Minor fixes and extensions in the documentation. (0c27fe43) -* Minor cleanups in the documentation (mostly spacing). (83eb8141) -* Updated documentation scripts. (933081ac) -* Documentation updated. (e71a01b1) -* Documentation updated. (17fb2395) -* Documentation updated. (566384ad) -* Cleaned up and improved documentation building scripts. (f7ad7768) -* Updated the documentation on TID. (46cfc3bc) -* Updated documentation on FeynAmpDenominator. (48c4149e) -* Updated documentation scripts. (40e6e007) -* Documentation improvements. (dd340a9b) -* Updated usage information. (e4e40404) -* Added some fixes in the documentation. (fbaad987) -* Small fix in the documentation toolchain. (d41e638c) -* Regenereated md files for the documentation. (188037a0) -* Updates scripts for building the documentation. (221aef86) -* Updated .m documentation files to prepare the code snippets for TeX export. (ce28781c) -* Minor fix in the documentation. (d78187b3) -* Documentation updated. (7a3f9aff) -* Updated documentation and added a page on the sign convention in FeynArts. (cef63e65) -* Documentation updated. (c742806a) -* Improved the documentation for FCRenameDummyIndices and FCCanonicalizeDummyIndices and fixing the missing canonicalization of PauliIndices. Added new option PauliIndexNames. (46efe6ee) -* Improved documentation for ComplexConjugate. (04da6a92) -* Improved documentation for EpsChisholm. (2117cca0) -* Documentation updated. (110d8428) -* Documentation updated. (310ca75c) -* Updated usage information. (75f96b4f) -* Updated documentation. (f969094c) -* Improved documentation on Polarization and PolarizationVector. (d915ce6e) -* Final adjustements for the removal of the documentation center. (ca2b228b) -* Moved FeynCalc documentation to the "Documentation" folder. (deff3c4e) -* Removed notebooks for the documentation center. From now on the .m-files is the source for building FeynCalc documentation. (c80c308a) -* Documentation script updated. (a64f4965) -* More documentation adjustments. (b9edddd5) -* Updated FeynCalc documentation. (32bbad42) -* Added some useful information to the documentation. (fe9841ad) -* Improved the documentation of FCFeynmanParameterJoin. (3dec376f) -* Documentation scripts updated. (dbb4adf6) -* Complete update of the .m and markdown documentation. (ea225a25) -* Updated documentation of PolarizationVector, PolarizationSum and DoPolarizationSums. (159846ab) -* Updated the documentation overview. (189090ca) -* Updated documentation for FCLoopPakScalelessQ. (c92c4911) -* Updated documentation scripts. (e4aec1c1) -* Updated documentation for FCLoopScalelessQ. (26912fe8) -* Updated documentation for FCLoopGraphPlot. (ba3cd997) -* Improved documentation of DotSimplify. (b33cebb9) -* Improved documentation of FCReplaceMomenta. (b917d9f8) -* Further small improvements of the documentation. (2338a572) -* More cleanups in the documentation. (83fb8e09) -* Further updates of the documentation. (530a0067) -* Completely regenerated the documentation files. (b62d3ec1) -* Updated documentation scripts. (1f707af5) -* Clean ups and updates in the documentation .m files. (895a65e3) -* Improved documentation on FCLoopGraphPlot. (b819d0a2) -* Updated documentation on PaVeOrder and FCLoopGraphPlot. (2dfc2b76) -* Documentation updated. (dba4f90c) -* More improvements in the documentation. (da7414fd) -* Documentation img files updated. (ebbe0e67) -* Further cleanups and fixes in the documentation files. (189fc09e) -* Some clean ups in the documentation files. (b53d13fc) -* Added a filter for the DocumentationFiles directory via the WWB .project file. (d162da8d) -* Added documentation converted to .m files. Markdown files are automatically generated using a custom script that employs M2MD. The .m files still need a lot of polishing, but this is the first step. (f2dcb970) -* Added documentation and unit tests for FCMakeSymbols. (92a3b365) -* Rebuilt documentation. (5a0396cc) -* Added documentation for FCAttachTypesettingRule and FCRemoveTypesettingRules. (9bcee388) -* Added a more complete tutorial to the documentation. (3f380262) -* Improved the documentation on DiracSimplify. (81f32816) +* Updated documentation. (2f62a22c) +* Small manual updates. (030d4ecc) +* Added some useful information on gamma5 to the manual. (a3d26394) +* Added some useful information on renormalization. (5523da89) +* Removed references to the defunct wiki. (c9882c8b) +* Infos from the wiki translated to the main docu. (14c77a8d) +* Minor adjustment in the documentation scripts. (cab39a3f) +* Documentation scripts updated. (3303697f) ## Bug fixes - -* Fixed failing integration tests. (ab806a7d) -* Fixed a bug when applying ApartFF to GLIs where the function would still apply FDS to the result (which shouldn't be done here). (3c299f3e) -* Fixed a unit test for Eps. (4e40538d) -* Fixed a bug where a single 4-dimensional index/momentum of an eps-tensor would not automatically render the whole tensor 4-dimensional (issue #247, thanks to @fabianwunder). (34062c9b) -* Fixed a bug in the automatic installer caused by a bug in Mma 13.3 (thanks to J. Davies and M. Sebastianutti). (cb5842f9) -* Fixed a minor bug in FCLoopFindIntegralMappings where the Preferred option wouldn't accept explicit FAD-integrals. (4a12494a) -* Fixed a bug in the typesetting of Eps tensors with perp components. (c17b4ccc) -* Fixed issues with FCLoopPropagatorsToLineMomenta and a unit test related to FromGFAD. (1c96841f) -* Fixed a small issue in FCLoopCreatePartialFractioningRules. (5a8a215c) -* Fixed a typo in the documentation Readme.md file. (b0bc3c1d) -* Fixed a bug in FCLoopIntegralToGraph where the ordering of propagators was not consistent with the reconstructed list of edges. (229d3b81) -* Fixed a bug in MomentumExpand where some complicated linear combinations of momenta could not be expanded. (a1add4d2) -* Fixed minor bugs/inconveniences in FCLoopBasisFindCompetion, FCLoopFindSubtopologies and FCLoopTopologyNameToSymbol. (4d72cb72) -* Fixed a minor bug in SUNSimplify, where some traces remained unevaluated (thanks to M. Nefedov, issue #224). (652ea091) -* Fixed a bug in FCLoopBasisFindCompletion where the function won't accept FADs as suggested propagators. (db74e84f) -* Fixed a bug in FCFADiracChainJoin related to issue #177. (34c9db03) -* Fixed a minor bug in FCLoopGLIDifferentiate. (ce816ccd) -* Fixed a minor bug related to the new LightConePerpendicularComponent symbol. (ff75f88d) -* Fixed a typon in Collect2. (5bcc8340) -* Fixed some bugs in FromGFAD. (2c5bb48e) -* Fixed a bug in FCFeynmanParametrize where overlapping names of variables and Feynman parameter would lead to weird error messages. (669eb2c5) -* Fixed a bug in ToFCPartialFractionForm that caused issues when applying the function to expressions already containing FCPartialFractionForm symbols. (1b6cfc9f) -* Fixed a bug in FCFeynmanParametrize where the function would fail to process some types of symbolic powers. (b978974d) -* Fixed a small bug in FCFeynmanPrepare. (22a1b0c4) -* Fixed a small bug in Coefficients2. (5e7e2c57) -* Fixed the Tables test suite. (a1be2127) -* Fixed some inconsistent error messages. (689affd6) -* Fixed a bug in FCLoopSwitchEta sign in the case of propagators raised to symbolic powers. (f1625fc8) -* Fixed a bug in FCLoopGLIExpand where terms free of the expansion variable got dropped in the final result. (d20f122b) -* Fixed a bug in FromGFAD where a check would fail because of an FCE applied to the intermediate result. (5e9424b5) -* Fixed a bug in FCLoopAddScalingParameters where no FCI was applied to the scalar product rules. (a77b006f) -* Fixed a bug in FCApart where the function would try to partial fraction integrals with symbolic propagator powers. (dd84514e) -* Fixed a bug in FCFeynmanPrepare where kinematic rules inside FCTopology were not properly taken into account. (a67cf336) -* Fixed a bug in SUNSimplify, where the color traces were not properly expanded using linearity when collecting unique color objects (thanks to M. Nefedov, Issue #208). (926b6c22) -* Fixed a typo in README.md for building the docu. (2465a23e) -* Fixed a bug in FCLoopTensorReduce where the function would erroneously set some loop integrals with external momenta in the numerators but not denominators to zero (thanks to M. Weisswange). (5234fa29) -* Fixed a bug in FCLoopToPakForm where some of the Feynman parameters were not properly renamed. (c04f6c53) -* Fixed a bug in FCFeynmanPrepare where the function would reorder propagators in an integral/topology, even when the ordering explicitly matters. (b2cc392b) -* Fixed a bug in FCCCT where the FCDiracIsolate would not expand nested dots needed to get the explicit result. (Issue #198, thanks to QSSRHelper). (3e039d88) -* Fixed a small bug in FCCompareNumbers. (9e0ee875) -* Fixed a bug in FCFeynmanParametrize that showed up when using GLIs directly. (b68e459d) -* Fixed a small bug in FCLoopApplyTopologyMappings. (1f6f6c19) -* Fixed a bug in FCLoopFindTopologies, where TemporalMomenta would get added to the list of kinematic replacements. (d35c3455) -* Fixed a bug in FCLoopFindIntegralMappings. (42a54824) -* Fixed a minor bug in SUNSimplify. (56885aad) -* Fixed a bug in Contract (thanks to @armandlcz, Discussion #204, Issue #205) (b50c6ace) -* Fixed a small bug in SUNFDeltaContract. (fcb914d4) -* Fixed a small bug in SUNTrace, where the function would introduce color indices without the SUNIndex head. (3d183b94) -* Fixed bugs in FCTraceExpand and FCTraceFactor related to colored expressions. (b05bd179) -* Fixed a bug in FCFeynmanPrepare that prevented the routine from taking the kinematic information in the topology definitions into account. (79bc8ef3) -* Fixed typos in the documentation for ShiftPartialD. (398ce05f) -* Fixed a small bug in the definition of MT. (4a406351) -* Fixed some bugs in the typesetting of SFADs. (e75f9592) -* Fixed a bug in DoPolarizationSums involving explicit temporal components of polarization vectors. (0d04643e) -* Fixed some unit tests involving CheckAbort. (38a69e21) -* Fixed a typo in the error message template for ApartFF. (f89a7f43) -* Fixed a minor bug in ExplicitPartialD related to the nabla. (f301dc4b) -* Fixed a minor bug in Contract. (8d884642) -* Fixed a small bug (error message) in FCLoopFindMomentumShifts. (73434706) -* Fixed a bug where ApartFF would not cancel q^0 in the numerator for suitable integrals. This also required some changes in the handling of propagators raised to integer powers in FDS and TID. (a502377f) -* Fixed spurious hash collisions in MemSet. (845ee899) -* Fixed a bug in FCLoopFindSubtopologies where a topology without nonvanishing subtopologies would produce error messages. (c2c0a42c) -* Fixed a bug in FCLoopApplyTopologyMappings and added new option IsolateNames. (1eae5c64) -* Fixed a small bug in FCLoopBasisSplit. (a09504b1) -* Fixed a bug in GluonPropagator. (5239a07a) -* Fixed a bug in Contract (issue #194). (7c72756c) -* Fixed a typo in the docu page for CProductSplit. (9e6eca26) -* Fixed a bug in FCLoopApplyTopologyMappings, where the function could not handle an empty list of mappings. (badaba71) -* Fixed a bug in FCLoopFindTopologies where the function generated incomplete topologies for cases where a topology completely consists of added propagators. (76480e20) -* Fixed a bug in SpinorChainTranspose when using the option First (#issue 177). (ca803c11) -* Fixed a bug in DiracTrick with missing terms when evaluating some BMHV algebra expressions (issue #183). (eb87004c) -* Fixed a bug in FromGFAD where a GFAD without any momenta would not be correctly eliminated. (771dc59c) -* Fixed a bug in SpinorChainTranspose (related to issue #177). (8d4c2f80) -* Fixed a bug in FCFeynmanPrepare where the function would fail to handle some scaleless eikonal integrals. (0e7b4da2) -* Fixed a bug in FCLoopIntegralToGraph that prevented a proper reconstruction of some triangle topologies (thanks to J. Davies) (e4ea3895) -* Fixed a bug in FCFADiracChainJoin where the First option was not working properly (related to issue #177) (34b6d59d) -* Fixed a bug when FCFeynmanPrepare could not handle GLIs with negative indices. (1f75a058) -* Fixed a bug where several topology related functions would not recognize identical topologies that differ only in the SFAD vs FAD notation (thanks to J. Davies). (f374cae0) -* Fixed a bug in DiracTrick that leads to incorrect results when sufficiently nested dots are present in the input (issue #176) (151be5d5) -* Fixed a bug in FCLoopIntegralToGraph, where an input provided as a list of propagators would still get sorted during the graph reconstruction so that the original ordering gets lost (thanks to M. Gerlach). (cf7a6276) -* Fixed a minor bug in FCCompareNumbers. (fe3db739) -* Fixed a bug in Isolate replated to numerical input (thanks to A. Kachanonovich). (222ead98) -* Fixed a bug with broken images in the documentation. (14ce8bf6) -* Fixed a bug in FCMatchSolve when the automatic detection of free variables failed and produced an unsolvable system. (16655836) -* Fixed a bug in DOTSimplify related to the separation of Dirac and color structures (Issue #168, thanks to QSSRHelper) (af41428c) -* Fixed a bug in ToPaVe (issue #166, thanks to HBelusca). (9ed6145c) -* Fixed a bug in FeynAmpDenominatorSimplify (Issue #165, thanks to HBelusca). (9a3b2a5f) -* Fixed a bug in FeynAmpDenominatorCombine. (7592f8eb) -* Fix of the previous commit. (5119d640) -* Fixed a bug in FAPatch where setting the option Quiet to True did not suppress the ChoiceDialog. (1705b3bc) -* Fixed a missing FCI conversion when setting scalar products (thanks to S. Nabeebaccus). (ac4917dc) -* Fixed a small bug in FCFAConvert. (217dbe44) -* Fixed some bugs in FCLoopBasisIntegralToPropagators and FCLoopPropagatosToTopology. (beff2f31) -* Fixed FourDivergence and ThreeDivergence to work in the BMHV scheme. Resolves issue #69. (8b6c89b3) -* Fixed a bug in FCFADiracChainJoin (issue #143, thanks to Turgon). (7d325426) -* Fixed a bug in FCLoopFromGLI which prevented the proper conversion of GLIs with noninteger indices. (26bf55fd) -* Fixed a bug in FCFeynmanPrepare, where the function could not handle a list containing more loop momenta than actually present in the integral. This case is important for finding mappings between integrals that depend on different loop momenta. (7125867b) -* Fixed a bug in FCCompareNumbers where ComplexExpand was applied to purely real expressions. (647e6476) -* Fixed a typo in FCLoopSelectTopology. (fd9de361) -* Fixed a bug in FCCheckVersion. (7b2eb077) -* Fixed a bug with some substitutions not being performed in FCFeynmanParametrize. (d938a51c) -* Fixed issues with replacements in FCLoopGLIExpand and added new option Collecting (True by default) to have the output collected w.r.t. GLIs and invariants. (108ac95a) -* Fixed incorrect I*eta signs in eikonal propagators added by FCLoopBasisFindCompletion. (e0ec20e6) -* Fixed incorrect Ieta sings in ToSFAD. (0a570d24) -* Fixed minor typos in the documentation. (a50e78e5) -* Fixed a bug in FCLoopPropagatorPowerCombine. (3ab33f6a) -* Fixed a bug in FCLoopFromGLI. (f70b68aa) -* Fixed a bug in FCLoopPropagatorsToLineMomenta. (30c21712) -* Fixed issues in the naming of topologies in FCLoopFindTopologies. (1a523002) -* Fixed unit tests for FCLoopFindIntegralMappings. (c2858df2) -* Fixed a small bug in FCLoopPakOrder. (765601e5) -* Fixed and improved FCLoopScalelessQ and FCLoopPakScalelessQ. (6f7364e8) -* Fixed a small bug in FCLoopToPakForm related to vanishing characteristic polynomials. (2684d16b) -* Fixed and improved FCLoopFindTopologyMappings. (37a33a0b) -* Fixed and improved FCLoopFindMomentumShifts. (74fa5f4b) -* Fixed FCLoopPropagatorsToLineMomenta to work with reversed sign propagators. (2ff33114) -* Fixed small bugs in FCLoopFindMomentumShifts and FCLoopFindTopologyMappings. (bb66957b) -* Fixed several unit tests. (9fce6573) -* Fixed a small bug in FCFeynmanParametrize. (6f68190a) -* Fixed infinite loops in FCLoopIntegralToGraph. Also added support for FCTopology input and updated the documentation. (6c8ae5af) -* Fixed a bug in FCFeynmanPrepare where the ordering of propagators (67f5a4b2) -* Fixed and improved FCLoopFindPakMappings. (c05097f8) -* Fixed and improved FCLoopFindMomentumShift. (dd9c027b) -* Fixed a typo in FCFeynmanProjectivize. (b1652cdc) -* Fixed small bugs in FCFindPakMappings and FCToPakForm. (edde970f) -* Fixed a bug in PaVeUVPart. (5ffdb09b) -* Fixed unit tests in Mathematica 12.3 (1edc9587) -* Fixed a small bug in FCLoopSplit. (53d5f027) -* Fixed a bug in the dev version installer. Fixes issue #120 (thanks to kenmimasu!) (b550dbb4) -* Fixed a bug with wrong memoization in TID and ToPaVe. (7eb3c8a4) -* Fixed a wrong option name in DotSimplify. (6438a497) -* Fixed another missing semicolon. (1ba87f1d) -* Fixed a bug in the determination of $FCMemoryAvailable. (20acead8) -* Fixed a bug in FCFeynmanParametrize where setting an explicit prefactor led to an incorrect result. The corresponding unit tests reproduce results from Eqs. 9.49a-9.51b of George Sterman's QFT book. (503e5cc3) -* Fixed typos in the documentation notebooks. (c5e0d2ed) -* Fixed a bug in FCFeynmanParametrize where the FCI was not applied to the value of the FinalSubstitutions option. (badfa806) -* Fixed a bug in FCFeynmanProjectivize that prevented the function from properly handling integrals with multiple scales. (ac9fb5b2) -* Fixed some bugs in FCFeynmanProjectivize where it would erroneously report an integral as being not projective. The performance has also been improved by using random primes to check the projectivity. (68115608) -* Fixed a bug in PaVeUVPart where terms of the type (D-4)*PaVe would be erroneously reported as UV-divergent. The absence of the divergence was visible in the output, thhough (75132a9c) -* Fixed a bug in FDS where Euclidean-style propagators `SFAD[{I p, -m2^2}]` generated errors. (0cf19d70) -* A fix for the Feynman parametrization that was forgotten in the previous commits. (f59db5c4) -* Fixed a Typo in the description of CFAD (thanks to M. Zanke) (8413e2c0) -* Fixed a small bug in Variables2 where Union sometimes was not applied. (110510f3) -* Fixed a unit test for FCFeynmanParametrize. (d98bfc52) -* Fixed a bug in FCFeynmanPrepare where Cartesian integrals with temporal loop momentum components were not handled properly. (0c9bb23e) -* Fixed and updated the output of FCLoopIntegralToGraph to ensure that the graph representation can be easily visualized. (9347014c) -* Fixed a bug in FCPartialD, where time derivatives where not expanded as they should. (3bbbba2d) -* Fixed a bug in FCFeynmanParametrize with a wrong prefactor in tensor integrals (thanks to M. Zanke). (8fd58fa0) -* Fixed a bug in TID where the ExpandScalarProduct option didn't work as expected. (aa4d3466) -* Fixed a small bug in FCLoopBasisIntegralToGraph. (a578e76f) -* Fixed a bug in FCMatchSolve, where the function fails to recognize an unsolvable system. (fa5af095) -* Fixed a unit test for FCMatchSolve. (9313f462) -* Fixed a small bug in FCFeynmanParametrize. (4894a7f0) -* Fixed issue #76 where Spinors with incorrect syntax could produce wrong results unnoticed. From now on relevant functions will check the syntax explicitly and abort the evaluation if there are inconsistencies. (51a6aefb) -* Fixed lost commits to TID from the previous PRs. (79885bd0) -* Fixed bugs in TID and ToPaVe that prevented application of these routines to multiloop integrals that factorize into products of 1-loop integrals. (73cb34b6) -* Fixed a bug with FermionSpinSum failing to evaluate FCCCT expressions (thanks to P. Knees). (c02f374b) -* Fixed a failing check when producing the output of FCApart (thanks to A. Kachanovich) (4c562a0d) -* Fixed a small bug when a PauliTrace of unit matrix remained unevaluated after PauliSimplify. (d82a316d) -* Fixed a unit test. (78ebd79d) -* Removed error due to Mandelstam setting for 3 QCD Examples. (#104) (66b72b21) -* Fixed a small bug in FCPrepareFAAmp. (fade3168) -* Fixed inconsistent naming convention: NDR-Discard was called NDR-Drop in multiple places in the code (thanks to Hermès BÉLUSCA - MAÏTO) (0b95238a) -* Fixed a bug in FCMultiLoopTID when applied to integrals containing D-4- and 4-dimensional loop momenta (GitHub Issue #52) (3339f6c9) -* Fixed a bug in ToSFAD for massive propagators. (a3aab44f) -* fix Small in FCFADiracChainJoin. (ce8f6683) -* Small bugfix in FCLoopGLIToSymbol. (afc765b6) -* Fixed a bug in ApartFF where some piece of topologies might be erroneously treated as scaleless integrals. (51306020) -* Improved FCLoopCreateRuleGLIToGLI to create reverse rules and fixed a bug where a missing ExpandScalarProduct would prevent the creation of rules for identical topologies involving SFADs. (aa5769bf) -* Small fix in the markdown docu. (e8b50aee) -* A small fix in FCMultiLoopTID needed for FCLoopTensorReduce. (dbd3a9d9) -* Added PairContract2 to fix performance issues in Tdec after refactoring Contract, PairContract and PairContract2. (fda93224) -* Refactored large parts of Contract and PairContract to fix some incorrect contractions when using the BMHV scheme (issue #182). (794908c9) -* Small fix in FCLoopPakScalelessQ. (75fc0856) -* Minor fixes (spelling etc.) in several functions. (c4193efb) -* Some minor fixes in FCLoopToPakForm. (ad275818) -* Some fixes in FCToPakForm. (57e648fd) -* Bugfixes that didn't make it into the last commit. (69041ff5) -* Additional fixes for FCMultiLoopTID (referring to Issue #52 and Issue #54) (790aab5d) +* Fixed a bug in FCLoopScalelessQ where the function would not recognize scaleless integrals whenenver they had some numerators. (2a24a209) +* Fixed a bug in the Larin scheme when dealing with left handed projectors inside the matrix chain (thanks to M. Lang). (b16e8800) +* Fixed a bug where Dirac trace with a g^5 at the beginning of the chain couldn't be evaluated in the Larin scheme (thanks to M. Lang) (cbf955f9) +* Fixed some mistakes in the documentation. (f72a2408) +* Fixed a bug in the automatic installer when using Mma 14. (6c897a39) +* Fixed some bugs in FCLoopFindIntegralMappings when running in the parallelized settings. (51733ec3) +* Fixed a bug in FCLoopBasisExtract where integrals containing propagators with different i*eta presriptions were not treated consistently. (ad9fc8fe) +* Fixed a unit test for FourDivergence. (309bcc06) +* Fixed a bug in FCGetFreeIndices (Issue #269) (486edca3) +* Fixed a small bug in FCLoopSelectTopology. (7be87abb) +* Fixed a typo in the FeynCalc greeter. (9b19bcea) +* Fixed a bug in SUNSimplify related to a wrong symmetry relation for sunf2 (issue #259). (4618e9fb) +* Fixed docu script. (b139bc48) +* Fixed a bug in FCLoopFindTopologyMappings where the function could not deal with extra objects in the last slot of FCTopology. (66fd1a3e) +* Fixed an issue in parallelizing FCLoopFromGLI. (0048c8be) +* Fixed a bug in TARCER due to a missprint in Eq.92 of hep-ph/9703319, cf. also Eq. 2.4 in 2210.10593. Thanks to Y. Schroeder! (f4600dc5) +* Fixed a bug in the docu script for generating HTML files. (11913479) +* Fixed an omission in LC Dirac algebra where n.n and nb.nb terms wouldn't be simplified upon reordering the chain. (a8ef6bfc) +* Fixed a bug in D-dim LC Dirac algebra (issue #245, thanks to maxferre). (1ce359d1) +* Fixed a bug in FCLoopFromGLI. (064d134d) +* Fixed a weird ordering of propagators in FeynAmpDenominatorCombine. (6771e3fb) +* Fixed multiple typos and shortcoming in the docu and improved the section on light-cone calculations (thanks to @dehorstmann). (3231cfca) +* Fixed a bug in the TID where ToSFAD was not being applied when necessary. (a67a4670) +* More fixes for the automatic installer. (c75feef9) \ No newline at end of file diff --git a/FeynCalc/ChangelogOld.md b/FeynCalc/ChangelogOld.md index 1154d466..b9ea117c 100644 --- a/FeynCalc/ChangelogOld.md +++ b/FeynCalc/ChangelogOld.md @@ -1,3 +1,580 @@ +# Version 10.0.0 (December 2023) + + +## Removed or renamed functions, options and objects + +* Removed the now obsolete options Schouten and Rename in Contract. (602aa979) +* Removed FCSubsetQ and FCDuplicateFreeQ. Now that we require at least Mma 10, one can use the built-in SubsetQ and DuplicateFreeQ instead. (886ddd6f) +* Removed TwoLoopSimplify. The new multiloop capabilities of FeynCalc 10 make it completely unnecessary. (3cdebaee) +* Removed Tr2. Now that SUNSimplify has been properly refactored, there is no need for Tr2 anymore. (551e2bfb) +* Removed overloading of Tr to use TR. One should better avoid meddling with built-in Mma functions. (13be92a1) +* Removed a bunch of obsolete symbols that Rolf used for his research but that are useless for current and new users. (208a4e93) +* Removed the declaration of GA5 as a noncommutative object, since it is always directly evaluated to DiracGamma[5]. (e4470c91) +* Removed the never used SilentTypeSetting and EvaluateFCGV options of FCGV. (3e7c9fa4) +* Removed the F2L shortcut. (f5c17ad5) +* Removed $FCS and Intersection1. (8df8cf5c) +* Removed Smu in favor of FCGV["S_mu"]. (907cdc7e) +* Removed an unused option in FCLoopPakScalelessQ. (7138a6b3) +* Removed the Dimension option in FCFeynmanParametrize and fixed a bug with the dimension of Cartesian integrals (thanks to M. Zanke) (f5ce6e01) +* Removed now obsolete FeynmanParametrize, FeynmanParametrize1, FeynmanReduce, FeynmanDoIntegrals, FeynmanParameterNames, FCIntegrate, FCNIntegrate. (0aac8b2d) + + +## New functionality + +* Added new 2L examples. (08edb5a2) +* Make FeynCalc work with Mathics (at least in principle) (b7ad0cc3) +* Finally implemented the MVV formula for the calculation of Larin traces. This is the new default. Old (very inefficient) algorithm can be still activated using the new option LarinMVV set to False. (83816d18) +* Initial version of FCLoopBasisIntegralToGraph, a function that converts a propagator representation of a loop integral to a graph representation. (d65a98b4) +* Allowed setting scalar products of squared vectors via "ScalarProduct[a] = aval;" and "CartesianScalarProduct[a] = aval;". (67ce36f4) +* Added new option ExpandScalarProduct to FromGFAD. (1e9a2502) +* Added an error message when trying to run FCFAConvert on an amplitude containing 4-fermion vertices with truncated spinors. (1c30424b) +* Added new function FCLoopCreatePartialFractioningRules. It allows to derive partial fraction decomposition relations using GLIs and FCTopology symbols i.e. without switching to an explicit propagator representation. (a3f38dce) +* Added new function FCLoopRemovePropagator for removing edges from GLIs and topologies. (3cade21a) +* Added new options FCReplaceMomenta and ExtraPropagators to FCFeynmanParametrize and FCFeynmanPrepare. (4b343205) +* Added new option FinalSubstitutions to FCLoopBasis. (2ae8c5d1) +* Added new function ToLightConeComponents to allow for decompositions along the lightcone. (27c0ae2b) +* Added the possibility to set scalar products for perpendicular lightcone components. (e805b4c9) +* Added new shortcuts for lightcone components of Lorentz vectors, scalar products, metric tensors and Dirac matrices. (1925f2dd) +* Added an experimental symnbol LightConePerpendicularComponent that can be used to work with perpendicular components with respect to lightcone momenta. (475e9245) +* Added FCLoopTopologyNameToSymbol: a convenience function for converting stringy topo ids to symbols. (59254189) +* Added FCDiffEqSolve, a new routine for constructing solutions of one-variable differential equations in a canonical form. (b8169d68) +* Added FCMellinJoin, a routine for splitting propagators into summands as one uses it in Mellin-Barnes calculations. (f9fd6088) +* Added FCHPL and FCGPL, symbols representing HPLs and GPLs. (427ddca7) +* Small adjustments in FCLoopApplyTopologyMappings. (84c2cd76) +* Added new head FCIteratedIntegral for representing Chen's iterated integrals. The new routines FCIteratedIntegralEvaluate and FCIteratedIntegralSimplify are intended to handle such objects. (dfe59fca) +* Added new symbol FCPartialFractionForm and routines for switching from/to this form. (b187e06a) +* Added new option EtaSign to FCFeynmanParametrize and FCFeynmanPrepare. This way one can more easily keep track of the imaginary parts of kinematic variables from the i*eta prescription. (37408334) +* Added new function FCLoopGetKinematicInvariants for extracting kinematic invariants present in the current topology. (8023d602) +* Added a new option Abort to FCFeynmanProjectivize. When set to False, the function will apply the projective transformation to the integral even if it is actually not needed. (42a18920) +* Added new function FCLoopFindSectors needed for the Kira interface in FeynHelpers. (1c1cd21e) +* Added new Kira interface to the docu script. (a9f86d86) +* Added new option List to FCLoopFromGLI. When set to True the function will return a list of propagators. (24cdf616) +* Added new routine FCLoopTensorReduce for doing tensor reduction with isolated expressions involving FCTopology and GLI objects. (76f0e986) +* Updated .gitignore (d7f3b921) +* Added new function FCGetScalarProducts for creating a list of scalar products previously set using down values. (0350f365) +* Added new factoring routine Factor3 that is specifically designed for Feynman parametric integrals and differential equations. (b02839b6) +* Added new function FCGetFreeIndices and FCGetDummyIndices for extracting the corresponding indices from the given expression. (24f9924c) +* Added new option Prefactor to Coefficient2. (9e128fc2) +* Added new options RightPartialD and LeftPartialD to ExpandPartialD. This allows for expansions, where the derivatives are supposed also to act on anything outside of the input expression. (3c46035d) +* Added new function FCTripleProduct for introducing triple products in a more convenient way. (ee03bb1d) +* Added new function ShiftPartialD for moving derivatives away from QuantumFields using IBPs. (f508a34a) +* Added new function FCLoopAddScalingParameter for facilitating asymptotic expansions based on the information obtained from asy.m (75395b1d) +* Added an example for generating the full SM FeynArts model from the template shipped with FeynRules. (3093985c) +* Added new typesetting mode to FCPartialD. (c6c04c15) +* Added LeftNablaD, RightNablaD, LeftRightNablaD and LeftRightNablaD2 to facilitate QuantumField-level derivations in NR theories. (2ae0d7a7) +* Added FCDiffEqChangeVariables, a function for introducing (singel) variable transformation in differential equations. (d111b781) +* Added new data types ImplicitDiracIndex, ImplicitPauliIndex and ImplicitSUNFIndex to avoid problems with quantum fields described in Issue #187. (ee30984c) +* Added FCToTeXReorder and FCToTeXPreviewOrder, two functions that facilitate the task of exporting Mathematica expressions into TeX in a desired way. (9794df55) +* Added new option SubtopologyMarker to FCLoopFindSubtopologies. This helps tracing the origin of the obtained subtopologies. (a85425e0) +* Added new functions FCGraphCuttableQ and FCGraphFindPath for checking whether the given loop integral (in the graph representation) can be cut. (a86da592) +* Added the LoopTools normalization of PaVe functions to FCFeynmanParametrize. (58fdb2bc) +* Added the missing TransversePolarizationVectors option to the examples. (8cfa45c4) +* Added option FinalSubstitutions to FCLoopFindTopologies and improved the function to work with lists. (14e52637) +* Added FCLoopPropagatorPowersCombine to FCLoopBasisIntegralToPropagators. (0cfed2a6) +* Added index generation to the manual. (effc7e6b) +* Added FCFeynmanRegularizeDivergence and FCFeynmanFindDivergences that reimplement findDivergences and dimregPartial from HyperInt. (a1e7c4f6) +* Added FactorList2 that emulates factors from Maple. (3bb6eea3) +* Added FCFeynmanProjectiveQ that checks if the given Feynman parameter integral is projective. (c64f065a) +* Added the LightPak option to FCLoopFindTopologyMappings. (37f76919) +* Added light Pak as a much faster version of Pak's algorithm. (01066dcb) +* Added a check against nonsensical momenta of polarization vectors when summing over polarizations. (6d116388) +* Added the NumericFunction attribute to FCClausen. (416f9b47) +* Added a check to ComplexConjugate for expressions containing multiple spinor chains but no explicit indices (thanks to D. Durbipak). (905c4e69) +* Updated usage informations. (d38c3294) +* Added FCLoopSelectTopology, a handy function for picking up topologies that match the given GLIs. (2dfa3d12) +* Added FCReloadAddOns for a more streamlined debugging of FC add-ons. (7970b823) +* Added FromGFAD to FCLoopPropagatorsToLineMomenta. (57526e26) +* Added a unit test for FCLoopScalelessQ. (ac0b34f5) +* Added FCI->True to various calls of ToSFAD. (00e96020) +* Added new function FCLoopGetEtaSigns and FCLoopSwitchEtaSigns to have a better control of the I*eta prescription in loop integral propagators. (5b986dbe) +* Added new function FCGVToSymbol and FCLoopGLIToSymbol for converting FCGVs and GLIs to symbols. (85c9daeb) +* Added NonCommHeadQ, a simple function for checking whether the head of the given expression is noncommutative. (92617e12) +* Added FCMatrixProduct, a small handy function for multiplying matrices with noncommutative entries. (ccb43cc2) +* Updated the greeting message. (d5918c4c) +* Added FCLoopCreateRulesToGLI, a function for rewriting scalar products as GLIs with negative powers. (6e9e7a93) +* Added FCLoopSingularityStructure, an experimental function for studying the singular behavior of loop integrals. (88ae0bac) +* Added new option Rename to FCLoopPakOrder. It allows for automatic renamings of the input polynomials which is quite handy when comparing functions of U and F polynomials derived by different tools. (a0d545f2) +* Added new option FCFeynmanPrepare to FCFeynmanParametrize which provides direct access to the output of FCFeynmanPrepare. (e0537c64) +* Added ToGFAD, a new function for convering different propagator types to GFADs. (8da9075d) +* Added FCLoopGLIExpand, a function for calculating expansions of GLIs in scalar variables. (d6373c7f) +* Added FCLoopGLIDifferentiate, a routine for differentiating GLIs with respect to some scalar quantity. (d2d7ac0c) +* Added FromGFAD, a function that tries to convert GFADs back into SFADs/CFADs (when possible). This is particularly useful for expansions of loop integrals, where one inevitably ends up with multiple GFAD-type propagators. (c7faa79f) +* Added Lee-Pomeransky parametrization (currently for scalar integrals only, no numerators) to FCFeynmanParametrize. (7dd84566) +* Added a warning about possibly incorrect graphs on Mma versions older than 12.3 (thanks to M. Gerlach). (e3759afb) +* Added FCLoopValidTopologyQ, a function that can validate FCTopology objects. (9a926f29) +* Renamed FCLoopFindPakMappings to FCLoopFindIntegralMappings and added new PreferredIntegrals option. (40aa4299) +* Added FCLoopFromGLI, a function that converts GLIs to FeynAmpDenominator objects. (2e5c2237) +* Added a comprehensible error message for the cases when the automatic installer fails to delete the FeynCalc directory. (5f91973d) +* Added FCReorderList, a function for reordering list and matrices. (7348b098) +* Added FCClausen, a FeynCalc representation of Clausen's function that is handy for the numerics. (697d3d76) +* Made Contract3 an internal function. There is no need to have it invoked directly by the user. (6abc99e1) +* Added FCCompareNumbers, a handy routine for determining how many significant digits agree in the given numerical results. (e9a7c602) +* Added more unit tests to FCLoopScalelessQ. (8914b307) +* Added new option FCLoopPakOrder to FCLoopToPakForm. This way one can disable the (possibly time-consuming) canonical reordering if one is only interested in getting the characteristic polynomial. (62374d52) +* Added FCLoopFindSubtopologies for enumerating all nonvanishing subtopologies inside the given topology. (5f2bb67d) +* Added FCLoopApplyTopologyMappings. (667a7b8b) +* Added FCLoopFindTopologyMappings. (1ce4639a) +* Minor change in FCLoopFindTopologies. (b02b5a3e) +* Added FCLoopScalelessQ and FCLoopPakScalelessQ for detecting scaleless integrals or topologies. (7288cba0) +* Added FCLoopFindTopologies, a function for rewriting loop amplitudes as a linear combination of integrals belonging to different (not necessarily distinct) topologies. (cc00dc48) +* Added GLI, a symbol representing a generic loop integral. (c5925702) +* Added FCPakOrder, FCToPakForm, FCFindPakMappings and FCFindLoopMomentumShifts as first building blocks towards a proper topology identification. (398d4eca) +* Added a check to Collect2 to detect ConditionalExpression right at the very beginning. (331b4b45) +* Added new Option PaVeAutoOrder to ToPaVe2. (3396fcdf) +* Added the previously forgotten FCLoopAddEdgeTags. (b6632ab8) +* Added automatic ordering of scalar D,E and F functions and of the corresponding 00.. coefficient functions. (c122d3a7) +* Added new function PaVeToABCD for converting PaVe symbols to direct PaVe functions (A0,B0, ...). (58ae61de) +* Added new option ToPaVe->Automatic to TID. (48f37ce2) +* Added FCLoopGraphPlot, a function for visualizing graphs of loop integrals created with FCLoopIntegralToGraph. (84c13495) +* Added initial support for Dirac algebra with explicit spatial indices. (a5395a70) +* Added a possibility to set $VeryVerbose before loading FeynCalc. This is useful for debugging the loading process. (8a0c7a67) +* Added some missing semicolons. (2ba3d774) +* Added new option Momentum to FCLoopIntegralToGraph. In the case of integrals where the external momenta in the propagators do not directly correspond to external legs (cf. e.g I_2^e in Fig. 2 of 1907.08227), the user may employ this option to tell the function which external legs are actually present. (90583f85) +* Added new option Reduce to FCMatchSolve. Setting it to False disables the automatic reduction of the number of variables to solve for, which is useful for cases where such a reduction leads to an unsolvable system. (3d39eb1e) +* Added new option Expanding to FCFeynmanParametrize. When set to True (default), exponents and arguments of Gamma functions are expanded via ExpandAll to produce better readable expressions. (9b53499a) +* Added new options FeynmanIntegralPrefactor, Reduce and "Euclidean" (semi-hidden) to FCFeynmanParametrize. Also fixed bugs regarding the option DiracDelta used with a 1-loop tadpole and the treatment of Euclidean integrals (thanks to M. Zanke). (2a3c6d74) +* Added FCLoopPropagatorsToLineMomenta, an auxiliary function for extracting the momentum flowing through a line in a graph from the given propagator. (6b33374b) +* Added UnDeclareAllCommutators[] and UnDeclareAllAntiCommutators[], two handy functions to simultaneously clear all user definitions of (anti)commutator. (c71edfea) +* Extended partial derivatives to support Cartesian heads. This is particularly useful for the derivation of Feynman rules in NR theories. (ed84b653) +* Added PauliChain and friends, which is essentially a Pauli version of the DiracChain. New symbols: PauliChain, PCHN, PIDelta, PauliIndexDelta, PauliIndex, ExplicitPauliIndex, PauliChainCombine, PauliChainExpand, PauliChainFactor, PauliChainJoin. (d02b01c1) +* Added new option EpsExpand to EpsEvaluate and various functions that call EpsEvaluate. Setting EpsExpand to False allows to prevent rewritings of Levi-Civita tensors contracted with sums of momenta into sums of Levi-Civita tensors. This may help to keep the resulting expressions more compact, especially when contractions of multiple epsilon tensors are involved. (87f9e8d3) +* Added FCHighLight, Variables2 and Coefficients2. The former is a small helper for highlightning specific expression in the notebook interface, while the latter two are similar to the standard Variables and Coefficients, but are somewhat more flexible and convenient to use. (6429dc88) +* Added FCMatchSolve, a very handy tool for determining renormalization constants and matching coefficients from suitably collected terms in sums or differences of amplitudes. (4f5e4020) +* Added FCSetScalarProducts, a convenience function for setting multiple kinematic-related objects (such as SPD) in one line. (6671dc80) +* Added a new convenience function FCMakeSymbols. This can save a lot of work when entering expressions such as GAD[mu1,mu2,mu3,...]. (977eca6d) +* Added FCFeynmanProjectivize for projectivizing Feynman integral before applying Cheng-Wu. (779379d3) +* Added FCFeynmanParameterJoin, FCFeynmanParametrize and FCSymanzikPolynomials which are useful routines for calculating loop integrals via the Feynman parametrization method. (9cac86c3) +* Added a new option SortBy to FCLoopBasisExtract. It is used to sort the propagators based on their powers. (557f63fb) +* Added OverscriptBox and FormBox to FCAttachTypesettingRule. (1cc32c3e) +* Updated the issue template. (f90d52b7) +* Added new routine SpinorChainEvaluate that handles the evaluation of suitable spinor inner products. SpinorChainEvaluate is also an option of DiracSimplify and many other functions that call DiracSimplify. Via DiracSpinorNormalization it is now possible to have a spinor normalization different than the standard relativistic one. (f9e0b3b0) +* Added GordonSimplify, a routine for applying Gordon identities to suitable spinor chains of vector or axial-vector current type. (fe8f6a19) +* Added a unit test for ApartFF. (2688f08f) +* Added a warning regarding the DropSumOver option for special classes of Daigrams. (18e2378d) +* Added an extra unit test for DiracSimplify. (d6b36eb2) + + +## Improvements and refactoring + +* Better timings in FCLoopGLIDifferentiate. (8f74c905) +* Made FCFeynmanPrepare aware of the i*eta prescription in propagators. If the signs do not agree, the evaluation will be aborted. (61657cc6) +* Updated FCLoopFindTopologies to use FCLoopGetKinematicInvariants and added a warning in the case of variable names that are not compatible with FERMAT. (eabdc3ef) +* Increased the minimal required Mathematica version to 10. (334c6f9f) +* Renamed FCLoopBasisIntegralToGraph to FCLoopIntegralToGraph (1556cd41) +* FCLoopBasisIntegralToGraph can now properly handle dots and the propagator powers are also visible in the output. (1e7119a7) +* Modified the behavior of ExpandScalarProduct when using the Momentum option to pass this option to MomentumExpand. (dda39f58) +* FCFeynmanPrepare (formally FCSymanzikPolynomials) and FCFeynmanParametrize should be now capable of handling tensor integrals. (be83d318) +* Changed the default value of the MomentumCombine option in FCLoopBasisIntegralToPropagators to True. (32ec51d4) +* Modified FCLoopValidTopologyQ to accept topologies with -1 multiplying FeynAmpDenominators. (9665b712) +* Modified the default behavior of SelectFree2 and SelectNotFree2 to make the application of these functions to sums of terms as easy and predictable as possible. (39d2d3f3) +* Minor adjustements in FCLoopIntegralToGraph. (0d99b784) +* Updated FCLoopCreateRuleGLIToGLI to work with lists of topologies. (8029cc37) +* Remove a too restrictive check in FCLoopValidTopologyQ. (49e5611e) +* Renamed the topoid related functions to start with FCLoop and slightly changed FCLoopToPakForm. (58f4b0ee) +* Cleaned up error messages for PaVe functions. (710ee3b4) +* Disabled an extra check in Collec2, it costs too much time for large expressions. (54e41501) +* Cleaned up the FeynCalc loader. (bce0e30a) +* Disabled some questionable transformations for Polarization. Since it is an FCI object we must ensure that the syntax is always correct. (9f2098f5) +* Make FCLoopFindIntegralMappings always flatten the list of topologies. (c2f59427) +* Modified the behavior of FCLoopFindIntegralMappings to keep only the occurring master integrals in the list. (9bad2d92) +* Changed the output of FCLoopApplyTopologyMappings. It is better to keep the head so that one can process the output expression further without the need to apply Collect2 again. (c869f67b) +* Modified FCLoopGraphPlot to return an empty block for integrals where FCLoopIntegralToGraph failed to produce a graph representation. (01d131b1) +* Renamed FCLoopBasisIntegralToPropagators and FCLoopBasisPropagatorsToTopology to FCLoopIntegralToPropagators and FCLoopPropagatorsToTopology respectively. (08933900) +* FCFeynmanParametrize Unit test (04fb90f6) +* Updated automatic installer to suppress the choice dialog shown when patching FeynArts (thanks to NBAlexis, Discussion #158). (e95e98f8) +* Replaced ToString-based caching function with the standard Hash (thanks to J. Park aka j824h for reporting issue #151) (8c41304c) +* Small adjustment in FCReplaceD. (ffeb8e0b) +* Small adjustments in Factor3. (f9019300) +* Code cleanups using hints from CodeInspector. (ee27a8f2) +* Minor cleanups in the tree. (542e26d2) +* Small improvements in FCFactorOut. (fd89e1f7) +* Small improvement in the debugging output of FCFeynmanProjectivize. (80cab7fb) +* Small improvement in the way how FCLoopIntegralToGraph handles the input. (68ba7a8a) +* More improvements in the ExportToMD.m script. (2808b60b) +* Reworked the handling of symbolic propagator powers in FCFeynmanParametrize; Added new option SplitSymbolicPowers to have a better control here. (8fc60b6e) +* Refactored MomentumCombine to allow for more fine-grained combinations of momenta. (f545f622) +* Completely refactored SUNSimplify and SUNTrace to avoid existing issues with expressions remaining unevaluated or not sufficiently simplified. (7750e890) +* More refactoring in Explicit. (39a5b16c) +* Refactored Explicit. (8072f349) +* Some refactoring in ExpandPartialD and ExplicitPartialD. (35ceafe9) +* Refactored DoPolarizationSums to have a more consistent and predictable behavior (thanks to T. Ueda). (155edf8e) +* Some refactoring in DoPolarizationSums. (9a01ff5e) +* Slightly refactored SimplifyPolyLog to avoid issues with Mathematica 12.3 (2fa954d9) +* Some refactoring in ExpandPartialD. (069907f5) +* Refactored Tdec and renamed the Option UseParallelization to Parallelize. Added a debugging option Symmetrize that allows to disable the symmetrizer. (5f00b9e8) +* Refactored MomentumExpand and added a new Option Momentum that allows to expand only w.r.t. the given list of momenta. (f85ddb40) +* Some refactoring in FCMultiLoopTID. (bd2b0915) +* Imporved the option Factoring in FCMatchSolve. (d68e8234) +* Improved FCLoopFindTopologyMappings to find more relations between topologies involving eikonal propagators (provided that those can be rewritten as quadratic propagators) (8902a636) +* Improved the usage of tensor reduction with Fermat. (09c00f15) +* Improved performance of FCLoopSelectTopology. (d90a45d3) +* Improved the text output of FCLoopFindTopologies and FCLoopFindTopologyMappings to have better looking texts when running scripts. (092d0ba5) +* Improved FromGFAD even further, especially when dealing with SCET-like propagators. (46b91f27) +* Improved ApartFF to work with GLIs. (b2da5f08) +* Improved FCLoopFindMomentumShifts when dealing with propagators that have both quadratic and eikonal pieces. (4887e511) +* Improved ToLightConePerpendicularComponent. (0a5b9d2d) +* Improves core properties of Pairs involving perpendicular components. (c79600b3) +* Improved FCLoopTensorReduce and TID to support perpendicular components. (005891e3) +* Improved performance of FeynAmpDenominatorExplicit when working with large expressions. (04ed1efc) +* Improved debugging output in DoPolarizationSums. (40495f18) +* Improved performance of SUNSimplify when introducing CA and CF constants. (9ff14196) +* Improved the treatment of lightcone components in DiracTrick. (55802d78) +* Improved Uncontract to work with perpendicular components of Dirac matrices. (89a20487) +* Improved DiracOrder to work with LightConePerpendicularComponent symbols. (cd2a9ce4) +* Improved DiracGammaCombine to work with LightConePerpendicularComponent. (9c93684c) +* Improved PairContract and Uncontract to work with LightConePerpendicularComponent. (77595c7b) +* Improved MomentumExpand and MomentumCombine to work with LightConePerpendicularComponent. (8b5d38ab) +* Improved the handling of Dirac algebra for lightcone components of Dirac matrices. (62584d22) +* Improved FCIteratedIntegralEvaluate and FCIteratedIntegralSimplify. (96bb6691) +* Improved the welcome message to show the latest commit hash even when FeynCalc is loaded from a cloned git repo. (04350022) +* Improved FeynCal greeter message to display the hash and the date of the last commit (if available). (aa731bce) +* Improved docu on FCTopology. (081bf11f) +* Improved FCLoopFromGLI to return propagators in the same order as in FCTopology, if the option List is set to FeynAmpDenominator, while FeynAmpDenominatorCombine is set to False. (c064f2eb) +* Improved FCLoopFindMomentumShifyts to handle propagators with inverse signs. (6a9cc5dd) +* Improved debugging output in FCLoopIntegralToGraph and other loop-related functions. (996e0289) +* Improved FCLoopFindTopologyMappings to automatically flatten the list of preferred topologies. (c1a34ca7) +* Improved FCLoopFindTopologyMappings for cases where the randomly selected preferred topology is not suitable for mappings because shifts in external momenta are not allowed. (16a045e2) +* Improved FCLoopBasisFindCompletion to reaname the completed topologies. (d3e42d8e) +* Improved debugging output in FCLoopApplyTopologyMappings. (d87b239c) +* Improved debugging output in Contract. (acde4fe6) +* Improved ShiftPartialD by adding new option Select that allows to filter terms that one wants to manipulate. (c687d371) +* Improved ordering of multiple partial derivatives in ExpandPartialD and add new option SortBy that passes the value to SortBy of DotSimplify. (07825205) +* Improved FCLoopFindTopologies to detect kinematic rules set via scalar product down values. (9b0c1dc4) +* Improved FCLoopCanonicalize to support numerators of multiloop integrals. (0739693b) +* Improved an error message in FCFeynmanParametrize. (63940021) +* Improved ToSFAD to handle some Cartesian propagators as well. (ba479821) +* Improved FCLoopValidTopologyQ to accept denominators multiplied by constants. (33cceeb6) +* Improved FCFeynmanParametrize to work with GLIs. (73de7e16) +* Improved ExpandPartialD to handle more cases of an eps-tensor being multiplied with a noncommutative product of fields with indices and derivatives. (cabf8ac0) +* Improved GluonPropagator in the axial gauge to introduce proper eikonal SFADs instead of inverse scalar products. (7ae3749b) +* Improved error messages in FCFeynmanPrepare. (82c7acdc) +* Improved FCLoopIntegralToGraph to remove fake external momenta when reconstructing the graph. (32d7e2ea) +* Improved ToStandardMatrixElement to introduce chiral splitings in a better way. (7f2c478c) +* Improved FCLoopFindTopologies to remove scaleless topologies. Setting the option FCLoopScalelessQ to True will make the function keep such scaleless topologies in the list. (295506c9) +* Improved FCCompareNumbers for cases where the difference vanishes. (fd9a8c7c) +* Improved FCLoopApplyTopologyMappings to deliver final amplitudes writtten in terms of GLIs (provided that tensor decomposition or projectors have already been applied). (be982521) +* Improve FCLoopFindTopologyMappings to properly take subtopologies into account. (20553a32) +* Improved FCLoopFindMomentumShifts to take shifts of external momenta whenever the new option Momentum is set to all or a list of momenta. (4e1e6a03) +* Improved debugging output in FCLoopFindTopologyMappings. (240cc5cc) +* Improved FCFeynmanRegularizeDivergence to handle multiple divergences. (15ba7c7b) +* Improved FCLoopFindIntegralMappings to return only relevant masters from the preferred list; Added memoization for the generation of the mapping rules. (1b7e5f6c) +* Improved FCLoopFindTopologies to allow for expressions that are already isolated. Setting the option FCLoopIsolate to a symbol denoting the corresponding head will skip the application of FCLoopIsolate. (ddc450ea) +* Improved Variables2 to extract variables inside real and imaginary parts. (2e6d667b) +* Improved Collect2 ot have isolation work even if the function does not depend on the variables specified in the second argument. (37e5bd49) +* Improved the framework behind QuantumFields and FCPartialD to allow for derivatives that specify the variable they act on by writing e.g. FCPartialD[{CartesianIndex[i],x}]. (697d901a) +* Improved debugging output of DummyIndexFreeQ. (2707af53) +* Improved FCLoopFromGLI, FCFeynmanPrepare, FCLoopSelectTopology, FCLoopToPakForm and FCLoopFindIntegralMappings to handle products of GLIs. (9717c7dd) +* Improved MomentumCombine on integrals involving I in the propagators. (45be6958) +* Improved FCLoopGLIDifferentiate to support derivatives w.r.t. 4-vectors. (ae8f4197) +* Improve FCLoopPropagatorPowersCombine to use FeynAmpDenominatorCombine. (15c61317) +* Improved FCClearCache to allow for removing all existing memoizations. (0ee62f7a) +* Improved FCLoopBasisPropagatorsToTopology, FCLoopBasisIncompleteQ, FCLoopBasisOverdeterminedQ and FCLoopBasisFindCompletion to properly support FCTopology objects. (c0976b20) +* Improved Pair and CartesianPair to pull out the imaginary number I multiplied with momenta. (d63ae234) +* Improved typesetting of SP, SPD and SPE raised to integer powers. (6232dea5) +* Improved FCLoopFindSubtopologies. (00ac4f46) +* Updated and improved FCLoopIntegralToGraph. (5cb6ce37) +* Refactored and improved FCLoopToPakForm. (a9b48460) +* Improved FCFeynmanPrepare to properly hande FCTopology and GLI input. (4e02cae0) +* Improved FCLoopCreateRuleGLIToGLI to work on lists of subtopologies. (a2c05646) +* Improved FCLooPakOrder so that it is sufficient to specify just a variable head instead of a list of variables. (ad217ceb) +* Improved the option Head of Collect2 to support Head->{Identity,fun}. (291d89e1) +* Improved FCFeynmanPrepare to work with FCTopology input. (7ad5f311) +* Refactored and signficiantly improved the argument ordering of PaVe functions (mainly by rewriting PaVeOrder). (9cce083a) +* Refactored and improved PaVeOrder. (bf6417c6) +* Improved FCReloadFunctionFromFile to determine the location of the file automatically. (68e0acae) +* Improved FCMatchSolve to inform the user when there is only a trivial solution. (2cff0828) +* Improved performance of the Tdec regarding contractions and the search for symmetries. For higher rank integrals (rank 8 and above) the speed up can be up to 1-2 orders of magnitude . (381370dc) +* Refactored and improved FCLoopIntegralToGraph to be really useful in practice. (b5bad710) +* Improved the handling of tadpole integrals with spurious external momenta. (95da7298) +* Improved Tdec's basis symmetrizer to employ Pak's algorithm. (e67cf228) +* Improved FCLoopIsolate to work on equations, replacement rules and lists. (ceb243db) +* Improved DotSimplify to allow for custom ordering functions when applying commutators/anticommutators. (5e39bb5e) +* Improved FCFeynmanParametrize to handle overall prefactors of loop integrals. (59a66fa3) +* Improved debugging output in FCDiracIsolate. (41f803b9) +* Improved performance of FCFeynmanPrepare. (b42b7b3a) +* Improved FCFeynmanParametrize to handle loop integrals with numerators. (ef1b3c3e) +* Improved FCSymanzikPolynomials to return also the Q-vector and the J polynomial. This provides us with all the building blocks required to write down various parametrizations of scalar integrals. (af1a3607) +* Improved FCFeynmanParametrize to handle loop integrals with numerators. (ef1b3c3e) +* Improved FCSymanzikPolynomials to return also the Q-vector and the J polynomial. This provides us with all the building blocks required to write down various parametrizations of scalar integrals. (af1a3607) + + +## Documentation + +* Clarified the usage of FCFeynmanParameterJoin in conjunction with FCFeynmanParametrize. (3249bf00) +* Corrected a typo in MasterIntegrals.md (656517ba) +* Typos corrected. (20d3d412) +* Typos corrected. (db0d2bbe) +* Small usage information updates. (cc7c201c) +* Added a docu section on patching new FR models. (393a2922) +* Minor updates of docu-related scripts and pages. (5ccd7d36) +* Clarified the usage of FCLoopApplyTopologyMappings (thanks to J.Davies) (0ff63645) +* Added some references to the page about master integrals. (16787e70) +* Updated usage infromation for all FeynCalc symbols. (d61ba9a8) +* Extended the help description of FCFeynmanParametrize. (0d6723ea) +* Added tutorials to the main documentation. (835c579d) +* Documentation cleanups. (1fe7ac1f) +* Documentation updated. (95940fda) +* Small fix in the documentation scripts. (4660f597) +* Documentation updates accounting for the previous commits. (e5a1cbe8) +* SUN-related docu updated. (f4bf3e9c) +* Documentation updates. (fc0adaef) +* Documentation updates. (748b488a) +* Minor fixes in the documentation. (ff577ef8) +* Added a section on Dirac algebra to the documentation. (0709dbd7) +* Updated scripts for generating the docu. (311ae5a4) +* Clarified the notation used for the Levi-Civita tensor in the documentation. (9765266c) +* Minor fixes and extensions in the documentation. (0c27fe43) +* Minor cleanups in the documentation (mostly spacing). (83eb8141) +* Updated documentation scripts. (933081ac) +* Documentation updated. (e71a01b1) +* Documentation updated. (17fb2395) +* Documentation updated. (566384ad) +* Cleaned up and improved documentation building scripts. (f7ad7768) +* Updated the documentation on TID. (46cfc3bc) +* Updated documentation on FeynAmpDenominator. (48c4149e) +* Updated documentation scripts. (40e6e007) +* Documentation improvements. (dd340a9b) +* Updated usage information. (e4e40404) +* Added some fixes in the documentation. (fbaad987) +* Small fix in the documentation toolchain. (d41e638c) +* Regenereated md files for the documentation. (188037a0) +* Updates scripts for building the documentation. (221aef86) +* Updated .m documentation files to prepare the code snippets for TeX export. (ce28781c) +* Minor fix in the documentation. (d78187b3) +* Documentation updated. (7a3f9aff) +* Updated documentation and added a page on the sign convention in FeynArts. (cef63e65) +* Documentation updated. (c742806a) +* Improved the documentation for FCRenameDummyIndices and FCCanonicalizeDummyIndices and fixing the missing canonicalization of PauliIndices. Added new option PauliIndexNames. (46efe6ee) +* Improved documentation for ComplexConjugate. (04da6a92) +* Improved documentation for EpsChisholm. (2117cca0) +* Documentation updated. (110d8428) +* Documentation updated. (310ca75c) +* Updated usage information. (75f96b4f) +* Updated documentation. (f969094c) +* Improved documentation on Polarization and PolarizationVector. (d915ce6e) +* Final adjustements for the removal of the documentation center. (ca2b228b) +* Moved FeynCalc documentation to the "Documentation" folder. (deff3c4e) +* Removed notebooks for the documentation center. From now on the .m-files is the source for building FeynCalc documentation. (c80c308a) +* Documentation script updated. (a64f4965) +* More documentation adjustments. (b9edddd5) +* Updated FeynCalc documentation. (32bbad42) +* Added some useful information to the documentation. (fe9841ad) +* Improved the documentation of FCFeynmanParameterJoin. (3dec376f) +* Documentation scripts updated. (dbb4adf6) +* Complete update of the .m and markdown documentation. (ea225a25) +* Updated documentation of PolarizationVector, PolarizationSum and DoPolarizationSums. (159846ab) +* Updated the documentation overview. (189090ca) +* Updated documentation for FCLoopPakScalelessQ. (c92c4911) +* Updated documentation scripts. (e4aec1c1) +* Updated documentation for FCLoopScalelessQ. (26912fe8) +* Updated documentation for FCLoopGraphPlot. (ba3cd997) +* Improved documentation of DotSimplify. (b33cebb9) +* Improved documentation of FCReplaceMomenta. (b917d9f8) +* Further small improvements of the documentation. (2338a572) +* More cleanups in the documentation. (83fb8e09) +* Further updates of the documentation. (530a0067) +* Completely regenerated the documentation files. (b62d3ec1) +* Updated documentation scripts. (1f707af5) +* Clean ups and updates in the documentation .m files. (895a65e3) +* Improved documentation on FCLoopGraphPlot. (b819d0a2) +* Updated documentation on PaVeOrder and FCLoopGraphPlot. (2dfc2b76) +* Documentation updated. (dba4f90c) +* More improvements in the documentation. (da7414fd) +* Documentation img files updated. (ebbe0e67) +* Further cleanups and fixes in the documentation files. (189fc09e) +* Some clean ups in the documentation files. (b53d13fc) +* Added a filter for the DocumentationFiles directory via the WWB .project file. (d162da8d) +* Added documentation converted to .m files. Markdown files are automatically generated using a custom script that employs M2MD. The .m files still need a lot of polishing, but this is the first step. (f2dcb970) +* Added documentation and unit tests for FCMakeSymbols. (92a3b365) +* Rebuilt documentation. (5a0396cc) +* Added documentation for FCAttachTypesettingRule and FCRemoveTypesettingRules. (9bcee388) +* Added a more complete tutorial to the documentation. (3f380262) +* Improved the documentation on DiracSimplify. (81f32816) + + +## Bug fixes + +* Fixed failing integration tests. (ab806a7d) +* Fixed a bug when applying ApartFF to GLIs where the function would still apply FDS to the result (which shouldn't be done here). (3c299f3e) +* Fixed a unit test for Eps. (4e40538d) +* Fixed a bug where a single 4-dimensional index/momentum of an eps-tensor would not automatically render the whole tensor 4-dimensional (issue #247, thanks to @fabianwunder). (34062c9b) +* Fixed a bug in the automatic installer caused by a bug in Mma 13.3 (thanks to J. Davies and M. Sebastianutti). (cb5842f9) +* Fixed a minor bug in FCLoopFindIntegralMappings where the Preferred option wouldn't accept explicit FAD-integrals. (4a12494a) +* Fixed a bug in the typesetting of Eps tensors with perp components. (c17b4ccc) +* Fixed issues with FCLoopPropagatorsToLineMomenta and a unit test related to FromGFAD. (1c96841f) +* Fixed a small issue in FCLoopCreatePartialFractioningRules. (5a8a215c) +* Fixed a typo in the documentation Readme.md file. (b0bc3c1d) +* Fixed a bug in FCLoopIntegralToGraph where the ordering of propagators was not consistent with the reconstructed list of edges. (229d3b81) +* Fixed a bug in MomentumExpand where some complicated linear combinations of momenta could not be expanded. (a1add4d2) +* Fixed minor bugs/inconveniences in FCLoopBasisFindCompetion, FCLoopFindSubtopologies and FCLoopTopologyNameToSymbol. (4d72cb72) +* Fixed a minor bug in SUNSimplify, where some traces remained unevaluated (thanks to M. Nefedov, issue #224). (652ea091) +* Fixed a bug in FCLoopBasisFindCompletion where the function won't accept FADs as suggested propagators. (db74e84f) +* Fixed a bug in FCFADiracChainJoin related to issue #177. (34c9db03) +* Fixed a minor bug in FCLoopGLIDifferentiate. (ce816ccd) +* Fixed a minor bug related to the new LightConePerpendicularComponent symbol. (ff75f88d) +* Fixed a typon in Collect2. (5bcc8340) +* Fixed some bugs in FromGFAD. (2c5bb48e) +* Fixed a bug in FCFeynmanParametrize where overlapping names of variables and Feynman parameter would lead to weird error messages. (669eb2c5) +* Fixed a bug in ToFCPartialFractionForm that caused issues when applying the function to expressions already containing FCPartialFractionForm symbols. (1b6cfc9f) +* Fixed a bug in FCFeynmanParametrize where the function would fail to process some types of symbolic powers. (b978974d) +* Fixed a small bug in FCFeynmanPrepare. (22a1b0c4) +* Fixed a small bug in Coefficients2. (5e7e2c57) +* Fixed the Tables test suite. (a1be2127) +* Fixed some inconsistent error messages. (689affd6) +* Fixed a bug in FCLoopSwitchEta sign in the case of propagators raised to symbolic powers. (f1625fc8) +* Fixed a bug in FCLoopGLIExpand where terms free of the expansion variable got dropped in the final result. (d20f122b) +* Fixed a bug in FromGFAD where a check would fail because of an FCE applied to the intermediate result. (5e9424b5) +* Fixed a bug in FCLoopAddScalingParameters where no FCI was applied to the scalar product rules. (a77b006f) +* Fixed a bug in FCApart where the function would try to partial fraction integrals with symbolic propagator powers. (dd84514e) +* Fixed a bug in FCFeynmanPrepare where kinematic rules inside FCTopology were not properly taken into account. (a67cf336) +* Fixed a bug in SUNSimplify, where the color traces were not properly expanded using linearity when collecting unique color objects (thanks to M. Nefedov, Issue #208). (926b6c22) +* Fixed a typo in README.md for building the docu. (2465a23e) +* Fixed a bug in FCLoopTensorReduce where the function would erroneously set some loop integrals with external momenta in the numerators but not denominators to zero (thanks to M. Weisswange). (5234fa29) +* Fixed a bug in FCLoopToPakForm where some of the Feynman parameters were not properly renamed. (c04f6c53) +* Fixed a bug in FCFeynmanPrepare where the function would reorder propagators in an integral/topology, even when the ordering explicitly matters. (b2cc392b) +* Fixed a bug in FCCCT where the FCDiracIsolate would not expand nested dots needed to get the explicit result. (Issue #198, thanks to QSSRHelper). (3e039d88) +* Fixed a small bug in FCCompareNumbers. (9e0ee875) +* Fixed a bug in FCFeynmanParametrize that showed up when using GLIs directly. (b68e459d) +* Fixed a small bug in FCLoopApplyTopologyMappings. (1f6f6c19) +* Fixed a bug in FCLoopFindTopologies, where TemporalMomenta would get added to the list of kinematic replacements. (d35c3455) +* Fixed a bug in FCLoopFindIntegralMappings. (42a54824) +* Fixed a minor bug in SUNSimplify. (56885aad) +* Fixed a bug in Contract (thanks to @armandlcz, Discussion #204, Issue #205) (b50c6ace) +* Fixed a small bug in SUNFDeltaContract. (fcb914d4) +* Fixed a small bug in SUNTrace, where the function would introduce color indices without the SUNIndex head. (3d183b94) +* Fixed bugs in FCTraceExpand and FCTraceFactor related to colored expressions. (b05bd179) +* Fixed a bug in FCFeynmanPrepare that prevented the routine from taking the kinematic information in the topology definitions into account. (79bc8ef3) +* Fixed typos in the documentation for ShiftPartialD. (398ce05f) +* Fixed a small bug in the definition of MT. (4a406351) +* Fixed some bugs in the typesetting of SFADs. (e75f9592) +* Fixed a bug in DoPolarizationSums involving explicit temporal components of polarization vectors. (0d04643e) +* Fixed some unit tests involving CheckAbort. (38a69e21) +* Fixed a typo in the error message template for ApartFF. (f89a7f43) +* Fixed a minor bug in ExplicitPartialD related to the nabla. (f301dc4b) +* Fixed a minor bug in Contract. (8d884642) +* Fixed a small bug (error message) in FCLoopFindMomentumShifts. (73434706) +* Fixed a bug where ApartFF would not cancel q^0 in the numerator for suitable integrals. This also required some changes in the handling of propagators raised to integer powers in FDS and TID. (a502377f) +* Fixed spurious hash collisions in MemSet. (845ee899) +* Fixed a bug in FCLoopFindSubtopologies where a topology without nonvanishing subtopologies would produce error messages. (c2c0a42c) +* Fixed a bug in FCLoopApplyTopologyMappings and added new option IsolateNames. (1eae5c64) +* Fixed a small bug in FCLoopBasisSplit. (a09504b1) +* Fixed a bug in GluonPropagator. (5239a07a) +* Fixed a bug in Contract (issue #194). (7c72756c) +* Fixed a typo in the docu page for CProductSplit. (9e6eca26) +* Fixed a bug in FCLoopApplyTopologyMappings, where the function could not handle an empty list of mappings. (badaba71) +* Fixed a bug in FCLoopFindTopologies where the function generated incomplete topologies for cases where a topology completely consists of added propagators. (76480e20) +* Fixed a bug in SpinorChainTranspose when using the option First (#issue 177). (ca803c11) +* Fixed a bug in DiracTrick with missing terms when evaluating some BMHV algebra expressions (issue #183). (eb87004c) +* Fixed a bug in FromGFAD where a GFAD without any momenta would not be correctly eliminated. (771dc59c) +* Fixed a bug in SpinorChainTranspose (related to issue #177). (8d4c2f80) +* Fixed a bug in FCFeynmanPrepare where the function would fail to handle some scaleless eikonal integrals. (0e7b4da2) +* Fixed a bug in FCLoopIntegralToGraph that prevented a proper reconstruction of some triangle topologies (thanks to J. Davies) (e4ea3895) +* Fixed a bug in FCFADiracChainJoin where the First option was not working properly (related to issue #177) (34b6d59d) +* Fixed a bug when FCFeynmanPrepare could not handle GLIs with negative indices. (1f75a058) +* Fixed a bug where several topology related functions would not recognize identical topologies that differ only in the SFAD vs FAD notation (thanks to J. Davies). (f374cae0) +* Fixed a bug in DiracTrick that leads to incorrect results when sufficiently nested dots are present in the input (issue #176) (151be5d5) +* Fixed a bug in FCLoopIntegralToGraph, where an input provided as a list of propagators would still get sorted during the graph reconstruction so that the original ordering gets lost (thanks to M. Gerlach). (cf7a6276) +* Fixed a minor bug in FCCompareNumbers. (fe3db739) +* Fixed a bug in Isolate replated to numerical input (thanks to A. Kachanonovich). (222ead98) +* Fixed a bug with broken images in the documentation. (14ce8bf6) +* Fixed a bug in FCMatchSolve when the automatic detection of free variables failed and produced an unsolvable system. (16655836) +* Fixed a bug in DOTSimplify related to the separation of Dirac and color structures (Issue #168, thanks to QSSRHelper) (af41428c) +* Fixed a bug in ToPaVe (issue #166, thanks to HBelusca). (9ed6145c) +* Fixed a bug in FeynAmpDenominatorSimplify (Issue #165, thanks to HBelusca). (9a3b2a5f) +* Fixed a bug in FeynAmpDenominatorCombine. (7592f8eb) +* Fix of the previous commit. (5119d640) +* Fixed a bug in FAPatch where setting the option Quiet to True did not suppress the ChoiceDialog. (1705b3bc) +* Fixed a missing FCI conversion when setting scalar products (thanks to S. Nabeebaccus). (ac4917dc) +* Fixed a small bug in FCFAConvert. (217dbe44) +* Fixed some bugs in FCLoopBasisIntegralToPropagators and FCLoopPropagatosToTopology. (beff2f31) +* Fixed FourDivergence and ThreeDivergence to work in the BMHV scheme. Resolves issue #69. (8b6c89b3) +* Fixed a bug in FCFADiracChainJoin (issue #143, thanks to Turgon). (7d325426) +* Fixed a bug in FCLoopFromGLI which prevented the proper conversion of GLIs with noninteger indices. (26bf55fd) +* Fixed a bug in FCFeynmanPrepare, where the function could not handle a list containing more loop momenta than actually present in the integral. This case is important for finding mappings between integrals that depend on different loop momenta. (7125867b) +* Fixed a bug in FCCompareNumbers where ComplexExpand was applied to purely real expressions. (647e6476) +* Fixed a typo in FCLoopSelectTopology. (fd9de361) +* Fixed a bug in FCCheckVersion. (7b2eb077) +* Fixed a bug with some substitutions not being performed in FCFeynmanParametrize. (d938a51c) +* Fixed issues with replacements in FCLoopGLIExpand and added new option Collecting (True by default) to have the output collected w.r.t. GLIs and invariants. (108ac95a) +* Fixed incorrect I*eta signs in eikonal propagators added by FCLoopBasisFindCompletion. (e0ec20e6) +* Fixed incorrect Ieta sings in ToSFAD. (0a570d24) +* Fixed minor typos in the documentation. (a50e78e5) +* Fixed a bug in FCLoopPropagatorPowerCombine. (3ab33f6a) +* Fixed a bug in FCLoopFromGLI. (f70b68aa) +* Fixed a bug in FCLoopPropagatorsToLineMomenta. (30c21712) +* Fixed issues in the naming of topologies in FCLoopFindTopologies. (1a523002) +* Fixed unit tests for FCLoopFindIntegralMappings. (c2858df2) +* Fixed a small bug in FCLoopPakOrder. (765601e5) +* Fixed and improved FCLoopScalelessQ and FCLoopPakScalelessQ. (6f7364e8) +* Fixed a small bug in FCLoopToPakForm related to vanishing characteristic polynomials. (2684d16b) +* Fixed and improved FCLoopFindTopologyMappings. (37a33a0b) +* Fixed and improved FCLoopFindMomentumShifts. (74fa5f4b) +* Fixed FCLoopPropagatorsToLineMomenta to work with reversed sign propagators. (2ff33114) +* Fixed small bugs in FCLoopFindMomentumShifts and FCLoopFindTopologyMappings. (bb66957b) +* Fixed several unit tests. (9fce6573) +* Fixed a small bug in FCFeynmanParametrize. (6f68190a) +* Fixed infinite loops in FCLoopIntegralToGraph. Also added support for FCTopology input and updated the documentation. (6c8ae5af) +* Fixed a bug in FCFeynmanPrepare where the ordering of propagators (67f5a4b2) +* Fixed and improved FCLoopFindPakMappings. (c05097f8) +* Fixed and improved FCLoopFindMomentumShift. (dd9c027b) +* Fixed a typo in FCFeynmanProjectivize. (b1652cdc) +* Fixed small bugs in FCFindPakMappings and FCToPakForm. (edde970f) +* Fixed a bug in PaVeUVPart. (5ffdb09b) +* Fixed unit tests in Mathematica 12.3 (1edc9587) +* Fixed a small bug in FCLoopSplit. (53d5f027) +* Fixed a bug in the dev version installer. Fixes issue #120 (thanks to kenmimasu!) (b550dbb4) +* Fixed a bug with wrong memoization in TID and ToPaVe. (7eb3c8a4) +* Fixed a wrong option name in DotSimplify. (6438a497) +* Fixed another missing semicolon. (1ba87f1d) +* Fixed a bug in the determination of $FCMemoryAvailable. (20acead8) +* Fixed a bug in FCFeynmanParametrize where setting an explicit prefactor led to an incorrect result. The corresponding unit tests reproduce results from Eqs. 9.49a-9.51b of George Sterman's QFT book. (503e5cc3) +* Fixed typos in the documentation notebooks. (c5e0d2ed) +* Fixed a bug in FCFeynmanParametrize where the FCI was not applied to the value of the FinalSubstitutions option. (badfa806) +* Fixed a bug in FCFeynmanProjectivize that prevented the function from properly handling integrals with multiple scales. (ac9fb5b2) +* Fixed some bugs in FCFeynmanProjectivize where it would erroneously report an integral as being not projective. The performance has also been improved by using random primes to check the projectivity. (68115608) +* Fixed a bug in PaVeUVPart where terms of the type (D-4)*PaVe would be erroneously reported as UV-divergent. The absence of the divergence was visible in the output, thhough (75132a9c) +* Fixed a bug in FDS where Euclidean-style propagators `SFAD[{I p, -m2^2}]` generated errors. (0cf19d70) +* A fix for the Feynman parametrization that was forgotten in the previous commits. (f59db5c4) +* Fixed a Typo in the description of CFAD (thanks to M. Zanke) (8413e2c0) +* Fixed a small bug in Variables2 where Union sometimes was not applied. (110510f3) +* Fixed a unit test for FCFeynmanParametrize. (d98bfc52) +* Fixed a bug in FCFeynmanPrepare where Cartesian integrals with temporal loop momentum components were not handled properly. (0c9bb23e) +* Fixed and updated the output of FCLoopIntegralToGraph to ensure that the graph representation can be easily visualized. (9347014c) +* Fixed a bug in FCPartialD, where time derivatives where not expanded as they should. (3bbbba2d) +* Fixed a bug in FCFeynmanParametrize with a wrong prefactor in tensor integrals (thanks to M. Zanke). (8fd58fa0) +* Fixed a bug in TID where the ExpandScalarProduct option didn't work as expected. (aa4d3466) +* Fixed a small bug in FCLoopBasisIntegralToGraph. (a578e76f) +* Fixed a bug in FCMatchSolve, where the function fails to recognize an unsolvable system. (fa5af095) +* Fixed a unit test for FCMatchSolve. (9313f462) +* Fixed a small bug in FCFeynmanParametrize. (4894a7f0) +* Fixed issue #76 where Spinors with incorrect syntax could produce wrong results unnoticed. From now on relevant functions will check the syntax explicitly and abort the evaluation if there are inconsistencies. (51a6aefb) +* Fixed lost commits to TID from the previous PRs. (79885bd0) +* Fixed bugs in TID and ToPaVe that prevented application of these routines to multiloop integrals that factorize into products of 1-loop integrals. (73cb34b6) +* Fixed a bug with FermionSpinSum failing to evaluate FCCCT expressions (thanks to P. Knees). (c02f374b) +* Fixed a failing check when producing the output of FCApart (thanks to A. Kachanovich) (4c562a0d) +* Fixed a small bug when a PauliTrace of unit matrix remained unevaluated after PauliSimplify. (d82a316d) +* Fixed a unit test. (78ebd79d) +* Removed error due to Mandelstam setting for 3 QCD Examples. (#104) (66b72b21) +* Fixed a small bug in FCPrepareFAAmp. (fade3168) +* Fixed inconsistent naming convention: NDR-Discard was called NDR-Drop in multiple places in the code (thanks to Hermès BÉLUSCA - MAÏTO) (0b95238a) +* Fixed a bug in FCMultiLoopTID when applied to integrals containing D-4- and 4-dimensional loop momenta (GitHub Issue #52) (3339f6c9) +* Fixed a bug in ToSFAD for massive propagators. (a3aab44f) +* fix Small in FCFADiracChainJoin. (ce8f6683) +* Small bugfix in FCLoopGLIToSymbol. (afc765b6) +* Fixed a bug in ApartFF where some piece of topologies might be erroneously treated as scaleless integrals. (51306020) +* Improved FCLoopCreateRuleGLIToGLI to create reverse rules and fixed a bug where a missing ExpandScalarProduct would prevent the creation of rules for identical topologies involving SFADs. (aa5769bf) +* Small fix in the markdown docu. (e8b50aee) +* A small fix in FCMultiLoopTID needed for FCLoopTensorReduce. (dbd3a9d9) +* Added PairContract2 to fix performance issues in Tdec after refactoring Contract, PairContract and PairContract2. (fda93224) +* Refactored large parts of Contract and PairContract to fix some incorrect contractions when using the BMHV scheme (issue #182). (794908c9) +* Small fix in FCLoopPakScalelessQ. (75fc0856) +* Minor fixes (spelling etc.) in several functions. (c4193efb) +* Some minor fixes in FCLoopToPakForm. (ad275818) +* Some fixes in FCToPakForm. (57e648fd) +* Bugfixes that didn't make it into the last commit. (69041ff5) +* Additional fixes for FCMultiLoopTID (referring to Issue #52 and Issue #54) (790aab5d) + + # Version 9.3.1 (June 2020) ## Important changes diff --git a/FeynCalc/FeynCalc.m b/FeynCalc/FeynCalc.m index bfba247d..e1a0805c 100644 --- a/FeynCalc/FeynCalc.m +++ b/FeynCalc/FeynCalc.m @@ -30,7 +30,7 @@ ]; (* Set the version number *) -FeynCalc`$FeynCalcVersion = "10.0.0"; +FeynCalc`$FeynCalcVersion = "10.1.0"; fcGlobalToFeynCalc[varG_String, defaultVal_]:= fcGlobalToFeynCalc[varG, varG, defaultVal]; diff --git a/FeynCalc/PacletInfo.m b/FeynCalc/PacletInfo.m index 23c9d518..4e30c392 100644 --- a/FeynCalc/PacletInfo.m +++ b/FeynCalc/PacletInfo.m @@ -1,14 +1,13 @@ (* Paclet Info File *) -(* created 2024/01/19*) +(* created 2024/08/15*) Paclet[ Name -> "FeynCalc", - Version -> "10.0.0", + Version -> "10.1.0", MathematicaVersion -> "10+", Description -> "FeynCalc is a Mathematica package for symbolic evaluation of Feynman diagrams and algebraic calculations in quantum field theory and elementary particle physics.", - Creator -> "Rolf Mertig, Frederik Orellana, Vladyslav Shtabovenko", - Extensions -> {} + Creator -> "Rolf Mertig, Frederik Orellana, Vladyslav Shtabovenko" ]