def get_crmodel(oqparam): """ Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance """ riskdict = get_risk_models(oqparam) oqparam.set_risk_imtls(riskdict) if 'consequence' in oqparam.inputs: # build consdict of the form cname_by_tagname -> tag -> array consdict = {} for by, fname in oqparam.inputs['consequence'].items(): dtypedict = {by: str, 'cname': str, 'loss_type': str, None: float} dic = group_array(hdf5.read_csv(fname, dtypedict).array, 'cname') for cname, group in dic.items(): bytag = {tag: _cons_coeffs(grp, riskdict.limit_states) for tag, grp in group_array(group, by).items()} consdict['%s_by_%s' % (cname, by)] = bytag else: # legacy approach, extract the consequences from the risk models consdict = {'losses_by_taxonomy': {}} for taxo, dic in riskdict.items(): coeffs_by_lt = {lt: dic.pop((lt, kind)) for lt, kind in list(dic) if kind == 'consequence'} if coeffs_by_lt: dtlist = [(lt, F32) for lt in coeffs_by_lt] coeffs = numpy.zeros(len(riskdict.limit_states), dtlist) for lt, cf in coeffs_by_lt.items(): coeffs[lt] = cf consdict['losses_by_taxonomy'][taxo] = coeffs crm = riskmodels.CompositeRiskModel(oqparam, riskdict, consdict) return crm
def get_crmodel(oqparam): """ Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance """ risklist = get_risk_functions(oqparam) if not oqparam.limit_states and risklist.limit_states: oqparam.limit_states = risklist.limit_states elif 'damage' in oqparam.calculation_mode and risklist.limit_states: assert oqparam.limit_states == risklist.limit_states consdict = {} if 'consequence' in oqparam.inputs: # build consdict of the form cname_by_tagname -> tag -> array for by, fname in oqparam.inputs['consequence'].items(): dtypedict = {by: str, 'cname': str, 'loss_type': str, None: float} dic = group_array(hdf5.read_csv(fname, dtypedict).array, 'cname') for cname, group in dic.items(): bytag = { tag: _cons_coeffs(grp, risklist.limit_states) for tag, grp in group_array(group, by).items() } consdict['%s_by_%s' % (cname, by)] = bytag crm = riskmodels.CompositeRiskModel(oqparam, risklist, consdict) return crm
def get_crmodel(oqparam): """ Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance """ riskdict = get_risk_models(oqparam) oqparam.set_risk_imtls(riskdict) crm = riskmodels.CompositeRiskModel(oqparam, riskdict) return crm
def get_crmodel(oqparam): """ Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance :param oqparam: an :class:`openquake.commonlib.oqvalidation.OqParam` instance """ risklist = get_risk_functions(oqparam) if not oqparam.limit_states and risklist.limit_states: oqparam.limit_states = risklist.limit_states elif 'damage' in oqparam.calculation_mode and risklist.limit_states: assert oqparam.limit_states == risklist.limit_states loss_types = oqparam.loss_dt().names consdict = {} if 'consequence' in oqparam.inputs: # build consdict of the form consequence_by_tagname -> tag -> array for by, fnames in oqparam.inputs['consequence'].items(): if isinstance(fnames, str): # single file fnames = [fnames] dtypedict = { by: str, 'consequence': str, 'loss_type': str, None: float } # i.e. files collapsed.csv, fatalities.csv, ... with headers # taxonomy,consequence,loss_type,slight,moderate,extensive arrays = [] for fname in fnames: arr = hdf5.read_csv(fname, dtypedict).array arrays.append(arr) for no, row in enumerate(arr, 2): if row['loss_type'] not in loss_types: msg = '%s: %s is not a recognized loss type, line=%d' raise InvalidFile(msg % (fname, row['loss_type'], no)) array = numpy.concatenate(arrays) dic = group_array(array, 'consequence') for consequence, group in dic.items(): if consequence not in scientific.KNOWN_CONSEQUENCES: raise InvalidFile('Unknown consequence %s in %s' % (consequence, fnames)) bytag = { tag: _cons_coeffs(grp, loss_types, risklist.limit_states) for tag, grp in group_array(group, by).items() } consdict['%s_by_%s' % (consequence, by)] = bytag # for instance consdict['collapsed_by_taxonomy']['W_LFM-DUM_H3'] # is [(0.05,), (0.2 ,), (0.6 ,), (1. ,)] for damage state and structural crm = riskmodels.CompositeRiskModel(oqparam, risklist, consdict) return crm