Skip to content

Commit

Permalink
Improved FCLoopApplyTopologyMappings to deliver final amplitudes
Browse files Browse the repository at this point in the history
writtten in terms of GLIs (provided that tensor decomposition or
projectors have already been applied).
  • Loading branch information
vsht committed Jun 23, 2022
1 parent 20553a3 commit be98252
Show file tree
Hide file tree
Showing 3 changed files with 242 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,17 @@


(* ::Text:: *)
(*`FCLoopApplyTopologyMappings[expr, mappings]` applies mappings between topologies obtained using `FCLoopFindTopologyMappings` to the output of `FCLoopFindTopologies` denoted as `expr`.*)
(*`FCLoopApplyTopologyMappings[expr, {mappings, topos}]` applies mappings between topologies obtained using `FCLoopFindTopologyMappings` to the output of `FCLoopFindTopologies` denoted as `expr`. The argument `topos` denotes the final set of topologies present in the expression.*)


(* ::Text:: *)
(*Instead of `{mappings, topos}` one can directly use the output `FCLoopFindTopologyMappings`.*)


(* ::Text:: *)
(*By default the function will attempt to rewrite all the occurring loop integrals as `GLI`s. If you just want to apply the mappings without touching the remaining scalar products, *)
(*set the option `FCLoopCreateRulesToGLI` to `False`. Even when all scalar products depending on loop momenta are rewritten as `GLI`s, you can still suppress the step of multiplying out products*)
(*of `GLI`s by setting the option `GLIMultiply` to `False`.*)


(* ::Subsection:: *)
Expand Down Expand Up @@ -75,21 +85,18 @@
(*`FCLoopApplyTopologyMappings` applies the given mappings to the expression creating an output that is ready to be processed further*)


res=FCLoopApplyTopologyMappings[ex,mappings,Head->gliProduct]
FCLoopApplyTopologyMappings[ex,{mappings,finalTopos},Head->gliProduct,FCVerbose->0]


(* ::Text:: *)
(*Using `FCLoopCreateRulesToGLI` we obtain rules for rewriting scalar products as inverse `GLI`s*)


spToGliRules=FCLoopCreateRulesToGLI[finalTopos]
(*This just applies the mappings without any further simplifications*)


aux=res/.gliProduct[x_,y:GLI[idd_,inds_List]]/;(!FreeQ[spToGliRules,idd]):>gliProduct2[ExpandScalarProduct[x]/.SelectNotFree[spToGliRules,idd][[1]],y]/.gliProduct2[x_,y_]/;FreeQ[x,Pair]:> x y
FCLoopApplyTopologyMappings[ex,{mappings,finalTopos},Head->gliProduct,FCLoopCreateRulesToGLI->False]


(* ::Text:: *)
(*And here is our final expression written only in terms `GLI`s*)
(*This applies the mappings and eliminates the numerators but still keeps products of `GLI`s in the expression*)


resFinal=Collect2[aux/.gliProduct2->Times,GLI]/.GLI->GLIMultiply/.GLIMultiply->GLI
FCLoopApplyTopologyMappings[ex,{mappings,finalTopos},Head->gliProduct,FCLoopCreateRulesToGLI->True,GLIMultiply->False]
97 changes: 88 additions & 9 deletions FeynCalc/LoopIntegrals/FCLoopApplyTopologyMappings.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,60 +24,139 @@
"Error! FCLoopApplyTopologyMappings has encountered a fatal problem and must abort the computation. \
The problem reads: `1`"

FCLoopApplyTopologyMappings::lmoms =
"Warning! FCLoopApplyTopologyMappings failed to eliminate all loop momenta in the expression."

Begin["`Package`"]
End[]

Begin["`FCLoopApplyTopologyMappings`Private`"]

fclamVerbose::usage = "";
optHead::usage = "";
rule::usage = "";

