FeynCalc / feyncalc

Mathematica package for algebraic calculations in elementary particle physics.
https://feyncalc.github.io
GNU General Public License v3.0
316 stars 88 forks source link

FCLoopTensorReduce bug #285

Open ygtw1 opened 2 weeks ago

ygtw1 commented 2 weeks ago

(input) <<FeynCalc`; SPD[p1, p1] = 1; SPD[p2, p2] = 1/16; SPD[p1, p2] = 1/4; SPD[p3, p3] = 1/16; SPD[p1, p3] = 1/4; SPD[p2, p3] = 1/16; topo1= {FCTopology["tad1l", {SFAD[{{q1,0},{mb^2,1},1}],SFAD[{{p1+p2+p3-q1,0},{0,1},1}]}, {q1}, {p1,p2,p3}, {}, {}]} topo11= {FCTopology["tad1l", {SFAD[{{q1,0},{mb^2,1},1}],SFAD[{{p123-q1,0},{0,1},1}]}, {q1}, {p123}, {}, {}]} amp1 = FCGV["GLIProduct"][SPD[q1,Polarization[k,I]] , GLI["tad1l", {1,1}]]; FCLoopTensorReduce[amp1, topo1] FCLoopTensorReduce[amp1, topo11] ApartFF[%[[1]] FAD[{q1,mb},{p1+p2+p3-q1}]/.p123->p1+p2+p3,{q1}]-FCMultiLoopTID[FAD[{q1,mb},{p1+p2+p3-q1}]SPD[q1,Polarization[k,I]],{q1}]//Calc

(output) {FCTopology(tad1l,{1/(q1^2-mb^2+I [Eta]),1/(((p1+p2+p3-q1))^2+I [Eta])},{q1},{p1,p2,p3},{},{})}

{FCTopology(tad1l,{1/(q1^2-mb^2+I [Eta]),1/(((p123-q1))^2+I [Eta])},{q1},{p123},{},{})}

FCGV["GLIProduct"][SPD[q1, Polarization[k, I]], GLI["tad1l", {1, 1}]]

FCGV["GLIProduct"][(SPD[p123, q1] SPD[p123, Polarization[k, I]])/SPD[p123, p123], GLI["tad1l", {1, 1}]]

0

vsht commented 2 weeks ago

This because your choice of scalar product values produces a zero Gram determinant. In this case the linear system is ill-defined and one cannot do the tensor reduction in the standard way. You can see it by evaluating

FCClearScalarProducts[]
topo1 = {FCTopology[
   "tad1l", {SFAD[{{q1, 0}, {mb^2, 1}, 1}], 
    SFAD[{{p1 + p2 + p3 - q1, 0}, {0, 1}, 1}]}, {q1}, {p1, p2, 
    p3}, {}, {}]}
res = FCLoopTensorReduce[amp1, topo1]

res /. FCI[{SPD[p1, p1] -> 1,
   SPD[p2, p2] -> 1/16,
   SPD[p1, p2] -> 1/4,
   SPD[p3, p3] -> 1/16,
   SPD[p1, p3] -> 1/4,
   SPD[p2, p3] -> 1/16}]
ygtw1 commented 2 weeks ago

But I find in the case of a zero Gram determinant, the function FCMultiLoopTID can do the tensor reduction when the variables are assigned numerical values. However, the function FCMultiLoopTID cannot do the tensor reduction when keeping the variables in symbolic form. And the function FCLoopTensorReduce cannot do the tensor reduction whether the variables are in numerical or symbolic form. My test is as following.

(input) mb=.; mc=.; r=.; FCClearScalarProducts[]; SPD[p1, p1] = mb^2; SPD[p2, p2] = mc^2; SPD[p1, p2] = mb*mc; SPD[p3, p3] = mc^2; SPD[p1, p3] =mb mc r; SPD[p2, p3] =mc^2 r; test=FAD[q1,{p2+q1,mc},p2-p3+q1,{-p1+q1,mb}] LCD[u,u1,u2][q1]; FCMultiLoopTID[test,{q1}]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm TID[test,q1,ToPaVe->True]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm FCLoopTensorReduce[FCGV["GLIProduct"][LCD[u,u1,u2][q1] , GLI["test", {1,1,1,1}]], {FCTopology["test",FAD/@(List@@( test/LCD[u,u1,u2][q1])), {q1}, {p1,p2,p3}, {}, {}]}]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm mb=1; mc=1/4; r=1; FCMultiLoopTID[test,{q1}]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm TID[test,q1,ToPaVe->True]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm TID[%%-%,q1,ToPaVe->True] FCLoopTensorReduce[FCGV["GLIProduct"][LCD[u,u1,u2][q1] , GLI["test", {1,1,1,1}]], {FCTopology["test",FAD/@(List@@( test/LCD[u,u1,u2][q1])), {q1}, {p1,p2,p3}, {}, {}]}]//Collect[#,_PaVe,Simplify]&//Quiet//FCE//StandardForm

(output) $Aborted

Indeterminate

FCGV["GLIProduct"][LCD[u, u1, u2][q1], GLI["test", {1, 1, 1, 1}]]

-FAD[{q1, 1/4}, -p2 + q1, -p3 + q1, {-p1 - p2 + q1, 1}] LCD[u, u1, u2][p2] - I [Pi]^2 PaVe[1, {1, 1, 1/16, 1/16, 0, 25/16}, {0, 1, 0, 1/16}, PaVeAutoOrder -> True, PaVeAutoReduce -> True] (LCD[u, u1, u2][p1] + LCD[u, u1, u2][p2]) - I [Pi]^2 PaVe[1, {0, 1/16, 25/16, 1, 1/16, 1}, {0, 0, 1/16, 1}, PaVeAutoOrder -> True, PaVeAutoReduce -> True] (LCD[u, u1, u2][p2] + LCD[u, u1, u2][p3])

-I [Pi]^2 D0[0, 1/16, 25/16, 1, 1/16, 1, 0, 0, 1/16, 1] LCD[u, u1, u2][p2] - I [Pi]^2 PaVe[1, {1, 1, 1/16, 1/16, 0, 25/16}, {0, 1, 0, 1/16}, PaVeAutoOrder -> True, PaVeAutoReduce -> True] (LCD[u, u1, u2][p1] + LCD[u, u1, u2][p2]) - I [Pi]^2 PaVe[1, {0, 1/16, 25/16, 1, 1/16, 1}, {0, 0, 1/16, 1}, PaVeAutoOrder -> True, PaVeAutoReduce -> True] (LCD[u, u1, u2][p2] + LCD[u, u1, u2][p3])

0

FCGV["GLIProduct"][LCD[u, u1, u2][q1], GLI["test", {1, 1, 1, 1}]]

vsht commented 2 weeks ago

This is because FCMultiLoopTID uses TID in the background, which is 1-loop only. TID recognizes the zero Gram determinant and switches to the PaVe coefficient function basis, where you don't do the full tensor reduction. So you get the $D_1$ functions in the output.

While $D_0$ can be directly rewritten in terms of propagator integrals, for $D_1$ you need a dedicated reduction procedure. In particular, you can't directly pass this $D_1$ to an IBP reduction code, which is the main purpose of using FCLoopTensorReduce as well GLI and FCTopology.

There are some tricks to do tensor reduction on integrals with zero Gram determinants (like in the PaVe basis),
but they're not readily generalizable and sort of work case-by-case.

ygtw1 commented 2 weeks ago

OK, thanks very much.

vsht commented 2 weeks ago

In principle, you can often get such things reduced if you treat the numerator as an inverse propagator and put it into IBP reduction code. The price to pay is that you will get an extra momentum (scale) for each open index or an index contracted with something like polarization vector or a Dirac matrix.

This probably won't work out of the box with FeynCalc, though.

Alternatively you can keep one of the scalar products off shell and insert its value only upon calculating the master.