def test_fs_coeff_double_sided(self): t = np.arange(0, 1, 1 / 1024.) x_rect = ss.rect(t - .1, 0.2) Xk, fk = ss.fs_coeff(x_rect, 25, 10) Xk_check, fk_check = (np.array([ 2.00195312e-01 + 0.00000000e+00j, 1.51763076e-01 - 1.09694238e-01j, 4.74997396e-02 - 1.43783764e-01j, -3.04576408e-02 - 9.61419900e-02j, -3.74435130e-02 - 2.77700018e-02j, 1.95305146e-04 + 2.39687506e-06j, 2.56251893e-02 - 1.80472945e-02j, 1.40893600e-02 - 4.09547511e-02j, -1.09682089e-02 - 3.61573392e-02j, -1.64204592e-02 - 1.24934761e-02j, 1.95283084e-04 + 4.79393062e-06j, 1.41580149e-02 - 9.71348931e-03j, 8.52093529e-03 - 2.38144188e-02j, -6.47058053e-03 - 2.23127601e-02j, -1.04138132e-02 - 8.12701956e-03j, 1.95246305e-04 + 7.19134726e-06j, 9.85775554e-03 - 6.58674167e-03j, 6.22804508e-03 - 1.67550994e-02j, -4.47157604e-03 - 1.61581996e-02j, -7.56851964e-03 - 6.05743025e-03j, 1.95194801e-04 + 9.58930569e-06j, 7.60518287e-03 - 4.94771418e-03j, 4.97737845e-03 - 1.29033684e-02j, -3.34165027e-03 - 1.26784330e-02j, -5.90873600e-03 - 4.84917431e-03j, 1.95128558e-04 + 1.19879869e-05j ]), np.array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250 ])) npt.assert_almost_equal(Xk, Xk_check) npt.assert_almost_equal(fk, fk_check)
def show(self): if self.ui.t2_2.isChecked() and self.ui.GRE.isChecked(): fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-5,5,1/fs) x0 = ss.rect(t-1,tau) self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t,x0+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1,x0+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2,x0+2,pen=self.Pen1[2]) fs2 = 100 tau2 = .15 t2 = np.arange(-5,5,1/fs2) d = ss.rect(t2-1,tau2) self.ui.graphicsView.plot(t2,d+8)
def test_conv_integral_value_error(self): tx = np.arange(-5, 10, 0.01) x = ss.rect(tx - 2, 4) with self.assertRaisesRegexp( ValueError, 'Invalid x1 x2 extents specified or valid extent not found!' ) as ci_err: ss.conv_integral(x, tx, x, tx, extent=('v', 'v'))
def test_fs_coeff_value_error(self): t = np.arange(0, 1, 1 / 1024.) x_rect = ss.rect(t - .1, 0.2) with self.assertRaisesRegexp( ValueError, 'Number of samples in xp insufficient for requested N.' ) as fsc_err: Xk, fk = ss.fs_coeff(x_rect, 2**13, 10)
def test_conv_integral(self): tx = np.arange(-5, 10, .5) x = ss.rect(tx - 2, 4) y, ty = ss.conv_integral(x, tx, x, tx) y_check = [0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 4., 3.5, 3., 2.5, 2., 1.5,1.] ty_check = [0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 5.5, 6., 6.5, 7., 7.5] npt.assert_almost_equal(y[20:36], y_check) npt.assert_almost_equal(ty[20:36], ty_check)
def test_conv_integral_fr(self): tx = np.arange(-5, 10, .5) x = ss.rect(tx - 2, 4) h = 4 * np.exp(-4 * tx) * ss.step(tx) y, ty = ss.conv_integral(x, tx, h, tx, extent=('f', 'r')) y_check = [2., 2.27067057, 2.30730184, 2.31225935, 2.31293027, 2.31302107, 2.31303336, 2.31303503, 2.31303525] ty_check = [0., 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4.] npt.assert_almost_equal(y[20:29], y_check) npt.assert_almost_equal(ty[20:29], ty_check)
def test_ft_approx(self): f_check = [-0.9765625, -0.95214844, -0.92773438, -0.90332031, -0.87890625, -0.85449219, -0.83007813, -0.80566406, -0.78125, -0.75683594, -0.73242188, -0.70800781, -0.68359375, -0.65917969, -0.63476563, -0.61035156, -0.5859375, -0.56152344, -0.53710938, -0.51269531, -0.48828125, -0.46386719, -0.43945313, -0.41503906, -0.390625, -0.36621094, -0.34179688, -0.31738281, -0.29296875, -0.26855469, -0.24414063, -0.21972656, -0.1953125, -0.17089844, -0.14648438, -0.12207031, -0.09765625, -0.07324219, -0.04882813, -0.02441406, 0., 0.02441406, 0.04882813, 0.07324219, 0.09765625, 0.12207031, 0.14648438, 0.17089844, 0.1953125, 0.21972656, 0.24414063, 0.26855469, 0.29296875, 0.31738281, 0.34179688, 0.36621094, 0.390625, 0.41503906, 0.43945313, 0.46386719, 0.48828125, 0.51269531, 0.53710938, 0.56152344, 0.5859375, 0.61035156, 0.63476563, 0.65917969, 0.68359375, 0.70800781, 0.73242188, 0.75683594, 0.78125, 0.80566406, 0.83007813, 0.85449219, 0.87890625, 0.90332031, 0.92773438, 0.95214844, 0.9765625] x0_check = [-0.0239171 +0.00176423j, -0.04951004+0.00749943j, -0.07525627+0.01738509j, -0.10057869+0.03152397j, -0.12487991+0.0499405j, -0.14755292+0.07257755j, -0.16799225+0.09929469j, -0.18560533+0.12986798j, -0.199824 +0.16399132j, -0.21011574+0.20127937j, -0.2159946 +0.24127207j, -0.21703146+0.28344061j, -0.21286354+0.32719476j, -0.20320288+0.37189165j, -0.1878436 +0.41684555j, -0.16666796+0.4613387j, -0.13965075+0.50463298j, -0.10686233+0.54598217j, -0.06846983+0.58464451j, -0.02473672+0.61989559j, 0.02397926+0.65104101j, 0.07723005+0.6774288j, 0.1344827 +0.69846136j, 0.19512652+0.71360648j, 0.25848156+0.72240758j, 0.32380858+0.72449264j, 0.39032004+0.71958188j, 0.45719214+0.70749384j, 0.52357765+0.68814999j, 0.58861928+0.66157749j, 0.6514633 +0.62791022j, 0.71127333+0.58738804j, 0.76724394+0.54035415j, 0.81861376+0.48725073j, 0.86467805+0.42861288j, 0.90480033+0.36506087j, 0.93842292+0.297291j, 0.96507627+0.22606507j, 0.98438673+0.15219871j, 0.99608288+0.07654876j, 1. +0.j, 0.99608288-0.07654876j, 0.98438673-0.15219871j, 0.96507627-0.22606507j, 0.93842292-0.297291j, 0.90480033-0.36506087j, 0.86467805-0.42861288j, 0.81861376-0.48725073j, 0.76724394-0.54035415j, 0.71127333-0.58738804j, 0.6514633 -0.62791022j, 0.58861928-0.66157749j, 0.52357765-0.68814999j, 0.45719214-0.70749384j, 0.39032004-0.71958188j, 0.32380858-0.72449264j, 0.25848156-0.72240758j, 0.19512652-0.71360648j, 0.1344827 -0.69846136j, 0.07723005-0.6774288j, 0.02397926-0.65104101j, -0.02473672-0.61989559j, -0.06846983-0.58464451j, -0.10686233-0.54598217j, -0.13965075-0.50463298j, -0.16666796-0.4613387j, -0.1878436 -0.41684555j, -0.20320288-0.37189165j, -0.21286354-0.32719476j, -0.21703146-0.28344061j, -0.2159946 -0.24127207j, -0.21011574-0.20127937j, -0.199824 -0.16399132j, -0.18560533-0.12986798j, -0.16799225-0.09929469j, -0.14755292-0.07257755j, -0.12487991-0.0499405j, -0.10057869-0.03152397j, -0.07525627-0.01738509j, -0.04951004-0.00749943j, -0.0239171 -0.00176423j] fs = 100 tau = 1 t = np.arange(-5, 5, 1./fs) x0 = ss.rect(t-.5, tau) f,X0 = ss.ft_approx(x0, t, 4096) npt.assert_almost_equal(f[2008:2089], f_check) npt.assert_almost_equal(X0[2008:2089], x0_check)
def test_rect(self): t = np.arange(-1, 5, .5) x = ss.rect(t, 1.0) x_check = np.array([0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.]) npt.assert_almost_equal(x, x_check)
def showGraphicalRep(self): if self.prep == 'T2prep' and self.acquisition== 'gre': try: val = int(self.prepText) except: val = 0 fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5*val,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5*val,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5*val,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,d+8) self.ui.graphicsView.plot(t+val,-d+8) self.ui.graphicsView.plot(t+1.5*val,(self.FA/90)*d+8) elif self.prep == 'T2prep' and self.acquisition == 'ssfp': try: val = int(self.prepText) TE = int(self.TE*1000) except: val = 0 TE = 1 fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5*val,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+TE+1.5*val,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2*TE+1.5*val,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,d+8) self.ui.graphicsView.plot(t+val,-d+8) self.ui.graphicsView.plot(t+1.5*val,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5*val+2.5*TE,(2*self.FA/90)*d+8) elif self.prep == 'T2prep' and self.acquisition == 'se': try: val = int(self.prepText) TE = int(self.TE*1000) except: val = 0 TE = 1 fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5*val,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+TE+1.5*val,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2*TE+1.5*val,y+2,pen=self.Pen1[2]) x = 2*TE + 1.5*val self.ui.graphicsView.plot(t+x+1,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+x+2,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+x+3,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,d+8) self.ui.graphicsView.plot(t+val,-d+8) self.ui.graphicsView.plot(t+1.5*val,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5*val+3*TE,(2*self.FA/90)*d+8) elif self.prep == 'tagging' and self.acquisition == 'gre': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs d2 = ss.rect(t-1,0.1) for i in range(10): self.ui.graphicsView.plot(t+i/10,d2+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) elif self.prep == 'tagging' and self.acquisition == 'ssfp': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs d2 = ss.rect(t-1,0.1) for i in range(10): self.ui.graphicsView.plot(t+i/10,d2+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5+2.5,(2*self.FA/90)*d+8) elif self.prep == 'tagging' and self.acquisition == 'se': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) self.ui.graphicsView.plot(t+2.5+2,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+2.5+3,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2.5+4,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs d2 = ss.rect(t-1,0.1) for i in range(10): self.ui.graphicsView.plot(t+i/10,d2+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5+3,(2*self.FA/90)*d+8) if self.prep == 'ir' and self.acquisition== 'gre': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,2*d+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) if self.prep == 'ir' and self.acquisition== 'ssfp': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,2*d+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5+2.5,(2*self.FA/90)*d+8) if self.prep == 'ir' and self.acquisition== 'se': fs = 100 # sampling rate in Hz tau = 1 t = np.arange(-20,20,1/fs) y = ss.rect(t-1,tau) ## draw gradients self.ui.graphicsView.setRange(xRange=[0,10]) self.ui.graphicsView.setRange(yRange=[0,9]) self.ui.graphicsView.plot(t+1.5,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+1+1.5,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2+1.5,y+2,pen=self.Pen1[2]) self.ui.graphicsView.plot(t+2.5+2,y+6,pen=self.Pen1[0]) self.ui.graphicsView.plot(t+2.5+3,y+4,pen=self.Pen1[1]) self.ui.graphicsView.plot(t+2.5+4,y+2,pen=self.Pen1[2]) tau2 = .15 d = ss.rect(t-1,tau2) # draw RFs self.ui.graphicsView.plot(t,2*d+8) self.ui.graphicsView.plot(t+1.5,(self.FA/90)*d+8) self.ui.graphicsView.plot(t+1.5+3,(2*self.FA/90)*d+8)