Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bddf15c

Browse files
committed
TEST: Test get/set_norm_zooms
1 parent 9b8a7fa commit bddf15c

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
@@ -388,6 +388,54 @@ def check_dtypes(self, expected, actual):
388388
# MGH requires the actual to be a big endian version of expected
389389
assert_equal(expected.newbyteorder('>'), actual)
390390

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

392440
class TestMGHHeader(_TestLabeledWrapStruct):
393441
header_class = MGHHeader

‎nibabel/tests/test_nifti1.py‎

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

1033+
def test_norm_zooms_edge_cases(self):
1034+
img_klass = self.image_class
1035+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
1036+
aff = np.eye(4)
1037+
img = img_klass(arr, aff)
1038+
1039+
# Unknown units = 2 warnings
1040+
with warnings.catch_warnings(record=True) as warns:
1041+
assert_array_almost_equal(img.header.get_norm_zooms(),
1042+
(1, 1, 1, 1))
1043+
assert_equal(len(warns), 2)
1044+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1045+
1046+
img.header.set_xyzt_units(xyz='meter')
1047+
with warnings.catch_warnings(record=True) as warns:
1048+
assert_array_almost_equal(img.header.get_norm_zooms(),
1049+
(1000, 1000, 1000, 1))
1050+
assert_equal(len(warns), 1)
1051+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1052+
1053+
img.header.set_xyzt_units(xyz='mm', t='sec')
1054+
assert_array_almost_equal(img.header.get_norm_zooms(),
1055+
(1, 1, 1, 1))
1056+
img.header.set_xyzt_units(xyz='micron', t='sec')
1057+
assert_array_almost_equal(img.header.get_norm_zooms(),
1058+
(0.001, 0.001, 0.001, 1))
1059+
1060+
img.header.set_xyzt_units(t='sec')
1061+
with warnings.catch_warnings(record=True) as warns:
1062+
assert_array_equal(img.header.get_norm_zooms(), (1, 1, 1, 1))
1063+
assert_equal(len(warns), 1)
1064+
assert_raises(ValueError, img.header.get_norm_zooms, True)
1065+
1066+
img.header.set_xyzt_units(xyz='mm', t='msec')
1067+
assert_array_almost_equal(img.header.get_norm_zooms(),
1068+
(1, 1, 1, 0.001))
1069+
1070+
img.header.set_xyzt_units(xyz='mm', t='usec')
1071+
assert_array_almost_equal(img.header.get_norm_zooms(),
1072+
(1, 1, 1, 0.000001))
1073+
1074+
# Verify `set_norm_zooms` resets units
1075+
img.header.set_xyzt_units(xyz='meter', t='usec')
1076+
assert_equal(img.header.get_xyzt_units(), ('meter', 'usec'))
1077+
img.header.set_norm_zooms((2, 2, 2, 2.5))
1078+
assert_array_almost_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
1079+
assert_array_almost_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
1080+
assert_equal(img.header.get_xyzt_units(), ('mm', 'sec'))
1081+
10331082

10341083
class TestNifti1Image(TestNifti1Pair):
10351084
# Run analyze-flavor spatialimage tests

‎nibabel/tests/test_spatialimages.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,28 @@ def test_get_data(self):
411411
assert_false(rt_img.get_data() is out_data)
412412
assert_array_equal(rt_img.get_data(), in_data)
413413

414+
def test_norm_zooms(self):
415+
''' Should be true for all images '''
416+
img_klass = self.image_class
417+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
418+
aff = np.eye(4)
419+
img = img_klass(arr, aff)
420+
img.header.set_norm_zooms((2, 2, 2, 2.5))
421+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
422+
423+
def test_norm_zooms_edge_cases(self):
424+
''' Override for classes where *_norm_zooms != *_zooms '''
425+
img_klass = self.image_class
426+
arr = np.arange(120, dtype=np.int16).reshape((2, 3, 4, 5))
427+
aff = np.eye(4)
428+
img = img_klass(arr, aff)
429+
img.header.set_zooms((2, 2, 2, 2.5))
430+
assert_array_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
431+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
432+
img.header.set_norm_zooms((2, 2, 2, 2.5))
433+
assert_array_equal(img.header.get_zooms(), (2, 2, 2, 2.5))
434+
assert_array_equal(img.header.get_norm_zooms(), (2, 2, 2, 2.5))
435+
414436
def test_api_deprecations(self):
415437

416438
class FakeImage(self.image_class):

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /