gudrunhe / secdec

a program to evaluate dimensionally regulated parameter integrals numerically
GNU General Public License v3.0
25 stars 5 forks source link

Feynman integral having two linear propagators #4

Open ryusukejinno opened 3 years ago

ryusukejinno commented 3 years ago

The issue is about an integral having two linear propagators

.

Here the momenta are Euclidean, and are orthogonal vectors , the dimension is , and the prescription is implicit. The analytic result should be

but seemingly pysecdec does not reproduce the ratio 2:1 between the two. The derivation is summarized here Feynman.pdf, and an example code is here Feynman.zip.

vsht commented 3 years ago

I'm not a pySecDec developer (just a fellow user of the package), but if I'm not mistaken the automatic derivation of the Feynman parametrization in pySecDec currently does not allow you to treat integrals with the true Euclidean metric (1,1,1,1). When people speak of Euclidean integrals in the context of multi-loop calculations, what they very often mean are Minkowskian integrals (i.e. the metric is (1,-1,-1,-1)) evaluated in the so-called Euclidean kinematics regions where the scalar products of external vectors are negative.

On the contrary, here you have a true Cartesian D-1 dimensional integral, which is something completely different, so no wonder that you don't get the result you expect. The obvious workaround would be to derive the Feynman parametrizaion by yourself and then feed the Feynman parameter integral directly to pySecDec, bypassing the LoopIntegralFromPropagators part.

You could also employ FeynCalc's FCFeynmanParametrize if you need to derive parametrization for a larger number of integrals

int = CFAD[{{0, l1 . u}}, {{0, sign l2 . u}}, l1 + l2 - q, l1 - q,   l2 - q]
res = FCFeynmanParametrize[int, {l1, l2}, Names -> x,   FCReplaceD -> {D -> 4 - 2 ep},   FinalSubstitutions -> {CSPD[q, u] -> 0, CSPD[u] -> 1, CSPD[q] -> 1}]
{(x[3]*x[4] + x[3]*x[5] + x[4]*x[5])^(1/2 + 3*ep)*(-(sign^2*x[2]^2*x[3]) - x[1]^2*x[4] - x[1]^2*x[5] + 2*sign*x[1]*x[2]*x[5] - sign^2*x[2]^2*x[5] + 4*x[3]*x[4]*x[5])^(-2 - 2*ep), 4^(2 + 2*ep)*Gamma[2 + 2*ep], {x[1], x[2], x[3], x[4], x[5]}}

Hope this helps.

g-mishima commented 3 years ago

I think the problem persists if you consider the Minkowskian metric. In my understanding, the relation "K^+ = 2 K^-" holds for any dimension and metric. When using pySecDec with the current setup, we actually consider Minkowskian 3-2ep dimension, which is a weird choice but still the above relation (or the ratio 2:1) should be satisfied.

vsht commented 3 years ago

Indeed, if one only looks at the ratio, the prefactors (Minkowski vs. Euclidean) should drop out and the result should be the same.

spj101 commented 3 years ago

Sorry for taking so long to come back to you on this.

We briefly discussed this issue and we are not yet able to find what could go wrong inside pySecDec that would cause this. One thing we would like to check with you is how you handle the formula prescription in your analytic result.

Would you mind explicitly restoring formula everywhere on the first page of your note? This might help us to understand what precisely you are computing.

Concretely, the formula comes from the propagators in momentum space, inside pySecDec we introduce them as follows:

formula

where formula are some quadratic or linear propagators in momentum space.

After Feynman parametrisation this gives:

formula

where formula is the usual second Symanzik polynomial.

Usually we integrate in a region where formula such that formula and formula. This means that we can drop the Feynman parameter dependence in the coefficient of the formula in the second Symanzik polynomial and it simplifies to:

formula

This is the analytic continuation that is always assumed in pySecDec, it can be taken as the true definition of the integral.

However, in Equation (0.9) of your note you change the integration limits on formula such that formula and we are wondering if this is completely innocent or introduces a more complicated contour/analytic continuation. How do you handle this?

ryusukejinno commented 3 years ago

We apologize for our slow reply. We thank Vladyslav, Go, and Stephen for helpful comments. The new note is here: Feynman.pdf. The main point is summarized in the first 3 pages. We also attach the code here: Feynman.zip.

Thank you for your help!

andresgit commented 3 years ago

It is true that pySecDec currently does not get the correct result for in dimensions. The integration does not converge in pySecDec using that dimension, the reported errors are very large.

