FS_CHESS_block.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # -*- coding: utf-8 -*-
  2. """
  3. A subroutine to add FS 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 MRI_sequences.pypulseq.make_gauss_pulse import make_gauss_pulse
  10. from MRI_sequences.pypulseq.make_trapezoid import make_trapezoid
  11. from MRI_sequences.pypulseq.calc_rf_center import calc_rf_center
  12. from MRI_sequences.pypulseq.calc_duration import calc_duration
  13. import numpy as np
  14. def FS_CHESS_block(params, scanner_parameters, gz90):
  15. #function creates CHESS saturation block with accompanied gx and gy spoiled gradients
  16. flip_fs = round(110 * np.pi / 180, 3) #TODO ad parameter to GUI
  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'] = 8e-3 # TODO add to GUI
  20. FS_sat_frequency = params['B0'] * 1e-6 * params['FS_sat_ppm'] * params['gamma']
  21. g_rf_area = gz90.area * 10
  22. rf_fs = make_gauss_pulse(flip_angle=flip_fs, system=scanner_parameters, duration=params['FS_pulse_duration'],
  23. bandwidth=abs(params['BW_sat']), freq_offset=FS_sat_frequency)
  24. #TODO
  25. #rf_fs.phaseOffset=-2*pi*rf_fs.freqOffset*mr.calcRfCenter(rf_fs)
  26. gx_fs = make_trapezoid(channel="x", system=scanner_parameters, delay=calc_duration(rf_fs),
  27. area= 4*g_rf_area, rise_time=params['dG'])
  28. gy_fs = make_trapezoid(channel="y", system=scanner_parameters, delay=calc_duration(rf_fs),
  29. area= 4*g_rf_area, rise_time=params['dG'])
  30. return rf_fs, gx_fs, gy_fs