# Toolbox component definition
## Harmonizer
This package ensures that all datasets can be easily processed by any tool within the CDS toolbox. The main goal of the harmonizer is to return datasets following a common convention, which is as close as possible to the [Climate and Forecast (CF) Metadata Conventions](http://cfconventions.org/).
The `harmonizer` will use `cf-xarray` under the hood, as many features needed have been already implemented:
1. [`guess_coord_axis`](https://cf-xarray.readthedocs.io/en/latest/generated/xarray.Dataset.cf.guess_coord_axis.html): Automagically guess CF axes and coordinates adding missing attributes without modifying existing metadata.
2. [`add_canonical_attributes`](https://cf-xarray.readthedocs.io/en/latest/generated/xarray.Dataset.cf.add_canonical_attributes.html): Add missing CF attributes to variables with a known standard name. Canonical attributes are inferred from the official CF standard name table.
3. [`rename_like`](https://cf-xarray.readthedocs.io/en/latest/generated/xarray.Dataset.cf.rename_like.html): Rename coordinate variables like a template/standard dataset. Note that this step is only needed if downstream tools do not make use of `cf-xarray`.
4. [`units`](https://cf-xarray.readthedocs.io/en/latest/units.html): Downstream packages might use unit-aware arrays (e.g., [`pint`](https://pint.readthedocs.io/) arrays enabled by [`pint-xarray`](https://github.com/xarray-contrib/pint-xarray)). Importing `cf_xarray.units` makes CF-compliant [UDUNITS](http://cfconventions.org/Data/cf-conventions/cf-conventions-1.8/cf-conventions.html#units) compatible with `pint`.
When variables can not be fully described by CF conventions, the `harmonizer` will define custom criteria that are interpreted by `cf-xarray` (see [Custom Criteria](https://cf-xarray.readthedocs.io/en/latest/custom-criteria.html)).
## Downstream tools
TODO
Possible dependencies:
1. [`cf-xarray`](https://cf-xarray.readthedocs.io/en/latest/): `cf-xarray` uses `xarray`’s plugin interface, or "accessor", to provide extensive functionality on `xarray` objects under the `.cf` namespace. `cf-xarray` allows to write generalized code that works on any CF-compliant dataset.
2. [`pint-xarray`](https://pint-xarray.readthedocs.io/en/latest/): A convenience wrapper for using [`pint`](https://pint.readthedocs.io/en/stable/) with `xarray` objects, allowing to define, operate and manipulate physical quantities (i.e., units).
# Main CDS datasets
* ERA5 surface https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=overview
* ERA5 pressure levels https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-pressure-levels?tab=overview
* ERA5-Land https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-land?tab=overview
* ECV from ERA5 https://cds.climate.copernicus.eu/cdsapp#!/dataset/ecv-for-climate-change?tab=overview
* ORAS5 https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-oras5?tab=overview
* Seasonal forecasts surface https://cds.climate.copernicus.eu/cdsapp#!/dataset/seasonal-original-single-levels?tab=form
* Seasonal forecasts pressure levels https://cds.climate.copernicus.eu/cdsapp#!/dataset/seasonal-original-pressure-levels?tab=overview
* Monthly seasonal forecast https://cds.climate.copernicus.eu/cdsapp#!/dataset/seasonal-monthly-single-levels?tab=form