Exemplo n.º 1
0
def compute_hazard(sources_or_ruptures, src_filter, rlzs_by_gsim, param,
                   monitor):
    """
    Compute events, ruptures, gmfs and hazard curves
    """
    res = AccumDict()
    with monitor('building ruptures', measuremem=True):
        if isinstance(sources_or_ruptures, RuptureGetter):
            grp_id = sources_or_ruptures.grp_id
            res['ruptures'] = {}
            ruptures = list(sources_or_ruptures)
            sitecol = src_filter
        else:
            grp_id = sources_or_ruptures[0].src_group_id
            dic = sample_ruptures(sources_or_ruptures, src_filter,
                                  rlzs_by_gsim, param, monitor)
            ruptures = dic['eb_ruptures']
            res.num_events = dic['num_events']
            res.calc_times = dic['calc_times']
            res.eff_ruptures = {grp_id: dic['num_ruptures']}
            res['ruptures'] = {grp_id: ruptures}
            res.num_ruptures = len(ruptures)
            sitecol = src_filter.sitecol
    res['num_ruptures'] = len(ruptures)
    getter = GmfGetter(rlzs_by_gsim, ruptures, sitecol, param['oqparam'],
                       param['min_iml'], param['samples'])
    res.update(getter.compute_gmfs_curves(monitor))
    if param['oqparam'].save_ruptures is False:
        res.events = get_events(ruptures)
        res['ruptures'] = {}
    return res
