This section describes the :py~esmvalcore.experimental.recipe_output
submodule of the API (:pyesmvalcore.experimental
).
After running a recipe, output is returned by the :py~esmvalcore.experimental.recipe.Recipe.run
method. Alternatively, it can be retrieved using the :py~esmvalcore.experimental.recipe.Recipe.get_output
method.
>>> recipe_output = recipe.get_output()
recipe_output
is a mapping of the individual tasks and their output filenames (data and image files) with a set of attributes describing the data.
>>> recipe_output
timeseries/script1:
DataFile('tas_amsterdam_CMIP5_CanESM2_Amon_historical_r1i1p1_tas_1850-2000.nc')
DataFile('tas_amsterdam_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000.nc')
DataFile('tas_amsterdam_MultiModelMean_Amon_tas_1850-2000.nc')
DataFile('tas_global_CMIP5_CanESM2_Amon_historical_r1i1p1_tas_1850-2000.nc')
DataFile('tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000.nc')
ImageFile('tas_amsterdam_CMIP5_CanESM2_Amon_historical_r1i1p1_tas_1850-2000.png')
ImageFile('tas_amsterdam_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000.png')
ImageFile('tas_amsterdam_MultiModelMean_Amon_tas_1850-2000.png')
ImageFile('tas_global_CMIP5_CanESM2_Amon_historical_r1i1p1_tas_1850-2000.png')
ImageFile('tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000.png')
map/script1:
DataFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.nc')
DataFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.nc')
ImageFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.png')
ImageFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.png')
Output is grouped by the task that produced them. They can be accessed like a dictionary.
>>> task_output = recipe_output['map/script1']
>>> task_output
map/script1:
DataFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.nc')
DataFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.nc')
ImageFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.png')
ImageFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.png')
The task output has a list of files associated with them, usually image (.png
) or data files (.nc
). To get a list of all files, use :py~esmvalcore.experimental.recipe_output.TaskOutput.files
.
>>> print(task_output.files)
(DataFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.nc'),
..., ImageFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.png'))
It is also possible to select the image (:py~esmvalcore.experimental.recipe_output.TaskOutput.image_files
) files or data files (:py~esmvalcore.experimental.recipe_output.TaskOutput.data_files
) only.
>>> for image_file in task_output.image_files:
>>> print(image_file)
ImageFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.png')
ImageFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.png')
>>> for data_file in task_output.data_files:
>>> print(data_file)
DataFile('CMIP5_CanESM2_Amon_historical_r1i1p1_tas_2000-2000.nc')
DataFile('CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_2000-2000.nc')
Output comes in two kinds, :py~esmvalcore.experimental.recipe_output.DataFile
corresponds to data files in .nc
format and :py~esmvalcore.experimental.recipe_output.ImageFile
corresponds to plots in .png
format (see below). Both object are derived from the same base class (:py~esmvalcore.experimental.recipe_output.OutputFile
) and therefore share most of the functionality.
For example, author information can be accessed as instances of :py~esmvalcore.experimental.recipe_metadata.Contributor
via
>>> output_file = task_output[0]
>>> output_file.authors
(Contributor('Andela, Bouwe', institute='NLeSC, Netherlands', orcid='https://orcid.org/0000-0001-9005-8940'),
Contributor('Righi, Mattia', institute='DLR, Germany', orcid='https://orcid.org/0000-0003-3827-5950'))
And associated references as instances of :py~esmvalcore.experimental.recipe_metadata.Reference
via
>>> output_file.references
(Reference('acknow_project'),)
:py~esmvalcore.experimental.recipe_output.OutputFile
also knows about associated files
>>> data_file.citation_file
Path('.../tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000_citation.bibtex')
>>> data_file.data_citation_file
Path('.../tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000_data_citation_info.txt')
>>> data_file.provenance_svg_file
Path('.../tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000_provenance.svg')
>>> data_file.provenance_xml_file
Path('.../tas_global_CMIP6_BCC-ESM1_Amon_historical_r1i1p1f1_tas_1850-2000_provenance.xml')
Image output uses IPython magic to plot themselves in a notebook environment.
>>> image_file = recipe_output['map/script1'].image_files[0]
>>> image_file
For example:
Using :pyIPython.display
, it is possible to show all image files.
>>> from IPython.display import display
>>>
>>> task = recipe_output['map/script1']
>>> for image_file in task.image_files:
>>> display(image_file)
Data files can be easily loaded using xarray
:
>>> data_file = recipe_output['timeseries/script1'].data_files[0]
>>> data = data_file.load_xarray()
>>> type(data)
xarray.core.dataset.Dataset
Or iris
:
>>> cube = data_file.load_iris()
>>> type(cube)
iris.cube.CubeList
esmvalcore.experimental.recipe_output