Program to evaluate the Helicity Amplitudes for the Compton scattering: (SuperMinus[e]) γ→(SuperMinus[e]) γ . See my text “Introdução à Teoria do Campo”, section 5.5 or “Quantum Field Theory” section 6.5.1
Compatible with FeynCalc 10.1.0

Last Version: 09/12/2024
Jorge C. Romão
jorge.romao@tecnico.ulisboa.pt

Inputs and Definitions

Input FeynCalc

<<FeynCalc`

Definitions

Notice that we define the polarization vector complex conjugated for outgoing photons (2016)

SetOptions[DiracSimplify,DiracSubstitute67->False];

dp=Function[s,If[s==1,GA[6],If[s==-1,GA[7]]]];

U[p_,s_]:=dp[s].SpinorU[p,0];
UBar[p_,s_]:=SpinorUBar[p,0].dp[-s];
Um[p1_,p2_,m_,s_]:=(If[s==1,MySP[p1,p2],MySPc[p2,p1]]/m U[p1,s]+U[p2,-s]);
Vm[p1_,p2_,m_,s_]:=(If[s==1,MySP[p1,p2],MySPc[p2,p1]]/m U[p1,s]-U[p2,-s]);
UmBar[p1_,p2_,m_,s_]:=(If[s==1,MySPc[p1,p2],MySP[p2,p1]]/m UBar[p1,s]+UBar[p2,-s]);
VmBar[p1_,p2_,m_,s_]:=(If[s==1,MySPc[p1,p2],MySP[p2,p1]]/m UBar[p1,s]-UBar[p2,-s]);

PolSConjU=Function[{k,p,l,i},If[i==1,2 U[k,l],If[i==2,2 U[p,-l]]]];
PolSConjUBar=Function[{k,p,l,i},If[i==1,UBar[p,l],If[i==2,UBar[k,-l]]]];
PolSU=Function[{k,p,l,i},If[i==1,2 U[p,l],If[i==2,2 U[k,-l]]]];
PolSUBar=Function[{k,p,l,i},If[i==1,UBar[k,l],If[i==2,UBar[p,-l]]]];
MydsU=Function[{p,i},If[i==1,U[p,1],If[i==2,U[p,-1]]]];
MydsUBar=Function[{p,i},If[i==1,UBar[p,1],If[i==2,UBar[p,-1]]]];

Simplifications

vlist={w1,w2,k1,k2,r1,r2};

simp1=Table[SpinorU[vlist[[i]],0].GA[7].SpinorU[vlist[[j]],0]->MySP[vlist[[i]],vlist[[j]]],{i,1,6},{j,1,6}]/.{MySP[p_,p_]->0};

simp2=Table[SpinorU[vlist[[i]],0].GA[6].SpinorU[vlist[[j]],0]->MySPc[vlist[[j]],vlist[[i]]],{i,1,6},{j,1,6}]/.{MySPc[q_,q_]->0};

simp=Flatten[{simp1,simp2}]//FCI;

Amplitudes

Amplitudes M1 and M2

MDiag1[s1_,s2_,l1_,l2_]:=Sum[(UmBar[w1,w2,m,s2].PolSConjU[k2,r1,l2,i1] PolSConjUBar[k2,r1,l2,i1].MydsU[r1,i2] MydsUBar[r1,i2] .PolSU[k1,r1,l1,i3] PolSUBar[k1,r1,l1,i3].Um[r1,r2,m,s1]+
UmBar[w1,w2,m,s2].PolSConjU[k2,r1,l2,i1] PolSConjUBar[k2,r1,l2,i1].MydsU[r2,i2] MydsUBar[r2,i2] .PolSU[k1,r1,l1,i3] PolSUBar[k1,r1,l1,i3].Um[r1,r2,m,s1]+
UmBar[w1,w2,m,s2].PolSConjU[k2,r1,l2,i1] PolSConjUBar[k2,r1,l2,i1].MydsU[k1,i2] MydsUBar[k1,i2] .PolSU[k1,r1,l1,i3] PolSUBar[k1,r1,l1,i3].Um[r1,r2,m,s1]),{i1,1,2},{i2,1,2},{i3,1,2}] + m(
Sum[ UmBar[w1,w2,m,s2].PolSConjU[k2,r1,l2,i1] PolSConjUBar[k2,r1,l2,i1].PolSU[k1,r1,l1,i2] PolSUBar[k1,r1,l1,i2].Um[r1,r2,m,s1],{i1,1,2},{i2,1,1}]);
MDiag2[s1_,s2_,l1_,l2_]:=Sum[(UmBar[w1,w2,m,s2].PolSU[k1,r1,l1,i1] PolSUBar[k1,r1,l1,i1].MydsU[r1,i2] MydsUBar[r1,i2] .PolSConjU[k2,r1,l2,i3] PolSConjUBar[k2,r1,l2,i3].Um[r1,r2,m,s1]+
UmBar[w1,w2,m,s2].PolSU[k1,r1,l1,i1] PolSUBar[k1,r1,l1,i1].MydsU[r2,i2] MydsUBar[r2,i2] .PolSConjU[k2,r1,l2,i3] PolSConjUBar[k2,r1,l2,i3].Um[r1,r2,m,s1]-UmBar[w1,w2,m,s2].PolSU[k1,r1,l1,i1] PolSUBar[k1,r1,l1,i1].MydsU[k2,i2] MydsUBar[k2,i2] .PolSConjU[k2,r1,l2,i3] PolSConjUBar[k2,r1,l2,i3].Um[r1,r2,m,s1]),
{i1,1,2},{i2,1,2},{i3,1,2}] + m(
Sum[ UmBar[w1,w2,m,s2].PolSU[k1,r1,l1,i1] PolSUBar[k1,r1,l1,i1].PolSConjU[k2,r1,l2,i2] PolSConjUBar[k2,r1,l2,i2].Um[r1,r2,m,s1],{i1,1,2},{i2,1,2}]);

Simplify the Amplitudes

res1[s1_,s2_,l1_,l2_]:=DiracSimplify[MDiag1[s1,s2,l1,l2]];
res2[s1_,s2_,l1_,l2_]:=DiracSimplify[MDiag2[s1,s2,l1,l2]];

M1aux[s1_,s2_,l1_,l2_]:=Expand[res1[s1,s2,l1,l2]/.simp];
M2aux[s1_,s2_,l1_,l2_]:=Expand[res2[s1,s2,l1,l2]/.simp];

M1[s1_,s2_,l1_,l2_]:=Expand[M1aux[s1,s2,l1,l2]/.{MySP[p_,q_]->sp[p,q],MySPc[p_,q_]->spc[p,q]}];

M2[s1_,s2_,l1_,l2_]:=Expand[M2aux[s1,s2,l1,l2]/.{MySP[p_,q_]->sp[p,q],MySPc[p_,q_]->spc[p,q]}];

Test a few amplitudes

M1[1,1,1,-1]

M2[1,1,1,-1]

Output to Fortran

If[False,M={C1 M1[1,1,1,1]+C2 M2[1,1,1,1],C1 M1[1,1,1,-1]+C2 M2[1,1,1,-1],C1 M1[1,1,-1,1]+C2 M2[1,1,-1,1],C1 M1[1,1,-1,-1]+C2 M2[1,1,-1,-1],C1 M1[1,-1,1,1]+C2 M2[1,-1,1,1],C1 M1[1,-1,1,-1]+C2 M2[1,-1,1,-1],C1 M1[1,-1,-1,1]+C2 M2[1,-1,-1,1],C1 M1[1,-1,-1,-1]+C2 M2[1,-1,-1,-1],C1 M1[-1,1,1,1]+C2 M2[-1,1,1,1],C1 M1[-1,1,1,-1]+C2 M2[-1,1,1,-1],C1 M1[-1,1,-1,1]+C2 M2[-1,1,-1,1],C1 M1[-1,1,-1,-1]+C2 M2[-1,1,-1,-1],C1 M1[-1,-1,1,1]+C2 M2[-1,-1,1,1],C1 M1[-1,-1,1,-1]+C2 M2[-1,-1,1,-1],C1 M1[-1,-1,-1,1]+C2 M2[-1,-1,-1,1],C1 M1[-1,-1,-1,-1]+C2 M2[-1,-1,-1,-1]};
stmp=OpenWrite["ComptonAmplitudes.f",FormatType->FortranForm,PageWidth->60];
Do[Write[stmp,"HelAmp(",i,")=",M[[i]]],{i,1,16}];
Close[stmp];]