class_docstr: Class to wrap general DICOM files
  
  Methods:
  
  * get_data()
  * get_pixel_array()
  * is_same_series(other)
  * __getitem__ : return attributes from `dcm_data`
  * get(key[, default]) - as usual given __getitem__ above
  
  Attributes and things that look like attributes:
  
  * affine : (4, 4) array
  * dcm_data : object
  * image_shape : tuple
  * image_orient_patient : (3,2) array
  * slice_normal : (3,) array
  * rotation_matrix : (3,3) array
  * voxel_sizes : tuple length 3
  * image_position : sequence length 3
  * slice_indicator : float
  * series_signature : tuple
docstr: voxel sizes for array as returned by ``get_data()``
docstr_tok: ["voxel","sizes","for","array","as","returned","by","``","get_data","(",")","``"]
code: def voxel_sizes(self):
      """voxel sizes for array as returned by ``get_data()``"""
      # pix space gives (row_spacing, column_spacing).  That is, the
      # mm you move when moving from one row to the next, and the mm
      # you move when moving from one column to the next
      pix_space = self.get("PixelSpacing")
      if pix_space is None:
          return None
      zs = self.get("SpacingBetweenSlices")
      if zs is None:
          zs = self.get("SliceThickness")
          if zs is None or zs == "":
              zs = 1
      # Protect from python decimals in pydicom 0.9.7
      zs = float(zs)
      pix_space = list(map(float, pix_space))
      return tuple(pix_space + [zs])
  
imports: import operator
  import warnings
  import numpy
  from nibabel.optpkg import optional_package
  from ..onetime import auto_attr
  from ..openers import ImageOpener
  from .None import csareader
  from .dwiparams import B2q, nearest_pos_semi_def, q2bg
label_desc: Use image node_id 6 for calling the Wrapper obj's underlying member method code with example usage: obj.voxel_sizes() and returns: tuple, None