Esempio n. 1
0
    def __init__(self, oqparam, rmdict, retrodict):
        self.damage_states = []
        self._riskmodels = {}

        if getattr(oqparam, 'limit_states', []):
            # classical_damage/scenario_damage calculator
            if oqparam.calculation_mode in ('classical', 'scenario'):
                # case when the risk files are in the job_hazard.ini file
                oqparam.calculation_mode += '_damage'
            self.damage_states = ['no_damage'] + oqparam.limit_states
            delattr(oqparam, 'limit_states')
            for taxonomy, ffs_by_lt in rmdict.items():
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy, oqparam, fragility_functions=ffs_by_lt)
        elif oqparam.calculation_mode.endswith('_bcr'):
            # classical_bcr calculator
            for (taxonomy, vf_orig), (taxonomy_, vf_retro) in \
                    zip(rmdict.items(), retrodict.items()):
                assert taxonomy == taxonomy_  # same imt and taxonomy
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy, oqparam,
                    vulnerability_functions_orig=vf_orig,
                    vulnerability_functions_retro=vf_retro)
        else:
            # classical, event based and scenario calculators
            for taxonomy, vfs in rmdict.items():
                for vf in vfs.values():
                    # set the seed; this is important for the case of
                    # VulnerabilityFunctionWithPMF
                    vf.seed = oqparam.random_seed
                    self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                        taxonomy, oqparam, vulnerability_functions=vfs)

        self.init(oqparam)
Esempio n. 2
0
    def __init__(self, oqparam, rmdict, retrodict):
        self.damage_states = []
        self._riskmodels = {}

        if getattr(oqparam, 'limit_states', []):
            # classical_damage/scenario_damage calculator
            if oqparam.calculation_mode in ('classical', 'scenario'):
                # case when the risk files are in the job_hazard.ini file
                oqparam.calculation_mode += '_damage'
            self.damage_states = ['no_damage'] + oqparam.limit_states
            delattr(oqparam, 'limit_states')
            for taxonomy, ffs_by_lt in rmdict.items():
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy, oqparam, fragility_functions=ffs_by_lt)
        elif oqparam.calculation_mode.endswith('_bcr'):
            # classical_bcr calculator
            for (taxonomy, vf_orig), (taxonomy_, vf_retro) in \
                    zip(rmdict.items(), retrodict.items()):
                assert taxonomy == taxonomy_  # same imt and taxonomy
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy,
                    oqparam,
                    vulnerability_functions_orig=vf_orig,
                    vulnerability_functions_retro=vf_retro)
        else:
            # classical, event based and scenario calculators
            for taxonomy, vfs in rmdict.items():
                for vf in vfs.values():
                    # set the seed; this is important for the case of
                    # VulnerabilityFunctionWithPMF
                    vf.seed = oqparam.random_seed
                    self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                        taxonomy, oqparam, vulnerability_functions=vfs)

        self.init(oqparam)
Esempio n. 3
0
    def __init__(self, oqparam, riskdict):
        self.damage_states = []
        self._riskmodels = {}  # riskid -> riskmodel
        if oqparam.calculation_mode.endswith('_bcr'):
            # classical_bcr calculator
            for riskid, risk_functions in sorted(riskdict.items()):
                self._riskmodels[riskid] = riskmodels.get_riskmodel(
                    riskid, oqparam, risk_functions=risk_functions)
        elif (extract(riskdict, 'fragility') or
              'damage' in oqparam.calculation_mode):
            # classical_damage/scenario_damage calculator
            if oqparam.calculation_mode in ('classical', 'scenario'):
                # case when the risk files are in the job_hazard.ini file
                oqparam.calculation_mode += '_damage'
                if 'exposure' not in oqparam.inputs:
                    raise RuntimeError(
                        'There are risk files in %r but not '
                        'an exposure' % oqparam.inputs['job_ini'])

            self.damage_states = ['no_damage'] + list(riskdict.limit_states)
            for riskid, ffs_by_lt in sorted(riskdict.items()):
                self._riskmodels[riskid] = riskmodels.get_riskmodel(
                    riskid, oqparam, risk_functions=ffs_by_lt)
        else:
            # classical, event based and scenario calculators
            for riskid, vfs in sorted(riskdict.items()):
                for vf in vfs.values():
                    # set the seed; this is important for the case of
                    # VulnerabilityFunctionWithPMF
                    vf.seed = oqparam.random_seed
                self._riskmodels[riskid] = riskmodels.get_riskmodel(
                    riskid, oqparam, risk_functions=vfs)
        self.init(oqparam)
