Skip to content

Commit 280b690

Browse files
committed
enh: remove buggy spaces at the end of matrices
1 parent 126a220 commit 280b690

File tree

6 files changed

+70
-30
lines changed

6 files changed

+70
-30
lines changed

nitransforms/io/lta.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,19 +224,27 @@ def to_string(self, partial=False):
224224
"nxforms = 1",
225225
] if not partial else []
226226

227+
# Standard preamble
227228
lines += [
228229
"mean = {:6.4f} {:6.4f} {:6.4f}".format(*sa["mean"].flatten()),
229230
"sigma = {:6.4f}".format(float(sa["sigma"])),
230231
"1 4 4",
231-
("{:18.15e} " * 4).format(*sa["m_L"][0]),
232-
("{:18.15e} " * 4).format(*sa["m_L"][1]),
233-
("{:18.15e} " * 4).format(*sa["m_L"][2]),
234-
("{:18.15e} " * 4).format(*sa["m_L"][3]),
232+
]
233+
234+
# Format parameters matrix
235+
lines += [
236+
" ".join(f"{v:18.15e}" for v in sa["m_L"][i])
237+
for i in range(4)
238+
]
239+
240+
lines += [
235241
"src volume info",
236242
str(self["src"]),
237243
"dst volume info",
238244
str(self["dst"]),
239245
]
246+
247+
lines += [] if partial else [""]
240248
return "\n".join(lines)
241249

242250
@classmethod
@@ -253,8 +261,8 @@ def from_string(cls, string, partial=False):
253261
label, valstring = lines.pop(0).split(" = ")
254262
assert label.strip() == key
255263

256-
val = np.genfromtxt([valstring.encode()], dtype=cls.dtype[key])
257264
if key != "nxforms":
265+
val = np.genfromtxt([valstring.encode()], dtype=cls.dtype[key])
258266
sa[key] = val.reshape(sa[key].shape)
259267
else:
260268
assert valstring.strip() == "1"
@@ -333,6 +341,7 @@ def to_string(self):
333341
footer = [
334342
"subject {}".format(self["subject"]),
335343
"fscale {:.6f}".format(float(self["fscale"])),
344+
"",
336345
]
337346
return "\n".join(header + xforms + footer)
338347

nitransforms/tests/data/affine-LAS.fs.lta

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ nxforms = 1
44
mean = 0.0000 0.0000 0.0000
55
sigma = 1.0000
66
1 4 4
7-
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8-
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9-
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10-
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
7+
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8+
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9+
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10+
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
1111
src volume info
1212
valid = 1 # volume info valid
1313
filename =
@@ -27,4 +27,4 @@ yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
2727
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
2828
cras = -2.375000000000000e+00 1.125000000000000e+00 -1.400000000000000e+01
2929
subject
30-
fscale 0.000000
30+
fscale 0.000000

nitransforms/tests/data/affine-LPS.fs.lta

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ nxforms = 1
44
mean = 0.0000 0.0000 0.0000
55
sigma = 1.0000
66
1 4 4
7-
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8-
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9-
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10-
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
7+
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8+
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9+
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10+
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
1111
src volume info
1212
valid = 1 # volume info valid
1313
filename =
@@ -27,4 +27,4 @@ yras = 0.000000000000000e+00 -1.000000000000000e+00 0.000000000000000e+00
2727
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
2828
cras = -2.375000000000000e+00 -1.625000000000000e+00 -1.400000000000000e+01
2929
subject
30-
fscale 0.000000
30+
fscale 0.000000

nitransforms/tests/data/affine-RAS.fs.lta

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ nxforms = 1
44
mean = 0.0000 0.0000 0.0000
55
sigma = 1.0000
66
1 4 4
7-
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8-
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9-
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10-
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
7+
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8+
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9+
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10+
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
1111
src volume info
1212
valid = 1 # volume info valid
1313
filename =
@@ -27,4 +27,4 @@ yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
2727
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
2828
cras = 3.750000000000000e-01 1.125000000000000e+00 -1.400000000000000e+01
2929
subject
30-
fscale 0.100000
30+
fscale 0.100000

