Feynson finds symmetries between families of Feynman integrals. One can use it to reduce the number of families before handing the integrals over to an IBP relation solver.
In principle IBP solvers perform all the functions of Feynson too. The need for a separate tool is that the construction of integral families needs to be done before the final expression is ready for an IBP solver. Additionally, not all IBP solvers are optimized to receive thousands of (mostly redundant) integral families; Feynson is.
Feynson was first introduced and described in the author’s Ph.D. thesis [1], please refer to it for more implementations details.
[1] https://inspirehep.net/literature/2177952
To build Feynson, first install GiNaC [2] and Nauty [3] libraries, and then run:
make
A static binary of Feynson can also be built. For this you will need UPX [4], and the static versions of GiNaC and Nauty libraries (as well as their dependencies). Once those are ready, run:
make feynson.static
Alternatively it is possible to use Hepware [5] to build Feynson together with all the dependencies.
[3] https://pallini.di.uniroma1.it/
[5] https://github.com/magv/hepware
feynson
-- a tool for Feynman integral symmetries.
feynson
[options
] command args ...
-
feynson
symmetrize [-d
] spec-filePrint a list of momenta substitutions that make symmetries between a list of integral families explicit.
These momenta substitutions will make the set of denominators of two integral families exactly match (up to a reordering) if the families are isomorphic, and will make one a subset of the other if one family is isomorphic to a subsector of another family.
The input specification file should be a list of three elements:
- a list of all integral families, with each family
being a list of propagators (e.g.
(l1+l2)^2
); - a list of all loop momenta;
- a list of external invariant substitution rules, each
rule being a list of two elements: a scalar product
and its substitution (e.g.
{q^2, 1}
or{p1*p2, s12}
).
For example:
{ {{(q-l)^2, l^2}, {(q+l)^2, l^2}}, {l}, {} }
.Each family that can be mapped to (a subsector of) another is guaranteed to be mapped to the first possible family, prefering families that are larger or listed earlier. If
-d
flag is given, earlier families are prefered irrespective of their size.Note that if non-trivial invariant substitution rules are supplied, it becomes possible that two families are identical, but no loop momenta substitution exists to map them onto each other. For example, a 1-loop propagator with momenta
p1
is equal to a 1-loop propagator withp2
, but only ifp1^2 = p2^2
, in which case no loop momenta substitution can make the integrands identical.For this reason, it is best to use symmetrize with the invariant substitution rules set to
{}
, and to fall back to mapping-rules otherwise. - a list of all integral families, with each family
being a list of propagators (e.g.
-
feynson
mapping-rules [-d
] spec-fileSame as symmetrize, but instead of printing the loop momenta substitutions, produce explicit rules of mapping between families: for each family that is symmetric to another, print
{fam, {n1, n2, ...}}
, meaning that any integral in this family with indices{i_1, i_2, ...}
is equal to an integral in the family numberfam
with indices{i_n1, i_n2, ...}
. For unique families, print{}
. The families are numbered starting at 1. If a given family is symmetric to a subfamily, some of then
indices will be0
: the convention is thati_0 = 0
. -
feynson
zero-sectors [-s
] spec-filePrint a list of all zero sectors of a given integral family.
The input specification file should be a list of four elements:
- a list of all propagator momenta (e.g.
(l1-q)^2
); - a list of cut flags,
0
for normal propagators,1
for cut propagators; - a list of all loop momenta (e.g.
l1
); - and a list of external invariant substitutions (e.g.
{q^2, 1}
).
For example:
{ {(q-l)^2, l^2}, {0, 0}, {l}, {{q^2,1}} }
.The output will be a list of zero sectors, each denoted by an integer s=2^{i_1-1} + ... + 2^{i_n-1}, where i_k are the indices of denominators that belong to this sector (counting from 1).
If the
-s
("short") flag is given, the output will be shortened by only listing the topmost zero sectors: all the remaining zero sectors are their subsectors.Every sector that is missing a cut propagator of its supersectors will be reported as zero.
- a list of all propagator momenta (e.g.
-
feynson
ufx spec-filePrint Feynman parametrization (U, F, X) of an integral defined by a set of propagators.
The input specification file should be a list of three elements:
- a list of all propagators, e.g.
(l1-q)^2
; - a list of all loop momenta, e.g.
l1
; - and a list of external invariant substitutions, e.g.
{q^2, 1}
.
For example:
{ {(q-l)^2, l^2}, {l}, {{q^2,1}} }
.The output will be a list of three items: the U polynomial, the F polynomial, and the list of Feynman parameter variables.
- a list of all propagators, e.g.
-
-j
jobsParallelize calculations using at most this many workers.
-
-d
Prioritize families in the definition order, irrespective of size.
-
-s
Shorten the output (in zero-sectors and minimize-family).
-
-q
Print a more quiet log.
-
-h
Show this help message.
-
-V
Print version information.
-
spec-file
Filename of the input file, with
-
meaning the standard input.
TMPDIR
Temporary files will be created here.
Vitaly Magerya