Skip to content

Commit f5435f5

Browse files
committed
ENH: Add get_norm_zooms for zooms in mm/s units
1 parent b2c0f81 commit f5435f5

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

nibabel/analyze.py

+4
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,10 @@ def set_zooms(self, zooms):
710710
pixdims = hdr['pixdim']
711711
pixdims[1:ndim + 1] = zooms[:]
712712

713+
def get_norm_zooms(self):
714+
''' Get zooms in mm/s units '''
715+
return self.get_zooms()
716+
713717
def as_analyze_map(self):
714718
""" Return header as mapping for conversion to Analyze types
715719

nibabel/nifti1.py

+32
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,38 @@ def set_xyzt_units(self, xyz=None, t=None):
16261626
t_code = unit_codes[t]
16271627
self.structarr['xyzt_units'] = xyz_code + t_code
16281628

1629+
def get_norm_zooms(self, raise_unknown=False):
1630+
raw_zooms = self.get_zooms()
1631+
xyz_zooms = raw_zooms[:3]
1632+
t_zoom = raw_zooms[3] if len(raw_zooms) > 3 else None
1633+
1634+
xyz_code, t_code = self.get_xyzt_units()
1635+
xyz_msg = t_msg = ''
1636+
if xyz_code == 'unknown':
1637+
xyz_msg = 'Unknown spatial units'
1638+
xyz_code = 'mm'
1639+
if t_code == 'unknown' and t_zoom is not None:
1640+
t_msg = 'Unknown time units'
1641+
t_code = 'sec'
1642+
if raise_unknown and (xyz_msg, t_msg) != ('', ''):
1643+
if xyz_msg and t_msg:
1644+
msg = 'Unknown spatial and time units'
1645+
else:
1646+
msg = xyz_msg or t_msg
1647+
raise ValueError("Error: {}".format(msg))
1648+
if xyz_msg:
1649+
warnings.warn('{} - assuming mm'.format(xyz_msg))
1650+
if t_msg:
1651+
warnings.warn('{} - assuming sec'.format(t_msg))
1652+
1653+
xyz_factor = {'meter': 0.001, 'mm': 1, 'usec': 1000}[xyz_code]
1654+
t_factor = {'sec': 1, 'msec': 1000, 'usec': 1000000}[t_code]
1655+
1656+
xyz_zooms = tuple(np.array(xyz_zooms) / xyz_factor)
1657+
t_zoom = (t_zoom / t_factor,) if t_zoom is not None else ()
1658+
1659+
return xyz_zooms + t_zoom
1660+
16291661
def _clean_after_mapping(self):
16301662
''' Set format-specific stuff after converting header from mapping
16311663

0 commit comments

Comments
 (0)