169 void DrawPDF(
const lst & amps,
string fn,
int nr,
bool single_page) {
172 for(
auto item : amps) amp_vec.push_back(item);
173 string tex_path = to_string(getpid()) +
"_TeX/";
174 if(!
dir_exists(tex_path)) rc = system((
"mkdir -p "+tex_path).c_str());
176 GiNaC_Parallel(amp_vec.size(), [&_vec,single_page,tex_path](
int idx)->ex {
177 auto amp = amp_vec[idx];
178 ofstream out(tex_path+to_string(idx)+
".tex");
179 out <<
"\\documentclass[tikz]{standalone}" << endl;
180 out <<
"\\usepackage{tikz-feynman}" << endl;
181 out <<
"\\tikzfeynmanset{compat=1.1.0}" << endl;
182 out <<
"\\begin{document}" << endl;
183 out <<
"\\feynmandiagram{" << endl;
184 auto lines = TopoLines(amp);
187 std::map<ex,int,ex_is_less> vtex_map;
188 for(auto l : lines) {
189 lst ll = lst{l.op(0), l.op(1)};
190 bool isExt = (is_a<numeric>(ll.op(0)) && ll.op(0)<0) || (is_a<numeric>(ll.op(1)) && ll.op(1)<0);
192 bend_map[ll] = bend_map[ll] + 1;
194 auto fidL = (is_a<numeric>(l.op(1)) ? l.op(1) : l.op(1).op(0));
195 out <<
"\"" << fidL <<
"\"";
198 if(InOutTeX[fidL].length()>0) out << InOutTeX[fidL];
201 } else if(vtex_map[l.op(1).op(1)]==0) {
202 out << VerTeX[l.op(1).op(1)];
203 vtex_map[l.op(1).op(1)]=1;
207 auto f = l.op(2).op(0);
208 if(LineTeX[f].length()>0) {
209 if(!isExt) out << LineTeX[f];
211 auto cpos = LineTeX[f].find(
", edge");
212 if(cpos>0) out << LineTeX[f].substr(0,cpos);
213 else out << LineTeX[f];
216 if(bend_map[ll]>2) out <<
",half right";
217 else if(bend_map[ll]>1) out <<
",half left";
218 if(is_zero(l.op(0)-l.op(1))) out <<
",loop,distance=2cm";
221 auto fidR = (is_a<numeric>(l.op(0)) ? l.op(0) : l.op(0).op(0));
222 out <<
" \"" << fidR <<
"\"";
225 if(InOutTeX[fidR].length()>0) out << InOutTeX[fidR];
228 } else if(vtex_map[l.op(0).op(1)]==0) {
229 out << VerTeX[l.op(0).op(1)];
230 vtex_map[l.op(0).op(1)]=1;
235 out <<
"\\end{document}" << endl;
237 auto rc = system((
"cd "+tex_path+
" && echo X | lualatex " + to_string(idx) +
" 1>/dev/null").c_str());
241 ofstream out(tex_path+
"diagram.tex");
243 out <<
"\\let\\mypdfximage\\pdfximage" << endl;
244 out <<
"\\def\\pdfximage{\\immediate\\mypdfximage}" << endl;
245 out <<
"\\documentclass{standalone}" << endl;
247 out <<
"\\documentclass{article}" << endl;
249 out <<
"\\usepackage{graphicx}" << endl;
250 out <<
"\\usepackage{adjustbox}" << endl;
251 out <<
"\\usepackage{longtable}" << endl;
252 out <<
"\\usepackage{scalefnt}" << endl;
253 out <<
"\\begin{document}" << endl;
256 out <<
"\\begin{adjustbox}{valign=T,width=\\textwidth}" << endl;
257 out <<
"\\begin{tabular}{|";
for(
int i=0; i<nr; i++) out <<
"cc|"; out <<
"}" << endl;
259 out <<
"\\setlength\\LTleft{-2.5cm} \\setlength\\LTright{0pt}" << endl;
260 out <<
"\\begin{longtable}{|";
for(
int i=0; i<nr; i++) out <<
"cc|"; out <<
"}" << endl;
262 out <<
"\\hline" << endl;
263 int total = amps.nops();
265 if((total%nr)!=0) total = (total/nr+1)*nr;
266 for(
int i=0; i<total; i++) {
275 out <<
"{\\tiny " << i+1 <<
"}&" << endl;
277 out <<
"\\includegraphics[keepaspectratio,";
278 out <<
"height=" << 1.0/nr <<
"\\textwidth,";
279 out <<
"width=" << 1.0/nr <<
"\\textwidth]";
280 out <<
"{"<<i<<
".pdf}" << endl;
282 if((i+1)%nr==0) out <<
"\\\\ \\hline";
286 out <<
"\\end{tabular}" << endl;
287 out <<
"\\end{adjustbox}" << endl;
289 out <<
"\\end{longtable}" << endl;
291 out <<
"\\end{document}" << endl;
293 if(
Debug) rc = system((
"ulimit -n unlimited > /dev/null; cd "+tex_path+
" && pdflatex diagram && mv diagram.pdf ../"+fn).c_str());
294 else rc = system((
"ulimit -n unlimited > /dev/null; cd "+tex_path+
" && echo X | pdflatex diagram 1>/dev/null && mv diagram.pdf ../"+fn).c_str());
297 cout <<
"DrawPDF failed, files not removed, please check the TeX files!" << endl;
298 cout <<
"latex command: pdflatex diagram.tex" << endl;
299 cout <<
"if there are many pdf files, one needs ulimint -n <large number>." << endl;
302 rc = system((
"rm -r "+tex_path).c_str());
315 if(prop.nops()<1)
throw Error(
"ShrinkCut: no cut provided!");
318 for(
int i=0; i<tls.nops(); i++) {
319 auto pi = tls.op(i).op(2);
320 if(pi.nops()<2)
continue;
321 if(!is_a<lst>(prop.op(0))) {
322 if(is_zero(pi.op(0)-prop.op(0)) && is_zero(pi.op(1)-prop.op(1))) cls_vec.push_back(i);
324 for(
auto iprop : prop) {
325 if(is_zero(pi.op(0)-iprop.op(0)) && is_zero(pi.op(1)-iprop.op(1))) cls_vec.push_back(i);
329 if(cls_vec.size()<n)
return ret;
331 Combinations(cls_vec.size(), n, [n,&ret,cls_vec,tls](
const int * is)->void {
333 for(int i=0; i<n; i++) cls[i] = cls_vec[is[i]];
338 auto ol = tls2.op(ci);
339 tls2.let_op(ci) = lst{ol.op(0), 0, lst{ol.op(2).op(0)}, ol.op(3)};
340 tls2.append(lst{0, ol.op(1), lst{ol.op(2).op(1)}, ol.op(3)} );
345 int ntls2 = tls2.nops();
348 for(
int i=last; i<ntls2; i++) {
349 auto li = tls2.op(i);
350 if(is_zero(li) || li.op(2).nops()<2)
continue;
353 tls2.let_op(last) = 0;
356 if(is_zero(lp))
break;
358 for(
int i=0; i<ntls2; i++) {
359 if(is_zero(tls2.op(i)))
continue;
360 if(is_zero(tls2.op(i).op(0)-lp.op(0))) tls2.let_op(i).let_op(0) = lp.op(1);
361 if(is_zero(tls2.op(i).op(1)-lp.op(0))) tls2.let_op(i).let_op(1) = lp.op(1);
366 map<int, lst> con_map;
367 for(
auto li : tls2) {
368 if(is_zero(li))
continue;
371 if(is_a<lst>(fiL)) fiL = fiL.op(0);
373 if(is_a<lst>(fiR)) fiR = fiR.op(0);
375 con_map[ex_to<numeric>(fiL).to_int()].append(fiR);
376 }
else if(fiR>0 && fiL<0) {
377 con_map[ex_to<numeric>(fiR).to_int()].append(fiL);
379 if(fiL>0 && is_zero(fiR)) key = fiL;
380 else if(fiR>0 && is_zero(fiL)) key = fiR;
381 else throw Error(
"ShrinkCut: unexpcected point reached.");
382 val = li.op(2).op(0);
383 con_map[ex_to<numeric>(key).to_int()].append(val);
388 for(
auto kv : con_map) item.append(kv.second.sort());
786 ex Models::FeynRulesSM(
const ex & amp,
const ex & xi) {
787 if(is_a<lst>(amp))
return FeynRulesSM(ex_to<lst>(amp), xi);
792 static ex CW2 = CW*CW;
793 static ex SW2 = SW*SW;
794 static ex C2W = CW2-SW2;
797 static Symbol Ubar(
"Ubar");
799 static Symbol Dbar(
"Dbar");
801 static Symbol Cbar(
"Cbar");
803 static Symbol Sbar(
"Sbar");
805 static Symbol Tbar(
"Tbar");
807 static Symbol Bbar(
"Bbar");
811 static Symbol ghbar(
"ghbar");
819 static Symbol ghAbar(
"ghAbar");
820 static Symbol ghWm(
"ghWm");
821 static Symbol ghWmbar(
"ghWmbar");
822 static Symbol ghWp(
"ghWp");
823 static Symbol ghWpbar(
"ghWpbar");
825 static Symbol ghZbar(
"ghZbar");
830 static Symbol nebar(
"nebar");
834 static Symbol nmubar(
"nmubar");
835 static Symbol taum(
"taum");
836 static Symbol taup(
"taup");
837 static Symbol ntau(
"ntau");
838 static Symbol ntaubar(
"ntaubar");
841 static Symbol phim(
"phim");
842 static Symbol phip(
"phip");
845 static auto M = [](
const string & si)->ex {
848 static ex MW = M(
"W");
849 static ex MZ = M(
"Z");
850 static ex MH = M(
"H");
854 static ex eta_s = -1;
857 static ex eta_prime = -1;
859 static ex eta_theta = 1;
861 static ex eta_e = -1;
864 static ex GEW = eta_e*eta*eta_theta * EL/SW;
865 static ex EL2 = EL*EL;
866 static ex MW2 = MW*MW;
867 static ex MZ2 = MZ*MZ;
868 static ex MH2 = MH*MH;
869 static ex GEW2 = GEW*GEW;
870 static ex sqrt2 = sqrt(ex(2));
873 T3[
"U"] = T3[
"C"] = T3[
"T"] = ex(1)/2;
874 T3[
"D"] = T3[
"S"] = T3[
"B"] = -ex(1)/2;
875 T3[
"ne"] = T3[
"nmu"] = T3[
"ntau"] = ex(1)/2;
876 T3[
"em"] = T3[
"mum"] = T3[
"taum"] = -ex(1)/2;
877 T3[
"ep"] = T3[
"mup"] = T3[
"taup"] = -ex(1)/2;
880 Q[
"U"] = Q[
"C"] = Q[
"T"] = ex(2)/3;
881 Q[
"D"] = Q[
"S"] = Q[
"B"] = -ex(1)/3;
882 Q[
"ne"] = Q[
"nmu"] = Q[
"ntau"] = 0;
883 Q[
"em"] = Q[
"mum"] = Q[
"taum"] = -1;
884 Q[
"ep"] = Q[
"mup"] = Q[
"taup"] = -1;
886 auto is_qbar_q = [&](
const ex pi1,
const ex pi2)->
bool {
887 return (pi1==Ubar && pi2==U) || (pi1==Dbar && pi2==D) || (pi1==Cbar && pi2==C) || (pi1==Sbar && pi2==S) || (pi1==Tbar && pi2==T) || (pi1==Bbar && pi2==B);
889 auto is_lbar_l = [&](
const ex pi1,
const ex pi2)->
bool {
890 return (pi1==
ep && pi2==em) || (pi1==mup && pi2==mum) || (pi1==taup && pi2==taum);
892 auto is_lbar_n = [&](
const ex pi1,
const ex pi2)->
bool {
893 return (pi1==
ep && pi2==ne) || (pi1==mup && pi2==nmu) || (pi1==taup && pi2==ntau);
895 auto is_nbar_n = [&](
const ex pi1,
const ex pi2)->
bool {
896 return (pi1==nebar && pi2==ne) || (pi1==nmubar && pi2==nmu) || (pi1==ntaubar && pi2==ntau);
898 auto is_nbar_l = [&](
const ex pi1,
const ex pi2)->
bool {
899 return (pi1==nebar && pi2==em) || (pi1==nmubar && pi2==mum) || (pi1==ntaubar && pi2==taum);
901 auto is_uqbar = [&](
const ex pi)->
bool {
902 return (pi==Ubar) || (pi==Cbar) || (pi==Tbar);
904 auto is_uq = [&](
const ex pi)->
bool {
905 return (pi==U) || (pi==C) || (pi==T);
907 auto is_dqbar = [&](
const ex pi)->
bool {
908 return (pi==Dbar) || (pi==Sbar) || (pi==Bbar);
910 auto is_dq = [&](
const ex pi)->
bool {
911 return (pi==D) || (pi==S) || (pi==B);
913 auto is_uqbar_dq = [&](
const ex pi1,
const ex pi2)->
bool {
914 return is_uqbar(pi1) && is_dq(pi2);
916 auto is_dqbar_uq = [&](
const ex pi1,
const ex pi2)->
bool {
917 return is_dqbar(pi1) && is_uq(pi2);
919 auto CKM = [&](
const string & si1,
const string & si2)->ex {
920 return Symbol(
"V"+si1+si2);
923 auto gfV = [&](
const string & si)->ex {
924 return T3[si]/2-Q[si]*SW2;
926 auto gfA = [&](
const string & si)->ex {
933 auto pi = e.op(0).op(0);
935 if(pi==U || pi==D || pi==C || pi==S || pi==T || pi==B) {
951 }
else if(pi==ghWm || pi==ghWp) {
953 }
else if(pi==em || pi==mum || pi==taum) {
955 }
else if(pi==ne || pi==nmu || pi==ntau) {
961 }
else if(pi==phim) {
964 cout << endl << e << endl;
965 throw Error(
"Propagator Not defined!");
968 auto pi1 = e.op(0).op(0);
969 auto pi2 = e.op(1).op(0);
970 auto pi3 = e.op(2).op(0);
971 auto fi1 = e.op(0).op(1);
972 auto fi2 = e.op(1).op(1);
973 auto fi3 = e.op(2).op(1);
974 auto mom1 = e.op(0).op(2);
975 auto mom2 = e.op(1).op(2);
976 auto mom3 = e.op(2).op(2);
986 if(pi1==ghbar && pi2==gh && pi3==g) {
989 }
else if(pi1==g && pi2==g && pi3==g) {
992 }
else if((pi3==g) && is_qbar_q(pi1, pi2)) {
995 }
else if((pi3==A) && is_qbar_q(pi1, pi2)) {
998 }
else if((pi3==A) && is_lbar_l(pi1, pi2)) {
1001 }
else if((pi3==Z) && is_qbar_q(pi1, pi2)) {
1003 return -I*eta*eta_Z*GEW/CW*(gfV(si)*GMat(
GAS(
LI(fi3)),
DI(fi1),
DI(fi2))-gfA(si)*GMat(
GAS(
LI(fi3))*
GAS(5),
DI(fi1),
DI(fi2)))*
SP(
TI(fi1),
TI(fi2));
1004 }
else if((pi3==Z) && (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2))) {
1006 return -I*eta*eta_Z*GEW/CW*(gfV(si)*GMat(
GAS(
LI(fi3)),
DI(fi1),
DI(fi2))-gfA(si)*GMat(
GAS(
LI(fi3))*
GAS(5),
DI(fi1),
DI(fi2)));
1007 }
else if(pi1==Wp && pi2==Wm && pi3==A) {
1009 return -I*eta_e*EL*(
SP(
LI(fi1),
LI(fi2))*
SP(mom2-mom1,
LI(fi3))+
SP(
LI(fi2),
LI(fi3))*
SP(mom3-mom2,
LI(fi1))+
SP(
LI(fi3),
LI(fi1))*
SP(mom1-mom3,
LI(fi2)));
1010 }
else if(pi1==Wp && pi2==Wm && pi3==Z) {
1012 return -I*eta*eta_Z*GEW*CW*(
SP(
LI(fi1),
LI(fi2))*
SP(mom2-mom1,
LI(fi3))+
SP(
LI(fi2),
LI(fi3))*
SP(mom3-mom2,
LI(fi1))+
SP(
LI(fi3),
LI(fi1))*
SP(mom1-mom3,
LI(fi2)));
1013 }
else if(is_uqbar(pi1) && is_dq(pi2) && pi3==Wp) {
1015 auto ckm = CKM(si1, si2);
1017 }
else if(is_dqbar(pi1) && is_uq(pi2) && pi3==Wm) {
1019 auto ckm = CKM(si1, si2);
1021 }
else if( (is_nbar_l(pi1, pi2) && pi3==Wp) || (is_lbar_n(pi1, pi2) && pi3==Wm) ) {
1023 return -I*eta*GEW/sqrt2*GMat(
GAS(
LI(fi3))-
GAS(
LI(fi3))*
GAS(5),
DI(fi1),
DI(fi2))/2;
1024 }
else if(is_qbar_q(pi1, pi2) && (pi3==H)) {
1026 return -I*GEW/2*M(si)/MW*GMat(
GAS(1),
DI(fi1),
DI(fi2))*
SP(
TI(fi1),
TI(fi2));
1027 }
else if( (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2)) && (pi3==H)) {
1029 return -I*GEW/2*M(si)/MW*GMat(
GAS(1),
DI(fi1),
DI(fi2));
1030 }
else if(is_qbar_q(pi1, pi2) && (pi3==chi)) {
1032 return -GEW*T3[si]*M(si)/MW*GMat(
GAS(5),
DI(fi1),
DI(fi2))*
SP(
TI(fi1),
TI(fi2));
1033 }
else if( (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2)) && (pi3==chi)) {
1035 return -GEW*T3[si]*M(si)/MW*GMat(
GAS(5),
DI(fi1),
DI(fi2));
1036 }
else if(is_uqbar_dq(pi1, pi2) && pi3==phip) {
1038 auto ckm = CKM(si1,si2);
1039 return I*GEW/sqrt2*(M(si1)/MW*GMat(
GAS(1)-
GAS(5),
DI(fi1),
DI(fi2))/2-M(si2)/MW*GMat(
GAS(1)+
GAS(5),
DI(fi1),
DI(fi2))/2)*ckm*
SP(
TI(fi1),
TI(fi2));
1040 }
else if(is_dqbar_uq(pi1, pi2) && pi3==phim) {
1042 auto ckm = CKM(si1,si2);
1043 return I*GEW/sqrt2*(M(si2)/MW*GMat(
GAS(1)+
GAS(5),
DI(fi1),
DI(fi2))/2-M(si1)/MW*GMat(
GAS(1)-
GAS(5),
DI(fi1),
DI(fi2))/2)*ckm*
SP(
TI(fi1),
TI(fi2));
1044 }
else if(is_nbar_l(pi1, pi2) && pi3==phip) {
1046 return -I*GEW/sqrt2*M(si2)/MW*GMat(
GAS(1)+
GAS(5),
DI(fi1),
DI(fi2))/2;
1047 }
else if(is_lbar_n(pi1, pi2) && pi3==phim) {
1049 return -I*GEW/sqrt2*M(si1)/MW*GMat(
GAS(1)-
GAS(5),
DI(fi1),
DI(fi2))/2;
1050 }
else if(pi1==A && pi2==phip && pi3==phim) {
1052 return -I*eta_e*EL*
SP(mom2-mom3,
LI(fi1));
1053 }
else if(pi1==Z && pi2==phip && pi3==phim) {
1055 return -I*eta*eta_Z*GEW*C2W/(2*CW)*
SP(mom2-mom3,
LI(fi1));
1056 }
else if(pi1==Wp && pi2==phim && pi3==H) {
1058 return I/2*eta*GEW*
SP(mom2-mom3,
LI(fi1));
1059 }
else if(pi1==Wm && pi2==phip && pi3==H) {
1061 return -I/2*eta*GEW*
SP(mom2-mom3,
LI(fi1));
1062 }
else if( ((pi1==Wp && pi2==phim) || (pi1==Wm && pi2==phip)) && pi3==chi) {
1064 return -eta*GEW/2*
SP(mom2-mom3,
LI(fi1));
1065 }
else if(pi1==Z && pi2==chi && pi3==H) {
1067 return -eta*eta_Z*GEW/(2*CW)*
SP(mom2-mom3,
LI(fi1));
1068 }
else if( ((pi1==phim && pi2==Wp) || (pi1==phip && pi2==Wm)) && pi3==A) {
1070 return I*eta_e*eta*EL*MW*
SP(
LI(fi2),
LI(fi3));
1071 }
else if( ((pi1==phim && pi2==Wp) || (pi1==phip && pi2==Wm)) && pi3==Z) {
1073 return -I*eta_Z*GEW*MZ*SW2*
SP(
LI(fi2),
LI(fi3));
1074 }
else if(pi1==H && pi2==Wp && pi3==Wm) {
1076 return I*GEW*MW*
SP(
LI(fi2),
LI(fi3));
1077 }
else if(pi1==H && pi2==Z && pi3==Z) {
1079 return I*GEW/CW*MZ*
SP(
LI(fi2),
LI(fi3));
1080 }
else if(pi1==H && pi2==phim && pi3==phip) {
1082 return -I/2*GEW*MH2/MW;
1083 }
else if(pi1==H && pi2==H && pi3==H) {
1085 return -3/ex(2)*I*GEW*MH2/MW;
1086 }
else if(pi1==H && pi2==chi && pi3==chi) {
1088 return -I/2*GEW*MH2/MW;
1089 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==A) {
1091 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1092 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==A) {
1094 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1095 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==Z) {
1097 return I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1098 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==Z) {
1100 return -I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1101 }
else if(pi1==ghWpbar && pi2==ghZ && pi3==Wp) {
1103 return -I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1104 }
else if(pi1==ghWmbar && pi2==ghZ && pi3==Wm) {
1106 return I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1107 }
else if(pi1==ghWpbar && pi2==ghA && pi3==Wp) {
1109 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1110 }
else if(pi1==ghWmbar && pi2==ghA && pi3==Wm) {
1112 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1113 }
else if(pi1==ghZbar && pi2==ghWp && pi3==Wm) {
1115 return -I*eta_G*eta*GEW*CW*
SP(mom1,
LI(fi3));
1116 }
else if(pi1==ghZbar && pi2==ghWm && pi3==Wp) {
1118 return I*eta_G*eta*GEW*CW*
SP(mom1,
LI(fi3));
1119 }
else if(pi1==ghAbar && pi2==ghWp && pi3==Wm) {
1121 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1122 }
else if(pi1==ghAbar && pi2==ghWm && pi3==Wp) {
1124 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1125 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==chi) {
1127 return eta_G*GEW/2*xi*MW;
1128 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==chi) {
1130 return -eta_G*GEW/2*xi*MW;
1131 }
else if( ((pi1==ghWpbar && pi2==ghWp) ||(pi1==ghWmbar && pi2==ghWm)) && pi3==H) {
1133 return -I/2*eta_G*GEW*xi*MW;
1134 }
else if(pi1==ghZbar && pi2==ghZ && pi3==H) {
1136 return -eta_G*I*GEW/(2*CW)*xi*MZ;
1137 }
else if( pi1==ghZbar && ((pi2==ghWp && pi3==phim) || (pi2==ghWm && pi3==phip)) ) {
1139 return I/2*eta_G*eta_Z*GEW*xi*MZ;
1140 }
else if( ((pi1==ghWpbar && pi3==phip) || (pi1==ghWmbar && pi3==phim)) && pi2==ghZ) {
1142 return -I*eta_G*eta_Z*GEW*C2W/(2*CW)*xi*MW;
1143 }
else if( ((pi1==ghWpbar && pi3==phip) || (pi1==ghWmbar && pi3==phim)) && pi2==ghA) {
1145 return -I*eta_G*eta_e*eta*EL*xi*MW;
1147 cout << endl << e << endl;
1148 throw Error(
"Vertex Not defined!");
1151 auto pi4 = e.op(3).op(0);
1152 auto fi4 = e.op(3).op(1);
1153 auto mom4 = e.op(3).op(2);
1155 if(pi1==g && pi2==g && pi3==g && pi4==g) {
1158 }
else if(pi1==Wp && pi2==Wm && pi3==A && pi4==A) {
1161 }
else if(pi1==Wp && pi2==Wm && pi3==Z && pi4==Z) {
1164 }
else if(pi1==Wp && pi2==Wm && pi3==A && pi4==Z) {
1167 }
else if(pi1==Wp && pi2==Wp && pi3==Wm && pi4==Wm) {
1170 }
else if(pi1==Wp && pi2==Wm && pi3==H && pi4==H) {
1172 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1173 }
else if(pi1==Wp && pi2==Wm && pi3==chi && pi4==chi) {
1175 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1176 }
else if(pi1==Z && pi2==Z && pi3==H && pi4==H) {
1178 return I/2*GEW2/CW2*
SP(
LI(fi1),
LI(fi2));
1179 }
else if(pi1==Z && pi2==Z && pi3==chi && pi4==chi) {
1181 return I/2*GEW2/CW2*
SP(
LI(fi1),
LI(fi2));
1182 }
else if(pi1==A && pi2==A && pi3==phip && pi4==phim) {
1184 return 2*I*EL2*
SP(
LI(fi1),
LI(fi2));
1185 }
else if(pi1==Z && pi2==Z && pi3==phip && pi4==phim) {
1187 return I/2*pow(GEW*C2W/CW,2)*
SP(
LI(fi1),
LI(fi2));
1188 }
else if(pi1==Wp && pi2==Wm && pi3==phip && pi4==phim) {
1190 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1191 }
else if( ((pi1==Wp && pi3==phim) || (pi1==Wm && pi3==phip)) && pi2==Z && pi4==H) {
1193 return -I*eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1194 }
else if(pi1==Wm && pi2==Z && pi3==phip && pi4==chi) {
1196 return -eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1197 }
else if(pi1==Wp && pi2==Z && pi3==phim && pi4==chi) {
1199 return eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1200 }
else if( ((pi1==Wm && pi3==phip) || (pi1==Wp && pi3==phim)) && pi2==A && pi4==H) {
1202 return I/2*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1203 }
else if(pi1==Wp && pi2==A && pi3==phim && pi4==chi) {
1205 return -1/ex(2)*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1206 }
else if(pi1==Wm && pi2==A && pi3==phip && pi4==chi) {
1208 return 1/ex(2)*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1209 }
else if(pi1==Z && pi2==A && pi3==phip && pi4==phim) {
1211 return I*eta_e*eta*eta_Z*EL*GEW*C2W/CW*
SP(
LI(fi1),
LI(fi2));
1212 }
else if(pi1==phim && pi2==phip && pi3==phim && pi4==phip) {
1214 return -I/2*GEW2*MH2/MW2;
1215 }
else if(pi1==H && pi2==H && pi3==phim && pi4==phip) {
1217 return -I/4*GEW2*MH2/MW2;
1218 }
else if(pi1==chi && pi2==chi && pi3==phim && pi4==phip) {
1220 return -I/4*GEW2*MH2/MW2;
1221 }
else if(pi1==H && pi2==H && pi3==H && pi4==H) {
1223 return -3/ex(4)*I*GEW2*MH2/MW2;
1224 }
else if(pi1==H && pi2==H && pi3==chi && pi4==chi) {
1226 return -I/4*GEW2*MH2/MW2;
1227 }
else if(pi1==chi && pi2==chi && pi3==chi && pi4==chi) {
1229 return -3/ex(4)*I*GEW2*MH2/MW2;
1231 cout << endl << e << endl;
1232 throw Error(
"Vertex Not defined!");
1235 cout << endl << e << endl;
1236 throw Error(
"Vertex Not defined!");
1238 }
else return e.map(self);