Options[FCLoopApplyTopologyMappings] = {
Collecting -> True,
ExpandScalarProduct -> True,
FCE -> False,
FCI -> False,
FCLoopCreateRulesToGLI -> True,
FCVerbose -> False,
GLIMultiply -> True,
Head -> FCGV["GLIProduct"],
PreferredTopologies -> {},
Factoring -> {Factor2, 5000},
TimeConstrained -> 3
};

FCLoopApplyTopologyMappings[expr_, mappings_List, OptionsPattern[]] :=
Block[{ex, res, time, uniqueProductsList, tmp, repRule},
FCLoopApplyTopologyMappings[expr_, {mappings_List, toposRaw_List}, OptionsPattern[]] :=
Block[{ ex, res, time, uniqueProductsList, tmp, repRule, optFCLoopCreateRulesToGLI,
topos, optHead, rulesToGLI, topoIDs, rulesToGLIFinal, sps, spsEval, ruleSP,
lmoms, repRuleExtra, aux},

If[ OptionValue[FCVerbose] === False,
fclamVerbose = $VeryVerbose,
If[MatchQ[OptionValue[FCVerbose], _Integer],
fclamVerbose = OptionValue[FCVerbose]];
];

optHead = OptionValue[Head];
optHead = OptionValue[Head];
optFCLoopCreateRulesToGLI = OptionValue[FCLoopCreateRulesToGLI];


If[ !OptionValue[FCI],
(* For large expressions FCI might require a considerable amount of time! *)
time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Applying FCI.", FCDoControl->fclamVerbose];
ex = FCI[expr];
{ex, topos} = FCI[{expr,toposRaw}];
FCPrint[1, "FCLoopApplyTopologyMappings: Done applying FCI, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose],
ex = expr
{ex, topos} = {expr,toposRaw}
];

If[ TrueQ[!FreeQ[tmp,optHead]],
tmp = ex;
uniqueProductsList = Cases2[tmp,optHead],

time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Applying Collect2.", FCDoControl->fclamVerbose];
tmp = Collect2[ex,GLI,Factoring->OptionValue[Factoring],TimeConstrained->OptionValue[TimeConstrained]];
uniqueProductsList = Cases2[tmp,optHead]
uniqueProductsList = Cases2[tmp,optHead];
FCPrint[1, "FCLoopApplyTopologyMappings: Collect2 done, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose]
];

FCPrint[3,"FCLoopApplyTopologyMappings: Unique products of GLIs and scalar products: ", uniqueProductsList , FCDoControl->fclamVerbose];

(*TODO More checks ...*)
time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Creating initial replacement rules for the products.", FCDoControl->fclamVerbose];
repRule = Map[applyMapping[(SelectNotFree[uniqueProductsList, #[[1]][[1]]]), #] &, mappings];


aux = Complement[uniqueProductsList,First[First[#]]&/@repRule];

(*This is for topologies that remain unchanged*)
repRuleExtra = Thread[Rule[aux,aux]];

repRule = Flatten[repRule] /. rule->Rule;
FCPrint[1, "FCLoopApplyTopologyMappings: Done creating rules, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose];
FCPrint[2,"FCLoopApplyTopologyMappings: Generated ", Length[repRule], "initial replacement rules", FCDoControl->fclamVerbose];
FCPrint[3,"FCLoopApplyTopologyMappings: Replacement rules: ",repRule, FCDoControl->fclamVerbose];

If[ TrueQ[optFCLoopCreateRulesToGLI=!=False],
time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Rewriting numerators with loop momenta as GLIs.", FCDoControl->fclamVerbose];

repRule = Join[repRule,repRuleExtra];
rulesToGLI = FCLoopCreateRulesToGLI[topos,FCI->True];
topoIDs= First[Last[Last[#]]]&/@repRule;


If[ Union[First/@topos]=!=Union[topoIDs],
Message[FCLoopApplyTopologyMappings::failmsg,"Missing topologies present in the input expression"];
Abort[]
];

res = tmp /. Dispatch[repRule] (*/. optHead -> Times*);
rulesToGLIFinal= Map[First[SelectNotFree[rulesToGLI,#]]&,topoIDs];

If[ OptionValue[ExpandScalarProduct],
sps = Cases2[Last/@repRule, Pair,CartesianPair];
spsEval = ExpandScalarProduct[sps,FCI->True];
ruleSP = Thread[Rule[sps,spsEval]],
ruleSP = {}
];

repRule = MapThread[Rule[First[#1],Last[#1]/. Dispatch[ruleSP] /. #2 ]&, {repRule,rulesToGLIFinal}];

FCPrint[1, "FCLoopApplyTopologyMappings: Done rewriting numerators, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose];
FCPrint[3, "FCLoopApplyTopologyMappings: Replacement rule: ", repRule, FCDoControl->fclamVerbose];

If[ OptionValue[GLIMultiply],
time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Rewriting remaining products of GLIs.", FCDoControl->fclamVerbose];
repRule = Map[Rule[First[#],Expand2[Last[#]/. optHead->Times,GLI]/.GLI->GLIMultiply/.GLIMultiply->GLI]&,repRule];
FCPrint[1, "FCLoopApplyTopologyMappings: Done rewriting products of GLIs, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose]
];

];


FCPrint[3, "FCLoopApplyTopologyMappings: Final replacement rule: ", repRule, FCDoControl->fclamVerbose];
time=AbsoluteTime[];
FCPrint[1,"FCLoopApplyTopologyMappings: Applying the final replacement rule.", FCDoControl->fclamVerbose];
res = tmp /. Dispatch[repRule] ;
FCPrint[1, "FCLoopApplyTopologyMappings: Done applying the final replacement rule, timing: ", N[AbsoluteTime[] - time, 4], FCDoControl->fclamVerbose];

If[ OptionValue[GLIMultiply] && optFCLoopCreateRulesToGLI,

lmoms = Union[Flatten[#[[3]]&/@topos]];
If[ !FreeQ2[res,lmoms],
Message[FCLoopApplyTopologyMappings::lmoms]
]
];

If[ OptionValue[Collecting],
res = Collect2[res,GLI,Factoring->OptionValue[Factoring],TimeConstrained->OptionValue[TimeConstrained]];
];

If[ OptiopnValue[FCE],
res = FCE[res]
Expand All @@ -88,7 +167,7 @@
];

applyMapping[terms_List, mappingRules_List] :=
Map[rule[#, # /. mappingRules[[2]] /. mappingRules[[3]] (*/. optHead -> Times*)] &, terms]
Map[rule[#, # /. mappingRules[[2]] /. mappingRules[[3]]] &, terms]

FCPrint[1,"FCLoopApplyTopologyMappings.m loaded."];
End[]
154 changes: 138 additions & 16 deletions Tests/LoopIntegrals/FCLoopApplyTopologyMappings.test
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ fctopology2,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc4*SPD[p1,p2],GLI[\
fctopology4,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc1*SPD[p1,Q],GLI[\
fctopology1,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc3*SPD[p2,p2],GLI[\
fctopology3,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc5*SPD[p2,Q],GLI[\
fctopology5,{1,1,1,1,1,1,1,1,1}]],{{FCTopology[fctopology3,{SFAD[{{p3,\
0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+\
p3,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],\
fctopology5,{1,1,1,1,1,1,1,1,1}]],{{{FCTopology[fctopology3,{SFAD[{{\
p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{\
p2+p3,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],\
SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2+\
p3-Q,0},{0,1},1}]}],{p1->-p1-p3+Q,p2->-p2-p3+Q,p3->p3},GLI[\
fctopology3,{n1_,n7_,n8_,n5_,n6_,n4_,n2_,n3_,n9_}]:>GLI[fctopology1,{\
Expand All @@ -40,18 +40,140 @@ n9}]},{FCTopology[fctopology5,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,\
,{0,1},1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{\
{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]}],{p1->p2,p2->p1,\
p3->p3},GLI[fctopology5,{n1_,n3_,n2_,n4_,n6_,n5_,n7_,n8_,n9_}]:>GLI[\
fctopology2,{n1,n2,n3,n4,n5,n6,n7,n8,n9}]}},Head->gliProduct]",
"gliProduct[cc6*Pair[Momentum[p1, D], Momentum[p1, D]],
GLI[fctopology1, {1, 1, 2, 1, 1, 1, 1, 1, 1}]] +
gliProduct[cc2*Pair[Momentum[p1, D], Momentum[p2, D]],
GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] +
gliProduct[cc1*Pair[Momentum[p1, D], Momentum[Q, D]],
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] +
gliProduct[cc5*Pair[Momentum[p1, D], Momentum[Q, D]],
GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] +
gliProduct[cc4*Pair[Momentum[-p1 + Q, D], Momentum[-p2 + Q, D]],
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] +
gliProduct[
cc3*Pair[Momentum[-p2 - p3 + Q, D], Momentum[-p2 - p3 + Q, D]],
fctopology2,{n1,n2,n3,n4,n5,n6,n7,n8,n9}]}},{
FCTopology[fctopology1,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}],
FCTopology[fctopology2,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p2-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}]}},\
Head->gliProduct]",
"(cc4*GLI[fctopology1, {0, 1, 1, 1, 1, 1, 1, 1, 1}])/2 + ((cc1 - \
cc4)*GLI[fctopology1, {1, 1, 0, 1, 1, 1, 1, 1, 1}])/2 - \
(cc4*GLI[fctopology1, {1, 1, 1, 0, 1, 1, 1, 1, 1}])/2 - ((cc1 - \
cc4)*GLI[fctopology1, {1, 1, 1, 1, 1, 0, 1, 1, 1}])/2 + \
cc3*GLI[fctopology1, {1, 1, 1, 1, 1, 1, 0, 1, 1}] - \
(cc4*GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 0, 1}])/2 + \
(cc4*GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 0}])/2 + \
(cc5*GLI[fctopology2, {1, 1, 0, 1, 1, 1, 1, 1, 1}])/2 - \
(cc2*GLI[fctopology2, {1, 1, 1, 1, 0, 1, 1, 1, 1}])/2 - ((cc2 + \
cc5)*GLI[fctopology2, {1, 1, 1, 1, 1, 0, 1, 1, 1}])/2 + \
(cc2*GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 0, 1}])/2 + ((cc2 + \
cc5)*GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]*Pair[Momentum[Q, \
D], Momentum[Q, D]])/2 + (GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, \
1}]*(2*cc6 + cc1*Pair[Momentum[Q, D], Momentum[Q, D]] + \
cc4*Pair[Momentum[Q, D], Momentum[Q, D]]))/2"},
{"fcstFCLoopApplyTopologyMappings-ID2",
"FCLoopApplyTopologyMappings[gliProduct[cc6*SPD[p1,p1],GLI[\
fctopology1,{1,1,2,1,1,1,1,1,1}]]+gliProduct[cc2*SPD[p1,p2],GLI[\
fctopology2,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc4*SPD[p1,p2],GLI[\
fctopology4,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc1*SPD[p1,Q],GLI[\
fctopology1,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc3*SPD[p2,p2],GLI[\
fctopology3,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc5*SPD[p2,Q],GLI[\
fctopology5,{1,1,1,1,1,1,1,1,1}]],{{{FCTopology[fctopology3,{SFAD[{{\
p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{\
p2+p3,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],\
SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2+\
p3-Q,0},{0,1},1}]}],{p1->-p1-p3+Q,p2->-p2-p3+Q,p3->p3},GLI[\
fctopology3,{n1_,n7_,n8_,n5_,n6_,n4_,n2_,n3_,n9_}]:>GLI[fctopology1,{\
n1,n2,n3,n4,n5,n6,n7,n8,n9}]},{FCTopology[fctopology4,{SFAD[{{p3,0},{\
0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0}\
,{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{\
p1-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,\
1},1}]}],{p1->-p2+Q,p2->-p1+Q,p3->-p3},GLI[fctopology4,{n1_,n6_,n5_,\
n8_,n7_,n3_,n2_,n4_,n9_}]:>GLI[fctopology1,{n1,n2,n3,n4,n5,n6,n7,n8,\
n9}]},{FCTopology[fctopology5,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,\
1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0}\
,{0,1},1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{\
{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]}],{p1->p2,p2->p1,\
p3->p3},GLI[fctopology5,{n1_,n3_,n2_,n4_,n6_,n5_,n7_,n8_,n9_}]:>GLI[\
fctopology2,{n1,n2,n3,n4,n5,n6,n7,n8,n9}]}},{
FCTopology[fctopology1,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}],
FCTopology[fctopology2,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p2-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}]}},\
Head->gliProduct,FCLoopCreateRulesToGLI->False]",
"gliProduct[cc6*Pair[Momentum[p1, D], Momentum[p1, D]], \
GLI[fctopology1, {1, 1, 2, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc2*Pair[Momentum[p1, D], Momentum[p2, D]], \
GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc1*Pair[Momentum[p1, D], Momentum[Q, D]], \
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc5*Pair[Momentum[p1, D], Momentum[Q, D]], \
GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc4*Pair[Momentum[-p1 + Q, D], Momentum[-p2 + Q, D]], \
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc3*Pair[Momentum[-p2 - p3 + Q, D], Momentum[-p2 - p3 + Q, \
D]], GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]]"},
{"fcstFCLoopApplyTopologyMappings-ID3",
"FCLoopApplyTopologyMappings[gliProduct[cc6*SPD[p1,p1],GLI[\
fctopology1,{1,1,2,1,1,1,1,1,1}]]+gliProduct[cc2*SPD[p1,p2],GLI[\
fctopology2,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc4*SPD[p1,p2],GLI[\
fctopology4,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc1*SPD[p1,Q],GLI[\
fctopology1,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc3*SPD[p2,p2],GLI[\
fctopology3,{1,1,1,1,1,1,1,1,1}]]+gliProduct[cc5*SPD[p2,Q],GLI[\
fctopology5,{1,1,1,1,1,1,1,1,1}]],{{{FCTopology[fctopology3,{SFAD[{{\
p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{\
p2+p3,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],\
SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2+\
p3-Q,0},{0,1},1}]}],{p1->-p1-p3+Q,p2->-p2-p3+Q,p3->p3},GLI[\
fctopology3,{n1_,n7_,n8_,n5_,n6_,n4_,n2_,n3_,n9_}]:>GLI[fctopology1,{\
n1,n2,n3,n4,n5,n6,n7,n8,n9}]},{FCTopology[fctopology4,{SFAD[{{p3,0},{\
0,1},1}],SFAD[{{p2,0},{0,1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0}\
,{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},1}],SFAD[{{\
p1-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,\
1},1}]}],{p1->-p2+Q,p2->-p1+Q,p3->-p3},GLI[fctopology4,{n1_,n6_,n5_,\
n8_,n7_,n3_,n2_,n4_,n9_}]:>GLI[fctopology1,{n1,n2,n3,n4,n5,n6,n7,n8,\
n9}]},{FCTopology[fctopology5,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,\
1},1}],SFAD[{{p1,0},{0,1},1}],SFAD[{{p1+p3,0},{0,1},1}],SFAD[{{p2-Q,0}\
,{0,1},1}],SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0},{0,1},1}],SFAD[{\
{p1+p2-Q,0},{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]}],{p1->p2,p2->p1,\
p3->p3},GLI[fctopology5,{n1_,n3_,n2_,n4_,n6_,n5_,n7_,n8_,n9_}]:>GLI[\
fctopology2,{n1,n2,n3,n4,n5,n6,n7,n8,n9}]}},{
FCTopology[fctopology1,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p3-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}],
FCTopology[fctopology2,{SFAD[{{p3,0},{0,1},1}],SFAD[{{p2,0},{0,1},1}],\
SFAD[{{p1,0},{0,1},1}],SFAD[{{p2+p3,0},{0,1},1}],SFAD[{{p2-Q,0},{0,1},\
1}],
SFAD[{{p1-Q,0},{0,1},1}],SFAD[{{p2+p3-Q,0},{0,1},1}],SFAD[{{p1+p2-Q,0}\
,{0,1},1}],SFAD[{{p1+p2+p3-Q,0},{0,1},1}]},{p1,p2,p3},{Q},{},{}]}},\
Head->gliProduct,GLIMultiply->False]",
"gliProduct[cc6*GLI[fctopology1, {0, 0, -1, 0, 0, 0, 0, 0, 0}], \
GLI[fctopology1, {1, 1, 2, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc3*GLI[fctopology1, {0, 0, 0, 0, 0, 0, -1, 0, 0}], \
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[(cc1*(GLI[fctopology1, {0, 0, -1, 0, 0, 0, 0, 0, 0}] - \
GLI[fctopology1, {0, 0, 0, 0, 0, -1, 0, 0, 0}] + Pair[Momentum[Q, D], \
Momentum[Q, D]]))/2, GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[(cc5*(GLI[fctopology2, {0, 0, -1, 0, 0, 0, 0, 0, 0}] - \
GLI[fctopology2, {0, 0, 0, 0, 0, -1, 0, 0, 0}] + Pair[Momentum[Q, D], \
Momentum[Q, D]]))/2, GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[(cc2*(-GLI[fctopology2, {0, 0, 0, 0, -1, 0, 0, 0, 0}] - \
GLI[fctopology2, {0, 0, 0, 0, 0, -1, 0, 0, 0}] + GLI[fctopology2, {0, \
0, 0, 0, 0, 0, 0, -1, 0}] + Pair[Momentum[Q, D], Momentum[Q, D]]))/2, \
GLI[fctopology2, {1, 1, 1, 1, 1, 1, 1, 1, 1}]] + \
gliProduct[cc4*((-GLI[fctopology1, {0, -1, 0, 0, 0, 0, 0, 0, 0}] + \
GLI[fctopology1, {0, 0, 0, 0, -1, 0, 0, 0, 0}] - Pair[Momentum[Q, D], \
Momentum[Q, D]])/2 + (-GLI[fctopology1, {0, 0, -1, 0, 0, 0, 0, 0, 0}] \
+ GLI[fctopology1, {0, 0, 0, 0, 0, -1, 0, 0, 0}] - Pair[Momentum[Q, \
D], Momentum[Q, D]])/2 + Pair[Momentum[Q, D], Momentum[Q, D]] + \
(GLI[fctopology1, {-1, 0, 0, 0, 0, 0, 0, 0, 0}] + GLI[fctopology1, \
{0, -1, 0, 0, 0, 0, 0, 0, 0}] - GLI[fctopology1, {0, 0, 0, -1, 0, 0, \
0, 0, 0}] - GLI[fctopology1, {0, 0, 0, 0, -1, 0, 0, 0, 0}] - \
GLI[fctopology1, {0, 0, 0, 0, 0, 0, 0, -1, 0}] + GLI[fctopology1, {0, \
0, 0, 0, 0, 0, 0, 0, -1}] + Pair[Momentum[Q, D], Momentum[Q, D]])/2), \
GLI[fctopology1, {1, 1, 1, 1, 1, 1, 1, 1, 1}]]"}
});

0 comments on commit be98252

Please sign in to comment.