From b560da6a172144593de117f05dd328a93fe2941c Mon Sep 17 00:00:00 2001 From: mathiasg Date: Fri, 23 Feb 2018 16:25:32 -0500 Subject: [PATCH 1/8] fix: explicitly set intent codes to allow proper loading --- nibabel/cifti2/tests/test_new_cifti2.py | 40 ++++++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index f0fd59f284..855181c1be 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -8,6 +8,7 @@ """ import numpy as np +import nibabel as nib from nibabel import cifti2 as ci from nibabel.tmpdirs import InTemporaryDirectory @@ -212,10 +213,12 @@ def test_dtseries(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(13, 9) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES') with InTemporaryDirectory(): ci.save(img, 'test.dtseries.nii') - img2 = ci.load('test.dtseries.nii') + img2 = nib.load('test.dtseries.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) check_geometry_map(img2.header.matrix.get_index_map(1)) @@ -231,10 +234,12 @@ def test_dscalar(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS') with InTemporaryDirectory(): ci.save(img, 'test.dscalar.nii') - img2 = ci.load('test.dscalar.nii') + img2 = nib.load('test.dscalar.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) check_geometry_map(img2.header.matrix.get_index_map(1)) @@ -250,10 +255,12 @@ def test_dlabel(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_LABELS') with InTemporaryDirectory(): ci.save(img, 'test.dlabel.nii') - img2 = ci.load('test.dlabel.nii') + img2 = nib.load('test.dlabel.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) check_geometry_map(img2.header.matrix.get_index_map(1)) @@ -267,10 +274,12 @@ def test_dconn(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(9, 9) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE') with InTemporaryDirectory(): ci.save(img, 'test.dconn.nii') - img2 = ci.load('test.dconn.nii') + img2 = nib.load('test.dconn.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), img2.header.matrix.get_index_map(1)) @@ -287,10 +296,12 @@ def test_ptseries(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(13, 3) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SERIES') with InTemporaryDirectory(): ci.save(img, 'test.ptseries.nii') - img2 = ci.load('test.ptseries.nii') + img2 = nib.load('test.ptseries.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) check_parcel_map(img2.header.matrix.get_index_map(1)) @@ -306,10 +317,12 @@ def test_pscalar(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SCALAR') with InTemporaryDirectory(): ci.save(img, 'test.pscalar.nii') - img2 = ci.load('test.pscalar.nii') + img2 = nib.load('test.pscalar.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) check_parcel_map(img2.header.matrix.get_index_map(1)) @@ -325,10 +338,12 @@ def test_pdconn(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_PARCELLATED') with InTemporaryDirectory(): ci.save(img, 'test.pdconn.nii') img2 = ci.load('test.pdconn.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_geometry_map(img2.header.matrix.get_index_map(0)) check_parcel_map(img2.header.matrix.get_index_map(1)) @@ -344,10 +359,12 @@ def test_dpconn(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_PARCELLATED') with InTemporaryDirectory(): ci.save(img, 'test.dpconn.nii') img2 = ci.load('test.dpconn.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_parcel_map(img2.header.matrix.get_index_map(0)) check_geometry_map(img2.header.matrix.get_index_map(1)) @@ -367,6 +384,7 @@ def test_plabel(): with InTemporaryDirectory(): ci.save(img, 'test.plabel.nii') img2 = ci.load('test.plabel.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) check_parcel_map(img2.header.matrix.get_index_map(1)) @@ -380,10 +398,12 @@ def test_pconn(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(3, 3) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED') with InTemporaryDirectory(): ci.save(img, 'test.pconn.nii') img2 = ci.load('test.pconn.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), img2.header.matrix.get_index_map(1)) @@ -394,17 +414,19 @@ def test_pconn(): def test_pconnseries(): parcel_map = create_parcel_map((0, 1)) series_map = create_series_map((2, )) - matrix = ci.Cifti2Matrix() matrix.append(parcel_map) matrix.append(series_map) hdr = ci.Cifti2Header(matrix) data = np.random.randn(3, 3, 13) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_' + 'PARCELLATED_SERIES') with InTemporaryDirectory(): ci.save(img, 'test.pconnseries.nii') img2 = ci.load('test.pconnseries.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), img2.header.matrix.get_index_map(1)) @@ -416,17 +438,19 @@ def test_pconnseries(): def test_pconnscalar(): parcel_map = create_parcel_map((0, 1)) scalar_map = create_scalar_map((2, )) - matrix = ci.Cifti2Matrix() matrix.append(parcel_map) matrix.append(scalar_map) hdr = ci.Cifti2Header(matrix) data = np.random.randn(3, 3, 13) img = ci.Cifti2Image(data, hdr) + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_' + 'PARCELLATED_SCALAR') with InTemporaryDirectory(): ci.save(img, 'test.pconnscalar.nii') img2 = ci.load('test.pconnscalar.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), img2.header.matrix.get_index_map(1)) From 8d5d70d28f73bca4f15fa971a08770800779c47d Mon Sep 17 00:00:00 2001 From: mathiasg Date: Fri, 23 Feb 2018 17:53:37 -0500 Subject: [PATCH 2/8] fix: do not allow saving of images without intent --- nibabel/cifti2/cifti2.py | 2 ++ nibabel/cifti2/tests/test_new_cifti2.py | 38 +++++++++++++------------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/nibabel/cifti2/cifti2.py b/nibabel/cifti2/cifti2.py index 3f8b47e897..6a260d4535 100644 --- a/nibabel/cifti2/cifti2.py +++ b/nibabel/cifti2/cifti2.py @@ -1442,4 +1442,6 @@ def save(img, filename): filename : str filename to which to save image """ + if img.nifti_header.get_intent()[0] == 'none': + raise AttributeError("CIFTI image has an invalid intent code.") Cifti2Image.instance_to_filename(img, filename) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index 855181c1be..2485659f46 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -371,24 +371,26 @@ def test_dpconn(): del img2 -def test_plabel(): - label_map = create_label_map((0, )) - parcel_map = create_parcel_map((1, )) - matrix = ci.Cifti2Matrix() - matrix.append(label_map) - matrix.append(parcel_map) - hdr = ci.Cifti2Header(matrix) - data = np.random.randn(2, 3) - img = ci.Cifti2Image(data, hdr) - - with InTemporaryDirectory(): - ci.save(img, 'test.plabel.nii') - img2 = ci.load('test.plabel.nii') - assert_true(isinstance(img2, ci.Cifti2Image)) - assert_true((img2.get_data() == data).all()) - check_label_map(img2.header.matrix.get_index_map(0)) - check_parcel_map(img2.header.matrix.get_index_map(1)) - del img2 +# SKIP until intent code is specified +# https://www.nitrc.org/forum/attachment.php?attachid=341&group_id=454&forum_id=1955 +# def test_plabel(): +# label_map = create_label_map((0, )) +# parcel_map = create_parcel_map((1, )) +# matrix = ci.Cifti2Matrix() +# matrix.append(label_map) +# matrix.append(parcel_map) +# hdr = ci.Cifti2Header(matrix) +# data = np.random.randn(2, 3) +# img = ci.Cifti2Image(data, hdr) +# +# with InTemporaryDirectory(): +# ci.save(img, 'test.plabel.nii') +# img2 = ci.load('test.plabel.nii') +# assert_true(isinstance(img2, ci.Cifti2Image)) +# assert_true((img2.get_data() == data).all()) +# check_label_map(img2.header.matrix.get_index_map(0)) +# check_parcel_map(img2.header.matrix.get_index_map(1)) +# del img2 def test_pconn(): From fc619c0f864edb026ad14fe21f91439f66e9516f Mon Sep 17 00:00:00 2001 From: mathiasg Date: Mon, 26 Feb 2018 14:02:13 -0500 Subject: [PATCH 3/8] fix: use unknown CIFTI type, raise ValueError if incorrect intent code --- nibabel/cifti2/cifti2.py | 2 +- nibabel/cifti2/tests/test_new_cifti2.py | 39 ++++++++++++------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/nibabel/cifti2/cifti2.py b/nibabel/cifti2/cifti2.py index 6a260d4535..0a08ef3ae6 100644 --- a/nibabel/cifti2/cifti2.py +++ b/nibabel/cifti2/cifti2.py @@ -1443,5 +1443,5 @@ def save(img, filename): filename to which to save image """ if img.nifti_header.get_intent()[0] == 'none': - raise AttributeError("CIFTI image has an invalid intent code.") + raise ValueError("CIFTI image has an invalid intent code.") Cifti2Image.instance_to_filename(img, filename) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index 2485659f46..a97ce91f04 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -371,26 +371,25 @@ def test_dpconn(): del img2 -# SKIP until intent code is specified -# https://www.nitrc.org/forum/attachment.php?attachid=341&group_id=454&forum_id=1955 -# def test_plabel(): -# label_map = create_label_map((0, )) -# parcel_map = create_parcel_map((1, )) -# matrix = ci.Cifti2Matrix() -# matrix.append(label_map) -# matrix.append(parcel_map) -# hdr = ci.Cifti2Header(matrix) -# data = np.random.randn(2, 3) -# img = ci.Cifti2Image(data, hdr) -# -# with InTemporaryDirectory(): -# ci.save(img, 'test.plabel.nii') -# img2 = ci.load('test.plabel.nii') -# assert_true(isinstance(img2, ci.Cifti2Image)) -# assert_true((img2.get_data() == data).all()) -# check_label_map(img2.header.matrix.get_index_map(0)) -# check_parcel_map(img2.header.matrix.get_index_map(1)) -# del img2 +def test_plabel(): + label_map = create_label_map((0, )) + parcel_map = create_parcel_map((1, )) + matrix = ci.Cifti2Matrix() + matrix.append(label_map) + matrix.append(parcel_map) + hdr = ci.Cifti2Header(matrix) + data = np.random.randn(2, 3) + img = ci.Cifti2Image(data, hdr + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN') + + with InTemporaryDirectory(): + ci.save(img, 'test.plabel.nii') + img2 = ci.load('test.plabel.nii') + assert_true(isinstance(img2, ci.Cifti2Image)) + assert_true((img2.get_data() == data).all()) + check_label_map(img2.header.matrix.get_index_map(0)) + check_parcel_map(img2.header.matrix.get_index_map(1)) + del img2 def test_pconn(): From 4ab086bab6d41872bc69a6db159b647c671e3329 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Sun, 4 Mar 2018 15:55:23 -0500 Subject: [PATCH 4/8] enh: move cifti intent check into to_file_map --- nibabel/cifti2/cifti2.py | 4 ++-- nibabel/cifti2/tests/test_new_cifti2.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/nibabel/cifti2/cifti2.py b/nibabel/cifti2/cifti2.py index 0a08ef3ae6..1fbe165a49 100644 --- a/nibabel/cifti2/cifti2.py +++ b/nibabel/cifti2/cifti2.py @@ -1384,6 +1384,8 @@ def to_file_map(self, file_map=None): header = self._nifti_header extension = Cifti2Extension(content=self.header.to_xml()) header.extensions.append(extension) + if header.get_intent()[0] == 'none': + raise ValueError("CIFTI image has an invalid intent code.") data = reshape_dataobj(self.dataobj, (1, 1, 1, 1) + self.dataobj.shape) # If qform not set, reset pixdim values so Nifti2 does not complain @@ -1442,6 +1444,4 @@ def save(img, filename): filename : str filename to which to save image """ - if img.nifti_header.get_intent()[0] == 'none': - raise ValueError("CIFTI image has an invalid intent code.") Cifti2Image.instance_to_filename(img, filename) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index a97ce91f04..c4c2dd079d 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -12,7 +12,7 @@ from nibabel import cifti2 as ci from nibabel.tmpdirs import InTemporaryDirectory -from nose.tools import assert_true, assert_equal +from nose.tools import assert_true, assert_equal, assert_raises affine = [[-1.5, 0, 0, 90], [0, 1.5, 0, -85], @@ -213,6 +213,8 @@ def test_dtseries(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(13, 9) img = ci.Cifti2Image(data, hdr) + with assert_raises(ValueError): + img.to_filename('test.dtseries.nii') img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES') with InTemporaryDirectory(): @@ -234,6 +236,8 @@ def test_dscalar(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) + with assert_raises(ValueError): + nib.save(img, 'test.dscalar.nii') img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS') with InTemporaryDirectory(): @@ -255,6 +259,8 @@ def test_dlabel(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) + with assert_raises(ValueError): + ci.save(img, 'test.dlabel.nii') img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_LABELS') with InTemporaryDirectory(): @@ -379,7 +385,7 @@ def test_plabel(): matrix.append(parcel_map) hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) - img = ci.Cifti2Image(data, hdr + img = ci.Cifti2Image(data, hdr) img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN') with InTemporaryDirectory(): From 0036e0c4766aefa8453de3ddf68ec7e433a40805 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 6 Mar 2018 12:18:15 -0500 Subject: [PATCH 5/8] enh: set default intent code when saving CIFTI images --- nibabel/cifti2/cifti2.py | 3 ++- nibabel/cifti2/tests/test_new_cifti2.py | 30 ++++++++++++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/nibabel/cifti2/cifti2.py b/nibabel/cifti2/cifti2.py index 1fbe165a49..73126b6dea 100644 --- a/nibabel/cifti2/cifti2.py +++ b/nibabel/cifti2/cifti2.py @@ -1384,8 +1384,9 @@ def to_file_map(self, file_map=None): header = self._nifti_header extension = Cifti2Extension(content=self.header.to_xml()) header.extensions.append(extension) + # if intent code is not set, default to unknown CIFTI if header.get_intent()[0] == 'none': - raise ValueError("CIFTI image has an invalid intent code.") + header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN') data = reshape_dataobj(self.dataobj, (1, 1, 1, 1) + self.dataobj.shape) # If qform not set, reset pixdim values so Nifti2 does not complain diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index c4c2dd079d..6d9d948fad 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -213,13 +213,14 @@ def test_dtseries(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(13, 9) img = ci.Cifti2Image(data, hdr) - with assert_raises(ValueError): - img.to_filename('test.dtseries.nii') + print(img.nifti_header.get_intent()) img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES') with InTemporaryDirectory(): ci.save(img, 'test.dtseries.nii') img2 = nib.load('test.dtseries.nii') + assert_true(img2.nifti_header.get_intent()[0] + == 'dense data series/fiber fans') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -236,13 +237,12 @@ def test_dscalar(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) - with assert_raises(ValueError): - nib.save(img, 'test.dscalar.nii') img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS') with InTemporaryDirectory(): ci.save(img, 'test.dscalar.nii') img2 = nib.load('test.dscalar.nii') + assert_true(img2.nifti_header.get_intent()[0] == 'dense scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -259,13 +259,12 @@ def test_dlabel(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 9) img = ci.Cifti2Image(data, hdr) - with assert_raises(ValueError): - ci.save(img, 'test.dlabel.nii') img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_LABELS') with InTemporaryDirectory(): ci.save(img, 'test.dlabel.nii') img2 = nib.load('test.dlabel.nii') + assert_true(img2.nifti_header.get_intent()[0] == 'dense label') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -285,6 +284,7 @@ def test_dconn(): with InTemporaryDirectory(): ci.save(img, 'test.dconn.nii') img2 = nib.load('test.dconn.nii') + assert_true(img2.nifti_header.get_intent()[0] == 'dense connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -307,6 +307,8 @@ def test_ptseries(): with InTemporaryDirectory(): ci.save(img, 'test.ptseries.nii') img2 = nib.load('test.ptseries.nii') + assert_true(img2.nifti_header.get_intent()[0] + == 'parcellated data series') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -328,6 +330,7 @@ def test_pscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pscalar.nii') img2 = nib.load('test.pscalar.nii') + assert_true(img2.nifti_header.get_intent()[0] == 'parcellated scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -344,11 +347,13 @@ def test_pdconn(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) img = ci.Cifti2Image(data, hdr) - img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_PARCELLATED') + img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_DENSE') with InTemporaryDirectory(): ci.save(img, 'test.pdconn.nii') img2 = ci.load('test.pdconn.nii') + assert_true(img2.nifti_header.get_intent()[0] + == 'parcellated dense connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_geometry_map(img2.header.matrix.get_index_map(0)) @@ -370,6 +375,8 @@ def test_dpconn(): with InTemporaryDirectory(): ci.save(img, 'test.dpconn.nii') img2 = ci.load('test.dpconn.nii') + assert_true(img2.nifti_header.get_intent()[0] + == 'dense parcellated connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_parcel_map(img2.header.matrix.get_index_map(0)) @@ -386,11 +393,12 @@ def test_plabel(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(2, 3) img = ci.Cifti2Image(data, hdr) - img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN') with InTemporaryDirectory(): ci.save(img, 'test.plabel.nii') img2 = ci.load('test.plabel.nii') + assert_true(img.nifti_header.get_intent()[0] + == 'dense fiber/fan samples') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -410,6 +418,8 @@ def test_pconn(): with InTemporaryDirectory(): ci.save(img, 'test.pconn.nii') img2 = ci.load('test.pconn.nii') + assert_true(img.nifti_header.get_intent()[0] + == 'parcellated connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -433,6 +443,8 @@ def test_pconnseries(): with InTemporaryDirectory(): ci.save(img, 'test.pconnseries.nii') img2 = ci.load('test.pconnseries.nii') + assert_true(img.nifti_header.get_intent()[0] + == 'parcellated connectivity series') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -457,6 +469,8 @@ def test_pconnscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pconnscalar.nii') img2 = ci.load('test.pconnscalar.nii') + assert_true(img.nifti_header.get_intent()[0] + == 'parcellated connectivity scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), From e995d50bdd8a132f5b6619c1c3d04f498dd67c14 Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 6 Mar 2018 12:19:52 -0500 Subject: [PATCH 6/8] STY: remove unused import --- nibabel/cifti2/tests/test_new_cifti2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index 6d9d948fad..395c4c05d9 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -12,7 +12,7 @@ from nibabel import cifti2 as ci from nibabel.tmpdirs import InTemporaryDirectory -from nose.tools import assert_true, assert_equal, assert_raises +from nose.tools import assert_true, assert_equal affine = [[-1.5, 0, 0, 90], [0, 1.5, 0, -85], From 5f6b64f5240d71ba9eb383bc88f52b1b865f99bb Mon Sep 17 00:00:00 2001 From: mathiasg Date: Tue, 6 Mar 2018 15:22:44 -0500 Subject: [PATCH 7/8] sty: utilize assert_equals --- nibabel/cifti2/tests/test_new_cifti2.py | 43 +++++++++++++------------ 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index 395c4c05d9..033593e42a 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -213,14 +213,13 @@ def test_dtseries(): hdr = ci.Cifti2Header(matrix) data = np.random.randn(13, 9) img = ci.Cifti2Image(data, hdr) - print(img.nifti_header.get_intent()) img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES') with InTemporaryDirectory(): ci.save(img, 'test.dtseries.nii') img2 = nib.load('test.dtseries.nii') - assert_true(img2.nifti_header.get_intent()[0] - == 'dense data series/fiber fans') + assert_equal(img2.nifti_header.get_intent()[0], + 'dense data series/fiber fans') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -242,7 +241,7 @@ def test_dscalar(): with InTemporaryDirectory(): ci.save(img, 'test.dscalar.nii') img2 = nib.load('test.dscalar.nii') - assert_true(img2.nifti_header.get_intent()[0] == 'dense scalar') + assert_equal(img2.nifti_header.get_intent()[0], 'dense scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -264,7 +263,7 @@ def test_dlabel(): with InTemporaryDirectory(): ci.save(img, 'test.dlabel.nii') img2 = nib.load('test.dlabel.nii') - assert_true(img2.nifti_header.get_intent()[0] == 'dense label') + assert_equal(img2.nifti_header.get_intent()[0], 'dense label') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -284,7 +283,7 @@ def test_dconn(): with InTemporaryDirectory(): ci.save(img, 'test.dconn.nii') img2 = nib.load('test.dconn.nii') - assert_true(img2.nifti_header.get_intent()[0] == 'dense connectivity') + assert_equal(img2.nifti_header.get_intent()[0], 'dense connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -307,8 +306,8 @@ def test_ptseries(): with InTemporaryDirectory(): ci.save(img, 'test.ptseries.nii') img2 = nib.load('test.ptseries.nii') - assert_true(img2.nifti_header.get_intent()[0] - == 'parcellated data series') + assert_equal(img2.nifti_header.get_intent()[0], + 'parcellated data series') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -330,7 +329,7 @@ def test_pscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pscalar.nii') img2 = nib.load('test.pscalar.nii') - assert_true(img2.nifti_header.get_intent()[0] == 'parcellated scalar') + assert_equal(img2.nifti_header.get_intent()[0], 'parcellated scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -352,8 +351,8 @@ def test_pdconn(): with InTemporaryDirectory(): ci.save(img, 'test.pdconn.nii') img2 = ci.load('test.pdconn.nii') - assert_true(img2.nifti_header.get_intent()[0] - == 'parcellated dense connectivity') + assert_equal(img2.nifti_header.get_intent()[0], + 'parcellated dense connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_geometry_map(img2.header.matrix.get_index_map(0)) @@ -375,8 +374,8 @@ def test_dpconn(): with InTemporaryDirectory(): ci.save(img, 'test.dpconn.nii') img2 = ci.load('test.dpconn.nii') - assert_true(img2.nifti_header.get_intent()[0] - == 'dense parcellated connectivity') + assert_equal(img2.nifti_header.get_intent()[0], + 'dense parcellated connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_parcel_map(img2.header.matrix.get_index_map(0)) @@ -397,8 +396,8 @@ def test_plabel(): with InTemporaryDirectory(): ci.save(img, 'test.plabel.nii') img2 = ci.load('test.plabel.nii') - assert_true(img.nifti_header.get_intent()[0] - == 'dense fiber/fan samples') + assert_equal(img.nifti_header.get_intent()[0], + 'dense fiber/fan samples') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -418,8 +417,8 @@ def test_pconn(): with InTemporaryDirectory(): ci.save(img, 'test.pconn.nii') img2 = ci.load('test.pconn.nii') - assert_true(img.nifti_header.get_intent()[0] - == 'parcellated connectivity') + assert_equal(img.nifti_header.get_intent()[0], + 'parcellated connectivity') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -431,6 +430,7 @@ def test_pconn(): def test_pconnseries(): parcel_map = create_parcel_map((0, 1)) series_map = create_series_map((2, )) + matrix = ci.Cifti2Matrix() matrix.append(parcel_map) matrix.append(series_map) @@ -443,8 +443,8 @@ def test_pconnseries(): with InTemporaryDirectory(): ci.save(img, 'test.pconnseries.nii') img2 = ci.load('test.pconnseries.nii') - assert_true(img.nifti_header.get_intent()[0] - == 'parcellated connectivity series') + assert_equal(img.nifti_header.get_intent()[0], + 'parcellated connectivity series') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -457,6 +457,7 @@ def test_pconnseries(): def test_pconnscalar(): parcel_map = create_parcel_map((0, 1)) scalar_map = create_scalar_map((2, )) + matrix = ci.Cifti2Matrix() matrix.append(parcel_map) matrix.append(scalar_map) @@ -469,8 +470,8 @@ def test_pconnscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pconnscalar.nii') img2 = ci.load('test.pconnscalar.nii') - assert_true(img.nifti_header.get_intent()[0] - == 'parcellated connectivity scalar') + assert_equal(img.nifti_header.get_intent()[0], + 'parcellated connectivity scalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), From ba81e3069a80afb15280c0ce6c9f2f88b2e926ca Mon Sep 17 00:00:00 2001 From: mathiasg Date: Thu, 8 Mar 2018 09:57:36 -0500 Subject: [PATCH 8/8] fix: use correct CIFTI intent names --- nibabel/cifti2/parse_cifti2.py | 24 +++++++++---------- nibabel/cifti2/tests/test_new_cifti2.py | 31 ++++++++++--------------- 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/nibabel/cifti2/parse_cifti2.py b/nibabel/cifti2/parse_cifti2.py index c1046a64d3..4b3d5fa267 100644 --- a/nibabel/cifti2/parse_cifti2.py +++ b/nibabel/cifti2/parse_cifti2.py @@ -52,27 +52,27 @@ def _mangle(self, value): # The codes below appear on the CIFTI-2 standard # http://www.nitrc.org/plugins/mwiki/index.php/cifti:ConnectivityMatrixFileFormats # https://www.nitrc.org/forum/attachment.php?attachid=341&group_id=454&forum_id=1955 - (3000, 'dense fiber/fan samples', (), 'NIFTI_INTENT_CONNECTIVITY_UNKNOWN'), - (3001, 'dense connectivity', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE'), - (3002, 'dense data series/fiber fans', (), + (3000, 'ConnUnknown', (), 'NIFTI_INTENT_CONNECTIVITY_UNKNOWN'), + (3001, 'ConnDense', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE'), + (3002, 'ConnDenseSeries', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES'), - (3003, 'parcellated connectivity', (), + (3003, 'ConnParcels', (), 'NIFTI_INTENT_CONNECTIVITY_PARCELLATED'), - (3004, 'parcellated data series', (), + (3004, 'ConnParcelSries', (), "NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SERIES"), - (3006, 'dense scalar', (), + (3006, 'ConnDenseScalar', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS'), - (3007, 'dense label', (), + (3007, 'ConnDenseLabel', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE_LABELS'), - (3008, 'parcellated scalar', (), + (3008, 'ConnParcelScalr', (), 'NIFTI_INTENT_CONNECTIVITY_PARCELLATED_SCALAR'), - (3009, 'parcellated dense connectivity', (), + (3009, 'ConnParcelDense', (), 'NIFTI_INTENT_CONNECTIVITY_PARCELLATED_DENSE'), - (3010, 'dense parcellated connectivity', (), + (3010, 'ConnDenseParcel', (), 'NIFTI_INTENT_CONNECTIVITY_DENSE_PARCELLATED'), - (3011, 'parcellated connectivity series', (), + (3011, 'ConnPPSr', (), 'NIFTI_INTENT_CONNECTIVITY_PARCELLATED_PARCELLATED_SERIES'), - (3012, 'parcellated connectivity scalar', (), + (3012, 'ConnPPSc', (), 'NIFTI_INTENT_CONNECTIVITY_PARCELLATED_PARCELLATED_SCALAR'))) diff --git a/nibabel/cifti2/tests/test_new_cifti2.py b/nibabel/cifti2/tests/test_new_cifti2.py index 033593e42a..1555037175 100644 --- a/nibabel/cifti2/tests/test_new_cifti2.py +++ b/nibabel/cifti2/tests/test_new_cifti2.py @@ -219,7 +219,7 @@ def test_dtseries(): ci.save(img, 'test.dtseries.nii') img2 = nib.load('test.dtseries.nii') assert_equal(img2.nifti_header.get_intent()[0], - 'dense data series/fiber fans') + 'ConnDenseSeries') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -241,7 +241,7 @@ def test_dscalar(): with InTemporaryDirectory(): ci.save(img, 'test.dscalar.nii') img2 = nib.load('test.dscalar.nii') - assert_equal(img2.nifti_header.get_intent()[0], 'dense scalar') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnDenseScalar') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -263,7 +263,7 @@ def test_dlabel(): with InTemporaryDirectory(): ci.save(img, 'test.dlabel.nii') img2 = nib.load('test.dlabel.nii') - assert_equal(img2.nifti_header.get_intent()[0], 'dense label') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnDenseLabel') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -283,7 +283,7 @@ def test_dconn(): with InTemporaryDirectory(): ci.save(img, 'test.dconn.nii') img2 = nib.load('test.dconn.nii') - assert_equal(img2.nifti_header.get_intent()[0], 'dense connectivity') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnDense') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -306,8 +306,7 @@ def test_ptseries(): with InTemporaryDirectory(): ci.save(img, 'test.ptseries.nii') img2 = nib.load('test.ptseries.nii') - assert_equal(img2.nifti_header.get_intent()[0], - 'parcellated data series') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnParcelSries') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_series_map(img2.header.matrix.get_index_map(0)) @@ -329,7 +328,7 @@ def test_pscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pscalar.nii') img2 = nib.load('test.pscalar.nii') - assert_equal(img2.nifti_header.get_intent()[0], 'parcellated scalar') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnParcelScalr') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_scalar_map(img2.header.matrix.get_index_map(0)) @@ -351,8 +350,7 @@ def test_pdconn(): with InTemporaryDirectory(): ci.save(img, 'test.pdconn.nii') img2 = ci.load('test.pdconn.nii') - assert_equal(img2.nifti_header.get_intent()[0], - 'parcellated dense connectivity') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnParcelDense') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_geometry_map(img2.header.matrix.get_index_map(0)) @@ -374,8 +372,7 @@ def test_dpconn(): with InTemporaryDirectory(): ci.save(img, 'test.dpconn.nii') img2 = ci.load('test.dpconn.nii') - assert_equal(img2.nifti_header.get_intent()[0], - 'dense parcellated connectivity') + assert_equal(img2.nifti_header.get_intent()[0], 'ConnDenseParcel') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_parcel_map(img2.header.matrix.get_index_map(0)) @@ -396,8 +393,7 @@ def test_plabel(): with InTemporaryDirectory(): ci.save(img, 'test.plabel.nii') img2 = ci.load('test.plabel.nii') - assert_equal(img.nifti_header.get_intent()[0], - 'dense fiber/fan samples') + assert_equal(img.nifti_header.get_intent()[0], 'ConnUnknown') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) check_label_map(img2.header.matrix.get_index_map(0)) @@ -417,8 +413,7 @@ def test_pconn(): with InTemporaryDirectory(): ci.save(img, 'test.pconn.nii') img2 = ci.load('test.pconn.nii') - assert_equal(img.nifti_header.get_intent()[0], - 'parcellated connectivity') + assert_equal(img.nifti_header.get_intent()[0], 'ConnParcels') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -443,8 +438,7 @@ def test_pconnseries(): with InTemporaryDirectory(): ci.save(img, 'test.pconnseries.nii') img2 = ci.load('test.pconnseries.nii') - assert_equal(img.nifti_header.get_intent()[0], - 'parcellated connectivity series') + assert_equal(img.nifti_header.get_intent()[0], 'ConnPPSr') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0), @@ -470,8 +464,7 @@ def test_pconnscalar(): with InTemporaryDirectory(): ci.save(img, 'test.pconnscalar.nii') img2 = ci.load('test.pconnscalar.nii') - assert_equal(img.nifti_header.get_intent()[0], - 'parcellated connectivity scalar') + assert_equal(img.nifti_header.get_intent()[0], 'ConnPPSc') assert_true(isinstance(img2, ci.Cifti2Image)) assert_true((img2.get_data() == data).all()) assert_equal(img2.header.matrix.get_index_map(0),