Working with catalog-based forecasts

This example shows some basic interactions with data-based forecasts. We will load in a forecast stored in the CSEP data format, and compute the expected rates on a 0.1° x 0.1° grid covering the state of California. We will plot the expected rates in the spatial cells.

Overview:
  1. Define forecast properties (time horizon, spatial region, etc).

  2. Compute the expected rates in space and magnitude bins

  3. Plot expected rates in the spatial cells

Load required libraries

Most of the core functionality can be imported from the top-level csep package. Utilities are available from the csep.utils subpackage.

import numpy

import csep
from csep.core import regions
from csep.utils import datasets

Load data forecast

PyCSEP contains some basic forecasts that can be used to test of the functionality of the package. This forecast has already been filtered to the California RELM region.

Define spatial and magnitude regions

Before we can compute the bin-wise rates we need to define a spatial region and a set of magnitude bin edges. The magnitude bin edges # are the lower bound (inclusive) except for the last bin, which is treated as extending to infinity. We can bind these # to the forecast object. This can also be done by passing them as keyword arguments into csep.load_catalog_forecast().

# Magnitude bins properties
min_mw = 4.95
max_mw = 8.95
dmw = 0.1

# Create space and magnitude regions
magnitudes = regions.magnitude_bins(min_mw, max_mw, dmw)
region = regions.california_relm_region()

# Bind region information to the forecast (this will be used for binning of the catalogs)
forecast.region = regions.create_space_magnitude_region(region, magnitudes)

Compute spatial event counts

The csep.core.forecasts.CatalogForecast provides a method to compute the expected number of events in spatial cells. This requires a region with magnitude information.

Out:

Processed 1 catalogs in 0.002502918243408203 seconds
Processed 2 catalogs in 0.0046350955963134766 seconds
Processed 3 catalogs in 0.006128549575805664 seconds
Processed 4 catalogs in 0.007297515869140625 seconds
Processed 5 catalogs in 0.008385658264160156 seconds
Processed 6 catalogs in 0.00955963134765625 seconds
Processed 7 catalogs in 0.010586977005004883 seconds
Processed 8 catalogs in 0.011783838272094727 seconds
Processed 9 catalogs in 0.013876676559448242 seconds
Processed 10 catalogs in 0.015075206756591797 seconds
Processed 20 catalogs in 0.026233673095703125 seconds
Processed 30 catalogs in 0.038538455963134766 seconds
Processed 40 catalogs in 0.05054640769958496 seconds
Processed 50 catalogs in 0.06333780288696289 seconds
Processed 60 catalogs in 0.07516789436340332 seconds
Processed 70 catalogs in 0.08683085441589355 seconds
Processed 80 catalogs in 0.09903550148010254 seconds
Processed 90 catalogs in 0.11171126365661621 seconds
Processed 100 catalogs in 0.12327289581298828 seconds
Processed 200 catalogs in 0.2386031150817871 seconds
Processed 300 catalogs in 0.3595542907714844 seconds
Processed 400 catalogs in 0.47966766357421875 seconds
Processed 500 catalogs in 0.6486847400665283 seconds
Processed 600 catalogs in 0.7682092189788818 seconds
Processed 700 catalogs in 0.8881814479827881 seconds
Processed 800 catalogs in 1.0592212677001953 seconds
Processed 900 catalogs in 1.1759099960327148 seconds
Processed 1000 catalogs in 1.2943007946014404 seconds
Processed 2000 catalogs in 2.7113993167877197 seconds
Processed 3000 catalogs in 4.053321123123169 seconds
Processed 4000 catalogs in 5.435200929641724 seconds
Processed 5000 catalogs in 6.779415607452393 seconds
Processed 6000 catalogs in 8.12009572982788 seconds
Processed 7000 catalogs in 9.500802040100098 seconds
Processed 8000 catalogs in 10.802407503128052 seconds
Processed 9000 catalogs in 12.227723836898804 seconds
Processed 10000 catalogs in 13.55146861076355 seconds

Plot expected event counts

We can plot the expected event counts the same way that we plot a csep.core.forecasts.GriddedForecast

ax = forecast.expected_rates.plot(plot_args={'clim': [-3.5, 0]})
ucerf3-landers

The images holes in the image are due to under-sampling from the forecast.

Quick sanity check

The forecasts were filtered to the spatial region so all events should be binned. We loop through each data in the forecast and count the number of events and compare that with the expected rates. The expected rate is an average in each space-magnitude bin, so we have to multiply this value by the number of catalogs in the forecast.

Total running time of the script: ( 0 minutes 15.754 seconds)

Gallery generated by Sphinx-Gallery