예제 #1
0
 def get_ruptures(self, srcfilter=calc.filters.nofilter, min_mag=0):
     """
     :returns: a list of EBRuptures filtered by bounding box
     """
     ebrs = []
     with datastore.read(self.filename) as dstore:
         rupgeoms = dstore['rupgeoms']
         for e0, rec in zip(self.e0, self.rup_array):
             if rec['mag'] < min_mag:
                 continue
             if srcfilter.integration_distance:
                 sids = srcfilter.close_sids(rec, self.trt)
                 if len(sids) == 0:  # the rupture is far away
                     continue
             else:
                 sids = None
             geom = rupgeoms[rec['gidx1']:rec['gidx2']].reshape(
                 rec['sx'], rec['sy'])
             rupture = get_rupture(rec, geom, self.trt)
             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
             ebr.ridx = rec['id']
             ebr.e0 = 0 if self.e0 is None else e0
             ebr.id = rec['id']  # rup_id  in the datastore
             ebrs.append(ebr)
     return ebrs
예제 #2
0
 def get_ruptures(self, srcfilter):
     """
     :returns: a list of EBRuptures filtered by bounding box
     """
     ebrs = []
     with datastore.read(self.filename) as dstore:
         rupgeoms = dstore['rupgeoms']
         for e0, rec in zip(self.e0, self.rup_array):
             if srcfilter.integration_distance:
                 sids = srcfilter.close_sids(rec, self.trt)
                 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 = code2cls[rec['code']]
             rupture = object.__new__(rupture_cls)
             rupture.rup_id = 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
             ebr.ridx = rec['id']
             ebr.e0 = 0 if self.e0 is None else e0
             ebrs.append(ebr)
     return ebrs