"Muon decay demo"

clear

-- Verify muon decay formulas

p1x = 0 -- muon rest frame
p1y = 0
p1z = 0

E1 = sqrt(p1x^2 + p1y^2 + p1z^2 + m1^2)
E2 = sqrt(p2x^2 + p2y^2 + p2z^2 + m2^2)
E3 = sqrt(p3x^2 + p3y^2 + p3z^2 + m3^2)
E4 = sqrt(p4x^2 + p4y^2 + p4z^2 + m4^2)

p1 = (E1, p1x, p1y, p1z) -- muon
p2 = (E2, p2x, p2y, p2z) -- muon neutrino
p3 = (E3, p3x, p3y, p3z) -- electron antineutrino
p4 = (E4, p4x, p4y, p4z) -- electron

-- spinors

N = (E1 + m1) (E2 + m2) (E3 + m3) (E4 + m4)

u11 = (E1 + m1, 0, p1z, p1x + i p1y)
u12 = (0, E1 + m1, p1x - i p1y, -p1z)

u21 = (E2 + m2, 0, p2z, p2x + i p2y)
u22 = (0, E2 + m2, p2x - i p2y, -p2z)

v31 = (p3z, p3x + i p3y, E3 + m3, 0)
v32 = (p3x - i p3y, -p3z, 0, E3 + m3)

u41 = (E4 + m4, 0, p4z, p4x + i p4y)
u42 = (0, E4 + m4, p4x - i p4y, -p4z)

u1 = (u11,u12) -- muon
u2 = (u21,u22) -- muon neutrino
v3 = (v31,v32) -- electron antineutrino
u4 = (u41,u42) -- electron

I = ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1))

gmunu = ((1,0,0,0),(0,-1,0,0),(0,0,-1,0),(0,0,0,-1))

gamma0 = ((1,0,0,0),(0,1,0,0),(0,0,-1,0),(0,0,0,-1))
gamma1 = ((0,0,0,1),(0,0,1,0),(0,-1,0,0),(-1,0,0,0))
gamma2 = ((0,0,0,-i),(0,0,i,0),(0,i,0,0),(-i,0,0,0))
gamma3 = ((0,0,1,0),(0,0,0,-1),(-1,0,0,0),(0,1,0,0))
gamma5 = i dot(gamma0,gamma1,gamma2,gamma3)

gamma = (gamma0,gamma1,gamma2,gamma3)

u2bar = dot(conj(u2),gamma0) -- adjoint of u2
u4bar = dot(conj(u4),gamma0) -- adjoint of u4

-- transpose to put 1st index in the middle

X = transpose(dot(gamma, I - gamma5))

w21 = zero(2,2,4)
w43 = zero(2,2,4)

for(a,1,2, for(b,1,2,
 w21[a,b] = dot(u2bar[a], X, u1[b]),
 w43[a,b] = dot(u4bar[a], X, v3[b])
))

-- matrix elements

M = zero(2,2,2,2)

for(a,1,2, for(b,1,2, for(c,1,2, for(d,1,2,
 M[a,b,c,d] = dot(w43[d,c], gmunu, w21[b,a])
))))

-- "Sum over spin states"

S = sum(conj(M) M)
-- S

-- "Verify Casimir trick"

pslash1 = dot(p1,gmunu,gamma)
pslash2 = dot(p2,gmunu,gamma)
pslash3 = dot(p3,gmunu,gamma)
pslash4 = dot(p4,gmunu,gamma)

T1 = contract(dot(pslash4, X, pslash3, X), 1,4)
T2 = contract(dot(pslash2, X, pslash1, X), 1,4)
T = contract(dot(T1, gmunu, transpose(T2), gmunu))

check(T == S/N)

-- "ok"

-- "Verify probability density"

check(1/4 T == 64 dot(p1,gmunu,p3) dot(p2,gmunu,p4))

-- "ok"

-- Compute muon lifetime

GF = 1.1663787 10^(-5) GeV^(-2)
mmu = 1.883531627 10^(-28) kilogram
h = 6.62607015 10^(-34) joule second
c = 299792458 meter / second

joule = kilogram meter^2 / second^2
GeV = 10^9 1.602176634 10^(-19) joule

kilogram = "kilogram"
meter = "meter"
second = "second"

-- "Muon lifetime"

check(infixform(float(96 pi^2 h / (GF^2 (mmu c^2)^5))) == "2.18735 10^(-6) second")