Exemplo n.º 2
0
def compute_gmfs(sources_or_ruptures, src_filter, rlzs_by_gsim, param,
                 monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    res = AccumDict(ruptures={})
    ruptures = []
    with monitor('building ruptures', measuremem=True):
        if isinstance(sources_or_ruptures, RuptureGetter):
            # the ruptures are read from the datastore
            grp_id = sources_or_ruptures.grp_id
            ruptures.extend(sources_or_ruptures)
            sitecol = src_filter  # this is actually a site collection
        else:
            # use the ruptures sampled in prefiltering
            grp_id = sources_or_ruptures[0].src_group_id
            for src in sources_or_ruptures:
                ruptures.extend(src.eb_ruptures)
            sitecol = src_filter.sitecol
    if ruptures:
        if not param['oqparam'].save_ruptures or isinstance(
                sources_or_ruptures, RuptureGetter):  # ruptures already saved
            res.events = get_events(ruptures)
        else:
            res['ruptures'] = {grp_id: ruptures}
        getter = GmfGetter(rlzs_by_gsim, ruptures, sitecol, param['oqparam'],
                           param['min_iml'], param['samples'])
        res.update(getter.compute_gmfs_curves(monitor))
    return res
Exemplo n.º 3
0
def compute_gmfs(rupgetter, srcfilter, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    oq = param['oqparam']
    getter = GmfGetter(rupgetter, srcfilter, oq, param['amplifier'])
    return getter.compute_gmfs_curves(param.get('rlz_by_event'), monitor)
Exemplo n.º 4
0
def compute_gmfs(rupgetter, srcfilter, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    getter = GmfGetter(rupgetter, srcfilter, param['oqparam'])
    with monitor('getting ruptures'):
        getter.init()
    return getter.compute_gmfs_curves(monitor)
Exemplo n.º 5
0
def compute_gmfs(rupgetter, srcfilter, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    getter = GmfGetter(rupgetter, srcfilter, param['oqparam'])
    with monitor('getting ruptures'):
        getter.init()
    return getter.compute_gmfs_curves(monitor)
Exemplo n.º 6
0
def compute_gmfs(rupgetter, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    oq = param['oqparam']
    srcfilter = monitor.read('srcfilter')
    getter = GmfGetter(rupgetter, srcfilter, oq, param['amplifier'],
                       param['sec_perils'])
    return getter.compute_gmfs_curves(monitor)
Exemplo n.º 7
0
def compute_gmfs(rupgetter, sitecol, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    with monitor('getting ruptures'):
        ebruptures = list(rupgetter)
    getter = GmfGetter(rupgetter.rlzs_by_gsim, ebruptures, sitecol,
                       param['oqparam'], param['min_iml'])
    return getter.compute_gmfs_curves(monitor)
Exemplo n.º 8
0
 def gen_args(self):
     """
     :yields: the arguments for compute_gmfs_and_curves
     """
     oq = self.oqparam
     sitecol = self.sitecol.complete
     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:
         num_ruptures = sum(len(rs) for rs in self.precalc.result.values())
         block_size = math.ceil(num_ruptures / (oq.concurrent_tasks or 1))
         for grp_id, ruptures in self.precalc.result.items():
             if not ruptures:
                 continue
             for block in block_splitter(ruptures, block_size):
                 getter = GmfGetter(rlzs_by_gsim[grp_id], block, sitecol,
                                    imts, min_iml, oq.maximum_distance,
                                    oq.truncation_level, correl_model,
                                    oq.filter_distance,
                                    samples_by_grp[grp_id])
                 yield [getter], oq, monitor
         return
     U = len(self.datastore['ruptures'])
     logging.info('Found %d ruptures', U)
     parent = self.can_read_parent() or self.datastore
     for slc in split_in_slices(U, oq.concurrent_tasks or 1):
         getters = []
         for grp_id in rlzs_by_gsim:
             ruptures = 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, sitecol, imts,
                           min_iml, oq.maximum_distance,
                           oq.truncation_level, correl_model,
                           oq.filter_distance, samples_by_grp[grp_id]))
         yield getters, oq, monitor
Exemplo n.º 9
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()
    num_ruptures = len(dstore['ruptures'])
    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])
    ridx = int(mo.group(1))
    assert 0 <= ridx < num_ruptures, ridx
    ruptures = list(RuptureGetter(dstore, slice(ridx, ridx + 1)))
    [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.maximum_distance, oq.truncation_level, correl_model,
                       oq.filter_distance, samples)
    getter.init()
    sids = getter.computers[0].sids
    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(sids), [('lon', F64), ('lat', F64)])
    mesh['lon'] = sitecol.lons[sids]
    mesh['lat'] = sitecol.lats[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(sids), dt)
            for s, sid in enumerate(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' % (ebr.serial, rlzi, imt), 'csv')
            data = util.compose_arrays(mesh, gmfs)
            writer.save(data, dest)
    return writer.getsaved()
Exemplo n.º 10
0
def export_gmf_scenario_csv(ekey, dstore):
    what = ekey[0].split('/')
    if len(what) == 1:
        raise ValueError(r'Missing "/rup-\d+"')
    oq = dstore['oqparam']
    csm_info = dstore['csm_info']
    rlzs_assoc = csm_info.get_rlzs_assoc()
    num_ruptures = len(dstore['ruptures'])
    imts = list(oq.imtls)
    mo = re.match(r'rup-(\d+)$', what[1])
    if mo is None:
        raise ValueError(r"Invalid format: %r does not match 'rup-(\d+)$'" %
                         what[1])
    ridx = int(mo.group(1))
    assert 0 <= ridx < num_ruptures, ridx
    # for scenario there is an unique grp_id=0
    [rgetter] = gen_rupture_getters(dstore, slice(ridx, ridx + 1))
    [ebr] = rgetter.get_ruptures()
    sitecol = dstore['sitecol'].complete
    srcfilter = filters.SourceFilter(sitecol, oq.maximum_distance)
    getter = GmfGetter(rgetter, srcfilter, oq)
    getter.init()
    eids = rgetter.get_eid_rlz()['eid']
    sids = getter.computers[0].sids
    rlzs = rlzs_assoc.realizations
    hazardr = [collections.defaultdict(list) for rlz in rlzs]
    for sid, haz in getter.get_hazard().items():
        for rec in haz:
            hazardr[rec['rlzi']][sid].append(rec)
    fields = ['eid-%03d' % eid for eid in eids]
    dt = numpy.dtype([(f, F32) for f in fields])
    mesh = numpy.zeros(len(sids), [('lon', F64), ('lat', F64)])
    mesh['lon'] = sitecol.lons[sids]
    mesh['lat'] = sitecol.lats[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(sids), dt)
            for s, sid in enumerate(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' % (ebr.serial, rlzi, imt), 'csv')
            data = util.compose_arrays(mesh, gmfs)
            writer.save(data, dest)
    return writer.getsaved()
Exemplo n.º 11
0
def export_gmf_scenario_csv(ekey, dstore):
    what = ekey[0].split('/')
    if len(what) == 1:
        raise ValueError(r'Missing "/rup-\d+"')
    oq = dstore['oqparam']
    csm_info = dstore['csm_info']
    rlzs_assoc = csm_info.get_rlzs_assoc()
    num_ruptures = len(dstore['ruptures'])
    imts = list(oq.imtls)
    mo = re.match(r'rup-(\d+)$', what[1])
    if mo is None:
        raise ValueError(
            r"Invalid format: %r does not match 'rup-(\d+)$'" % what[1])
    ridx = int(mo.group(1))
    assert 0 <= ridx < num_ruptures, ridx
    # for scenario there is an unique grp_id=0
    [rgetter] = gen_rupture_getters(dstore, slice(ridx, ridx + 1))
    [ebr] = rgetter.get_ruptures()
    sitecol = dstore['sitecol'].complete
    srcfilter = filters.SourceFilter(sitecol, oq.maximum_distance)
    getter = GmfGetter(rgetter, srcfilter, oq)
    getter.init()
    eids = rgetter.get_eid_rlz()['eid']
    sids = getter.computers[0].sids
    rlzs = rlzs_assoc.realizations
    hazardr = [collections.defaultdict(list) for rlz in rlzs]
    for sid, haz in getter.get_hazard().items():
        for rec in haz:
            hazardr[rec['rlzi']][sid].append(rec)
    fields = ['eid-%03d' % eid for eid in eids]
    dt = numpy.dtype([(f, F32) for f in fields])
    mesh = numpy.zeros(len(sids), [('lon', F64), ('lat', F64)])
    mesh['lon'] = sitecol.lons[sids]
    mesh['lat'] = sitecol.lats[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(sids), dt)
            for s, sid in enumerate(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' % (ebr.serial, rlzi, imt), 'csv')
            data = util.compose_arrays(mesh, gmfs)
            writer.save(data, dest)
    return writer.getsaved()
Exemplo n.º 12
0
def compute_gmfs(ruptures, src_filter, rlzs_by_gsim, param, monitor):
    """
    Compute GMFs and optionally hazard curves
    """
    res = AccumDict(ruptures={})
    if isinstance(ruptures, RuptureGetter):
        # the ruptures are read from the datastore
        grp_id = ruptures.grp_id
        sitecol = src_filter  # this is actually a site collection
    else:
        # use the ruptures sampled in prefiltering
        grp_id = ruptures[0].grp_id
        sitecol = src_filter.sitecol
    if not param['oqparam'].save_ruptures or isinstance(
            ruptures, RuptureGetter):  # ruptures already saved
        res.events = get_events(ruptures)
    else:
        res['ruptures'] = {grp_id: ruptures}
    getter = GmfGetter(rlzs_by_gsim, ruptures, sitecol, param['oqparam'],
                       param['min_iml'], param['samples'])
    res.update(getter.compute_gmfs_curves(monitor))
    return res