In [1]:
%load_ext autoreload
%autoreload 2
from __future__ import division
# %pylab
import numpy as np
import epgcpmg as epg
In [2]:
np.set_printoptions(suppress=True, precision=4, linewidth=300)
In [35]:
T1 = 1000e-3
T2 = 100e-3
TE = 5e-3
P_z = np.array([[0],[0],[1]])
P_xy = np.array([[1],[1],[0]])
def eRF(P, a):
return epg.rf(P, np.pi/180 * a)
def eTE(P, a):
return epg.FSE_TE(P, a * np.pi/180, TE, T1, T2)
def eRelax(P, T):
return epg.relax(P, T, T1, T2)
def eGrad(P):
return epg.grad(P)
In [36]:
Q1 = eGrad(P_xy)
print Q1
In [37]:
Q2 = eRF(Q1, 120)
print Q2
In [38]:
Q3 = eGrad(Q2)
print Q3
In [39]:
Q4 = eGrad(eRF(eGrad(Q3), 120))
print Q4
In [40]:
Q5 = eGrad(eRF(eGrad(Q4), 100))
print Q5
In [41]:
Q6 = eGrad(eRF(eGrad(Q5), 120))
print Q6
In [ ]:
sadasd
In [42]:
P1 = eRF(P_z, 90)
P1
Out[42]:
In [43]:
P2 = eTE(P_xy, 120)
P2
Out[43]:
In [44]:
P3 = eTE(P2, 120)
P3
Out[44]:
In [45]:
P4 = eRelax(P3, TE/2)
P4
Out[45]:
In [46]:
P5 = eGrad(P4)
P5
Out[46]:
In [47]:
P6 = eRF(P5, 120)
P6
Out[47]:
In [48]:
P7 = eGrad(P6)
P7
Out[48]:
In [49]:
P8 = eRelax(P7, TE/2)
P8
Out[49]:
In [50]:
P9 = eTE(P8, 100)
P9
Out[50]:
In [51]:
P10 = eTE(P9, 100)
P10
Out[51]:
In [52]:
P11 = eTE(P10, 100)
P11
Out[52]:
In [131]:
np.exp(-TE/2 / T1)
Out[131]:
In [150]:
T = 250
In [151]:
M1 = 20
M2 = 100
M3 = 100
M4 = T - M1 - M2 - M3
a0 = np.r_[np.linspace(120, 50, M1), np.linspace(50, 80, M2), np.linspace(80, 90, M3), np.linspace(90, 120, M4)]
plt.plot(a0)
plt.show()
In [152]:
a1 = a0.copy()
a2 = np.array([120] * T)
a3 = np.array([180] * T)
In [153]:
T1 = 1
T21 = 100e-3
T22 = 40e-3
In [154]:
x11 = epg.FSE_signal(np.pi/180*a1, TE, T1, T21).ravel()
x12 = epg.FSE_signal(np.pi/180*a2, TE, T1, T21).ravel()
x13 = epg.FSE_signal(np.pi/180*a3, TE, T1, T21).ravel()
x21 = epg.FSE_signal(np.pi/180*a1, TE, T1, T22).ravel()
x22 = epg.FSE_signal(np.pi/180*a2, TE, T1, T22).ravel()
x23 = epg.FSE_signal(np.pi/180*a3, TE, T1, T22).ravel()
In [ ]:
In [155]:
plt.figure()
plt.plot(x11)
plt.plot(x21)
plt.plot(x12)
plt.plot(x22)
plt.plot(x13)
plt.plot(x23)
Out[155]:
In [156]:
plt.show()
In [157]:
print np.linalg.norm(x11)
print np.linalg.norm(x12)
print np.linalg.norm(x13)
print np.linalg.norm(x21)
print np.linalg.norm(x22)
print np.linalg.norm(x23)
In [158]:
print np.dot(x11, x21)
print np.dot(x12, x22)
print np.dot(x13, x23)
In [159]:
print np.linalg.norm(x11 - x21)**2
print np.linalg.norm(x12 - x22)**2
print np.linalg.norm(x13 - x23)**2
In [160]:
def normalized_loss(theta1, theta2, angles_rad, TE, TR):
T = len(angles_rad)
x1 = epg.FSE_signal(angles_rad, TE, theta1['T1'], theta1['T2']) * (1 - np.exp(-(TR - T * TE)/theta1['T1']))
x2 = epg.FSE_signal(angles_rad, TE, theta2['T1'], theta2['T2']) * (1 - np.exp(-(TR - T * TE)/theta2['T1']))
x1 = x1 / np.linalg.norm(x1, ord=2)
x2 = x2 / np.linalg.norm(x2, ord=2)
return - np.dot(x1.ravel(), x2.ravel())
In [161]:
TR = 1.4
theta1 = {'T1': T1, 'T2': T21}
theta2 = {'T1' : T1, 'T2': T22}
print normalized_loss(theta1, theta2, a1, TE, TR)
print normalized_loss(theta1, theta2, a2, TE, TR)
print normalized_loss(theta1, theta2, a3, TE, TR)
In [ ]: