code: def read(self, filename):
          
          f = h5py.File(filename, "r")
          self.data = []
          for i in range(f['data'].attrs['length']):
              self.data.append(f['data']['data_' + str(i)].value)
          self.u = []
          for i in range(f['u'].attrs['length']):
              self.u.append(f['u']['u_' + str(i)].value)
          self.sigma = []
          for i in range(f['sigma'].attrs['length']):
              self.sigma.append(f['sigma']['sigma_' + str(i)].value)
          self.v = []
          for i in range(f['v'].attrs['length']):
              self.v.append(f['v']['v_' + str(i)].value)
          self.stachans = [tuple(stachan.decode('ascii').split('.'))
                           for stachan in f['stachans'].value]
          self.dimension = f['data'].attrs['dimension']
          self.filt_order = f['data'].attrs['filt_order']
          self.highcut = f['data'].attrs['highcut']
          self.lowcut = f['data'].attrs['lowcut']
          self.multiplex = bool(f['data'].attrs['multiplex'])
          self.sampling_rate = f['data'].attrs['sampling_rate']
          if isinstance(f['data'].attrs['name'], str):
              self.name = f['data'].attrs['name']
          else:
              self.name = f['data'].attrs['name'].decode('ascii')
          return self
docs: Read detector from a file, must be HDF5 format.
  
          Reads a Detector object from an HDF5 file, usually created by \
          eqcorrscan.
  
          :type filename: str
          :param filename: Filename to save the detector to.