Why s2stools
1. File structure
read
realtime+hindcastsandcontrol+perturbedforecasts from different initialization dates all into a single file (s2stools.process.s2sparser())make use of the dimension
leadtimewhile obtainingvalidtimeas a dimensionless coordinate
>>> ds = xr.open_mfdataset("/some/path/filename_2017*.nc", preprocess=s2stools.process.s2sparser)
>>> ds
<xarray.Dataset>
Dimensions: (leadtime: 47, longitude: 2, latitude: 1, number: 51,
reftime: 2, hc_year: 21)
Coordinates:
* leadtime (leadtime) timedelta64[ns] 0 days 1 days ... 45 days 46 days
* longitude (longitude) float32 -180.0 -177.5
* latitude (latitude) float32 60.0
* number (number) int64 0 1 2 3 4 5 6 7 8 9 ... 42 43 44 45 46 47 48 49 50
* reftime (reftime) datetime64[ns] 2017-11-16 2017-11-20
* hc_year (hc_year) int64 -20 -19 -18 -17 -16 -15 -14 ... -5 -4 -3 -2 -1 0
validtime (reftime, leadtime, hc_year) datetime64[ns] 1997-11-16 ... 201...
Data variables:
u (reftime, latitude, longitude, leadtime, hc_year, number) float32 dask.array<chunksize=(1, 1, 2, 47, 20, 1), meta=np.ndarray>
2. Deseasonalization
compute a robust climatology and anomalies therefrom
clim = s2stools.clim.climatology(
data,
window_size=15, # include preceding/subsequent reftimes within window
mean_or_std="mean", # compute climaological mean or standard deviation
ndays_clim_filter=7, # apply running mean of ndays_clim_filter days
hide_warnings=False, # warn when not many reftimes are available for climatology
groupby="validtime", # apply climatology over same day-of-year (validtime) or leadtime
)
3. Composites around events
identify events and create a composite dataset that easily allows to compute e.g. the composite mean
>>> ssw_composite = EventComposite(data, "path/to/eventlists*.json", descr="sudden warmings", model="ecmwf")
>>> ssw_composite
<s2stools.events.EventComposite> of 182 events of type 'sudden warmings'.
--> see composite dataset using my_event_composite.comp
>>> ssw_composite.comp
<xarray.Dataset>
Dimensions: (lagtime: 73, longitude: 2, latitude: 1, i: 182)
Coordinates:
* lagtime (lagtime) timedelta64[ns] -36 days -35 days ... 35 days 36 days
* longitude (longitude) float32 -180.0 -177.5
* latitude (latitude) float32 60.0
number (i) int64 0 3 4 5 6 8 10 3 8 10 ... 39 40 42 43 44 45 46 47 48 49
reftime (i) datetime64[ns] 2017-11-16 2017-11-16 ... 2017-11-20
hc_year (i) int64 -20 -20 -20 -20 -20 -20 -20 -19 -19 ... 0 0 0 0 0 0 0 0
validtime (i, lagtime) datetime64[ns] NaT NaT NaT NaT ... NaT NaT NaT NaT
leadtime (i) timedelta64[ns] 11 days 11 days 10 days ... 19 days 16 days
* i (i) int64 0 1 2 3 4 5 6 7 8 ... 174 175 176 177 178 179 180 181
Data variables:
u (i, latitude, longitude, lagtime) float32 dask.array<chunksize=(1, 1, 2, 73), meta=np.ndarray>
4. Furthermore
plotting tools
zonal wavenumber decomposition
download S2S ECMWF data