To explain why, we can write the polynomial as

After sector decomposition there are sectors where (after factorizing out monomial powers)

In this case there is a pole at , for example whenever . At that point also the Landau conditions ( for all ) are satisfied.

pySecDec extracts poles occurring when the integration variables go to zero, but not poles when a variable is not equal to zero. For those poles it tries to use contour deformation, but here we have points where the Landau equations are satisfied and the contour deformation is zero.

Then pySecDec will try to integrate these expressions where not all the singularities are extracted into monomial factors, nor avoided using contour deformation, and depending on the exponent of the singularity (i.e. the exponent of , which depends on the dimension), they are integrable or not and depending on that pySecDec gets a reasonable answer or not.

In principle the poles at could be extracted using the split option, which tries to split the integrals into parts and change variables such that the singularities get mapped to when the variables are zero, however given how the splitting is currently implemented in pySecDec, it does not work for this integral. We hope in the future to have an improved splitting behavior, which also works for this integral.

If you want, you can split the integral into two parts manually. In the first one and in the second one , then do a change of variables in the first one and in the second one. This maps the points when to either or , which pySecDec can handle. The Jacobian of the transformation is 1 and the integration limits stay the same, from zero to infinity. You can do it for example with the following code:

import pySecDec as psd
import sympy as sp

if __name__ == "__main__":
    # the exponentiated polynomials
    eU = sp.sympify("( x3*x4 + x4*x5 + x5*x3 )**(3*eps + 1/2)")
    eF = sp.sympify("( x3*x4*x5 -(1/4)*((x1-x2)**2*x3 + x1**2*x5 + x2**2*x4) )**(-2*eps - 2)")

    integrals = []
    for replacement in [("x1","x1+x2"), ("x2","x1+x2")]:
        integrals.append(
            psd.MakePackage(
                name = f"Kplus_{len(integrals)}",
                integration_variables = ["x1", "x2", "x3", "x4", "x5"],
                polynomials_to_decompose = [eU.subs(*replacement), eF.subs(*replacement)],
                polynomial_names=["U","F"],
                contour_deformation_polynomial = "F",
                positive_polynomials = ["U"],
                prefactor = "-gamma(2*eps + 2)",
                regulators = ["eps"],
                requested_orders = [0],
                decomposition_method = "geometric",
            )
        )

    psd.sum_package("Kplus", integrals, regulators = ["eps"], requested_orders = [0])

Then the result you get from pySecDec agrees with the analytic result.

vsht commented 3 years ago

Many thanks for the detailed answer and this enlightening discussion.

It's interesting that the poles of the F-polynomial at x_i = 1 seem to manifest themselves only after the sector decomposition, at least in my naive understanding.

If I consider the full F-polynomial

-1/4(x[2]^2x[3]) - (x[1]^2x[4])/4 - (x[1]^2x[5])/4 + (x[1]x[2]x[5])/2 - (x[2]^2x[5])/4 + x[3]x[4]*x[5]

and calculate the Groebner basis of F and d F_i / d x_j (in the spirit of 1810.06270 and 2003.02451), then upon simplifying the obtained solutions of the Landau equations I get

x[1] == 0 && x[2] == 0 && ((x[3] == 0 && (x[4] == 0 || x[5] == 0)) || (x[4] == 0 && x[5] == 0))

So there is a non-trivial way to satisfy the Landau equations by putting 4 of the 5 Feynman parameters to zero, but one cannot generate a singularity by putting something to unity.

How does pySecDec actually handle the search for zeros of the F-polynomials?

andresgit commented 3 years ago

In the full F-polynomial you consider, when x[1]=x[2] and x[3]=x[4]=0, then you have F=0 and dF/dx[1]=dF/dx[2]=dF/dx[5]=0.

It is true that the F polynomial after sector decomposition is different, it has different variables and terms are factorized out, such that F has a constant term. For the new F in the new variables the contour deformation is used to try to go around the remaining poles of F.

In general there is no search for zeros of the F-polynomial, some zeros are factorized out using sector decomposition and for the remaining ones contour deformation is used, but contour deformation doesn't always go around all of them (when they are at endpoints or when dF/dx=0). Only with the split option, after sector decomposition, it tries to find all variables which when set to one in any combination result in no constant term in the polynomials it is integrating. It then splits the integration domain 0 to 1 into two parts 0 to a and a to 1, then maps x->1-x in the second one and does sector decomposition again.