FeynHelpers manual (development version)

Package-X usage examples

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)

res=PaXEvaluateUVIRSplit[A0[m^2]]

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,

PaXEvaluateUVIRSplit[A0[m^2]]

We can also abbreviate the singularity structure with SMP["Delta_UV"] using

res2=FCHideEpsilon[res]

or make it explicit again

FCShowEpsilon[res2]

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

PaXEvaluate[FAD[{q, m}], q, PaXImplicitPrefactor -> 1/(2 Pi)^(4 - 2 Epsilon)]

When it comes to the evaluation of functions with complicated kinematics, Package-X is sometimes a bit stubborn

PaXEvaluate[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}]]

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

PaXEvaluate[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}], PaXC0Expand -> True]

Notice that if we are interested only in the UV-divergent piece, we can get it rather easily without going through the full result.

PaXEvaluateUV[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}], PaXC0Expand -> True]

Notice that the UV-poles can be revealed using the built-in function PaVeUVPart

PaVeUVPart[PaVe[0, 0, 1, {SP[p, p], SP[p, p], m^2}, {m^2, m^2, m^2}]]

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

PaXEvaluate[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}}]

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

PaXEvaluate[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}}, PaXAnalytic -> True]

We can also do a double expansion in m1 and m2

PaXEvaluate[B0[SPD[p1, p1], m1^2, m2^2], PaXSeries -> {{m1, 0, 2}, {m2, 0, 2}}, PaXAnalytic -> True]

and reveal the origin of the poles

PaXEvaluateUVIRSplit[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]