Esempio n. 4
0
def get_risk_model(oqparam, rmdict):
    """
    Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance

   :param oqparam:
        an :class:`openquake.commonlib.oqvalidation.OqParam` instance
   :param rmdict:
        a dictionary (imt, taxonomy) -> loss_type -> risk_function
    """
    riskmod = {}  # taxonomy -> riskmodel
    crm = riskinput.CompositeRiskModel(riskmod)
    if getattr(oqparam, 'limit_states', []):
        # classical_damage/scenario_damage calculator
        if oqparam.calculation_mode in ('classical', 'scenario'):
            # case when the risk files are in the job_hazard.ini file
            oqparam.calculation_mode += '_damage'
        crm.damage_states = ['no_damage'] + oqparam.limit_states
        delattr(oqparam, 'limit_states')
        for taxonomy, ffs_by_lt in rmdict.items():
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy, oqparam, fragility_functions=ffs_by_lt)
    elif oqparam.calculation_mode.endswith('_bcr'):
        # classical_bcr calculator
        retro = get_risk_models(oqparam, 'vulnerability_retrofitted')
        for (taxonomy, vf_orig), (taxonomy_, vf_retro) in \
                zip(rmdict.items(), retro.items()):
            assert taxonomy == taxonomy_  # same imt and taxonomy
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy,
                oqparam,
                vulnerability_functions_orig=vf_orig,
                vulnerability_functions_retro=vf_retro)
    else:
        # classical, event based and scenario calculators
        for taxonomy, vfs in rmdict.items():
            for vf in vfs.values():
                # set the seed; this is important for the case of
                # VulnerabilityFunctionWithPMF
                vf.seed = oqparam.random_seed
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy, oqparam, vulnerability_functions=vfs)

    crm.make_curve_builders(oqparam)
    taxonomies = set()
    for taxonomy, riskmodel in riskmod.items():
        taxonomies.add(taxonomy)
        riskmodel.compositemodel = crm
        # save the number of nonzero coefficients of variation
        for vf in riskmodel.risk_functions.values():
            if hasattr(vf, 'covs') and vf.covs.any():
                crm.covs += 1
    crm.taxonomies = sorted(taxonomies)
    return crm
Esempio n. 5
0
def get_risk_model(oqparam, rmdict):
    """
    Return a :class:`openquake.risklib.riskinput.CompositeRiskModel` instance

   :param oqparam:
        an :class:`openquake.commonlib.oqvalidation.OqParam` instance
   :param rmdict:
        a dictionary (imt, taxonomy) -> loss_type -> risk_function
    """
    riskmod = {}  # taxonomy -> riskmodel
    crm = riskinput.CompositeRiskModel(riskmod)
    if getattr(oqparam, 'limit_states', []):
        # classical_damage/scenario_damage calculator
        if oqparam.calculation_mode in ('classical', 'scenario'):
            # case when the risk files are in the job_hazard.ini file
            oqparam.calculation_mode += '_damage'
        crm.damage_states = ['no_damage'] + oqparam.limit_states
        delattr(oqparam, 'limit_states')
        for taxonomy, ffs_by_lt in rmdict.items():
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy, oqparam, fragility_functions=ffs_by_lt)
    elif oqparam.calculation_mode.endswith('_bcr'):
        # classical_bcr calculator
        retro = get_risk_models(oqparam, 'vulnerability_retrofitted')
        for (taxonomy, vf_orig), (taxonomy_, vf_retro) in \
                zip(rmdict.items(), retro.items()):
            assert taxonomy == taxonomy_  # same imt and taxonomy
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy, oqparam,
                vulnerability_functions_orig=vf_orig,
                vulnerability_functions_retro=vf_retro)
    else:
        # classical, event based and scenario calculators
        for taxonomy, vfs in rmdict.items():
            for vf in vfs.values():
                # set the seed; this is important for the case of
                # VulnerabilityFunctionWithPMF
                vf.seed = oqparam.random_seed
            riskmod[taxonomy] = riskmodels.get_riskmodel(
                taxonomy, oqparam, vulnerability_functions=vfs)

    crm.make_curve_builders(oqparam)
    taxonomies = set()
    for taxonomy, riskmodel in riskmod.items():
        taxonomies.add(taxonomy)
        riskmodel.compositemodel = crm
        # save the number of nonzero coefficients of variation
        for vf in riskmodel.risk_functions.values():
            if hasattr(vf, 'covs') and vf.covs.any():
                crm.covs += 1
    crm.taxonomies = sorted(taxonomies)
    return crm
Esempio n. 6
0
    def __init__(self, oqparam, rmdict, retrodict):
        self.damage_states = []
        self._riskmodels = {}

        if len(rmdict.limit_states):
            # classical_damage/scenario_damage calculator
            if oqparam.calculation_mode in ('classical', 'scenario'):
                # case when the risk files are in the job_hazard.ini file
                oqparam.calculation_mode += '_damage'
                if 'exposure' not in oqparam.inputs:
                    raise RuntimeError('There are risk files in %r but not '
                                       'an exposure' %
                                       oqparam.inputs['job_ini'])
            self.damage_states = ['no_damage'] + list(rmdict.limit_states)
            for taxonomy, ffs_by_lt in rmdict.items():
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy, oqparam, fragility_functions=ffs_by_lt)
        elif oqparam.calculation_mode.endswith('_bcr'):
            # classical_bcr calculator
            for (taxonomy, vf_orig), (taxonomy_, vf_retro) in \
                    zip(sorted(rmdict.items()), sorted(retrodict.items())):
                assert taxonomy == taxonomy_  # same taxonomies
                self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                    taxonomy,
                    oqparam,
                    vulnerability_functions_orig=vf_orig,
                    vulnerability_functions_retro=vf_retro)
        else:
            # classical, event based and scenario calculators
            for taxonomy, vfs in rmdict.items():
                for vf in vfs.values():
                    # set the seed; this is important for the case of
                    # VulnerabilityFunctionWithPMF
                    vf.seed = oqparam.random_seed
                    self._riskmodels[taxonomy] = riskmodels.get_riskmodel(
                        taxonomy, oqparam, vulnerability_functions=vfs)

        self.init(oqparam)