FeynCalc / feyncalc

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

Problem with Oneloop and TID #47

Closed Tpengfu closed 5 years ago

Tpengfu commented 5 years ago

Thanks for your great work on FeynCalc.

When I use TID to do HiggstoGluonGluon oneloop calculation, the result was wrong, and it was same with the calculation that I used Oneloop with oneloopsimplify which was not recommend by developer.

Then I set $LimitTo4=True, the result of OneLoop with OneLoopSimplify was True(agree with my derivation) and the result of TID was still wrong.

I take apart the amplitude into pieces, and I found the one which cause the problem, that is

FeynAmpDenominator[PropagatorDenominator[Momentum[k,D]],PropagatorDenominator[Momentum[k,D]+Momentum[p1,D]],PropagatorDenominator[Momentum[k,D]+Momentum[p1,D]+Momentum[p2,D]]] Pair[LorentzIndex[mu,D],Momentum[k,D]] Pair[LorentzIndex[nu,D],Momentum[k,D]]

in which "k" is loop momentum, and we set all mass to zero, that means p1.p1=0, p2.p2=0.

four different ways

  1. $LimitTo4=False (default) , use Oneloop with oneloopsimplify
  2. $LimitTo4=False (default) , use TID

    3. $LimitTo4=True, use Oneloop with oneloopsimplify

  3. $LimitTo4=True, use TID

we found only the third way gave the right answers(agreed with my derivation)

FCClearScalarProducts[];
ScalarProduct[p1, p1] = 0;
ScalarProduct[p2, p2] = 0;
ScalarProduct[p1, p2] = p1p2;
$LimitTo4 = False;  
wt = FeynAmpDenominator[PropagatorDenominator[Momentum[k, D]], 
   PropagatorDenominator[Momentum[k, D] + Momentum[p1, D]], 
   PropagatorDenominator[
    Momentum[k, D] + Momentum[p1, D] + Momentum[p2, D]]] Pair[
   LorentzIndex[mu, D], Momentum[k, D]] Pair[LorentzIndex[nu, D], 
   Momentum[k, D]]  
worng = wt // OneLoopSimplify[#, k] & // OneLoop[k, #] & // 
   PaVeReduce // ChangeDimension[#, D] &

wrong = wt // TID[#, k] & // ToPaVe[#, k] & // PaVeReduce // ChangeDimension[#, D] &; wrong = wrong /. D -> 4 // ChangeDimension[#, D] &


*  <summary>we expect to get the third answers ($LimitTo4=True,use Oneloop with oneloopsimplify) , there should be a term which is not contain B0/C0.</summary> 

(I [Pi]^2 Subscript[B, 0](2 p1p2,0,0) (p1p2 g^(munu)-2 p2^mu p1^nu-2 p1^mu p2^nu+3 p1^mu p1^nu-p2^mu p2^nu))/(4 p1p2)+I [Pi]^2 p1^mu p1^nu Subscript[C, 0](0,0,2 p1p2,0,0,0)+(I [Pi]^2 (p1p2 g^(munu)-p2^mu p1^nu-p1^mu p2^nu))/(4 p1p2)



https://github.com/Tpengfu/Bug-in-FeynCalc

[4ways.zip](https://github.com/FeynCalc/feyncalc/files/3380515/4ways.zip)
vsht commented 5 years ago

The difference between what you call "wrong" (2.) and "right" (3.) amounts to

FCClearScalarProducts[];
ScalarProduct[p1, p1] = 0;
ScalarProduct[p2, p2] = 0;
ScalarProduct[p1, p2] = p1p2;
$LimitTo4 = False;
wt = FeynAmpDenominator[PropagatorDenominator[Momentum[k, D]], 
   PropagatorDenominator[Momentum[k, D] + Momentum[p1, D]], 
   PropagatorDenominator[
    Momentum[k, D] + Momentum[p1, D] + Momentum[p2, D]]] Pair[
   LorentzIndex[mu, D], Momentum[k, D]] Pair[LorentzIndex[nu, D], 
   Momentum[k, D]]
res1 = wt // TID[#, k] & // ToPaVe[#, k] & // PaVeReduce // 
   ChangeDimension[#, D] &;

FCClearScalarProducts[];
ScalarProduct[p1, p1] = 0;
ScalarProduct[p2, p2] = 0;
ScalarProduct[p1, p2] = p1p2;
$LimitTo4 = True;
wt = FeynAmpDenominator[PropagatorDenominator[Momentum[k, D]], 
   PropagatorDenominator[Momentum[k, D] + Momentum[p1, D]], 
   PropagatorDenominator[
    Momentum[k, D] + Momentum[p1, D] + Momentum[p2, D]]] Pair[
   LorentzIndex[mu, D], Momentum[k, D]] Pair[LorentzIndex[nu, D], 
   Momentum[k, D]]
res2 = wt // OneLoopSimplify[#, k] & // OneLoop[k, #] & // 
   PaVeReduce // ChangeDimension[#, D] &

diff = res1 - res2 // Simplify // FCE

the following

-((I \[Pi]^2 (-FVD[p1, nu] FVD[p2, mu] - FVD[p1, mu] FVD[p2, nu] + 
    p1p2 MTD[mu, nu]) (-2 + D + (-4 + D) PaVe[0, {2 p1p2}, {0, 0}]))/(
 4 (-2 + D) p1p2))

which is zero, as you can easily check using FeynHelpers

$LoadAddOns = {"FeynHelpers"};
<< FeynCalc`

PaXEvaluate[-((
  I \[Pi]^2 (-FVD[p1, nu] FVD[p2, mu] - FVD[p1, mu] FVD[p2, nu] + 
     p1p2 MTD[mu, nu]) (-2 + 
     D + (-4 + D) PaVe[0, {2 p1p2}, {0, 0}]))/(4 (-2 + D) p1p2)), k, 
 PaXImplicitPrefactor -> 1/(2 Pi)^D]

In 4. the line

wrong = wrong /. D -> 4 // ChangeDimension[#, D] &

obviously makes no sense, it is simply incorrect. Without that line 4. agrees with 2. and hence also with 3. The difference between 1. and 2. is the same as between 2. and 3., i.e. it is zero. So I don't really see any issues here.

Tpengfu commented 5 years ago

Dear Vladyslav :

Really Thanks for your replay, that helps a lot. it does solve my problem.

Now ,I understand why I get the wrong answer. B0 is a infinite number. (4-D)B0 is not zero =(4-D) (1/(4-D) + const.) =1

Thanks for your great work on FeynCalc.

vsht commented 5 years ago

不用谢,you are welcome.