Efficient way to get tree-level field theory amplitudes​
​by Song He, Linghui Hou, Jintian Tian and Yong Zhang

Introduction

We developed a rather efficient code to generate tree-level field theory amplitudes in theories including Yang-Mills, gravity, non-linear sigma model, special Galileon, Yang-Mills-scalar, Einstein-Yang-Mills, and Dirac-Born-Infeld based on a world-sheet formula. Using our code on a laptop, it takes a second for computing the 8-point amplitude in special Galileon, and one minute for 8-point amplitudes in gravity and Born-Infeld (including those from dimension reduction)! Some examples are put in the demo.nb file. More examples and explanations can be found by using question mark (?).

Code

Please make sure to download the attached package file Amp.m and put it in the same directory with this notebook for evaluation.
SetDirectory@NotebookDirectory[];​​<<"Amp.m"
Generate some amplitudes
AmpNLSM@Range@4;​​​​AmpYM@Range@4;​​%/.reducecdot;​​​​AmpsGal[4];​​AmpsGal[4,SymmetricTrue];​​%%-%/.permpermutation//Simplify;​​​​n=4;​​AmpGR@n;​​AmpGR[n,SymmetricTrue];​​%%-%/.permpermutation/.reducecdot/.
k
i_
·
k
j_

s
i,j
/.
s
i__
Sum[
s
Sequence@@j
,{j,Subsets[{i},{2}]}]/.
s
i_,n
-Sum[
s
i,j
,{j,Complement[Range@(n-1),{i}]}]/.
s
n-2,n-1
-Sum[
s
Sequence@@j
,{j,Subsets[Range[n-1],{2}][[;;-2]]}]/.
ϵ
i_
·
k
n
-Sum[
ϵ
i
·
k
j
,{j,Complement[Range@(n-1),{i}]}],
tϵ
i_
·
k
n
-Sum[
tϵ
i
·
k
j
,{j,Complement[Range@(n-1),{i}]}],
ϵ
n
·
k
n-1
-Sum[
ϵ
n
·
k
j
,{j,n-2}],
tϵ
n
·
k
n-1
-Sum[
tϵ
n
·
k
j
,{j,n-2}];​​(*numericcheck*)​​%/.
s
i_,j_
Prime[100i+j]/.
ϵ
i_
·
k
j_
Prime[200i+10j],
ϵ
i_
·
ϵ
j_
Prime[300i+20j],
tϵ
i_
·
k
j_
Prime[300i+10j],
tϵ
i_
·
tϵ
j_
Prime[400i+10j];​​​​AmpEYM[{1},{2},{3,4}]//Simplify/@#&;​​​​AmpYMs[{1},{2,3},{5,4,6},{1,3,2,4,5,6}]//Simplify/@#&;
Generate cubic tree or labeled tree numerators
nCubicYM[
s
1,2
];​​nCubicYM[
s
2,3
,{1,3,2,4}];​​nCubicYMs[s[2,3]s[2,3,4]s[2,3,4,5],{2,3},{4,5},{1,6},{1,2,3,4,5,6}];​​nCayleyYM[{2,1},{3,1},{4,3}]​​nCayleyNLSM[{2,1},{3,1},{4,3}];​​nCayleyYMs[{{4,1},{5,4},{3,5},{2,3}},{2,3},{4,5},{1,6}];
Out[]=
cdot[
ϵ
5
,
f
4
,
f
3
,
ϵ
1
]
k
1
·
ϵ
2
+cdot[
ϵ
5
,
f
3
,
ϵ
1
]
k
1
·
ϵ
2
k
3
·
ϵ
4
+cdot[
ϵ
5
,
f
2
,
ϵ
1
]
k
1
·
ϵ
3
k
3
·
ϵ
4
+
k
1
·
ϵ
2
k
1
·
ϵ
3
k
3
·
ϵ
4
ϵ
1
·
ϵ
5
More examples can be found by using question mark (?). For example
?F​​?nCubicYM​​?nCubicsGal​​?AmpYMs
Out[]=
Symbol
Generates a labelled tree set F(g)​e.g. F[​SubscriptBox[\(s\), \(1, 2\)]​SubscriptBox[\(s\), \(3, 4\)]​​]​, F[​SubscriptBox[\(s\), \(1, 2\)]​SubscriptBox[\(s\), \(3, 4\)]​ SubscriptBox[\(s\), \(5, 6\)]​​, Graph-> True]​, F[s[2,3]s[1,2,3]s[1,2,3,4]​]​, F[​SubscriptBox[\(s\), \(1, 2\)]​SubscriptBox[\(s\), \(3, 4\)]​​, Root->2 ]​option: Graph-> True, Root->1see also: AllLabelledTrees, nCayleyNLSM, nCayleyYM
Out[]=
Symbol
nCubicYM[poles_] produces a cubic tree numerator of Pf'
Ψ
n
.nCubicYM[poles_,ordering_] produces a color-ordered YM cubic tree numerator.e.g. nCubicYM[​SubscriptBox[\(s\), \(1, 2\)]​​]​, nCubicYM[​SubscriptBox[\(s\), \(1, 2\)]​​,​{1,2,3,4}​]​,nCubicYM[​SubscriptBox[\(s\), \(2, 3\)]​​,​{1,3,2,4}​]/.reducecdot, nCubicYM[s[1,2]s[3,4]s[1,2,3,4]​,​{1,2,4,3,6,5}​]​see also: PlanarCubicTrees, AmpYM, nCayleyYM
Out[]=
Symbol
Produces a sGal cubic tree numeratore.g. nCubicsGal[​SubscriptBox[\(s\), \(1, 2\)]​​]​, nCubicsGal[​SubscriptBox[\(s\), \(1, 2\)]​SubscriptBox[\(s\), \(1, 2, 3\)]​SubscriptBox[\(s\), \(1, 2, 3, 4\)]​​]​, nCubicsGal[s[1,2]s[3,4]s[5,6]​]​see also: AllCubicTrees, AmpsGal, nCubicNLSM
Out[]=
Symbol
AmpYMs[particles__,ordering_] produces a color-ordered YMs amplitude e.g. AmpYMs[{2, 3}, {4, 5}, {1, 6}, {1, 2, 3, 4, 5, 6}], AmpYMs[{1, 2, 5}, {3, 4, 6}, {1, 2, 3, 4, 5, 6}], AmpYMs[{1}, {2, 3}, {5, 4, 6}, {1, 2, 4, 5, 3, 6}]where the last entry denotes the overall ordering. {1} denotes a gluon and the others scalar traces.see also: nCubicYMs, nCayleyYMs, PlanarCubicTrees

