Skip to content

Commit dd399a7

Browse files
Julien Marabottooesteban
authored andcommitted
enh: small changes to implementation of . x5
1 parent e465332 commit dd399a7

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

nitransforms/base.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,55 @@ def apply(self, *args, **kwargs):
366366

367367
return apply(self, *args, **kwargs)
368368

369+
def _to_hdf5(self, x5_root):
370+
"""Serialize this object into the x5 file format."""
371+
transform_group = x5_root.create_group("TransformGroup")
372+
373+
"""Group '0' containing Affine transform"""
374+
transform_0 = transform_group.create_group("0")
375+
376+
transform_0.attrs["Type"] = "Affine"
377+
transform_0.create_dataset("Transform", data=self._matrix)
378+
transform_0.create_dataset("Inverse", data=np.linalg.inv(self._matrix))
379+
380+
metadata = {"key": "value"}
381+
transform_0.attrs["Metadata"] = str(metadata)
382+
383+
"""sub-group 'Domain' contained within group '0' """
384+
domain_group = transform_0.create_group("Domain")
385+
domain_group.attrs["Grid"] = self.grid
386+
domain_group.create_dataset("Size", data=_as_homogeneous(self._reference.shape))
387+
domain_group.create_dataset("Mapping", data=self.map)
388+
389+
raise NotImplementedError
390+
391+
def read_x5(self, x5_root):
392+
variables = {}
393+
with h5py.File(x5_root, "r") as f:
394+
f.visititems(lambda filename, x5_root: self._from_hdf5(filename, x5_root, variables))
395+
396+
_transform = variables["TransformGroup/0/Transform"]
397+
_inverse = variables["TransformGroup/0/Inverse"]
398+
_size = variables["TransformGroup/0/Domain/Size"]
399+
_map = variables["TransformGroup/0/Domain/Mapping"]
400+
401+
return _transform, _inverse, _size, _map
402+
403+
def _from_hdf5(self, name, x5_root, storage):
404+
if isinstance(x5_root, h5py.Dataset):
405+
storage[name] = {
406+
'type': 'dataset',
407+
'attrs': dict(x5_root.attrs),
408+
'shape': x5_root.shape,
409+
'data': x5_root[()] # Read the data
410+
}
411+
elif isinstance(x5_root, h5py.Group):
412+
storage[name] = {
413+
'type': 'group',
414+
'attrs': dict(x5_root.attrs),
415+
'members': {}
416+
}
417+
369418

370419
def _as_homogeneous(xyz, dtype="float32", dim=3):
371420
"""

0 commit comments

Comments
 (0)