Skip to content

Commit 13a8dda

Browse files
committed
Merge branch 'extensions-in-hdr' into main-master
* extensions-in-hdr: RF - clean up stuff left over from previous extensions management DOC - whitespace edits and added comment
2 parents ad4cab7 + 449c055 commit 13a8dda

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed

nibabel/analyze.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ def __init__(self,
261261
Default is True.
262262
263263
Examples
264-
--------
264+
--------
265265
>>> hdr1 = AnalyzeHeader() # an empty header
266266
>>> hdr1.endianness == native_code
267267
True
@@ -366,6 +366,8 @@ def from_header(klass, header=None, check=True):
366366
# the presence of the mapping certifies the fields as
367367
# being of the same meaning as for Analyze types
368368
pass
369+
# set any fields etc that are specific to this format (overriden by
370+
# sub-classes)
369371
obj._set_format_specifics()
370372
if check:
371373
obj.check_fix()
@@ -957,7 +959,7 @@ def _getter(obj, key):
957959
return obj.get_value_label(key)
958960
except ValueError:
959961
return obj[key]
960-
962+
961963
return '\n'.join(
962964
[summary,
963965
pretty_mapping(self, _getter)])

nibabel/nifti1.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,7 @@ def get_codes(self):
357357
def get_sizeondisk(self):
358358
"""Return the size of the complete header extensions in the NIfTI file.
359359
"""
360-
# add four bytes for the NIfTI extension flag!
361-
return np.sum([e.get_sizeondisk() for e in self]) + 4
360+
return np.sum([e.get_sizeondisk() for e in self])
362361

363362
def __repr__(self):
364363
s = "Nifti1Extensions(%s)" \
@@ -534,9 +533,15 @@ def from_fileobj(klass, fileobj, endianness=None, check=True):
534533
return hdr
535534

536535
def write_to(self, fileobj):
536+
# First check that vox offset is large enough
537+
if self.is_single:
538+
vox_offset = self._header_data['vox_offset']
539+
min_vox_offset = 352 + self.extensions.get_sizeondisk()
540+
if vox_offset < min_vox_offset:
541+
raise HeaderDataError('vox offset of %d, but need at least %d'
542+
% (vox_offset, min_vox_offset))
537543
super(Nifti1Header, self).write_to(fileobj)
538-
n_exts = len(self.extensions)
539-
if n_exts == 0:
544+
if len(self.extensions) == 0:
540545
# If single file, write required 0 stream to signal no extensions
541546
if self.is_single:
542547
fileobj.write('\x00' * 4)
@@ -1408,11 +1413,7 @@ def update_header(self):
14081413
# make sure that there is space for the header. If any
14091414
# extensions, figure out necessary vox_offset for extensions to
14101415
# fit
1411-
if (self.extra.has_key('extensions') and
1412-
len(self.extra['extensions'])):
1413-
min_vox_offset = 348 + self.extra['extensions'].get_sizeondisk()
1414-
else:
1415-
min_vox_offset = 352
1416+
min_vox_offset = 352 + hdr.extensions.get_sizeondisk()
14161417
if hdr['vox_offset'] < min_vox_offset:
14171418
hdr['vox_offset'] = min_vox_offset
14181419

nibabel/tests/test_nifti1.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ def test_nifti_extensions():
429429
assert_true(exts_container.count('comment') == 2)
430430
assert_true(exts_container.count('afni') == 0)
431431
assert_true(exts_container.get_codes() == [6, 6])
432-
assert_true((exts_container.get_sizeondisk() - 4) % 16 == 0)
432+
assert_true((exts_container.get_sizeondisk()) % 16 == 0)
433433
# first extension should be short one
434434
assert_true(exts_container[0].get_content() == 'extcomment1')
435435
# add one
@@ -438,7 +438,7 @@ def test_nifti_extensions():
438438
assert_true(exts_container.get_codes() == [6, 6, 4])
439439
assert_true(exts_container.count('comment') == 2)
440440
assert_true(exts_container.count('afni') == 1)
441-
assert_true((exts_container.get_sizeondisk() - 4) % 16 == 0)
441+
assert_true((exts_container.get_sizeondisk()) % 16 == 0)
442442
# delete one
443443
del exts_container[1]
444444
assert_true(exts_container.get_codes() == [6, 4])

0 commit comments

Comments
 (0)