nitransforms/tests/data/affine-oblique.fs.lta

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ nxforms = 1
44
mean = 0.0000 0.0000 0.0000
55
sigma = 1.0000
66
1 4 4
7-
9.999990000003331e-01 -9.999993333334666e-04 9.999998333333415e-04 4.000000000000001e+00
8-
1.404936252078656e-03 6.216088741390576e-01 -7.833265179640612e-01 2.000000000000000e+00
9-
1.617172252089032e-04 7.833271395738222e-01 6.216096574657063e-01 -9.999999999999999e-01
10-
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
7+
9.999989867210388e-01 -9.999993490055203e-04 9.999998146668077e-04 4.000000000000000e+00
8+
1.404936308972538e-03 6.216088533401489e-01 -7.833265066146851e-01 2.000000000000000e+00
9+
1.617172238184139e-04 7.833271622657776e-01 6.216096282005310e-01 -1.000000000000000e+00
10+
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
1111
src volume info
1212
valid = 1 # volume info valid
1313
filename =
@@ -26,5 +26,5 @@ xras = 9.999990000003334e-01 1.085831056298871e-03 -9.060735348253849e-04
2626
yras = -9.999993333334666e-04 9.959521451571500e-01 8.987950021114122e-02
2727
zras = 9.999998333333417e-04 -8.987850425874018e-02 9.959522350356693e-01
2828
cras = 1.374998625687951e+00 1.247344273937728e+00 1.491772784853978e+00
29-
subject
30-
fscale 0.000000
29+
subject
30+
fscale 0.000000

nitransforms/tests/test_io.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,39 @@ def test_LinearTransform(tmpdir):
8080
for vol in ("src", "dst"):
8181
assert lt[vol]["valid"] == 0
8282

83+
lta_text = """\
84+
# LTA file created by NiTransforms
85+
type = 1
86+
nxforms = 1
87+
mean = 0.0000 0.0000 0.0000
88+
sigma = 1.0000
89+
1 4 4
90+
1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
91+
0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
92+
0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
93+
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
94+
src volume info
95+
valid = 1 # volume info valid
96+
filename = file.nii.gz
97+
volume = 57 67 56
98+
voxelsize = 2.750000000000000e+00 2.750000000000000e+00 2.750000000000000e+00
99+
xras = -1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
100+
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
101+
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
102+
cras = -2.375000000000000e+00 1.125000000000000e+00 -1.400000000000000e+01
103+
dst volume info
104+
valid = 1 # volume info valid
105+
filename = file.nii.gz
106+
volume = 57 67 56
107+
voxelsize = 2.750000000000000e+00 2.750000000000000e+00 2.750000000000000e+00
108+
xras = -1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
109+
yras = 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
110+
zras = 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
111+
cras = -2.375000000000000e+00 1.125000000000000e+00 -1.400000000000000e+01
112+
"""
113+
xfm = LT.from_string(lta_text)
114+
assert xfm.to_string() == lta_text
115+
83116

84117
def test_LinearTransformArray(tmpdir, data_path):
85118
lta = LTA()
@@ -177,12 +210,10 @@ def test_Linear_common(tmpdir, data_path, sw, image_orientation, get_testdata):
177210
xfm = factory.from_fileobj(f)
178211

179212
# Test to_string
180-
if (sw, image_orientation) != ("fs", "oblique"): # Rounding errors
181-
assert fs._drop_comments(text) == fs._drop_comments(xfm.to_string())
213+
assert fs._drop_comments(text) == fs._drop_comments(xfm.to_string())
182214

183215
xfm.to_filename(fname)
184-
if (sw, image_orientation) != ("fs", "oblique"): # Rounding errors
185-
assert filecmp.cmp(fname, str((data_path / fname).resolve()))
216+
assert filecmp.cmp(fname, str((data_path / fname).resolve()))
186217

187218
# Test from_ras
188219
RAS = from_matvec(euler2mat(x=0.9, y=0.001, z=0.001), [4.0, 2.0, -1.0])

0 commit comments

Comments
 (0)