@@ -1626,6 +1626,39 @@ def set_xyzt_units(self, xyz=None, t=None):
1626
1626
t_code = unit_codes [t ]
1627
1627
self .structarr ['xyzt_units' ] = xyz_code + t_code
1628
1628
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
+
1629
1662
def _clean_after_mapping (self ):
1630
1663
''' Set format-specific stuff after converting header from mapping
1631
1664
0 commit comments