|
21 | 21 | from ..keywordonly import kw_only_meth
|
22 | 22 | from ..openers import ImageOpener
|
23 | 23 | from ..wrapstruct import LabeledWrapStruct
|
| 24 | +from ..deprecated import deprecate_with_version |
24 | 25 |
|
25 | 26 | # mgh header
|
26 | 27 | # See https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat
|
@@ -413,6 +414,58 @@ def writeftr_to(self, fileobj):
|
413 | 414 | fileobj.seek(self.get_footer_offset())
|
414 | 415 | fileobj.write(ftr_nd.tostring())
|
415 | 416 |
|
| 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 | + |
416 | 469 |
|
417 | 470 | class MGHImage(SpatialImage):
|
418 | 471 | """ Class for MGH format image
|
|
0 commit comments