Skip to content

Commit 6c9e594

Browse files
committed
anomaly methods handle datasets and dataarrays
1 parent 09e1ed7 commit 6c9e594

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

earthkit/climate/aggregate/climatology.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,8 @@ def percentiles(
363363
@tools.groupby_kwargs_decorator
364364
@tools.season_order_decorator
365365
def anomaly(
366-
dataarray: xr.DataArray,
367-
climatology: xr.DataArray = None,
366+
dataarray: T.Union[xr.Dataset, xr.DataArray],
367+
climatology: T.Union[xr.Dataset, xr.DataArray, None] = None,
368368
climatology_range: tuple = (None, None),
369369
time_dim: T.Union[str, None] = None,
370370
groupby_kwargs: dict = {},
@@ -431,22 +431,35 @@ def anomaly(
431431
anomaly_array = resample(
432432
anomaly_array, how="mean", **reduce_kwargs, **groupby_kwargs, dim=time_dim
433433
)
434+
if isinstance(dataarray, xr.Dataset):
435+
for var in anomaly_array.data_vars:
436+
anomaly_array[var] = update_anomaly_array(
437+
anomaly_array[var], dataarray[var], name_tag, update_attrs
438+
)
439+
else:
440+
anomaly_array = update_anomaly_array(
441+
anomaly_array, dataarray, name_tag, update_attrs
442+
)
443+
444+
return anomaly_array
445+
446+
447+
def update_anomaly_array(anomaly_array, original_array, name_tag, update_attrs):
434448
anomaly_array = anomaly_array.rename(f"{anomaly_array.name}_{name_tag}")
435-
update_attrs = {**dataarray.attrs, **update_attrs}
449+
update_attrs = {**original_array.attrs, **update_attrs}
436450
if "standard_name" in update_attrs:
437451
update_attrs["standard_name"] += f"_{name_tag.replace(' ', '_')}"
438452
if "long_name" in update_attrs:
439453
update_attrs["long_name"] += f" {name_tag}"
440454

441455
anomaly_array = anomaly_array.assign_attrs(update_attrs)
442-
443456
return anomaly_array
444457

445458

446459
@tools.time_dim_decorator
447460
@tools.groupby_kwargs_decorator
448461
@tools.season_order_decorator
449-
def relative_anomaly(dataarray: xr.DataArray, *args, **kwargs):
462+
def relative_anomaly(dataarray: [xr.Dataset, xr.DataArray], *args, **kwargs):
450463
"""
451464
Calculate the relative anomaly from a reference climatology, i.e. percentage change.
452465

0 commit comments

Comments
 (0)