docs: def __ReadFromFile(self, datapath):
          """Reads file and returns containing 3D data and its metadata.
          Supported formats: pklz, pkl, hdf5, idx, dcm, Dcm, dicom, bz2 and "raw files"
  
          :param datapath: path to file to read
          :return: tuple (data3d, metadata)
          """
          def _create_meta(_datapath):
              """Just simply returns some dict. This functions exists in order to keep DRY"""
              meta = {
                  'series_number': 0,
                  'datadir': _datapath
              }
              return meta
  
          path, ext = os.path.splitext(datapath)
          ext = ext[1:]
          if ext in ('pklz', 'pkl'):
              logger.debug('pklz format detected')
              from . import misc
              data = misc.obj_from_file(datapath, filetype='pkl')
              data3d = data.pop('data3d')
              # metadata must have series_number
              metadata = _create_meta(datapath)
              metadata.update(data)
  
          elif ext in ['hdf5']:
              from . import hdf5_io
              datap = hdf5_io.load_dict_from_hdf5(datapath)
              # datap = self.read_hdf5(datapath)
              data3d = datap.pop('data3d')
  
              # back compatibility
              if 'metadata' in datap.keys():
                  datap = datap['metadata']
              # metadata must have series_number
              metadata = _create_meta(datapath)
              metadata.update(datap)
  
          elif ext in ['idx']:
              from . import idxformat
              idxreader = idxformat.IDXReader()
              data3d, metadata = idxreader.read(datapath)
          elif ext in ['dcm', 'DCM', 'dicom']:
              data3d, metadata = self._read_with_sitk(datapath)
              metadata = self._fix_sitk_bug(datapath, metadata)
          elif ext in ["bz2"]:
              new_datapath = tgz.untar(datapath)
              data3d, metadata = self.__ReadFromDirectory(new_datapath)
          else:
              logger.debug('file format "' + str(ext) + '"')
              # reading raw file
              data3d, metadata = self._read_with_sitk(datapath)
          return data3d, metadata