Skip to content

Commit 55c9bf9

Browse files
committed
ENH: Re-add _header_data with deprecation warning
1 parent 52fe0a7 commit 55c9bf9

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

nibabel/freesurfer/mghformat.py

+53
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from ..keywordonly import kw_only_meth
2222
from ..openers import ImageOpener
2323
from ..wrapstruct import LabeledWrapStruct
24+
from ..deprecated import deprecate_with_version
2425

2526
# mgh header
2627
# See https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat
@@ -413,6 +414,58 @@ def writeftr_to(self, fileobj):
413414
fileobj.seek(self.get_footer_offset())
414415
fileobj.write(ftr_nd.tostring())
415416

417+
class _HeaderData:
418+
""" Provide interface to deprecated MGHHeader fields"""
419+
renamed = {'goodRASFlag': 'ras_good',
420+
'delta': 'voxelsize'}
421+
def __init__(self, structarr):
422+
self._structarr = structarr
423+
424+
def __getitem__(self, item):
425+
sa = self._structarr
426+
if item == 'Mdc':
427+
return np.hstack((sa['x_ras'], sa['y_ras'], sa['z_ras'])).T
428+
elif item == 'Pxyz_c':
429+
return sa['c_ras'][:, 0]
430+
elif item == 'mrparams':
431+
return np.hstack((sa['tr'], sa['flip_angle'], sa['te'], sa['ti']))
432+
elif item in self.renamed:
433+
item = self.renamed[item]
434+
return sa[item]
435+
436+
def __setitem__(self, item, val):
437+
sa = self._structarr
438+
if item == 'Mdc':
439+
sa['x_ras'][:, 0], sa['y_ras'][:, 0], sa['z_ras'][:, 0] = val
440+
elif item == 'Pxyz_c':
441+
sa['c_ras'][:, 0] = val
442+
elif item == 'mrparams':
443+
return sa['tr'], sa['flip_angle'], sa['te'], sa['ti'] = val
444+
else:
445+
if item in self.renamed.values():
446+
item = {v: k for k, v in self.renamed.items()}[item]
447+
sa[item] = val
448+
449+
@property
450+
@deprecate_with_version('_header_data is deprecated.\n'
451+
'Please use the _structarr interface instead.\n'
452+
'Note also that some fields have changed name and '
453+
'shape.',
454+
'2.3', '4.0')
455+
def _header_data(self):
456+
""" Deprecated field-access interface """
457+
return self._HeaderData(self._structarr)
458+
459+
def __getitem__(self, item):
460+
if item in ('goodRASFlag', 'delta', 'Mdc', 'Pxyz_c', 'mrparams'):
461+
return self._header_data[item]
462+
super(MGHHeader, self).__getitem__(item)
463+
464+
def __setitem__(self, item, value):
465+
if item in ('goodRASFlag', 'delta', 'Mdc', 'Pxyz_c', 'mrparams'):
466+
return self._header_data[item] = value
467+
super(MGHHeader, self).__setitem__(item, value)
468+
416469

417470
class MGHImage(SpatialImage):
418471
""" Class for MGH format image

0 commit comments

Comments
 (0)