Commit 1c899f47 authored by Klaus Zimmermann's avatar Klaus Zimmermann
Browse files

Index function extreme_temperature_range, etr (closes #166)

parent afb59128
......@@ -46,6 +46,14 @@ index_functions:
From this it calculates the average day-to-day difference in
diurnal temperature range.
extreme_temperature_range:
description: |
This index function takes two inputs, low_data and high_data, i.e.
daily minimum and maximum temperature.
From this it calculates the extreme temperature range as the
maximum of daily maximum temperature minus the minimum of daily
minimum temperature.
first_occurrence:
description: |
Calculates the first time some condition is met.
......
......@@ -5,6 +5,7 @@ from .index_functions import ( # noqa: F401
CountOccurrences,
DiurnalTemperatureRange,
InterdayDiurnalTemperatureRange,
ExtremeTemperatureRange,
FirstOccurrence,
LastOccurrence,
SpellLength,
......
......@@ -75,6 +75,26 @@ class DiurnalTemperatureRange(IndexFunction):
lazy_func = call_func
class ExtremeTemperatureRange(IndexFunction):
def __init__(self):
super().__init__(units=Unit('degree_Celsius'))
def prepare(self, input_cubes):
props = {(cube.dtype, cube.units, cube.standard_name)
for cube in input_cubes.values()}
assert len(props) == 1
dtype, units, standard_name = props.pop()
assert (units == Unit('Kelvin')) or (units == Unit('degree_Celsius'))
super().prepare(input_cubes)
def call_func(self, data, axis, **kwargs):
res = (data['high_data'].max(axis=axis) -
data['low_data'].min(axis=axis))
return res.astype('float32')
lazy_func = call_func
class InterdayDiurnalTemperatureRange(IndexFunction):
def __init__(self):
super().__init__(units=Unit('degree_Celsius'))
......
......@@ -62,6 +62,7 @@ setuptools.setup(
'temperature_sum=climix.index_functions:TemperatureSum',
'diurnal_temperature_range=climix.index_functions:DiurnalTemperatureRange',
'interday_diurnal_temperature_range=climix.index_functions:InterdayDiurnalTemperatureRange',
'extreme_temperature_range=climix.index_functions:ExtremeTemperatureRange',
],
},
project_urls={
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment