Stefano added to README and credits
[sympy.git] / examples / qft.py
blob1c68d1945f5977274f0e3bd265b17b431de7b200
1 #!/usr/bin/env python
2 import iam_sympy_example
4 from sympy import Basic,exp,Symbol,sin,Rational,I,Mul,NCSymbol, Matrix, \
5 gamma, sigma, one, Pauli
7 #gamma^mu
8 gamma0=gamma(0)
9 gamma1=gamma(1)
10 gamma2=gamma(2)
11 gamma3=gamma(3)
12 gamma5=gamma(5)
14 #sigma_i
15 sigma1=sigma(1)
16 sigma2=sigma(2)
17 sigma3=sigma(3)
19 a=Symbol("a")
20 b=Symbol("b")
21 c=Symbol("c")
23 E = Symbol("E")
24 m = Symbol("m")
26 def u(p,r):
27 """ p = (p1, p2, p3); r = 0,1 """
28 assert r in [1,2]
29 p1,p2,p3 = p
30 if r == 1:
31 ksi = Matrix([ [1],[0] ])
32 else:
33 ksi = Matrix([ [0],[1] ])
34 a = (sigma1*p1 + sigma2*p2 + sigma3*p3) / (E+m) * ksi
35 if a ==0:
36 a = zeronm(2,1)
37 return (E+m).sqrt() * Matrix([ [ksi[0,0]], [ksi[1,0]], [a[0,0]], [a[1,0]] ])
39 def v(p,r):
40 """ p = (p1, p2, p3); r = 0,1 """
41 assert r in [1,2]
42 p1,p2,p3 = p
43 if r == 1:
44 ksi = Matrix([ [1],[0] ])
45 else:
46 ksi = -Matrix([ [0],[1] ])
47 a = (sigma1*p1 + sigma2*p2 + sigma3*p3) / (E+m) * ksi
48 if a ==0:
49 a = zeronm(2,1)
50 return sqrt(E+m) * Matrix([ [a[0,0]], [a[1,0]], [ksi[0,0]], [ksi[1,0]] ])
52 def pslash(p):
53 p1,p2,p3 = p
54 p0 = sqrt(m**2+p1**2+p2**2+p3**2)
55 return gamma0*p0-gamma1*p1-gamma2*p2-gamma3*p3
57 def Tr(M):
58 assert M.lines == M.cols
59 t = 0
60 for i in range(M.lines):
61 t+=M[i,i]
62 return t
64 p = (a,b,c)
66 assert u(p, 1).D * u(p, 2) == 0
67 assert u(p, 2).D * u(p, 1) == 0
69 p1,p2,p3 =[Symbol(x) for x in ["p1","p2","p3"]]
70 pp1,pp2,pp3 =[Symbol(x) for x in ["pp1","pp2","pp3"]]
71 k1,k2,k3 =[Symbol(x) for x in ["k1","k2","k3"]]
72 kp1,kp2,kp3 =[Symbol(x) for x in ["kp1","kp2","kp3"]]
74 p = (p1,p2,p3)
75 pp = (pp1,pp2,pp3)
77 k = (k1,k2,k3)
78 kp = (kp1,kp2,kp3)
80 mu = Symbol("mu")
82 #e = (pslash(p)+m*one(4))*(pslash(k)-m*one(4))
83 #f = pslash(p)+m*one(4)
84 #g = pslash(p)-m*one(4)
85 #print Tr(f*g)
86 #print Tr(pslash(p) * pslash(k)).expand()
88 #M0 = [ ( v(pp, 1).D * gamma(mu) * u(p, 1) ) * ( u(k, 1).D * gamma(mu,True) * \
89 # v(kp, 1) ) for mu in range(4)]
90 #M = M0[0]+M0[1]+M0[2]+M0[3]
91 #assert isinstance(M, Basic)
93 #d=Symbol("d",True) #d=E+m
95 #print M
96 #print "-"*40
97 #M = ((M.subs(E,d-m)).expand() * d**2 ).expand()
98 #print "1/(E+m)**2 * ",M
99 #print "-"*40
100 #x,y= get_re_im(M)
101 #print x,y
102 #e = x**2+y**2
103 #print e
105 print Pauli(1)*Pauli(1)
106 #print Pauli(1)**2
107 #print Pauli(1)*2*Pauli(1)