def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ job_ctxt = self.job_ctxt points = list(general.Block.from_kvs( job_ctxt.job_id, block_id).grid(job_ctxt.region)) hazard_curves = dict((point.site, self._get_db_curve(point.site)) for point in points) def get_loss_curve(point, vuln_function, asset): "Compute loss curve basing on hazard curve" job_profile = self.job_ctxt.oq_job_profile hazard_curve = hazard_curves[point.site] loss_ratio_curve = compute_loss_ratio_curve( vuln_function, hazard_curve, job_profile.lrem_steps_per_interval) return compute_loss_curve(loss_ratio_curve, asset.value) bcr = general.compute_bcr_for_block(job_ctxt.job_id, points, get_loss_curve, float(job_ctxt.params['INTEREST_RATE']), float(job_ctxt.params['ASSET_LIFE_EXPECTANCY']) ) bcr_block_key = kvs.tokens.bcr_block_key(job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, bcr) LOGGER.debug('bcr result for block %s: %r', block_id, bcr) return True
def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ job_ctxt = self.job_ctxt points = list( general.Block.from_kvs(job_ctxt.job_id, block_id).grid(job_ctxt.region)) hazard_curves = dict( (point.site, self._get_db_curve(point.site)) for point in points) def get_loss_curve(point, vuln_function, asset): "Compute loss curve basing on hazard curve" job_profile = self.job_ctxt.oq_job_profile hazard_curve = hazard_curves[point.site] loss_ratio_curve = compute_loss_ratio_curve( vuln_function, hazard_curve, job_profile.lrem_steps_per_interval) return compute_loss_curve(loss_ratio_curve, asset.value) bcr = general.compute_bcr_for_block( job_ctxt.job_id, points, get_loss_curve, float(job_ctxt.params['INTEREST_RATE']), float(job_ctxt.params['ASSET_LIFE_EXPECTANCY'])) bcr_block_key = kvs.tokens.bcr_block_key(job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, bcr) LOGGER.debug('bcr result for block %s: %r', block_id, bcr) return True
def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ # aggregate the losses for this block aggregate_curve = general.AggregateLossCurve() block = general.Block.from_kvs(self.job_ctxt.job_id, block_id) epsilon_provider = general.EpsilonProvider(self.job_ctxt.params) def get_loss_curve(site, vuln_function, asset): "Compute loss curve basing on GMF data" gmvs = self._get_gmvs_at( general.hazard_input_site(self.job_ctxt, site)) gmf_slice = { "IMLs": gmvs, "TSES": self._tses(), "TimeSpan": self._time_span() } loss_ratios = general.compute_loss_ratios(vuln_function, gmf_slice, epsilon_provider, asset) loss_ratio_curve = general.compute_loss_ratio_curve( vuln_function, gmf_slice, epsilon_provider, asset, self.job_ctxt.oq_job_profile.loss_histogram_bins, loss_ratios=loss_ratios) aggregate_curve.append(loss_ratios * asset.value) return loss_ratio_curve.rescale_abscissae(asset.value) result = general.compute_bcr_for_block( self.job_ctxt, block.sites, get_loss_curve, float(self.job_ctxt.params['INTEREST_RATE']), float(self.job_ctxt.params['ASSET_LIFE_EXPECTANCY'])) bcr_block_key = kvs.tokens.bcr_block_key(self.job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, result) LOGGER.debug('bcr result for block %s: %r', block_id, result) return aggregate_curve.losses
def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ self.slice_gmfs(block_id) # aggregate the losses for this block aggregate_curve = general.AggregateLossCurve() points = list( general.Block.from_kvs(self.job_ctxt.job_id, block_id).grid(self.job_ctxt.region)) gmf_slices = dict( (point.site, kvs.get_value_json_decoded( kvs.tokens.gmf_set_key(self.job_ctxt.job_id, point.column, point.row))) for point in points) epsilon_provider = general.EpsilonProvider(self.job_ctxt.params) def get_loss_curve(point, vuln_function, asset): "Compute loss curve basing on GMF data" gmf_slice = gmf_slices[point.site] loss_ratios = general.compute_loss_ratios(vuln_function, gmf_slice, epsilon_provider, asset) loss_ratio_curve = general.compute_loss_ratio_curve( vuln_function, gmf_slice, epsilon_provider, asset, self.job_ctxt.oq_job_profile.loss_histogram_bins, loss_ratios=loss_ratios) aggregate_curve.append(loss_ratios * asset.value) return loss_ratio_curve.rescale_abscissae(asset.value) result = general.compute_bcr_for_block( self.job_ctxt.job_id, points, get_loss_curve, float(self.job_ctxt.params['INTEREST_RATE']), float(self.job_ctxt.params['ASSET_LIFE_EXPECTANCY'])) bcr_block_key = kvs.tokens.bcr_block_key(self.job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, result) LOGGER.debug('bcr result for block %s: %r', block_id, result) return aggregate_curve.losses
def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ self.slice_gmfs(block_id) # aggregate the losses for this block aggregate_curve = general.AggregateLossCurve() points = list(general.Block.from_kvs( self.job_ctxt.job_id, block_id).grid(self.job_ctxt.region)) gmf_slices = dict( (point.site, kvs.get_value_json_decoded( kvs.tokens.gmf_set_key(self.job_ctxt.job_id, point.column, point.row) )) for point in points ) epsilon_provider = general.EpsilonProvider(self.job_ctxt.params) def get_loss_curve(point, vuln_function, asset): "Compute loss curve basing on GMF data" gmf_slice = gmf_slices[point.site] loss_ratios = general.compute_loss_ratios( vuln_function, gmf_slice, epsilon_provider, asset) loss_ratio_curve = general.compute_loss_ratio_curve( vuln_function, gmf_slice, epsilon_provider, asset, self.job_ctxt.oq_job_profile.loss_histogram_bins, loss_ratios=loss_ratios) aggregate_curve.append(loss_ratios * asset.value) return loss_ratio_curve.rescale_abscissae(asset.value) result = general.compute_bcr_for_block(self.job_ctxt.job_id, points, get_loss_curve, float(self.job_ctxt.params['INTEREST_RATE']), float(self.job_ctxt.params['ASSET_LIFE_EXPECTANCY']) ) bcr_block_key = kvs.tokens.bcr_block_key(self.job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, result) LOGGER.debug('bcr result for block %s: %r', block_id, result) return aggregate_curve.losses
def _compute_bcr(self, block_id): """ Calculate and store in the kvs the benefit-cost ratio data for block. A value is stored with key :func:`openquake.kvs.tokens.bcr_block_key`. See :func:`openquake.risk.job.general.compute_bcr_for_block` for result data structure spec. """ # aggregate the losses for this block aggregate_curve = general.AggregateLossCurve() block = general.Block.from_kvs(self.job_ctxt.job_id, block_id) epsilon_provider = general.EpsilonProvider(self.job_ctxt.params) def get_loss_curve(site, vuln_function, asset): "Compute loss curve basing on GMF data" gmvs = self._get_gmvs_at(general.hazard_input_site( self.job_ctxt, site)) gmf_slice = {"IMLs": gmvs, "TSES": self._tses(), "TimeSpan": self._time_span()} loss_ratios = general.compute_loss_ratios( vuln_function, gmf_slice, epsilon_provider, asset) loss_ratio_curve = general.compute_loss_ratio_curve( vuln_function, gmf_slice, epsilon_provider, asset, self.job_ctxt.oq_job_profile.loss_histogram_bins, loss_ratios=loss_ratios) aggregate_curve.append(loss_ratios * asset.value) return loss_ratio_curve.rescale_abscissae(asset.value) result = general.compute_bcr_for_block(self.job_ctxt, block.sites, get_loss_curve, float(self.job_ctxt.params['INTEREST_RATE']), float(self.job_ctxt.params['ASSET_LIFE_EXPECTANCY'])) bcr_block_key = kvs.tokens.bcr_block_key( self.job_ctxt.job_id, block_id) kvs.set_value_json_encoded(bcr_block_key, result) LOGGER.debug('bcr result for block %s: %r', block_id, result) return aggregate_curve.losses