示例#1
0
    def __init__(self, **names_vals):
        super(OqParam, self).__init__(**names_vals)
        self.risk_investigation_time = (
            self.risk_investigation_time or self.investigation_time)
        if ('intensity_measure_types_and_levels' in names_vals and
                'intensity_measure_types' in names_vals):
            logging.warn('Ignoring intensity_measure_types since '
                         'intensity_measure_types_and_levels is set')
        if 'intensity_measure_types_and_levels' in names_vals:
            self.hazard_imtls = self.intensity_measure_types_and_levels
            delattr(self, 'intensity_measure_types_and_levels')
        elif 'intensity_measure_types' in names_vals:
            self.hazard_imtls = dict.fromkeys(self.intensity_measure_types)
            delattr(self, 'intensity_measure_types')
        if vulnerability_files(self.inputs):
            self.risk_imtls = get_imtls_from_vulnerabilities(self.inputs)
        elif fragility_files(self.inputs):
            fname = self.inputs['fragility']
            ffs = get_fragility_functions(
                fname, self.continuous_fragility_discretization)
            self.risk_imtls = {fset.imt: fset.imls
                               for fset in ffs.values()}

        # check the IMTs vs the GSIMs
        if 'gsim_logic_tree' in self.inputs:
            if self.gsim:
                raise ValueError('If `gsim_logic_tree_file` is set, there '
                                 'must be no `gsim` key')
            path = os.path.join(
                self.base_path, self.inputs['gsim_logic_tree'])
            for gsims in logictree.GsimLogicTree(path, []).values.values():
                self.check_imts_gsims(list(map(valid.gsim, gsims)))
        elif self.gsim is not None:
            self.check_imts_gsims([self.gsim])
示例#2
0
    def __init__(self, **names_vals):
        super(OqParam, self).__init__(**names_vals)
        self.risk_investigation_time = (self.risk_investigation_time
                                        or self.investigation_time)
        if ('intensity_measure_types_and_levels' in names_vals
                and 'intensity_measure_types' in names_vals):
            logging.warn('Ignoring intensity_measure_types since '
                         'intensity_measure_types_and_levels is set')
        if 'intensity_measure_types_and_levels' in names_vals:
            self.hazard_imtls = self.intensity_measure_types_and_levels
            delattr(self, 'intensity_measure_types_and_levels')
        elif 'intensity_measure_types' in names_vals:
            self.hazard_imtls = dict.fromkeys(self.intensity_measure_types)
            delattr(self, 'intensity_measure_types')
        if vulnerability_files(self.inputs):
            self.risk_imtls = get_imtls_from_vulnerabilities(self.inputs)
        elif fragility_files(self.inputs):
            fname = self.inputs['fragility']
            ffs = get_fragility_functions(
                fname, self.continuous_fragility_discretization)
            self.risk_imtls = {fset.imt: fset.imls for fset in ffs.values()}

        # check the IMTs vs the GSIMs
        if 'gsim_logic_tree' in self.inputs:
            if self.gsim:
                raise ValueError('If `gsim_logic_tree_file` is set, there '
                                 'must be no `gsim` key')
            path = os.path.join(self.base_path, self.inputs['gsim_logic_tree'])
            for gsims in logictree.GsimLogicTree(path, []).values.values():
                self.check_imts_gsims(list(map(valid.gsim, gsims)))
        elif self.gsim is not None:
            self.check_imts_gsims([self.gsim])
示例#3
0
def get_risk_model(oqparam):
    """
    Return a :class:`openquake.risklib.riskinput.RiskModel` instance

   :param oqparam:
        an :class:`openquake.commonlib.oqvalidation.OqParam` instance
    """
    risk_models = {}  # (imt, taxonomy) -> workflow
    riskmodel = riskinput.RiskModel(risk_models)

    if oqparam.calculation_mode.endswith('_damage'):
        # scenario damage calculator
        fragility_functions = get_fragility_functions(
            oqparam.inputs['fragility'],
            oqparam.continuous_fragility_discretization,
            oqparam.steps_per_interval,
        )
        riskmodel.damage_states = fragility_functions.damage_states
        for taxonomy, ffs in fragility_functions.items():
            imt = ffs.imt
            risk_models[imt, taxonomy] = workflows.get_workflow(
                imt, taxonomy, oqparam, fragility_functions=dict(damage=ffs))
    elif oqparam.calculation_mode.endswith('_bcr'):
        # bcr calculators
        vfs_orig = list(get_vfs(oqparam.inputs, retrofitted=False).items())
        vfs_retro = list(get_vfs(oqparam.inputs, retrofitted=True).items())
        for (imt_taxo, vf_orig), (imt_taxo_, vf_retro) in \
                zip(vfs_orig, vfs_retro):
            assert imt_taxo == imt_taxo_  # same imt and taxonomy
            risk_models[imt_taxo] = workflows.get_workflow(
                imt_taxo[0],
                imt_taxo[1],
                oqparam,
                vulnerability_functions_orig=vf_orig,
                vulnerability_functions_retro=vf_retro)
    else:
        # classical, event based and scenario calculators
        for imt_taxo, vfs in get_vfs(oqparam.inputs).items():
            risk_models[imt_taxo] = workflows.get_workflow(
                imt_taxo[0], imt_taxo[1], oqparam, vulnerability_functions=vfs)

    riskmodel.make_curve_builders(oqparam)
    taxonomies = set()
    for imt_taxo, workflow in risk_models.items():
        taxonomies.add(imt_taxo[1])
        workflow.riskmodel = riskmodel
        # save the number of nonzero coefficients of variation
        for vf in workflow.risk_functions.values():
            if hasattr(vf, 'covs') and vf.covs.any():
                riskmodel.covs += 1
    riskmodel.taxonomies = sorted(taxonomies)
    return riskmodel
