Skip to content

Commit 04e953a

Browse files
committed
RF+TST: standard file loading methods for PARREC
Add methods with optional args `permit_truncated` and `scaling`: * from_file_map * from_filename * load
1 parent 930e2cf commit 04e953a

File tree

2 files changed

+45
-6
lines changed

2 files changed

+45
-6
lines changed

nibabel/parrec.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,7 @@ class PARRECImage(SpatialImage):
900900
ImageArrayProxy = PARRECArrayProxy
901901

902902
@classmethod
903-
def from_file_map(klass, file_map, permit_truncated, scaling):
903+
def from_file_map(klass, file_map, permit_truncated=False, scaling='dv'):
904904
pt = permit_truncated
905905
with file_map['header'].get_prepare_fileobj('rt') as hdr_fobj:
906906
hdr = klass.header_class.from_fileobj(hdr_fobj,
@@ -910,8 +910,14 @@ def from_file_map(klass, file_map, permit_truncated, scaling):
910910
return klass(data, hdr.get_affine(), header=hdr, extra=None,
911911
file_map=file_map)
912912

913+
@classmethod
914+
def from_filename(klass, filename, permit_truncated=False, scaling='dv'):
915+
file_map = klass.filespec_to_file_map(filename)
916+
return klass.from_file_map(file_map, permit_truncated, scaling)
917+
918+
@classmethod
919+
def load(klass, filename, permit_truncated=False, scaling='dv'):
920+
return klass.from_filename(filename, permit_truncated, scaling)
921+
913922

914-
def load(filename, permit_truncated=False, scaling='dv'):
915-
file_map = PARRECImage.filespec_to_file_map(filename)
916-
return PARRECImage.from_file_map(file_map, permit_truncated, scaling)
917-
load.__doc__ = PARRECImage.load.__doc__
923+
load = PARRECImage.load

nibabel/tests/test_parrec.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010

1111
from .. import parrec
1212
from ..parrec import (parse_PAR_header, PARRECHeader, PARRECError, vol_numbers,
13-
vol_is_full)
13+
vol_is_full, PARRECImage, PARRECArrayProxy)
1414
from ..openers import Opener
15+
from ..fileholders import FileHolder
1516

1617
from numpy.testing import (assert_almost_equal,
1718
assert_array_equal)
@@ -415,3 +416,35 @@ def assert_copy_ok(hdr1, hdr2):
415416
assert_true(trunc_hdr.permit_truncated)
416417
trunc_hdr2 = trunc_hdr.copy()
417418
assert_copy_ok(trunc_hdr, trunc_hdr2)
419+
420+
421+
def test_image_creation():
422+
# Test parts of image API in parrec image creation
423+
hdr = PARRECHeader(HDR_INFO, HDR_DEFS)
424+
arr_prox_dv = np.array(PARRECArrayProxy(EG_REC, hdr, 'dv'))
425+
arr_prox_fp = np.array(PARRECArrayProxy(EG_REC, hdr, 'fp'))
426+
good_map = dict(image = FileHolder(EG_REC),
427+
header = FileHolder(EG_PAR))
428+
trunc_map = dict(image = FileHolder(TRUNC_REC),
429+
header = FileHolder(TRUNC_PAR))
430+
for func, good_param, trunc_param in (
431+
(PARRECImage.from_filename, EG_PAR, TRUNC_PAR),
432+
(PARRECImage.load, EG_PAR, TRUNC_PAR),
433+
(parrec.load, EG_PAR, TRUNC_PAR),
434+
(PARRECImage.from_file_map, good_map, trunc_map)):
435+
img = func(good_param)
436+
assert_array_equal(img.dataobj, arr_prox_dv)
437+
img = func(good_param, False)
438+
assert_array_equal(img.dataobj, arr_prox_dv)
439+
img = func(good_param, False, 'dv')
440+
assert_array_equal(img.dataobj, arr_prox_dv)
441+
img = func(good_param, False, 'fp')
442+
assert_array_equal(img.dataobj, arr_prox_fp)
443+
assert_raises(PARRECError, func, trunc_param)
444+
assert_raises(PARRECError, func, trunc_param, False)
445+
img = func(trunc_param, True)
446+
assert_array_equal(img.dataobj, arr_prox_dv)
447+
img = func(trunc_param, True, 'dv')
448+
assert_array_equal(img.dataobj, arr_prox_dv)
449+
img = func(trunc_param, True, 'fp')
450+
assert_array_equal(img.dataobj, arr_prox_fp)

0 commit comments

Comments
 (0)