Commit afb59128 authored by Lars Bärring's avatar Lars Bärring Committed by Klaus Zimmermann
Browse files

Index function interday diurnal temperature range (closes #154)

parent b4f83a8b
......@@ -39,6 +39,13 @@ index_functions:
daily minimum and maximum temperature.
From this it calculated the average diurnal temperature range.
interday_diurnal_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 average day-to-day difference in
diurnal temperature range.
first_occurrence:
description: |
Calculates the first time some condition is met.
......
......@@ -4,6 +4,7 @@ from .index_functions import ( # noqa: F401
CountLevelCrossings,
CountOccurrences,
DiurnalTemperatureRange,
InterdayDiurnalTemperatureRange,
FirstOccurrence,
LastOccurrence,
SpellLength,
......
......@@ -75,6 +75,29 @@ class DiurnalTemperatureRange(IndexFunction):
lazy_func = call_func
class InterdayDiurnalTemperatureRange(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 in [Unit('Kelvin'), Unit('degree_Celsius')]
super().prepare(input_cubes)
def call_func(self, data, axis, **kwargs):
res = np.absolute(np.diff(data['high_data'] -
data['low_data'], axis=axis)).mean(axis=axis)
return res.astype('float32')
def lazy_func(self, data, axis, **kwargs):
res = da.absolute(da.diff(data['high_data'] -
data['low_data'], axis=axis)).mean(axis=axis)
return res.astype('float32')
class FirstOccurrence(ThresholdMixin, IndexFunction):
def __init__(self, threshold, condition):
super().__init__(threshold, condition, units=Unit('days'))
......
......@@ -61,6 +61,7 @@ setuptools.setup(
'thresholded_statistics=climix.index_functions:ThresholdedStatistics',
'temperature_sum=climix.index_functions:TemperatureSum',
'diurnal_temperature_range=climix.index_functions:DiurnalTemperatureRange',
'interday_diurnal_temperature_range=climix.index_functions:InterdayDiurnalTemperatureRange',
],
},
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