diff --git a/fsl/data/image.py b/fsl/data/image.py index 2060aad046a95f998625ac0f2520240a500b845c..d39259a9e4882e3f308edd2913dc5d89ea75938a 100644 --- a/fsl/data/image.py +++ b/fsl/data/image.py @@ -254,7 +254,7 @@ class Nifti(notifier.Notifier, meta.Meta): shape, pixdim) - self.header = header + self.__header = header self.__shape = shape self.__origShape = origShape self.__pixdim = pixdim @@ -492,6 +492,24 @@ class Nifti(notifier.Notifier, meta.Meta): return ''.join([c for c in val if c in string.printable]).strip() + @property + def header(self): + """Return a reference to the ``nibabel`` header object. """ + return self.__header + + + @header.setter + def header(self, header): + """Replace the ``nibabel`` header object managed by this ``Nifti`` + with a new header. The new header must have the same dimensions, + voxel size, and orientation as the old one. + """ + new = Nifti(header) + if not (self.sameSpace(new) and self.ndim == new.ndim): + raise ValueError('Incompatible header') + self.__header = new + + @property def niftiVersion(self): """Returns the NIFTI file version: @@ -1411,12 +1429,6 @@ class Image(Nifti): nib.save(self.__nibImage, tmpfname) - # nibabel should close any old - # file handles when the image/ - # header refs are deleted - self.__nibImage = None - self.header = None - # Copy to final destination, # and reload from there imcp.imcp(tmpfname, filename, overwrite=True)