User indices recipes#
Note
User indices are deprecated. You should switch to Generic indices recipes API.
import icclim
import datetime
Max of tas within the year#
from icclim.util import callback
my_index_params = {"index_name": "my_index", "calc_operation": "max"}
file_tas = "tas_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_tas,
var_name="tas",
slice_mode="year",
out_file=out_f,
callback=callback.defaultCallback2,
)
Min of positive values within the year and the date of this minimum#
Get minimum temperature which is above zero Celsius and find its date.
Warning
If input data are in Kelvin, then thresh
must be in Kelvin too.
Note
An additional variable will be created in output netCDF file: “date_event” with the date of the first occurrence of min positive.
my_index_params = {
"index_name": "my_index",
"calc_operation": "min",
"logical_operation": "gt",
"thresh": 0 + 273.15, ### input data in Kelvin ==> threshold in Kelvin!
"date_event": True,
}
file_tasmin = "tasmin_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_tasmin,
var_name="tasmin",
slice_mode="year",
out_file=out_f,
callback=callback.defaultCallback2,
)
Mean of a selected period#
Note
slice_mode
must be None
to apply the operation to the whole
period of selected time range.
my_index_params = {"index_name": "my_index", "calc_operation": "mean"}
file_tas = "tas_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
tr = [datetime.datetime(1901, 1, 1), datetime.datetime(1920, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=file_tas,
var_name="tas",
slice_mode=None,
time_range=tr,
out_file=out_f,
callback=callback.defaultCallback2,
)
Number of days when tas < 15 degrees Celsius of each Autumn#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": "lt",
"thresh": 15 + 273.15, ### input data in Kelvin ==> threshold in Kelvin!
}
file_tas = "tas_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_tas,
var_name="tas",
slice_mode="SON",
out_unit="days",
out_file=out_f,
callback=callback.defaultCallback2,
)
Percentage of days when tasmax > 80th pctl and at which date it happens#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
Note
80th pctl: 80th percentile of tasmax in base period
Note
Two additional variables will be created in output netCDF file: “date_event_start” (the date of the first occurence of tasmax > 80th pctl) and “date_event_end” (the date of the last occurence of tasmax > 80th pctl).
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events",
"logical_operation": "gt",
"thresh": "p80",
"var_type": "t",
"date_event": True,
}
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
bp = [datetime.datetime(1960, 1, 1), datetime.datetime(1969, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=file_tasmax,
var_name="tasmax",
slice_mode="year",
base_period_time_range=bp,
out_unit="%",
out_file=out_f,
callback=callback.defaultCallback2,
)
Number of days when daily precipitation amount > 85th pctl#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
Note
daily precipitation amount: daily precipitation amount on a wet day (RR >= 1.0 mm)
Note
85th pctl: percentile of precipitation on wet days in base period
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": "gt",
"thresh": "p85",
"var_type": "p",
}
file_pr = "pr_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_pr,
var_name="pr",
slice_mode="year",
base_period_time_range=bp,
out_unit="days",
out_file=out_f,
callback=callback.defaultCallback2,
)
Max number of consecutive days when tasmax >= 25 degrees Celsius + date of the events#
Note
Two additional variables will be created in output netCDF file: “date_event_start” (the first date of the found sequence) and “date_event_end” (the last date of the found sequence).
Warning
If there are several sequences of the same length, the “date_event_start” and “date_event_end” will correspond to the first sequence.
my_index_params = {
"index_name": "my_index",
"calc_operation": "max_nb_consecutive_events",
"logical_operation": "get",
"thresh": 25 + 273.15, ### input data in Kelvin ==> threshold in Kelvin!
"date_event": True,
}
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_tasmax,
var_name="tasmax",
slice_mode="year",
out_file=out_f,
callback=callback.defaultCallback2,
)
Max of sum of precipitation in 10 consecutive days#
my_index_params = {
"index_name": "my_index",
"calc_operation": "run_sum",
"extreme_mode": "max",
"window_width": 10,
}
file_pr = "pr_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_pr,
var_name="pr",
slice_mode=["season", [4, 5, 6, 7, 8]],
out_file=out_f,
callback=callback.defaultCallback2,
)
Min of mean of tasmin in 7 consecutive days + date of the events#
Note
Two additional variables will be created in output netCDF file: “date_event_start” (the date corrsponding to the beggining of the “window” satisfying the condition) and “date_event_end” (the date corrsponding to the end of the “window” satisfying the condition).
Warning
If several “windows” with the same result are found, the “date_event_start” and “date_event_end” will correspond to the first one.
my_index_params = {
"index_name": "my_index",
"calc_operation": "run_mean",
"extreme_mode": "min",
"window_width": 7,
"date_event": True,
}
file_tasmin = "tasmin_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=file_tasmin,
var_name="tasmin",
slice_mode=["season", ([11, 12], [1, 2])],
out_file=out_f,
callback=callback.defaultCallback2,
)
Anomaly of tasmax between 2 period of 30 years#
Note
Result could be returned as percentage value relative to mean value
of reference period, if out_unit='%'
.
my_index_params = {"index_name": "my_index", "calc_operation": "anomaly"}
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
# studied period: future period
tr = [datetime.datetime(1971, 1, 1), datetime.datetime(2000, 12, 31)]
# reference period: past period
tr_base = [datetime.datetime(1901, 1, 1), datetime.datetime(1930, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=file_tasmax,
var_name="tasmax",
time_range=tr,
base_period_time_range=tr_base,
out_file=out_f,
callback=callback.defaultCallback2,
)
Number of days when tasmin >= 10 degrees Celsius and tasmax > 25 degrees Celsius#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": ["get", "gt"],
"thresh": [
10 + 273.15,
25 + 273.15,
], ### input data in Kelvin ==> threshold in Kelvin!
"link_logical_operations": "and",
}
file_tasmin = "tasmin_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
icclim.index(
user_index=my_index_params,
in_files=[file_tasmin, file_tasmax],
var_name=["tasmin", "tasmax"],
slice_mode="JJA",
out_unit="days",
out_file=out_f,
callback=callback.defaultCallback2,
)
Percentage of days when tasmin >= 10 degrees Celsius and tasmax > 90th pctl + date of the events#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
Note
It is possible to use numeric and percentile threshold at the time.
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": ["get", "gt"],
"thresh": [
10 + 273.15,
"p90",
], ### input data in Kelvin ==> threshold in Kelvin!
"var_type": "t", ### or ['-','t']
"link_logical_operations": "and",
"date_event": True,
}
file_tasmin = "tasmin_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
bp = [datetime.datetime(1960, 1, 1), datetime.datetime(1969, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=[file_tasmin, file_tasmax],
var_name=["tasmin", "tasmax"],
slice_mode="JJA",
base_period_time_range=bp,
out_unit="%",
out_file=out_f,
callback=callback.defaultCallback2,
)
Number of days when tas < 25th pctl and precip. > 75th pctl#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
4 compound indices defined in https://knmi-ecad-assets-prd.s3.amazonaws.com/documents/atbd.pdf (see the section 5.3.3 “Compound indices”) are based on daily precipitation (RR) and mean temperature (TG) variables:
CD (cold/dry days): (TG < 25th pctl) and (RR < 25th pctl)
CW (cold/wet days): (TG < 25th pctl) and (RR > 75th pctl)
WD (warm/dry days): (TG > 75th pctl) and (RR < 25th pctl)
WW (warm/wet days): (TG > 75th pctl) and (RR > 75th pctl)
Note
RR is a daily precipitation on a wet day, and its percentile value is computed from set of wet days also.
Note
Percentiles thresholds computing uses differents methods as it was described here.
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": ["lt", "gt"],
"thresh": ["p25", "p75"],
"var_type": ["t", "p"],
"link_logical_operations": "and",
}
file_pr = "pr_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
file_tas = "tas_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
bp = [datetime.datetime(1960, 1, 1), datetime.datetime(1969, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=[file_tas, file_pr],
var_name=["tas", "pr"],
slice_mode="year",
out_unit="days",
base_period_time_range=bp,
out_file=out_f,
callback=callback.defaultCallback2,
)
Number of days when tasmax > 90th pctl and tasmin >= 10 and precipitation < 30th pctl#
Note
If ‘calc_operation’ is ‘max_nb_consecutive_events’, then max number of consecutive days for the same condition will be computed.
my_index_params = {
"index_name": "my_index",
"calc_operation": "nb_events", ### 'calc_operation': 'max_nb_consecutive_events'
"logical_operation": ["gt", "get", "lt"],
"thresh": ["p90", 10 + 273.15, "p30"],
"var_type": ["t", "-", "p"],
"link_logical_operations": "and",
}
file_pr = "pr_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
file_tasmax = "tasmax_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
file_tasmin = "tasmin_day_CNRM-CM5_historical_r1i1p1_19010101-20001231.nc"
out_f = "my_index.nc"
bp = [datetime.datetime(1960, 1, 1), datetime.datetime(1969, 12, 31)]
icclim.index(
user_index=my_index_params,
in_files=[file_tasmax, file_tasmin, file_pr],
var_name=["tasmax", "tasmin", "pr"],
slice_mode="SON",
out_unit="days",
base_period_time_range=bp,
out_file=out_f,
callback=callback.defaultCallback2,
)