Skip to content

Commit f947142

Browse files
committed
TEST: Test get/set_norm_zooms
1 parent 939dd92 commit f947142

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

nibabel/freesurfer/tests/test_mghformat.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,54 @@ def check_dtypes(self, expected, actual):
389389
# MGH requires the actual to be a big endian version of expected
390390
assert expected.newbyteorder('>') == actual
391391

392+
def test_norm_zooms_edge_cases(self):
393+
img_klass = self.image_class
394+
aff = np.eye(4)
395+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
396+
img = img_klass(arr, aff)
397+
398+
assert_array_almost_equal(img.header.get_zooms(),
399+
(1, 1, 1, 0))
400+
assert_array_almost_equal(img.header.get_norm_zooms(),
401+
(1, 1, 1, 0))
402+
403+
img.header.set_zooms((1, 1, 1, 2000))
404+
assert_array_almost_equal(img.header.get_zooms(),
405+
(1, 1, 1, 2000))
406+
assert_array_almost_equal(img.header.get_norm_zooms(),
407+
(1, 1, 1, 2))
408+
409+
img.header.set_norm_zooms((2, 2, 2, 3))
410+
assert_array_almost_equal(img.header.get_zooms(),
411+
(2, 2, 2, 3000))
412+
assert_array_almost_equal(img.header.get_norm_zooms(),
413+
(2, 2, 2, 3))
414+
415+
# It's legal to set zooms for spatial dimensions only
416+
img.header.set_norm_zooms((3, 3, 3))
417+
assert_array_almost_equal(img.header.get_zooms(),
418+
(3, 3, 3, 3000))
419+
assert_array_almost_equal(img.header.get_norm_zooms(),
420+
(3, 3, 3, 3))
421+
422+
arr = np.arange(24, dtype=np.int16).reshape((2, 3, 4))
423+
img = img_klass(arr, aff)
424+
425+
assert_array_almost_equal(img.header.get_zooms(), (1, 1, 1))
426+
assert_array_almost_equal(img.header.get_norm_zooms(), (1, 1, 1))
427+
428+
img.header.set_zooms((2, 2, 2))
429+
assert_array_almost_equal(img.header.get_zooms(), (2, 2, 2))
430+
assert_array_almost_equal(img.header.get_norm_zooms(), (2, 2, 2))
431+
432+
img.header.set_norm_zooms((3, 3, 3))
433+
assert_array_almost_equal(img.header.get_zooms(), (3, 3, 3))
434+
assert_array_almost_equal(img.header.get_norm_zooms(), (3, 3, 3))
435+
436+
# Cannot set TR as zoom for 3D image
437+
assert_raises(HeaderDataError, img.header.set_zooms, (4, 4, 4, 5))
438+
assert_raises(HeaderDataError, img.header.set_norm_zooms, (4, 4, 4, 5))
439+
392440

393441
class TestMGHHeader(_TestLabeledWrapStruct):
394442
header_class = MGHHeader

nibabel/tests/test_nifti1.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,55 @@ def test_write_scaling(self):
10991099
with np.errstate(invalid='ignore'):
11001100
self._check_write_scaling(slope, inter, e_slope, e_inter)
11011101

1102+
def test_norm_zooms_edge_cases(self):
1103+
img_klass = self.image_class
1104+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
1105+
aff = np.eye(4)
1106+
img = img_klass(arr, aff)
1107+
1108+
# Unknown units = 2 warnings
1109+
with warnings.catch_warnings(record=True) as warns:
1110+
assert_array_almost_equal(img.header.get_norm_zooms(),
1111+
(1, 1, 1, 1))
1112+
assert_equal(len(warns), 2)
1113+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1114+
1115+
img.header.set_xyzt_units(xyz='meter')
1116+
with warnings.catch_warnings(record=True) as warns:
1117+
assert_array_almost_equal(img.header.get_norm_zooms(),
1118+
(1000, 1000, 1000, 1))
1119+
assert_equal(len(warns), 1)
1120+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1121+
1122+
img.header.set_xyzt_units(xyz='mm', t='sec')
1123+
assert_array_almost_equal(img.header.get_norm_zooms(),
1124+
(1, 1, 1, 1))
1125+
img.header.set_xyzt_units(xyz='micron', t='sec')
1126+
assert_array_almost_equal(img.header.get_norm_zooms(),
1127+
(0.001, 0.001, 0.001, 1))
1128+
1129+
img.header.set_xyzt_units(t='sec')
1130+
with warnings.catch_warnings(record=True) as warns:
1131+
assert_array_equal(img.header.get_norm_zooms(), (1, 1, 1, 1))
1132+
assert_equal(len(warns), 1)
1133+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1134+
1135+
img.header.set_xyzt_units(xyz='mm', t='msec')
1136+
assert_array_almost_equal(img.header.get_norm_zooms(),
1137+
(1, 1, 1, 0.001))
1138+
1139+
img.header.set_xyzt_units(xyz='mm', t='usec')
1140+
assert_array_almost_equal(img.header.get_norm_zooms(),
1141+
(1, 1, 1, 0.000001))
1142+
1143+
# Verify `set_norm_zooms` resets units
1144+
img.header.set_xyzt_units(xyz='meter', t='usec')
1145+
assert_equal(img.header.get_xyzt_units(), ('meter', 'usec'))
1146+
img.header.set_norm_zooms((2, 2, 2, 2.5))
1147+
assert_array_almost_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
1148+
assert_array_almost_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
1149+
assert_equal(img.header.get_xyzt_units(), ('mm', 'sec'))
1150+
11021151

11031152
class TestNifti1Image(TestNifti1Pair):
11041153
# Run analyze-flavor spatialimage tests

nibabel/tests/test_spatialimages.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,28 @@ def test_slicer(self):
539539
assert (sliced_data == img.get_data()[sliceobj]).all()
540540
assert (sliced_data == img.get_fdata()[sliceobj]).all()
541541

542+
def test_norm_zooms(self):
543+
''' Should be true for all images '''
544+
img_klass = self.image_class
545+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
546+
aff = np.eye(4)
547+
img = img_klass(arr, aff)
548+
img.header.set_norm_zooms((2, 2, 2, 2.5))
549+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
550+
551+
def test_norm_zooms_edge_cases(self):
552+
''' Override for classes where *_norm_zooms != *_zooms '''
553+
img_klass = self.image_class
554+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
555+
aff = np.eye(4)
556+
img = img_klass(arr, aff)
557+
img.header.set_zooms((2, 2, 2, 2.5))
558+
assert_array_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
559+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
560+
img.header.set_norm_zooms((2, 2, 2, 2.5))
561+
assert_array_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
562+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
563+
542564
def test_api_deprecations(self):
543565

544566
class FakeImage(self.image_class):

0 commit comments

Comments
 (0)