docs: def _read_binary(self):
          """Reads data and metadata from binary format."""
          # NOTE: binary files store binned data using Fortran-like ordering.
          # Dimensions are iterated like z, y, x (so x changes fastest)
  
          header_path = self.path + 'header'
          with open(header_path) as f_header:
              self._read_header(f_header.read())
  
          data = np.fromfile(self.path)
  
          # separate data by statistic
          data = data.reshape((len(self.statistics), -1), order='F')
          data = {stat: data[i] for i, stat in enumerate(self.statistics)}
  
          # reshape data according to binning
          data_shape = [dim.n_bins for dim in self.dimensions]
          data = {k: v.reshape(data_shape, order='F') for k, v in data.items()}
  
          self.data = data