Source code for monalisa.io._ismrmrd_read_raw_data

"""Port of src/rawDataReader/ismrmrd/dhIsmrmrdReadRawData.m."""

import numpy as np

from monalisa._mat import scalar
from monalisa.io._mrd import read_mrd, readouts


[docs] def ismrmrd_read_raw_data(obj, flagSS, flagExcludeSI): """Readouts ``[nCh, N, nSeg*nShot]`` (single) of an ISMRMRD file, optionally without the non steady-state shots and the self-navigation segment.""" p = obj.acquisitionParams nCh, N, nSeg, nShot, nLine = (int(scalar(v)) for v in (p.nCh, p.N, p.nSeg, p.nShot, p.nLine)) nEcho, nShot_off = int(scalar(p.nEcho)), int(scalar(p.nShot_off)) _, data, _ = read_mrd(obj.argFile) r = readouts(data, N, nCh, nLine).astype(np.complex64) if nEcho == 1: r = np.transpose(r, (1, 0, 2)) r = np.reshape(r, (nCh, N, nSeg, nShot), order="F") if flagSS and nShot_off > 0: r = r[:, :, :, nShot_off:] nShot -= nShot_off if flagExcludeSI: r = r[:, :, 1:, :] nSeg -= 1 return np.reshape(r, (nCh, N, nSeg * nShot), order="F") if nEcho == 2: raise NotImplementedError("ismrmrd_read_raw_data: nEcho == 2, case not implemented yet") raise NotImplementedError("ismrmrd_read_raw_data: case not implemented")