Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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