示例#4
0
    def test_missing_maxIML(self):
        vuln_content = StringIO.StringIO("""\
<?xml version='1.0' encoding='utf-8'?>
<nrml xmlns:gml="http://www.opengis.net/gml"
      xmlns="http://openquake.org/xmlns/nrml/0.4">
     <fragilityModel format="continuous">
        <description>Fragility for test</description>
        <limitStates>LS1 LS2</limitStates>
        <ffs type="lognormal">
            <taxonomy>RC</taxonomy>
            <IML IMT="PGA" minIML="9.9" imlUnit="g"/>
            <ffc ls="LS1">
                <params mean="0.2" stddev="0.05" />
            </ffc>
            <ffc ls="LS2">
                <params mean="0.35" stddev="0.10" />
            </ffc>
        </ffs>
    </fragilityModel>
</nrml>""")
        with self.assertRaises(InvalidFile) as ar:
            get_fragility_functions(vuln_content, 20)
        self.assertEqual('Missing attribute maxIML, line 9',
                         ar.exception.message)
示例#5
0
    def test_missing_maxIML(self):
        vuln_content = io.BytesIO(b"""\
<?xml version='1.0' encoding='utf-8'?>
<nrml xmlns:gml="http://www.opengis.net/gml"
      xmlns="http://openquake.org/xmlns/nrml/0.4">
     <fragilityModel format="continuous">
        <description>Fragility for test</description>
        <limitStates>LS1 LS2</limitStates>
        <ffs type="lognormal">
            <taxonomy>RC</taxonomy>
            <IML IMT="PGA" minIML="9.9" imlUnit="g"/>
            <ffc ls="LS1">
                <params mean="0.2" stddev="0.05" />
            </ffc>
            <ffc ls="LS2">
                <params mean="0.35" stddev="0.10" />
            </ffc>
        </ffs>
    </fragilityModel>
</nrml>""")
        with self.assertRaises(InvalidFile) as ar:
            get_fragility_functions(vuln_content, 20)
        self.assertEqual('Missing attribute maxIML, line 9',
                         ar.exception.message)
示例#6
0
def get_risk_model(oqparam):
    """
    Return a :class:`openquake.risklib.riskinput.RiskModel` instance

   :param oqparam:
        an :class:`openquake.commonlib.oqvalidation.OqParam` instance
    """
    risk_models = {}  # (imt, taxonomy) -> workflow
    riskmodel = riskinput.RiskModel(risk_models)

    if oqparam.calculation_mode.endswith('_damage'):
        # scenario damage calculator
        fragility_functions = get_fragility_functions(
            oqparam.inputs['fragility'],
            oqparam.continuous_fragility_discretization,
            oqparam.steps_per_interval,
        )
        riskmodel.damage_states = fragility_functions.damage_states
        for taxonomy, ffs in fragility_functions.items():
            imt = ffs.imt
            risk_models[imt, taxonomy] = workflows.get_workflow(
                imt, taxonomy, oqparam, fragility_functions=dict(damage=ffs))
    elif oqparam.calculation_mode.endswith('_bcr'):
        # bcr calculators
        vfs_orig = list(get_vfs(oqparam.inputs, retrofitted=False).items())
        vfs_retro = list(get_vfs(oqparam.inputs, retrofitted=True).items())
        for (imt_taxo, vf_orig), (imt_taxo_, vf_retro) in \
                zip(vfs_orig, vfs_retro):
            assert imt_taxo == imt_taxo_  # same imt and taxonomy
            risk_models[imt_taxo] = workflows.get_workflow(
                imt_taxo[0], imt_taxo[1], oqparam,
                vulnerability_functions_orig=vf_orig,
                vulnerability_functions_retro=vf_retro)
    else:
        # classical, event based and scenario calculators
        for imt_taxo, vfs in get_vfs(oqparam.inputs).items():
            risk_models[imt_taxo] = workflows.get_workflow(
                imt_taxo[0], imt_taxo[1], oqparam,
                vulnerability_functions=vfs)

    riskmodel.make_curve_builders(oqparam)
    for workflow in risk_models.values():
        workflow.riskmodel = riskmodel

    return riskmodel