Skip to content

Commit ce1083c

Browse files
oestebanjmarabottosgiavasis
committed
enh: finalize storing affines in X5
Co-authored-by: Julien Marabotto <166002186+jmarabotto@users.noreply.github.com> Co-authored-by: sgiavasis <sgiava77@gmail.com>
1 parent 6f707fc commit ce1083c

File tree

2 files changed

+8
-20
lines changed

2 files changed

+8
-20
lines changed

nitransforms/linear.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
EQUALITY_TOL,
2828
)
2929
from nitransforms.io import get_linear_factory, TransformFileError
30-
from nitransforms.io.x5 import X5Transform, X5Domain
30+
from nitransforms.io.x5 import X5Transform, X5Domain, to_filename as save_x5
3131

3232

3333
class Affine(TransformBase):
@@ -260,9 +260,12 @@ def map(self, x, inverse=False):
260260
affine = self._inverse
261261
return affine.dot(coords).T[..., :-1]
262262

263-
def to_filename(self, filename, fmt="X5", moving=None):
263+
def to_filename(self, filename, fmt="X5", moving=None, x5_inverse=False):
264264
"""Store the transform in the requested output format."""
265-
writer = get_linear_factory(fmt, is_array=False)
265+
if fmt.upper() == "X5":
266+
return save_x5(filename, [self.to_x5(store_inverse=x5_inverse)])
267+
268+
writer = get_linear_factory(fmt, is_array=isinstance(self, LinearTransformsMapping))
266269

267270
if fmt.lower() in ("itk", "ants", "elastix"):
268271
writer.from_ras(self.matrix).to_filename(filename)
@@ -407,21 +410,6 @@ def map(self, x, inverse=False):
407410
affine = self._inverse
408411
return np.swapaxes(affine.dot(coords), 1, 2)
409412

410-
def to_filename(self, filename, fmt="X5", moving=None):
411-
"""Store the transform in the requested output format."""
412-
writer = get_linear_factory(fmt, is_array=True)
413-
414-
if fmt.lower() in ("itk", "ants", "elastix"):
415-
writer.from_ras(self.matrix).to_filename(filename)
416-
else:
417-
# Rest of the formats peek into moving and reference image grids
418-
writer.from_ras(
419-
self.matrix,
420-
reference=self.reference,
421-
moving=ImageGrid(moving) if moving is not None else self.reference,
422-
).to_filename(filename)
423-
return filename
424-
425413

426414
def load(filename, fmt=None, reference=None, moving=None):
427415
"""

nitransforms/tests/test_linear.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ def test_linear_to_x5(tmpdir, store_inverse):
263263
assert node.array_length == 1
264264
assert (node.metadata or {}).get("GeneratedBy") == "FreeSurfer 8"
265265

266-
io.x5.to_filename("export1.x5", [node])
266+
aff.to_filename("export1.x5", x5_inverse=store_inverse)
267267

268268
# Test with Domain
269269
img = nb.Nifti1Image(np.zeros((2, 2, 2), dtype="float32"), np.eye(4))
@@ -273,7 +273,7 @@ def test_linear_to_x5(tmpdir, store_inverse):
273273
node = aff.to_x5()
274274
assert node.domain.grid
275275
assert node.domain.size == aff.reference.shape
276-
io.x5.to_filename("export2.x5", [node])
276+
aff.to_filename("export2.x5", x5_inverse=store_inverse)
277277

278278
# Test with Jacobian
279279
node.jacobian = np.zeros((2, 2, 2), dtype="float32")

0 commit comments

Comments
 (0)