Initial release of BGap
[BGap.git] / auxiliary / deriveBGcurrent-public.frm
blob7309741475ad86aba63bf61bf5c7efedd050bc24
1 * Derive the BG double current from the string disk amplitude
2 * using the algorithm of equation (3.31) from 1609.XXXX 
4         Format 250;
5         Off statistics;
6         On highfirst;
8         #include- pss2-polylogs.h
9         #include- pss2-deriveBG-public.h
11 #procedure VVVTotL(Npts)
13 * Converts the superspace expression V_P V_Q to [Phi_P, Phi_Q] \equiv tL(P,tL(Q))
14 * according to equation (3.29) of 1609.XXXX
16 * Here tL(P) is the left-to-right Dynkin bracket of P, ell(P),
17 * eg tL(1,2,3) = [[1,2],3]
19         id V(1,?m)*V({'Npts'-1},?n) = tL(1,?m,tL({'Npts'-1},?n));
20         argument tL;
21         id tL(i?) = i;
22         endargument;
24 * anticommute if right branch is bigger (or equal, as it turns out) than the left
25 * this is used in the generation of BGphi{3,4}-ordered.h as it leads to fewer terms
26 *        id tL(j1?,tL(i1?,?m)) = - tmpF(i1,?m)*Dynkin(j1);
27 *        id tL(j1?,j2?,tL(i1?,i2?,?m)) = - tmpF(i1,i2,?m)*Dynkin(j1,j2);
28 *        id tL(j1?,j2?,j3?,tL(i1?,i2?,i3?,?m)) = - tmpF(i1,i2,i3,?m)*Dynkin(j1,j2,j3);
29 *        id tL(j1?,j2?,j3?,j4?,tL(i1?,i2?,i3?,i4?,?m)) = - tmpF(i1,i2,i3,i4,?m)*Dynkin(j1,j2,j3,j4);
31         id tL(?m,tL(?n)) = tmpF(?m)*Dynkin(?n);
32         #call DynkinBracket()
33         id tmpF(?m)*Word(?n) = tL(?m,?n);
35         transform tL replace(1,last)=(1,m1,2,m2,3,m3,4,m4,5,m5,6,m6,7,m7,8,m8,9,m9,10,m10);
37 #endprocedure
39 #procedure OrderZetaValues()
41 * This is just a trick to order the output according to
42 * the weight of the MZVs using the function tmpF().
43 * This is needed in order to (manually) add
44 * a few conditionals in the files BGphiN.h to load terms
45 * according to the weight requested by #call BGexpand(w)
47 * Note that the zwgt symbol is a trick to avoid generating
48 * zetas of weight higher than requested by BGexpand(w).
49 * This is done with the definition
50 *       Symbol zwgt(:'w')
51 * inside BGexpand(). This definition indicates to FORM that
52 * it must discard any appearance of zwgt^p where p>w (good for
53 * performance)
55         id zeta2 = zeta2*zwgt^2;
56         id zeta3 = zeta3*zwgt^3;
57         id zeta5 = zeta5*zwgt^5;
58         id zeta7 = zeta7*zwgt^7;
59         .sort
60         id zwgt^x1? = tmpF(x1)*zwgt^x1;
61         repeat id R(?m)*tmpF(?n) = tmpF(?n)*R(?m);
62         repeat id L(?m)*tmpF(?n) = tmpF(?n)*L(?m);
64 #endprocedure
66 #procedure AmplitudeToBG(Npts)
68 * This function implements the whole conversion from the string
69 * tree amplitude in its (n-2)! form to the Z-theory equation of motion
70 * according to the rules of the \int^\eom map in section 4 of 1609.XXXX
72 * Notation: tL(i,j,k) = T_{Ai,Aj,Ak}^{B1,B2,B3} etc
73 *                     = L(i)*L(j)*L(k)*R(1)*R(2)*R(3)
75 * Note that all numeric indices indices are prefixed by 'm' in the
76 * end to become eg m1,m2,m3 etc. These will become the multiparticle
77 * labels ?m1,?m2,?m3 etc in the various BGphiN.h files (we are
78 * using FORM's notation for multiparticle labels: ?m), including the
79 * labels in the Mandelstam variables, eg
81 * s(1,2) --> KK(?m1,[c],?m2)
83 * Note that KK(m1,[c],m2) = KK(m2,[c],m1), take this into account when
84 * comparing the output of this procedure with some of the files in BGphiN/
86 * There is minimal editing to convert the output of this
87 * procedure into the files BGphiN.h (eg s/tmpF([1-9])\*// and s/\([mn]\)/?\1/g) etc)
89         .sort
90         L amp'Npts' = sign_({'Npts'-3})*TreeLevel(1,...,'Npts');
92         #call StringTreeAmplitude('Npts')
93         #call ZintToZZ()
94         #call FromZZToSimpsetBasis('Npts')
95         .sort
96         #call VVVTotL('Npts')
98         abracket tL;
99         .sort
100         keep brackets;
101         #include- allNptJregs/all'Npts'ptJregs.h
102         transform s replace(1,last)=(1,m1,2,m2,3,m3,4,m4,5,m5,6,m6,7,m7,8,m8,9,m9,10,m10);
103         symmetrize s;
104         .sort
106         id s(i?,j?) = KK(i,[c],j);
107         id tL(i1?,...,i{'Npts'-1}?) = <L(i1)>*...*<L(i{'Npts'-1})>*<R(n1)>*...*<R(n{'Npts'-1})>;
108         #call OrderZetaValues()
110         .sort
111         L Nterms = termsin_(amp'Npts');
112         bracket zeta2,zeta3,zeta5,zeta7,L,R,tL,zwgt,tmpF;
113         print +s -f amp'Npts',Nterms;
115 #endprocedure
118 * The numeric value means the number of points in the string
119 * amplitude. Note that the BGphiN.h file is generated from the
120 * call with Npts=N+1 below. The currently supported values
121 * are Npts=4,...,10 which originate the files BGphi{3,...,9}-ordered.h
123 * For example, the output here gives rise to the file BGphi4-ordered.h
124         #call AmplitudeToBG(8)
126         .end