Ejemplo n.º 1
0
def export_gmf_scenario_csv(ekey, dstore):
    what = ekey[0].split('/')
    if len(what) == 1:
        raise ValueError('Missing "/rup-\d+"')
    oq = dstore['oqparam']
    csm_info = dstore['csm_info']
    rlzs_assoc = csm_info.get_rlzs_assoc()
    samples = csm_info.get_samples_by_grp()
    imts = list(oq.imtls)
    mo = re.match('rup-(\d+)$', what[1])
    if mo is None:
        raise ValueError("Invalid format: %r does not match 'rup-(\d+)$'" %
                         what[1])
    rup_id = int(mo.group(1))
    grp_ids = sorted(int(grp[4:]) for grp in dstore['ruptures'])
    events = dstore['events']
    ruptures = list(calc._get_ruptures(dstore, events, grp_ids, rup_id))
    if not ruptures:
        logging.warn('There is no rupture %d', rup_id)
        return []
    [ebr] = ruptures
    rlzs_by_gsim = rlzs_assoc.get_rlzs_by_gsim(ebr.grp_id)
    samples = samples[ebr.grp_id]
    min_iml = calc.fix_minimum_intensity(oq.minimum_intensity, imts)
    correl_model = oq.get_correl_model()
    sitecol = dstore['sitecol'].complete
    getter = GmfGetter(rlzs_by_gsim, ruptures, sitecol, imts, min_iml,
                       oq.truncation_level, correl_model, samples)
    getter.init()
    hazardr = getter.get_hazard()
    rlzs = rlzs_assoc.realizations
    fields = ['eid-%03d' % eid for eid in getter.eids]
    dt = numpy.dtype([(f, F32) for f in fields])
    mesh = numpy.zeros(len(ebr.sids), [('lon', F64), ('lat', F64)])
    mesh['lon'] = sitecol.lons[ebr.sids]
    mesh['lat'] = sitecol.lats[ebr.sids]
    writer = writers.CsvWriter(fmt='%.5f')
    for rlzi in range(len(rlzs)):
        hazard = hazardr[rlzi]
        for imti, imt in enumerate(imts):
            gmfs = numpy.zeros(len(ebr.sids), dt)
            for s, sid in enumerate(ebr.sids):
                for rec in hazard[sid]:
                    event = 'eid-%03d' % rec['eid']
                    gmfs[s][event] = rec['gmv'][imti]
            dest = dstore.build_fname('gmf',
                                      'rup-%s-rlz-%s-%s' % (rup_id, rlzi, imt),
                                      'csv')
            data = util.compose_arrays(mesh, gmfs)
            writer.save(data, dest)
    return writer.getsaved()
Ejemplo n.º 2
0
 def gen_args(self):
     """
     :yields: the arguments for compute_gmfs_and_curves
     """
     oq = self.oqparam
     monitor = self.monitor(self.core_task.__name__)
     imts = list(oq.imtls)
     min_iml = self.get_min_iml(oq)
     correl_model = oq.get_correl_model()
     try:
         csm_info = self.csm.info
     except AttributeError:  # no csm
         csm_info = self.datastore['csm_info']
     samples_by_grp = csm_info.get_samples_by_grp()
     rlzs_by_gsim = {
         grp_id: self.rlzs_assoc.get_rlzs_by_gsim(grp_id)
         for grp_id in samples_by_grp
     }
     if self.precalc:
         for grp_id, ruptures in self.precalc.result.items():
             if not ruptures:
                 continue
             for block in block_splitter(ruptures, oq.ruptures_per_block):
                 getter = GmfGetter(rlzs_by_gsim[grp_id], block,
                                    self.sitecol, imts, min_iml,
                                    oq.maximum_distance,
                                    oq.truncation_level, correl_model,
                                    samples_by_grp[grp_id])
                 yield [getter], oq, monitor
         return
     parent = self.can_read_parent() or self.datastore
     U = len(parent['ruptures'])
     logging.info('Found %d ruptures', U)
     if parent is not self.datastore:  # accessible parent
         parent.close()
     for slc in split_in_slices(U, oq.concurrent_tasks or 1):
         getters = []
         for grp_id in rlzs_by_gsim:
             ruptures = calc.RuptureGetter(parent, slc, grp_id)
             if parent is self.datastore:  # not accessible parent
                 ruptures = list(ruptures)
                 if not ruptures:
                     continue
             getters.append(
                 GmfGetter(rlzs_by_gsim[grp_id], ruptures, self.sitecol,
                           imts, min_iml, oq.maximum_distance,
                           oq.truncation_level, correl_model,
                           samples_by_grp[grp_id]))
         yield getters, oq, monitor
Ejemplo n.º 3
0
 def gen_args(self, ruptures_by_grp):
     """
     :param ruptures_by_grp: a dictionary of EBRupture objects
     :yields: the arguments for compute_gmfs_and_curves
     """
     oq = self.oqparam
     monitor = self.monitor(self.core_task.__name__)
     imts = list(oq.imtls)
     min_iml = calc.fix_minimum_intensity(oq.minimum_intensity, imts)
     correl_model = oq.get_correl_model()
     try:
         csm_info = self.csm.info
     except AttributeError:  # no csm
         csm_info = self.datastore['csm_info']
     samples_by_grp = csm_info.get_samples_by_grp()
     for grp_id in ruptures_by_grp:
         ruptures = ruptures_by_grp[grp_id]
         if not ruptures:
             continue
         rlzs_by_gsim = self.rlzs_assoc.get_rlzs_by_gsim(grp_id)
         for block in block_splitter(ruptures, oq.ruptures_per_block):
             samples = samples_by_grp[grp_id]
             getter = GmfGetter(rlzs_by_gsim, block, self.sitecol, imts,
                                min_iml, oq.truncation_level, correl_model,
                                samples)
             yield getter, oq, monitor