{"id":"climate_normal","summary":"Compute a climatological normal (day-of-year or month-of-year) from a published collection and publish it as a new GeoZarr dataset","description":"Loads a published GeoZarr collection over a reference period and computes a WMO-style climatology — mean per day-of-year (1..366, optionally circular-smoothed) or per month (1..12), selected by `frequency` — then publishes the result as a new GeoZarr dataset with a `dayofyear` or `month` dimension.\n\nUse it to derive normals from a dataset you have already ingested for the reference period — e.g. ingest chirps3_precipitation_daily for 1991-2020, then compute its day-of-year normal. (To compute ERA5-Land day-of-year normals without ingesting 30 years first, use the `era5land_temperature_daily_normal_1991_2020` / `era5land_precipitation_daily_normal_1991_2020` data sources, which read the reference period directly from the Earth Data Hub.)\n\nThe `output_dataset_id` must have a registered data source on the instance: a dataset template in `plugins/rasters/` with `sync: {kind: static}` and a `display` block (colormap/range). No ingestion plugin is required — the data is produced by this workflow.\n\nZarr output cannot be produced synchronously, so run this as a batch job (`POST /jobs`, then `POST /jobs/{id}/results`):\n\n{\n  \"normal\": {\n    \"process_id\": \"climate_normal\",\n    \"arguments\": {\n      \"dataset_id\": \"chirps3_precipitation_daily\",\n      \"output_dataset_id\": \"chirps3_precipitation_daily_normal_1991_2020\",\n      \"variable\": \"precip\",\n      \"temporal_extent\": [\"1991-01-01\", \"2020-12-31\"],\n      \"frequency\": \"dayofyear\",\n      \"smoothing_window\": 31\n    },\n    \"result\": true\n  }\n}","parameters":[{"name":"dataset_id","description":"ID of the published GeoZarr collection to load (as listed under /datasets). Must cover the reference period.","schema":{"type":"string"}},{"name":"output_dataset_id","description":"ID of the normal dataset to publish. Must have a registered data source on the instance (a dataset template with sync: {kind: static} and a display block; no ingestion plugin needed).","schema":{"type":"string"}},{"name":"variable","description":"Variable/band name carried through to the published normal dataset.","schema":{"type":"string"}},{"name":"temporal_extent","description":"Reference period as [start, end] ISO-8601 date strings, e.g. [\"1991-01-01\", \"2020-12-31\"].","schema":{"type":"array","subtype":"temporal-interval"}},{"name":"frequency","description":"Climatology resolution: 'dayofyear' (1..366, default) or 'month' (1..12).","schema":{"type":"string","enum":["dayofyear","month"]},"optional":true,"default":"dayofyear"},{"name":"smoothing_window","description":"Circular rolling-mean window in days (WMO smoothing, day-of-year only). 0 disables. Default 31.","schema":{"type":"integer"},"optional":true,"default":31}],"returns":null,"process_graph":{"load":{"process_id":"load_collection","arguments":{"id":{"from_parameter":"dataset_id"},"temporal_extent":{"from_parameter":"temporal_extent"}}},"normal":{"process_id":"climatological_normal","arguments":{"data":{"from_node":"load"},"frequency":{"from_parameter":"frequency"},"smoothing_window":{"from_parameter":"smoothing_window"}}},"save":{"process_id":"save_result","arguments":{"data":{"from_node":"normal"},"format":"Zarr","options":{"dataset_id":{"from_parameter":"output_dataset_id"},"source_dataset_id":{"from_parameter":"dataset_id"},"variable":{"from_parameter":"variable"},"publish":true}},"result":true}},"links":[]}