def test_waveforms(self): """ Tests waveforms against matlab code results. """ expected_gy = get_data_with_key(TEST_DIR, TEST_FILE, "gy") Np = 32 fov = 7 smax = 15000 gmax = 4 gamma = 4257 dt = 4e-6 kmax = 1 / (fov / Np) / 2 area = kmax / gamma gy = minimum_time_gradient(area, gmax, smax, dt) self.assertTrue(np.allclose(expected_gy, gy))
def test_waveforms(self): """ Tests waveforms against matlab code results. """ expected_gy = get_data_with_key(TEST_DIR, TEST_FILE, "gy") Np = 32 fov = 7 smax = 15000 gmax = 4 gamma = 4257 dt = 4e-6 kmax = 1/(fov/Np)/2 area = kmax / gamma gy = minimum_time_gradient(area, gmax, smax, dt) self.assertTrue(np.allclose(expected_gy, gy))
def generate_readout(self, Nf, Fov_r, bwpp, negate=-1, pre_delay=0, readout_delay=1): """ Input: Nf: The number of frequency encodes Fov_r: The desired field of view (cm) bwpp: The desired bandwidth per pixel (Hz/pixel) Output: gro: Gradient waveform. rowin: Indices corresponding to the readout portion of the gradient. """ res = Fov_r / Nf Wkx = 1 / res area = Wkx / self._gamma G = bwpp / res / self._gamma Tro = Wkx / self._gamma / G Tramp = G / self._s_max t1 = Tramp t2 = t1 + Tro T = Tramp * 2 + Tro N = int(np.floor(T / self._dt)) t = np.arange(1, N + 1) * self._dt idx1 = np.where(t < t1) idx2 = np.where((t >= t1) & (t < t2)) idx3 = np.where(t >= t2) gro = np.zeros(N) gro[idx1] = self._s_max * t[idx1] gro[idx2] = G gro[idx3] = T * self._s_max - self._s_max * t[idx3] areaTrapz = (T + Tro) * G/2 gpre = minimum_time_gradient(areaTrapz/2, self._g_max, self._s_max, self._dt) rowin = pre_delay + gpre.size + readout_delay + np.asarray(idx2) gro = np.concatenate((np.zeros(pre_delay), negate * gpre, np.zeros(readout_delay), gro)) return gro, rowin
def generate_phase_encodes(self, Np, For_p, delay=0): """ Input: Np: The number of phase encodes Fov_p: The desired field of view (cm) Output: grpe: Gradient waveform. petable: Indices corresponding to the readout portion of the gradient. """ kmax = 1 / (For_p / Np) / 2 area = kmax / self._gamma grpe = minimum_time_gradient(area, self._g_max, self._s_max, self._dt) petable = delay + np.arange(Np/2 - .5, -Np/2 + .5 - 1, -1) / (Np/2) grpe = np.concatenate((np.zeros(delay), grpe)) return grpe, petable