Source code for mrsprint.system.gradient

#! python
# -*- coding: utf-8 -*-

"""Module for gradient related classes and functions.

Authors:
    * Victor Hugo de Mello Pessoa <victor.pessoa@usp.br>
    * Daniel Cosmo Pizetta <daniel.pizetta@usp.br>

Since:
    2017/07/01

Todo:
    Change nameOfFunctions to name_of_functions.

"""

import logging

import numpy as np
import pyqtgraph.parametertree as pt

_logger = logging.getLogger(__name__)


[docs]class Gradient(pt.parameterTypes.GroupParameter): """Class that represents the gradients parameters in the sistem.""" def __init__(self, **opts): opts['name'] = 'Gradient System' opts['type'] = 'bool' opts['value'] = True pt.parameterTypes.GroupParameter.__init__(self, **opts) # gradient x self.xMaxValue = self.addChild({'name': 'X Max Value', 'type': 'float', 'value': 20, 'suffix': 'G/cm', 'siPrefix': True}) self.xMinRiseTime = self.addChild({'name': 'X Min Rise Time', 'type': 'float', 'value': 0., 'suffix': 's', 'siPrefix': True}) # gradient y self.yMaxValue = self.addChild({'name': 'Y Max Value', 'type': 'float', 'value': 20, 'suffix': 'G/cm', 'siPrefix': True}) self.yMinRiseTime = self.addChild({'name': 'Y Min Rise Time', 'type': 'float', 'value': 0., 'suffix': 's', 'siPrefix': True}) # gradient z self.zMaxValue = self.addChild({'name': 'Z Max Value', 'type': 'float', 'value': 20, 'suffix': 'G/cm', 'siPrefix': True}) self.zMinRiseTime = self.addChild({'name': 'Z Min Rise Time', 'type': 'float', 'value': 0., 'suffix': 's', 'siPrefix': True})
[docs]def gradient_duration(gradient_event, dt): """Return the duration of the gradient event (array). It is based on the size and dt. Args: gradient_event (np.array): An array of event. dt (float [s]): Value of time resolution. Return: float [s]: Duration of the event. Todo: Regard the dimensions of the array. """ # get the second dimension size, the first one is 3 # because of grad x, y and z size = gradient_event.shape[1] return size * dt
[docs]def gradient_delay(duration, dt, number_of_points=0): """Generate a delay of gradient pulse. Args: duration (float [s]): Delay time. dt (float [s]): Time resolution. number_of_points (int): Number of points. Returns: np.array: Gradient delay - a zero x, y and z gradient components """ grad = np.zeros(number_of_points) pulse_units = int(duration / dt) grad = np.append(grad, np.zeros(pulse_units * 3).reshape(3, pulse_units)) return grad