The main idea behind the FeynHelpers interface to pySecDec is to
facilitate the generation of pySecDec scripts for integrals written in
the FeynCalc notation (i.e. as GLI
s with the corresponding
lists of FCTopology
symbols).
The main high-level function of this interface is called
PSDCreatePythonScripts
. In the simplest case we need two
provide following arguments and options
GLI
FCTopology
to which this
GLI
belongsNotebookDirectory[]
PSDRequestedOrder
specifies the order in
\varepsilon to which the integral
should be evaluated (default is 0
)PSDRealParameterRules
is a list of rules for
replacing kinematic invariants with numerical values which are real
numbers. For complex numbers you need to use
PSDComplexParameterRules
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
= GLI[prop1L, {1, 1}]
int = FCTopology[prop1L, {FAD[{p1, m1}], FAD[{p1 + q, m2}]}, {p1}, {q}, {Hold[SPD][q] -> qq}, {}]
topo = PSDCreatePythonScripts[int, topo, NotebookDirectory[],
files -> {qq -> 1., m1 -> 2., m2 -> 3.}, OverwriteTarget -> True] PSDRealParameterRules
The output is a list containing two elements which are full paths to
the two pySecDec script files generate_int.py
and
integrate_int.py
. You can now switch to the terminal, enter
the corresponding directory and perform the integral evaluation by first
running
generate_int.py python
Here is a sample output of this script
"sum_package" for loopint
running "make_package" for "loopint_integral"
running for primary sector 0
computing Jacobian determinant total number sectors before symmetry finding: 2
total number sectors after symmetry finding (iterative): 2
total number sectors after symmetry finding (light Pak): 2
total number sectors after symmetry finding (full Pak): 2
for sector 1
writing FORM files for sector 2
writing FORM files exp(EulerGamma*eps)*gamma(eps) (regulators: [eps] , orders: [0] )
expanding the prefactor + (1)*eps**-1 + (0)
"loopint_integral" done
Now you need to compile the generated library files. This can be done via
-j8 -C loopint make
where 8 stands for the number threads to be run simultaneously. It depends on how powerful the CPU in your machine is.
Finally, entering
integrate_int.py python
will perform the actual numerical evaluation and save the obtained
results to numres_*_psd.txt
, numres_*_mma.m
and numres_*_maple.mpl
. Here *
stands for the
numerical values of kinematic invariants present in the integral. You
can modify those values without the need to recompile the libraries by
simply editing the arrays num_params_real
and
num_params_complex
in integrate_int.py
.
For Mathematica users the file numres_*_mma.m
is
probably the most useful one. You can load the content of this file into
your Mathematica session using the function
PSDLoadNumericalResults
. To that aim you just need to give
it the output of PSDCreatePythonScripts
and set the options
PSDRealParameterRules
and
PSDComplexParameterRules
to the same values that were used
when invoking PSDCreatePythonScripts
[files, PSDRealParameterRules -> {qq -> 1., m1 -> 2., m2 -> 3.}] PSDLoadNumericalResults