168 void DrawPDF(
const lst & amps,
string fn,
int nr) {
171 for(
auto item : amps) amp_vec.push_back(item);
172 string tex_path = to_string(getpid()) +
"_TeX/";
173 if(!
dir_exists(tex_path)) rc = system((
"mkdir -p "+tex_path).c_str());
176 auto amp = amp_vec[idx];
177 ofstream out(tex_path+to_string(idx)+
".tex");
178 out <<
"\\documentclass[tikz]{standalone}" << endl;
179 out <<
"\\usepackage{tikz-feynman}" << endl;
180 out <<
"\\tikzfeynmanset{compat=1.1.0}" << endl;
181 out <<
"\\begin{document}" << endl;
182 out <<
"\\feynmandiagram{" << endl;
183 auto lines = TopoLines(amp);
186 std::map<ex,int,ex_is_less> vtex_map;
187 for(auto l : lines) {
188 lst ll = lst{l.op(0), l.op(1)};
189 bool isExt = (is_a<numeric>(ll.op(0)) && ll.op(0)<0) || (is_a<numeric>(ll.op(1)) && ll.op(1)<0);
191 bend_map[ll] = bend_map[ll] + 1;
193 auto fidL = (is_a<numeric>(l.op(1)) ? l.op(1) : l.op(1).op(0));
194 out <<
"\"" << fidL <<
"\"";
197 if(InOutTeX[fidL].length()>0) out << InOutTeX[fidL];
200 } else if(vtex_map[l.op(1).op(1)]==0) {
201 out << VerTeX[l.op(1).op(1)];
202 vtex_map[l.op(1).op(1)]=1;
206 auto f = l.op(2).op(0);
207 if(LineTeX[f].length()>0) {
208 if(!isExt) out << LineTeX[f];
210 auto cpos = LineTeX[f].find(
", edge");
211 if(cpos>0) out << LineTeX[f].substr(0,cpos);
212 else out << LineTeX[f];
215 if(bend_map[ll]>2) out <<
",half right";
216 else if(bend_map[ll]>1) out <<
",half left";
217 if(is_zero(l.op(0)-l.op(1))) out <<
",loop,distance=2cm";
220 auto fidR = (is_a<numeric>(l.op(0)) ? l.op(0) : l.op(0).op(0));
221 out <<
" \"" << fidR <<
"\"";
224 if(InOutTeX[fidR].length()>0) out << InOutTeX[fidR];
227 } else if(vtex_map[l.op(0).op(1)]==0) {
228 out << VerTeX[l.op(0).op(1)];
229 vtex_map[l.op(0).op(1)]=1;
234 out <<
"\\end{document}" << endl;
236 auto rc = system((
"cd "+tex_path+
" && echo X | lualatex " + to_string(idx) +
" 1>/dev/null").c_str());
240 ofstream out(tex_path+
"diagram.tex");
241 out <<
"\\let\\mypdfximage\\pdfximage" << endl;
242 out <<
"\\def\\pdfximage{\\immediate\\mypdfximage}" << endl;
243 out <<
"\\documentclass{standalone}" << endl;
244 out <<
"\\usepackage{graphicx}" << endl;
245 out <<
"\\usepackage{adjustbox}" << endl;
246 out <<
"\\usepackage{scalefnt}" << endl;
247 out <<
"\\begin{document}" << endl;
249 out <<
"\\begin{adjustbox}{valign=T,width=\\textwidth}" << endl;
250 out <<
"\\begin{tabular}{|";
for(
int i=0; i<nr; i++) out <<
"cc|"; out <<
"}" << endl;
251 out <<
"\\hline" << endl;
252 int total = amps.nops();
254 if((total%nr)!=0) total = (total/nr+1)*nr;
255 for(
int i=0; i<total; i++) {
264 out <<
"{\\tiny " << i+1 <<
"}&" << endl;
266 out <<
"\\includegraphics[keepaspectratio,";
267 out <<
"height=" << 1.0/nr <<
"\\textwidth,";
268 out <<
"width=" << 1.0/nr <<
"\\textwidth]";
269 out <<
"{"<<i<<
".pdf}" << endl;
271 if((i+1)%nr==0) out <<
"\\\\ \\hline";
274 out <<
"\\end{tabular}" << endl;
275 out <<
"\\end{adjustbox}" << endl;
276 out <<
"\\end{document}" << endl;
278 if(
Debug) rc = system((
"cd "+tex_path+
" && pdflatex diagram && mv diagram.pdf ../"+fn).c_str());
279 else rc = system((
"cd "+tex_path+
" && echo X | pdflatex diagram 1>/dev/null && mv diagram.pdf ../"+fn).c_str());
280 if(!
Debug) rc = system((
"rm -r "+tex_path).c_str());
292 if(prop.nops()<1)
throw Error(
"ShrinkCut: no cut provided!");
295 for(
int i=0; i<tls.nops(); i++) {
296 auto pi = tls.op(i).op(2);
297 if(pi.nops()<2)
continue;
298 if(!is_a<lst>(prop.op(0))) {
299 if(is_zero(pi.op(0)-prop.op(0)) && is_zero(pi.op(1)-prop.op(1))) cls_vec.push_back(i);
301 for(
auto iprop : prop) {
302 if(is_zero(pi.op(0)-iprop.op(0)) && is_zero(pi.op(1)-iprop.op(1))) cls_vec.push_back(i);
306 if(cls_vec.size()<n)
return ret;
308 Combinations(cls_vec.size(), n, [n,&ret,cls_vec,tls](
const int * is)->void {
310 for(int i=0; i<n; i++) cls[i] = cls_vec[is[i]];
315 auto ol = tls2.op(ci);
316 tls2.let_op(ci) = lst{ol.op(0), 0, lst{ol.op(2).op(0)}, ol.op(3)};
317 tls2.append(lst{0, ol.op(1), lst{ol.op(2).op(1)}, ol.op(3)} );
322 int ntls2 = tls2.nops();
325 for(
int i=last; i<ntls2; i++) {
326 auto li = tls2.op(i);
327 if(is_zero(li) || li.op(2).nops()<2)
continue;
330 tls2.let_op(last) = 0;
333 if(is_zero(lp))
break;
335 for(
int i=0; i<ntls2; i++) {
336 if(is_zero(tls2.op(i)))
continue;
337 if(is_zero(tls2.op(i).op(0)-lp.op(0))) tls2.let_op(i).let_op(0) = lp.op(1);
338 if(is_zero(tls2.op(i).op(1)-lp.op(0))) tls2.let_op(i).let_op(1) = lp.op(1);
343 map<int, lst> con_map;
344 for(
auto li : tls2) {
345 if(is_zero(li))
continue;
348 if(is_a<lst>(fiL)) fiL = fiL.op(0);
350 if(is_a<lst>(fiR)) fiR = fiR.op(0);
352 con_map[ex_to<numeric>(fiL).to_int()].append(fiR);
353 }
else if(fiR>0 && fiL<0) {
354 con_map[ex_to<numeric>(fiR).to_int()].append(fiL);
356 if(fiL>0 && is_zero(fiR)) key = fiL;
357 else if(fiR>0 && is_zero(fiL)) key = fiR;
358 else throw Error(
"ShrinkCut: unexpcected point reached.");
359 val = li.op(2).op(0);
360 con_map[ex_to<numeric>(key).to_int()].append(val);
365 for(
auto kv : con_map) item.append(kv.second.sort());
763 ex Models::FeynRulesSM(
const ex & amp,
const ex & xi) {
764 if(is_a<lst>(amp))
return FeynRulesSM(ex_to<lst>(amp), xi);
769 static ex CW2 = CW*CW;
770 static ex SW2 = SW*SW;
771 static ex C2W = CW2-SW2;
774 static Symbol Ubar(
"Ubar");
776 static Symbol Dbar(
"Dbar");
778 static Symbol Cbar(
"Cbar");
780 static Symbol Sbar(
"Sbar");
782 static Symbol Tbar(
"Tbar");
784 static Symbol Bbar(
"Bbar");
788 static Symbol ghbar(
"ghbar");
796 static Symbol ghAbar(
"ghAbar");
797 static Symbol ghWm(
"ghWm");
798 static Symbol ghWmbar(
"ghWmbar");
799 static Symbol ghWp(
"ghWp");
800 static Symbol ghWpbar(
"ghWpbar");
802 static Symbol ghZbar(
"ghZbar");
807 static Symbol nebar(
"nebar");
811 static Symbol nmubar(
"nmubar");
812 static Symbol taum(
"taum");
813 static Symbol taup(
"taup");
814 static Symbol ntau(
"ntau");
815 static Symbol ntaubar(
"ntaubar");
818 static Symbol phim(
"phim");
819 static Symbol phip(
"phip");
822 static auto M = [](
const string & si)->ex {
825 static ex MW = M(
"W");
826 static ex MZ = M(
"Z");
827 static ex MH = M(
"H");
831 static ex eta_s = -1;
834 static ex eta_prime = -1;
836 static ex eta_theta = 1;
838 static ex eta_e = -1;
841 static ex GEW = eta_e*eta*eta_theta * EL/SW;
842 static ex EL2 = EL*EL;
843 static ex MW2 = MW*MW;
844 static ex MZ2 = MZ*MZ;
845 static ex MH2 = MH*MH;
846 static ex GEW2 = GEW*GEW;
847 static ex sqrt2 = sqrt(ex(2));
850 T3[
"U"] = T3[
"C"] = T3[
"T"] = ex(1)/2;
851 T3[
"D"] = T3[
"S"] = T3[
"B"] = -ex(1)/2;
852 T3[
"ne"] = T3[
"nmu"] = T3[
"ntau"] = ex(1)/2;
853 T3[
"em"] = T3[
"mum"] = T3[
"taum"] = -ex(1)/2;
854 T3[
"ep"] = T3[
"mup"] = T3[
"taup"] = -ex(1)/2;
857 Q[
"U"] = Q[
"C"] = Q[
"T"] = ex(2)/3;
858 Q[
"D"] = Q[
"S"] = Q[
"B"] = -ex(1)/3;
859 Q[
"ne"] = Q[
"nmu"] = Q[
"ntau"] = 0;
860 Q[
"em"] = Q[
"mum"] = Q[
"taum"] = -1;
861 Q[
"ep"] = Q[
"mup"] = Q[
"taup"] = -1;
863 auto is_qbar_q = [&](
const ex pi1,
const ex pi2)->
bool {
864 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);
866 auto is_lbar_l = [&](
const ex pi1,
const ex pi2)->
bool {
867 return (pi1==
ep && pi2==em) || (pi1==mup && pi2==mum) || (pi1==taup && pi2==taum);
869 auto is_lbar_n = [&](
const ex pi1,
const ex pi2)->
bool {
870 return (pi1==
ep && pi2==ne) || (pi1==mup && pi2==nmu) || (pi1==taup && pi2==ntau);
872 auto is_nbar_n = [&](
const ex pi1,
const ex pi2)->
bool {
873 return (pi1==nebar && pi2==ne) || (pi1==nmubar && pi2==nmu) || (pi1==ntaubar && pi2==ntau);
875 auto is_nbar_l = [&](
const ex pi1,
const ex pi2)->
bool {
876 return (pi1==nebar && pi2==em) || (pi1==nmubar && pi2==mum) || (pi1==ntaubar && pi2==taum);
878 auto is_uqbar = [&](
const ex pi)->
bool {
879 return (pi==Ubar) || (pi==Cbar) || (pi==Tbar);
881 auto is_uq = [&](
const ex pi)->
bool {
882 return (pi==U) || (pi==C) || (pi==T);
884 auto is_dqbar = [&](
const ex pi)->
bool {
885 return (pi==Dbar) || (pi==Sbar) || (pi==Bbar);
887 auto is_dq = [&](
const ex pi)->
bool {
888 return (pi==D) || (pi==S) || (pi==B);
890 auto is_uqbar_dq = [&](
const ex pi1,
const ex pi2)->
bool {
891 return is_uqbar(pi1) && is_dq(pi2);
893 auto is_dqbar_uq = [&](
const ex pi1,
const ex pi2)->
bool {
894 return is_dqbar(pi1) && is_uq(pi2);
896 auto CKM = [&](
const string & si1,
const string & si2)->ex {
897 return Symbol(
"V"+si1+si2);
900 auto gfV = [&](
const string & si)->ex {
901 return T3[si]/2-Q[si]*SW2;
903 auto gfA = [&](
const string & si)->ex {
910 auto pi = e.op(0).op(0);
912 if(pi==U || pi==D || pi==C || pi==S || pi==T || pi==B) {
928 }
else if(pi==ghWm || pi==ghWp) {
930 }
else if(pi==em || pi==mum || pi==taum) {
932 }
else if(pi==ne || pi==nmu || pi==ntau) {
938 }
else if(pi==phim) {
941 cout << endl << e << endl;
942 throw Error(
"Propagator Not defined!");
945 auto pi1 = e.op(0).op(0);
946 auto pi2 = e.op(1).op(0);
947 auto pi3 = e.op(2).op(0);
948 auto fi1 = e.op(0).op(1);
949 auto fi2 = e.op(1).op(1);
950 auto fi3 = e.op(2).op(1);
951 auto mom1 = e.op(0).op(2);
952 auto mom2 = e.op(1).op(2);
953 auto mom3 = e.op(2).op(2);
963 if(pi1==ghbar && pi2==gh && pi3==g) {
966 }
else if(pi1==g && pi2==g && pi3==g) {
969 }
else if((pi3==g) && is_qbar_q(pi1, pi2)) {
972 }
else if((pi3==A) && is_qbar_q(pi1, pi2)) {
975 }
else if((pi3==A) && is_lbar_l(pi1, pi2)) {
978 }
else if((pi3==Z) && is_qbar_q(pi1, pi2)) {
980 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));
981 }
else if((pi3==Z) && (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2))) {
983 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)));
984 }
else if(pi1==Wp && pi2==Wm && pi3==A) {
986 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)));
987 }
else if(pi1==Wp && pi2==Wm && pi3==Z) {
989 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)));
990 }
else if(is_uqbar(pi1) && is_dq(pi2) && pi3==Wp) {
992 auto ckm = CKM(si1, si2);
994 }
else if(is_dqbar(pi1) && is_uq(pi2) && pi3==Wm) {
996 auto ckm = CKM(si1, si2);
998 }
else if( (is_nbar_l(pi1, pi2) && pi3==Wp) || (is_lbar_n(pi1, pi2) && pi3==Wm) ) {
1000 return -I*eta*GEW/sqrt2*GMat(
GAS(
LI(fi3))-
GAS(
LI(fi3))*
GAS(5),
DI(fi1),
DI(fi2))/2;
1001 }
else if(is_qbar_q(pi1, pi2) && (pi3==H)) {
1003 return -I*GEW/2*M(si)/MW*GMat(
GAS(1),
DI(fi1),
DI(fi2))*
SP(
TI(fi1),
TI(fi2));
1004 }
else if( (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2)) && (pi3==H)) {
1006 return -I*GEW/2*M(si)/MW*GMat(
GAS(1),
DI(fi1),
DI(fi2));
1007 }
else if(is_qbar_q(pi1, pi2) && (pi3==chi)) {
1009 return -GEW*T3[si]*M(si)/MW*GMat(
GAS(5),
DI(fi1),
DI(fi2))*
SP(
TI(fi1),
TI(fi2));
1010 }
else if( (is_lbar_l(pi1, pi2) || is_nbar_n(pi1, pi2)) && (pi3==chi)) {
1012 return -GEW*T3[si]*M(si)/MW*GMat(
GAS(5),
DI(fi1),
DI(fi2));
1013 }
else if(is_uqbar_dq(pi1, pi2) && pi3==phip) {
1015 auto ckm = CKM(si1,si2);
1016 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));
1017 }
else if(is_dqbar_uq(pi1, pi2) && pi3==phim) {
1019 auto ckm = CKM(si1,si2);
1020 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));
1021 }
else if(is_nbar_l(pi1, pi2) && pi3==phip) {
1023 return -I*GEW/sqrt2*M(si2)/MW*GMat(
GAS(1)+
GAS(5),
DI(fi1),
DI(fi2))/2;
1024 }
else if(is_lbar_n(pi1, pi2) && pi3==phim) {
1026 return -I*GEW/sqrt2*M(si1)/MW*GMat(
GAS(1)-
GAS(5),
DI(fi1),
DI(fi2))/2;
1027 }
else if(pi1==A && pi2==phip && pi3==phim) {
1029 return -I*eta_e*EL*
SP(mom2-mom3,
LI(fi1));
1030 }
else if(pi1==Z && pi2==phip && pi3==phim) {
1032 return -I*eta*eta_Z*GEW*C2W/(2*CW)*
SP(mom2-mom3,
LI(fi1));
1033 }
else if(pi1==Wp && pi2==phim && pi3==H) {
1035 return I/2*eta*GEW*
SP(mom2-mom3,
LI(fi1));
1036 }
else if(pi1==Wm && pi2==phip && pi3==H) {
1038 return -I/2*eta*GEW*
SP(mom2-mom3,
LI(fi1));
1039 }
else if( ((pi1==Wp && pi2==phim) || (pi1==Wm && pi2==phip)) && pi3==chi) {
1041 return -eta*GEW/2*
SP(mom2-mom3,
LI(fi1));
1042 }
else if(pi1==Z && pi2==chi && pi3==H) {
1044 return -eta*eta_Z*GEW/(2*CW)*
SP(mom2-mom3,
LI(fi1));
1045 }
else if( ((pi1==phim && pi2==Wp) || (pi1==phip && pi2==Wm)) && pi3==A) {
1047 return I*eta_e*eta*EL*MW*
SP(
LI(fi2),
LI(fi3));
1048 }
else if( ((pi1==phim && pi2==Wp) || (pi1==phip && pi2==Wm)) && pi3==Z) {
1050 return -I*eta_Z*GEW*MZ*SW2*
SP(
LI(fi2),
LI(fi3));
1051 }
else if(pi1==H && pi2==Wp && pi3==Wm) {
1053 return I*GEW*MW*
SP(
LI(fi2),
LI(fi3));
1054 }
else if(pi1==H && pi2==Z && pi3==Z) {
1056 return I*GEW/CW*MZ*
SP(
LI(fi2),
LI(fi3));
1057 }
else if(pi1==H && pi2==phim && pi3==phip) {
1059 return -I/2*GEW*MH2/MW;
1060 }
else if(pi1==H && pi2==H && pi3==H) {
1062 return -3/ex(2)*I*GEW*MH2/MW;
1063 }
else if(pi1==H && pi2==chi && pi3==chi) {
1065 return -I/2*GEW*MH2/MW;
1066 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==A) {
1068 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1069 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==A) {
1071 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1072 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==Z) {
1074 return I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1075 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==Z) {
1077 return -I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1078 }
else if(pi1==ghWpbar && pi2==ghZ && pi3==Wp) {
1080 return -I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1081 }
else if(pi1==ghWmbar && pi2==ghZ && pi3==Wm) {
1083 return I*eta_G*eta*eta_Z*GEW*CW*
SP(mom1,
LI(fi3));
1084 }
else if(pi1==ghWpbar && pi2==ghA && pi3==Wp) {
1086 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1087 }
else if(pi1==ghWmbar && pi2==ghA && pi3==Wm) {
1089 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1090 }
else if(pi1==ghZbar && pi2==ghWp && pi3==Wm) {
1092 return -I*eta_G*eta*GEW*CW*
SP(mom1,
LI(fi3));
1093 }
else if(pi1==ghZbar && pi2==ghWm && pi3==Wp) {
1095 return I*eta_G*eta*GEW*CW*
SP(mom1,
LI(fi3));
1096 }
else if(pi1==ghAbar && pi2==ghWp && pi3==Wm) {
1098 return -I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1099 }
else if(pi1==ghAbar && pi2==ghWm && pi3==Wp) {
1101 return I*eta_G*eta_e*EL*
SP(mom1,
LI(fi3));
1102 }
else if(pi1==ghWpbar && pi2==ghWp && pi3==chi) {
1104 return eta_G*GEW/2*xi*MW;
1105 }
else if(pi1==ghWmbar && pi2==ghWm && pi3==chi) {
1107 return -eta_G*GEW/2*xi*MW;
1108 }
else if( ((pi1==ghWpbar && pi2==ghWp) ||(pi1==ghWmbar && pi2==ghWm)) && pi3==H) {
1110 return -I/2*eta_G*GEW*xi*MW;
1111 }
else if(pi1==ghZbar && pi2==ghZ && pi3==H) {
1113 return -eta_G*I*GEW/(2*CW)*xi*MZ;
1114 }
else if( pi1==ghZbar && ((pi2==ghWp && pi3==phim) || (pi2==ghWm && pi3==phip)) ) {
1116 return I/2*eta_G*eta_Z*GEW*xi*MZ;
1117 }
else if( ((pi1==ghWpbar && pi3==phip) || (pi1==ghWmbar && pi3==phim)) && pi2==ghZ) {
1119 return -I*eta_G*eta_Z*GEW*C2W/(2*CW)*xi*MW;
1120 }
else if( ((pi1==ghWpbar && pi3==phip) || (pi1==ghWmbar && pi3==phim)) && pi2==ghA) {
1122 return -I*eta_G*eta_e*eta*EL*xi*MW;
1124 cout << endl << e << endl;
1125 throw Error(
"Vertex Not defined!");
1128 auto pi4 = e.op(3).op(0);
1129 auto fi4 = e.op(3).op(1);
1130 auto mom4 = e.op(3).op(2);
1132 if(pi1==g && pi2==g && pi3==g && pi4==g) {
1135 }
else if(pi1==Wp && pi2==Wm && pi3==A && pi4==A) {
1138 }
else if(pi1==Wp && pi2==Wm && pi3==Z && pi4==Z) {
1141 }
else if(pi1==Wp && pi2==Wm && pi3==A && pi4==Z) {
1144 }
else if(pi1==Wp && pi2==Wp && pi3==Wm && pi4==Wm) {
1147 }
else if(pi1==Wp && pi2==Wm && pi3==H && pi4==H) {
1149 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1150 }
else if(pi1==Wp && pi2==Wm && pi3==chi && pi4==chi) {
1152 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1153 }
else if(pi1==Z && pi2==Z && pi3==H && pi4==H) {
1155 return I/2*GEW2/CW2*
SP(
LI(fi1),
LI(fi2));
1156 }
else if(pi1==Z && pi2==Z && pi3==chi && pi4==chi) {
1158 return I/2*GEW2/CW2*
SP(
LI(fi1),
LI(fi2));
1159 }
else if(pi1==A && pi2==A && pi3==phip && pi4==phim) {
1161 return 2*I*EL2*
SP(
LI(fi1),
LI(fi2));
1162 }
else if(pi1==Z && pi2==Z && pi3==phip && pi4==phim) {
1164 return I/2*pow(GEW*C2W/CW,2)*
SP(
LI(fi1),
LI(fi2));
1165 }
else if(pi1==Wp && pi2==Wm && pi3==phip && pi4==phim) {
1167 return I/2*GEW2*
SP(
LI(fi1),
LI(fi2));
1168 }
else if( ((pi1==Wp && pi3==phim) || (pi1==Wm && pi3==phip)) && pi2==Z && pi4==H) {
1170 return -I*eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1171 }
else if(pi1==Wm && pi2==Z && pi3==phip && pi4==chi) {
1173 return -eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1174 }
else if(pi1==Wp && pi2==Z && pi3==phim && pi4==chi) {
1176 return eta_Z*GEW2*SW2/(2*CW)*
SP(
LI(fi1),
LI(fi2));
1177 }
else if( ((pi1==Wm && pi3==phip) || (pi1==Wp && pi3==phim)) && pi2==A && pi4==H) {
1179 return I/2*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1180 }
else if(pi1==Wp && pi2==A && pi3==phim && pi4==chi) {
1182 return -1/ex(2)*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1183 }
else if(pi1==Wm && pi2==A && pi3==phip && pi4==chi) {
1185 return 1/ex(2)*eta_e*eta*EL*GEW*
SP(
LI(fi1),
LI(fi2));
1186 }
else if(pi1==Z && pi2==A && pi3==phip && pi4==phim) {
1188 return I*eta_e*eta*eta_Z*EL*GEW*C2W/CW*
SP(
LI(fi1),
LI(fi2));
1189 }
else if(pi1==phim && pi2==phip && pi3==phim && pi4==phip) {
1191 return -I/2*GEW2*MH2/MW2;
1192 }
else if(pi1==H && pi2==H && pi3==phim && pi4==phip) {
1194 return -I/4*GEW2*MH2/MW2;
1195 }
else if(pi1==chi && pi2==chi && pi3==phim && pi4==phip) {
1197 return -I/4*GEW2*MH2/MW2;
1198 }
else if(pi1==H && pi2==H && pi3==H && pi4==H) {
1200 return -3/ex(4)*I*GEW2*MH2/MW2;
1201 }
else if(pi1==H && pi2==H && pi3==chi && pi4==chi) {
1203 return -I/4*GEW2*MH2/MW2;
1204 }
else if(pi1==chi && pi2==chi && pi3==chi && pi4==chi) {
1206 return -3/ex(4)*I*GEW2*MH2/MW2;
1208 cout << endl << e << endl;
1209 throw Error(
"Vertex Not defined!");
1212 cout << endl << e << endl;
1213 throw Error(
"Vertex Not defined!");
1215 }
else return e.map(self);