docs: def get_ruptures(self, srcfilter=calc.filters.nofilter):
          """
          :returns: a list of EBRuptures filtered by bounding box
          """
          ebrs = []
          with datastore.read(self.filename) as dstore:
              rupgeoms = dstore['rupgeoms']
              for rec in self.rup_array:
                  if srcfilter.integration_distance:
                      sids = srcfilter.close_sids(rec, self.trt, rec['mag'])
                      if len(sids) == 0:  # the rupture is far away
                          continue
                  else:
                      sids = None
                  mesh = numpy.zeros((3, rec['sy'], rec['sz']), F32)
                  geom = rupgeoms[rec['gidx1']:rec['gidx2']].reshape(
                      rec['sy'], rec['sz'])
                  mesh[0] = geom['lon']
                  mesh[1] = geom['lat']
                  mesh[2] = geom['depth']
                  rupture_cls, surface_cls = self.code2cls[rec['code']]
                  rupture = object.__new__(rupture_cls)
                  rupture.serial = rec['serial']
                  rupture.surface = object.__new__(surface_cls)
                  rupture.mag = rec['mag']
                  rupture.rake = rec['rake']
                  rupture.hypocenter = geo.Point(*rec['hypo'])
                  rupture.occurrence_rate = rec['occurrence_rate']
                  rupture.tectonic_region_type = self.trt
                  if surface_cls is geo.PlanarSurface:
                      rupture.surface = geo.PlanarSurface.from_array(
                          mesh[:, 0, :])
                  elif surface_cls is geo.MultiSurface:
                      # mesh has shape (3, n, 4)
                      rupture.surface.__init__([
                          geo.PlanarSurface.from_array(mesh[:, i, :])
                          for i in range(mesh.shape[1])])
                  elif surface_cls is geo.GriddedSurface:
                      # fault surface, strike and dip will be computed
                      rupture.surface.strike = rupture.surface.dip = None
                      rupture.surface.mesh = Mesh(*mesh)
                  else:
                      # fault surface, strike and dip will be computed
                      rupture.surface.strike = rupture.surface.dip = None
                      rupture.surface.__init__(RectangularMesh(*mesh))
                  grp_id = rec['grp_id']
                  ebr = EBRupture(rupture, rec['srcidx'], grp_id,
                                  rec['n_occ'], self.samples)
                  # not implemented: rupture_slip_direction
                  ebr.sids = sids
                  ebrs.append(ebr)
          return ebrs