Skip to content

Commit bf88f91

Browse files
authored
Merge pull request #146 from poldracklab/fix/73-fsl-lta-conversions
FIX: Add FSL-LTA-FSL regression tests
2 parents 49bca5a + ca2c962 commit bf88f91

4 files changed

+85
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
0.99971074 -0.00958054 -0.02206109 33.80017471
2+
-0.02333562 -0.60849756 -0.79321212 240.58090210
3+
-0.00582473 0.79349738 -0.60854524 70.82102203
4+
0.00000000 0.00000000 0.00000000 1.00000012
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1.00000024 -0.00016984 0.00015428 49.00255203
2+
0.00015430 0.00009513 -1.00000024 255.96905518
3+
0.00016983 1.00000024 0.00009516 -0.01236603
4+
0.00000000 0.00000000 0.00000000 1.00000012
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1.00000012 0.00015430 0.00016983 -49.04202271
2+
-0.00016984 0.00009513 1.00000012 -0.00367374
3+
0.00015428 -1.00000012 0.00009516 255.96148682
4+
0.00000000 0.00000000 0.00000000 1.00000012

nitransforms/tests/test_conversions.py

+73-11
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@
77
from ..io.lta import FSLinearTransformArray as LTA
88

99

10+
def test_concatenation(data_path):
11+
"""Check replacement to lta_concat."""
12+
lta0 = _l.load(
13+
data_path / "regressions" / "from-scanner_to-fsnative_mode-image.lta", fmt="lta"
14+
)
15+
lta1 = _l.load(
16+
data_path / "regressions" / "from-fsnative_to-bold_mode-image.lta", fmt="lta"
17+
)
18+
19+
lta_combined = _l.load(
20+
data_path / "regressions" / "from-scanner_to-bold_mode-image.lta", fmt="lta"
21+
)
22+
23+
assert np.allclose(lta1.matrix.dot(lta0.matrix), lta_combined.matrix)
24+
25+
1026
@pytest.mark.parametrize(
1127
"filename",
1228
[
@@ -18,8 +34,8 @@
1834
)
1935
def test_lta2itk_conversions(data_path, filename):
2036
"""Check conversions between formats."""
21-
lta = _l.load(data_path / "regressions" / ".".join((filename, "lta")), fmt="lta")
22-
itk = _l.load(data_path / "regressions" / ".".join((filename, "tfm")), fmt="itk")
37+
lta = _l.load(data_path / "regressions" / f"{filename}.lta", fmt="lta")
38+
itk = _l.load(data_path / "regressions" / f"{filename}.tfm", fmt="itk")
2339
assert np.allclose(lta.matrix, itk.matrix)
2440

2541

@@ -59,17 +75,63 @@ def test_itk2lta_conversions(
5975
assert np.allclose(converted_lta["xforms"][0]["m_L"], exp_lta["xforms"][0]["m_L"])
6076

6177

62-
def test_concatenation(data_path):
63-
"""Check replacement to lta_concat."""
64-
lta0 = _l.load(
65-
data_path / "regressions" / "from-scanner_to-fsnative_mode-image.lta", fmt="lta"
78+
@pytest.mark.parametrize(
79+
"fromto",
80+
[
81+
("fsnative", "bold"),
82+
("fsnative", "scanner"),
83+
("scanner", "bold"),
84+
("scanner", "fsnative"),
85+
],
86+
)
87+
def test_lta2fsl_conversions(data_path, fromto, testdata_path):
88+
"""Check conversions between formats."""
89+
filename = f"from-{fromto[0]}_to-{fromto[1]}_mode-image"
90+
movname = "bold.nii.gz" if fromto[1] == "bold" else f"T1w_{fromto[1]}.nii.gz"
91+
92+
lta = _l.load(data_path / "regressions" / f"{filename}.lta", fmt="lta")
93+
fsl = _l.load(
94+
data_path / "regressions" / f"{filename}.fsl",
95+
moving=testdata_path / movname,
96+
reference=testdata_path / f"T1w_{fromto[0]}.nii.gz",
97+
fmt="fsl",
6698
)
67-
lta1 = _l.load(
68-
data_path / "regressions" / "from-fsnative_to-bold_mode-image.lta", fmt="lta"
99+
assert np.allclose(lta.matrix, fsl.matrix, atol=1e-4)
100+
101+
102+
@pytest.mark.parametrize(
103+
"fromto",
104+
[
105+
("fsnative", "bold"),
106+
("fsnative", "scanner"),
107+
("scanner", "bold"),
108+
("scanner", "fsnative"),
109+
],
110+
)
111+
def test_fsl2lta_conversions(
112+
data_path, testdata_path, tmp_path, fromto,
113+
):
114+
"""Check conversions between formats."""
115+
filename = f"from-{fromto[0]}_to-{fromto[1]}_mode-image"
116+
refname = "bold.nii.gz" if fromto[1] == "bold" else f"T1w_{fromto[1]}.nii.gz"
117+
118+
fsl = _l.load(
119+
data_path / "regressions" / f"{filename}.fsl",
120+
reference=testdata_path / f"T1w_{fromto[0]}.nii.gz",
121+
moving=testdata_path / refname,
122+
fmt="fsl"
123+
)
124+
fsl.to_filename(
125+
tmp_path / "test.lta",
126+
fmt="fs",
69127
)
70128

71-
lta_combined = _l.load(
72-
data_path / "regressions" / "from-scanner_to-bold_mode-image.lta", fmt="lta"
129+
converted_lta = LTA.from_filename(tmp_path / "test.lta")
130+
expected_fname = (
131+
data_path / "regressions" / "".join((filename, "_type-ras2ras.lta"))
73132
)
133+
if not expected_fname.exists():
134+
expected_fname = data_path / "regressions" / "".join((filename, ".lta"))
74135

75-
assert np.allclose(lta1.matrix.dot(lta0.matrix), lta_combined.matrix)
136+
exp_lta = LTA.from_filename(expected_fname)
137+
assert np.allclose(converted_lta["xforms"][0]["m_L"], exp_lta["xforms"][0]["m_L"], atol=1e-4)

0 commit comments

Comments
 (0)