| 1 | (* ::Package:: *) | 
|---|
| 2 |  | 
|---|
| 3 | (*add properties to the scalar product*) | 
|---|
| 4 | ScalarProduct[xx_,yy_+zz_] := ScalarProduct[xx,yy]+ScalarProduct[xx,zz]; | 
|---|
| 5 | ScalarProduct[xx_,aa_*yy_/;NumberQ[aa] ] := aa*ScalarProduct[xx,yy]; | 
|---|
| 6 | ScalarProduct[xx_,0] := 0; | 
|---|
| 7 |  | 
|---|
| 8 | log = 0;(*if 0 no log terms in the integrals, if 1 ok*) | 
|---|
| 9 | l4 = 1;(*if 0 no \[CapitalLambda]^4 terms in the integrals, if 1 ok*) | 
|---|
| 10 |  | 
|---|
| 11 | SimplifyAmpList::usage="Simplify the result return by FeynArts (a FeynAmpList) and compute the integrals for tree level | 
|---|
| 12 | or one loop diagrams involving only scalars (TL simplify the result if #2==1)" | 
|---|
| 13 | (*Begin["Private`"]*) | 
|---|
| 14 | SimplifyAmpList:=(Module[{k,i,result,gen,result2}, | 
|---|
| 15 | SimplifyAmpList::mt1l="More than one loop, not implemented";result=0; | 
|---|
| 16 | (*run over the FeynAmps*) | 
|---|
| 17 | For[k=1,k<=Length[#],k++, | 
|---|
| 18 | result2=0; | 
|---|
| 19 | If[Length[#[[k,2]]]==0,gen = #[[k,3]];, | 
|---|
| 20 | (*integrate if one loop*) | 
|---|
| 21 | If[Length[#[[k,2]]]==1,gen=LoopIntegrate[#[[k,3]],#[[k,2,1]]];,Message[SimplifyAmpList::mt1l]](*end if*) | 
|---|
| 22 | ](*end if*); | 
|---|
| 23 | (*make the different replacement du to the different particles in the loop*) | 
|---|
| 24 | For[i=1,i<=Length[#[[k,4,2]]],i++,result2 = result2+(gen)/.MakeReplaceList[#[[k,4,1]],#[[k,4,2,i]]]; | 
|---|
| 25 | ];(*end for*) | 
|---|
| 26 | If[#2==1, | 
|---|
| 27 | result2 = TLSimplify[result2/.M$FACouplings];,result2 = Simplify[result2/.M$FACouplings];]; | 
|---|
| 28 | result = result+result2; | 
|---|
| 29 | ];(*end for*) | 
|---|
| 30 | Simplify[result] | 
|---|
| 31 | ](*end module*))&(*end SimpifyAmpList*) | 
|---|
| 32 |  | 
|---|
| 33 |  | 
|---|
| 34 | LoopIntegrate::usage="takes a generic one loop amplitude FeynAmp[[3]] and the momentum in the loop FeynAmp[[2,1]] | 
|---|
| 35 | and return the result of the integration" | 
|---|
| 36 | LoopIntegrate:=(Module[{n,res,temp,dP,D}, | 
|---|
| 37 | LoopIntegrate::tlnp="Too large number of propagtor(not implemented)"; | 
|---|
| 38 | (*number of propagators<=2*) | 
|---|
| 39 | If[Length[#[[4]]]<=2, | 
|---|
| 40 | (*number of propagator=2*) | 
|---|
| 41 | If[Length[#[[4]]]==2, | 
|---|
| 42 | res=0; | 
|---|
| 43 | temp = (#[[5]]*#[[6]]); | 
|---|
| 44 | ScalarProduct[xx_,x*yy_] := x*ScalarProduct[xx,yy]; | 
|---|
| 45 | dP = Simplify[(Coefficient[#[[4,1,1]]^2*(1-x)/2+#[[4,2,1]]^2*x,#2,1]/2)]; | 
|---|
| 46 | D = Simplify[(ScalarProduct[Coefficient[#[[4,1,1]],#2,0],Coefficient[#[[4,1,1]],#2,0]]+#[[4,1,2]]^2)*(1-x) | 
|---|
| 47 | +(ScalarProduct[Coefficient[#[[4,2,1]],#2,0],Coefficient[#[[4,2,1]],#2,0]]+#[[4,2,2]]^2)*x-ScalarProduct[dP,dP]]; | 
|---|
| 48 | (*Check change of variable : Print[(ScalarProduct[#[[4,1,1]],#[[4,1,1]]]+#[[4,1,2]]^2)*(1-x)+(ScalarProduct[#[[4,2,1]],#[[4,2,1]]]+#[[4,2,2]]^2)*x]; | 
|---|
| 49 | Print[Simplify[(((ScalarProduct[#[[4,1,1]],#[[4,1,1]]]+#[[4,1,2]]^2)*(1-x)+(ScalarProduct[#[[4,2,1]],#[[4,2,1]]]+#[[4,2,2]]^2)*x)/.{#2->#2-dP})-D]];*) | 
|---|
| 50 | temp = temp/.{#2->#2-dP};temp=ExpandAll[temp]; | 
|---|
| 51 | For[n=1,n<=Length[temp],n++, | 
|---|
| 52 | Switch[temp[[n]], | 
|---|
| 53 | _*ScalarProduct[#2,#2]*ScalarProduct[#2,#2], | 
|---|
| 54 | (*Print[temp[[n]]];*)res = res+(l4*\[CapitalLambda]^4/2-2*Integrate[((D)/.ScalarProduct[xx_,yy_]->-ScalarProduct[xx,yy]),{x,0,1}]*\[CapitalLambda]^2)*temp[[n]]/ScalarProduct[#2,#2]/ScalarProduct[#2,#2]; | 
|---|
| 55 | (*Print[(l4*\[CapitalLambda]^4/2-2Integrate[D,{x,0,1}]*\[CapitalLambda]^2)*temp[[n]]/ScalarProduct[#2,#2]/ScalarProduct[#2,#2]];*), | 
|---|
| 56 | _*ScalarProduct[#2,#2]*ScalarProduct[#2,_], | 
|---|
| 57 | (*Print[temp[[n]]];*)res = res-(2*\[CapitalLambda]^2/d)*Integrate[(temp[[n]]/ScalarProduct[#2,#2])/.ScalarProduct[#2,xx_]->ScalarProduct[dP,xx],{x,0,1}]; | 
|---|
| 58 | (*Print[(2*\[CapitalLambda]^2/d)*Integrate[(temp[[n]]/ScalarProduct[#2,#2])/.ScalarProduct[#2,xx_]->ScalarProduct[dP,xx],{x,0,1}]];*), | 
|---|
| 59 | _*ScalarProduct[#2,#2], | 
|---|
| 60 | res = res-(\[CapitalLambda]^2)*Integrate[(temp[[n]]/ScalarProduct[#2,#2]),{x,0,1}];(*-sign, wick*) | 
|---|
| 61 | (*Print[temp[[n]]];Print[-(\[CapitalLambda]^2)*Integrate[(temp[[n]]/ScalarProduct[#2,#2]),{x,0,1}]];*), | 
|---|
| 62 | _*ScalarProduct[#2,_]*ScalarProduct[#2,bof_], | 
|---|
| 63 | res = res+(-\[CapitalLambda]^2/d)*Integrate[(temp[[n]])/.{ScalarProduct[#2,xx_]*ScalarProduct[#2,yy_]->ScalarProduct[yy,xx]},{x,0,1}]; | 
|---|
| 64 | (*Print[temp[[n]]];Print[(-\[CapitalLambda]^2/d)*Integrate[(temp[[n]])/.ScalarProduct[#2,xx_]*ScalarProduct[#2,yy_]->ScalarProduct[yy,xx],{x,0,1}]];*), | 
|---|
| 65 | _*ScalarProduct[#2,_]*ScalarProduct[#2,_], | 
|---|
| 66 | res = res+(-\[CapitalLambda]^2/d)*Integrate[(temp[[n]])/.{ScalarProduct[#2,xx_]->(ScalarProduct[xx,xx])^(1/2)},{x,0,1}]; | 
|---|
| 67 | ](*end switch*) | 
|---|
| 68 | ];(*end for*) | 
|---|
| 69 | res=(\[ImaginaryI]*\[Pi]^2*res), | 
|---|
| 70 | (*number of propagator=1*) | 
|---|
| 71 | res=0;For[n=1,n<=Length[#[[5]]],n++, | 
|---|
| 72 | Switch[#[[5,n]],(*on the kinematic factor of the numerator*) | 
|---|
| 73 | _*ScalarProduct[#2,#2], | 
|---|
| 74 | res = res+#[[5,n]]/ScalarProduct[#2,#2]*\[ImaginaryI] \[Pi]^2(l4*(\[CapitalLambda]^4)/2-#[[4,1,2]]^2*\[CapitalLambda]^2+#[[4,1,2]]^4*log*Log[1+\[CapitalLambda]^2/#[[4,1,2]]^2]);, | 
|---|
| 75 | _*ScalarProduct[#2,_], | 
|---|
| 76 | res =res;, | 
|---|
| 77 | _, | 
|---|
| 78 | res=res+#[[5,n]](-\[ImaginaryI]) \[Pi]^2(\[CapitalLambda]^2-#[[4,1,2]]^2*log*Log[1+\[CapitalLambda]^2/#[[4,1,2]]^2])];](*end for*)];(*end if*), | 
|---|
| 79 | Message[LoopIntegrate::tlnp] | 
|---|
| 80 | ];(*end if*) | 
|---|
| 81 | res*#[[1]]*#[[2]]*#[[3]]](*end module*))&(*end LoopIntegrate*) | 
|---|
| 82 |  | 
|---|
| 83 | MakeReplaceList::usage="takes 2 lists of the same length, l1 and l2 and return a list of replacement L[[i]]=l1[[i]]->l2[[i]]" | 
|---|
| 84 | MakeReplaceList:=(Module[{i,Rep},MakeReplaceList::dll="The lists are not of the same length"; | 
|---|
| 85 | If[Length[#]==Length[#2], | 
|---|
| 86 | Rep = {}; | 
|---|
| 87 | For[i=1,i<=Length[#],i++,Rep = Append[Rep,#[[i]]-> #2[[i]]];];Rep, | 
|---|
| 88 | Message[MakeReplaceList::dll]](*end if*) | 
|---|
| 89 | ](*end module*))&(*end MakeReplaceList*) | 
|---|
| 90 |  | 
|---|
| 91 | (*End[] | 
|---|
| 92 | EndPackage[]*) | 
|---|
| 93 |  | 
|---|
| 94 |  | 
|---|
| 95 | TLSimplify::usage="return the expression after simplification using the tree level relation | 
|---|
| 96 | for the masses and the parameters m0, rmu, rmd, rms in the isospin limit" | 
|---|
| 97 | TLSimplify:=(Module[{res}, | 
|---|
| 98 | m0=Sqrt[2/3(mk^2-mp^2)(1-2Sqrt[2]/Tan[2T])]; | 
|---|
| 99 | mup=mp^2/r; | 
|---|
| 100 | md=mp^2/r; | 
|---|
| 101 | ms = (2mk^2-mp^2)/r; | 
|---|
| 102 | res = Simplify[#/.{MK0 ->mk, MKm->mk,Mpi0->mp,Mpim->mp,Meta->Sqrt[1/3(4mk^2-mp^2+2Sqrt[2](mk^2-mp^2)Tan[T])], | 
|---|
| 103 | Metap->Sqrt[1/3(4mk^2-mp^2-2Sqrt[2](mk^2-mp^2)Cot[T])]}]; | 
|---|
| 104 | Clear[m0,mup,md,ms]; | 
|---|
| 105 | res | 
|---|
| 106 | ](*end module*))&(*end TLSimplify*) | 
|---|
| 107 |  | 
|---|
| 108 |  | 
|---|
| 109 | MomSimplify::usage="return the expression after simplification using momentum conservation and p^2=m^2 for the process #2(FeynAmpList[[0,8,2]])" | 
|---|
| 110 | MomSimplify:=(Module[{temp}, | 
|---|
| 111 | temp = #/.MomConservation[Join[-#2[[1]],#2[[2]]]];temp = Simplify[temp/.MomConservation[Join[-#2[[1]],#2[[2]]]]];(*Print[MomConservation[Join[-#2[[1]],#2[[2]]]]];*) | 
|---|
| 112 | temp = Simplify[temp/.MakeMomentumRL[Join[-#2[[1]],#2[[2]]]]];temp | 
|---|
| 113 | ](*end Module*) | 
|---|
| 114 | )&(*end MomSimplify*) | 
|---|
| 115 |  | 
|---|
| 116 | MakeMomentumRL::usage="For a process, make the replacement list, p^2->m^2" | 
|---|
| 117 | MakeMomentumRL:=(Module[{list,k}, | 
|---|
| 118 | list = {}; | 
|---|
| 119 | For[k=2,k<=Length[#],k++,list = Append[list,ScalarProduct[#[[k,2]],#[[k,2]]]->#[[k,3]]^2]; | 
|---|
| 120 | ];(*end for*) | 
|---|
| 121 | list | 
|---|
| 122 | ](*end module*) | 
|---|
| 123 | )&(*end momentumRL*) | 
|---|
| 124 |  | 
|---|
| 125 | MomConservation::usage="p1->sum of outgoing momentum-sum of ingoing momentum+p1 and p1^2=m1^2" | 
|---|
| 126 | MomConservation:=(Module[{p1,k}, | 
|---|
| 127 | p1=0; | 
|---|
| 128 | For[k=2,k<=Length[#],k++,p1 = p1 +#[[k,2]];]; | 
|---|
| 129 | If[Length[#]>=3, | 
|---|
| 130 | {-#[[1,2]]->p1,ScalarProduct[#[[Length[#],2]],#[[Length[#]-1,2]]]->Simplify[#[[1,3]]^2/2-ScalarProduct[p1,p1]/2+ScalarProduct[#[[Length[#],2]],#[[Length[#]-1,2]]]]}, | 
|---|
| 131 | -#[[1,2]]->p1 | 
|---|
| 132 | ](*end if*) | 
|---|
| 133 |  | 
|---|
| 134 | ](*end module*) | 
|---|
| 135 | )&(*end MomConservation*) | 
|---|