Open ygtw1 opened 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}]
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}]]
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.
OK, thanks very much.
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.
13.1
10.1
Yes
No
(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