diff --git a/.gitignore b/.gitignore index bfc3a361..f33af1c4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ dist/ # Sphinx documentation html build doc/_build/ + +# Jupyter notebook checkpoints +**/.ipynb_checkpoints/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 06fd3682..a08a91f9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,6 +28,7 @@ repos: args: [--pytest-test-first] exclude: ^tests/resources/ - id: pretty-format-json + exclude: ^doc/usage/quickoverview.ipynb - repo: https://github.com/pre-commit/mirrors-isort rev: v5.10.1 hooks: diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 60c9ca11..16dc60ad 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -33,3 +33,6 @@ python: install: - method: pip path: . + +#TODO: add environment variables if we want to build the notebook when building the documentation +# https://docs.readthedocs.io/en/stable/environment-variables.html diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index da0f854a..4328c2a0 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -121,7 +121,7 @@ We use sphinx and read the docs to respectively build and distribute the documen We use: -- autodoc: to create the documentation from the docstrings of the python interface or the comments in the models +- autodoc: to create the documentation from the docstrings of the Python interface or the comments in the models - numpydoc: to convert numpydoc documentation to restructuresText - sphinx-click: to generate the documentation from the click CLI - furo: as a base template diff --git a/conda_environment_sphinx.yaml b/conda_environment_sphinx.yaml index 0abbdb27..e61bed3c 100644 --- a/conda_environment_sphinx.yaml +++ b/conda_environment_sphinx.yaml @@ -1,3 +1,4 @@ +name: conda-environment-sphinx dependencies: - python==3.9.18 - pip @@ -7,3 +8,7 @@ dependencies: - numpydoc==1.8.0 - sphinx-copybutton==0.5.2 - furo==2024.8.6 + - myst_parser==3.0.1 + - notebook==7.1.2 + - ipywidgets==8.1.5 + - matplotlib==3.9.2 diff --git a/doc/command-line-interface.rst b/doc/command-line-interface.rst index 4654ff11..301ff335 100644 --- a/doc/command-line-interface.rst +++ b/doc/command-line-interface.rst @@ -3,6 +3,7 @@ Command line interface =================================================== +.. _cli-intro: .. click:: copernicusmarine.command_line_interface.copernicus_marine:base_command_line_interface :prog: copernicusmarine :nested: short @@ -14,19 +15,19 @@ Command line interface :nested: short :commands: describe - +.. _cli-subset: .. click:: copernicusmarine.command_line_interface.group_subset:subset :prog: subset :nested: short :commands: subset - +.. _cli-get: .. click:: copernicusmarine.command_line_interface.group_get:get :prog: get :nested: short :commands: get - +.. _cli-login: .. click:: copernicusmarine.command_line_interface.group_login:login :prog: login :nested: short diff --git a/doc/conf.py b/doc/conf.py index a2d98c43..f6510af4 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -8,7 +8,7 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = "Copernicus Marine Toolbox" +project = "Copernicus Marine toolbox" copyright = "2024, Mercator Ocean International" author = "Mercator Ocean International" @@ -20,6 +20,7 @@ "sphinx_click", "numpydoc", "sphinx_copybutton", + "myst_nb", ] numpydoc_show_class_members = False @@ -67,3 +68,8 @@ "image/png", "image/jpeg", ] + +# -- Options for myst_nb -------------------------------------------------- +# https://myst-nb.readthedocs.io/en/latest/configuration.html#config-intro + +nb_execution_mode = "off" diff --git a/doc/index.rst b/doc/index.rst index 1ace79c4..a0aca458 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,4 +1,4 @@ -.. Copernicus Marine Toolbox documentation master file, created by +.. Copernicus Marine toolbox documentation master file, created by sphinx-quickstart on Wed Aug 21 14:04:51 2024. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. @@ -6,7 +6,7 @@ Copernicus Marine toolbox documentation ======================================= -The ``copernicusmarine`` Python library offers capabilities through both **Command Line Interface (CLI)** and **Python API**: +The ``copernicusmarine`` Python library offers capabilities through both **command line interface (CLI)** and **Python API**: - **Metadata Information**: List and retrieve metadata information on all variables, datasets and products. - **Subset Datasets**: Subset datasets to extract only the parts of interest, in preferred format, such as Analysis-Ready Cloud-Optimized (ARCO) Zarr or NetCDF file format. diff --git a/doc/installation.rst b/doc/installation.rst index 1ea2965a..4d9b10cc 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -1,8 +1,10 @@ +.. _installation-page: + =================================================== Installing Copernicus Marine toolbox =================================================== -There are several ways to install or use the Copernicus Marine Toolbox: +There are several ways to install or use the Copernicus Marine toolbox: * via pip (see `PyPI repository `_) * via mamba | conda (see `conda-forge channel `_) diff --git a/doc/usage/describe-usage.rst b/doc/usage/describe-usage.rst index 7e10f149..06a03d34 100644 --- a/doc/usage/describe-usage.rst +++ b/doc/usage/describe-usage.rst @@ -1,3 +1,6 @@ +.. _describe-page: + +===================== Command ``describe`` ===================== diff --git a/doc/usage/get-usage.rst b/doc/usage/get-usage.rst index 826159e3..3575490f 100644 --- a/doc/usage/get-usage.rst +++ b/doc/usage/get-usage.rst @@ -1,3 +1,6 @@ +.. _get-page: + +=============== Command ``get`` =============== diff --git a/doc/usage/login-usage.rst b/doc/usage/login-usage.rst index b006b89c..25a6558c 100644 --- a/doc/usage/login-usage.rst +++ b/doc/usage/login-usage.rst @@ -1,3 +1,6 @@ +.. _login-page: + +================== Command ``login`` ================== diff --git a/doc/usage/network-configuration.rst b/doc/usage/network-configuration.rst index 54aebbbf..5c3cebc1 100644 --- a/doc/usage/network-configuration.rst +++ b/doc/usage/network-configuration.rst @@ -15,7 +15,7 @@ to globally disable the usage of SSL in the toolbox: ``trust_env`` for Python libraries ------------------------------------ -To do HTTP calls, the Copernicus Marine Toolbox uses the ``requests`` library. +To do HTTP calls, the Copernicus Marine toolbox uses the ``requests`` library. By default, this library will have ``trust_env`` values set to ``True``. If you want to deactivate this, you can set ``COPERNICUSMARINE_TRUST_ENV=False`` (default ``True``). diff --git a/doc/usage/quickoverview.ipynb b/doc/usage/quickoverview.ipynb new file mode 100644 index 00000000..bffd4dcb --- /dev/null +++ b/doc/usage/quickoverview.ipynb @@ -0,0 +1,1856 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quick Overview\n", + "\n", + "Most of the code presented here is for the Python interface. Transposing the examples to bash should be quite straighforward since commands, options and functionalities should be almost identical between the command line interface and the Python interface. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Introduction\n", + "The Copernicus Marine toolbox is a tool developed to connect users with marine data available at the [Copernicus Marine Data Store](https://data.marine.copernicus.eu/products). There, you can find products with relevant data for users.\n", + "\n", + "One way to access this data is through the more visual tool [My Ocean Pro](https://data.marine.copernicus.eu/viewer/expert).\n", + "\n", + "The Copernicus Marine toolbox allows access to this data programmatically and in an automated way, facilitating the download and distribution:\n", + "- [GitHub](https://github.com/mercator-ocean/copernicus-marine-toolbox)\n", + "- [Documentation](https://toolbox-docs.marine.copernicus.eu/)\n", + "- [Help Center](https://help.marine.copernicus.eu/en/)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main functions are:\n", + "- **Login**: for authentication\n", + "- **Describe**: to get metadata from the Data Store\n", + "- **Get**: to download the native data\n", + "- **Subset**: to download specific (spatiotemporal) regions of interest\n", + "\n", + "These four commands are available from the terminal (command line interface) and/or from a Python API (from scripts to notebooks!)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Installation\n", + "\n", + "There are different ways to use the Copernicus Marine toolbox, using the **`pip`** command, **`mamba | conda`**, the docker image or the binaries. You can see more information in the [installation page](installation-page) of the documentation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Check the Installation\n", + "To verify that it has been installed correctly, we can import the package from Python (or from the CLI) and see if it works properly." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'1.3.3'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import copernicusmarine\n", + "copernicusmarine.__version__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the package is installed, we can start to explore everything the toolbox has to offer." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Copernicus Marine toolbox - Login\n", + "\n", + "To register, you can obtain credentials for free by creating an account at [Copernicus Marine website](https://data.marine.copernicus.eu/register?redirect=%2Fproducts).\n", + "\n", + "For more information, see the [page about login](login-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-login) or the {func}`Python interface `." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the ways to **save the credentials** (and then use the rest of the functionalities without having to think about it anymore) is with the `login` function. Indeed your credentials will be encoded and saved at `~/.copernicusmarine/.copernicusmarine-credentials`. You can change the folder using the `configuration_file_directory` argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "copernicusmarine.login(username='', password='')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also set environment variables for your processes, they are gonna be read by the `copernicusmarine.get` and `copernicusmarine.subset` automatically." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# for Jupyter Notebook\n", + "%env COPERNICUSMARINE_SERVICE_USERNAME=\n", + "%env COPERNICUSMARINE_SERVICE_PASSWORD=\n", + "\n", + "# for Python script\n", + "import os\n", + "os.environ['COPERNICUSMARINE_SERVICE_USERNAME'] = ''\n", + "os.environ['COPERNICUSMARINE_SERVICE_PASSWORD'] = ''\n", + "\n", + "# for cli\n", + "!export COPERNICUSMARINE_SERVICE_USERNAME=\n", + "!export COPERNICUSMARINE_SERVICE_PASSWORD=" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Copernicus Marine toolbox - Describe\n", + "\n", + "To explore the catalogue of products and datasets available in Copernicus Marine service.\n", + "\n", + "For more information, see the [page about describe](describe-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-describe) or the {func}`Python interface `." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Fetching catalog: 100%|██████████| 2/2 [00:11<00:00, 5.85s/it]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'title': 'Antarctic Sea Ice Extent from Reanalysis',\n", + " 'product_id': 'ANTARCTIC_OMI_SI_extent',\n", + " 'thumbnail_url': 'https://catalogue.marine.copernicus.eu/documents/IMG/ANTARCTIC_OMI_SI_extent.png',\n", + " 'digital_object_identifier': '10.48670/moi-00186',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': None,\n", + " 'production_center': 'Mercator Océan International'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# by default, we only get information about the products\n", + "catalogue_products = copernicusmarine.describe()\n", + "catalogue_products[\"products\"][0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# We can get information about the datasets\n", + "catalogue_datasets = copernicusmarine.describe(include_datasets=True)\n", + "# catalogue_datasets[\"products\"][0][\"datasets\"][0] not shown because it is too long" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Fetching catalog: 100%|██████████| 2/2 [00:12<00:00, 6.34s/it]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'products': [{'title': 'Atlantic-Iberian Biscay Irish- Ocean Biogeochemical Analysis and Forecast',\n", + " 'product_id': 'IBI_ANALYSISFORECAST_BGC_005_004',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_ANALYSISFORECAST_BGC_005_004.jpg',\n", + " 'description': 'The IBI-MFC provides a high-resolution biogeochemical analysis and forecast product covering the European waters, and more specifically the Iberia–Biscay–Ireland (IBI) area. The last 2 years before now (historic best estimates) as well as daily averaged forecasts with a horizon of 10 days (updated on a weekly basis) are available on the catalogue.\\nTo this aim, an online coupled physical-biogeochemical operational system is based on NEMO-PISCES at 1/36° and adapted to the IBI area, being Mercator-Ocean in charge of the model code development. PISCES is a model of intermediate complexity, with 24 prognostic variables. It simulates marine biological productivity of the lower trophic levels and describes the biogeochemical cycles of carbon and of the main nutrients (P, N, Si, Fe).\\nThe product provides daily and monthly averages of the main biogeochemical variables: chlorophyll, oxygen, nitrate, phosphate, silicate, iron, ammonium, net primary production, euphotic zone depth, phytoplankton carbon, pH, dissolved inorganic carbon, surface partial pressure of carbon dioxide, and zooplankton.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00026\\n\\n**References:**\\n\\n* Gutknecht, E. and Reffray, G. and Mignot, A. and Dabrowski, T. and Sotillo, M. G. Modelling the marine ecosystem of Iberia-Biscay-Ireland (IBI) European waters for CMEMS operational applications. Ocean Sci., 15, 1489–1516, 2019. https://doi.org/10.5194/os-15-1489-2019\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00026',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic-Iberian Biscay Irish- Ocean Physics Analysis and Forecast',\n", + " 'product_id': 'IBI_ANALYSISFORECAST_PHY_005_001',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_ANALYSISFORECAST_PHY_005_001.jpg',\n", + " 'description': 'The IBI-MFC provides a high-resolution ocean analysis and forecast product (daily run by Nologin with the support of CESGA in terms of supercomputing resources), covering the European waters, and more specifically the Iberia–Biscay–Ireland (IBI) area. The last 2 years before now (historic best estimates) as well as forecasts of different temporal resolutions with a horizon of 5 days (updated on a daily basis) are available on the catalogue.\\nThe system is based on a eddy-resolving NEMO model application at 1/36º horizontal resolution, being Mercator-Ocean in charge of the model code development. The hydrodynamic forecast includes high frequency processes of paramount importance to characterize regional scale marine processes: tidal forcing, surges and high frequency atmospheric forcing, fresh water river discharge, wave forcing in forecast, etc. A weekly update of IBI downscaled analysis is also delivered as historic IBI best estimates.\\nThe product offers 3D daily and monthly ocean fields, as well as hourly mean and 15-minute instantaneous values for some surface variables. Daily and monthly averages of 3D Temperature, 3D Salinity, 3D Zonal and Meridional Velocity components, Mix Layer Depth, Sea Bottom Temperature and Sea Surface Height are provided. Additionally, hourly means of surface fields for variables such as Sea Surface Height, Mix Layer Depth, Surface Temperature and Currents, together with Barotropic Velocities are delivered. Finally, 15-minute instantaneous values of Sea Surface Height and Currents are also given.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00027\\n\\n**References:**\\n\\n* Sotillo, M.G.; Campuzano, F.; Guihou, K.; Lorente, P.; Olmedo, E.; Matulka, A.; Santos, F.; Amo-Baladrón, M.A.; Novellino, A. River Freshwater Contribution in Operational Ocean Models along the European Atlantic Façade: Impact of a New River Discharge Forcing Data on the CMEMS IBI Regional Model Solution. J. Mar. Sci. Eng. 2021, 9, 401. https://doi.org/10.3390/jmse9040401\\n* Mason, E. and Ruiz, S. and Bourdalle-Badie, R. and Reffray, G. and García-Sotillo, M. and Pascual, A. New insight into 3-D mesoscale eddy properties from CMEMS operational models in the western Mediterranean. Ocean Sci., 15, 1111–1131, 2019. https://doi.org/10.5194/os-15-1111-2019\\n* Lorente, P. and García-Sotillo, M. and Amo-Baladrón, A. and Aznar, R. and Levier, B. and Sánchez-Garrido, J. C. and Sammartino, S. and de Pascual-Collar, Á. and Reffray, G. and Toledano, C. and Álvarez-Fanjul, E. Skill assessment of global, regional, and coastal circulation forecast models: evaluating the benefits of dynamical downscaling in IBI (Iberia-Biscay-Ireland) surface waters. Ocean Sci., 15, 967–996, 2019. https://doi.org/10.5194/os-15-967-2019\\n* Aznar, R., Sotillo, M. G., Cailleau, S., Lorente, P., Levier, B., Amo-Baladrón, A., Reffray, G., and Alvarez Fanjul, E. Strengths and weaknesses of the CMEMS forecasted and reanalyzed solutions for the Iberia-Biscay-Ireland (IBI) waters. J. Mar. Syst., 159, 1–14, https://doi.org/10.1016/j.jmarsys.2016.02.007, 2016\\n* Sotillo, M. G., Cailleau, S., Lorente, P., Levier, B., Reffray, G., Amo-Baladrón, A., Benkiran, M., and Alvarez Fanjul, E.: The MyOcean IBI Ocean Forecast and Reanalysis Systems: operational products and roadmap to the future Copernicus Service, J. Oper. Oceanogr., 8, 63–79, https://doi.org/10.1080/1755876X.2015.1014663, 2015.\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00027',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic-Iberian Biscay Irish- Ocean Wave Analysis and Forecast',\n", + " 'product_id': 'IBI_ANALYSISFORECAST_WAV_005_005',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_ANALYSISFORECAST_WAV_005_005.jpg',\n", + " 'description': 'The IBI-MFC provides a high-resolution wave analysis and forecast product (run twice a day by Nologin with the support of CESGA in terms of supercomputing resources), covering the European waters, and more specifically the Iberia–Biscay–Ireland (IBI) area. The last 2 years before now (historic best estimates), as well as hourly instantaneous forecasts with a horizon of up to 10 days (updated on a daily basis) are available on the catalogue.\\nThe IBI wave model system is based on the MFWAM model and runs on a grid of 5 km of horizontal resolution forced with the ECMWF hourly wind data. The system assimilates significant wave height (SWH) altimeter data and CFOSAT wave spectral data (supplied by Météo-France), and it is forced by currents provided by the IBI ocean circulation system. \\nThe product offers hourly instantaneous fields of different wave parameters, including Wave Height, Period and Direction for total spectrum; fields of Wind Wave (or wind sea), Primary Swell Wave and Secondary Swell for partitioned wave spectra; and the highest wave variables, such as maximum crest height and maximum crest-to-trough height. Additionally, the IBI wave system is set up to provide internally some key parameters adequate to be used as forcing in the IBI NEMO ocean model forecast run.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00025\\n\\n**References:**\\n\\n* Toledano, C.; Ghantous, M.; Lorente, P.; Dalphinet, A.; Aouf, L.; Sotillo, M.G. Impacts of an Altimetric Wave Data Assimilation Scheme and Currents-Wave Coupling in an Operational Wave System: The New Copernicus Marine IBI Wave Forecast Service. J. Mar. Sci. Eng. 2022, 10, 457. https://doi.org/10.3390/jmse10040457\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00025',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic-Iberian Biscay Irish- Ocean BioGeoChemistry NON ASSIMILATIVE Hindcast',\n", + " 'product_id': 'IBI_MULTIYEAR_BGC_005_003',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_MULTIYEAR_BGC_005_003.jpg',\n", + " 'description': 'The IBI-MFC provides a biogeochemical reanalysis product for the Iberia-Biscay-Ireland (IBI) area starting in 01/01/1993 and being regularly updated on a yearly basis. The model system is run by Mercator-Ocean, being the product post-processed to the user’s format by Nologin with the support of CESGA in terms of supercomputing resources.\\nTo this aim, an application of the biogeochemical model PISCES is run simultaneously with the ocean physical IBI reanalysis, generating both products at the same 1/12° horizontal resolution. The PISCES model is able to simulate the first levels of the marine food web, from nutrients up to mesozooplankton and it has 24 state variables.\\nThe product provides daily, monthly and yearly averages of the main biogeochemical variables: chlorophyll, oxygen, nitrate, phosphate, silicate, iron, ammonium, net primary production, euphotic zone depth, phytoplankton carbon, pH, dissolved inorganic carbon and surface partial pressure of carbon dioxide. Additionally, climatological parameters (monthly mean and standard deviation) of these variables for the period 1993-2016 are delivered.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00028\\n\\n**References:**\\n\\n* Aznar, R., Sotillo, M. G., Cailleau, S., Lorente, P., Levier, B., Amo-Baladrón, A., Reffray, G., and Alvarez Fanjul, E. Strengths and weaknesses of the CMEMS forecasted and reanalyzed solutions for the Iberia-Biscay-Ireland (IBI) waters. J. Mar. Syst., 159, 1–14, https://doi.org/10.1016/j.jmarsys.2016.02.007, 2016\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00028',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic-Iberian Biscay Irish- Ocean Physics Reanalysis',\n", + " 'product_id': 'IBI_MULTIYEAR_PHY_005_002',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_MULTIYEAR_PHY_005_002.jpg',\n", + " 'description': 'The IBI-MFC provides a ocean physical reanalysis product for the Iberia-Biscay-Ireland (IBI) area starting in 01/01/1993 and being regularly updated on a yearly basis. The model system is run by Mercator-Ocean, being the product post-processed to the user’s format by Nologin with the support of CESGA in terms of supercomputing resources. \\nThe IBI model numerical core is based on the NEMO v3.6 ocean general circulation model run at 1/12° horizontal resolution. Altimeter data, in situ temperature and salinity vertical profiles and satellite sea surface temperature are assimilated.\\nThe product offers 3D daily, monthly and yearly ocean fields, as well as hourly mean fields for surface variables. Daily, monthly and yearly averages of 3D Temperature, 3D Salinity, 3D Zonal and Meridional Velocity components, Mix Layer Depth, Sea Bottom Temperature and Sea Surface Height are provided. Additionally, hourly means of surface fields for variables such as Sea Surface Height, Mix Layer Depth, Surface Temperature and Currents, together with Barotropic Velocities are distributed. Additionally, climatological parameters (monthly mean and standard deviation) of these variables for the period 1993-2016 are delivered.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00029',\n", + " 'digital_object_identifier': '10.48670/moi-00029',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic -Iberian Biscay Irish- Ocean Wave Reanalysis',\n", + " 'product_id': 'IBI_MULTIYEAR_WAV_005_006',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/IBI_MULTIYEAR_WAV_005_006.jpg',\n", + " 'description': 'The IBI-MFC provides a high-resolution wave reanalysis product for the Iberia-Biscay-Ireland (IBI) area starting in 01/01/1993 and being regularly extended on a yearly basis. The model system is run by Nologin with the support of CESGA in terms of supercomputing resources. \\nThe Multi-Year model configuration is based on the MFWAM model developed by Météo-France (MF), covering the same region as the IBI-MFC Near Real Time (NRT) analysis and forecasting product, but with an enhanced horizontal resolution (1/36º instead of 1/20º). The system assimilates significant wave height (SWH) altimeter data and wave spectral data (Envisat and CFOSAT), supplied by MF. Both, the MY and the NRT products, are fed by ECMWF hourly winds. Specifically, the MY system is forced by the ERA5 reanalysis wind data. As boundary conditions, the NRT system uses the 2D wave spectra from the Copernicus Marine GLOBAL forecast system, whereas the MY system is nested to the GLOBAL reanalysis.\\nThe product offers hourly instantaneous fields of different wave parameters, including Wave Height, Period and Direction for total spectrum; fields of Wind Wave (or wind sea), Primary Swell Wave and Secondary Swell for partitioned wave spectra; and the highest wave variables, such as maximum crest height and maximum crest-to-trough height. Additionally, climatological parameters of significant wave height (VHM0) and zero -crossing wave period (VTM02) are delivered for the time interval 1993-2016.\\n\\n**Product Citation**: \\nPlease refer to our Technical FAQ for citing [products.](http://marine.copernicus.eu/faq/cite-cmems-products-cmems-credit/?idpage=169)\\n\\n**DOI (Product)**: \\nhttps://doi.org/10.48670/moi-00030',\n", + " 'digital_object_identifier': '10.48670/moi-00030',\n", + " 'sources': ['Numerical models'],\n", + " 'processing_level': 'Level 4',\n", + " 'production_center': 'NOLOGIN'},\n", + " {'title': 'Atlantic Iberian Biscay Irish Ocean- In-Situ Near Real Time Observations',\n", + " 'product_id': 'INSITU_IBI_PHYBGCWAV_DISCRETE_MYNRT_013_033',\n", + " 'thumbnail_url': 'https://mdl-metadata.s3.waw3-1.cloudferro.com/metadata/thumbnails/INSITU_IBI_PHYBGCWAV_DISCRETE_MYNRT_013_033.jpg',\n", + " 'description': 'IBI Seas - near real-time (NRT) in situ quality controlled observations, hourly updated and distributed by INSTAC within 24-48 hours from acquisition in average\\n\\n**DOI (product):** \\nhttps://doi.org/10.48670/moi-00043',\n", + " 'digital_object_identifier': '10.48670/moi-00043',\n", + " 'sources': ['In-situ observations'],\n", + " 'processing_level': 'Level 2',\n", + " 'production_center': 'Puertos del Estado (Spain)'},\n", + " {'title': 'Atlantic Iberian Biscay Mean Sea Level time series and trend from Observations Reprocessing',\n", + " 'product_id': 'OMI_CLIMATE_SL_IBI_area_averaged_anomalies',\n", + " 'thumbnail_url': 'https://catalogue.marine.copernicus.eu/documents/IMG/OMI_CLIMATE_SL_IBI_area_averaged_anomalies.png',\n", + " 'description': '**DEFINITION**\\n\\nThe ocean monitoring indicator on regional mean sea level is derived from the DUACS delayed-time (DT-2021 version, “my” (multi-year) dataset used when available, “myint” (multi-year interim) used after) sea level anomaly maps from satellite altimetry based on a stable number of altimeters (two) in the satellite constellation. These products are distributed by the Copernicus Climate Change Service and the Copernicus Marine Service (SEALEVEL_GLO_PHY_CLIMATE_L4_MY_008_057).\\nThe time series of area averaged anomalies correspond to the area average of the maps in the Irish-Biscay-Iberian (IBI) Sea weighted by the cosine of the latitude (to consider the changing area in each grid with latitude) and by the proportion of ocean in each grid (to consider the coastal areas). The time series are corrected from global TOPEX-A instrumental drift (WCRP Global Sea Level Budget Group, 2018) and regional mean GIA correction (weighted GIA mean of a 27 ensemble model following Spada et Melini, 2019). The time series are adjusted for seasonal annual and semi-annual signals and low-pass filtered at 6 months. Then, the trends/accelerations are estimated on the time series using ordinary least square fit.The trend uncertainty is provided in a 90% confidence interval. It is calculated as the weighted mean uncertainties in the region from Prandi et al., 2021. This estimate only considers errors related to the altimeter observation system (i.e., orbit determination errors, geophysical correction errors and inter-mission bias correction errors). The presence of the interannual signal can strongly influence the trend estimation considering to the altimeter period considered (Wang et al., 2021; Cazenave et al., 2014). The uncertainty linked to this effect is not considered.\\n\\n**CONTEXT **\\n\\nChange in mean sea level is an essential indicator of our evolving climate, as it reflects both the thermal expansion of the ocean in response to its warming and the increase in ocean mass due to the melting of ice sheets and glaciers (WCRP Global Sea Level Budget Group, 2018). At regional scale, sea level does not change homogenously. It is influenced by various other processes, with different spatial and temporal scales, such as local ocean dynamic, atmospheric forcing, Earth gravity and vertical land motion changes (IPCC WGI, 2021). The adverse effects of floods, storms and tropical cyclones, and the resulting losses and damage, have increased as a result of rising sea levels, increasing people and infrastructure vulnerability and food security risks, particularly in low-lying areas and island states (IPCC, 2022a). Adaptation and mitigation measures such as the restoration of mangroves and coastal wetlands, reduce the risks from sea level rise (IPCC, 2022b). \\nIn IBI region, the RMSL trend is modulated by decadal variations. As observed over the global ocean, the main actors of the long-term RMSL trend are associated with anthropogenic global/regional warming. Decadal variability is mainly linked to the strengthening or weakening of the Atlantic Meridional Overturning Circulation (AMOC) (e.g. Chafik et al., 2019). The latest is driven by the North Atlantic Oscillation (NAO) for decadal (20-30y) timescales (e.g. Delworth and Zeng, 2016). Along the European coast, the NAO also influences the along-slope winds dynamic which in return significantly contributes to the local sea level variability observed (Chafik et al., 2019).\\n\\n**KEY FINDINGS**\\n\\nOver the [1993/01/01, 2023/07/06] period, the area-averaged sea level in the IBI area rises at a rate of 4.00 \\uf0b1 0.80 mm/year with an acceleration of 0.14 \\uf0b1\\uf0200.06 mm/year2. This trend estimation is based on the altimeter measurements corrected from the Topex-A drift at the beginning of the time series (Legeais et al., 2020) and global GIA correction (Spada et Melini, 2019) to consider the ongoing movement of land. \\n\\n**DOI (product):** \\nhttps://doi.org/10.48670/moi-00252\\n\\n**References:**\\n\\n* Cazenave, A., Dieng, H.-B., Meyssignac, B., von Schuckmann, K., Decharme, B., and Berthier, E.: The rate of sea-level rise, Nat. Clim. Change, 4, 358–361, https://doi.org/10.1038/nclimate2159, 2014.\\n* Chafik, L., Nilsen, J. E. Ø., Dangendorf, S., Reverdin, G., and Frederikse, T.: North Atlantic Ocean Circulation and Decadal Sea Level Change During the Altimetry Era, Sci. Rep., 9, 1041, https://doi.org/10.1038/s41598-018-37603-6, 2019.\\n* Delworth, T. L. and Zeng, F.: The Impact of the North Atlantic Oscillation on Climate through Its Influence on the Atlantic Meridional Overturning Circulation, J. Clim., 29, 941–962, https://doi.org/10.1175/JCLI-D-15-0396.1, 2016.\\n* Horwath, M., Gutknecht, B. D., Cazenave, A., Palanisamy, H. K., Marti, F., Marzeion, B., Paul, F., Le Bris, R., Hogg, A. E., Otosaka, I., Shepherd, A., Döll, P., Cáceres, D., Müller Schmied, H., Johannessen, J. A., Nilsen, J. E. Ø., Raj, R. P., Forsberg, R., Sandberg Sørensen, L., Barletta, V. R., Simonsen, S. B., Knudsen, P., Andersen, O. B., Ranndal, H., Rose, S. K., Merchant, C. J., Macintosh, C. R., von Schuckmann, K., Novotny, K., Groh, A., Restano, M., and Benveniste, J.: Global sea-level budget and ocean-mass budget, with a focus on advanced data products and uncertainty characterisation, Earth Syst. Sci. Data, 14, 411–447, https://doi.org/10.5194/essd-14-411-2022, 2022.\\n* IPCC: AR6 Synthesis Report: Climate Change 2022, 2022a.\\n* IPCC: Summary for Policymakers [H.-O. Pörtner, D.C. Roberts, E.S. Poloczanska, K. Mintenbeck, M. Tignor, A. Alegría, M. Craig, S. Langsdorf, S. Löschke, V. Möller, A. Okem (eds.)]. In: Climate Change 2022: Impacts, Adaptation, and Vulnerability. Contribution of Working Group II to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Pörtner, D.C. Roberts, M. Tignor, E.S. Poloczanska, K. Mintenbeck, A. Alegría, M. Craig, S. Langsdorf, S. Löschke, V. Möller, A. Okem, B. Rama (eds.)], 2022b.\\n* IPCC: Summary for Policymakers. In: Climate Change 2022: Mitigation of Climate Change. Contribution of Working Group III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, R. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, A. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)], , https://doi.org/10.1017/9781009157926.001, 2022c.\\n* IPCC WGI: Climate Change 2021: The Physical Science Basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change, 2021.\\n* IPCC WGII: Climate Change 2021: Impacts, Adaptation and Vulnerability; Summary for Policemakers. Contribution of Working Group II to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change, 2021.\\n* Legeais, J. F., Llowel, W., Melet, A., and Meyssignac, B.: Evidence of the TOPEX-A altimeter instrumental anomaly and acceleration of the global mean sea level, Copernic. Mar. Serv. Ocean State Rep. Issue 4, 13, s77–s82, https://doi.org/10.1080/1755876X.2021.1946240, 2020.\\n* Peltier, W. R.: GLOBAL GLACIAL ISOSTASY AND THE SURFACE OF THE ICE-AGE EARTH: The ICE-5G (VM2) Model and GRACE, Annu. Rev. Earth Planet. Sci., 32, 111–149, https://doi.org/10.1146/annurev.earth.32.082503.144359, 2004.\\n* Prandi, P., Meyssignac, B., Ablain, M., Spada, G., Ribes, A., and Benveniste, J.: Local sea level trends, accelerations and uncertainties over 1993–2019, Sci. Data, 8, 1, https://doi.org/10.1038/s41597-020-00786-7, 2021.\\n* Wang, J., Church, J. A., Zhang, X., and Chen, X.: Reconciling global mean and regional sea level change in projections and observations, Nat. Commun., 12, 990, https://doi.org/10.1038/s41467-021-21265-6, 2021.\\n* WCRP Global Sea Level Budget Group: Global sea-level budget 1993–present, Earth Syst. Sci. Data, 10, 1551–1590, https://doi.org/10.5194/essd-10-1551-2018, 2018.\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00252',\n", + " 'sources': ['Satellite observations'],\n", + " 'processing_level': None,\n", + " 'production_center': 'CLS (France)'},\n", + " {'title': 'Iberia Biscay Ireland sea level extreme variability mean and anomaly (observations)',\n", + " 'product_id': 'OMI_EXTREME_SL_IBI_slev_mean_and_anomaly_obs',\n", + " 'thumbnail_url': 'https://catalogue.marine.copernicus.eu/documents/IMG/OMI_EXTREME_SL_IBI_slev_mean_and_anomaly_obs.png',\n", + " 'description': '**DEFINITION**\\n\\nThe OMI_EXTREME_SL_IBI_slev_mean_and_anomaly_obs indicator is based on the computation of the 99th and the 1st percentiles from in situ data (observations). It is computed for the variable sea level measured by tide gauges along the coast. The use of percentiles instead of annual maximum and minimum values, makes this extremes study less affected by individual data measurement errors. The annual percentiles referred to annual mean sea level are temporally averaged and their spatial evolution is displayed in the dataset ibi_omi_sl_extreme_var_slev_mean_and_anomaly_obs, jointly with the anomaly in the target year. This study of extreme variability was first applied to sea level variable (Pérez Gómez et al 2016) and then extended to other essential variables, sea surface temperature and significant wave height (Pérez Gómez et al 2018).\\n\\n**CONTEXT**\\nSea level (SLEV) is one of the Essential Ocean Variables most affected by climate change. Global mean sea level rise has accelerated since the 1990’s (Abram et al., 2019, Legeais et al., 2020), due to the increase of ocean temperature and mass volume caused by land ice melting (WCRP, 2018). Basin scale oceanographic and meteorological features lead to regional variations of this trend that combined with changes in the frequency and intensity of storms could also rise extreme sea levels up to one metre by the end of the century (Vousdoukas et al., 2020). This will significantly increase coastal vulnerability to storms, with important consequences on the extent of flooding events, coastal erosion and damage to infrastructures caused by waves.\\nThe Iberian Biscay Ireland region shows positive sea level trend modulated by decadal-to-multidecadal variations driven by ocean dynamics and superposed to the long-term trend (Chafik et al., 2019).\\n\\n** KEY FINDINGS**\\nThe completeness index criteria is fulfilled by 55 stations in 2021, three more than those available in 2020 (52), recently added to the multi-year product INSITU_GLO_PHY_SSH_DISCRETE_MY_013_053. The mean 99th percentiles reflect the great tide spatial variability around the UK and the north of France. Minimum values are observed in the Irish coast (e.g.: 0.66 m above mean sea level in Arklow Harbour), South of England (e.g.: 0.70 m above mean sea level in Bournemouth), and the Canary Islands (e.g.: 0.96 m above mean sea level in Hierro). Maximum values are observed in the Bristol and English Channels (e.g.: 6.26 m and 5.17 m above mean sea level in Newport and St. Helier, respectively). The standard deviation reflects the south-north increase of storminess, ranging between 2 cm in the Canary Islands to 12 cm in Newport (Bristol Channel). Negative or close to zero anomalies of 2021 99th percentile are observed this year for most of the stations in the region, reaching up to -17.8 cm in Newport, or -15 cm in St.Helier (Jersey Island, Channel Islands).\\n\\n**DOI (product):** \\nhttps://doi.org/10.48670/moi-00253\\n\\n**References:**\\n\\n* Abram, N., Gattuso, J.-P., Prakash, A., Cheng, L., Chidichimo, M. P., Crate, S., Enomoto, H., Garschagen, M., Gruber, N., Harper, S., Holland, E., Kudela, R. M., Rice, J., Steffen, K., & von Schuckmann, K. (2019). Framing and Context of the Report. In H. O. Pörtner, D. C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, E. Poloczanska, K. Mintenbeck, A. Alegría, M. Nicolai, A. Okem, J. Petzold, B. Rama, & N. M. Weyer (Eds.), IPCC Special Report on the Ocean and Cryosphere in a Changing Climate (pp. 73–129). in press. https://www.ipcc.ch/srocc/\\n* Legeais J-F, W. Llowel, A. Melet and B. Meyssignac: Evidence of the TOPEX-A Altimeter Instrumental Anomaly and Acceleration of the Global Mean Sea Level, in Copernicus Marine Service Ocean State Report, Issue 4, Journal of Operational Oceanography, 2020, accepted.\\n* Pérez-Gómez B, Álvarez-Fanjul E, She J, Pérez-González I, Manzano F. 2016. Extreme sea level events, Section 4.4, p:300. In: Von Schuckmann K, Le Traon PY, Alvarez-Fanjul E, Axell L, Balmaseda M, Breivik LA, Brewin RJW, Bricaud C, Drevillon M, Drillet Y, Dubois C , Embury O, Etienne H, García-Sotillo M, Garric G, Gasparin F, Gutknecht E, Guinehut S, Hernandez F, Juza M, Karlson B, Korres G, Legeais JF, Levier B, Lien VS, Morrow R, Notarstefano G, Parent L, Pascual A, Pérez-Gómez B, Perruche C, Pinardi N, Pisano A, Poulain PM , Pujol IM, Raj RP, Raudsepp U, Roquet H, Samuelsen A, Sathyendranath S, She J, Simoncelli S, Solidoro C, Tinker J, Tintoré J, Viktorsson L, Ablain M, Almroth-Rosell E, Bonaduce A, Clementi E, Cossarini G, Dagneaux Q, Desportes C, Dye S, Fratianni C, Good S, Greiner E, Gourrion J, Hamon M, Holt J, Hyder P, Kennedy J, Manzano-Muñoz F, Melet A, Meyssignac B, Mulet S, Nardelli BB, O’Dea E, Olason E, Paulmier A, Pérez-González I, Reid R, Racault MF, Raitsos DE, Ramos A, Sykes P, Szekely T, Verbrugge N. 2016. The Copernicus Marine Environment Monitoring Service Ocean State Report, Journal of Operational Oceanography. 9 (sup2): 235-320. http://dx.doi.org/10.1080/1755876X.2016.1273446\\n* Pérez Gómez B, De Alfonso M, Zacharioudaki A, Pérez González I, Álvarez Fanjul E, Müller M, Marcos M, Manzano F, Korres G, Ravdas M, Tamm S. 2018. Sea level, SST and waves: extremes variability. In: Copernicus Marine Service Ocean State Report, Issue 2, Journal of Operational Oceanography, 11:sup1, Chap. 3.1, s79–s88, DOI: https://doi.org/10.1080/1755876X.2018.1489208.\\n* WCRP Global Sea Level Budget Group: Global sea-level budget 1993–present. 2018. Earth Syst. Sci. Data, 10, 1551-1590, https://doi.org/10.5194/essd-10-1551-2018.\\n* Vousdoukas MI, Mentaschi L, Hinkel J, et al. 2020. Economic motivation for raising coastal flood defenses in Europe. Nat Commun 11, 2119 (2020). https://doi.org/10.1038/s41467-020-15665-3.\\n',\n", + " 'digital_object_identifier': '10.48670/moi-00253',\n", + " 'sources': ['In-situ observations'],\n", + " 'processing_level': None,\n", + " 'production_center': 'Puertos del Estado (Spain)'}]}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We can also filter based on the strings found by the describe method\n", + "copernicusmarine.describe(include_description=True, contains=[\"Iberian Biscay\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is an example of a more exhaustive search:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Fetching catalog: 100%|██████████| 2/2 [00:11<00:00, 5.85s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Products that offer the variables ['chl', 'o2']: 85\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Fetching catalog: 100%|██████████| 2/2 [00:11<00:00, 5.57s/it]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Products in the region ['Iberian Biscay']: 9\n", + "______________________\n", + "Product: IBI_ANALYSISFORECAST_BGC_005_004\n", + "Dataset: cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\n", + "Spatial resolution : 0.027777777777777776\n", + "______________________\n", + "Product: IBI_ANALYSISFORECAST_BGC_005_004\n", + "Dataset: cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1M-m\n", + "Spatial resolution : 0.027777777777777776\n", + "______________________\n", + "Product: IBI_MULTIYEAR_BGC_005_003\n", + "Dataset: cmems_mod_ibi_bgc_my_0.083deg-3D-climatology_P1M-m\n", + "Spatial resolution : 0.08333333333333333\n", + "______________________\n", + "Product: IBI_MULTIYEAR_BGC_005_003\n", + "Dataset: cmems_mod_ibi_bgc_my_0.083deg-3D_P1D-m\n", + "Spatial resolution : 0.08333333333333333\n", + "______________________\n", + "Product: IBI_MULTIYEAR_BGC_005_003\n", + "Dataset: cmems_mod_ibi_bgc_my_0.083deg-3D_P1M-m\n", + "Spatial resolution : 0.08333333333333333\n", + "______________________\n", + "Product: IBI_MULTIYEAR_BGC_005_003\n", + "Dataset: cmems_mod_ibi_bgc_my_0.083deg-3D_P1Y-m\n", + "Spatial resolution : 0.08333333333333333\n" + ] + } + ], + "source": [ + "# For a little more advanced search...\n", + "var_name = [\"chl\", \"o2\"]\n", + "regions = [\"Iberian Biscay\"]\n", + "\n", + "# We find the products that offer the variables we are interested in:\n", + "describe_var = copernicusmarine.describe(contains=[var_name[0], var_name[1]])\n", + "prod_var = []\n", + "for product in describe_var['products']:\n", + " prod_var.append(product['product_id'])\n", + "print(f\"Products that offer the variables {var_name}: {len(prod_var)}\")\n", + "\n", + "# We save the products that offer the region we are interested in:\n", + "describe_loc = copernicusmarine.describe(contains=[regions[0]], include_all=True)\n", + "prod_loc = []\n", + "for product in describe_loc['products']:\n", + " prod_loc.append(product['product_id'])\n", + "print(f\"Products in the region {regions}: {len(prod_loc)}\")\n", + "\n", + "# And we search the intersection of both lists:\n", + "products = [prod_var, prod_loc]\n", + "final_selected_products = set.intersection(*map(set,products))\n", + "\n", + "pairs_dataset_step = {}\n", + "\n", + "for product in describe_loc['products']:\n", + " # We add a filter to clarify specific products, in this case the \"OMI\" (Ocean Monitoring Indicators)\n", + " if product['product_id'] in final_selected_products and \"OMI_\" not in product[\"product_id\"]:\n", + " for dataset in product['datasets']:\n", + " for version in dataset['versions']:\n", + " for part in version['parts']:\n", + " for part in version.get('parts', []):\n", + " for service in part['services'][:-1]:\n", + " # And we filter the datasets that can be subsetted:\n", + " if 'arco-' in service['service_type']['service_name'] and 'zarr' in service['service_format']:\n", + " for variable in service['variables']:\n", + " if (variable['short_name'] == var_name[0], variable['short_name'] == var_name[1]) and variable['coordinates'] != []:\n", + " pairs_dataset_step[dataset['dataset_id']] = (product['product_id'], variable['coordinates'][2]['step'])\n", + "\n", + "for key, value in pairs_dataset_step.items():\n", + " print(\"______________________\")\n", + " print(f\"Product: {value[0]}\")\n", + " print(f\"Dataset: {key}\")\n", + " print(f\"Spatial resolution : {value[1]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that Copernicus Marine has 2 high-resolution products (models) that cover the Bay of Biscay, both for chlorophyll and dissolved oxygen:\n", + "- [IBI_ANALYSISFORECAST_BGC_005_004](https://data.marine.copernicus.eu/product/IBI_ANALYSISFORECAST_BGC_005_004/description) with recent data and a few days of forecast\n", + "- [IBI_MULTIYEAR_BGC_005_003](https://data.marine.copernicus.eu/product/IBI_MULTIYEAR_BGC_005_003/description) with several years of data covering the last decades\n", + "\n", + "Both products offer daily (`P1D`) and monthly (`P1M`) data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Copernicus Marine toolbox - Subset\n", + "\n", + "For more information, see the [page about subset](subset-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-subset) or the {func}`Python interface `.\n", + "\n", + "The subset is a powerful tool that allows you to benefit from the power the Copernicus Marine services. Indeed, not only do you have access to the whole catalogue but you also can pinpoint the data that interest you thanks to the two services: \"arco-geo-series\" and \"arco-time-series\". They are respectively optimised for retieving maps (short time spam, wide area) and time series (long time span, small area). " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T15:50:02Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", + "INFO - 2024-10-18T15:50:02Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T15:50:03Z - Service was not specified, the default one was selected: \"arco-time-series\"\n", + "INFO - 2024-10-18T15:50:05Z - Downloading using service arco-time-series...\n", + "INFO - 2024-10-18T15:50:06Z - Estimated size of the dataset file is 61.855 MB\n", + "Estimated size of the data that needs to be downloaded to obtain the result: 2814 MB\n", + "This is a very rough estimate that is generally higher than the actual size of the data that needs to be downloaded.\n", + "INFO - 2024-10-18T15:50:06Z - Writing to local storage. Please wait...\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d062ca80f47149f481764a07113437fc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/2802 [00:00` function or the {func}`read_dataframe ` function.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### General Dataset\n", + "We can view the data of the entire dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T12:48:42Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", + "INFO - 2024-10-18T12:48:42Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T12:48:44Z - Service was not specified, the default one was selected: \"arco-geo-series\"\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (depth: 50, latitude: 1081, longitude: 865, time: 1303)\n",
+       "Coordinates:\n",
+       "  * depth      (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n",
+       "  * latitude   (latitude) float32 26.0 26.03 26.06 26.08 ... 55.94 55.97 56.0\n",
+       "  * longitude  (longitude) float32 -19.0 -18.97 -18.94 ... 4.944 4.972 5.0\n",
+       "  * time       (time) datetime64[ns] 2021-04-03 2021-04-04 ... 2024-10-26\n",
+       "Data variables: (12/14)\n",
+       "    chl        (time, depth, latitude, longitude) float32 ...\n",
+       "    dissic     (time, depth, latitude, longitude) float32 ...\n",
+       "    fe         (time, depth, latitude, longitude) float32 ...\n",
+       "    nh4        (time, depth, latitude, longitude) float32 ...\n",
+       "    no3        (time, depth, latitude, longitude) float32 ...\n",
+       "    nppv       (time, depth, latitude, longitude) float32 ...\n",
+       "    ...         ...\n",
+       "    phyc       (time, depth, latitude, longitude) float32 ...\n",
+       "    po4        (time, depth, latitude, longitude) float32 ...\n",
+       "    si         (time, depth, latitude, longitude) float32 ...\n",
+       "    spco2      (time, latitude, longitude) float32 ...\n",
+       "    zeu        (time, latitude, longitude) float32 ...\n",
+       "    zooc       (time, depth, latitude, longitude) float32 ...\n",
+       "Attributes:\n",
+       "    source:       NEMO3.6-PISCES3.6\n",
+       "    institution:  Nologin (Spain)\n",
+       "    title:        Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n",
+       "    contact:      mailto: servicedesk.cmems@mercator-ocean.eu\n",
+       "    Conventions:  CF-1.0\n",
+       "    references:   http://marine.copernicus.eu/
" + ], + "text/plain": [ + "\n", + "Dimensions: (depth: 50, latitude: 1081, longitude: 865, time: 1303)\n", + "Coordinates:\n", + " * depth (depth) float32 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n", + " * latitude (latitude) float32 26.0 26.03 26.06 26.08 ... 55.94 55.97 56.0\n", + " * longitude (longitude) float32 -19.0 -18.97 -18.94 ... 4.944 4.972 5.0\n", + " * time (time) datetime64[ns] 2021-04-03 2021-04-04 ... 2024-10-26\n", + "Data variables: (12/14)\n", + " chl (time, depth, latitude, longitude) float32 ...\n", + " dissic (time, depth, latitude, longitude) float32 ...\n", + " fe (time, depth, latitude, longitude) float32 ...\n", + " nh4 (time, depth, latitude, longitude) float32 ...\n", + " no3 (time, depth, latitude, longitude) float32 ...\n", + " nppv (time, depth, latitude, longitude) float32 ...\n", + " ... ...\n", + " phyc (time, depth, latitude, longitude) float32 ...\n", + " po4 (time, depth, latitude, longitude) float32 ...\n", + " si (time, depth, latitude, longitude) float32 ...\n", + " spco2 (time, latitude, longitude) float32 ...\n", + " zeu (time, latitude, longitude) float32 ...\n", + " zooc (time, depth, latitude, longitude) float32 ...\n", + "Attributes:\n", + " source: NEMO3.6-PISCES3.6\n", + " institution: Nologin (Spain)\n", + " title: Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n", + " contact: mailto: servicedesk.cmems@mercator-ocean.eu\n", + " Conventions: CF-1.0\n", + " references: http://marine.copernicus.eu/" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We open the dataset to explore the data:\n", + "data = copernicusmarine.open_dataset(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\")\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `open_dataset` function uses a lot of the subset functionalities to help you select the data directly and open lazily a dataset. If you want to process the data using directly xarray yourself you can, see [xarray's documentation](https://docs.xarray.dev/en/stable/)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T16:08:46Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", + "INFO - 2024-10-18T16:08:46Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T16:08:47Z - Service was not specified, the default one was selected: \"arco-time-series\"\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 13MB\n",
+       "Dimensions:    (depth: 50, latitude: 37, longitude: 73, time: 6)\n",
+       "Coordinates:\n",
+       "  * depth      (depth) float32 200B 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n",
+       "  * latitude   (latitude) float32 148B 43.0 43.03 43.06 ... 43.94 43.97 44.0\n",
+       "  * longitude  (longitude) float32 292B -5.0 -4.972 -4.944 ... -3.028 -3.0\n",
+       "  * time       (time) datetime64[ns] 48B 2024-10-17 2024-10-18 ... 2024-10-22\n",
+       "Data variables:\n",
+       "    chl        (time, depth, latitude, longitude) float64 6MB ...\n",
+       "    o2         (time, depth, latitude, longitude) float64 6MB ...\n",
+       "Attributes:\n",
+       "    institution:  Nologin (Spain)\n",
+       "    contact:      mailto: servicedesk.cmems@mercator-ocean.eu\n",
+       "    Conventions:  CF-1.0\n",
+       "    title:        Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n",
+       "    references:   http://marine.copernicus.eu/\n",
+       "    source:       NEMO3.6-PISCES3.6
" + ], + "text/plain": [ + " Size: 13MB\n", + "Dimensions: (depth: 50, latitude: 37, longitude: 73, time: 6)\n", + "Coordinates:\n", + " * depth (depth) float32 200B 0.494 1.541 2.646 ... 5.275e+03 5.728e+03\n", + " * latitude (latitude) float32 148B 43.0 43.03 43.06 ... 43.94 43.97 44.0\n", + " * longitude (longitude) float32 292B -5.0 -4.972 -4.944 ... -3.028 -3.0\n", + " * time (time) datetime64[ns] 48B 2024-10-17 2024-10-18 ... 2024-10-22\n", + "Data variables:\n", + " chl (time, depth, latitude, longitude) float64 6MB ...\n", + " o2 (time, depth, latitude, longitude) float64 6MB ...\n", + "Attributes:\n", + " institution: Nologin (Spain)\n", + " contact: mailto: servicedesk.cmems@mercator-ocean.eu\n", + " Conventions: CF-1.0\n", + " title: Biogeochemical 3D daily mean fields for the Iberia-Biscay-I...\n", + " references: http://marine.copernicus.eu/\n", + " source: NEMO3.6-PISCES3.6" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import datetime\n", + "# Now we can focus on the paraeteers that we are interested in: the region of Cantabria, with a specific dates.\n", + "response_bay = copernicusmarine.open_dataset(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", \n", + " variables=[\"chl\", \"o2\"],\n", + " maximum_longitude=-3, # Sopela, to the right\n", + " minimum_longitude=-5, # Llanes, to the left\n", + " minimum_latitude=43, # 85km inside the sea\n", + " maximum_latitude=44, # Santander\n", + " start_datetime=datetime.datetime.now()-datetime.timedelta(days=2), \n", + " end_datetime=datetime.datetime.now()+datetime.timedelta(days=4))\n", + "response_bay" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['2024-10-17T00:00:00.000000000', '2024-10-18T00:00:00.000000000',\n", + " '2024-10-19T00:00:00.000000000', '2024-10-20T00:00:00.000000000',\n", + " '2024-10-21T00:00:00.000000000', '2024-10-22T00:00:00.000000000'],\n", + " dtype='datetime64[ns]')" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# I can not see all the values of the dataset without downloading it\n", + "# For the time dimension for example:\n", + "response_bay.time.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's use `xarray` and `matplotlib` to plot our data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA74AAALUCAYAAAAsZu6JAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD3eElEQVR4nOzdeXjUxP8H8He6vU8oFEoRSjkLcosgiBxyg4iAoNgfIHh/UUFEEZVLwSKiAqKAqICIFg/AC9EKlENuCoqggFBohXIJtLSl1+78/iibndDNHm2Xttv363nyNE0mk0k2k+xsks8oQggBIiIiIiIiIjflUdoFICIiIiIiInIlNnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIKpCTJ09CURQoioJly5aVdnFKVUJCgrovEhISSrs4AKCWZ9q0aaVdFKKb5tq1a5g+fTpatGiBgIAAtR6MGzeutItGRG7Es7QLQERlx8mTJxEVFVXsfIQQJVAaIiJyd3l5eejevTu2b99e2kUhIjfHO75EREQuVKdOHSiKgocffri0i1LucN+5v6+++kpt9D788MPYtGkTDh48iIMHD+Kll14q5dIRkTvhHV8iUtWsWRMHDx7Und+sWTMAQJs2bbB06dKbVSyiCoNPS1BF8+uvvwIAwsPD8dFHH8FgMJRyiYjIXbHhS0QqLy8vNG3a1G66gIAAh9IRERHZcvr0aQBA3bp12eglIpfio85EREREVCpycnIAFPzwSkTkSmz4ElGJSkxMxJNPPolGjRohMDAQAQEBaNSoEZ566ikcPXpUd7lly5apkTxPnjyJ3NxcvPPOO2jTpg1CQkIQGhqKLl264Mcff9Qsd/XqVcyePRutWrVCcHAwKlWqhB49emDDhg2667oxmq/JZMKSJUvQoUMHhIaGIiAgAC1atEBsbCyys7PtbnNGRgZmzZqF9u3bIzQ0FD4+Prjllltw//3344cffrC5bJcuXaAoCrp06QIAOHbsGJ5++mk0aNAA/v7+6v4wS01NxQcffID7778fDRo0QEBAAHx8fFCzZk0MGDAAq1atgslkslvmkrJ27VoMGTIEtWvXhq+vLypVqoQ2bdpg+vTpuHz5cqH0p06dgoeHBxRFwSuvvGI3/y+++EL9rNatW2c1zffff4/7778ft9xyC3x8fFClShW0b98es2bNQkZGRpG37cbPRs+0adPUMlpb/tSpUwCA5cuXq+nMw415OxLV2WQy4bPPPkPfvn0RHh4Ob29vhIWFoWvXrvjggw+Qm5vrcFmzs7Px1ltvoXXr1ggKCkJQUBDatm2LBQsWID8/3+Z225OZmYlVq1bh0UcfRcuWLRESEgIvLy+EhYWhc+fOmDNnju7nU5R954js7GzMnz8fXbp0QVhYGLy8vBAaGopGjRqhT58+eOeddzT17UZGoxHLly/HPffcg4iICPV469ixI9555x1cu3ZNd1mTyYSNGzdiwoQJuPPOO1G1alV4eXmhUqVKaNmyJSZMmIDk5GSnt8majRs3YtiwYYiKioKfnx/8/f0RGRmJO+64AxMmTMDGjRsLLaN3HN/IXjR0R89p5jw2b94MANi8ebPm861Tp44m3z///BMzZsxAr1691LoeGBiIBg0aYOTIkdi5c6fD++e3337Do48+ikaNGiE4OBje3t645ZZbcM899+D999/HlStXdJf9559/8Nxzz6FZs2YICQmBn58f6tati4cffhh79+51uAxEVAoEEZGDAAgAonPnzoXmGY1G8dxzzwlFUdR0Nw6enp5i8eLFVvNeunSpmu73338X7dq1083nnXfeEUIIcerUKXHrrbdaTaMoivjss8+srmvTpk1qup9//ln07t1bd11NmjQRqampuvskMTFRRERE6C4PQAwaNEhcu3bN6vKdO3dW9+natWtFQEBAoeWTkpKEEELk5+cLDw8Pm+sCIHr06CGuXr1qdX1JSUlquqVLl+pulz2XLl0Sd999t81yVKtWTezYsaPQsh07dhQARFRUlN319OvXTwAQYWFhIi8vTzPv2rVrYuDAgTbLEBERIfbv3281b/k42LRpU6H58mdjy9SpU9V8rC1va7gxb/P0qVOnWl3Xf//9J+68806beTZu3FicPHnSblnPnj0rWrZsqZtP//79hdFotLnttjiy/VFRUeKvv/4q0rL2PpcbnTlzRjRp0sRuvs8//7zV5U+dOiVatGhhc9n69euLI0eOWF1e3vd6g7+/v1i9erVT23WjcePG2V1PlSpVbJbPFmfqja1zmr0yRkZGWl2nreGll16yWfasrCwxbNgwu/no1b+33npLeHl56S6nKIqYPHmyzTIQUenhO75EVCKeeeYZfPDBBwCATp064eGHH0bdunXh7++P33//HXPnzsWhQ4fwxBNPIDw8HPfee69uXo8//jj27duH//3vfxg4cCAqV66MAwcOYMqUKThz5gwmTJiAHj164OGHH8aJEyfw0ksvoXfv3ggICMBvv/2GqVOnIi0tDU899RR69OiBatWq6a7r1VdfxZ49e9CzZ0889dRTqFWrFlJSUvDBBx8gPj4ehw8fRv/+/bFz585C75+dPn0a3bp1w+XLl9XIsw8++CCqVKmCw4cP4+2338bvv/+O1atX4+GHH0ZcXJxuOZKTk/F///d/8Pf3x+TJk3HXXXfBYDBgz549CAwMBAA18NHdd9+NPn36oFmzZggLC8PVq1dx4sQJLFmyBDt27EB8fDzGjBmD5cuXO/z5OSMnJwfdu3dHYmIiDAYDHnroIfTt2xdRUVHIy8vDli1b8M477+D8+fPo27cv9u/fj8jISHX5mJgYbNu2DUlJSdi+fTs6dOhgdT3//fcffvnlFwDA0KFD4empvWSNHDkSa9asAQC0aNECzz//PBo3boxLly4hLi4Oy5Ytw5kzZ9CtWzf88ccfqFmzpkv2h56lS5ciMzMTvXr1wpkzZzBgwADMmDFDkyYgIMDh/IxGI+655x7s2LEDANC5c2c8/fTTiIqKwpkzZ/DJJ59g7dq1+Ouvv9CtWzccOHBAPXasGTRoEA4fPoxnn30W/fv3R2hoKI4cOYLXX38df/31F77//nssWbIETzzxRJG2Pz8/H82aNcO9996LNm3aICIiAkIInDp1CmvWrMGXX36JpKQk3HfffThw4AB8fX3VZUt63wEF56jDhw8DAP7v//4PgwYNQkREBAwGA1JTU7F37158++23Vpf977//0LFjR6SkpMDHxwePPfYYOnfujDp16iAjIwO//PIL5s2bh3/++Qd9+vRBYmIiQkJCCu2PGjVqYODAgWjfvj3q1q0LX19fpKSkYPv27fjggw+QkZGBhx56CImJiWjcuLFT2wcAP/zwA+bOnQsAaN68OZ566ik0btwYISEhuHLlCg4dOoRff/0Vu3fvdjpvZ9k6pwUEBKiBFEeNGoW9e/cWCpro7e2tjufn5yMgIAD9+vXD3XffjejoaAQHB+P8+fM4dOgQ5s+fj1OnTmHWrFlo2LAhRo0aVag8JpMJAwYMQHx8PACgQYMG+N///oc2bdrA398fqamp2L59O7788kur2/PWW2/hxRdfBGDZtw0aNEClSpVw5MgRLFiwADt27MDrr7+OqlWr4tlnny2xfUlEJaS0W95EVH5A507LL7/8os776KOPrC577do19Q5hZGRkobt38h1fRVHEmjVrCuXx+++/q3c8w8LChI+Pj9i5c2ehdD/++KOal/nusOzGuwePP/641TI/8sgjapr333+/0Pz777/f5nZnZ2eLrl27qmnWrVtXKI18ZysiIkKcOnXKalmEEMJkMoljx47pzhdCiClTpqj78OjRo4Xml8Qd35dfflkAEJUqVRJ79+61mubkyZOiRo0aAoB46KGHNPMuXryo3jUZM2aM7noWLlyolnX79u2aeT/88IM6r1u3biInJ6fQ8h9++KGaZujQoYXmu/qOr1lkZKQAIEaOHGkzHyFs3/FdsGCBOn/EiBHCZDIVSmP+bACIF1980WZZvby8rG73f//9J6pXry4AiObNm9stsx5rx58sPj5erc965w1n9p0t165dU485vTu6Zv/991+haQ899JB67jpx4oTV5RITE9W7my+//HKh+UlJSSI3N1d3vSkpKaJmzZoCgPi///s/O1tk3fDhw9Vy6j31IYT1bSzpO76OnNPk9Lbq2YULF8Tly5d15+fk5IgePXqo256fn18ozbx589RyDRw4UGRnZ1vNy2g0in///Vcz7dChQ+rxM3XqVKt1z2g0iv/7v/8TAERgYKC4dOmSbnmJqHSw4UtEDtNr+JobtIMHD7a5/OHDh9U8fvnlF808ueH7wAMP6ObRqVMnNd3EiRN105m/MA8cOLDQPPmLW/Xq1UVmZqbVPK5evSrCwsIEAHHrrbdq5p0+fVoYDAYBQPTu3Vu3HElJScLT01MAEH379i00X/6S+Omnn+rm46j8/HxRtWpVAUDMmTPHanmK0/C9evWqCAkJEQDEe++9ZzPtBx98oDawMjIyNPP69++v/oBx448gZuZHouvWrVtoXp8+fdS8k5OTdcvQvXt3ARQ8Zn/mzBnNvPLW8G3cuLG6z9LT060un5eXJ6KjowUAUbly5UJf7uWyjh8/XrccL730kvoDypUrV+yWu6juu+8+AUDcc889VueXVMP39OnT6nZ/++23Ti2blJSk1vXvv//eZtoXX3xRbfAVxdy5cwUA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ivr16yMoKAheXl6oXr06evbsiUWLFuHAgQOFHgE2Cw8Px5YtW/DDDz8gJiZGDbLm5eWFsLAwdOjQAc8//zw2b95s9b3/UaNGYevWrbjvvvsQFhamHku9e/fGqlWrEBcXV+wugDZt2oR58+Zh8ODBaNasGcLCwuDp6Yng4GC0atUKEyZMwOHDh/Hwww9bXb569erYtWsXJk6ciAYNGsDHxwehoaHo1KkTPvvsM3zxxRcl2k2Ro1q2bIkDBw7gySefRGRkJLy8vBAaGoq2bdtizpw52L17t0OvMvj7++Orr77Cxo0bMXz4cERFRcHPzw/e3t6oVasW+vfvj8WLF+u+/vLYY4/hxIkTmD59Ou68805UrVoVnp6eCAgIQMOGDTF48GAsWrQIp0+fRv369Ut6NxBRMSlCuKCjRyKiMiwhIQFdu3YFUPBF0dmgR0RERERUvvCOLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjVGciIiIiIiJya7zjS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPgSERERERGRW2PDl4iIiIiIiNwaG75ERERERETk1tjwJSIiIiIiIrfGhi8RERERERG5NTZ8iYiIiIiIyK2x4UtERERERERujQ1fIiIiIiIicmts+BIREREREZFbY8OXiIiIiIiI3BobvkREREREROTW2PAlIiIiIiIit8aGLxEREREREbk1NnyJiIiIiIjIrbHhS0RERERERG6NDV8iIiIiIiJya2z4EhERERERkVtjw5eIiIiIiIjcGhu+RERERERE5NbY8CUiIiIiIiK3xoYvERERERERuTU2fImIiIiIiMitseFLREREREREbo0NXyIiIiIiInJrbPi6oYSEBCiKgitXrpR2UYjIhVjXiSoG1nUiouJjw7ec69KlC8aNG6eZ1qFDB6SmpiIkJKR0ClVEly5dwjPPPINGjRrBz88PtWvXxrPPPou0tDRNuuTkZPTr1w/+/v6oVq0aXnjhBeTn56vzV69ejR49eiAsLAzBwcFo3749fv75Z931zpo1C4qiFNqP1sycORMdOnSAv78/KlWqZDWNvfJZc+jQIQwePBh16tSBoiiYO3duoTTmeTcOY8aMsVtuKv9Y1ytOXTcajZg8eTKioqLg5+eHevXq4fXXX4cQwm65qfxjXa84df3q1asYN24cIiMj4efnhw4dOmDPnj12y0xERcOGrxvy9vZGeHg4FEUp7aI45cyZMzhz5gzmzJmDP//8E8uWLcP69evx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06ZNddOdPXsW1atX10yrXr06zp49q843T9NLUxHxUWciIiIiIqISlJKSguDgYPV/Hx8fu8uMGTMGf/75J7Zt2+bKolVYbPgSEREREVGFUZToy87kDQDBwcGahq89Tz/9NH744Qds2bIFt9xyi8204eHhOHfunGbauXPnEB4ers43T6tRo4YmTcuWLR0uk7spM486z5o1C4qiYNy4ceq0J554AvXq1YOfnx/CwsIwYMAA/P333zbzycjIwNNPP41bbrkFfn5+aNKkCRYtWlRyBdUL5y51d6DpvsXTUx00IfiLGt7fld0kuMBN6zKB9MldE+TnWwa5WwypCyPFx8cy6HTfo+kqRf7MpHXd2K1RmWalyya7pO6ONN2aaLo+sV5fS6M7DpfURb1ujhzo/kgPuyopGZrPT6r3Is8yaLo6k4/V68eybv0vp5TgICghwVACAyyDr486wMvTMujRu9brdP3mUiVU5xzKsySUs+8v7kJzPpfrv/x9wGiyDHrkLv7KazeFZZQQAk8//TTWrFmDjRs3Iioqyu4y7du3x4YNGzTT4uPj0b59ewBAVFQUwsPDNWnS09Oxa9cuNU1FVCbu+O7ZsweLFy9G8+bNNdNvu+02xMTEoHbt2rh06RKmTZuGnj17IikpCQadi8v48eOxceNGfPbZZ6hTpw5++eUX/O9//0NERATuvffem7E5RERERERURhmFB4zCRVGdnbx3M2bMGHz++ef49ttvERQUpL6DGxISAj8/PwDAiBEjULNmTfU94bFjx6Jz5854++230a9fP8TFxWHv3r348MMPAUC9mThjxgw0aNAAUVFRmDx5MiIiInDfffeV2LaWN6X+U01GRgZiYmKwZMkSVK5cWTPv8ccfR6dOnVCnTh20bt0aM2bMQEpKCk6ePKmb3/bt2zFy5Eh06dIFderUweOPP44WLVpg9+7dLt4SIiIiIiIixy1cuBBpaWno0qULatSooQ6rVq1S0yQnJyM1NVX9v0OHDvj888/x4YcfokWLFvj666+xdu1aTUCsF198Ec888wwef/xx3H777cjIyMD69evh6+t7U7evLCn1O75jxoxBv3790L17d8yYMUM3XWZmJpYuXYqoqCjUqlVLN12HDh3w3XffYfTo0YiIiEBCQgKOHj2Kd999V3eZnJwcTYjx9PT0om0MEZVprOtE7o/1nIjsMUGB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a9aswcqVK3HPPffAYDAgJSUFRqMRDz30EGbOnIkFCxY4VyanS1JCunXrhoMHD2qmjRo1CtHR0Zg4caLVqM1CCAghNO/uyKKiohAeHo4NGzaoDd309HTs2rULTz31lMNlM0cx4+NRRCXv6tWratTB0sa6TuQ6ZaWus54TuVZZqetOKUNRncui//3vfxg/fjxSUlJw2223ISAgQDP/xp54zI4ePYorV66gbdu26rQNGzZgxowZyMzMxH333YeXX37Z7vp//fVXrF69GnfccQfuvPNOVK1aFfHx8WoQq9deew2PPfaY09tVag3foKAgNG3aVDMtICAAVapUQdOmTXHixAmsWrUKPXv2RFhYGP7991/MmjULfn5+mpeio6OjERsbi4EDB6r9AM+YMQMNGjRQuzOKiIjAfffd53DZIiIicPjwYTRp0gQpKSku7Xz6ZkpPT0etWrW4TWWcO2/T4cOHERERUdrFUbGulx/cpvKhLNb1iIgIpKSkQAiB2rVru+X+5jaVbe62TebtSU5OhqIoZaauU8kxBwR+9tln1WmKokAIAUVRrEZsBgru1DZr1kxt+CYlJaF///6466670Lx5c8TGxsLf3x/jxo2zuf7Lly+rjdzQ0FD4+/tr7j7Xr1+/fD3qbI+vry+2bt2KuXPn4vLly6hevTo6deqE7du3a54NP3LkCNLS0tT/X3zxRWRmZuLxxx/HlStX0LFjR6xfv96pPnw9PDzUnR0cHOwWJykZt6l8cMdtqlmzJjw8Sr0XNRXrevnDbSofylJd9/DwwC233KI+lumO+5vbVD642zaFhISU3+0pQ1Gdy6KkpKQiLbd37168+OKL6v8rV65Ew4YN8fPPPwMouFP83nvv2W34VqtWDampqeqTOk8//bSmi6PLly8XugvtiDLV8JXDc0dERGDdunV2l7nxvQJFUfDaa6/htddeK+niERERERERubVTp06hQ4cO8PTUNhXz8/Oxfft23Xd/L168iFtuuUX9f9OmTejfv7/6f5cuXfD888/bXX/Lli2xY8cO9c7xrFmzNPO3bdum+7i1LWWq4UtERERERORSfMfXpq5duyI1NbVQBOa0tDR07dpV91Hn0NBQ9U6tyWTC3r17MX78eHV+bm6uQ8HQvv32W5vzb7/9dqf7+wVKuR/fsszHxwdTp07VRIYs77hN5QO36eYqy2UrKm5T+cBturnKctmKittUPrjbNrnb9lBh5nd5b/Tff//ZfMS4S5cueP3115GSkoK5c+fCZDKhS5cu6vzDhw+jTp06xS5f27ZtC8WKcoQiGIOciIiIiIjcXHp6OkJCQlDr7dfh4ed4/B9nmK5lI+X5yUhLSyt370APGjQIQMEd1969e2t+3DAajfjjjz/QqFEjrF+/3uryJ0+eRI8ePXD8+HEYDAbMnz9f07POfffdh6ioKLz77rtOly04OBgHDhxA3bp1nV7WjI86ExERERERVXDmbqmEEAgKCoKfn586z9vbG3fccYfNboTq1KmDv/76C4cOHUJYWFihiN/Tp0/XvAPsjJK4V8uGLxERERERVRx8x9eqpUuXAihowE6YMKFokZM9PdGiRQur8/Sm3yxs+BIREREREREAYOrUqaVdhEL+7//+r9iPjjO4FRERERERVRzmfnxdNZRz586dw/DhwxEREQFPT08YDAbNUBoWLlyIqlWrFisP3vElIiIiIiIiAMDDDz+M5ORkTJ48GTVq1LAa4flm2bNnDzZt2oTz58/DZDJp5r3zzjtO5cWGLxERERERVRiKKBhclXd5t23bNmzduhUtW7Ys1XK88cYbePXVV9GoUSNUr15d0wAvSmOcDV8iIiIiIiICANSqVavYUZSvXLmC3bt3W71TO2LECIfymDdvHj755BM8/PDDxSqLGRu+RERERERUcTCqs01z587FSy+9hMWLF6NOnTpOL//9998jJiYGGRkZCA4OLnSn1tGGr4eHB+68806n16+bX4nlREREREREROXaAw88gISEBNSrVw9BQUEIDQ3VDPY8//zzGD16NDIyMnDlyhVcvnxZHS5duuRwOZ577jm8//77xdkUDd7xJSIiIiIiIgAFd3yL4/Tp03j22Wfh7+9frHwmTJiAfv36oV69emjSpAm8vLw081evXu1Ufmz4EhEREREREQBg5MiRxVq+V69e2Lt3L+rWrVusfJ599lls2rQJXbt2RZUqVYodXZoNXyIiIiIiqjAUuDCqs2uyvemOHz+OpUuX4vjx45g3bx6qVauGn376CbVr18att95qc9l+/frhhRdewOHDh9GsWbNCd2rvvfdeh8qwfPlyfPPNN+jXr1+Rt0PGhi8REREREREBADZv3ow+ffrgzjvvxJYtWzBz5kxUq1YNv//+Oz7++GN8/fXXNpd/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69atMX78eLRp0wYAkJaWhqVLl8JkMuG1116rtv5x4EtERERERESVEhYWhn379mHcuHGYOXMmRMntGYqiIDY2FkuXLkVYWFi19Y8DXyIiIiIi8h684usyzZo1w9atW3H16lWcPn0aQgi0atUKISEh1d013uNLRERERERUnZYuXYrIyEgEBASgR48eOHjwoOay/fr1g6IoZR6DBw+2LPP000+Xeb68UkPOFhISgrvuugt33323Wwx6AV7xJSIiIiIiL+JuWZ03btyIyZMnIykpCT169MDixYsRGxuL9PR0NGrUqMzymzZtQoFU/eH3339Hp06d8Le//U213MCBA7F69WrL3/7+/o53zoNw4OsgzYNZunYupJTzQip5JHytB5s5sLhUgiHfWvrIcDPA+jq5N6zTBdayCkKj3Il2iQO5Y84tK+LqVPg1LdW+nvJLWmratjqk9LirotJaFSEUpfjhI8ertWyJZe9IcaYUWbdHyPNNUs0zuQyJSWMfy7ErlTxS8qX4LpTiXipnBKkcmnxusP06lXj/WUJIl8qcA6RGbM93cB940/vuMHk/aZQwUr3fvhr/VTJZl1HteaO0D6UShKrXkqnOH3LpsuJpzfiXY95GGSTADY4DNztunRKjleuAk5pxZDukzzLp/VUMLHPkajk5Oaq//f39NQeeCxcuxJgxYzBq1CgAQFJSEr7++musWrUKr7zySpnl69evr/p7w4YNqFWrVpmBr7+/P8LDwyuzGR6FP3UmIiIiIiLvIVz8ANCkSRMEBwdbHgkJCTa7UlBQgNTUVMTExFjmGQwGxMTEYP/+/bo2Z+XKlXjsscdQu3Zt1fyUlBQ0atQIbdq0wbhx4/D777/ras9T8YovERERERGRE2VkZCAoKMjyt9bV3itXrsBkMpXJdhwWFoa0tDS7r3Pw4EH897//xcqVK1XzBw4ciIceeghRUVE4c+YMXn31Vdx///3Yv38/jPKvUbwIB75EREREROQ1FCHUtwk6uW0ACAoKUg18XWXlypXo0KED7r77btX8xx57zDLdoUMHdOzYES1atEBKSgr69+/v8n65I/7UmYiIiIiIqBo0aNAARqMRWVlZqvlZWVl278/Ny8vDhg0b8Mwzz9h9nebNm6NBgwY4ffp0pfpbk3HgS0RERERE3qMK7vHVy8/PD926dUNycrJlntlsRnJyMnr27Fnu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z+PQwLdv374Ain833qRJExgMFbpFmIiIiIiIqFrI9+K6om1H+Pn5oVu3bkhOTsaDDz4IADCbzUhOTsb48eN1tWEymXDixAkMGjQIABAVFYXw8HAkJydbBro5OTk4cOAAxo0b51D/PEmFRq7NmjWDwWDAjRs3kJaWhuPHj6seFZGYmAhFUTBx4kTLvOeffx4tWrRAYGAgGjZsiKFDhyItLU13m2PHjoWiKFi8eHGF+kRERERERORKkydPxooVK7B27VqcOnUK48aNQ15eHkaNGgUAGDlyJGbOnGlZfu7cudi+fTvOnj2LI0eO4IknnsDPP/+MZ599FgAsY6r4+Hhs2bIFJ06cwMiRIxEREWEZXHsjh674lvrtt98watQofPPNNzafN5kcu5fv0KFDWL58OTp27Kia361bN8TFxaFp06b4448/8MYbb2DAgAE4d+4cjMbyb3TZvHkzfvjhB/70moiIiIiIrNysju+jjz6K3377DbNnz0ZmZiY6d+6Mbdu2WZJTXbhwQfVL26tXr2LMmDHIzMxESEgIunXrhn379qFdu3aWZaZPn468vDw899xzyM7Oxr333ott27Z5bQ1foIID34kTJyI7OxsHDhxAv379sHnzZmRlZSE+Ph4LFixwqK3c3FzExcVhxYoViI+PVz333HPPWaYjIyMRHx+PTp064fz582jRooVmm7/88gteeuklfPvttxg8eLBjG0dERERERFSFxo8fr/nT5pSUFNXfixYtwqJFi2wuW0pRFMydOxdz5851VhdrvAoNfL/77jt88cUX6N69OwwGA5o1a4a//vWvCAoKQkJCgkODzRdffBGDBw9GTExMmYGvLC8vD6tXr0ZUVBSaNGmiuZzZbMaTTz6JadOm4U9/+pOuPuTn56tqa+Xk5JSzdNU4spwZT8k50mc5dixFLptvmTbmW79d9L0hZROWftShyBlBbXzLuWtrcQbznJwcBAfPcagvzuaOsc5M5uQs/3tklkPLd936umX6jywpAUtJIBsDramHa9eyxk2T4GzL9NnfQy3T/xlWHN85OTkIXv6qQ31xJneMcwA49j5jnZxjY88k3csuT+9rmV5/8W7LdNa1upbpfCkLfGBda+y0Cf3dMj047IRl+oU2OwGUxDr098WtCKGqkuD0tsktVege37y8PEu93pCQEPz2228AgA4dOuDIkSO629mw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LxEREREReY8quMfXEY8++ih+++03zJ49G5mZmejcuTO2bdtmSXh14cIFGAzW65UffPABCgoK8Mgjj6jaKc0cbTQacfz4caxduxbZ2dmIiIjAgAED8NZbb2km2fIGHPgSERERERFVo/Hjx2P8+PE2n5NLvgLA+fPny20rMDAQ3377rZN65jk48CUiIiIiIu9hNgMwu7Btcke8x5eIiIiIiIg8Gq/4EhERERGR93Cze3ypavCKLxEREREREXk0XvElIiIiIiLvwSu+XolXfImIiIiIiMij8YovERERERF5D7MA4KIrs2Ze8XVXvOJLREREREREHo1XfImIiIiIyGsIYYYQrqm366p2qfJ4xZeIiIiIiIg8Gq/4EhERERGR9xDCdffiMquz2+IVXyIiIiIiIvJovOJLRERERETeQ7gwqzOv+LotXvElIiIiIiIij8YrvkRERERE5D3MZkBxUfZlZnV2W7ziS0RERERERB6NV3yJiIiIiMh78B5fr8QrvkREREREROTReMWXiIiIiIi8hjCbIVx0j6/gPb5ui1d8iYiIiIiIyKPxii8REREREXkP3uPrlXjFl4iIiIiIiDwar/gSEREREZH3MAtA4RVfb8MrvkREREREROTReMWXiIiIiIi8hxAAXJR9mVd83Rav+BIREREREZFH4xVfIiIiIiLyGsIsIFx0j6/gFV+35TZXfBMTE6EoCiZOnGiZ9/zzz6NFixYIDAxEw4YNMXToUKSlpZXbjhACs2fPRuPGjREYGIiYmBj89NNPLu49ERERERERuSu3GPgeOnQIy5cvR8eOHVXzu3XrhtWrV+PUqVP49ttvIYTAgAEDYDKZNNuaN28e3nvvPSQlJeHAgQOoXbs2YmNjcevWLVdvBhERERERuTthdu2D3FK1D3xzc3MRFxeHFStWICQkRPXcc889hz59+iAyMhJdu3ZFfHw8MjIycP78eZttCSGwePFivP766xg6dCg6duyIdevW4ddff8Xnn3/u+o0hIiIiIiIit1PtA98XX3wRgwcPRkxMTLnL5eXlYfXq1YiKikKTJk1sLnPu3DlkZmaq2goODkaPHj2wf/9+zbbz8/ORk5OjehCR52GsE3k+xjkR2SPMwqUPck/VOvDdsGEDjhw5goSEBM1lli1bhjp16qBOnTr45ptvsGPHDvj5+dlcNjMzEwAQFhammh8WFmZ5zpaEhAQEBwdbHloDayKq2RjrRJ6PcU5ERLZU28A3IyMDEyZMwPr16xEQEKC5XFxcHI4ePYpdu3ahdevWGD58uNPv1505cyauXbtmeWRkZDi1fSJyD4x1Is/HOCciu3iPr1eqtnJGqampuHz5Mrp27WqZZzKZsHv3bixZsgT5+fkwGo2Wb2xbtWqFe+65ByEhIdi8eTNGjBhRps3w8HAAQFZWFho3bmyZn5WVhc6dO2v2xd/fH/7+/pa/S9OQ8+dRRM5TGk/VmeafsU7ketUd64xzoqpR3bFeGUUoBFzU7SIUuqZhqrRqG/j2798fJ06cUM0bNWoUoqOjMWPGDBiNxjLrCCEghEB+fr7NNqOiohAeHo7k5GTLQDcnJwcHDhzAuHHjdPft+vXrAMCfRxG5wPXr1xEcHFzd3QDAWCdyJXeJdcY5kWu5S6zr4efnh/DwcOzJ3OrS1wkPD9e8NZOqT7UNfOvWrYv27dur5tWuXRuhoaFo3749zp49i40bN2LAgAFo2LAhLl68iMTERAQGBmLQoEGWdaKjo5GQkIBhw4ZZ6gDHx8ejVatWiIqKwqxZsxAREYEHH3xQd98iIiJw8uRJtGvXDhkZGQgKCnLWZlernJwcNGnShNvk5jx5m06ePImIiIjq7o4FY73m4DbVDO4Y6xEREcjIyIAQAk2bNvXI95vb5N48bZtKt+fChQtQFMVtYl2PgIAAnDt3DgUFBS59HT8/v3Jv5aTqUW0DX3sCAgLw/fffY/Hixbh69SrCwsLQp08f7Nu3D40aNbIsl56ejmvXrln+nj59OvLy8vDcc88hOzsb9957L7Zt2+bQwWcwGHDHHXcAAIKCgjziJCXjNtUMnrhNd9xxBwyGak8mb8FYr3m4TTWDO8W6wWDAnXfeaflZpie+39ymmsHTtik4OLhGbk9AQAAHpV7KrQa+KSkplumIiAhs3Wr/Zwi331egKArmzp2LuXPnOrt7REREREREVAO5x9exRERERERERC7Cga8Gf39/zJkzR5UZsqbjNtUM3Kaq5c59qyhuU83Abapa7ty3iuI21Qyetk2etj3kPRRRE3OQExEREREREenEK75ERERERETk0TjwJSIiIiIiIo/GgS8RERERERF5NA58iYiIiIiIyKNx4CuJjIyEoiiqR2JiYrnr3Lp1Cy+++CJCQ0NRp04dPPzww8jKyqqiHuuXn5+Pzp07Q1EUHDt2rNxl+/XrV+Z9GDt2bNV01AGObJO776chQ4agadOmCAgIQOPGjfHkk0/i119/LXcdd99PFdmmqtpPjPVi7n4MlWKsu+9+cuc4Bxjrpdz5GCrFOHfvfeTusU6kBwe+t5k7dy4uXbpkebz00kvlLj9p0iR8+eWX+Ne//oVdu3bh119/xUMPPVRFvdVv+vTpiIiI0L38mDFjVO/DvHnzXNi7inFkm9x9P91333345JNPkJ6ejs8++wxnzpzBI488Ync9d95PFdmmqtxPjPVi7nwMlWKsu+9+cvc4Bxjrpdz1GCrFOHfvfVQTYp3ILkEWzZo1E4sWLdK9fHZ2tvD19RX/+te/LPNOnTolAIj9+/e7oIcVs3XrVhEdHS1+/PFHAUAcPXq03OX79u0rJkyYUCV9qyhHtqmm7CfZF198IRRFEQUFBZrL1IT9JLO3TVW5nxjrxWrCMcRYrxn7qZQ7xbkQjPVS7n4MMc7dfx/dzt1inUgPXvG9TWJiIkJDQ9GlSxf8/e9/R1FRkeayqampKCwsRExMjGVedHQ0mjZtiv3791dFd+3KysrCmDFj8NFHH6FWrVq611u/fj0aNGiA9u3bY+bMmbhx44YLe+kYR7epJuwn2R9//IH169ejV69e8PX1LXdZd95PMj3bVNX7ibFezJ2PIca6lTvvp1LuGOcAY72Uux5DjHMrd91Ht3PXWCeyx6e6O+BOXn75ZXTt2hX169fHvn37MHPmTFy6dAkLFy60uXxmZib8/PxQr1491fywsDBkZmZWQY/LJ4TA008/jbFjx6J79+44f/68rvUef/xxNGvWDBERETh+/DhmzJiB9PR0bNq0ybUd1qEi2+Tu+6nUjBkzsGTJEty4cQP33HMPvvrqq3KXd+f9VMqRbarK/cRYL+bOxxBj3cqd9xPgvnEOMNZLuesxxDi3ctd9JHPnWCfSpTovN1eFGTNmCADlPk6dOmVz3ZUrVwofHx9x69Ytm8+vX79e+Pn5lZl/1113ienTpzt1O2R6t+kf//iH6N27tygqKhJCCHHu3DldP4m6XXJysgAgTp8+7YKtKebKbXL3/VTqt99+E+np6WL79u2id+/eYtCgQcJsNut+PXfaT6Uc2abK7ifGOmPd3fdTKXePdXeO84r0T8ZYL+YuxxDjXJs7nY9LVXWsEzmbx1/xnTJlCp5++ulyl2nevLnN+T169EBRURHOnz+PNm3alHk+PDwcBQUFyM7OVn2jlZWVhfDw8Mp0u1x6t+m7777D/v374e/vr3que/fuiIuLw9q1a3W9Xo8ePQAAp0+fRosWLSrUZ3tcuU3uvp9KNWjQAA0aNEDr1q3Rtm1bNGnSBD/88AN69uyp6/XcaT+VcmSbKrufGOuMdXffT6XcPdbdOc4r0j8ZY72YuxxDjHNt7nQ+LlXVsU7kdNU98nZnH3/8sTAYDOKPP/6w+XzpjfuffvqpZV5aWpoA3OPG/Z9//lmcOHHC8vj2228FAPHpp5+KjIwM3e3s2bNHABD/+c9/XNhbfSqyTe6+n2z5+eefBQCxc+dO3eu4036yxd42Ved+YqwXc6djiLGuzZ320+3cOc6FYKyXcpdjiHGuzV32kRZ3j3UiWzjwLbFv3z6xaNEicezYMXHmzBnx8ccfi4YNG4qRI0dalrl48aJo06aNOHDggGXe2LFjRdOmTcV3330nDh8+LHr27Cl69uxZHZtgl62fEN2+TadPnxZz584Vhw8fFufOnRNffPGFaN68uejTp0819bp8erZJCPfeTz/88IN4//33xdGjR8X58+dFcnKy6NWrl2jRooXl53g1bT9VZJuEqJr9xFivGcfQ7Rjr7ref3DnOhWCs14Rj6HaMc/fcR+4e60R6ceBbIjU1VfTo0UMEBweLgIAA0bZtW/HOO++o7gMqPSHL327dvHlTvPDCCyIkJETUqlVLDBs2TFy6dKkatsA+Wx8ot2/ThQsXRJ8+fUT9+vWFv7+/aNmypZg2bZq4du1a9XTaDj3bJIR776fjx4+L++67z/KeR0ZGirFjx4qLFy9alqlp+6ki2yRE1ewnxvpOIYT7H0O3Y6y7335y5zgXgrFeE46h2zHO3XMfuXusE+mlCCGEM386TUREREREROROWMeXiIiIiIiIPBoHvkREREREROTROPAlIiIiIiIij8aBLxEREREREXk0DnyJiIiIiIjIo3HgS0RERERERB6NA18iIiIiIiLyaBz4EhERERERkUfjwJecol+/fpg4caLHvObTTz+NBx980CVtE9VUjHMi78BYJyJP5FPdHSCqqE2bNsHX19fyd2RkJCZOnFjlH9ZE5DqMcyLvwFgnIlfjwJdqrPr161d3F4jIxRjnRN6BsU5ErsafOpPTXb16FSNHjkRISAhq1aqF+++/Hz/99JPl+TVr1qBevXr49ttv0bZtW9SpUwcDBw7EpUuXLMsUFRXh5ZdfRr169RAaGooZM2bgqaeeUv1USf5ZVL9+/fDzzz9j0qRJUBQFiqIAAN544w107txZ1b/FixcjMjLS8rfJZMLkyZMtrzV9+nQIIVTrmM1mJCQkICoqCoGBgejUqRM+/fRT57xhRDUQ45zIOzDWichTcOBLTvf000/j8OHD2LJlC/bv3w8hBAYNGoTCwkLLMjdu3MD8+fPx0UcfYffu3bhw4QKmTp1qef7dd9/F+vXrsXr1auzduxc5OTn4/PPPNV9z06ZNuPPOOzF37lxcunRJ9YFrz4IFC7BmzRqsWrUKe/bswR9//IHNmzerlklISMC6deuQlJSEH3/8EZMmTcITTzyBXbt26X9jiDwI45zIOzDWichjCCIn6Nu3r5gwYYL43//+JwCIvXv3Wp67cuWKCAwMFJ988okQQojVq1cLAOL06dOWZZYuXSrCwsIsf4eFhYm///3vlr+LiopE06ZNxdChQ8u8ZqlmzZqJRYsWqfo1Z84c0alTJ9W8RYsWiWbNmln+bty4sZg3b57l78LCQnHnnXdaXuvWrVuiVq1aYt++fap2nnnmGTFixIhy3xciT8I4J/IOjHUi8kS8x5ec6tSpU/Dx8UGPHj0s80JDQ9GmTRucOnXKMq9WrVpo0aKF5e/GjRvj8uXLAIBr164hKysLd999t+V5o9GIbt26wWw2O7W/165dw6VLl1T99fHxQffu3S0/jTp9+jRu3LiBv/71r6p1CwoK0KVLF6f2h6gmYJwTeQfGOhF5Eg58qVrImRsBQFGUMvfgOIPBYCjTrvzzLD1yc3MBAF9//TXuuOMO1XP+/v6V6yCRB2OcE3kHxjoR1QS8x5ecqm3btigqKsKBAwcs837//Xekp6ejXbt2utoIDg5GWFgYDh06ZJlnMplw5MiRctfz8/ODyWRSzWvYsCEyMzNVH5THjh1TvVbjxo1V/S0qKkJqaqrl73bt2sHf3x8XLlxAy5YtVY8mTZro2iYiT8I4J/IOjHUi8iS84ktO1apVKwwdOhRjxozB8uXLUbduXbzyyiu44447MHToUN3tvPTSS0hISEDLli0RHR2N999/H1evXrVkdrQlMjISu3fvxmOPPQZ/f380aNAA/fr1w2+//YZ58+bhkUcewbZt2/DNN98gKCjIst6ECROQmJiIVq1aITo6GgsXLkR2drbl+bp162Lq1KmYNGkSzGYz7r33Xly7dg179+5FUFAQnnrqqQq9V0Q1FeOcyDsw1onIk/CKLznd6tWr0a1bNzzwwAPo2bMnhBDYunVrmZ9ClWfGjBkYMWIERo4ciZ49e6JOnTqIjY1FQECA5jpz587F+fPn0aJFCzRs2BBA8bfVy5Ytw9KlS9GpUyccPHhQlWkSAKZMmYInn3wSTz31FHr27Im6deti2LBhqmXeeustzJo1CwkJCWjbti0GDhyIr7/+GlFRUQ68M0Seg3FO5B0Y60TkKRThipswiJzMbDajbdu2GD58ON56663q7g4RuQDjnMg7MNaJqDrwp87kln7++Wds374dffv2RX5+PpYsWYJz587h8ccfr+6uEZGTMM6JvANjnYjcAX/qTG7JYDBgzZo1uOuuu9C7d2+cOHEC//73v9G2bdvq7hoROQnjnMg7MNaJyB3wp85ERERERETk0XjFl4iIiIiIiDwaB75ERERERETk0TjwJSIiIiIiIo/GgS8RERERERF5NA58iYiIiIiIyKNx4EtEREREREQejQNfIiIiIiIi8mgc+BIREREREZFH+/9XsYpcUMTc+AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import xarray\n", + "\n", + "response_bay[\"chl\"].isel(depth=10).plot(col=\"time\", col_wrap=3)\n", + "plt.suptitle(\"Temporal evolution at sea surface\", fontsize=20, y=1.2)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Copernicus Marine toolbox - Get\n", + "\n", + "To download the original data (or native data), you can use the **`get`** command.\n", + "\n", + "For more information, see the [page about get](get-page) of the documentation. You can also check the dedicated pages for the [command line interface](cli-get) or the {func}`Python interface `.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T14:48:09Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", + "INFO - 2024-10-18T14:48:09Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T14:48:09Z - Service was not specified, the default one was selected: \"original-files\"\n", + "INFO - 2024-10-18T14:48:09Z - Downloading using service original-files...\n", + "INFO - 2024-10-18T14:48:10Z - Listing files on remote server...\n", + "1it [00:00, 1.09it/s]\n", + "INFO - 2024-10-18T14:48:11Z - You requested the download of the following files:\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221001_20221001_R20221017_AN04.nc - 82.48 MB - 2023-11-12T14:01:32.377000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221002_20221002_R20221017_AN05.nc - 82.77 MB - 2023-11-12T14:01:38.666000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221003_20221003_R20221017_AN06.nc - 82.81 MB - 2023-11-12T14:01:37.923000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221004_20221004_R20221017_AN07.nc - 82.64 MB - 2023-11-12T14:01:40.222000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221005_20221005_R20221024_AN01.nc - 82.31 MB - 2023-11-12T14:01:38.078000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221006_20221006_R20221024_AN02.nc - 82.45 MB - 2023-11-12T14:01:48.759000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221007_20221007_R20221024_AN03.nc - 82.41 MB - 2023-11-12T14:01:43.316000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221008_20221008_R20221024_AN04.nc - 82.48 MB - 2023-11-12T14:01:46.301000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221009_20221009_R20221024_AN05.nc - 82.24 MB - 2023-11-12T14:01:47.611000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221010_20221010_R20221024_AN06.nc - 82.04 MB - 2023-11-12T14:01:49.426000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221011_20221011_R20221024_AN07.nc - 82.18 MB - 2023-11-12T14:01:53.948000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221012_20221012_R20221031_AN01.nc - 82.30 MB - 2023-11-12T14:01:59.761000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221013_20221013_R20221031_AN02.nc - 82.36 MB - 2023-11-12T14:01:59.417000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221014_20221014_R20221031_AN03.nc - 82.37 MB - 2023-11-12T14:01:58.859000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221015_20221015_R20221031_AN04.nc - 82.11 MB - 2023-11-12T14:02:01.737000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221016_20221016_R20221031_AN05.nc - 82.03 MB - 2023-11-12T14:02:11.336000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221017_20221017_R20221031_AN06.nc - 81.82 MB - 2023-11-12T14:02:12.479000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221018_20221018_R20221031_AN07.nc - 81.89 MB - 2023-11-12T14:02:07.042000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221019_20221019_R20221107_AN01.nc - 81.66 MB - 2023-11-12T14:02:09.998000Z\n", + "s3://mdl-native-10/native/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221020_20221020_R20221107_AN02.nc - 81.50 MB - 2023-11-12T14:02:13.928000Z\n", + "Printed 20 out of 757 files\n", + "\n", + "Total size of the download: 65.60 GB\n", + "\n", + "\n", + "Do you want to proceed with download? [Y/n]:" + ] + } + ], + "source": [ + "# Download all the files from a dataset\n", + "copernicusmarine.get(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\") " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T15:19:27Z - Dataset version was not specified, the latest one was selected: \"202211\"\n", + "INFO - 2024-10-18T15:19:27Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T15:19:27Z - Service was not specified, the default one was selected: \"original-files\"\n", + "INFO - 2024-10-18T15:19:27Z - Downloading using service original-files...\n", + "INFO - 2024-10-18T15:19:27Z - Listing files on remote server...\n", + "1it [00:00, 1.90it/s]\n", + "Downloading files: 100%|██████████| 2/2 [00:05<00:00, 2.75s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221001_20221001_R20221017_AN04.nc\n", + "data/IBI_ANALYSISFORECAST_BGC_005_004/cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m_202211/2022/10/CMEMS_v7r1_IBI_BIO_NRT_NL_01dav_20221003_20221003_R20221017_AN06.nc\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "# You can combine the filter and regex argument (it will be as an \"OR\" condition)\n", + "response = copernicusmarine.get(dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", \n", + " filter=\"*01dav_20221001_20221001_R20221017_AN04*\", \n", + " regex=\"01dav_20221003_20221003_R20221017_AN06\", \n", + " force_download=True, # no need to prompt\n", + " output_directory=\"data\", # we can specify the output directory\n", + " overwrite_output_data=True, # if files already exist, they will be overwritten\n", + " )\n", + "\n", + "for file_metadata in response.files:\n", + " print(file_metadata.output) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now if you have downloaded this data, but you want to check if your data is up to date you can use the `sync` option. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO - 2024-10-18T15:20:33Z - You forced selection of dataset version \"202211\"\n", + "INFO - 2024-10-18T15:20:33Z - Dataset part was not specified, the first one was selected: \"default\"\n", + "INFO - 2024-10-18T15:20:33Z - Service was not specified, the default one was selected: \"original-files\"\n", + "INFO - 2024-10-18T15:20:33Z - Downloading using service original-files...\n", + "INFO - 2024-10-18T15:20:33Z - Listing files on remote server...\n", + "1it [00:00, 1.91it/s]\n", + "INFO - 2024-10-18T15:20:33Z - No data to download\n" + ] + } + ], + "source": [ + "response = copernicusmarine.get(\n", + " dataset_id=\"cmems_mod_ibi_bgc_anfc_0.027deg-3D_P1D-m\", \n", + " filter=\"*01dav_20221001_20221001_R20221017_AN04*\", \n", + " regex=\"01dav_20221003_20221003_R20221017_AN06\", \n", + " dataset_version=\"202211\", \n", + " force_download=True,\n", + " output_directory=\"data\",\n", + " sync=True,\n", + " sync_delete=True, # delete the files that are not in the server\n", + " max_concurrent_requests=0, # not in parallel\n", + " # can be useful to be sure to not overload the process \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/usage/quickstart.rst b/doc/usage/quickstart.rst deleted file mode 100644 index 41bcf7b3..00000000 --- a/doc/usage/quickstart.rst +++ /dev/null @@ -1,8 +0,0 @@ -================= -Quick start -================= - -Under construction ... - -.. image:: ../_static/under_construction.gif - :align: center diff --git a/doc/usage/subset-usage.rst b/doc/usage/subset-usage.rst index d652bcfc..8b36aa3f 100644 --- a/doc/usage/subset-usage.rst +++ b/doc/usage/subset-usage.rst @@ -1,3 +1,6 @@ +.. _subset-page: + +=================== Command ``subset`` =================== diff --git a/doc/usage/usage.rst b/doc/usage/usage.rst index 9c7d0094..1f82fcc6 100644 --- a/doc/usage/usage.rst +++ b/doc/usage/usage.rst @@ -3,7 +3,7 @@ Usage and technical details .. toctree:: - quickstart + quickoverview login-usage describe-usage subset-usage