def _compute_loss(self, block_id): """ Calculate and store in the kvs the loss data. """ block = Block.from_kvs(self.job_ctxt.job_id, block_id) vulnerability_model = vulnerability.load_vuln_model_from_kvs( self.job_ctxt.job_id) steps = self.job_ctxt.oq_job_profile.lrem_steps_per_interval assets_getter = lambda site: BaseRiskCalculator.assets_at( self.job_ctxt.job_id, site) hazard_getter = lambda site: ( self._get_db_curve(hazard_input_site(self.job_ctxt, site))) calculator = api.conditional_losses( conditional_loss_poes(self.job_ctxt.params), api.classical(vulnerability_model, steps=steps)) for asset_output in api.compute_on_sites(block.sites, assets_getter, hazard_getter, calculator): location = asset_output.asset.site point = self.job_ctxt.region.grid.point_at( shapes.Site(location.x, location.y)) loss_key = kvs.tokens.loss_curve_key( self.job_ctxt.job_id, point.row, point.column, asset_output.asset.asset_ref) kvs.get_client().set(loss_key, asset_output.loss_curve.to_json()) loss_ratio_key = kvs.tokens.loss_ratio_key(self.job_ctxt.job_id, point.row, point.column, asset_output.asset.asset_ref) kvs.get_client().set(loss_ratio_key, asset_output.loss_ratio_curve.to_json()) for poe, loss in asset_output.conditional_losses.items(): key = kvs.tokens.loss_key( self.job_ctxt.job_id, point.row, point.column, asset_output.asset.asset_ref, poe) kvs.get_client().set(key, loss)
def _compute_loss(self, block_id): """Compute risk for a block of sites, that means: * loss ratio curves * loss curves * conditional losses * (partial) aggregate loss curve """ self.vulnerability_model = vulnerability.load_vuln_model_from_kvs( self.job_ctxt.job_id) seed, correlation_type = self._get_correlation_type() block = general.Block.from_kvs(self.job_ctxt.job_id, block_id) loss_histogram_bins = self.job_ctxt.oq_job_profile.loss_histogram_bins def hazard_getter(site): gmvs = self._get_gmvs_at(general.hazard_input_site( self.job_ctxt, site)) return {"IMLs": gmvs, "TSES": self._tses(), "TimeSpan": self._time_span()} assets_getter = lambda site: general.BaseRiskCalculator.assets_at( self.job_ctxt.job_id, site) probabilistic_event_based_calculator = api.probabilistic_event_based( self.vulnerability_model, loss_histogram_bins, seed, correlation_type) calculator = api.conditional_losses(general.conditional_loss_poes( self.job_ctxt.params), probabilistic_event_based_calculator) if self.job_ctxt.params.get("INSURED_LOSSES"): calculator = api.insured_curves(self.vulnerability_model, loss_histogram_bins, seed, correlation_type, api.insured_losses(calculator)) for asset_output in api.compute_on_sites(block.sites, assets_getter, hazard_getter, calculator): location = asset_output.asset.site point = self.job_ctxt.region.grid.point_at( shapes.Site(location.x, location.y)) self._loss_ratio_curve_on_kvs( point.column, point.row, asset_output.loss_ratio_curve, asset_output.asset) self._loss_curve_on_kvs( point.column, point.row, asset_output.loss_curve, asset_output.asset) for poe, loss in asset_output.conditional_losses.items(): key = kvs.tokens.loss_key( self.job_ctxt.job_id, point.row, point.column, asset_output.asset.asset_ref, poe) kvs.get_client().set(key, loss) if self.job_ctxt.params.get("INSURED_LOSSES"): self._insured_loss_curve_on_kvs( point.column, point.row, asset_output.insured_loss_curve, asset_output.asset) self._insured_loss_ratio_curve_on_kvs( point.column, point.row, asset_output.insured_loss_ratio_curve, asset_output.asset) return probabilistic_event_based_calculator.aggregate_losses