Skip to content

Commit 29a101f

Browse files
author
CindeeM
committed
BF+TST catch mismatched hdr, mlist and added more tests
1 parent 317c0fc commit 29a101f

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

nibabel/ecat.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,14 @@ def get_series_framenumbers(self):
520520
mlist_nframes = len(frames_order)
521521
trueframenumbers = np.arange(nframes - mlist_nframes, nframes)
522522
frame_dict = {}
523-
for frame_stored, (true_order, _) in frames_order.items():
524-
#frame as stored in file -> true number in series
525-
frame_dict[frame_stored] = trueframenumbers[true_order]+1
526-
return frame_dict
527-
523+
try:
524+
for frame_stored, (true_order, _) in frames_order.items():
525+
#frame as stored in file -> true number in series
526+
frame_dict[frame_stored] = trueframenumbers[true_order]+1
527+
return frame_dict
528+
except:
529+
raise IOError('Error in header or mlist order unknown')
530+
528531
class EcatSubHeader(object):
529532

530533
_subhdrdtype = subhdr_dtype

nibabel/tests/test_ecat.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,39 @@ def test_mlist(self):
118118
6.01670000e+04, 1.00000000e+00],
119119
[ 1.68427580e+07, 6.01680000e+04,
120120
7.22000000e+04, 1.00000000e+00]])
121-
assert_true(badordermlist.get_frame_order()[0][0] == 1)
121+
assert_true(badordermlist.get_frame_order()[0][0] == 1)
122+
123+
def test_mlist_errors(self):
124+
fid = open(self.example_file, 'rb')
125+
hdr = self.header_class.from_fileobj(fid)
126+
hdr['num_frames'] = 6
127+
mlist = self.mlist_class(fid, hdr)
128+
mlist._mlist = np.array([[ 1.68427540e+07, 3.00000000e+00,
129+
1.20350000e+04, 1.00000000e+00],
130+
[ 1.68427530e+07, 1.20360000e+04,
131+
2.40680000e+04, 1.00000000e+00],
132+
[ 1.68427550e+07, 2.40690000e+04,
133+
3.61010000e+04, 1.00000000e+00],
134+
[ 1.68427560e+07, 3.61020000e+04,
135+
4.81340000e+04, 1.00000000e+00],
136+
[ 1.68427570e+07, 4.81350000e+04,
137+
6.01670000e+04, 1.00000000e+00],
138+
[ 1.68427580e+07, 6.01680000e+04,
139+
7.22000000e+04, 1.00000000e+00]])
140+
series_framenumbers = mlist.get_series_framenumbers()
141+
# first frame stored was actually 2nd frame acquired
142+
assert_true(series_framenumbers[0] == 2)
143+
order = [series_framenumbers[x] for x in sorted(series_framenumbers)]
144+
# true series order is [2,1,3,4,5,6], note counting starts at 1
145+
assert_true(order == [2, 1, 3, 4, 5, 6])
146+
mlist._mlist[0,0] = 0
147+
frames_order = mlist.get_frame_order()
148+
neworder =[frames_order[x][0] for x in sorted(frames_order)]
149+
assert_true(neworder == [1, 2, 3, 4, 5])
150+
assert_raises(IOError,
151+
mlist.get_series_framenumbers)
152+
153+
122154

123155
class TestEcatSubHeader(TestCase):
124156
header_class = EcatHeader

0 commit comments

Comments
 (0)