The main idea behind the FeynHelpers interface to FIESTA is to
facilitate the generation of FIESTA scripts for integrals written in the
FeynCalc notation (i.e. as GLI
s with the corresponding
lists of FCTopology
symbols). If needed, those scripts can
be also evaluated in background.
The main high-level function of this interface is called
FSACreateMathematicaScripts
. In the simplest case we need
two provide following arguments and options
GLI
FCTopology
to which this
GLI
belongsNotebookDirectory[]
FSAOrderInEps
specifies the order in \varepsilon to which the integral should be
evaluated (default is 0
)FSAParameterRules
is a list of rules for
replacing kinematic invariants with numerical values which can be real
or complex numbers.OverwriteTarget
to True
you can tell the code that you do not care about
thatHere is a simple 1-loop example that incorporates all of the above. Notice that it is crucial to switch the i \eta sign of propagators from plus to minus, otherwise the result will be incorrect.
= GLI[prop1L, {1, 1}]
int = FCLoopSwitchEtaSign[FCTopology[prop1L, {FAD[{p1, m1}], FAD[{p1 + q, m2}]}, {p1}, {q}, {}, {}], -1]
topo = FSACreateMathematicaScripts[int, topo, NotebookDirectory[], FinalSubstitutions -> {Hold[SPD][q] -> qq}, FSAParameterRules -> {qq -> 30., m1 -> 2., m2 -> 3.}, OverwriteTarget -> True] files
The output is a list containing two elements. The first one is the
full path to the Mathematica script file FiestaScript.m
,
while the second give the name of the output file containing numerical
result for the given integral. For simple integrals you can evaluate the
script directly in your Mathematica session by running
[files[[1]]] FSARunIntegration
Notice that the evaluation of sufficiently complicated integrals can
take hours or even days so in general it is not recommended to use
FSARunIntegration
.
Here is a sample the script file
Get["/home/vs/.Mathematica/Applications/FIESTA5/FIESTA5.m"];
If[$FrontEnd===Null,
=DirectoryName[$InputFileName],
projectDirectory=NotebookDirectory[]
projectDirectory];
SetDirectory[projectDirectory];
= "numres_" <> StringRiffle[ToString[#, InputForm] & /@ {15., 2., 3.}, "_"]<>"_fiesta.m";
resFileName Print["Working directory: ", projectDirectory];
Print["The results will be saved to: ", resFileName];
= UF[{p1},{m1^2 - p1^2, m2^2 - (p1 + q)^2}, {q^2 -> qq, qq -> 15., m1 -> 2., m2 -> 3.}];
uf SetOptions[FIESTA, "NumberOfSubkernels" -> 4,"ComplexMode" -> True,"ReturnErrorWithBrackets" -> True,
"Integrator" -> "quasiMonteCarlo","IntegratorOptions" -> {{"maxeval", "50000"}, {"epsrel", "1.000000E-05"}, {"epsabs", "1.000000E-12"}, {"integralTransform", "korobov"}}];
= 1;
pref = SDEvaluate[uf,{1, 1},0];
resRaw = resRaw*pref;
res Print["Final result: ", res];
Put[res, resFileName];
To load the numerical results into your Mathematica session you can
use the function FSALoadNumericalResults
. To that aim you
just need to give it files
as input.
[files] FSALoadNumericalResults
If you want to perform an asymptotic expansion, you need to set the
option FSASDExpandAsy
to True
, specify the
expansion variable using FSAExpandVar
and set the desired
expansion order via FSASDExpandAsyOrder
. For example,
= GLI[prop1L, {1, 1}]
int = FCLoopSwitchEtaSign[FCTopology[prop1L, {FAD[{p1, m1}], FAD[{p1 + q, m2}]}, {p1}, {q}, {}, {}], -1]
topo = FSACreateMathematicaScripts[int, topo, NotebookDirectory[], FinalSubstitutions -> {Hold[SPD][q] -> qq} , FSAParameterRules -> {qq -> 30., m1 -> 2.}, OverwriteTarget -> True, FSASDExpandAsy->True, FSAExpandVar -> m2, FSASDExpandAsyOrder-> 4] files