-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
All outputs when using approach='first' for tropical cyclones produce an empty row and an init_time of 0.
Code to reproduce:
import xarray as xr
import numpy as np
from extremeweatherbench import inputs, metrics, cases, derived, calc, evaluate
# Preprocessing function for CIRA data that includes geopotential thickness calculation
# required for tropical cyclone tracks
def _preprocess_bb_cira_tc_forecast_dataset(ds: xr.Dataset) -> xr.Dataset:
"""An example preprocess function that renames the time coordinate to lead_time,
creates a valid_time coordinate, and sets the lead time range and resolution not
present in the original dataset.
Args:
ds: The forecast dataset to rename.
Returns:
The renamed forecast dataset.
"""
ds = ds.rename({"time": "lead_time"})
# The evaluation configuration is used to set the lead time range and resolution.
ds["lead_time"] = np.array(
[i for i in range(0, 241, 6)], dtype="timedelta64[h]"
).astype("timedelta64[ns]")
ds["geopotential_thickness"] = calc.geopotential_thickness(
ds["z"], top_level_value=300, bottom_level_value=500, geopotential=True
)
return ds
# Load the case collection from the YAML file
case_yaml = cases.load_ewb_events_yaml_into_case_collection()
# Select single case
case_yaml.select_cases(by="case_id_number", value=151, inplace=True)
# Define IBTrACS target, no arguments needed as defaults are sufficient
ibtracs_target = inputs.IBTrACS()
# Define FCNv2 forecast
fcnv2_forecast = inputs.KerchunkForecast(
name="fcn_forecast",
source="gs://extremeweatherbench/FOUR_v200_GFS.parq",
variables=[derived.TropicalCycloneTrackVariables()],
# Define metadata variable mapping for FCNv2 forecast
variable_mapping=inputs.CIRA_metadata_variable_mapping,
# Preprocess the FCNv2 forecast to include geopotential thickness calculation
preprocess=_preprocess_bb_cira_tc_forecast_dataset,
storage_options={"remote_protocol": "s3", "remote_options": {"anon": True}},
)
composite_landfall_metrics = [
metrics.LandfallMetric(
metrics=[
metrics.LandfallIntensityMeanAbsoluteError,
metrics.LandfallTimeMeanError,
metrics.LandfallDisplacement,
],
approach="first",
)
]
tc_evaluation_object = [
# FCNv2 forecast
inputs.EvaluationObject(
event_type="tropical_cyclone",
metric_list=composite_landfall_metrics,
target=ibtracs_target,
forecast=fcnv2_forecast,
),
]
ewb = evaluate.ExtremeWeatherBench(
case_metadata=case_yaml,
evaluation_objects=tc_evaluation_object,
)
# Run the workflow with parallel_config backend set to dask
outputs = ewb.run(
parallel_config={"backend": "loky", "n_jobs": 1},
)
outputs.to_csv("tc_metric_test_results.csv")Reactions are currently unavailable