コード例 #1
0
def export_agg_losses_ebr(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    loss_types = dstore.get_attr('composite_risk_model', 'loss_types')
    name, ext = export.keyfunc(ekey)
    agg_losses = dstore[name]
    oq = dstore['oqparam']
    dtlist = [('event_tag', (numpy.string_, 100)), ('year', U32)
              ] + oq.loss_dt_list()
    elt_dt = numpy.dtype(dtlist)
    rlzs_assoc = dstore['csm_info'].get_rlzs_assoc()
    sm_ids = sorted(rlzs_assoc.rlzs_by_smodel)
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    for sm_id in sm_ids:
        rlzs = rlzs_assoc.rlzs_by_smodel[sm_id]
        try:
            events = dstore['events/sm-%04d' % sm_id]
        except KeyError:
            continue
        if not len(events):
            continue
        for rlz in rlzs:
            dest = dstore.build_fname('agg_losses', rlz, 'csv')
            eids = set()
            rlzname = 'rlz-%03d' % rlz.ordinal
            if rlzname not in agg_losses:
                continue
            for loss_type in agg_losses[rlzname]:
                dset = agg_losses['%s/%s' % (rlzname, loss_type)]
                eids.update(dset['eid'])
            eids = sorted(eids)
            rlz_events = events[eids]
            eid2idx = dict(zip(eids, range(len(eids))))
            elt = numpy.zeros(len(eids), elt_dt)
            elt['event_tag'] = build_etags(rlz_events)
            elt['year'] = rlz_events['year']
            for loss_type in loss_types:
                elt_lt = elt[loss_type]
                if oq.insured_losses:
                    elt_lt_ins = elt[loss_type + '_ins']
                key = 'rlz-%03d/%s' % (rlz.ordinal, loss_type)
                if key not in agg_losses:  # nothing was saved for this key
                    continue
                data = agg_losses[key].value
                for i, eid in numpy.ndenumerate(data['eid']):
                    idx = eid2idx[eid]
                    if oq.insured_losses:
                        elt_lt[idx] = data['loss'][i, 0]
                        elt_lt_ins[idx] = data['loss'][i, 1]
                    else:
                        elt_lt[idx] = data['loss'][i]
            elt.sort(order='event_tag')
            writer.save(elt, dest)
    return writer.getsaved()
コード例 #2
0
def export_all_loss_ratios(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    loss_types = dstore.get_attr('composite_risk_model', 'loss_types')
    name, ext = export.keyfunc(ekey)
    ass_losses = dstore[name]
    assetcol = dstore['assetcol']
    oq = dstore['oqparam']
    dtlist = [('event_tag', (numpy.string_, 100)), ('year', U32),
              ('aid', U32)] + oq.loss_dt_list()
    elt_dt = numpy.dtype(dtlist)
    rlzs_assoc = dstore['csm_info'].get_rlzs_assoc()
    sm_id, eid = get_sm_id_eid(ekey[0])
    if sm_id is None:
        return []
    sm_id, eid = int(sm_id), int(eid)
    sm_ids = [sm_id]
    zero = [0, 0] if oq.insured_losses else 0
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    for sm_id in sm_ids:
        rlzs = rlzs_assoc.rlzs_by_smodel[sm_id]
        try:
            event = dstore['events/sm-%04d' % sm_id][eid]
        except KeyError:
            continue
        [event_tag] = build_etags([event])
        for rlz in rlzs:
            exportname = 'losses-sm=%04d-eid=%d' % (sm_id, eid)
            dest = dstore.build_fname(exportname, rlz, 'csv')
            losses_by_aid = AccumDict()
            rlzname = 'rlz-%03d' % rlz.ordinal
            for loss_type in ass_losses[rlzname]:
                data = get_array(ass_losses['%s/%s' % (rlzname, loss_type)],
                                 eid=eid)
                losses_by_aid += group_by_aid(data, loss_type)
            elt = numpy.zeros(len(losses_by_aid), elt_dt)
            elt['event_tag'] = event_tag
            elt['year'] = event['year']
            elt['aid'] = sorted(losses_by_aid)
            for i, aid in numpy.ndenumerate(elt['aid']):
                for loss_type in loss_types:
                    value = assetcol[int(aid)].value(loss_type, oq.time_event)
                    loss = value * losses_by_aid[aid].get(loss_type, zero)
                    if oq.insured_losses:
                        elt[loss_type][i] = loss[0]
                        elt[loss_type + '_ins'][i] = loss[1]
                    else:
                        elt[loss_type][i] = loss

            elt.sort(order='event_tag')
            writer.save(elt, dest)
    return writer.getsaved()
コード例 #3
0
def export_agg_losses(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    agg_losses = dstore[ekey[0]].value
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    etags = build_etags(dstore['events'])
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    for rlz in rlzs:
        losses = agg_losses[:, rlz.ordinal]
        dest = dstore.build_fname('agg_losses', rlz, 'csv')
        data = compose_arrays(etags, losses)
        writer.save(data, dest)
    return writer.getsaved()