The syntax of the FeynHelpers interface to Package-X is very simple.
There is essentially only one command PaXEvalute
that does
all the job of evaluating Passarino-Veltman functions analytically.
Let us start with something simple, e.g. the A_0 function in the standard normalization of Denner et al. (used in LoopTools and many other packages)
=PaXEvaluateUVIRSplit[A0[m^2]] res
A nice feature of Package-X is the ability to explicitly distinguish
between UV and IR poles, which can be important for renormalization or
matching calculations. To this aim we have 3 functions at our disposal
that essentially act in the same way as PaXEvaluate
but
label the poles accordingly. These are
PaXEvaluateUVIRSplit
, PaXEvaluateUV
and
PaXEvaluateIR
. For example,
[A0[m^2]] PaXEvaluateUVIRSplit
We can also abbreviate the singularity structure with
SMP["Delta_UV"]
using
=FCHideEpsilon[res] res2
or make it explicit again
[res2] FCShowEpsilon
To evaluate FAD
-type integrals, we need to specify the
loop momentum explicitly. Furthermore, when we enter loop integrals as
FAD*SPD
, we usually also imply that they have the standard
normalization with 1/(2\pi)^D. We do
not have to write the prefactor out explicitly, but we must of course
include it when we are evaluating our master integrals symbolically or
numerically.
When employing PaXEvaluate
this can be taken into
account via the option PaXImplicitPrefactor
[FAD[{q, m}], q, PaXImplicitPrefactor -> 1/(2 Pi)^(4 - 2 Epsilon)] PaXEvaluate
When it comes to the evaluation of functions with complicated kinematics, Package-X is sometimes a bit stubborn
[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}]] PaXEvaluate
It knows that there is no simple way to express the full result for
the C_0 function, so it prefers to keep
in the implicit form. Using the option PaXC0Expand
we can
obtain the (admittedly quite large and complicated) result
nonetheless
[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}], PaXC0Expand -> True] PaXEvaluate
Notice that if we are interested only in the UV-divergent piece, we can get it rather easily without going through the full result.
[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}], PaXC0Expand -> True] PaXEvaluateUV
Notice that the UV-poles can be revealed using the built-in function
PaVeUVPart
[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}]] PaVeUVPart
Furthermore, Package-X can expand coefficient functions in their
arguments, which is very useful for many applications. In
PaXEvaluate
the corresponding option is called
PaXSeries
[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}}] PaXEvaluate
By default Package-X tries to do expansion around the final results,
which is usually not what we want. With the option
PaXAnalytic
the expansion will be done on the level of
Feynman parameters, as one would do it by hand
[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}}, PaXAnalytic -> True] PaXEvaluate
We can also do a double expansion in m1
and
m2
[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}, {m2, 0, 2}}, PaXAnalytic -> True] PaXEvaluate
and reveal the origin of the poles
[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}}, PaXAnalytic -> True] PaXEvaluateUVIRSplit
[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}, {m2, 0, 2}}, PaXAnalytic -> True] PaXEvaluateUVIRSplit