traj_to_grad.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from typing import Tuple
  2. import numpy as np
  3. from seqgen.pypulseq.opts import Opts
  4. def traj_to_grad(
  5. k: np.ndarray, raster_time: float = Opts().grad_raster_time
  6. ) -> Tuple[np.ndarray, np.ndarray]:
  7. """
  8. Convert k-space trajectory `k` into gradient waveform in compliance with `raster_time` gradient raster time.
  9. Parameters
  10. ----------
  11. k : numpy.ndarray
  12. K-space trajectory to be converted into gradient waveform.
  13. raster_time : float, default=Opts().grad_raster_time
  14. Gradient raster time.
  15. Returns
  16. -------
  17. g : numpy.ndarray
  18. Gradient waveform.
  19. sr : numpy.ndarray
  20. Slew rate.
  21. """
  22. # Compute finite difference for gradients in Hz/m
  23. g = (k[1:] - k[:-1]) / raster_time
  24. # Compute the slew rate
  25. sr0 = (g[1:] - g[:-1]) / raster_time
  26. # Gradient is now sampled between k-space points whilst the slew rate is between gradient points
  27. sr = np.zeros(len(sr0) + 1)
  28. sr[0] = sr0[0]
  29. sr[1:-1] = 0.5 * (sr0[-1] + sr0[1:])
  30. sr[-1] = sr0[-1]
  31. return g, sr