|
8 | 8 | "# 01 — REF concepts\n", |
9 | 9 | "\n", |
10 | 10 | "This notebook introduces the core vocabulary of the **Rapid Evaluation Framework (REF)**.\n", |
11 | | - "By the end you will know what a *diagnostic*, *provider*, *execution*, *metric* and *dataset* are,\n", |
12 | | - "and how they fit together.\n", |
| 11 | + "By the end you will know what a *diagnostic*, *provider*, *execution*, *metric* and *dataset* are, and how they fit together.\n", |
13 | 12 | "\n", |
14 | 13 | "**Prerequisites:** none. This is the place to start.\n", |
15 | 14 | "\n", |
16 | | - "**What you need:** an internet connection — we read live examples from the public REF API." |
| 15 | + "**What you need:** an internet connection as we read from the public REF API." |
17 | 16 | ] |
18 | 17 | }, |
19 | 18 | { |
|
23 | 22 | "source": [ |
24 | 23 | "## What is the REF?\n", |
25 | 24 | "\n", |
26 | | - "The REF runs calculations against climate datasets, much like a CI/CD pipeline runs tests\n", |
27 | | - "against code. As new climate model output is published, the REF evaluates it against\n", |
28 | | - "reference data and produces figures and metrics — in near-real time.\n", |
| 25 | + "The REF performs evaluation of climate datasets, much like a CI/CD pipeline runs tests against code. \n", |
| 26 | + "As new climate model output is published, the REF evaluates it against reference data \n", |
| 27 | + "and produces figures and metrics — in near-real time.\n", |
29 | 28 | "\n", |
30 | | - "The public deployment evaluates CMIP7 Assessment Fast Track data. Its results are served\n", |
31 | | - "from a website (<https://climate-ref.org>) and a public API (<https://api.climate-ref.org>).\n", |
| 29 | + "The public deployment currently evaluates CMIP6 dataset, but will include CMIP7 Assessment Fast Track data\n", |
| 30 | + "as they become available.\n", |
| 31 | + "Results are served from a website (<https://dashboard.climate-ref.org>) and a public API (<https://api.climate-ref.org>).\n", |
32 | 32 | "\n", |
33 | | - "Throughout these notebooks we talk to that API. The `ref_tutorials` helper package (shipped\n", |
34 | | - "with this repository) builds the API client for us:" |
| 33 | + "Throughout these notebooks we talk to the API via an \"SDK\".\n", |
| 34 | + "This SDK allows us to make requests to the API without having to directly make HTTP requests.\n", |
| 35 | + "The `ref_tutorials` helper package (shipped with this repository) builds the API client for us." |
35 | 36 | ] |
36 | 37 | }, |
37 | 38 | { |
38 | 39 | "cell_type": "code", |
39 | | - "execution_count": 1, |
| 40 | + "execution_count": 2, |
40 | 41 | "id": "05ac27ad", |
41 | 42 | "metadata": {}, |
42 | 43 | "outputs": [ |
|
46 | 47 | "Client(raise_on_unexpected_status=False, _base_url='https://api.climate-ref.org', _cookies={}, _headers={}, _timeout=None, _verify_ssl=True, _follow_redirects=False, _httpx_args={}, _client=None, _async_client=None)" |
47 | 48 | ] |
48 | 49 | }, |
49 | | - "execution_count": 1, |
| 50 | + "execution_count": 2, |
50 | 51 | "metadata": {}, |
51 | 52 | "output_type": "execute_result" |
52 | 53 | } |
|
65 | 66 | "source": [ |
66 | 67 | "## Diagnostics\n", |
67 | 68 | "\n", |
68 | | - "A **diagnostic** is a single, well-defined evaluation — for example \"the global mean\n", |
69 | | - "surface temperature timeseries\" or \"the Atlantic overturning circulation strength\".\n", |
| 69 | + "A **diagnostic** is a single, well-defined evaluation to understand a component of the earth system.\n", |
| 70 | + "For example \"the global mean surface temperature timeseries\" or \"the Atlantic overturning circulation strength\".\n", |
70 | 71 | "\n", |
71 | 72 | "Let's list the diagnostics the REF currently provides:" |
72 | 73 | ] |
73 | 74 | }, |
74 | 75 | { |
75 | 76 | "cell_type": "code", |
76 | | - "execution_count": 2, |
| 77 | + "execution_count": 3, |
77 | 78 | "id": "8196f36e", |
78 | 79 | "metadata": {}, |
79 | 80 | "outputs": [ |
|
116 | 117 | }, |
117 | 118 | { |
118 | 119 | "cell_type": "code", |
119 | | - "execution_count": 3, |
| 120 | + "execution_count": 4, |
120 | 121 | "id": "3389ca04", |
121 | 122 | "metadata": {}, |
122 | 123 | "outputs": [ |
|
144 | 145 | "source": [ |
145 | 146 | "## Providers\n", |
146 | 147 | "\n", |
147 | | - "Diagnostics are grouped into **providers**. A provider is a package that knows how to\n", |
148 | | - "compute a family of diagnostics — examples include ESMValTool, the PCMDI Metrics Package\n", |
149 | | - "(PMP), and ILAMB. The REF orchestrates providers; it does not compute diagnostics itself.\n", |
| 148 | + "Diagnostics are grouped into **providers**. A **provider** is a package that knows how to compute a family of diagnostics.\n", |
| 149 | + "\n", |
| 150 | + "For the Assessment Fast Track we use:\n", |
| 151 | + "\n", |
| 152 | + "- ESMValTool\n", |
| 153 | + "- PCMDI Metrics Package (PMP)\n", |
| 154 | + "- ILAMB/IOMB\n", |
| 155 | + "\n", |
| 156 | + "The REF orchestrates providers and does not compute diagnostics itself.\n", |
| 157 | + "Each provider is a thin wrapper around the upstream diagnostics package.\n", |
150 | 158 | "\n", |
151 | 159 | "Each diagnostic tells you which provider it belongs to:" |
152 | 160 | ] |
153 | 161 | }, |
154 | 162 | { |
155 | 163 | "cell_type": "code", |
156 | | - "execution_count": 4, |
| 164 | + "execution_count": 5, |
157 | 165 | "id": "45bfc188", |
158 | 166 | "metadata": {}, |
159 | 167 | "outputs": [ |
|
181 | 189 | "source": [ |
182 | 190 | "## Datasets\n", |
183 | 191 | "\n", |
184 | | - "A diagnostic needs **datasets** to run against: the climate model output under evaluation,\n", |
185 | | - "and the reference (often observational) data it is compared to. The REF tracks which\n", |
186 | | - "datasets are available and which combinations a diagnostic requires.\n", |
| 192 | + "A diagnostic needs **datasets** to run against: the climate model output under evaluation, and the reference data it is compared to.\n", |
| 193 | + "The REF tracks which datasets are available and which diagnostics have already been run.\n", |
187 | 194 | "\n", |
188 | | - "For the public API we do not handle raw datasets directly — the evaluations have already\n", |
| 195 | + "For the public API we do not handle raw CMIP6 datasets directly the evaluations have already\n", |
189 | 196 | "been run. We will see locally fetched datasets in notebook 04." |
190 | 197 | ] |
191 | 198 | }, |
|
197 | 204 | "## Executions\n", |
198 | 205 | "\n", |
199 | 206 | "An **execution** is one run of a diagnostic against one specific group of datasets.\n", |
200 | | - "A single diagnostic is typically executed many times — once per model, experiment, or\n", |
201 | | - "scenario — so it has many executions, organised into *execution groups*.\n", |
| 207 | + "\n", |
| 208 | + "A single diagnostic is typically executed many times. This generally depends what is being calculated, but this is often once per model variant.\n", |
| 209 | + "Each of these individual groups is an *execution group*.\n", |
| 210 | + "If any datasets in an execution group change, then a new execution is performed.\n", |
202 | 211 | "\n", |
203 | 212 | "Here are the execution groups of one diagnostic:" |
204 | 213 | ] |
205 | 214 | }, |
206 | 215 | { |
207 | 216 | "cell_type": "code", |
208 | | - "execution_count": 5, |
| 217 | + "execution_count": 6, |
209 | 218 | "id": "e06e64b8", |
210 | 219 | "metadata": {}, |
211 | 220 | "outputs": [ |
|
233 | 242 | "\n", |
234 | 243 | "An execution produces output. That output comes in two main shapes:\n", |
235 | 244 | "\n", |
236 | | - "- **Metric values** — numbers that summarise a property of a model. A *scalar* is a single\n", |
237 | | - " number (e.g. a root-mean-square error); a *series* is a number per index point\n", |
| 245 | + "- **Metric values** — numbers that summarise a property of a model. \n", |
| 246 | + " A *scalar* is a single number (e.g. a root-mean-square error) or a *series* is a number per index point\n", |
238 | 247 | " (e.g. a seasonal cycle).\n", |
239 | 248 | "- **Files** — NetCDF data and figures for deeper analysis or custom plotting.\n", |
240 | 249 | "\n", |
241 | | - "Notebook 02 shows how to retrieve metric values, and notebook 03 turns them into a\n", |
242 | | - "publication-ready figure." |
| 250 | + "The REF ingests all of these outputs into its database so they can be queried by the API.\n", |
| 251 | + "\n", |
| 252 | + "Notebook 02 shows how to retrieve metric values, and notebook 03 turns them into a figure." |
243 | 253 | ] |
244 | 254 | }, |
245 | 255 | { |
|
249 | 259 | "source": [ |
250 | 260 | "## Recap\n", |
251 | 261 | "\n", |
252 | | - "| Term | Meaning |\n", |
253 | | - "|------|---------|\n", |
254 | | - "| **Provider** | A package that computes a family of diagnostics (ESMValTool, PMP, ILAMB, ...) |\n", |
255 | | - "| **Diagnostic** | A single well-defined evaluation |\n", |
256 | | - "| **Dataset** | Climate model output or reference data a diagnostic runs against |\n", |
257 | | - "| **Execution** | One run of a diagnostic against one group of datasets |\n", |
258 | | - "| **Metric value** | A scalar or series result summarising a model |\n", |
| 262 | + "| Term | Meaning |\n", |
| 263 | + "| ------------------- | ----------------------------------------------------------------------------- |\n", |
| 264 | + "| **Provider** | A package that computes a family of diagnostics (ESMValTool, PMP, ILAMB, ...) |\n", |
| 265 | + "| **Diagnostic** | A single well-defined evaluation |\n", |
| 266 | + "| **Dataset** | Climate model output or reference data a diagnostic runs against |\n", |
| 267 | + "| **Execution** | One run of a diagnostic against one group of datasets |\n", |
| 268 | + "| **Metric value** | A scalar or series result summarising a model |\n", |
259 | 269 | "\n", |
260 | 270 | "**Next:** [02 — Querying the REF API](02-querying-the-api.ipynb)." |
261 | 271 | ] |
|
271 | 281 | ], |
272 | 282 | "metadata": { |
273 | 283 | "kernelspec": { |
274 | | - "display_name": "Python 3 (ipykernel)", |
| 284 | + "display_name": "climate-ref-tutorials (3.14.4)", |
275 | 285 | "language": "python", |
276 | 286 | "name": "python3" |
277 | 287 | }, |
|
0 commit comments