More Examples

NLSM and sGal

Using nCayley*** to generate nCubic***
nCayleyNLSM@@#Times@@(Signature/@#)&/@F[s[1,2]s[3,4]s[1,2,3,4]]//Total//Simplify;​​nCubicNLSM[s[1,2]s[3,4]s[1,2,3,4],Range@6]//Simplify;​​nCubicNLSM[s[1,2]s[3,4]s[1,2,3,4]]//Simplify;
Using nCubic*** to generate the full amplitudes
n=4;​​AllCubicTrees@n;​​nCubicsGal@#/#&/@%//Total;​​AmpsGal@n;​​%%-%//#/.
s
i__
Sum[
s
Sequence@@j
,{j,Subsets[{i},{2}]}]/.
s
i_,n
-Sum[
s
i,j
,{j,Complement[Range@(n-1),{i}]}]/.
s
n-2,n-1
-Sum[
s
Sequence@@j
,{j,Subsets[Range[n-1],{2}][[;;-2]]}]&//Simplify​​​​n=4;​​ordering=RandomSample[Range@n,n];​​PlanarCubicTrees@ordering;​​nCubicNLSM[#]/#/.〈g_,i_〉sgn[i,RotateLeft[ordering,Position[ordering,Max@ordering][[1,1]]][[;;-2]]]&/@%//Total;​​nCubicNLSM[#,ordering]/#&/@%%//Total;​​AmpNLSM@ordering;​​{%%%-%,%%-%}//#/.
s
i__
Sum[
s
Sequence@@j
,{j,Subsets[{i},{2}]}]/.
s
i_,n
-Sum[
s
i,j
,{j,Complement[Range@(n-1),{i}]}]/.
s
n-2,n-1
-Sum[
s
Sequence@@j
,{j,Subsets[Range[n-1],{2}][[;;-2]]}]&//Simplify
Using nCayley*** to generate the full amplitudes
n=6;​​Echo[ordering=RandomSample[Range@n,n],"ordering"];​​orderingg=RotateLeft[ordering,Position[ordering,Max@ordering][[1,1]]][[;;-2]];​​AllLabelledTrees@n;​​nCayleyNLSM@@#cay@@#&/@%//Total;​​%^2//Expand//#/.{cay@i__^2CaytoCubic[{i},{i}],cay@i__cay@j__CaytoCubic[{i},{j}]}&;​​​​AmpsGal@n-%/.s@i__
s
i
/.
s
i__
Sum[
s
Sequence@@j
,{j,Subsets[{i},{2}]}]/.
s
i_,n
-Sum[
s
i,j
,{j,Complement[Range@(n-1),{i}]}]/.
s
n-2,n-1
-Sum[
s
Sequence@@j
,{j,Subsets[Range[n-1],{2}][[;;-2]]}]/.
s
i_,j_
Prime[100i+j]​​​​​​%%%cay@@Table[{orderingg[[i]],orderingg[[i+1]]},{i,Length@orderingg-1}]//Expand//#/.{cay@i__^2CaytoCubic[{i},{i}],cay@i__cay@j__CaytoCubic[{i},{j}]}&;​​​​AmpNLSM@ordering-%/.s@i__
s
i
/.
s
i__
Sum[
s
Sequence@@j
,{j,Subsets[{i},{2}]}]/.
s
i_,n
-Sum[
s
i,j
,{j,Complement[Range@(n-1),{i}]}]/.
s
n-2,n-1
-Sum[
s
Sequence@@j
,{j,Subsets[Range[n-1],{2}][[;;-2]]}]/.
s
i_,j_
Prime[100i+j]
Out[]=
0
Out[]=
{0,0}

YM, GR, BI

Using nCayleyYM to generate nCubicYM
Using nCubic*** or nCayley*** to generate the full amplitudes

YMs, EYM, DBI

Using nCayleyYMS to generate nCubicYMS
Using nCubic*** or nCayley*** to generate the full amplitudes