SPAIR_block.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # -*- coding: utf-8 -*-
  2. """
  3. A subroutine to add SPAIR fat suppression block.
  4. Requires the params structure as input.
  5. Need to think of the reequired output (pulse sequence variable itself?)
  6. @author: petrm
  7. """
  8. #imports
  9. from math import pi
  10. import numpy as np
  11. from MRI_sequences.pypulseq.make_delay import make_delay
  12. from MRI_sequences.pypulseq.make_gauss_pulse import make_gauss_pulse
  13. from MRI_sequences.pypulseq.make_trapezoid import make_trapezoid
  14. from MRI_sequences.pypulseq.calc_duration import calc_duration
  15. def SPAIR_block(params, scanner_parameters, gz90):
  16. #function creates CHESS saturation block with accompanied gx and gy spoiled gradients
  17. params['B0'] = 1.5 # TODO add to GUI
  18. params['FS_sat_ppm'] = -3.30 # TODO add to GUI
  19. params['FS_pulse_duration'] = 0.01 # TODO add to GUI
  20. #params['IR_time'] = 0.140 # SPAIR # TODO add to GUI
  21. params['BW_sat'] = -176.26464
  22. g_rf_area = gz90.area * 10
  23. FS_sat_frequency = params['B0'] * 1e-6 * params['FS_sat_ppm'] * params['gamma']
  24. flip_SPAIR = round(180 * pi / 180)
  25. rf_SPAIR = make_gauss_pulse(flip_angle=flip_SPAIR, system=scanner_parameters, duration=params['FS_pulse_duration'],
  26. bandwidth=abs(params['BW_sat']), freq_offset=FS_sat_frequency)
  27. gx_SPAIR = make_trapezoid(channel="x", system=scanner_parameters, delay=calc_duration(rf_SPAIR),
  28. area= g_rf_area, rise_time=params['dG'])
  29. gy_SPAIR = make_trapezoid(channel="y", system=scanner_parameters, delay=calc_duration(rf_SPAIR),
  30. area= g_rf_area, rise_time=params['dG'])
  31. delay_IR = np.ceil(params['TI'] / scanner_parameters.grad_raster_time) * scanner_parameters.grad_raster_time
  32. delay_IR = make_delay(delay_IR)
  33. return rf_SPAIR, gx_SPAIR, gy_SPAIR, delay_IR