Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FCLoopTensorReduce bug #285

Open
ygtw1 opened this issue Oct 6, 2024 · 5 comments
Open

FCLoopTensorReduce bug #285

ygtw1 opened this issue Oct 6, 2024 · 5 comments

Comments

@ygtw1
Copy link

ygtw1 commented Oct 6, 2024

  • Your Mathematica version

13.1

  • Your FeynCalc version

10.1

  • Did you try to reinstall FeynCalc (stable version) using the automatic installer to make sure that you have the latest bugfixes?

Yes

  • Does your Mathematica initialization file contain statements that might influence the behavior of FeynCalc? Sometimes external packages may modify `init.m` in unusual ways, causing troubles for other codes.

No

  • Please provide a minimal working example that illustrates the problem and works on a fresh kernel. The example should be provided either by writing the code (as `InputForm`!) directly in the issue text or by attaching a Mathematica notebook. Please do not post code samples as screenshots, PDF files etc.: Those essentially require us to retype everything by hand, which is annoying and also time consuming. Please explain the difference between the current behavior and the expected behavior.
FCLoopTensorReduce does not work.

(*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
Copy link
Member

vsht commented Oct 6, 2024

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
Copy link
Author

ygtw1 commented Oct 7, 2024

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
Copy link
Member

vsht commented Oct 7, 2024

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
Copy link
Author

ygtw1 commented Oct 7, 2024

OK, thanks very much.

@vsht
Copy link
Member

vsht commented Oct 7, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants