As part of a project on climatic teleconnection, a student investigates how El Niño-Southern Oscillation (ENSO) relates to monsoon rainfall. A result could be a plot showing the sliding correlation between Indian Summer Monsoon Rainfall (ISMR) and SST anomalies [RD-4]. A more sophisticated version of this task would be to calculate the Multivariate ENSO Index (MEI, [RD-5], [RD-6]). Additionally, also the comparison of the ENSO index with other CCI datasets (e.g. Cloud, Fire) would be interesting.
To reduce the amount of data to download and later work with, it is beneficial to do spatial and temporal subsetting, as well as variable selection as early in the workflow pipeline as possible. Cate supports these operations at download time, or when opening a dataset.
In [ ]:
from cate.core.ds import DATA_STORE_REGISTRY
import cate.ops as ops
from cate.util import ConsoleMonitor
In [ ]:
monitor = ConsoleMonitor()
In [ ]:
data_store = DATA_STORE_REGISTRY.get_data_store('esa_cci_odp')
local_store = DATA_STORE_REGISTRY.get_data_store('local')
In [ ]:
local_store
Set regions of interest
In [ ]:
s_india = '72, 8, 85, 17' # 'lon_min, lat_min, lon_max, lat_max'
pacific = '-175, -10, -115, 10' # 'lon_min, lat_min, lon_max, lat_max'
Download the desired spatial and temporal subsets and ECVs as separate datasets
In [ ]:
soil_sources = data_store.query('esacci.SOILMOISTURE.day.L3S.SSMV.multi-sensor.multi-platform.COMBINED.02-2.r1')
soil_sources
In [ ]:
# Doesn't work, see Issue 256. The dataset is already downloaded
#soil_sources[0].make_local(local_name='SOIL_2007',
# region=s_india,
# time_range='2007-01-01, 2007-12-31',
# var_names='sm, sm_uncertainty',
# monitor=monitor)
In [ ]:
sst_sources = data_store.query('esacci.SST.day.L4.SSTdepth.multi-sensor.multi-platform.OSTIA.1-1.r1')
sst_sources
In [ ]:
# The dataset is already downloaded
#sst_sources[0].make_local(local_name='SST_2006_2007',
# region=pacific,
# time_range='2006-01-01, 2007-12-31',
# var_names='analysed_sst, analysis_error',
# monitor=monitor)
Open and plot the first time slices of the downloaded datasets
In [ ]:
soil = ops.open_dataset('local.SOIL_2007')
In [ ]:
soil
In [ ]:
%matplotlib inline
ops.plot_map(soil, var='sm', time='2007-01-01', region=s_india, file='/home/ccitbx/Desktop/uc6_fig1.png')
In [ ]:
sst = ops.open_dataset('local.SST_2006_2007')
In [ ]:
sst
In [ ]:
%matplotlib inline
ops.plot_map(sst, var='analysed_sst', time='2006-01-01', region=pacific, file='/home/ccitbx/Desktop/uc6_fig2.png')
Further operations (index calculation, long term averaging) work on monthly datasets. Hence, aggregate the daily datasets to monthly temporal resolution
In [ ]:
sst_monthly = ops.temporal_aggregation(sst)
In [ ]:
sst_monthly
In [ ]:
soil_monthly = ops.temporal_aggregation(soil)
In [ ]:
soil_monthly
Create a long term averaged sea surface temperature dataset
In [ ]:
sst_lta = ops.long_term_average(sst_monthly)
In [ ]:
sst_lta
The index calculation operation reads the reference dataset from a given file name, hence, save the long term average dataset. This takes longer than previous operations, as most of the actual calculation is done in a streaming fashion, when writing the dataset.
In [ ]:
ops.write_netcdf4(sst_lta, '/home/ccitbx/Desktop/sst_lta.nc')
Calculate ENSO index
In [ ]:
enso_index = ops.enso_nino34(ds=sst_monthly,
var='analysed_sst',
file='/home/ccitbx/Desktop/sst_lta.nc')
In [ ]:
enso_index
ENSO index result is in a tabular format, correlation takes a dataset, hence we convert the table to a dataset
In [ ]:
enso_ds = ops.from_dataframe(enso_index)
In [ ]:
enso_ds
We want to calculate correlation with a one month lag. Subset the datasets accordingly
In [ ]:
soil_monthly_jan_nov = ops.subset_temporal(soil_monthly, '2007-01-01, 2007-11-01')
In [ ]:
soil_monthly_jan_nov.time
In [ ]:
enso_index_dec_oct = ops.subset_temporal(enso_ds, '2006-12-01, 2007-10-01')
In [ ]:
enso_index_dec_oct.time
Extract a point of Soil Moisture data to correlate with the ENSO index
In [ ]:
soil_monthly_jan_nov_point = ops.tseries_point(soil_monthly_jan_nov, (78, 12), 'sm')
In [ ]:
soil_monthly_jan_nov_point
Perform correlation
In [ ]:
corr = ops.pearson_correlation_scalar(enso_index_dec_oct, soil_monthly_jan_nov_point, 'ENSO N3.4 Index', 'sm')
In [ ]:
corr