@@ -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
0 commit comments