Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f479cb9
added simple-track operator and tests
A-Gainford Apr 28, 2026
4f56efb
added example tracking recipe
A-Gainford Apr 30, 2026
4a1058a
added cell stats operator and changed nan behaviour in plot_histogram…
A-Gainford Apr 30, 2026
40f87c2
added example cell_stats recipe
A-Gainford Apr 30, 2026
74cb58e
log-log plotting for features, and frequency on y-axis rather than de…
A-Gainford May 1, 2026
e107075
used same log bins for "surface_microphysical" as "feature" cubes - m…
A-Gainford May 1, 2026
f75e6d9
added feature_effective_radius as alternative to feature_size
A-Gainford May 1, 2026
e928ba8
additional comments
A-Gainford May 1, 2026
7d89cbb
added temporary feature cbar definitons (limits to be set dynamically)
A-Gainford May 1, 2026
7fa3a8d
Merge remote-tracking branch 'origin/main' into simple-track
A-Gainford May 1, 2026
98f39d9
added simple-track dependency to pyproject and env.yml
A-Gainford May 1, 2026
730c7aa
added simple-track to dependencies
A-Gainford May 1, 2026
a3bce77
added cube metadata copying to feature cubes, and error catching for …
A-Gainford May 8, 2026
c52c430
added cset_comparison_base to list of coord metadata to copy to featu…
A-Gainford May 8, 2026
54c3db5
copying coord to cell_stats_cube now copies dimension information (as…
A-Gainford May 13, 2026
b8b1f6a
removed unnecessary logging, added set_under option to feature plot
A-Gainford May 19, 2026
dda9d48
removed feature_effective_radius support for now, added support for m…
A-Gainford May 19, 2026
65764a7
changed example cell_stats recipe to include MODEL_NAME input arg, fi…
A-Gainford May 19, 2026
7ed0592
fixed bug for assigning coord dims
A-Gainford May 27, 2026
8554d53
added feature effective radius calculation
A-Gainford Jun 16, 2026
963d808
modularised cell_stats operator, added test
A-Gainford Jun 16, 2026
ca3eea6
Merge branch 'main' into simple-track
jfrost-mo Jun 25, 2026
210d2ff
Merge branch 'simple-track' into cell-stats
jfrost-mo Jun 25, 2026
244a6e2
added requirement that input cube is xy coord type
A-Gainford Jun 30, 2026
e7f5fd6
made xy checking into function
A-Gainford Jun 30, 2026
2c0986a
Merge branch 'main' into cell-stats
A-Gainford Jul 27, 2026
f7b8a6a
nanmax when finding vmin, vmax
A-Gainford Aug 12, 2026
9446b27
Adds misc.flatten operator, which can remove nans in cell stats cubes…
A-Gainford Aug 14, 2026
a8e7498
Added grid_spacing as attribute to output cubes in cell_stats operato…
A-Gainford Aug 14, 2026
7158074
added support for multiple thresholds (one per model)
A-Gainford Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ dependencies = [
"scikit-image",
"scores",
"dask",
"simple-track",
"xarray",
"simple-track",
]
Expand Down
1 change: 1 addition & 0 deletions src/CSET/operators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ def get_operator(name: str):
operator = CSET.operators
for section in name_sections:
operator = getattr(operator, section)

if callable(operator):
return operator
else:
Expand Down
44 changes: 44 additions & 0 deletions src/CSET/operators/_colorbar_definition.json
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,50 @@
"max": 1.1,
"min": 0.5
},
"feature_id": {
"cmap": "viridis",
"levels": [
1,
50,
100,
150,
200,
250,
300,
350,
400
],
"ymax": 1.0,
"ymin": 0.0
},
"feature_lifetime": {
"cmap": "YlGnBu",
"levels": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
],
"ymax": 1.0,
"ymin": 0.0
},
"feature_init": {
"cmap": "Blues",
"levels": [
0.5,
1
],
"ymax": 1.0,
"ymin": 0.0
},
"fog_fraction_at_screen_level": {
"cmap": "viridis",
"max": 1,
Expand Down
26 changes: 16 additions & 10 deletions src/CSET/operators/collapse.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,24 @@ def collapse(
raise ValueError("Must specify additional_percent")

# Retain only common time points between different models if multiple model inputs.
# Do this only if "forecast_reference_time" and "forecast_period" are present in the cubes.
if isinstance(cubes, iris.cube.CubeList) and len(cubes) > 1:
logging.debug(
"Extracting common time points as multiple model inputs detected."
)
for cube in cubes:
cube.coord("forecast_reference_time").bounds = None
cube.coord("forecast_period").bounds = None
cubes = cubes.extract_overlapping(
["forecast_reference_time", "forecast_period"]
fcst_ref_time_check = all(
"forecast_reference_time" in cube.coords() for cube in cubes
)
if len(cubes) == 0:
raise ValueError("No overlapping times detected in input cubes.")
fcst_period_check = all("forecast_period" in cube.coords() for cube in cubes)
if fcst_ref_time_check and fcst_period_check:
logging.debug(
"Extracting common time points as multiple model inputs detected."
)
for cube in cubes:
cube.coord("forecast_reference_time").bounds = None
cube.coord("forecast_period").bounds = None
cubes = cubes.extract_overlapping(
["forecast_reference_time", "forecast_period"]
)
if len(cubes) == 0:
raise ValueError("No overlapping times detected in input cubes.")

collapsed_cubes = iris.cube.CubeList([])
with warnings.catch_warnings():
Expand Down
Loading