Skip to content

Commit 0036e0c

Browse files
committed
enh: set default intent code when saving CIFTI images
1 parent 4ab086b commit 0036e0c

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

nibabel/cifti2/cifti2.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,8 +1384,9 @@ def to_file_map(self, file_map=None):
13841384
header = self._nifti_header
13851385
extension = Cifti2Extension(content=self.header.to_xml())
13861386
header.extensions.append(extension)
1387+
# if intent code is not set, default to unknown CIFTI
13871388
if header.get_intent()[0] == 'none':
1388-
raise ValueError("CIFTI image has an invalid intent code.")
1389+
header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN')
13891390
data = reshape_dataobj(self.dataobj,
13901391
(1, 1, 1, 1) + self.dataobj.shape)
13911392
# If qform not set, reset pixdim values so Nifti2 does not complain

nibabel/cifti2/tests/test_new_cifti2.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,14 @@ def test_dtseries():
213213
hdr = ci.Cifti2Header(matrix)
214214
data = np.random.randn(13, 9)
215215
img = ci.Cifti2Image(data, hdr)
216-
with assert_raises(ValueError):
217-
img.to_filename('test.dtseries.nii')
216+
print(img.nifti_header.get_intent())
218217
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SERIES')
219218

220219
with InTemporaryDirectory():
221220
ci.save(img, 'test.dtseries.nii')
222221
img2 = nib.load('test.dtseries.nii')
222+
assert_true(img2.nifti_header.get_intent()[0]
223+
== 'dense data series/fiber fans')
223224
assert_true(isinstance(img2, ci.Cifti2Image))
224225
assert_true((img2.get_data() == data).all())
225226
check_series_map(img2.header.matrix.get_index_map(0))
@@ -236,13 +237,12 @@ def test_dscalar():
236237
hdr = ci.Cifti2Header(matrix)
237238
data = np.random.randn(2, 9)
238239
img = ci.Cifti2Image(data, hdr)
239-
with assert_raises(ValueError):
240-
nib.save(img, 'test.dscalar.nii')
241240
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_SCALARS')
242241

243242
with InTemporaryDirectory():
244243
ci.save(img, 'test.dscalar.nii')
245244
img2 = nib.load('test.dscalar.nii')
245+
assert_true(img2.nifti_header.get_intent()[0] == 'dense scalar')
246246
assert_true(isinstance(img2, ci.Cifti2Image))
247247
assert_true((img2.get_data() == data).all())
248248
check_scalar_map(img2.header.matrix.get_index_map(0))
@@ -259,13 +259,12 @@ def test_dlabel():
259259
hdr = ci.Cifti2Header(matrix)
260260
data = np.random.randn(2, 9)
261261
img = ci.Cifti2Image(data, hdr)
262-
with assert_raises(ValueError):
263-
ci.save(img, 'test.dlabel.nii')
264262
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_LABELS')
265263

