Example #1
0
    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)
Example #2
0
    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