Open ryusukejinno opened 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.
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.
Indeed, if one only looks at the ratio, the prefactors (Minkowski vs. Euclidean) should drop out and the result should be the same.
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 prescription in your analytic result.
Would you mind explicitly restoring everywhere on the first page of your note? This might help us to understand what precisely you are computing.
Concretely, the comes from the propagators in momentum space, inside pySecDec we introduce them as follows:
where are some quadratic or linear propagators in momentum space.
After Feynman parametrisation this gives:
where is the usual second Symanzik polynomial.
Usually we integrate in a region where such that and . This means that we can drop the Feynman parameter dependence in the coefficient of the in the second Symanzik polynomial and it simplifies to:
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 such that and we are wondering if this is completely innocent or introduces a more complicated contour/analytic continuation. How do you handle this?
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.
We restored explicitly in the note. As Stephen points out, the Symanzik originally has the form . The sign of the imaginary part can carefully be tracked (please see Eqs.(0.8)-(0.10) and the text in between), and we can check that the integration range for does not affect the prescription: the imaginary part is always . This is a redefinition of the variable just to calculate in parallel (by making the denominator common between and ). Sorry if it caused any confusion.
We checked that the Symanzik variables pysecdec returns are the same as what we expect. Please compare Eqs.(0.6)-(0.7) with the final column of the first table in Table 1.
We tried (1) different dimensions or , (2) different prescriptions or , (3) different replacement rules for and . Pysecdec correctly returns the ratio between and for (please compare the last 8 entries of Table 5 and 6, and thanks Go for pointing this out), while it does not for .
Thank you for your help!
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.
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?
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.
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.