Skip to content

Commit a254756

Browse files
committed
test: Compare nitransforms conversions to lta_convert/c3d_affine_tool
1 parent b3dd42b commit a254756

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import nitransforms as nt
2+
import numpy as np
3+
from nibabel.tmpdirs import InGivenDirectory
4+
5+
from fmriprep.interfaces import nitransforms as fin
6+
7+
8+
def test_ConvertAffine(tmp_path, data_dir):
9+
bold = data_dir / 'sub-pixar008_task-pixar_desc-coreg_boldref.nii.gz'
10+
anat = data_dir / 'sub-pixar008_desc-preproc_T1w.nii.gz'
11+
12+
# lta_affine = nt.linear.load(data_dir / 'mri_coreg.lta')
13+
lta_convert_fsl = nt.linear.load(
14+
data_dir / 'mri_coreg-lta_convert.mat', moving=bold, reference=anat, fmt='fsl'
15+
)
16+
lta_convert_itk = nt.linear.load(data_dir / 'mri_coreg-lta_convert.txt')
17+
c3d_itk = nt.linear.load(data_dir / 'mri_coreg-c3d.txt')
18+
lta_convert_itk_inv = nt.linear.load(data_dir / 'mri_coreg-lta_convert-invert.txt')
19+
c3d_itk_inv = nt.linear.load(data_dir / 'mri_coreg-c3d-invert.txt')
20+
21+
with InGivenDirectory(tmp_path):
22+
lta_to_fsl = fin.ConvertAffine(
23+
in_xfm=data_dir / 'mri_coreg.lta',
24+
reference=anat,
25+
moving=bold,
26+
out_fmt='fsl',
27+
).run()
28+
assert lta_to_fsl.outputs.out_xfm == str(tmp_path / 'mri_coreg_fwd.mat')
29+
assert not lta_to_fsl.outputs.out_inv
30+
31+
nitransforms_fsl = nt.linear.load(
32+
lta_to_fsl.outputs.out_xfm, moving=bold, reference=anat, fmt='fsl'
33+
)
34+
assert np.allclose(nitransforms_fsl.matrix, lta_convert_fsl.matrix, atol=1e-4)
35+
36+
lta_to_itk = fin.ConvertAffine(in_xfm=data_dir / 'mri_coreg.lta', inverse=True).run()
37+
assert lta_to_itk.outputs.out_xfm == str(tmp_path / 'mri_coreg_fwd.txt')
38+
assert lta_to_itk.outputs.out_inv == str(tmp_path / 'mri_coreg_inv.txt')
39+
40+
nitransforms_itk = nt.linear.load(lta_to_itk.outputs.out_xfm)
41+
assert np.allclose(nitransforms_itk.matrix, lta_convert_itk.matrix, atol=1e-4)
42+
assert np.allclose(nitransforms_itk.matrix, c3d_itk.matrix, atol=1e-4)
43+
44+
nitransforms_itk_inv = nt.linear.load(lta_to_itk.outputs.out_inv)
45+
assert np.allclose(nitransforms_itk_inv.matrix, lta_convert_itk_inv.matrix, atol=1e-4)
46+
assert np.allclose(nitransforms_itk_inv.matrix, c3d_itk_inv.matrix, atol=1e-4)
47+
48+
fsl_to_itk = fin.ConvertAffine(
49+
in_xfm=data_dir / 'mri_coreg-lta_convert.mat',
50+
reference=anat,
51+
moving=bold,
52+
out_fmt='itk',
53+
inverse=True,
54+
).run()
55+
56+
nitransforms_itk = nt.linear.load(fsl_to_itk.outputs.out_xfm)
57+
assert np.allclose(nitransforms_itk.matrix, lta_convert_itk.matrix, atol=1e-4)
58+
assert np.allclose(nitransforms_itk.matrix, c3d_itk.matrix, atol=1e-4)
59+
60+
nitransforms_itk_inv = nt.linear.load(fsl_to_itk.outputs.out_inv)
61+
assert np.allclose(nitransforms_itk_inv.matrix, lta_convert_itk_inv.matrix, atol=1e-4)
62+
assert np.allclose(nitransforms_itk_inv.matrix, c3d_itk_inv.matrix, atol=1e-4)

0 commit comments

Comments
 (0)