def view_delta_loss(token, dstore): """ Estimate the stocastic error on the loss curve by splitting the events in odd and even. Example: $ oq show delta_loss # consider the first loss type """ if ':' in token: _, li = token.split(':') li = int(li) else: li = 0 oq = dstore['oqparam'] efftime = oq.investigation_time * oq.ses_per_logic_tree_path * len( dstore['weights']) num_events = len(dstore['events']) num_events0 = num_events // 2 + (num_events % 2) num_events1 = num_events // 2 periods = return_periods(efftime, num_events)[1:-1] K = dstore['risk_by_event'].attrs.get('K', 0) df = dstore.read_df('risk_by_event', 'event_id', dict(agg_id=K, loss_id=li)) if len(df) == 0: # for instance no fatalities return {'delta': numpy.zeros(1)} mod2 = df.index % 2 losses0 = df['loss'][mod2 == 0] losses1 = df['loss'][mod2 == 1] c0 = losses_by_period(losses0, periods, num_events0, efftime / 2) c1 = losses_by_period(losses1, periods, num_events1, efftime / 2) dic = dict(loss=losses_by_period(df['loss'], periods, num_events, efftime), even=c0, odd=c1, delta=numpy.abs(c0 - c1) / (c0 + c1)) return pandas.DataFrame(dic, periods)
def get_loss_builder(dstore, return_periods=None, loss_dt=None): """ :param dstore: datastore for an event based risk calculation :returns: a LossCurvesMapsBuilder instance """ oq = dstore['oqparam'] weights = dstore['weights'][()] try: haz_time = dstore['gmf_data'].attrs['effective_time'] except KeyError: haz_time = None eff_time = oq.investigation_time * oq.ses_per_logic_tree_path * ( len(weights) if oq.collect_rlzs else 1) if oq.collect_rlzs: if haz_time and haz_time != eff_time: raise ValueError('The effective time stored in gmf_data is %d, ' 'which is inconsistent with %d' % (haz_time, eff_time)) num_events = numpy.array([len(dstore['events'])]) weights = numpy.ones(1) else: num_events = numpy.bincount(dstore['events']['rlz_id']) periods = return_periods or oq.return_periods or scientific.return_periods( eff_time, num_events.max()) return scientific.LossCurvesMapsBuilder(oq.conditional_loss_poes, numpy.array(periods), loss_dt or oq.loss_dt(), weights, dict(enumerate(num_events)), eff_time, oq.risk_investigation_time)
def get_loss_builder(dstore): """ :param dstore: datastore for an event based risk calculation :returns: a LossesByPeriodBuilder instance """ oq = dstore['oqparam'] weights = dstore['csm_info'].rlzs['weight'] eff_time = oq.investigation_time * oq.ses_per_logic_tree_path num_events = dstore['gmdata']['events'] periods = oq.return_periods or scientific.return_periods( eff_time, num_events.max()) return scientific.LossesByPeriodBuilder(numpy.array(periods), oq.loss_dt(), weights, num_events, eff_time, oq.investigation_time)
def get_loss_builder(dstore, return_periods=None, loss_dt=None): """ :param dstore: datastore for an event based risk calculation :returns: a LossCurvesMapsBuilder instance """ oq = dstore['oqparam'] weights = dstore['weights'][()] eff_time = oq.investigation_time * oq.ses_per_logic_tree_path num_events = countby(dstore['events'][()], 'rlz') periods = return_periods or oq.return_periods or scientific.return_periods( eff_time, max(num_events.values())) return scientific.LossCurvesMapsBuilder( oq.conditional_loss_poes, numpy.array(periods), loss_dt or oq.loss_dt(), weights, num_events, eff_time, oq.risk_investigation_time)