コード例 #1
0
 def get_pmap(self, src, s_sites, rup_indep=True):
     """
     :param src: a hazardlib source
     :param s_sites: the sites affected by it
     :returns: the probability map generated by the source
     """
     imts = self.imts
     sitecol = s_sites.complete
     N, M = len(sitecol), len(imts)
     fewsites = N <= self.max_sites_disagg
     rupdata = RupData(self)
     nrups, nsites = 0, 0
     L, G = len(self.imtls.array), len(self.gsims)
     poemap = ProbabilityMap(L, G)
     for rup, sites in self._gen_rup_sites(src, s_sites):
         try:
             with self.ctx_mon:
                 r_sites, dctx = self.make_contexts(sites, rup)
         except FarAwayRupture:
             continue
         with self.gmf_mon:
             mean_std = numpy.zeros((2, len(r_sites), M, G))
             for g, gsim in enumerate(self.gsims):
                 dctx_ = dctx.roundup(gsim.minimum_distance)
                 mean_std[:, :, :,
                          g] = gsim.get_mean_std(r_sites, rup, dctx_, imts)
         with self.poe_mon:
             pairs = zip(r_sites.sids, self._make_pnes(rup, mean_std))
         with self.pne_mon:
             if rup_indep:
                 for sid, pne in pairs:
                     poemap.setdefault(sid, rup_indep).array *= pne
             else:
                 for sid, pne in pairs:
                     poemap.setdefault(
                         sid, rup_indep).array += (1. - pne) * rup.weight
         nrups += 1
         nsites += len(r_sites)
         if fewsites:  # store rupdata
             rupdata.add(rup, src.id, r_sites, dctx)
     poemap.nrups = nrups
     poemap.nsites = nsites
     poemap.data = rupdata.data
     return poemap
コード例 #2
0
 def get_pmap(self, src, s_sites, rup_indep=True):
     """
     :param src: a hazardlib source
     :param s_sites: the sites affected by it
     :returns: the probability map generated by the source
     """
     imts = self.imts
     fewsites = len(s_sites.complete) <= self.max_sites_disagg
     rupdata = RupData(self)
     nrups, nsites = 0, 0
     L, G = len(self.imtls.array), len(self.gsims)
     poemap = ProbabilityMap(L, G)
     dists = []
     for rup, sites, maxdist in self._gen_rup_sites(src, s_sites):
         if maxdist is not None:
             dists.append(maxdist)
         try:
             with self.ctx_mon:
                 r_sites, dctx = self.make_contexts(sites, rup, maxdist)
         except FarAwayRupture:
             continue
         with self.gmf_mon:
             mean_std = base.get_mean_std(  # shape (2, N, M, G)
                 r_sites, rup, dctx, imts, self.gsims)
         with self.poe_mon:
             pairs = zip(r_sites.sids, self._make_pnes(rup, mean_std))
         with self.pne_mon:
             if rup_indep:
                 for sid, pne in pairs:
                     poemap.setdefault(sid, rup_indep).array *= pne
             else:
                 for sid, pne in pairs:
                     poemap.setdefault(sid, rup_indep).array += (
                         1.-pne) * rup.weight
         nrups += 1
         nsites += len(r_sites)
         if fewsites:  # store rupdata
             rupdata.add(rup, src.id, r_sites, dctx)
     poemap.nrups = nrups
     poemap.nsites = nsites
     poemap.maxdist = numpy.mean(dists) if dists else None
     poemap.data = rupdata.data
     return poemap