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') agg_losses = dstore[ekey[0]] oq = dstore['oqparam'] dtlist = [('event_tag', (numpy.string_, 100)), ('event_set', U32) ] + oq.loss_dt_list() elt_dt = numpy.dtype(dtlist) rlzs_assoc = dstore['csm_info'].get_rlzs_assoc() events = dstore['events'] writer = writers.CsvWriter(fmt=writers.FIVEDIGITS) for sm_id, rlzs in sorted(rlzs_assoc.rlzs_by_smodel.items()): key = 'sm-%04d' % sm_id if key not in events: continue etags = build_etags(events, [key]) for rlz in rlzs: dest = dstore.build_fname('agg_losses', rlz, 'csv') eids = set() rlzname = 'rlz-%03d' % rlz.ordinal for loss_type in agg_losses[rlzname]: dset = agg_losses['%s/%s' % (rlzname, loss_type)] insured_losses = bool(dset.dtype['loss'].shape) eids.update(dset['eid']) eids = sorted(eids) eid2idx = dict(zip(eids, range(len(eids)))) elt = numpy.zeros(len(eids), elt_dt) elt['event_tag'] = etags[eids] elt['event_set'] = numpy.array( [get_ses_idx(etag) for etag in elt['event_tag']], U32) for loss_type in loss_types: elt_lt = elt[loss_type] if 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 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_agg_losses(ekey, dstore): """ :param ekey: export key, i.e. a pair (datastore key, fmt) :param dstore: datastore object """ agg_losses = compactify(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()