Skip to content

2113 nimrod regrid - #2269

Open
BernardClaxton (BernardClaxton) wants to merge 47 commits into
mainfrom
2113_nimrod_regrid
Open

2113 nimrod regrid#2269
BernardClaxton (BernardClaxton) wants to merge 47 commits into
mainfrom
2113_nimrod_regrid

Conversation

@BernardClaxton

Copy link
Copy Markdown
Contributor

Contribution checklist

Aim to have all relevant checks ticked off before merging. See the developer's guide for more detail.

  • Documentation has been updated to reflect change.
  • New code has tests, and affected old tests have been updated.
  • All tests and CI checks pass.
  • Ensured the pull request title is descriptive.
  • Attributed any Generative AI, such as GitHub Copilot, used in this PR.
  • Marked the PR as ready to review.

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor
Total coverage: 91% (HTML report)
Name                                                              Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------------------------------------------
src/CSET/__init__.py                                                 93      2     12      0    98%
src/CSET/_common.py                                                 149      0     52      0   100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py             116     28     26      0    77%
src/CSET/cset_workflow/app/fetch_nimrod/bin/fetch_nimrod.py          80      8     28     11    82%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py      79      2      8      2    95%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py            29      0      8      0   100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py              25      0      4      0   100%
src/CSET/cset_workflow/lib/python/jinja_utils.py                     17      0      6      0   100%
src/CSET/extract_workflow.py                                         47      0     16      0   100%
src/CSET/graph.py                                                    43      0     14      0   100%
src/CSET/operators/__init__.py                                       89      0     26      0   100%
src/CSET/operators/_atmospheric_constants.py                          9      0      0      0   100%
src/CSET/operators/_colormaps.py                                    244      1     64      2    99%
src/CSET/operators/_stash_to_lfric.py                                 3      0      0      0   100%
src/CSET/operators/_utils.py                                        193      8     76      6    95%
src/CSET/operators/ageofair.py                                      141      7     64      5    94%
src/CSET/operators/aggregate.py                                      76      1     22      1    98%
src/CSET/operators/aviation.py                                       60      0     18      0   100%
src/CSET/operators/collapse.py                                      154      8     72      3    93%
src/CSET/operators/constraints.py                                   113      7     50      3    93%
src/CSET/operators/convection.py                                     37      4     10      2    87%
src/CSET/operators/ensembles.py                                      27      0     14      0   100%
src/CSET/operators/feature.py                                        41      0     10      0   100%
src/CSET/operators/filters.py                                        66      2     30      0    98%
src/CSET/operators/fluxes.py                                         41      0     10      0   100%
src/CSET/operators/humidity.py                                      139      0     56      0   100%
src/CSET/operators/imageprocessing.py                                56      0     16      0   100%
src/CSET/operators/mesoscale.py                                      17      0      2      0   100%
src/CSET/operators/misc.py                                          172      1     74      4    98%
src/CSET/operators/plot.py                                         1011    163    348     66    81%
src/CSET/operators/power_spectrum.py                                 97      3     30      3    95%
src/CSET/operators/precipitation.py                                 176     34     84      4    80%
src/CSET/operators/pressure.py                                       41      0     12      0   100%
src/CSET/operators/radar_filter.py                                   61     53     24      0     9%
src/CSET/operators/read.py                                          433     22    190     18    93%
src/CSET/operators/regrid.py                                        146      1     70      3    98%
src/CSET/operators/scoreswrappers.py                                160     22     42      8    82%
src/CSET/operators/temperature.py                                   121      0     32      0   100%
src/CSET/operators/transect.py                                       62      0     24      0   100%
src/CSET/operators/wind.py                                           45      3     10      2    91%
src/CSET/operators/write.py                                          15      0      6      0   100%
src/CSET/recipes/__init__.py                                        101      0     28      0   100%
---------------------------------------------------------------------------------------------------
TOTAL                                                              4825    380   1688    143    91%

Base automatically changed from 1759_import_nimrod to main July 16, 2026 15:39
Comment thread src/CSET/loaders/radar.py Outdated
Comment thread src/CSET/loaders/radar.py Outdated
@Sylviabohnenstengel

Copy link
Copy Markdown
Member

Hi, as messaged earlier I got an unclear error message when the rose-suite.conf was apparently set to conf.NIMROD_RADAR_OBS=true but this did not make it into the executed conf file. Probably a rose issue with saving the settings. In any case the two suggestions above guard against execution of these recipes if the radar data obs are not selected and avoid a confusing error message.

@Sylviabohnenstengel

Copy link
Copy Markdown
Member

BernardClaxton (@BernardClaxton) I have gone over the bmc9 recipe radar_common_domain_histogram_domain_mean.yaml and have taken the collapse step out. I think we do not want to collapse to a spatial field over time and then calculate the histogram, but instead want to calculate the histogram on all matching values between nimrod and models. As mentioned before when linking the HISTOGRAM_SURFACE_FIELD_SEQUENCE through which allows to set it to 'time' or 'realization' this gives us the option in the plot_histogram_series.py to calculate the individual histograms per time point over all time slices in the cubelist or the total histogram across all time slices. This leads to different results:

With collapse over time in place:
image

without collapse over time:
image

@BernardClaxton

BernardClaxton (BernardClaxton) commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Sequence histograms displaying both modelled and observed rainfall. The Nimrod radar hourly accumulated rainfall is now coincident with the modelled rainfall. A domain common to both the model and the radar is used to filter data - only data within this common domain contribute to the hourly histogram sequence. The example plot below is just one plot of 48 produced from a 48 hour case study.

image

Below is a histogram plot aggregating the data in the above sequence plots i.e. this is a case study aggregated rainfall histogram over a domain common to both the model and radar.

image

Both these plot are produced by recipe radar_common_domain_histogram.yaml

@BernardClaxton

Copy link
Copy Markdown
Contributor Author

Recipe generic_surface_spatial_plot_sequence_radar_rainfall.yaml produces 2D surface plots of Nimrod radar rainfall and weights fields. These plots are produced only if both NIMROD_RADAR_OBS and Produce Nimrod 2D surface plot buttons are set to true in the Rose GUI Observations/Radar observations tab.

Below is an example of a plot from a sequence of 2D surface plots of Nimrod_2km composite hourly rainfall accumulation. Note the time stamp indicates the end of the period over which the rainfall accumulation has been computed.

image

Below is the corresponding Nimrod weights field. This field reports how many of a possible 13 instantaneous rainfall rates, observed at 5 minute intervals, were used to compute the hourly accumulation. Note that radars have finite range and this plot shows the extent of the Nimrod domain, with areas beyond the range of the radars reporting a weights field of zero.

image

@Sylviabohnenstengel Sylvia Bohnenstengel (Sylviabohnenstengel) added enhancement New feature or request science Scientific capabilities labels Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request science Scientific capabilities

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nimrod regridding and filtering

3 participants