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 2bfc8d7

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

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-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: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,39 @@ 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+
''' Get zooms in mm/s units '''
1631+
raw_zooms = self.get_zooms()
1632+
xyz_zooms = raw_zooms[:3]
1633+
t_zoom = raw_zooms[3] if len(raw_zooms) > 3 else None
1634+
1635+
xyz_code, t_code = self.get_xyzt_units()
1636+
xyz_msg = t_msg = ''
1637+
if xyz_code == 'unknown':
1638+
xyz_msg = 'Unknown spatial units'
1639+
xyz_code = 'mm'
1640+
if t_code == 'unknown' and t_zoom is not None:
1641+
t_msg = 'Unknown time units'
1642+
t_code = 'sec'
1643+
if raise_unknown and (xyz_msg, t_msg) != ('', ''):
1644+
if xyz_msg and t_msg:
1645+
msg = 'Unknown spatial and time units'
1646+
else:
1647+
msg = xyz_msg or t_msg
1648+
raise ValueError("Error: {}".format(msg))
1649+
if xyz_msg:
1650+
warnings.warn('{} - assuming mm'.format(xyz_msg))
1651+
if t_msg:
1652+
warnings.warn('{} - assuming sec'.format(t_msg))
1653+
1654+
xyz_factor = {'meter': 0.001, 'mm': 1, 'usec': 1000}[xyz_code]
1655+
t_factor = {'sec': 1, 'msec': 1000, 'usec': 1000000}[t_code]
1656+
1657+
xyz_zooms = tuple(np.array(xyz_zooms) / xyz_factor)
1658+
t_zoom = (t_zoom / t_factor,) if t_zoom is not None else ()
1659+
1660+
return xyz_zooms + t_zoom
1661+
16291662
def _clean_after_mapping(self):
16301663
''' Set format-specific stuff after converting header from mapping
16311664

‎nibabel/spatialimages.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,10 @@ def set_zooms(self, zooms):
241241
raise HeaderDataError('zooms must be positive')
242242
self._zooms = zooms
243243

244+
def get_norm_zooms(self, raise_unknown=False):
245+
''' Get zooms in mm/s units '''
246+
return self.get_zooms()
247+
244248
def get_base_affine(self):
245249
shape = self.get_data_shape()
246250
zooms = self.get_zooms()

0 commit comments

Comments
(0)

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