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]
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]
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()
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]
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()
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()
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()
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()
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()
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()
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()
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]