Skip to content

Commit eeb4d5d

Browse files
committed
enh: enable loading of X5 affines
1 parent 2d3ba2f commit eeb4d5d

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

nitransforms/linear.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
EQUALITY_TOL,
2828
)
2929
from nitransforms.io import get_linear_factory, TransformFileError
30-
from nitransforms.io.x5 import X5Transform, X5Domain, to_filename as save_x5
30+
from nitransforms.io.x5 import (
31+
X5Transform,
32+
X5Domain,
33+
to_filename as save_x5,
34+
from_filename as load_x5,
35+
)
3136

3237

3338
class Affine(TransformBase):
@@ -174,8 +179,20 @@ def ndim(self):
174179
return self._matrix.ndim + 1
175180

176181
@classmethod
177-
def from_filename(cls, filename, fmt=None, reference=None, moving=None):
182+
def from_filename(
183+
cls, filename, fmt=None, reference=None, moving=None, x5_position=0
184+
):
178185
"""Create an affine from a transform file."""
186+
187+
if fmt and fmt.upper() == "X5":
188+
x5_xfm = load_x5(filename)[x5_position]
189+
Transform = cls if x5_xfm.array_length == 1 else LinearTransformsMapping
190+
if x5_xfm.domain:
191+
# override reference
192+
raise NotImplementedError
193+
194+
return Transform(x5_xfm.transform, reference=reference)
195+
179196
fmtlist = [fmt] if fmt is not None else ("itk", "lta", "afni", "fsl")
180197

181198
if fmt is not None and not Path(filename).exists():
@@ -265,7 +282,9 @@ def to_filename(self, filename, fmt="X5", moving=None, x5_inverse=False):
265282
if fmt.upper() == "X5":
266283
return save_x5(filename, [self.to_x5(store_inverse=x5_inverse)])
267284

268-
writer = get_linear_factory(fmt, is_array=isinstance(self, LinearTransformsMapping))
285+
writer = get_linear_factory(
286+
fmt, is_array=isinstance(self, LinearTransformsMapping)
287+
)
269288

270289
if fmt.lower() in ("itk", "ants", "elastix"):
271290
writer.from_ras(self.matrix).to_filename(filename)

0 commit comments

Comments
 (0)