magn_prep.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. """
  3. A subroutine to calculate duration of any magnetisation preparation block.
  4. Requires the params structure as input.
  5. @author: petrm
  6. """
  7. #imports
  8. from MRI_sequences.pypulseq.utilities.magn_prep.FS_CHESS_block import FS_CHESS_block
  9. from MRI_sequences.pypulseq.utilities.magn_prep.SPAIR_block import SPAIR_block
  10. from MRI_sequences.pypulseq.utilities.magn_prep.IR_block import IR_block
  11. from MRI_sequences.pypulseq.calc_duration import calc_duration
  12. def magn_prep_duration(params, scanner_parameters, gz90):
  13. params['FS'] = False #TODO: add parameters to GUI
  14. params['SPAIR'] = False #TODO: add parameters to GUI
  15. params['IR'] = False #TODO: add parameters to GUI
  16. magn_prep_dur = 0
  17. if params['FS']:
  18. rf_fs, gx_fs, gy_fs = FS_CHESS_block(params, scanner_parameters, gz90)
  19. magn_prep_dur += calc_duration(gx_fs)
  20. return magn_prep_dur
  21. elif params['SPAIR']:
  22. rf_SPAIR, gx_SPAIR, gy_SPAIR, delay_IR = SPAIR_block(params, scanner_parameters, gz90)
  23. magn_prep_dur += calc_duration(gx_SPAIR)
  24. magn_prep_dur += calc_duration(delay_IR)
  25. return magn_prep_dur
  26. elif params['IR']:
  27. rf_ir, gz_ir, delay_IR = IR_block(params, scanner_parameters)
  28. magn_prep_dur += max(calc_duration(rf_ir), calc_duration(gz_ir))
  29. magn_prep_dur += calc_duration(delay_IR)
  30. return magn_prep_dur
  31. else:
  32. return magn_prep_dur
  33. def magn_prep_add_block(params, scanner_parameters, gz90, seq):
  34. params['FS'] = False # TODO: add parameters to GUI
  35. params['SPAIR'] = False # TODO: add parameters to GUI
  36. params['IR'] = False # TODO: add parameters to GUI
  37. if params['FS']:
  38. rf_fs, gx_fs, gy_fs = FS_CHESS_block(params, scanner_parameters, gz90)
  39. seq.add_block(gx_fs, gy_fs, rf_fs)
  40. return seq
  41. elif params['SPAIR']:
  42. rf_SPAIR, gx_SPAIR, gy_SPAIR, delay_IR = SPAIR_block(params, scanner_parameters, gz90)
  43. seq.add_block(gx_SPAIR, gy_SPAIR, rf_SPAIR)
  44. seq.add_block(delay_IR)
  45. return seq
  46. elif params['IR']:
  47. # TODO add correct offset from correct slice
  48. rf_ir, gz_ir, delay_IR = IR_block(params, scanner_parameters)
  49. seq.add_block(gz_ir, rf_ir)
  50. seq.add_block(delay_IR)
  51. return seq
  52. else:
  53. return seq