266264
with InTemporaryDirectory():
267265
ci.save(img, 'test.dlabel.nii')
268266
img2 = nib.load('test.dlabel.nii')
267+
assert_true(img2.nifti_header.get_intent()[0] == 'dense label')
269268
assert_true(isinstance(img2, ci.Cifti2Image))
270269
assert_true((img2.get_data() == data).all())
271270
check_label_map(img2.header.matrix.get_index_map(0))
@@ -285,6 +284,7 @@ def test_dconn():
285284
with InTemporaryDirectory():
286285
ci.save(img, 'test.dconn.nii')
287286
img2 = nib.load('test.dconn.nii')
287+
assert_true(img2.nifti_header.get_intent()[0] == 'dense connectivity')
288288
assert_true(isinstance(img2, ci.Cifti2Image))
289289
assert_true((img2.get_data() == data).all())
290290
assert_equal(img2.header.matrix.get_index_map(0),
@@ -307,6 +307,8 @@ def test_ptseries():
307307
with InTemporaryDirectory():
308308
ci.save(img, 'test.ptseries.nii')
309309
img2 = nib.load('test.ptseries.nii')
310+
assert_true(img2.nifti_header.get_intent()[0]
311+
== 'parcellated data series')
310312
assert_true(isinstance(img2, ci.Cifti2Image))
311313
assert_true((img2.get_data() == data).all())
312314
check_series_map(img2.header.matrix.get_index_map(0))
@@ -328,6 +330,7 @@ def test_pscalar():
328330
with InTemporaryDirectory():
329331
ci.save(img, 'test.pscalar.nii')
330332
img2 = nib.load('test.pscalar.nii')
333+
assert_true(img2.nifti_header.get_intent()[0] == 'parcellated scalar')
331334
assert_true(isinstance(img2, ci.Cifti2Image))
332335
assert_true((img2.get_data() == data).all())
333336
check_scalar_map(img2.header.matrix.get_index_map(0))
@@ -344,11 +347,13 @@ def test_pdconn():
344347
hdr = ci.Cifti2Header(matrix)
345348
data = np.random.randn(2, 3)
346349
img = ci.Cifti2Image(data, hdr)
347-
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_DENSE_PARCELLATED')
350+
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_PARCELLATED_DENSE')
348351

349352
with InTemporaryDirectory():
350353
ci.save(img, 'test.pdconn.nii')
351354
img2 = ci.load('test.pdconn.nii')
355+
assert_true(img2.nifti_header.get_intent()[0]
356+
== 'parcellated dense connectivity')
352357
assert_true(isinstance(img2, ci.Cifti2Image))
353358
assert_true((img2.get_data() == data).all())
354359
check_geometry_map(img2.header.matrix.get_index_map(0))
@@ -370,6 +375,8 @@ def test_dpconn():
370375
with InTemporaryDirectory():
371376
ci.save(img, 'test.dpconn.nii')
372377
img2 = ci.load('test.dpconn.nii')
378+
assert_true(img2.nifti_header.get_intent()[0]
379+
== 'dense parcellated connectivity')
373380
assert_true(isinstance(img2, ci.Cifti2Image))
374381
assert_true((img2.get_data() == data).all())
375382
check_parcel_map(img2.header.matrix.get_index_map(0))
@@ -386,11 +393,12 @@ def test_plabel():
386393
hdr = ci.Cifti2Header(matrix)
387394
data = np.random.randn(2, 3)
388395
img = ci.Cifti2Image(data, hdr)
389-
img.nifti_header.set_intent('NIFTI_INTENT_CONNECTIVITY_UNKNOWN')
390396

391397
with InTemporaryDirectory():
392398
ci.save(img, 'test.plabel.nii')
393399
img2 = ci.load('test.plabel.nii')
400+
assert_true(img.nifti_header.get_intent()[0]
401+
== 'dense fiber/fan samples')
394402
assert_true(isinstance(img2, ci.Cifti2Image))
395403
assert_true((img2.get_data() == data).all())
396404
check_label_map(img2.header.matrix.get_index_map(0))
@@ -410,6 +418,8 @@ def test_pconn():
410418
with InTemporaryDirectory():
411419
ci.save(img, 'test.pconn.nii')
412420
img2 = ci.load('test.pconn.nii')
421+
assert_true(img.nifti_header.get_intent()[0]
422+
== 'parcellated connectivity')
413423
assert_true(isinstance(img2, ci.Cifti2Image))
414424
assert_true((img2.get_data() == data).all())
415425
assert_equal(img2.header.matrix.get_index_map(0),
@@ -433,6 +443,8 @@ def test_pconnseries():
433443
with InTemporaryDirectory():
434444
ci.save(img, 'test.pconnseries.nii')
435445
img2 = ci.load('test.pconnseries.nii')
446+
assert_true(img.nifti_header.get_intent()[0]
447+
== 'parcellated connectivity series')
436448
assert_true(isinstance(img2, ci.Cifti2Image))
437449
assert_true((img2.get_data() == data).all())
438450
assert_equal(img2.header.matrix.get_index_map(0),
@@ -457,6 +469,8 @@ def test_pconnscalar():
457469
with InTemporaryDirectory():
458470
ci.save(img, 'test.pconnscalar.nii')
459471
img2 = ci.load('test.pconnscalar.nii')
472+
assert_true(img.nifti_header.get_intent()[0]
473+
== 'parcellated connectivity scalar')
460474
assert_true(isinstance(img2, ci.Cifti2Image))
461475
assert_true((img2.get_data() == data).all())
462476
assert_equal(img2.header.matrix.get_index_map(0),

0 commit comments

Comments
 (0)