Esempio n. 1
0
    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))
Esempio n. 3
0
    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
Esempio n. 4
0
    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