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