From 2f7d906d018dc61aa447026f03692a5611607617 Mon Sep 17 00:00:00 2001 From: Vladyslav Shtabovenko Date: Sat, 5 Oct 2024 00:10:53 +0200 Subject: [PATCH] Fixed another bug in the Larin scheme related to the ordering of Eps-tensor contractions (Issue #283) --- FeynCalc/Dirac/DiracTrace.m | 64 +++++++++++++++---------- FeynCalc/Dirac/DiracTrick.m | 47 ++++++++++++------ Tests/Dirac/DiracTrace.test | 96 ++++++++++++++++++++++++++++++++++++- 3 files changed, 166 insertions(+), 41 deletions(-) diff --git a/FeynCalc/Dirac/DiracTrace.m b/FeynCalc/Dirac/DiracTrace.m index 12392e15..b33df098 100755 --- a/FeynCalc/Dirac/DiracTrace.m +++ b/FeynCalc/Dirac/DiracTrace.m @@ -33,6 +33,12 @@ by hand or employ ChangeDimension[exp,D] to convert the whole expression to D-dimensions. If you explicitly \ intend to use the t'Hooft-Veltman scheme, please activate it via FCSetDiracGammaScheme[\"BMHV\"]." +DiracTrace::larinmultiple = "Detected string of Dirac matrices containing more than two g^5 matrices in the \ +Larin scheme. Since the pairing of the resulting Eps-tensors depends on their physical origin, FeynCalc will \ +disable all such contractions in this calculation by wrapping their heads with Hold. The correct order of \ +contractions cannot be determined automatically and must be specified by the user. The Hold head can be removed \ +using FRH." + (* ------------------------------------------------------------------------ *) Begin["`Package`"] @@ -49,6 +55,7 @@ leviCivitaSign::usage=""; optSort::usage=""; larinMVV::usage=""; +holdEpsQ::usage=""; Options[DiracTrace] = { Contract -> True, @@ -221,7 +228,8 @@ Block[{ diractrres, tmp = expr, diractrfact, diractrcoll, dtmp,dWrap,wrapRule,prepSpur,time,time2,contract,spurHeadList, spurHeadListChiral,spurHeadListNonChiral,gammaFree,gammaPart, - traceListChiral,traceListNonChiral,repRule,null1,null2,dummyIndexFreeQ, epsEvaluate}, + traceListChiral,traceListNonChiral,repRule,null1,null2,dummyIndexFreeQ, + epsEvaluate, numGamma5}, wrapRule = {dWrap[5]->0, dWrap[6]->1/2, dWrap[7]->1/2, dWrap[LorentzIndex[_,_:4],___]->0, dWrap[_. Momentum[_,_:4]+_:0,___]->0}; @@ -257,6 +265,19 @@ time=AbsoluteTime[]; FCPrint[1,"DiracTrace: diracTraceEvaluate: Applying DiracTrick.", FCDoControl->diTrVerbose]; + If[ TrueQ[(FeynCalc`Package`DiracGammaScheme === "Larin") && !FreeQ2[tmp,{DiracGamma[5],DiracGamma[6],DiracGamma[7]}]], + numGamma5 = Count[tmp, DiracGamma[5] | DiracGamma[6] | DiracGamma[7], Infinity]; + If[ !MatchQ[numGamma5,_Integer?NonNegative], + Message[DiracTrace::failmsg,"Failed to determine the number of g^5 in the trace."]; + Abort[] + ]; + If[ numGamma5>2, + Message[DiracTrace::larinmultiple]; + holdEpsQ=True + ], + holdEpsQ=False + ]; + (* If there are no nested DOTs, then FCDiracIsolate is not needed, otherwise one should use it *) tmp = DiracTrick[tmp, FCI -> True, InsideDiracTrace->True, FCDiracIsolate->FeynCalc`Package`containsNestedDOTsQ[tmp]]; @@ -703,35 +724,26 @@ we define it is a function (traceNo5fun) so that the result can be retrieved ver ]/; EvenQ[Length[{x,y}]]; -(*Implements Eq.10 from 1506.04517 *) -spur5LarinMVVold[x__DiracGamma, y:DiracGamma[_[_,dim_],dim_], DiracGamma[5]]:= - Block[{inds, epsInds, gInds, indPartitions, res, signs}, - inds = First/@{x}; - epsInds = Subsets[inds, {3}]; +(*Implements Eq.11 from 1506.04517 *) +spur5LarinMVV[x__DiracGamma, y : DiracGamma[_[_, dim_], dim_], DiracGamma[5]] := + Block[{ inds, epsInds, gInds, indPartitions, res, signs, eps}, + + If[TrueQ[holdEpsQ], + eps=Hold[Eps], + eps=Eps + ]; + + inds = First /@ {x, y}; + epsInds = Subsets[inds, {4}]; gInds = SelectFree[inds, #] & /@ epsInds; indPartitions = MapThread[Join[#1, #2] &, {gInds, epsInds}]; - signs = Signature /@ (indPartitions /. Thread[Rule[inds, Range[Length[inds]]]]); - indPartitions = Join[#, {First[y]}] & /@ indPartitions; + signs = Signature /@ (indPartitions /. Thread[Rule[inds, Range[Length[inds]]]]); - res = Total[MapThread[$LeviCivitaSign*I*#2*((traceNo5Wrap @@ #1[[;; -5]])) * - Apply[Eps, #1[[-4 ;;]]] &, {indPartitions, signs}]]; + res = + Total[MapThread[$LeviCivitaSign* + I*#2*((traceNo5Wrap @@ #1[[;; -5]]))* + Apply[eps, #1[[-4 ;;]]] &, {indPartitions, signs}]]; fastExpand[res] - ]/; EvenQ[Length[{x,y}]] && Length[{x,y}]>=4; - -(*Implements Eq.11 from 1506.04517 *) -spur5LarinMVV[x__DiracGamma, y : DiracGamma[_[_, dim_], dim_], DiracGamma[5]] := -Block[{inds, epsInds, gInds, indPartitions, res, signs}, - inds = First /@ {x, y}; - epsInds = Subsets[inds, {4}]; - gInds = SelectFree[inds, #] & /@ epsInds; - indPartitions = MapThread[Join[#1, #2] &, {gInds, epsInds}]; - signs = Signature /@ (indPartitions /. Thread[Rule[inds, Range[Length[inds]]]]); - - res = - Total[MapThread[$LeviCivitaSign* - I*#2*((traceNo5Wrap @@ #1[[;; -5]]))* - Apply[Eps, #1[[-4 ;;]]] &, {indPartitions, signs}]]; - fastExpand[res] ] /; EvenQ[Length[{x, y}]] && Length[{x, y}] >= 4; spur5BMHVWest[x__DiracGamma, DiracGamma[5]]:= diff --git a/FeynCalc/Dirac/DiracTrick.m b/FeynCalc/Dirac/DiracTrick.m index 91532d9f..09dcb115 100755 --- a/FeynCalc/Dirac/DiracTrick.m +++ b/FeynCalc/Dirac/DiracTrick.m @@ -143,7 +143,6 @@ create replacement rules (standard) and substitute the results back. optFCDiracIsolate = OptionValue[FCDiracIsolate]; insideDiracTrace = OptionValue[InsideDiracTrace]; - FCPrint[1, "DiracTrick. Entering.", FCDoControl->diTrVerbose]; FCPrint[3, "DiracTrick: Entering with ", expr, FCDoControl->diTrVerbose]; @@ -626,7 +625,7 @@ create replacement rules (standard) and substitute the results back. MatchQ[dim,{_Symbol}] && (FeynCalc`Package`DiracGammaScheme === "BMHV"), FCPrint[2, "DiracTrick: diracTrickEval: Purely D-dim and BMHV.", FCDoControl->diTrVerbose]; Null, - (* Purely D-dimensional and Larin use the substitution rule to eliminate g^5 that are not on the left of the trace *) + (* Purely D-dimensional and Larin -> use the substitution rule to eliminate g^5 that are not on the left of the trace *) MatchQ[dim,{_Symbol}] && (FeynCalc`Package`DiracGammaScheme === "Larin"), FCPrint[2, "DiracTrick: diracTrickEval: Purely D-dim and Larin.", FCDoControl->diTrVerbose]; res = res /. holdDOT -> chiralTrickLarin /. chiralTrickLarin -> holdDOT, @@ -1548,26 +1547,46 @@ create replacement rules (standard) and substitute the results back. (* ------------------------------------------------------------------------ *) chiralTrickLarin[b___,((dg:DiracGamma[_[_,_], dim_]) + mass_:0),DiracGamma[5],d__] := -Block[{li1,li2,li3}, - {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; - I/6 $LeviCivitaSign Eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim], - DiracGamma[li2,dim],DiracGamma[li3,dim],d] + mass chiralTrickLarin[b,DiracGamma[5],d] + Block[{li1,li2,li3,eps}, + + If[ TrueQ[Count[{b,d}, DiracGamma[5] | DiracGamma[6] | DiracGamma[7], Infinity]>1], + Message[DiracTrace::larinmultiple]; + eps = Hold[Eps], + eps = Eps + ]; + + {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; + (I/6 $LeviCivitaSign eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim], + DiracGamma[li2,dim],DiracGamma[li3,dim],d] + mass chiralTrickLarin[b,DiracGamma[5],d]) ]/; !FreeQ2[{d},{DiracGamma[5],DiracGamma[6],DiracGamma[7]}] && NonCommFreeQ[mass]; chiralTrickLarin[b___,((dg:DiracGamma[_[_,_], dim_]) + mass_:0),DiracGamma[6],d__] := -Block[{li1,li2,li3}, - {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; - mass chiralTrickLarin[b,DiracGamma[6],d] + - 1/2 chiralTrickLarin[b,dg,d] + - I/12 $LeviCivitaSign Eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim],DiracGamma[li2,dim],DiracGamma[li3,dim],d] + Block[{li1,li2,li3,eps}, + + If[ TrueQ[Count[{b,d}, DiracGamma[5] | DiracGamma[6] | DiracGamma[7], Infinity]>1], + Message[DiracTrace::larinmultiple]; + eps = Hold[Eps], + eps = Eps + ]; + + {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; + (mass chiralTrickLarin[b,DiracGamma[6],d] + 1/2 chiralTrickLarin[b,dg,d] + + I/12 $LeviCivitaSign eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim],DiracGamma[li2,dim],DiracGamma[li3,dim],d]) ]/; !FreeQ2[{d},{DiracGamma[5],DiracGamma[6],DiracGamma[7]}] && NonCommFreeQ[mass]; chiralTrickLarin[b___,((dg:DiracGamma[_[_,_], dim_]) + mass_:0),DiracGamma[7],d__] := -Block[{li1,li2,li3}, - {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; +Block[{li1,li2,li3,eps}, + + If[ TrueQ[Count[{b,d}, DiracGamma[5] | DiracGamma[6] | DiracGamma[7], Infinity]>1], + Message[DiracTrace::larinmultiple]; + eps = Hold[Eps], + eps = Eps + ]; + + {li1,li2,li3} = LorentzIndex[#,dim]& /@ Unique[{"dtlarLia","dtlarLib","dtlarLic"}]; mass chiralTrickLarin[b,DiracGamma[7],d] + 1/2 chiralTrickLarin[b,dg,d] - - I/12 $LeviCivitaSign Eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim],DiracGamma[li2,dim],DiracGamma[li3,dim],d] + I/12 $LeviCivitaSign eps[dg[[1]], li1, li2, li3] chiralTrickLarin[b,DiracGamma[li1,dim],DiracGamma[li2,dim],DiracGamma[li3,dim],d] ]/; !FreeQ2[{d},{DiracGamma[5],DiracGamma[6],DiracGamma[7]}] && NonCommFreeQ[mass]; (* ------------------------------------------------------------------------ *) diff --git a/Tests/Dirac/DiracTrace.test b/Tests/Dirac/DiracTrace.test index 378fada9..9f97a608 100644 --- a/Tests/Dirac/DiracTrace.test +++ b/Tests/Dirac/DiracTrace.test @@ -463,5 +463,99 @@ DiracTraceEvaluate -> True, FCE -> True] /. p1 -> p2] GSD[p2] . DiracSigma[GAD[bb], GAD[Lor1]] . GA[5] . GSD[p2] . GA[5] . DiracSigma[GAD[bb], GAD[Lor1]], DiracTraceEvaluate -> True, FCE -> True]] -", "2/3 (-5 + D) (-4 + D) (-3 + D) (-2 + D) (-1 + D) SPD[p2, p2]"} +", "2/3 (-5 + D) (-4 + D) (-3 + D) (-2 + D) (-1 + D) SPD[p2, p2]"}, +{"fcstDiracTrace-ID69", "Factor[DiracTrace[ +GSD[p2] . DiracSigma[GAD[bb], GAD[Lor1]] . GA[5] . GSD[p2] . +GA[5] . DiracSigma[GAD[bb], GAD[Lor1]], DiracTraceEvaluate -> True, +FCE -> True]]", +"2/3 (-5 + D) (-4 + D) (-3 + D) (-2 + D) (-1 + D) SPD[p2, p2]"}, +{"fcstDiracTrace-ID70", "FCSetDiracGammaScheme[\"Larin\"];\n +Quiet[DiracTrace[ +GSD[p1] . GA[5] . GAD[bb] . GA[5] . GSD[p2] . GA[5] . GAD[Lor1], +DiracTraceEvaluate -> True]] // +FCCanonicalizeDummyIndices[#, +LorentzIndexNames -> {i1, i2, i3, i4, i5}, FCE -> True] &", +"((-4*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i4, D]] - +((2*I)/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i3, D], LorentzIndex[i4, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i3, D], LorentzIndex[i4, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], LorentzIndex[i2, D]] - +((4*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], LorentzIndex[i3, D]] + +(I/3)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], LorentzIndex[i4, D]] + +(I/3)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], LorentzIndex[i5, D]] - +(I/3)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D]] + +(I/3)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i4, D], Momentum[p2, D]] + +(I/3)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D]] - +(I/3)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], Momentum[p2, D], LorentzIndex[i4, D]] + +((4*I)/9)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i2, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D]] + +((4*I)/9)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D]] - +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i4, D]] - +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], Momentum[p2, D]] + +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], Momentum[p2, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i4, D]] - +(I/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i5, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[Lor1, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], Momentum[p2, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i4, D]] + +((2*I)/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i5, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[Lor1, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], Momentum[p2, D]] + +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i3, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], LorentzIndex[i2, D]] - +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], LorentzIndex[i3, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], LorentzIndex[i3, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], Momentum[p2, D]] - +((2*I)/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i2, D]] + +(I/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i3, D]] + +(I/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i5, D], LorentzIndex[i5, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D], LorentzIndex[i2, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D], LorentzIndex[i3, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D], Momentum[p2, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], Momentum[p2, D], LorentzIndex[i2, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], Momentum[p2, D], LorentzIndex[i3, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], Momentum[p2, D], LorentzIndex[i4, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], Momentum[p2, D], LorentzIndex[Lor1, D]] - +(I/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i5, D], LorentzIndex[i4, D], LorentzIndex[i5, D]] + +(I/9)*FVD[p2, Lor1]*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i5, D], LorentzIndex[i5, D], LorentzIndex[i4, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i4, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i2, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i3, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], Momentum[p2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i4, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D], Momentum[p2, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], Momentum[p2, D], LorentzIndex[i4, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i1, D], LorentzIndex[i4, D]] - +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i2, D], LorentzIndex[i4, D]] - +(I/3)*LCD[bb, i1, i2, Lor1]*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i3, D], LorentzIndex[i4, D]] + +((2*I)/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i4, D], LorentzIndex[i2, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i4, D], LorentzIndex[i3, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i4, D], LorentzIndex[i4, D]] + +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D]] - +(I/9)*LCD[bb, i1, i2, i3]*Hold[Eps][LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D], LorentzIndex[i3, D]]*Hold[Eps][Momentum[p1, D], Momentum[p2, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D]] + +((2*I)/3)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i1, D], LorentzIndex[i3, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] - +((4*I)/9)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] + +((2*I)/9)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i2, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] + +((2*I)/9)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D]]*LCD[bb, i1, i2][p2] - +((4*I)/9)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i2, D]]*LCD[bb, i1, i2][p2] + +(I/3)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] + +(I/3)*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[Lor1, D]]*LCD[bb, i1, i2][p2] - +(I/3)*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i3, D], LorentzIndex[Lor1, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] - +(I/3)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i3, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] + +(I/3)*Hold[Eps][LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i4, D], LorentzIndex[i4, D], LorentzIndex[i3, D]]*LCD[bb, i1, i2][p2] + +(I/3)*Hold[Eps][LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D], LorentzIndex[i2, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[Lor1, D], LorentzIndex[i3, D], LorentzIndex[i4, D]]*LCD[bb, i1, i2][p2] + +((2*I)/3)*Hold[Eps][LorentzIndex[i2, D], LorentzIndex[i3, D], LorentzIndex[i4, D], LorentzIndex[i1, D]]*Hold[Eps][Momentum[p1, D], LorentzIndex[i2, D], LorentzIndex[i3, D], LorentzIndex[i4, D]]*LCD[bb, i1, Lor1][p2]"} + + + + + + + + });