Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 4 additions & 0 deletions
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‎

Lines changed: 32 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /