def compute_risk(self, block_id, **kwargs): # pylint: disable=W0613 """Compute risk for a block of sites, that means: * loss ratio curves * loss curves * conditional losses * (partial) aggregate loss curve """ self.slice_gmfs(block_id) self.vuln_curves = vulnerability.load_vuln_model_from_kvs( self.job_id) block = general.Block.from_kvs(block_id) # aggregate the losses for this block aggregate_curve = prob.AggregateLossCurve() for point in block.grid(self.region): key = kvs.tokens.gmf_set_key(self.job_id, point.column, point.row) gmf_slice = kvs.get_value_json_decoded(key) asset_key = kvs.tokens.asset_key( self.job_id, point.row, point.column) for asset in kvs.get_list_json_decoded(asset_key): LOGGER.debug("Processing asset %s" % (asset)) # loss ratios, used both to produce the curve # and to aggregate the losses loss_ratios = self.compute_loss_ratios(asset, gmf_slice) loss_ratio_curve = self.compute_loss_ratio_curve( point.column, point.row, asset, gmf_slice, loss_ratios) aggregate_curve.append(loss_ratios * asset["assetValue"]) if loss_ratio_curve: loss_curve = self.compute_loss_curve( point.column, point.row, loss_ratio_curve, asset) for loss_poe in general.conditional_loss_poes(self.params): general.compute_conditional_loss(self.job_id, point.column, point.row, loss_curve, asset, loss_poe) return aggregate_curve.losses
def compute_risk(self, block_id, **kwargs): # pylint: disable=W0613 """This task computes risk for a block of sites. It requires to have pre-initialized in kvs: 1) list of sites 2) exposure portfolio (=assets) 3) vulnerability """ block = general.Block.from_kvs(block_id) #pylint: disable=W0201 self.vuln_curves = \ vulnerability.load_vuln_model_from_kvs(self.job_id) for point in block.grid(self.region): hazard_curve = self._get_db_curve(point.site) asset_key = kvs.tokens.asset_key(self.job_id, point.row, point.column) for asset in kvs.get_list_json_decoded(asset_key): LOGGER.debug("processing asset %s" % (asset)) loss_ratio_curve = self.compute_loss_ratio_curve( point, asset, hazard_curve) if loss_ratio_curve: loss_curve = self.compute_loss_curve(point, loss_ratio_curve, asset) for loss_poe in general.conditional_loss_poes(self.params): general.compute_conditional_loss(self.job_id, point.column, point.row, loss_curve, asset, loss_poe) return True