Ejemplo n.º 1
0
def export_dmg_by_event(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    damage_dt = build_damage_dt(dstore, mean_std=False)
    dt_list = [('event_id', numpy.uint64),
               ('rlzi', numpy.uint16)] + [(f, damage_dt.fields[f][0])
                                          for f in damage_dt.names]
    all_losses = dstore[ekey[0]].value  # shape (E, R, LI)
    eids = dstore['events']['eid']
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    fname = dstore.build_fname('dmg_by_event', '', 'csv')
    writer.save(numpy.zeros(0, dt_list), fname)
    with open(fname, 'ab') as dest:
        for rlz in rlzs:
            data = all_losses[:, rlz.ordinal].copy().view(damage_dt)  # shape E
            arr = numpy.zeros(len(data), dt_list)
            arr['event_id'] = eids
            arr['rlzi'] = rlz.ordinal
            for field in damage_dt.names:
                arr[field] = data[field].squeeze()
            writer.save_block(arr, dest)
    return [fname]
Ejemplo n.º 2
0
def export_dmg_by_event(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    damage_dt = build_damage_dt(dstore, mean_std=False)
    dt_list = [('event_id', U32),
               ('rlz_id', U16)] + [(f, damage_dt.fields[f][0])
                                   for f in damage_dt.names]
    dmg_by_event = dstore[ekey[0]][()]  # shape E, L, D
    events_by_rlz = group_array(dstore['events'], 'rlz_id')
    writer = writers.CsvWriter(fmt='%d')
    fname = dstore.build_fname('dmg_by_event', '', 'csv')
    writer.save(numpy.zeros(0, dt_list), fname)
    with open(fname, 'ab') as dest:
        for rlz, events in events_by_rlz.items():
            data = numpy.array(  # shape (E, L, D)
                [dmg_by_event[eid] for eid in events['id']])
            arr = numpy.zeros(len(data), dt_list)
            arr['event_id'] = events['id']
            arr['rlz_id'] = events['rlz_id']
            for l, loss_type in enumerate(damage_dt.names):
                for d, dmg_state in enumerate(damage_dt[loss_type].names):
                    arr[loss_type][dmg_state] = data[:, l, d]
            writer.save_block(arr, dest)
    return [fname]
Ejemplo n.º 3
0
def export_damages_csv(ekey, dstore):
    oq = dstore['oqparam']
    dmg_dt = build_damage_dt(dstore)
    rlzs = dstore['full_lt'].get_realizations()
    data = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    assets = get_assets(dstore)
    md = dstore.metadata
    if oq.investigation_time:
        md.update(
            dict(investigation_time=oq.investigation_time,
                 risk_investigation_time=oq.risk_investigation_time))
    if ekey[0].endswith('stats'):
        rlzs_or_stats = oq.hazard_stats()
    else:
        rlzs_or_stats = ['rlz-%03d' % r for r in range(len(rlzs))]
    name = ekey[0].split('-')[0]
    if oq.calculation_mode != 'classical_damage':
        name = 'avg_' + name
    for i, ros in enumerate(rlzs_or_stats):
        if oq.modal_damage_state:
            damages = modal_damage_array(data[:, i], dmg_dt)
        else:
            damages = build_damage_array(data[:, i], dmg_dt)
        fname = dstore.build_fname(name, ros, ekey[1])
        writer.save(compose_arrays(assets, damages),
                    fname,
                    comment=md,
                    renamedict=dict(id='asset_id'))
    return writer.getsaved()
Ejemplo n.º 4
0
def export_dmg_by_event(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    damage_dt = build_damage_dt(dstore)
    dt_list = [('event_id', U32),
               ('rlz_id', U16)] + [(f, damage_dt.fields[f][0])
                                   for f in damage_dt.names]
    dmg_by_event = dstore[ekey[0]][()]  # shape E, L, D
    events = dstore['events'][()]
    writer = writers.CsvWriter(fmt='%g')
    fname = dstore.build_fname('dmg_by_event', '', 'csv')
    writer.save(numpy.zeros(0, dt_list), fname)
    with open(fname, 'a') as dest:
        for rlz_id in numpy.unique(events['rlz_id']):
            ok, = numpy.where(events['rlz_id'] == rlz_id)
            arr = numpy.zeros(len(ok), dt_list)
            arr['event_id'] = events['id'][ok]
            arr['rlz_id'] = rlz_id
            for l, loss_type in enumerate(damage_dt.names):
                for d, dmg_state in enumerate(damage_dt[loss_type].names):
                    arr[loss_type][dmg_state] = dmg_by_event[ok, l, d]
            writer.save_block(arr, dest)
    return [fname]
Ejemplo n.º 5
0
def export_dmg_by_asset_csv(ekey, dstore):
    E = len(dstore['events'])
    oq = dstore['oqparam']
    dmg_dt = build_damage_dt(dstore, mean_std=False)
    damage_dt = build_damage_dt(dstore, mean_std=E > 1)
    rlzs = dstore['full_lt'].get_realizations()
    data = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    assets = get_assets(dstore)
    for rlz in rlzs:
        if oq.modal_damage_state:
            dmg_by_asset = modal_damage_array(data[:, rlz.ordinal], dmg_dt)
        else:
            dmg_by_asset = build_damage_array(data[:, rlz.ordinal], damage_dt)
        fname = dstore.build_fname(ekey[0], rlz, ekey[1])
        writer.save(compose_arrays(assets, dmg_by_asset),
                    fname,
                    renamedict=dict(id='asset_id'))
    return writer.getsaved()
Ejemplo n.º 6
0
def export_dmg_by_asset_csv(ekey, dstore):
    damage_dt = build_damage_dt(dstore)
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    data = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    assets = get_assets(dstore)
    for rlz in rlzs:
        dmg_by_asset = build_damage_array(data[:, rlz.ordinal], damage_dt)
        fname = dstore.build_fname(ekey[0], rlz, ekey[1])
        writer.save(compose_arrays(assets, dmg_by_asset), fname)
    return writer.getsaved()
Ejemplo n.º 7
0
def export_dmg_by_tag_csv(ekey, dstore):
    damage_dt = build_damage_dt(dstore)
    tags = add_quotes(dstore['assetcol'].tagcol)
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    data = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    for rlz in rlzs:
        dmg_by_tag = build_damage_array(data[:, rlz.ordinal], damage_dt)
        fname = dstore.build_fname(ekey[0], rlz, ekey[1])
        array = compose_arrays(tags, dmg_by_tag, 'tag')
        writer.save(array, fname)
    return writer.getsaved()
Ejemplo n.º 8
0
def export_dmg_totalcsv(ekey, dstore):
    damage_dt = build_damage_dt(dstore)
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    dset = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    for rlz in rlzs:
        dmg_total = build_damage_array(dset[rlz.ordinal], damage_dt)
        fname = dstore.build_fname(ekey[0], rlz, ekey[1])
        data = [['loss_type', 'damage_state', 'damage_value']]
        for loss_type in dmg_total.dtype.names:
            tot = dmg_total[loss_type]
            for name in tot.dtype.names:
                data.append((loss_type, name, tot[name]))
        writer.save(data, fname)
    return writer.getsaved()
Ejemplo n.º 9
0
def export_dmg_by_event(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    damage_dt = build_damage_dt(dstore, mean_std=False)
    all_losses = dstore[ekey[0]].value
    eids = dstore['events']['eid']
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    for rlz in rlzs:
        dest = dstore.build_fname('dmg_by_event', rlz, 'csv')
        data = all_losses[:, rlz.ordinal].copy().view(damage_dt).squeeze()
        writer.save(compose_arrays(eids, data, 'event_id'), dest)
    return writer.getsaved()
Ejemplo n.º 10
0
def export_dmg_by_asset_csv(ekey, dstore):
    E = len(dstore['events'])
    oq = dstore['oqparam']
    damage_dt = build_damage_dt(dstore, mean_std=E > 1)
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    data = dstore[ekey[0]]
    writer = writers.CsvWriter(fmt='%.6E')
    assets = get_assets(dstore)
    for rlz in rlzs:
        if oq.modal_damage_state:
            dmg_by_asset = modal_damage_array(data[:, rlz.ordinal], damage_dt)
        else:
            dmg_by_asset = build_damage_array(data[:, rlz.ordinal], damage_dt)
        fname = dstore.build_fname(ekey[0], rlz, ekey[1])
        writer.save(compose_arrays(assets, dmg_by_asset), fname)
    return writer.getsaved()
Ejemplo n.º 11
0
def export_damages_csv(ekey, dstore):
    oq = dstore['oqparam']
    ebd = oq.calculation_mode == 'event_based_damage'
    dmg_dt = build_damage_dt(dstore)
    rlzs = dstore['full_lt'].get_realizations()
    orig = dstore[ekey[0]][:]  # shape (A, R, L, D)
    writer = writers.CsvWriter(fmt='%.6E')
    assets = get_assets(dstore)
    md = dstore.metadata
    if oq.investigation_time:
        rit = oq.risk_investigation_time or oq.investigation_time
        md.update(
            dict(investigation_time=oq.investigation_time,
                 risk_investigation_time=rit))
    D = len(oq.limit_states) + 1
    R = 1 if oq.collect_rlzs else len(rlzs)
    if ekey[0].endswith('stats'):
        rlzs_or_stats = oq.hazard_stats()
    else:
        rlzs_or_stats = ['rlz-%03d' % r for r in range(R)]
    name = ekey[0].split('-')[0]
    if oq.calculation_mode != 'classical_damage':
        name = 'avg_' + name
    for i, ros in enumerate(rlzs_or_stats):
        if ebd:  # export only the consequences from damages-rlzs, i == 0
            rate = len(dstore['events']) * oq.time_ratio / len(rlzs)
            data = orig[:, i] * rate
            A, L, Dc = data.shape
            if Dc == D:  # no consequences, export nothing
                return
            csq_dt = build_csq_dt(dstore)
            damages = numpy.zeros(A, csq_dt)
            for a in range(A):
                for li, lt in enumerate(csq_dt.names):
                    damages[lt][a] = tuple(data[a, li, D:Dc])
            fname = dstore.build_fname('avg_risk', ros, ekey[1])
        else:  # scenario_damage, classical_damage
            if oq.modal_damage_state:
                damages = modal_damage_array(orig[:, i], dmg_dt)
            else:
                damages = build_damage_array(orig[:, i], dmg_dt)
            fname = dstore.build_fname(name, ros, ekey[1])
        writer.save(compose_arrays(assets, damages),
                    fname,
                    comment=md,
                    renamedict=dict(id='asset_id'))
    return writer.getsaved()
Ejemplo n.º 12
0
def export_dmg_by_event(ekey, dstore):
    """
    :param ekey: export key, i.e. a pair (datastore key, fmt)
    :param dstore: datastore object
    """
    damage_dt = build_damage_dt(dstore, mean_std=False)
    dt_list = [('event_id', numpy.uint64), ('rlzi', numpy.uint16)] + [
        (f, damage_dt.fields[f][0]) for f in damage_dt.names]
    all_losses = dstore[ekey[0]].value  # shape (E, R, LI)
    events_by_rlz = group_array(dstore['events'], 'rlz')
    rlzs = dstore['csm_info'].get_rlzs_assoc().realizations
    writer = writers.CsvWriter(fmt=writers.FIVEDIGITS)
    fname = dstore.build_fname('dmg_by_event', '', 'csv')
    writer.save(numpy.zeros(0, dt_list), fname)
    with open(fname, 'ab') as dest:
        for rlz in rlzs:
            data = all_losses[:, rlz.ordinal].copy().view(damage_dt)  # shape E
            arr = numpy.zeros(len(data), dt_list)
            arr['event_id'] = events_by_rlz[rlz.ordinal]['id']
            arr['rlzi'] = rlz.ordinal
            for field in damage_dt.names:
                arr[field] = data[field].squeeze()
            writer.save_block(arr, dest)
    return [fname]