(*====================================================================*) (* TamarA 2.0, TamarA.m --------------------------------------------- *) (* Alexander A Tetervak *) (* Department of Physics and Astronomy *) (* Department of Computer Science and Engineering *) (* University of South Carolina, USA *) (*====================================================================*) (* License agreement ------------------------------------------------ *) (* +++++++++++++++++++++++++++++++++ The author hereby grant permission to use, copy, and distribute this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. Additionally, the author grants permission to modify this software and its documentation for any purpose, provided that such modifications are not distributed without the explicit consent of the authors and that existing copyright notices are retained in all copies. Users of the software are asked to feed back problems, benefits, and/or suggestions about the software to the author (tetervak@sc.edu). Support for this software - fixing of bugs, incorporation of new features - is done on a best effort basis. All bug fixes and enhancements will be made available under the same terms and conditions as the original software, IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE AUTHOR AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHOR AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ++++++++++++++++++++++++++++++++++++ *) (* end of license agreement ----------------------------------------- *) BeginPackage["TamarA`"]; Unprotect[g, m, sc, sg, sl, tr, up, dn, vec, v4, v3, d4, eps, gm, D4IndexQ, IndexQ, ToBasis, lg, OpenLg, delta, sc3, trs, vec3, s, ep3, D3IndexQ, d3, ToD3, ToD4, ToSBasis, ls, OpenLs, cj, u, ub, v, vb, VecNameQ,ExVecNameQ]; ClearAll[g, m, sc, sg, sl, tr, up, dn, vec, v4, v3, d4, eps, gm, D4IndexQ, IndexQ, ToBasis, lg, OpenLg, delta, sc3, trs, vec3, s, ep3, D3IndexQ, d3, ToD3, ToD4, ToSBasis, ls, OpenLs, cj, u, ub, v, vb, VecNameQ,ExVecNameQ]; (*====================================================================*) (* help ---- *) up::usage="up[index,...] - contravariant index"; dn::usage="dn[index,...] - covariant index"; d4::usage= "d4[x,...] cancels d3 function,\n returns sequence of arguments"; v4::usage= "v4[name,...] - index contracted with 4d vector"; v3::usage= "v3[name,...] - 3d index contracted with 3d vector"; g::usage="g[index,index] - metric tensor"; vec::usage="vec[name,index] - 4 vector notation"; gm::usage="gm[index or 5] - gamma matrix"; sl::usage="sl[name] = gm[v4[name]]"; eps::usage= "eps[index,index,index,index] - antisymmetric tensor"; sc::usage="sc[expr,expr] - scalar product of 4 vectors"; sg::usage= "sg[ind1,ind2]=(I/2)*(gm[ind1]**gm[ind2]-gm[ind2]**gm[ind1])"; m::usage="m[name] - mass notation"; lg::usage="lg[expr,...] - 4d matrix product"; OpenLg::usage="opens lg[..]"; tr::usage="tr[expr,...] - take 4d trace"; ToBasis::usage="expand to basis"; D4IndexQ::usage="True if integer 0..3, name, up[index],\n or v4[name]"; D3IndexQ::usage="True if integer 1..3 or symbol declared by d3[]" IndexQ::usage="True if D3IndexQ or D4IndexQ"; d3::usage= "d3[x,...] declares 3d indexes,\n returns sequence of argumentsm,\n d3[] lists all d3 indexes"; delta::usage="delta[D3index,D3index] - 3d Kronecker delta"; vec3::usage="vec3[name,D3index] - 3 vector notation"; s::usage="s[D3index] - Pauli Matrix"; ep3::usage= "ep3[D3index,D3index,D3index] - 3d antysimmetric tensor"; sc3::usage="sc3[expr,expr] - scalar product of 3 vectors"; ToD4::usage="go to d4 notation"; ToD3::usage="go to d3 notation"; ls::usage="ls[expr,...] - matrix product "; OpenLs::usage="opens ls[..]"; trs::usage= "trs[expr,...] - take 2D trace"; ToSBasis::usage="expand to s basis"; cj::usage="hermitian conjugation"; u::usage="spinor u[p,s]"; ub::usage="spinor ub[p,s]"; v::usage="spinor v[p,s]"; vb::usage="spinor vb[p,s]"; VecNameQ::usage="true if symbol or indexed symbol"; ExVecNameQ::usage="true if sum of VecName(s) multiplied by\n numbers"; (* end of help ------------------------------------------------------ *) Begin["`Private`"]; (*====================================================================*) (* mixed 3d-4d index types ------------------------------------------ *) IntQ[x_]:=And[NumberQ[x],MemberQ[{0,1,2,3},x]]; UpOfIntQ[x_]:=MatchQ[x,up[_?IntQ]]; IntUpQ[x_]:=Or[IntQ[x],UpOfIntQ[x]]; Sym3Q[x_]:=Or[MatchQ[x,_Symbol], MatchQ[x,Subscript[_Symbol,_]]]; UpOfSym3Q[x_]:=MatchQ[x,up[_?Sym3Q]]; SymUp3Q[x_]:=Or[Sym3Q[x],UpOfSym3Q[x]]; IntSym3Q[x_]:=Or[Sym3Q[x],IntQ[x]]; UpOfIntSym3Q[x_]:=MatchQ[x,up[_?IntSym3Q]]; IntSymUp3Q[x_]:=Or[IntSym3Q[x],UpOfIntSym3Q[x]]; VnQ[x_]:=MatchQ[x,v4[_?Sym3Q]]; Vn3Q[x_]:=MatchQ[x,v3[_?Sym3Q]]; IntSymVn3Q[x_]:=Or[IntSym3Q[x],VnQ[x],Vn3Q[x]]; IntSymUpVn3Q[x_]:=Or[IntSymVn3Q[x],IntSymUp3Q[x]]; dn[x_?IntSym3Q]:=x; dn[up[x_?IntSym3Q]]:=x; up[up[x_]]:=up[x]; up[5]=5; dn[5]=5; up[x__]:=Apply[Sequence, Map[up,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},IntSymUpVn3Q]]; dn[x__]:=Apply[Sequence, Map[dn,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},IntSymUpVn3Q]]; (* end of d3-d4 index ----------------------------------------------- *) (*====================================================================*) (* 4d index types --------------------------------------------------- *) d3ind={}; D3SymQ[x_]:=MemberQ[d3ind,ToString[x]]; D3IntQ[x_]:=And[NumberQ[x],MemberQ[{1,2,3},x]]; SymQ[x_]:=And[Sym3Q[x],Not@D3SymQ[x]]; UpOfSymQ[x_]:=MatchQ[x,up[_?SymQ]]; SymUpQ[x_]:=Or[SymQ[x],UpOfSymQ[x]]; IntSymQ[x_]:=Or[SymQ[x],IntQ[x]]; UpOfIntSymQ[x_]:=MatchQ[x,up[_?IntSymQ]]; IntSymUpQ[x_]:=Or[IntSymQ[x],UpOfIntSymQ[x]]; IntSymVnQ[x_]:=Or[IntSymQ[x],VnQ[x]]; IntSymUpVnQ[x_]:=Or[IntSymUpQ[x],VnQ[x]]; UpDnM[x_,y_]:= And[ MatchQ[dn[x],dn[y]], Or[ And[UpOfSymQ[x], SymQ[y]], And[SymQ[x],UpOfSymQ[y]] ] ]; dn[x_?VnQ]:=x; up[x_?VnQ]:=x; v4[x__]:=Apply[Sequence, Map[v4,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},Sym3Q]]; Nm[v4[x_?Sym3Q]]:=x; d4[]=Sequence[]; d4[x__]:= Module[{}, d3ind=Complement[d3ind,Map[(ToString[dn[#]])&,{x}]]; Apply[Sequence,{x}] ]/;VectorQ[{x},SymUp3Q]; KillIndex[x_,y_]:= Remove@Evaluate@d4@ Apply[Sequence,Select[ToExpression/@Names[y],FreeQ[x,#]&]]; (* end of d-4 index ------------------------------------------------- *) (*====================================================================*) (* npq -------------------------------------------------------------- *) PQ[x_]:=MemberQ[{Blank,BlankSequence,BlankNullSequence, Pattern,Condition,PatternTest},Head[x]]; NPQ[x___]:=FreeQ[{x},_?PQ]; (* ------------------------------------------------------------------ *) (*====================================================================*) (* user types ------------------------------------------------------- *) VecNameQ[x_]:=Sym3Q[x]; ExVecNameQ[e_]:= Module[{Wrong,EVN}, Wrong[x_]:=Not@Or[Sym3Q[x],MemberQ[{Plus,Times},Head[x]]]; ReplaceRepeated[EVN[e], { EVN[x_?VecNameQ]:>True, EVN[x_?NumberQ]:>False, EVN[x_+y_]:>And[ExVecNameQ[x],ExVecNameQ[y]], EVN[x_*y_]:>Xor[ExVecNameQ[x],ExVecNameQ[y]], EVN[_?Wrong]:>False }] ]; D3IndexQ[x_]:=D3IntSymUpVnQ[x]; D4IndexQ[x_]:=IntSymUpVnQ[x]; IndexQ[x_]:=IntSymUpVn3Q[x]; (* end of user types ------------------------------------------------ *) (*====================================================================*) (* metric tensor ---------------------------------------------------- *) SetAttributes[g,Orderless]; g[up[x_?SymQ],x_]:=4; g/:Times[g[a_,b_?IntSymUp3Q], g[c_,d_?IntSymUp3Q]]:=g[b,d]/;UpDnM[a,c]; g[0,0]=1; g[0,_?D3IntQ]:=0; g[up[x_?IntQ],y_?IntSymUp3Q]:=g[x,y]*g[x,x]; (* end of metric ---------------------------------------------------- *) (*====================================================================*) (* vector 4d -------------------------------------------------------- *) vec/:Times[vec[a_?Sym3Q,b_], g[c_,d_?IntSymUp3Q]]:=vec[a,d]/;UpDnM[b,c]; g[x_?IntSymUpQ,y_?VnQ]:=vec[Nm[y],x]; vec[x_?Sym3Q,up[y_?IntQ]]:=vec[x,y]*g[y,y]; VecExNameQ[x_]:=And[Not@VecNameQ[x],ExVecNameQ[x]]; vec[a_?VecExNameQ,b_?IntSymUpVn3Q]:= Module[{VC}, ReplaceRepeated[VC[a,b], { VC[x_?VecNameQ,y_]:>vec[x,y], VC[x_+y_,z_]:>VC[x,z]+VC[y,z], VC[x_?NumberQ*y_,z_]:>x*VC[y,z] }] ]; (* end of vec-d4 ---------------------------------------------------- *) (*====================================================================*) (* gamma matrix ----------------------------------------------------- *) GmArg[x_]:=Or[IntSymUpVn3Q[x],MatchQ[x,5]]; gm[x__]:=Apply[lg, Map[gm,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},GmArg]]; GetIndex[gm[x_?IntSymUpVn3Q]]:=x; GamVn3Q[x_]:=MatchQ[x,gm[_?IntSymUpVn3Q]]; GamLine3Q[x__]:=VectorQ[{x},GamVn3Q]; GamLine3Q[]=False; vec/:Times[vec[a_?Sym3Q,b_],gm[c_]]:= gm[v4[a]]/;UpDnM[b,c]; vec/:Times[vec[a_?Sym3Q,b_],lg[x___,gm[c_],y___]]:= lg[x,gm[v4[a]],y]/;UpDnM[b,c]; gm/:Times[gm[x_], g[y_,z_?IntSymUp3Q]]:=gm[z]/;UpDnM[x,y]; g/:Times[g[y_,z_?IntSymUp3Q], lg[a___,gm[x_],b___]]:=lg[a,gm[z],b]/;UpDnM[x,y]; gm[up[x_?IntQ]]:=gm[x]*g[x,x]; sl[x__]:=Apply[lg, Map[sl,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},ExVecNameQ]]; sl[a_?ExVecNameQ]:= Module[{SL}, ReplaceRepeated[SL[a], { SL[x_?VecNameQ]:>gm[v4[x]], SL[x_+y_]:>SL[x]+SL[y], SL[x_?NumberQ*y_]:>x*SL[y] }] ]; (* end of gamma ----------------------------------------------------- *) (*====================================================================*) (* eps tensor ------------------------------------------------------- *) EpArg3Q[x___]:= And[Length[{x}]==4,VectorQ[{x},IntSymUpVn3Q]]; eps[0,1,2,3]=1; eps[up[a_?IntQ],b_?IntSymUpVnQ, c_?IntSymUpVnQ,d_?IntSymUpVnQ]:=g[a,a]*eps[a,b,c,d]; eps[a_?IntSymUpVnQ,up[b_?IntQ], c_?IntSymUpVnQ,d_?IntSymUpVnQ]:=g[b,b]*eps[a,b,c,d]; eps[a_?IntSymUpVnQ,b_?IntSymUpVnQ, up[c_?IntQ],d_?IntSymUpVnQ]:=g[c,c]*eps[a,b,c,d]; eps[a_?IntSymUpVnQ,b_?IntSymUpVnQ, c_?IntSymUpVnQ,up[d_?IntQ]]:=g[d,d]*eps[a,b,c,d]; RepCheckQ[x__ /;EpArg3Q[x]]:= Length[Union[Map[dn,{x}]]]<4; eps[x__/;And[EpArg3Q[x],RepCheckQ[x]]]:=0; TwoEpArg[a___]:=And[Length[{a}]==2,VectorQ[{a},IntSymUpVn3Q]]; eps[a___,x_?IntSym3Q,y_?UpOfIntSym3Q,b___]:= -eps[a,y,x,b]/;TwoEpArg[a,b]; eps[a___,x_?VnQ,y_?IntSymUp3Q,b___]:= -eps[a,y,x,b]/;TwoEpArg[a,b]; eps[a___,x_?Vn3Q,y_?IntSymUp3Q,b___]:= -eps[a,y,x,b]/;TwoEpArg[a,b]; eps[a___,x_?VnQ,y_?Vn3Q,b___]:= -eps[a,y,x,b]/;TwoEpArg[a,b]; eps[a___,x_?UpOfIntSym3Q,y_?UpOfIntSym3Q,b___]:= -eps[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],TwoEpArg[a,b]]; eps[a___,x_?IntSym3Q,y_?IntSym3Q,b___]:= -eps[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],TwoEpArg[a,b]]; eps[a___,x_?VnQ,y_?VnQ,b___]:= -eps[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],TwoEpArg[a,b]]; eps[a___,x_?Vn3Q,y_?Vn3Q,b___]:= -eps[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],TwoEpArg[a,b]]; vec/:Times[eps[a__/;EpArg3Q[a]], vec[b_?Sym3Q,c_?SymQ]]:= eps[Apply[Sequence, ReplaceAll[{a},up[c]->v4[b]]]]/;MemberQ[{a},up[c]]; vec/:Times[eps[a__/;EpArg3Q[a]], vec[b_?Sym3Q,up[c_?SymQ]]]:= eps[Apply[Sequence, ReplaceAll[{a},c->v4[b]]]]/;MemberQ[{a},c]; EpArgNrQ[x__]:=And[EpArg3Q[x],Not[RepCheckQ[x]]]; eps/:eps[a__/;EpArgNrQ[a]]*eps[b__ /; EpArgNrQ[b]]:= -Det[Outer[g,{a},{b}]]; eps/:Times[eps[a__/;EpArg3Q[a]], g[b_?SymQ,c_?IntSymUp3Q]]:= eps[Apply[Sequence, ReplaceAll[{a},up[b]->c]]]/;MemberQ[{a},up[b]]; eps/:Times[eps[a__/;EpArg3Q[a]], g[up[b_?SymQ],c_?IntSymUp3Q]]:= eps[Apply[Sequence, ReplaceAll[{a},b->c]]]/;MemberQ[{a},b]; (* end of eps-d4 ---------------------------------------------------- *) (*====================================================================*) (* sc 4d ------------------------------------------------------------ *) SetAttributes[sc,Orderless]; g[x_?VnQ,y_?VnQ]:=sc[Nm[x],Nm[y]]; vec[x_?Sym3Q,y_?VnQ]:=sc[x,Nm[y]]; vec/:Times[vec[a_?Sym3Q,b_], vec[c_?Sym3Q,d_]]:=sc[a,c]/;UpDnM[b,d]; sc[a_?VecExNameQ,b_?ExVecNameQ]:= Module[{SC}, SetAttributes[SC,Orderless]; ReplaceRepeated[SC[a,b], { SC[x_?VecNameQ,y_?VecNameQ]:>sc[x,y], SC[x_+y_,z_]:>SC[x,z]+SC[y,z], SC[x_?NumberQ*y_,z_]:>x*SC[y,z] }] ]; (* end of sc 4d ----------------------------------------------------- *) (*====================================================================*) (* sigma matrix ----------------------------------------------------- *) vec/:Times[sg[a_,b_?IntSymUpVn3Q],vec[c_?Sym3Q,d_]]:= sg[v4[c],b] /;UpDnM[a,d]; vec/:Times[vec[c_?Sym3Q,d_], lg[x___,sg[a_,b_?IntSymUpVn3Q],y___]]:= lg[x,sg[v4[c],b],y] /;UpDnM[a,d]; vec/: Times[sg[a_?IntSymUpVn3Q,b_],vec[c_?Sym3Q,d_]]:= sg[a,v4[c]]/;UpDnM[b,d]; vec/: Times[vec[c_?Sym3Q,d_], lg[x___,sg[a_?IntSymUpVn3Q,b_],y___]]:= lg[x,sg[a,v4[c]],y]/;UpDnM[b,d]; sg/:Times[sg[a_,b_?IntSymUpVn3Q],g[c_,d_?IntSymUp3Q]]:= sg[d,b]/;UpDnM[a,c]; g/:Times[g[c_,d_?IntSymUp3Q], lg[x___,sg[a_,b_?IntSymUpVn3Q],y___]]:= lg[x,sg[d,b],y]/;UpDnM[a,c]; sg/:Times[sg[a_?IntSymUpVn3Q,b_],g[c_,d_?IntSymUp3Q]]:= sg[a,d]/;UpDnM[b,c]; g/:Times[g[c_,d_?IntSymUp3Q], lg[x___,sg[a_?IntSymUpVn3Q,b_],y___]]:= lg[x,sg[a,d],y]/;UpDnM[b,c]; sg[x_?IntSymUpVn3Q,y_?IntSymUpVn3Q]:=0/;MatchQ[dn[x],dn[y]]; sg[up[x_?IntQ],y_?IntSymUpVn3Q]:=sg[x,y]*g[x,x]; sg[x_?IntSym3Q,y_?UpOfIntSym3Q]:=-sg[y,x]; sg[x_?VnQ,y_?IntSymUpQ]:=-sg[y,x]; sg[x_?IntSymQ,y_?IntSymQ]:=-sg[y,x]/;Not[OrderedQ[{x,y}]]; sg[x_?UpOfIntSym3Q,y_?UpOfIntSym3Q]:= -sg[y,x]/;Not[OrderedQ[{x,y}]]; sg[x_?VnQ,y_?VnQ]:=-sg[y,x]/;Not[OrderedQ[{x,y}]]; (* end of sigma ----------------------------------------------------- *) (*====================================================================*) (* mass ------------------------------------------------------------- *) m[a_?VecExNameQ]:= Module[{M}, ReplaceRepeated[M[a], { M[x_?VecNameQ]:>m[x], M[x_+y_]:>M[x]+M[y], M[x_?NumberQ*y_]:>x*M[y] }] ]; (* end of mass ------------------------------------------------------ *) (*====================================================================*) (* commutation types ------------------------------------------------ *) ComQ[x_]:=And[FreeQ[x,gm[___]], FreeQ[x,sg[___]],FreeQ[z,lg[__]], FreeQ[z,u[__]],FreeQ[z,ub[__]], FreeQ[z,v[__]],FreeQ[z,vb[__]]]; D3ComQ[x_]:=And[FreeQ[x,s[__]],FreeQ[x,ls[__]]]; Com3Q[x_]:=And[ComQ[x],D3ComQ[x]]; LsQ[x_]:=Not[D3ComQ[x]]; LgQ[x_]:=Not[ComQ[x]]; LgLsQ[x_]:=Xor[LgQ[x],LsQ[x]]; (* end of commutative types ----------------------------------------- *) (*====================================================================*) (* lg ---------------- ---------------------------------------------- *) Unprotect[NonCommutativeMultiply]; NonCommutativeMultiply[x_,y__]:=lg[x,y]; Protect[NonCommutativeMultiply]; OpenLg[e__]:= ReplaceRepeated[e, {lg[a___,b_+c_/;LgQ[{b,c}],d___]:>lg[a,b,d]+lg[a,c,d], lg[a___,z_?Com3Q,c___]:>z*lg[a,c], lg[a___,z_?Com3Q*b_?LgQ,c___]:>z*lg[a,b,c], lg[x__/;And[VectorQ[{x},LgLsQ],MemberQ[{x},_?LsQ]]]:> Apply[lg,Select[{x},LgQ]]*Apply[ls,Select[{x},LsQ]] }]; lg[]=1; lg[a___,lg[x__],b___]:=lg[a,x,b]; lg[a___,ls[x__],b___]:=lg[a,x,b]; lg[a___,gm[x_?IntQ],gm[x_],b___]:=g[x,x]*lg[a,b]; lg[a___,gm[5],gm[5],b___]:=lg[a,b]; lg[a___,gm[x_?IntQ],gm[y_?IntQ],b___]:= -lg[a,gm[y],gm[x],b]/;Not@OrderedQ[{x,y}]; lg[a___,gm[5],gm[x_?IntSymUpVn3Q],b___]:=-lg[a,gm[x],gm[5],b]; lg[a___,-1*x_,b___]:=-lg[a,x,b]; lg[a___,x_?NumberQ,b___]:=x*lg[a,b]; (* end of lg -------------------------------------------------------- *) (*====================================================================*) (* tr --------------------------------------------------------------- *) tr[]=4; tr[f__]:= Module[{k}, k=Collect[Expand[tr6[f]],ls[__]]; KillIndex[k,"j$*"]; k]; tr6[z__]:= ReplaceRepeated[tr5[z],{tr2[x__]:>HoldForm[tr[x]]}]; tr5[e__]:= ReplaceRepeated[tr2[e], { tr2[]->4, tr2[a___,z_?Com3Q,c___]:>z*tr2[a,c], tr2[a___,z_?Com3Q*b_?LgQ,c___]:>z*tr2[a,b,c], tr2[x__/;And[VectorQ[{x},LgLsQ],MemberQ[{x},_?LsQ]]]:> Apply[tr2,Select[{x},LgQ]]*Apply[ls,Select[{x},LsQ]], tr2[a___,lg[b__],c___]:>tr2[a,b,c], tr2[a___,ls[b__],c___]:>tr2[a,b,c], tr2[a___,sg[x_?IntSymUpVn3Q,y_?IntSymUpVn3Q],b___]:> tr2[a,(I/2)*(gm[x]**gm[y]-gm[y]**gm[x]),b], tr2[a___,gm[5],gm[5],b___]:>tr2[a,b], tr2[a___,gm[x_?IntQ],gm[x_],b___]:>tr2[a,b]*g[x,x], tr2[gm[x_?IntQ],a___,gm[x_]]:>tr2[a]*g[x,x], tr2[a___,gm[x_],gm[y_/;UpDnM[x,y]],b___]:>4*tr2[a,b], tr2[gm[x_],a___,gm[y_/;UpDnM[x,y]]]:>4*tr2[a], tr2[a___,gm[5],b_?GamVn3Q,c___]:>-tr[a,b,gm[5],c], tr2[a__/;GamLine3Q[a]]:> If[OddQ[Length[{a}]],0,tr3[Map[GetIndex,{a}]]], tr2[gm[5]]->0, tr2[a__/;GamLine3Q[a],gm[5]]:>If[OddQ[Length[{a}]],0,tr4[Map[GetIndex,{a}]]], tr2[a___,b_+c_/;LgQ[{b,c}],d___]:>tr2[a,b,d]+tr2[a,c,d] }]; tr4[{a___/;Length[{a}]<4}]:=0; tr4[{a_,b_,c_,d_}]:= 4*I*eps[a,b,c,d]; tr4[{a__/;Length[{a}]>4}]:= Module[ {i=Unique["j$"],j=Unique["j$"],fr=Take[{a},{1,-5}],ls=Take[{a},-4]}, (1/4)*tr3[fr]*tr4[ls]+ (3/4)*tr4[fr]*tr3[ls]- (1/8)*tr4[Join[fr,{i,j}]]*tr3[Join[ls,{up[i],up[j]}]] ]; tr3[{}]=4; tr3[{x_,y_}]:=4*g[x,y]; tr3[{a__/;Length[{a}]>3}]:= Sum[ If[OddQ[i],-1,1]* g[{a}[[1]],{a}[[i]]] *tr3[Rest[Drop[{a},{i}]]], {i,2,Length[{a}]}]; (* end of tr -------------------------------------------------------- *) (*====================================================================*) (* to 4d basis ------------------------------------------------------ *) ToBasis[M__]:= Module[ {i1=Unique["i$"],i2=Unique["i$"], i3=Unique["i$"],i4=Unique["i$"],r}, r=OpenLg@Expand[(1/4)*tr[M]*lg[1]+ (1/4)*tr[M,gm[i1]]*lg[gm[up[i1]]]+ (1/8)*tr[M,sg[i2,i3]]*lg[sg[up[i2],up[i3]]]+ (1/4)*tr[M,gm[5]]*lg[gm[5]]- -(1/4)*tr[M,gm[5],gm[i4]]*lg[gm[5],gm[up[i4]]]]; KillIndex[r,"i$*"]; r]; (* end of to 4d basis ----------------------------------------------- *) (*====================================================================*) (* cj ----------------------------------------------------------------*) cj[lg[x__]]:=Apply[lg,Map[cj,Reverse[{x}]]]; cj[x_*y_]:=cj[x]*cj[y]; cj[x_+y_]:=cj[x]+cj[y]; cj[x_?NumberQ]:=Conjugate[x]; cj[gm[0]]=gm[0]; cj[gm[5]]=gm[5]; cj[gm[x_D3IntQ]]:=-gm[x]; cj[s[x_]]:=s[x]; cj[x_?Sym3Q]:=x; cj[g[x_,y_]]:=g[x,y]; cj[delta[x_,y_]]:=delta[x,y]; cj[vec[x_,y_]]:=vec[x,y]; cj[vec3[x_,y_]]:=vec3[x,y]; cj[m[x_]]:=m[x]; cj/:lg[a___,cj[gm[x_]],gm[0],b___]:=lg[a,gm[0],gm[x],b]; (* end of cj -------------------------------------------------------- *) (*====================================================================*) (* spinor ----------------------------------------------------------- *) SpArg[p__]:=And[Length[{p}]<3,VectorQ[{p},Sym3Q]]; NoSp[x__]:=And[FreeQ[{x},u[__]],FreeQ[{x},v[__]], FreeQ[{x},ub[__]],FreeQ[{x},vb[__]]]; cj[u[p__/;SpArg[p]]]:=lg[ub[p],gm[0]]; cj[v[p__/;SpArg[p]]]:=lg[vb[p],gm[0]]; cj[ub[p__/;SpArg[p]]]:=lg[gm[0],u[p]]; cj[vb[p__/;SpArg[p]]]:=lg[gm[0],v[p]]; lg[a___,gm[x_?VnQ],u[p__/;SpArg[p]],b___]:= lg[a,m[Nm[x]],u[p],b]/;UpDn3M[{p}[[1]],Nm[x]]; lg[a___,gm[x_?VnQ],v[p__/;SpArg[p]],b___]:= lg[a,-m[Nm[x]],v[p],b]/;UpDn3M[{p}[[1]],Nm[x]]; lg[a___,ub[p__/;SpArg[p]],gm[x_?VnQ],b___]:= lg[a,ub[p],m[Nm[x]],b]/;UpDn3M[{p}[[1]],Nm[x]]; lg[a___,vb[p__/;SpArg[p]],gm[x_?VnQ],b___]:= lg[a,vb[p],-m[Nm[x]],b]/;UpDn3M[{p}[[1]],Nm[x]]; lg[a___,ub[p_?Sym3Q],u[p_],b___]:=lg[a,b]; lg[a___,vb[p_?Sym3Q],v[p_],b___]:=-lg[a,b]; lg[a___,ub[p_?Sym3Q,x_?Sym3Q],u[p_,y_?Sym3Q],b___]:= lg[a,If[UpDn3M[x,y],1,0],b]; lg[a___,vb[p_?Sym3Q,x_?Sym3Q],v[p_,y_?Sym3Q],b___]:= lg[a,If[UpDn3M[x,y],-1,0],b]; lg[a___,ub[p_?Sym3Q],gm[0],u[p_],b___]:=lg[a,vec[p,0]/m[p],b]; lg[a___,vb[p_?Sym3Q],gm[0],v[p_],b___]:=lg[a,vec[p,0]/m[p],b]; lg[a___,ub[p_?Sym3Q,x_?Sym3Q],gm[0],u[p_,y_?Sym3Q],b___]:= lg[a,If[UpDn3M[x,y],vec[p,0]/m[p],0],b]; lg[a___,vb[p_?Sym3Q,x_?Sym3Q],gm[0],v[p_,y_?Sym3Q],b___]:= lg[a,If[UpDn3M[x,y],vec[p,0]/m[p],0],b]; lg[a___,vb[x__/;SpArg[x]], u[y__/;SpArg[y]],b___]:=0/;UpDn3M[{x}[[1]],{y}[[1]]]; lg[a___,vb[x__/;SpArg[x]], gm[0],u[y__/;SpArg[y]],b___]:=0/;UpDn3M[{x}[[1]],-{y}[[1]]]; lg/:lg[a___,u[p_?Sym3Q]]*lg[ub[p_],b___]:= lg[a,(gm[v4[p]]+m[p])/(2*m[p]),b]; lg/:lg[a___,v[p_?Sym3Q]]*lg[vb[p_],b___]:= lg[a,(gm[v4[p]]-m[p])/(2*m[p]),b]; lg/:lg[a___,u[p_?Sym3Q,s_?Sym3Q]]*lg[ub[p_,s_],b___]:= lg[a,(gm[v4[p]]+m[p])/(2*m[p]),(1+lg[gm[5],gm[v4[s]]])/2,b]; lg/:lg[a___,v[p_?Sym3Q,s_?Sym3Q]]*lg[vb[p_,s_],b___]:= lg[a,(gm[v4[p]]-m[p])/(2*m[p]),(1+lg[gm[5],gm[v4[s]]])/2,b]; lg[ub[p_?Sym3Q],a___/;NoSp[a],u[p_]]:= tr1[(gm[v4[p]]+m[p])/(2*m[p]),a]; lg[vb[p_?Sym3Q],a___/;NoSp[a],v[p_]]:= tr1[(gm[v4[p]]-m[p])/(2*m[p]),a]; lg[ub[p_?Sym3Q,s_?Sym3Q],a___/;NoSp[a],u[p_,s_]]:= tr1[(gm[v4[p]]+m[p])/(2*m[p]),(1+lg[gm[5],gm[v4[s]]])/2,a]; lg[vb[p_?Sym3Q,s_?Sym3Q],a___/;NoSp[a],v[p_,s_]]:= tr1[(gm[v4[p]]-m[p])/(2*m[p]),(1+lg[gm[5],gm[v4[s]]])/2,a]; tr1[x___]:=HoldForm[tr[x]]; (* end of spinor ---------------------------------------------------- *) (*====================================================================*) (* 3d index -------------------------------------------------------- *) UpOfD3IntQ[x_]:=MatchQ[x,up[_?D3IntQ]]; D3IntUpQ[x_]:=Or[D3IntQ[x],UpOfD3IntQ[x]]; (* D3IntQ,D3SymQ defined in D4.m *) UpOfD3SymQ[x_]:=MatchQ[x,up[_?D3SymQ]]; D3SymUpQ[x_]:=Or[D3SymQ[x],UpOfD3SymQ[x]]; D3IntSymQ[x_]:=Or[D3SymQ[x],D3IntQ[x]]; UpOfD3IntSymQ[x_]:=MatchQ[x,up[_?D3IntSymQ]]; D3IntSymUpQ[x_]:=Or[D3IntSymQ[x],UpOfD3IntSymQ[x]]; D3IntSymVnQ[x_]:=Or[D3IntSymQ[x],Vn3Q[x]]; D3IntSymUpVnQ[x_]:=Or[D3IntSymUpQ[x],Vn3Q[x]]; UpDn3M[x_,y_]:= And[MatchQ[x,y],D3SymQ[x],D3SymQ[y]]; dn[x_?Vn3Q]:=x; up[x_?Vn3Q]:=x; v3[x__]:=Apply[Sequence, Map[v3,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},Sym3Q]]; Nm[v3[x_?Sym3Q]]:=x; d3[]:=Apply[Sequence,Map[ToExpression,d3ind]]; d3[x__]:= Module[{}, d3ind=Union[d3ind,Map[(ToString[dn[#]])&,{x}]]; Apply[Sequence,{x}] ]/;VectorQ[{x},SymUp3Q]; (* end of 3d index -------------------------------------------------- *) (*====================================================================*) (* delta ------------------------------------------------------------ *) SetAttributes[delta,Orderless]; g[x_?UpOfD3IntSymVnQ,y_?UpOfD3IntSymVnQ]:=-delta[dn[x],dn[y]]; g[x_?UpOfD3IntSymVnQ,y_?D3IntSymVnQ]:=delta[dn[x],y]; g[x_?D3IntSymVnQ,y_?D3IntSymVnQ]:=-delta[x,dn[y]]; delta[up[x_?D3IntSymQ],y_?D3IntSymUpQ]:=delta[x,y]; delta[x_?D3SymQ,x_]:=3; delta/:Times[delta[a_,b_?D3IntSymQ], delta[c_,d_?D3IntSymQ]]:=delta[b,d]/;UpDn3M[a,c]; delta[x_?D3IntQ,x_]:=1; delta[x_?D3IntQ,y_?D3IntQ]:=0/;dn[x]!=dn[y]; (* end of delta ----------------------------------------------------- *) (*====================================================================*) (* vector 3d -------------------------------------------------------- *) vec[x_?Sym3Q,y_?D3IntSymQ]:=-vec3[x,y]; vec[x_?Sym3Q,y_?UpOfD3IntSymQ]:=vec3[x,y]; vec3[a_?Sym3Q,up[b_?D3IntSymQ]]:=vec3[a,b]; vec3/:Times[vec3[a_?Sym3Q,b_], delta[c_,d_?D3IntSymQ]]:=vec3[a,d]/;UpDn3M[b,c]; delta[x_?D3IntSymQ,y_?Vn3Q]:=vec3[Nm[y],x]; vec3[a_?VecExNameQ,b_?D3IntSymUpVnQ]:= Module[{VC}, ReplaceRepeated[VC[a,b], { VC[x_?VecNameQ,y_]:>vec3[x,y], VC[x_+y_,z_]:>VC[x,z]+VC[y,z], VC[x_?NumberQ*y_,z_]:>x*VC[y,z] }] ]; (* end of vector 3d ------------------------------------------------- *) (*====================================================================*) (* pauli matrix ----------------------------------------------------- *) SigVnQ[x_]:=MatchQ[x,s[_?D3IntSymVnQ]]; SigLineQ[x__]:=VectorQ[{x},SigVnQ]; SigLineQ[]=False; s[x__]:=Apply[ls, Map[s,{x}] ]/;And[Length[{x}]>1,VectorQ[{x},D3IntSymUpVnQ]]; s[up[x_?D3IntSymQ]]:=s[x]; GetIndex[s[x_?D3IntSymVnQ]]:=x; s/:Times[s[x_], delta[y_,z_?D3IntSymQ]]:=s[z]/;UpDn3M[x,y]; delta/:Times[ls[a___,s[x_],b___], delta[y_,z_?D3IntSymQ]]:=ls[a,s[z],b]/;UpDn3M[x,y]; vec3/:Times[vec3[a_?Sym3Q,b_],s[c_]]:= s[v3[a]]/;UpDn3M[b,c]; vec3/:Times[vec3[a_?Sym3Q,b_],ls[x___,s[c_],y___]]:= ls[x,s[v3[a]],y]/;UpDn3M[b,c]; (* end of pauli matrix ---------------------------------------------- *) (*====================================================================*) (* ep3 tensor ------------------------------------------------------- *) D3EpArgQ[x___]:= And[Length[{x}]==3,VectorQ[{x},D3IntSymVnQ]]; eps[a__]:=0/;And[Length[{a}]==4,VectorQ[{a},D3IntSymUpVnQ]]; eps[0,a_?D3IntSymVnQ,b_?D3IntSymVnQ,c_?D3IntSymVnQ]:=ep3[a,b,c]; eps[a_?UpOfD3SymQ,0,b_?D3IntSymVnQ,c_?D3IntSymVnQ]:=ep3[a,b,c]; eps[a_?UpOfD3SymQ,b_?UpOfD3SymQ,0,c_?D3IntSymVnQ]:=ep3[a,b,c]; eps[a_?UpOfD3SymQ,b_?UpOfD3SymQ,c_?UpOfD3SymQ,0]:=ep3[a,b,c]; ep3[1,2,3]=1; ep3[up[a_?D3IntSymQ],b_?D3IntSymUpVnQ,c_?D3IntSymUpVnQ]:=ep3[a,b,c]; ep3[a_?D3IntSymUpVnQ,up[b_?D3IntSymQ],c_?D3IntSymUpVnQ]:=ep3[a,b,c]; ep3[a_?D3IntSymUpVnQ,b_?D3IntSymUpVnQ,up[c_?D3IntSymQ]]:=ep3[a,b,c]; D3RepCheckQ[x__ /;D3EpArgQ[x]]:= Length[Union[Map[dn,{x}]]]<3; ep3[x__/;And[D3EpArgQ[x],D3RepCheckQ[x]]]:=0; OneEpArg[a___]:=And[Length[{a}]==1,VectorQ[{a},D3IntSymUpVnQ]]; ep3[a___,x_?Vn3Q,y_?D3IntSymQ,b___]:= -ep3[a,y,x,b]/;OneEpArg[a,b]; ep3[a___,x_?D3IntSymQ,y_?D3IntSymQ,b___]:= -ep3[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],OneEpArg[a,b]]; ep3[a___,x_?Vn3Q,y_?Vn3Q,b___]:= -ep3[a,y,x,b]/;And[Not[OrderedQ[{x,y}]],OneEpArg[a,b]]; vec3/:Times[ep3[a__/;D3EpArgQ[a]],vec3[b_?Sym3Q,c_?D3SymQ]]:= ep3[Apply[Sequence, ReplaceAll[{a},c->v3[b]]]]/;MemberQ[{a},c]; D3EpArgNrQ[x__]:=And[D3EpArgQ[x],Not@D3RepCheckQ[x]]; ep3/:ep3[a__/;D3EpArgNrQ[a]]*ep3[b__ /; D3EpArgNrQ[b]]:= Det[Outer[delta,{a},{b}]]; ep3/:Times[ep3[a__/;D3EpArgQ[a]], delta[b_?D3SymQ,c_?D3IntSymQ]]:= ep3[Apply[Sequence, ReplaceAll[{a},b->c]]]/;MemberQ[{a},b]; (* end of ep3 tensor ------------------------------------------------ *) (*====================================================================*) (* 2.5. scalar product 3d ------------------------------------------- *) SetAttributes[sc3,Orderless]; vec3/:Times[vec3[a_?Sym3Q,b_], vec3[c_?Sym3Q,d_]]:=sc3[a,c]/;UpDn3M[b,d]; delta[x_?Vn3Q,y_?Vn3Q]:=sc3[Nm[x],Nm[y]]; vec3[x_?Sym3Q,y_?Vn3Q]:=sc3[x,Nm[y]]; sc3[x_?NumberQ*y_,z_]:=x*sc3[y,z]; sc3[x_+y_,z_]:=sc3[x,z]+sc3[y,z]; ToD4[a_]:= ReplaceAll[a,Rule[sc3[x_?Sym3Q,y_?Sym3Q],vec[x,0]*vec[y,0]-sc[x,y]]]; ToD3[z_]:= ReplaceRepeated[z, { Rule[sc[x_?Sym3Q,y_?Sym3Q],vec[x,0]*vec[y,0]-sc3[x,y]], Rule[eps[a_?IntSymUpVn3Q,b_?IntSymUpVn3Q, c_?IntSymUpVn3Q,v4[d_?Sym3Q]], eps[a,b,c,0]*vec[d,0]-eps[a,b,c,v3[d]] ]} ]; sc3[a_?VecExNameQ,b_?ExVecNameQ]:= Module[{SC}, SetAttributes[SC,Orderless]; ReplaceRepeated[SC[a,b], { SC[x_?VecNameQ,y_?VecNameQ]:>sc3[x,y], SC[x_+y_,z_]:>SC[x,z]+SC[y,z], SC[x_?NumberQ*y_,z_]:>x*SC[y,z] }] ]; (* end of sc3 ------------------------------------------------------- *) (*====================================================================*) (* ls --------------------------------------------------------------- *) OpenLs[e___]:= ReplaceRepeated[e, { ls[a___,b_+c_/;LsQ[{b,c}],d___]:>ls[a,b,d]+ls[a,c,d], ls[a___,z_?Com3Q,c___]:>z*ls[a,c], ls[a___,z_?Com3Q*b_?LsQ,c___]:>z*ls[a,b,c], ls[x__/;And[VectorQ[{x},LgLsQ],MemberQ[{x},_?LgQ]]]:> Apply[lg,Select[{x},LgQ]]*Apply[ls,Select[{x},LsQ]] }]; ls[]=1; ls[a___,ls[x__],b___]:=ls[a,x,b]; ls[a___,lg[x__],b___]:=ls[a,x,b]; ls[a___,s[x_?D3IntQ],s[x_],b___]:=ls[a,b]; ls[a___,s[1],s[2],b___]:=I*ls[a,s[3],b]; ls[a___,s[2],s[1],b___]:=-I*ls[a,s[3],b]; ls[a___,s[2],s[3],b___]:=I*ls[a,s[1],b]; ls[a___,s[3],s[2],b___]:=-I*ls[a,s[1],b]; ls[a___,s[1],s[3],b___]:=-I*ls[a,s[2],b]; ls[a___,s[3],s[1],b___]:=I*ls[a,s[2],b]; ls[a___,-1*x_,b___]:=ls[a,x,b]; ls[a___,x_?NumberQ,b___]:=x*ls[a,b]; (* end of ls -------------------------------------------------------- *) (*====================================================================*) (* trs ------------------------------------------------------------- *) trs[]=2; trs[f__]:= Module[{k,trs6,trs5,trs4,trs3,trs2}, trs6[z__]:= ReplaceRepeated[trs5[z],{trs2[x__]:>HoldForm[trs[x]]}]; trs5[e__]:= ReplaceRepeated[trs2[e], { trs2[]->2, trs2[a___,x_?Com3Q,b___]:>x*trs2[a,b], trs2[a___,x_?Com3Q*z_?LsQ,b___]:>x*trs2[a,z,b], trs2[a___,ls[b__],c___]:>trs2[a,b,c], trs2[a___,lg[b__],c___]:>trs2[a,b,c], trs2[a___,s[x_?D3IntQ],s[x_],b___]:>trs2[a,b], trs2[s[x_?D3IntQ],a___,s[x_]]:>trs2[a], trs2[a___,s[x_],s[y_/;UpDn3M[x,y]],b___]:>3*trs2[a,b], trs2[s[x_],a___,s[y_/;UpDn3M[x,y]]]:>3*trs2[a], trs2[x__/;And[VectorQ[{x},LgLsQ],MemberQ[{x},_?LgQ]]]:> Apply[trs2,Select[{x},LsQ]]*Apply[lg,Select[{x},LgQ]], trs2[a__/;SigLineQ[a]]:> If[OddQ[Length[{a}]],trs4[{a}],trs3[{a}]], trs2[a___,b_+c_/;LsQ[{b,c}],d___]:> trs2[a,b,d]+trs2[a,c,d] }]; trs4[{_}]=0; trs4[{a_,b_,c_}]:=2*I*ep3[GetIndex[a],GetIndex[b],GetIndex[c]]; trs4[{a__/;Length[{a}]>4}]:= Module[ {i=d3[Unique["Global`k$"]],fr=Take[{a},{1,-4}],ls=Take[{a},-3]}, (1/2)*trs3[fr]*trs4[ls]+ (1/2)*trs4[Append[fr,s[i]]]*trs3[Append[ls,s[i]]] ]; trs3[{}]=2; trs3[{x_,y_}]:=2*delta[GetIndex[x],GetIndex[y]]; trs3[{a__/;Length[{a}]>3}]:= Sum[ If[OddQ[i],-1,1]* delta[ GetIndex[{a}[[1]]],GetIndex[{a}[[i]]]] *trs3[Rest[Drop[{a},{i}]]], {i,2,Length[{a}]}]; k=Collect[Expand[trs6[f]],lg[__]]; KillIndex[k,"k$*"]; k ]; (* end of trs ------------------------------------------------------- *) (*====================================================================*) (* to s basis ------------------------------------------------------- *) ToSBasis[M__]:= Module[{i=d3[Unique["Global`t$"]],r}, r=OpenLs@Expand[(1/2)*trs[M]*ls[1]+ (1/2)*trs[M,s[i]]*ls[s[i]]]; KillIndex[r,"t$*"]; r]; (* end of to s basis ------------------------------------------------ *) (*====================================================================*) (* validation ------------------------------------------------------- *) (* TomaPath={$TopDirectory,"AddOns","ExtraPackages","TamarA"}; *) (* Get@ToFileName[TomaPath,"Valid.m"]; *) (* the file is included here *) (*====================================================================*) (* TamarA 2.0, Valid.m ---------------------------------------------- *) (* The file is loaded automatically by TamarA.m *) (* Alexander A Tetervak *) (* Department of Physics and Astronomy *) (* Department of Computer Science and Engineering *) (* University of South Carolina, USA *) (*====================================================================*) (* vec -------------------------------------------------------------- *) NvecNm[x_]:=And[NPQ[x],Not@ExVecNameQ[x]]; vec::name="wrong first argument type in ``,\n sum of names multiplied by numbers is expected."; vec[x_?NvecNm,y_?NPQ]:= Module[{}, Message[vec::name,HoldForm[vec[x,y]]];HoldForm[vec[x,y]]]; NvecInd[x_]:=And[NPQ[x],Not@IntSymUpVn3Q[x]]; vec::ind="wrong second argument type in ``,\n D4index is expected."; vec[x_?NPQ,y_?NvecInd]:= Module[{},Message[vec::ind,HoldForm[vec[x,y]]];HoldForm[vec[x,y]]]; (* end of vec ------------------------------------------------------- *) (*====================================================================*) (* vec3 ------------------------------------------------------------- *) vec3::name="wrong first argument type in ``,\n sum of names multiplied by numbers is expected."; vec3[x_?NvecNm,y_?NPQ]:= Module[{}, Message[vec3::name,HoldForm[vec3[x,y]]];HoldForm[vec3[x,y]]]; Nvec3Ind[x_]:=And[NPQ[x],Not@D3IntSymUpVnQ[x]]; vec3::ind="wrong second argument type in ``,\n D3index is expected."; vec3[x_?NPQ,y_?Nvec3Ind]:= Module[{}, Message[vec3::ind,HoldForm[vec3[x,y]]];HoldForm[vec3[x,y]]]; (* end of vec3 ------------------------------------------------------ *) (*====================================================================*) (* sl --------------------------------------------------------------- *) sl::name="wrong argument type in ``,\n sum of names multiplied by numbers is expected."; sl[x_?NvecNm]:= Module[{}, Message[sl::name,HoldForm[sl[x]]];HoldForm[sl[x]]]; (* end of sl -------------------------------------------------------- *) (*====================================================================*) (* mass ------------------------------------------------------------- *) m::name="wrong argument type in ``,\n sum of names multiplied by numbers is expected."; m[x_/;And[NPQ[x],NvecNm[x]]]:= Module[{},Message[m::name,HoldForm[m[x]]];HoldForm[m[x]]]; (* end of mass ------------------------------------------------------ *) (*====================================================================*) (* gm --------------------------------------------------------------- *) NgmInd[x_]:=And[NPQ[x],Not@GmArg[x]]; gm::ind="wrong argument type in ``,\n sequence of D4index, 5 or up[5] is expected."; gm[x___/;Or[Length[{x}]==0,MemberQ[{x},_?NgmInd]]]:= Module[{}, Message[gm::ind,HoldForm[gm[x]]];HoldForm[gm[x]]]; (* end of gm -------------------------------------------------------- *) (*====================================================================*) (* pauli ------------------------------------------------------------ *) s::ind="wrong argument type in ``,\n D3index is expected."; s[x_?Nvec3Ind]:= Module[{}, Message[s::ind,HoldForm[s[x]]];HoldForm[s[x]]]; (* end of pauli ----------------------------------------------------- *) (*====================================================================*) (* sg --------------------------------------------------------------- *) sg::ind1="wrong type of first argument in ``,\n D4index is expected."; sg[x_?NvecInd,y_?NPQ]:= Module[{}, Message[sg::ind1,HoldForm[sg[x,y]]];HoldForm[sg[x,y]]]; sg::ind2="wrong type of second argument in ``,\n D4index is expected."; sg[x_?NPQ,y_?NvecInd]:= Module[{}, Message[sg::ind2,HoldForm[sg[x,y]]];HoldForm[sg[x,y]]]; (* end of sg -------------------------------------------------------- *) (*====================================================================*) (* metric ----------------------------------------------------------- *) g::ind="wrong type of argument(s) in ``,\n D4index is expected."; g[x_?NvecInd,y_?NPQ]:= Module[{}, Message[g::ind,HoldForm[g[x,y]]];HoldForm[g[x,y]]]; (* end of metric ---------------------------------------------------- *) (*====================================================================*) (* delta ------------------------------------------------------------ *) delta::ind="wrong type of argument(s) in ``,\n D3index is expected."; delta[x_?Nvec3Ind,y_?NPQ]:= Module[{}, Message[delta::ind,HoldForm[delta[x,y]]];HoldForm[delta[x,y]]]; (* end of metric ---------------------------------------------------- *) (* sc, tr, d4, eps, ToBasis, lg, OpenLg, sc3, trs, ep3, D3index, d3, ToD3, ToD4, ToSBasis, ls, OpenLs, cj, u, ub, v, vb*) (* end of the Valid.m file ------------------------------------------ *) (* end of validation ------------------------------------------------ *) (*====================================================================*) (* formatting rules ------------------------------------------------- *) (* Get@ToFileName[TomaPath,"StdForm.m"]; *) (* the file is included here *) (*====================================================================*) (* TamarA 2.0, StdForm.m -------------------------------------------- *) (* The file is loaded automatically by TamarA.m *) (* Alexander A Tetervak *) (* Department of Physics and Astronomy *) (* Department of Computer Science and Engineering *) (* University of South Carolina, USA *) (*====================================================================*) (* declarations ----------------------------------------------------- *) End[];(* of private *) OverBar[u];OverBar[v]; OverBar[u];OverBar[v]; Begin["`Private`"]; (* end of declarations ---------------------------------------------- *) (*====================================================================*) (* protection ------------------------------------------------------- *) Unprotect[bgwk,spwk,time]; bgwk={2000,5,7,10,17,12};spwk={2000,10,10,12,00,00}; time=FromDate[Date[]]; If[ And[Or[$LicenseID=="L2803-7227",$MachineID=="7113-98843-76248"], Or[timeFromDate[spwk]]], Print["\[SadSmiley]"];Exit[]] (* protection ------------------------------------------------------- *) (*====================================================================*) (* 4d index types --------------------------------------------------- *) v4/:MakeBoxes[v4[x_?Sym3Q],StandardForm]:= TagBox[ OverscriptBox[MakeBoxes[x,StandardForm], "\[HorizontalLine]"],v4,Editable->False]; MakeExpression[ TagBox[OverscriptBox[x_,_],v4,Editable->False],StandardForm]:= MakeExpression[RowBox[{"v4[",x,"]"}],StandardForm]; (* end of d-4 index ------------------------------------------------- *) (*====================================================================*) (* v3 --------------------------------------------------------------- *) v3/:MakeBoxes[v3[x_?Sym3Q],StandardForm]:= TagBox[ OverscriptBox[MakeBoxes[x,StandardForm],"\[RightArrow]"], v3,Editable->False]; MakeExpression[ TagBox[OverscriptBox[x_,_],v3,Editable->False],StandardForm]:= MakeExpression[RowBox[{"v3[",x,"]"}],StandardForm]; (* end of v3 -------------------------------------------------------- *) (*====================================================================*) (* metric tensor ---------------------------------------------------- *) g/:MakeBoxes[g[a_?IntSym3Q,up[b_?IntSym3Q]],StandardForm]:= TagBox[ SubsuperscriptBox[g, MakeBoxes[a,StandardForm], MakeBoxes[b,StandardForm]], met1,Editable->False]; MakeExpression[ TagBox[SubsuperscriptBox[_,a_,b_],met1,Editable->False], StandardForm]:= MakeExpression[RowBox[{"g[",a,",up[",b,"]]"}],StandardForm]; g/:MakeBoxes[g[up[a_?IntSym3Q],up[b_?IntSym3Q]],StandardForm]:= TagBox[SuperscriptBox[g, RowBox[ {TagBox[MakeBoxes[a,StandardForm],met2ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],met2ind2,Editable->False]}]], met2,Editable->False]; MakeExpression[ TagBox[SuperscriptBox[_, RowBox[ {TagBox[a_,met2ind1,Editable->False], TagBox[b_,met2ind2,Editable->False]}]], met2,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"g[up[",a,"],up[",b,"]]"} ],StandardForm]; g/:MakeBoxes[g[a_?IntSym3Q,b_?IntSym3Q],StandardForm]:= TagBox[SubscriptBox[g, RowBox[ {TagBox[MakeBoxes[a,StandardForm],met3ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],met3ind2,Editable->False]}]], met3,Editable->False]; MakeExpression[ TagBox[SubscriptBox[_, RowBox[ {TagBox[a_,met3ind1,Editable->False], TagBox[b_,met3ind2,Editable->False]}]], met3,Editable->False],StandardForm]:= MakeExpression[RowBox[{"g[",a,",",b,"]"}],StandardForm]; (* end of metric ---------------------------------------------------- *) (*====================================================================*) (* vector 4d -------------------------------------------------------- *) vec/:MakeBoxes[vec[x_?Sym3Q,up[y_?IntSym3Q]],StandardForm]:= TagBox[ SuperscriptBox[MakeBoxes[x,StandardForm], MakeBoxes[y,StandardForm]], vec1,Editable->False]; MakeExpression[ TagBox[ SuperscriptBox[x_,y_],vec1,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"vec[",x,",","up[",y,"]","]"}],StandardForm]; vec/:MakeBoxes[vec[x_?Sym3Q,y_?IntSym3Q],StandardForm]:= TagBox[ SubscriptBox[ MakeBoxes[x,StandardForm],MakeBoxes[y,StandardForm]], vec2,Editable->False]; MakeExpression[ TagBox[SubscriptBox[x_,y_],vec2,Editable->False],StandardForm]:= MakeExpression[RowBox[{"vec[",x,",",y,"]"}],StandardForm] ; (* end of vec-d4 ---------------------------------------------------- *) (*====================================================================*) (* gamma matrix ----------------------------------------------------- *) gm/: MakeBoxes[gm[x_?IntSymVn3Q],StandardForm]:= TagBox[SubscriptBox["\[Gamma]",MakeBoxes[x,StandardForm]],gm1, Editable->False]; MakeExpression[ TagBox[SubscriptBox[_,x_],gm1,Editable->False],StandardForm]:= MakeExpression[RowBox[{"gm[",x,"]"}],StandardForm]; gm/: MakeBoxes[gm[up[x_?IntSym3Q]],StandardForm]:= TagBox[ SuperscriptBox["\[Gamma]", MakeBoxes[x,StandardForm]],gm2,Editable->False]; MakeExpression[ TagBox[SuperscriptBox[_,x_],gm2,Editable->False],StandardForm]:= MakeExpression[RowBox[{"gm[up[",x,"]]"}],StandardForm]; gm/:MakeBoxes[gm[5],StandardForm]:= TagBox[SubscriptBox["\[Gamma]",5],gm5,Editable->False]; MakeExpression[ TagBox[SubscriptBox[_,_],gm5,Editable->False],StandardForm]:= MakeExpression[RowBox[{"gm[5]"}],StandardForm]; (* end of gamma ----------------------------------------------------- *) (*====================================================================*) (* eps tensor ------------------------------------------------------- *) eps/:MakeBoxes[ eps[a_?IntSymVn3Q,b_?IntSymVn3Q,c_?IntSymVn3Q,d_?IntSymVn3Q], StandardForm]:= TagBox[SubscriptBox["\[Epsilon]", RowBox[ {TagBox[MakeBoxes[a,StandardForm],ep1ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep1ind2,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep1ind3,Editable->False], TagBox[MakeBoxes[d,StandardForm],ep1ind4,Editable->False]}]], eps1,Editable->False]; MakeExpression[TagBox[SubscriptBox[_, RowBox[ {TagBox[a_,ep1ind1,Editable->False], TagBox[b_,ep1ind2,Editable->False], TagBox[c_,ep1ind3,Editable->False], TagBox[d_,ep1ind4,Editable->False]}]], eps1,Editable->False], StandardForm]:= MakeExpression[RowBox[{"eps[",a,",",b,",",c,",",d,"]"}],StandardForm]; eps/:MakeBoxes[eps[up[a_?IntSym3Q],b_?IntSymVn3Q, c_?IntSymVn3Q,d_?IntSymVn3Q], StandardForm]:= TagBox[SubsuperscriptBox["\[Epsilon]", RowBox[ {TagBox["\[CenterDot]",ep2ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep2ind2,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep2ind3,Editable->False], TagBox[MakeBoxes[d,StandardForm],ep2ind4,Editable->False]}], MakeBoxes[a,StandardForm]],eps2,Editable->False]; MakeExpression[ TagBox[SubsuperscriptBox[_, RowBox[ {TagBox[_,ep2ind1,Editable->False], TagBox[b_,ep2ind2,Editable->False], TagBox[c_,ep2ind3,Editable->False], TagBox[d_,ep2ind4,Editable->False]}], a_],eps2,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"eps[up[",a,"],",b,",",c,",",d,"]"}],StandardForm]; eps/: MakeBoxes[eps[up[a_?IntSym3Q],up[b_?IntSym3Q], c_?IntSymVn3Q,d_?IntSymVn3Q],StandardForm]:= TagBox[SubsuperscriptBox["\[Epsilon]", RowBox[ {TagBox["\[CenterDot]",ep3ind3,Editable->False], TagBox["\[CenterDot]",ep3ind4,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep3ind5, Editable->False], TagBox[MakeBoxes[d,StandardForm],ep3ind6,Editable->False]}], RowBox[ {TagBox[MakeBoxes[a,StandardForm],ep3ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep3ind2,Editable->False]}]], eps3,Editable->False]; MakeExpression[ TagBox[SubsuperscriptBox[_, RowBox[ {TagBox[_,ep3ind3,Editable->False], TagBox[_,ep3ind4,Editable->False], TagBox[c_,ep3ind5,Editable->False], TagBox[d_,ep3ind6,Editable->False]}], RowBox[ {TagBox[a_,ep3ind1,Editable->False], TagBox[b_,ep3ind2,Editable->False]}]], eps3,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"eps[up[",a,"],up[",b,"],",c,",",d,"]"}],StandardForm]; eps/: MakeBoxes[eps[up[a_?IntSym3Q],up[b_?IntSym3Q], up[c_?IntSym3Q],d_?IntSymVn3Q],StandardForm]:= TagBox[SubsuperscriptBox["\[Epsilon]", RowBox[ {TagBox["\[CenterDot]",ep4ind4,Editable->False], TagBox["\[CenterDot]",ep4ind5,Editable->False], TagBox["\[CenterDot]",ep4ind6,Editable->False], TagBox[MakeBoxes[d,StandardForm],ep4ind7,Editable->False]}], RowBox[ {TagBox[MakeBoxes[a,StandardForm],ep4ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep4ind2,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep4ind3,Editable->False]}]], eps4,Editable->False]; MakeExpression[ TagBox[SubsuperscriptBox[_, RowBox[ {TagBox[_,ep4ind4,Editable->False], TagBox[_,ep4ind5,Editable->False], TagBox[_,ep4ind6,Editable->False], TagBox[d_,ep4ind7,Editable->False]}], RowBox[ {TagBox[a_,ep4ind1,Editable->False], TagBox[b_,ep4ind2,Editable->False], TagBox[c_,ep4ind3,Editable->False]}]], eps4,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"eps[up[",a,"],up[",b,"], up[",c,"],",d,"]"}],StandardForm]; eps/: MakeBoxes[eps[up[a_?IntSym3Q],up[b_?IntSym3Q], up[c_?IntSym3Q],up[d_?IntSym3Q]],StandardForm]:= TagBox[SuperscriptBox["\[Epsilon]", RowBox[ {TagBox[MakeBoxes[a,StandardForm],ep5ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep5ind2,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep5ind3,Editable->False], TagBox[MakeBoxes[d,StandardForm],ep5ind4,Editable->False]}]], eps5,Editable->False]; MakeExpression[ TagBox[SuperscriptBox[_, RowBox[ {TagBox[a_,ep5ind1,Editable->False], TagBox[b_,ep5ind2,Editable->False], TagBox[c_,ep5ind3,Editable->False], TagBox[d_,ep5ind4,Editable->False]}]], eps5,Editable->False],StandardForm]:= MakeExpression[ RowBox[{"eps[up[",a,"],up[",b,"], up[",c,"],up[",d,"]]"}],StandardForm]; (* end of eps-d4 ---------------------------------------------------- *) (*====================================================================*) (* sc 4d ------------------------------------------------------------ *) sc/:MakeBoxes[sc[x_?Sym3Q,y_?Sym3Q],StandardForm]:= TagBox[ RowBox[{ TagBox["(",scv1,Editable->False], TagBox[MakeBoxes[x,StandardForm],scv2,Editable->False], TagBox["\[CenterDot]",scv3,Editable->False], TagBox[MakeBoxes[y,StandardForm],scv3,Editable->False], TagBox[")",scv4,Editable->False] }], sc,Editable->False]/;Not[MatchQ[x,y]]; MakeExpression[ TagBox[ RowBox[{ TagBox[_,scv1,Editable->False], TagBox[x_,scv2,Editable->False], TagBox[_,scv3,Editable->False], TagBox[y_,scv3,Editable->False], TagBox[_,scv4,Editable->False] }], sc,Editable->False], StandardForm]:= MakeExpression[RowBox[{"sc[",x,",",y,"]"}],StandardForm]; sc/:MakeBoxes[sc[x_?Sym3Q,x_],StandardForm]:= TagBox[SuperscriptBox[MakeBoxes[x,StandardForm],2], sc2,Editable->False]; MakeExpression[TagBox[SuperscriptBox[x_,_],sc2,Editable->False], StandardForm]:= MakeExpression[RowBox[{"sc[",x,",",x,"]"}],StandardForm]; (* end of sc 4d ----------------------------------------------------- *) (*====================================================================*) (* sigma matrix ----------------------------------------------------- *) sg/:MakeBoxes[sg[a_?IntSymVn3Q,b_?IntSymVn3Q],StandardForm]:= TagBox[SubscriptBox["\[Sigma]", RowBox[ {TagBox[MakeBoxes[a,StandardForm],sg1ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],sg1ind2,Editable->False]}]], sg1,Editable->False]; MakeExpression[ TagBox[SubscriptBox[_, RowBox[{TagBox[a_,sg1ind1,Editable->False], TagBox[b_,sg1ind2,Editable->False]}]], sg1,Editable->False],StandardForm]:= MakeExpression[RowBox[{"sg[",a,",",b,"]"}],StandardForm]; sg/:MakeBoxes[sg[up[a_?IntSym3Q],b_?IntSymVn3Q],StandardForm]:= TagBox[SubsuperscriptBox["\[Sigma]", RowBox[ {TagBox["\[CenterDot]",sg2ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm], sg2ind2,Editable->False]}], MakeBoxes[a,StandardForm]], sg2,Editable->False]; MakeExpression[ TagBox[SubsuperscriptBox[_, RowBox[{ TagBox[_,sg2ind1,Editable->False], TagBox[b_,sg2ind2,Editable->False]}],a_], sg2,Editable->False],StandardForm]:= MakeExpression[RowBox[{"sg[up[",a,"]",",",b,"]"}],StandardForm]; sg/:MakeBoxes[sg[up[a_?IntSym3Q],up[b_?IntSym3Q]],StandardForm]:= TagBox[SuperscriptBox["\[Sigma]", RowBox[{ TagBox[MakeBoxes[a,StandardForm],sg5ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],sg5ind2,Editable->False]}]], sg5,Editable->False]; MakeExpression[ TagBox[SuperscriptBox[_, RowBox[ {TagBox[a_,sg5ind1,Editable->False], TagBox[b_,sg5ind2,Editable->False]}]],sg5,Editable->False], StandardForm]:= MakeExpression[ RowBox[{"sg[up[",a,"],up[",b,"]]"}],StandardForm]; (* end of sigma ----------------------------------------------------- *) (*====================================================================*) (* mass ------------------------------------------------------------- *) m/: MakeBoxes[m[x_?Sym3Q],StandardForm]:= TagBox[ SubscriptBox[m,MakeBoxes[x,StandardForm]],mass,Editable->False]; MakeExpression[ TagBox[SubscriptBox[_,x_],mass,Editable->False],StandardForm]:= MakeExpression[RowBox[{"m[",x,"]"}],StandardForm]; (* end of the mass -------------------------------------------------- *) (*====================================================================*) (* lg ---------------- ---------------------------------------------- *) lg/: MakeBoxes[lg[x_],StandardForm]:= TagBox[ RowBox[{ TagBox["\[LeftAngleBracket]",lg1,Editable->False], MakeBoxes[x,StandardForm], TagBox["\[RightAngleBracket]",lg2,Editable->False]}], lg,Editable->False]; lg/: MakeBoxes[lg[x_,y__],StandardForm]:= TagBox[ RowBox[ Join[ {TagBox["\[LeftAngleBracket]",lg1,Editable->False], MakeBoxes[x,StandardForm]}, Flatten[Map[List[",",MakeBoxes[#,StandardForm]]&,{y}]], {TagBox["\[RightAngleBracket]",lg2,Editable->False]} ]], lg,Editable->False]; MakeExpression[TagBox[ RowBox[{ TagBox[_,lg1,Editable->False], x__, TagBox[_,lg2,Editable->False]}], lg,Editable->False],StandardForm]:= MakeExpression[RowBox[{"lg[",x,"]"}],StandardForm]; (* end of lg -------------------------------------------------------- *) (*====================================================================*) (* cj ----------------------------------------------------------------*) cj/:MakeBoxes[cj[x_],StandardForm]:= SuperscriptBox[MakeBoxes[x,StandardForm],"\[Dagger]"]; SuperDagger[x_]:=cj[x]; (* end of cj -------------------------------------------------------- *) (*====================================================================*) (* spinor ----------------------------------------------------------- *) ub/:MakeBoxes[ub[p_?Sym3Q,s_?Sym3Q],StandardForm]:= RowBox[{OverscriptBox["u","_"],"[", MakeBoxes[p,StandardForm],",",MakeBoxes[s,StandardForm], "]"}]; OverBar[u][p_?Sym3Q,s_?Sym3Q]:=ub[p,s]; ub/:MakeBoxes[ub[p_?Sym3Q],StandardForm]:= RowBox[{OverscriptBox["u","_"],"[",MakeBoxes[p,StandardForm],"]"}]; OverBar[u][p_?Sym3Q]:=ub[p]; vb/:MakeBoxes[vb[p_?Sym3Q,s_?Sym3Q],StandardForm]:= RowBox[{OverscriptBox["v","_"],"[", MakeBoxes[p,StandardForm],",",MakeBoxes[s,StandardForm], "]"}]; OverBar[v][p_?Sym3Q,s_?Sym3Q]:=vb[p,s]; vb/:MakeBoxes[vb[p_?Sym3Q],StandardForm]:= RowBox[{OverscriptBox["v","_"],"[",MakeBoxes[p,StandardForm],"]"}]; OverBar[v][p_?Sym3Q]:=vb[p]; (* end of spinor ---------------------------------------------------- *) (*====================================================================*) (* delta ------------------------------------------------------------ *) delta/:MakeBoxes[delta[a_?D3IntSymQ,b_?D3IntSymQ],StandardForm]:= TagBox[SubscriptBox["\[Delta]", RowBox[ {TagBox[MakeBoxes[a,StandardForm],del3ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],del3ind2,Editable->False]}]], del3,Editable->False]; MakeExpression[ TagBox[SubscriptBox[_, RowBox[ {TagBox[a_,del3ind1,Editable->False], TagBox[b_,del3ind2,Editable->False]}]], del3,Editable->False],StandardForm]:= MakeExpression[RowBox[{"delta[",a,",",b,"]"}],StandardForm]; (* end of delta ----------------------------------------------------- *) (*====================================================================*) (* vector 3d -------------------------------------------------------- *) vec3/:MakeBoxes[vec3[x_?Sym3Q,y_?D3IntSymQ],StandardForm]:= TagBox[ SubscriptBox[ TagBox[ OverscriptBox[MakeBoxes[x,StandardForm], TagBox["\[Tilde]",vec32,Editable->False]], vec31,Editable->False], MakeBoxes[y,StandardForm]], vec3,Editable->False]; MakeExpression[ TagBox[ SubscriptBox[ TagBox[ OverscriptBox[x_, TagBox[_,vec32,Editable->False]], vec31,Editable->False], y_], vec3,Editable->False],StandardForm]:= MakeExpression[RowBox[{"vec3[",x,",",y,"]"}],StandardForm]; (* end of vector 3d ------------------------------------------------- *) (*====================================================================*) (* pauli matrix ----------------------------------------------------- *) s/: MakeBoxes[s[x_?D3IntSymVnQ],StandardForm]:= TagBox[SubscriptBox["\[Sigma]",MakeBoxes[x,StandardForm]],pm1, Editable->False]; MakeExpression[ TagBox[SubscriptBox[_,x_],pm1,Editable->False],StandardForm]:= MakeExpression[RowBox[{"s[",x,"]"}],StandardForm]; (* end of pauli matrix ---------------------------------------------- *) (*====================================================================*) (* ep3 tensor ------------------------------------------------------- *) ep3/:MakeBoxes[ep3[a_?D3IntSymQ,b_?D3IntSymQ,c_?D3IntSymVnQ], StandardForm]:= TagBox[SubscriptBox["\[Epsilon]", RowBox[ {TagBox[MakeBoxes[a,StandardForm],ep31ind1,Editable->False], TagBox[MakeBoxes[b,StandardForm],ep31ind2,Editable->False], TagBox[MakeBoxes[c,StandardForm],ep31ind3,Editable->False]}]], eps31,Editable->False]; MakeExpression[TagBox[SubscriptBox[_, RowBox[ {TagBox[a_,ep31ind1,Editable->False], TagBox[b_,ep31ind2,Editable->False], TagBox[c_,ep31ind3,Editable->False]}]], eps31,Editable->False], StandardForm]:= MakeExpression[RowBox[{"ep3[",a,",",b,",",c,"]"}],StandardForm]; ep3/:MakeBoxes[ ep3[x_?Vn3Q,y_?Vn3Q,z_?Vn3Q],StandardForm]:= TagBox[ RowBox[{ TagBox["(",mp1,Editable->False], TagBox[MakeBoxes[x,StandardForm],mp2,Editable->False], TagBox["\[CenterDot]",mp3,Editable->False], TagBox["[",mp4,Editable->False], TagBox[MakeBoxes[y,StandardForm],mp5,Editable->False], TagBox["\[Cross]",mp6,Editable->False], TagBox[MakeBoxes[z,StandardForm],mp7,Editable->False], TagBox["]",mp8,Editable->False], TagBox[")",mp9,Editable->False] }], mp,Editable->False]; MakeExpression[ TagBox[ RowBox[{ TagBox[_,mp1,Editable->False], TagBox[x_,mp2,Editable->False], TagBox[_,mp3,Editable->False], TagBox[_,mp4,Editable->False], TagBox[y_,mp5,Editable->False], TagBox[_,mp6,Editable->False], TagBox[z_,mp7,Editable->False], TagBox[_,mp8,Editable->False], TagBox[_,mp9,Editable->False] }], mp,Editable->False], StandardForm]:= MakeExpression[ RowBox[{"ep3[",x,",",y,",",z,"]"}],StandardForm]; ep3/:MakeBoxes[ ep3[x_?D3IntSymQ,y_?Vn3Q,z_?Vn3Q],StandardForm]:= TagBox[SubscriptBox[ RowBox[{ TagBox["(",vp1in1,Editable->False], TagBox[MakeBoxes[y,StandardForm],vp1in2,Editable->False], TagBox["\[Cross]",vp1in3,Editable->False], TagBox[MakeBoxes[z,StandardForm],vp1in4,Editable->False], TagBox[")",vp1in5,Editable->False] }], TagBox[MakeBoxes[x,StandardForm],vp1in6,Editable->False] ], vp1,Editable->False]; MakeExpression[ TagBox[SubscriptBox[ RowBox[{ TagBox[_,vp1in1,Editable->False], TagBox[y_,vp1in2,Editable->False], TagBox[_,vp1in3,Editable->False], TagBox[z_,vp1in4,Editable->False], TagBox[_,vp1in5,Editable->False] }], TagBox[x_,vp1in6,Editable->False] ], vp1,Editable->False], StandardForm]:= MakeExpression[ RowBox[{"ep3[",x,",",y,",",z,"]"}],StandardForm]; (* end of ep3 tensor ------------------------------------------------ *) (*====================================================================*) (* 2.5. scalar product 3d ------------------------------------------- *) sc3/:MakeBoxes[sc3[x_?Sym3Q,y_?Sym3Q],StandardForm]:= TagBox[ RowBox[{ TagBox["(",sc3v1,Editable->False], TagBox[OverscriptBox[ MakeBoxes[x,StandardForm],"\[RightArrow]"],sc3v2,Editable->False], TagBox["\[CenterDot]",sc3v3,Editable->False], TagBox[OverscriptBox[ MakeBoxes[y,StandardForm],"\[RightArrow]"],sc3v4,Editable->False], TagBox[")",sc3v5,Editable->False] }], sc3,Editable->False]/;Not[MatchQ[x,y]]; MakeExpression[ TagBox[ RowBox[{ TagBox[_,sc3v1,Editable->False], TagBox[OverscriptBox[x_,_],sc3v2,Editable->False], TagBox[_,sc3v3,Editable->False], TagBox[OverscriptBox[y_,_],sc3v4,Editable->False], TagBox[_,sc3v5,Editable->False] }], sc3,Editable->False], StandardForm]:= MakeExpression[RowBox[{"sc3[",x,",",y,"]"}],StandardForm]; sc3/:MakeBoxes[sc3[x_?Sym3Q,x_],StandardForm]:= TagBox[ SuperscriptBox[ TagBox[OverscriptBox[ MakeBoxes[x,StandardForm], "\[RightArrow]"], sc32v,Editable->False], 2], sc32,Editable->False]; MakeExpression[ TagBox[ SuperscriptBox[ TagBox[OverscriptBox[x_,_],sc32v,Editable->False], _], sc32,Editable->False], StandardForm]:= MakeExpression[RowBox[{"sc3[",x,",",x,"]"}],StandardForm]; (* end of sc3 ------------------------------------------------------- *) (*====================================================================*) (* ls --------------------------------------------------------------- *) ls/: MakeBoxes[ls[x_],StandardForm]:= TagBox[ RowBox[{ TagBox["\[LeftAngleBracket]",ls1,Editable->False], MakeBoxes[x,StandardForm], TagBox["\[RightAngleBracket]",ls2,Editable->False]}], lst,Editable->False]; ls/: MakeBoxes[ls[x_,y__],StandardForm]:= TagBox[ RowBox[ Join[ {TagBox["\[LeftAngleBracket]",ls1,Editable->False], MakeBoxes[x,StandardForm]}, Flatten[Map[List[",",MakeBoxes[#,StandardForm]]&,{y}]], {TagBox["\[RightAngleBracket]",ls2,Editable->False]} ]], lst,Editable->False]; MakeExpression[TagBox[ RowBox[{ TagBox[_,ls1,Editable->False], x__, TagBox[_,ls2,Editable->False]}], lst,Editable->False],StandardForm]:= MakeExpression[RowBox[{"ls[",x,"]"}],StandardForm]; (* end of ls -------------------------------------------------------- *) (* end of the StdForm.m file ---------------------------------------- *) (* end of formatting rules ------------------------------------------ *) End[];(* of private *) Protect[g, m, sc, sg, sl, tr, up, dn, vec, v4, v3, d4, eps, gm, D4IndexQ, IndexQ, ToBasis, lg, OpenLg, delta, sc3, trs, vec3, s, ep3, D3IndexQ, d3, ToD3, ToD4, ToSBasis, ls, OpenLs, cj, u, ub, v, vb, VecNameQ,ExVecNameQ]; EndPackage[];(* TamarA *) Print["TamarA 2.0 - Alexander Tetervak - Univ. of South Carolina"]; (* end of the Tamara.m file ----------------------------------------- *)