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])
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])
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
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)
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)
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