Source code for monalisa.io._siemens_read_raw_data
"""Port of src/rawDataReader/siemens/bmSiemensReadRawData.m."""
import numpy as np
from monalisa._mat import scalar
from monalisa.io._twix import read_twix
[docs]
def siemens_read_raw_data(obj, flagSS, flagExcludeSI):
"""Readouts ``[nCh, N, nSeg*nShot]`` of a Siemens file (see ``SiemensReader.read_raw_data``)."""
p = obj.acquisitionParams
nCh, N, nSeg, nShot = (int(scalar(v)) for v in (p.nCh, p.N, p.nSeg, p.nShot))
nEcho, nShot_off = int(scalar(p.nEcho)), int(scalar(p.nShot_off))
readouts = read_twix(obj.argFile).image.unsorted()
if nEcho == 1:
readouts = np.transpose(readouts, (1, 0, 2))
readouts = np.reshape(readouts, (nCh, N, nSeg, nShot), order="F")
if flagSS and nShot_off > 0:
readouts = readouts[:, :, :, nShot_off:]
nShot -= nShot_off
if flagExcludeSI:
readouts = readouts[:, :, 1:, :]
nSeg -= 1
return np.reshape(readouts, (nCh, N, nSeg * nShot), order="F")
if nEcho == 2:
raise NotImplementedError("siemens_read_raw_data: nEcho == 2, case not implemented yet")
raise NotImplementedError("siemens_read_raw_data: case not implemented")