From d504aa3955508797a41fa7021372c041bd1097dd Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Fri, 6 Mar 2026 17:25:21 +0100 Subject: [PATCH 1/9] chore: migration to MyST-nb/sphinx-design --- .gitignore | 3 + docs/_static/css/custom.css | 27 ++++- docs/_static/notebook_version.js | 63 +++++++++++ docs/_static/oceano/notebook_versions.json | 126 +++++++++++++++++++++ docs/changelog_oceano.rst | 4 + docs/cnes.md | 122 ++++++++++++++++++++ docs/cnes.rst | 34 ------ docs/conf.py | 82 +++++++------- docs/index.md | 59 ++++++++++ docs/index.rst | 37 ------ docs/scripts/generate_thumbnails.py | 43 +++++++ 11 files changed, 487 insertions(+), 113 deletions(-) create mode 100644 docs/_static/notebook_version.js create mode 100644 docs/_static/oceano/notebook_versions.json create mode 100644 docs/changelog_oceano.rst create mode 100644 docs/cnes.md delete mode 100644 docs/cnes.rst create mode 100644 docs/index.md delete mode 100644 docs/index.rst create mode 100644 docs/scripts/generate_thumbnails.py diff --git a/.gitignore b/.gitignore index fd5988b..61933ce 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,9 @@ instance/ # Sphinx documentation _build docs/_build/ +docs/build +docs/_static/thumbs +docs/jupyter_execute # PyBuilder .pybuilder/ diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index ffe18b5..f1e6d2d 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -10,4 +10,29 @@ } .wy-menu-vertical p.caption{ color:#43a299 - } \ No newline at end of file + } + +/* fixe la hauteur des thumbnails et garde le ratio */ +.sd-card-img-top { + width: 75%; + height: 100px; /* hauteur fixe */ + margin: 0 auto; /* centre horizontalement */ + object-fit: cover; /* recadrage si nécessaire */ + display: block; +} + +.sd-card { + width: 90%; + max-width: 250px; + padding: 0.5rem; + margin: 0 auto; + font-size: 0.9rem; + overflow: hidden; + position: relative +} + +.sd-card-grid { + display: flex; + flex-wrap: wrap; /* grid classique */ + gap: 1rem; /* espace entre cartes */ +} diff --git a/docs/_static/notebook_version.js b/docs/_static/notebook_version.js new file mode 100644 index 0000000..8ef3030 --- /dev/null +++ b/docs/_static/notebook_version.js @@ -0,0 +1,63 @@ +document.addEventListener("DOMContentLoaded", async () => { + try { + const downloadLink = document.querySelector(".admonition.note a.download"); + if (!downloadLink) return; + + const currentFile = downloadLink.getAttribute("href"); + const notebookName = currentFile.replace(".ipynb", ""); + console.log(notebookName); + + const response = await fetch("../_static/notebook_versions.json"); + if (!response.ok) return; + + const data = await response.json(); + const nbData = data[notebookName]; + if (!nbData || !nbData.versions) return; + console.log(nbData.versions); + + const sortedVersions = nbData.versions.sort((a, b) => + new Date(b.date) - new Date(a.date) + ); + + const previousVersions = sortedVersions.slice(1); + console.log(previousVersions); + if (previousVersions.length === 0) return; + + const container = document.querySelector(".other-versions-container"); + if (!container) return; + + const title = document.createElement("h4"); + title.textContent = "Previous versions:"; + container.appendChild(title); + + const ul = document.createElement("ul"); + ul.className = "previous-versions"; + + previousVersions.forEach(v => { + const li = document.createElement("li"); + const a = document.createElement("a"); + + a.href = v.file + "?raw=true"; + a.textContent = `${v.date} (${v.commit})`; + a.setAttribute("download", getFilename(v.file)); + li.appendChild(a); + + if (v.message) { + const span = document.createElement("span"); + span.textContent = ` — ${v.message}`; + li.appendChild(span); + } + + ul.appendChild(li); + }); + + container.appendChild(ul); + + function getFilename(pathOrUrl) { + return pathOrUrl.split("/").pop(); + } + + } catch (err) { + console.warn("Erreur lors du remplissage des anciennes versions :", err); + } +}); diff --git a/docs/_static/oceano/notebook_versions.json b/docs/_static/oceano/notebook_versions.json new file mode 100644 index 0000000..dacf110 --- /dev/null +++ b/docs/_static/oceano/notebook_versions.json @@ -0,0 +1,126 @@ +{ + "ex_AWS_Cloud_SWOT_L2_Ocean_podaac": { + "latest": "2024-07-02", + "versions": [ + { + "date": "2024-07-02", + "commit": "6b90908", + "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_AWS_Cloud_SWOT_L2_Ocean_podaac.ipynb" + } + ] + }, + "ex_Localmachine_SWOT_L2_Ocean_podaac": { + "latest": "2024-07-02", + "versions": [ + { + "date": "2024-07-02", + "commit": "6b90908", + "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_Localmachine_SWOT_L2_Ocean_podaac.ipynb" + } + ] + }, + "ex_SWOT_quality_flag_demo": { + "latest": "2024-07-02", + "versions": [ + { + "date": "2024-07-02", + "commit": "6b90908", + "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_SWOT_quality_flag_demo.ipynb" + } + ] + }, + "ex_subset_swot_lr": { + "latest": "2025-12-11", + "versions": [ + { + "date": "2025-12-11", + "commit": "b9aa239", + "message": "refactor: following refactoring using cnes tools", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_lr.ipynb" + } + ] + }, + "ex_search_swot": { + "latest": "2025-12-19", + "versions": [ + { + "date": "2025-12-19", + "commit": "9465152", + "message": "feat: notebooks with fcollections", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/9465152/ex_search_swot.ipynb" + }, + { + "date": "2024-10-23", + "commit": "c809d8b", + "message": "update thumbnails choice", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/c809d8b/ex_search_swot.ipynb" + }, + { + "date": "2024-10-22", + "commit": "f239f75", + "message": "Added tutorial to subset L2 LR Unsmoothed data via AVISO's FTP Server", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/f239f75/ex_search_swot.ipynb" + }, + { + "date": "2024-10-21", + "commit": "97a296b", + "message": "minor updates", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/97a296b/ex_search_swot.ipynb" + } + ] + }, + "ex_subset_swot_l2_unsmoothed": { + "latest": "2025-12-11", + "versions": [ + { + "date": "2025-12-11", + "commit": "b9aa239", + "message": "refactor: following refactoring using cnes tools", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_l2_unsmoothed.ipynb" + } + ] + }, + "ex_subset_swot_l3_unsmoothed": { + "latest": "2025-12-11", + "versions": [ + { + "date": "2025-12-11", + "commit": "b9aa239", + "message": "refactor: following refactoring using cnes tools", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_l3_unsmoothed.ipynb" + } + ] + }, + "ex_swot_l3_unsmoothed": { + "latest": "2025-12-19", + "versions": [ + { + "date": "2025-12-19", + "commit": "9465152", + "message": "feat: notebooks with fcollections", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/9465152/ex_swot_l3_unsmoothed.ipynb" + }, + { + "date": "2025-12-11", + "commit": "b9aa239", + "message": "refactor: following refactoring using cnes tools", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_swot_l3_unsmoothed.ipynb" + }, + { + "date": "2025-06-16", + "commit": "0d2a6f8", + "message": "updated tutorials with new TDS serveur version + products versions", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/0d2a6f8/ex_swot_l3_unsmoothed.ipynb" + }, + { + "date": "2024-11-18", + "commit": "dbccb90", + "message": "Added a tutorial on Swot L3 Unsmoothed", + "raw_url": "https://raw.githubusercontent.com/ORG/REPO/dbccb90/ex_swot_l3_unsmoothed.ipynb" + } + ] + } +} \ No newline at end of file diff --git a/docs/changelog_oceano.rst b/docs/changelog_oceano.rst new file mode 100644 index 0000000..96ad490 --- /dev/null +++ b/docs/changelog_oceano.rst @@ -0,0 +1,4 @@ +Changelog +========= + +.. notebook-changelog:: oceano diff --git a/docs/cnes.md b/docs/cnes.md new file mode 100644 index 0000000..7d10de1 --- /dev/null +++ b/docs/cnes.md @@ -0,0 +1,122 @@ +# SWOT Ocean Data Tutorials + +## Access to data + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Search SWOT data +:link: SWOT-Oceanography/ex_search_swot +:link-type: doc +:img-top: _static/thumbs/ex_search_swot.png + +Example showing how to search for SWOT ocean data. +``` + +```{grid-item-card} Download SWOT data from AVISO +:link: SWOT-Oceanography/ex_aviso_download_swot +:link-type: doc +:img-top: _images/aviso.png + +Example demonstrating how to download SWOT data from AVISO. +``` +```` + +```{toctree} +:hidden: + +SWOT-Oceanography/ex_search_swot +SWOT-Oceanography/ex_aviso_download_swot +``` + +--- + +## 2-km data + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Basic L2 startup +:link: SWOT-Oceanography/ex_swot_l2_basic_startup +:link-type: doc +:img-top: _static/thumbs/ex_swot_l2_basic_startup.png +``` + +```{grid-item-card} L3 startup +:link: SWOT-Oceanography/ex_swot_l3_startup +:link-type: doc +:img-top: _static/thumbs/ex_swot_l3_startup.png +``` +```` + +```{toctree} +:hidden: + +SWOT-Oceanography/ex_swot_l2_basic_startup +SWOT-Oceanography/ex_swot_l3_startup +``` + +--- + +## 250-m data + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} L3 unsmoothed data +:link: SWOT-Oceanography/ex_swot_l3_unsmoothed +:link-type: doc +:img-top: _static/thumbs/ex_swot_l3_unsmoothed.png +``` + +```{grid-item-card} Subset L3 unsmoothed (AVISO TDS) +:link: SWOT-Oceanography/ex_subset_swot_l3_unsmoothed_aviso_tds +:link-type: doc +:img-top: _static/thumbs/ex_subset_swot_l3_unsmoothed_aviso_tds.png +``` + +```{grid-item-card} Subset L2 unsmoothed (AVISO TDS) +:link: SWOT-Oceanography/ex_subset_swot_l2_unsmoothed_aviso_tds +:link-type: doc +:img-top: _static/thumbs/ex_subset_swot_l2_unsmoothed_aviso_tds.png +``` + +```{grid-item-card} Sea ice classification +:link: SWOT-Oceanography/ex_sea_ice_classification +:link-type: doc +:img-top: _static/thumbs/ex_sea_ice_classification.png +``` +```` + +```{toctree} +:hidden: + +SWOT-Oceanography/ex_swot_l3_unsmoothed +SWOT-Oceanography/ex_subset_swot_l3_unsmoothed_aviso_tds +SWOT-Oceanography/ex_subset_swot_l2_unsmoothed_aviso_tds +SWOT-Oceanography/ex_sea_ice_classification +``` + +--- + +## Wind Wave data + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} L3 LR Wind Wave startup +:link: SWOT-Oceanography/ex_swot_l3_lr_ww_startup +:link-type: doc +:img-top: _static/thumbs/ex_swot_l3_lr_ww_startup.png +``` +```` + +```{toctree} +:hidden: + +SWOT-Oceanography/ex_swot_l3_lr_ww_startup +``` + +```{image} aviso.png +:class: hidden +``` diff --git a/docs/cnes.rst b/docs/cnes.rst deleted file mode 100644 index b1b033f..0000000 --- a/docs/cnes.rst +++ /dev/null @@ -1,34 +0,0 @@ -SWOT Ocean Data Tutorials -========================= - -.. nbgallery:: - :caption: Access to data - :name: cnes_data_gallery - - SWOT-Oceanography/ex_search_swot.ipynb - SWOT-Oceanography/ex_aviso_download_swot.ipynb - -.. nbgallery:: - :caption: 2-km data - :name: cnes_l2_gallery - - SWOT-Oceanography/ex_swot_l2_basic_startup.ipynb - SWOT-Oceanography/ex_swot_l3_startup.ipynb - -.. nbgallery:: - :caption: 250-m data - :name: cnes_l3_gallery - - SWOT-Oceanography/ex_swot_l3_unsmoothed.ipynb - SWOT-Oceanography/ex_subset_swot_l3_unsmoothed_aviso_tds.ipynb - SWOT-Oceanography/ex_subset_swot_l2_unsmoothed_aviso_tds.ipynb - SWOT-Oceanography/ex_sea_ice_classification.ipynb - -.. nbgallery:: - :caption: Wind Wave data - :name: cnes_l3_ww_gallery - - SWOT-Oceanography/ex_swot_l3_lr_ww_startup.ipynb - -.. image:: aviso.png - :class: hidden diff --git a/docs/conf.py b/docs/conf.py index 88b42eb..c5512aa 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,55 +15,43 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ - 'nbsphinx', + "myst_nb", + "sphinx_design", 'sphinx.ext.mathjax', - # 'sphinx_gallery.gen_gallery', 'sphinx_tabs.tabs', ] -# -- Extension configuration ------------------------------------------------- -# sphinx_gallery_conf = dict( -# # It is important to follow the auto_* convention, because the gitlab CI -# # pipeline uses it to retrieve the notebook executions. -# examples_dirs=['../dummy'], -# gallery_dirs=['auto/dummy'], -# filename_pattern=r'[\\\/]ex_', -# only_warn_on_example_error=True, -# remove_config_comments=True, -# nested_sections=False, -# # Do not inspect global variables in code blocks. The links are useful but -# # their styling makes them too overwhelming -# inspect_global_variables=False, -# # ignore_repr_types=r'*DynamicMap*' -# ) - # Don't add .txt suffix to source files: html_sourcelink_suffix = '' # This is processed by Jinja2 and inserted before each notebook -nbsphinx_prolog = r""" -{% set docname = 'doc/' + env.doc2path(env.docname, base=None) %} - -.. raw:: html - -
- Download notebook. -
-""" - -nbsphinx_epilog = nbsphinx_prolog - -nbsphinx_thumbnails = { - 'SWOT-Oceanography/ex_aviso_download_swot': '_images/aviso.png', - 'SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples': '_static/Hydrocron_logo.png', - 'SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package': '_static/earthaccess_logo.png', - 'SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata': '_static/SWORD_River_reaches.png', - 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata': '_static/Raster_QF_example.png', - 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata': '_static/Raster_QF_example.png', - 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr': '_static/zarr.png', - 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg': '_static/geopkg.png', - 'SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations': '_static/from_pixc_virtual_stations_example.png', -} +# nbsphinx_prolog = r""" +# {% set docname = 'doc/' + env.doc2path(env.docname, base=None) %} +# +# .. raw:: html +# +#
+# Download notebook. +#
+# """ + +# nbsphinx_epilog = nbsphinx_prolog + +# nbsphinx_thumbnails = { +# 'SWOT-Oceanography/ex_aviso_download_swot': '_images/aviso.png', +# 'SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples': '_static/Hydrocron_logo.png', +# 'SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package': '_static/earthaccess_logo.png', +# 'SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata': '_static/SWORD_River_reaches.png', +# 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata': '_static/Raster_QF_example.png', +# 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata': '_static/Raster_QF_example.png', +# 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr': '_static/zarr.png', +# 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg': '_static/geopkg.png', +# 'SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations': '_static/from_pixc_virtual_stations_example.png', +# } + +nb_execution_mode = "off" +nb_execution_timeout = 120 +nb_execution_allow_errors = False templates_path = ['_templates'] # List of patterns, relative to source directory, that match files and @@ -107,3 +95,15 @@ # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] + +import subprocess +from pathlib import Path + +def generate_thumbnails(app): + + script = Path(__file__).parent / "scripts" / "generate_thumbnails.py" + subprocess.run(["python", str(script)]) + + +def setup(app): + app.connect("builder-inited", generate_thumbnails) \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..042794e --- /dev/null +++ b/docs/index.md @@ -0,0 +1,59 @@ +# Welcome to SWOT Gallery's documentation! + +## Galleries + +````{grid} 1 1 2 2 +:gutter: 2 + +```{grid-item-card} CNES Gallery +:link: cnes +:link-type: doc + +Examples and notebooks related to CNES workflows. +``` + +```{grid-item-card} Hydrology Gallery +:link: hydrology/hydrology +:link-type: doc + +Hydrology-related analyses and examples. +``` +```` + +```{toctree} +:hidden: +:maxdepth: 1 + +cnes +hydrology/hydrology +``` + +--- + +## Products + +````{grid} 1 1 2 2 +:gutter: 2 + +```{grid-item-card} L3 LR SSH +:link: l3_lr_ssh/index +:link-type: doc + +Documentation and examples for the Level-3 Low Resolution SSH product. +``` +```` + +```{toctree} +:hidden: +:maxdepth: 1 + +l3_lr_ssh/index +``` + +--- + +## Indices and tables + +* {ref}`genindex` +* {ref}`modindex` +* {ref}`search` diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index c82898a..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. SWOT Gallery documentation master file, created by - sphinx-quickstart on Fri May 31 09:55:29 2024. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to SWOT Gallery's documentation! -======================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - -.. toctree:: - :caption: Python scripts test - :maxdepth: 2 - - auto/dummy/index - -.. toctree:: - :caption: Galleries - :maxdepth: 1 - - cnes - hydrology/hydrology - -.. toctree:: - :caption: Products - :maxdepth: 1 - - l3_lr_ssh/index - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/scripts/generate_thumbnails.py b/docs/scripts/generate_thumbnails.py new file mode 100644 index 0000000..3e4aa3f --- /dev/null +++ b/docs/scripts/generate_thumbnails.py @@ -0,0 +1,43 @@ + +import json +import base64 +from pathlib import Path +from PIL import Image +from io import BytesIO + +NOTEBOOK_DIR = Path("docs/SWOT-Oceanography") +THUMB_DIR = Path("docs/_static/thumbs") + +THUMB_DIR.mkdir(parents=True, exist_ok=True) + + +def extract_thumbnail(nb_path, thumb_path): + with open(nb_path) as f: + nb = json.load(f) + + for cell in nb["cells"]: + for output in cell.get("outputs", []): + data = output.get("data", {}) + if "image/png" in data: + + img_bytes = base64.b64decode(data["image/png"]) + img = Image.open(BytesIO(img_bytes)) + + img.thumbnail((400, 300)) + img.save(thumb_path) + + return True + + return False + + +def main(): + for nb in NOTEBOOK_DIR.rglob("*.ipynb"): + thumb = THUMB_DIR / f"{nb.stem}.png" + + if not thumb.exists(): + extract_thumbnail(nb, thumb) + + +if __name__ == "__main__": + main() \ No newline at end of file From f1692ab6775d29df5164dc846b843c215db4aae8 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Tue, 10 Mar 2026 15:00:09 +0100 Subject: [PATCH 2/9] chore: oceano gallery migrated to myst + added a tools page --- docs/_static/aviso_authent.png | Bin 0 -> 32893 bytes docs/_static/css/custom.css | 79 +++++++++++++++++--------- docs/_static/opendap_url.png | Bin 0 -> 51229 bytes docs/cnes.md | 4 -- docs/conf.py | 6 +- docs/index.md | 24 +++++++- docs/requirements.txt | 6 +- docs/scripts/generate_thumbnails.py | 47 ++++++++++++--- docs/scripts/insert_download_links.py | 17 ++++++ docs/tools.md | 31 ++++++++++ 10 files changed, 171 insertions(+), 43 deletions(-) create mode 100644 docs/_static/aviso_authent.png create mode 100644 docs/_static/opendap_url.png create mode 100644 docs/scripts/insert_download_links.py create mode 100644 docs/tools.md diff --git a/docs/_static/aviso_authent.png b/docs/_static/aviso_authent.png new file mode 100644 index 0000000000000000000000000000000000000000..f7674c167736df5ca3d293c5425c763831562d59 GIT binary patch literal 32893 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 literal 0 HcmV?d00001 diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index f1e6d2d..796c9ea 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -1,38 +1,65 @@ .wy-side-nav-search, .wy-nav-top, .wy-nav-side { background: #0b1817; - } - .wy-nav-side{ +} +.wy-nav-side{ color: #0b1817; - } - .wy-nav-content { - max-width: 80% !important; - background: #fefefe - } - .wy-menu-vertical p.caption{ +} +.wy-nav-content { + max-width: 80% !important; + background: #fefefe +} +.wy-menu-vertical p.caption{ color:#43a299 - } +} + +/* ---- Layout général des cards ---- */ + +.sd-card { + height: 100%; + display: flex; + flex-direction: column; +} + +/* ---- Image thumbnail ---- */ -/* fixe la hauteur des thumbnails et garde le ratio */ .sd-card-img-top { - width: 75%; - height: 100px; /* hauteur fixe */ - margin: 0 auto; /* centre horizontalement */ - object-fit: cover; /* recadrage si nécessaire */ - display: block; + width: 100%; + height: 160px !important; /* hauteur fixe */ + object-fit: contain !important; /* image entièrement visible */ + object-position: center; /* centre l’image */ + background: #ffffff !important; + padding: 8px; /* petit espace autour */ } -.sd-card { - width: 90%; - max-width: 250px; - padding: 0.5rem; - margin: 0 auto; - font-size: 0.9rem; - overflow: hidden; - position: relative + + +/* conteneur du contenu */ +.sd-card-body { + flex-grow: 1; + display: flex; + flex-direction: column; } -.sd-card-grid { +/* ---- Titre ---- */ + +.sd-card-title { + min-height: 60px; display: flex; - flex-wrap: wrap; /* grid classique */ - gap: 1rem; /* espace entre cartes */ + align-items: center; + justify-content: center; + text-align: center; } + +/* ---- Texte description ---- */ + +.sd-card-text { + flex-grow: 1; +} + +/* ---- Petit effet hover ---- */ + +.sd-card:hover { + transform: translateY(-3px); + transition: 0.2s ease; + box-shadow: 0 4px 14px rgba(0,0,0,0.1); +} \ No newline at end of file diff --git a/docs/_static/opendap_url.png b/docs/_static/opendap_url.png new file mode 100644 index 0000000000000000000000000000000000000000..cc846299d30d8ed4c2c408517ad744cf1f5e39ee GIT binary patch literal 51229 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

Kjt; zmEtcviz5ac_Z~Y{^wM85W#E#iA<>82rsw~%7xb7z7`m;lfMDdhwcnf{x#Q96i1gW2 zWOkk$49iH~d$F<~w>7;OYN2*dklmIUv6T(u*KgwYA+8ZXl=u!mpeEtg(snO7qI>Hq zS>u|SBv8Sz&!0dhD(HJRq}nZOr!GaYtlyik8|+uIGR7%#QU_KB6jD`8QinTUPQ0Px zxpSw-t3l<~DC>kq;6j5uTA{~z#V^R(@oNBYvEa0g&m~FV=L;LA7f>pIVb$8mj$6%O zQ*8?Q{@q4OaFb((c02v?R_YfeeL$#A5ER3)prA?jljhFm&IRHgI<&I2UgWk8luAEq z>khGMZ;3V_)Q2n0=~E#`g2sMU-1zF)QDl1r458th=0}1r%aC;yW@+S#Qag(hY4J|m zX$}RbC-5Y$9@>DF7D7?&?hFrA)d3L)P4J<x#=sn~u2K{eaNawN*jr3ts+V{p2l-Pg zE<+s36txI@=Pd69U>%WlGPr&H`VHT=a4x*K)00T2ue1RCPYsOUhg$A9o=e&B{Mk2& zk~TBV2B^T>(t!rQdb)6{^(B|~PUB>hO(>)$0S!V=sssjXO3T4vr?=95&2fqqfiC3r z`G?WFUcnL`h2Y-3(jgjDB2qPKb>ae2IZ{uaQF8YC3kC+(xJY`ra?gZL6=cZ<5Iy)1 zgIQt&z$=w6g26EBL&XAT*2|?S*Xo^dSjOPd6MHA|Kp^B5flGKAtIgu76o0ffUB)l! zt9~ELGR&+HP$&uL$SgE!@*zD$1zxLpF-=^0!m@NsS$(>e(qFi82YEXdB`aj&qYW3Zdf7p zF;E3I{?v4)G=p*N$fEQ#^Z?MKq`}eq%|Xx7?BfP==Yb$K!@5 z)*Rr63Wej4&F zc+L6tm2vw8-vF#Qy-bApnY4pC+xIHh4zVGLgAfs<^art*E7a+lt7Xeap0lFysfWg% zRmmkz2dvd^{2#NpG(DYPQfpdEYrmLrrC`EA-eOw_JPUY1sYi#N7G`@*M_#WJ*hy9POA3 zm0cCi`t}+gixey;E!+F^=~;nS*Sr>y$FL{!?|irp$B4@OktUe=X?iPqI>bwTXbe~z zj`Z+28k)0s`6^ZP9xS9in{!DSeJ=o1s`^@?H9+8Dy*5mc;p)wx_tS`cZJWUm*ZVu; zse4Jw__(HB#lVKuQ&!F~udm#Jbo-rIS7#(qC3!IV#gX4l-KDs;7i_Kga@Bg?-+f~J zlOj)!r}_Icy{=!j?9$=3CJKv>iD)!^<85vnWD0|&m_6RObl1N;fP-p@%0Zv4P6GV~ z_Zo8jdE|PK?JY86rb$rjEIfsPsWEC4CgEj@6JfW7r_XV?6H;Bbf{}FAi}yqjXV_v( zurJMihs+R{@Egk#a9^Q5G%gq5<6^ij{YC!`zs23_b0hFnlLOWUwUZ@*8Rz*kqDI^O zVIzyvS3y!x@PqbNvV1HEzd9HU*4Q_^;r@s2slu*o1Bg&_D7BZtO@(+3t0#Yw49Ude zr%`p2222{f7IJUO6HMH&*-=DXeW=R=vZ*Y7mA*oDaA^Rs$b55Dzf^@lmCGJA#(i?m zfWI6Zv-a{#i$3Hy>b}UO0e+NTIiI-_2GT<{%wcQSY3iGwrx-U-ZOe6QwY_lLeb+P>~)=LY+_EXOD8U(aM6&d`oK09zP`M?&yq#ss{}6G`KJ&*FIWsSk#OO zYlB{;uW&X%=v;$Q_hgO>T?^4B4XX{k64icdPu64c&*W4`cpU&mseTRBV-GfRljyaj zNVeGI`X6+T_fF%N^m{rjmb%G3ZWOp$_|b9#02#@YO(uGJoeB1kb@?eIRzlS5F;iir zv38>LKNw`HYO9E}(;WUbhrZ+qyy!^t&Tu0@_z7dbjgHC7=u?VLy5(^A2j!xT`@a

!m_rIhxFvVd%!*?(fXVgTVoDTTZ^K>q+~a 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 z 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

-$7C;-3d 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 literal 0 HcmV?d00001 diff --git a/docs/cnes.md b/docs/cnes.md index 7d10de1..b212c17 100644 --- a/docs/cnes.md +++ b/docs/cnes.md @@ -9,16 +9,12 @@ :link: SWOT-Oceanography/ex_search_swot :link-type: doc :img-top: _static/thumbs/ex_search_swot.png - -Example showing how to search for SWOT ocean data. ``` ```{grid-item-card} Download SWOT data from AVISO :link: SWOT-Oceanography/ex_aviso_download_swot :link-type: doc :img-top: _images/aviso.png - -Example demonstrating how to download SWOT data from AVISO. ``` ```` diff --git a/docs/conf.py b/docs/conf.py index c5512aa..3414bba 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -104,6 +104,10 @@ def generate_thumbnails(app): script = Path(__file__).parent / "scripts" / "generate_thumbnails.py" subprocess.run(["python", str(script)]) +def insert_links(app): + script = Path(__file__).parent / "scripts" / "insert_download_links.py" + subprocess.run(["python", str(script)]) def setup(app): - app.connect("builder-inited", generate_thumbnails) \ No newline at end of file + app.connect("builder-inited", generate_thumbnails) + app.connect("builder-inited", insert_links) \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 042794e..c534587 100644 --- a/docs/index.md +++ b/docs/index.md @@ -30,7 +30,7 @@ hydrology/hydrology --- -## Products +## Ocean Products ````{grid} 1 1 2 2 :gutter: 2 @@ -52,6 +52,28 @@ l3_lr_ssh/index --- +## Ocean Tools + +````{grid} 1 1 2 2 +:gutter: 2 + +```{grid-item-card} Tools +:link: tools +:link-type: doc + +Useful tools developed around satellite altimetry and ocean data processing. +``` +```` + +```{toctree} +:hidden: +:maxdepth: 1 + +tools +``` + +--- + ## Indices and tables * {ref}`genindex` diff --git a/docs/requirements.txt b/docs/requirements.txt index 3736c73..c148c47 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,7 +1,9 @@ numpy -nbsphinx +myst-nb +myst-parser +sphinx-design +nbformat sphinx>=6,<8 -sphinx-gallery sphinx-tabs markupsafe==2.0.1 jinja2==3.1 diff --git a/docs/scripts/generate_thumbnails.py b/docs/scripts/generate_thumbnails.py index 3e4aa3f..a92c214 100644 --- a/docs/scripts/generate_thumbnails.py +++ b/docs/scripts/generate_thumbnails.py @@ -1,4 +1,3 @@ - import json import base64 from pathlib import Path @@ -11,22 +10,52 @@ THUMB_DIR.mkdir(parents=True, exist_ok=True) +def get_image_from_cell(cell): + """Return PIL image if cell contains a PNG output.""" + for output in cell.get("outputs", []): + data = output.get("data", {}) + if "image/png" in data: + img_data = data["image/png"] + + # parfois stocké sous forme de liste + if isinstance(img_data, list): + img_data = "".join(img_data) + + img_bytes = base64.b64decode(img_data) + return Image.open(BytesIO(img_bytes)) + + return None + + def extract_thumbnail(nb_path, thumb_path): with open(nb_path) as f: nb = json.load(f) + thumbnail_cell = None + fallback_cell = None + for cell in nb["cells"]: - for output in cell.get("outputs", []): - data = output.get("data", {}) - if "image/png" in data: - img_bytes = base64.b64decode(data["image/png"]) - img = Image.open(BytesIO(img_bytes)) + # vérifier tag thumbnail + tags = cell.get("metadata", {}).get("tags", []) + if "thumbnail" in tags and thumbnail_cell is None: + thumbnail_cell = cell + + # garder première cellule avec image comme fallback + if fallback_cell is None: + if get_image_from_cell(cell) is not None: + fallback_cell = cell + + # priorité au tag thumbnail + target_cell = thumbnail_cell if thumbnail_cell else fallback_cell - img.thumbnail((400, 300)) - img.save(thumb_path) + if target_cell: + img = get_image_from_cell(target_cell) - return True + if img: + img.thumbnail((400, 300)) + img.save(thumb_path) + return True return False diff --git a/docs/scripts/insert_download_links.py b/docs/scripts/insert_download_links.py new file mode 100644 index 0000000..8d62204 --- /dev/null +++ b/docs/scripts/insert_download_links.py @@ -0,0 +1,17 @@ +import glob, os, nbformat + +def main(): + pattern = "docs/SWOT-Oceanography/*.ipynb" + for fn in glob.glob(pattern): + nb = nbformat.read(fn, as_version=4) + basename = os.path.basename(fn) + link = f"[Download notebook]({basename})" + cell = nbformat.v4.new_markdown_cell(link) + + if not any(c.cell_type=="markdown" and c.source==link for c in nb.cells): + nb.cells.insert(0, cell) + nb.cells.append(cell) + nbformat.write(nb, fn) + +if __name__=="__main__": + main() \ No newline at end of file diff --git a/docs/tools.md b/docs/tools.md new file mode 100644 index 0000000..d4dda57 --- /dev/null +++ b/docs/tools.md @@ -0,0 +1,31 @@ +# Ocean Tools + +Below is a collection of useful tools for working with satellite altimetry and oceanographic data. Each card links to the tool’s repository and documentation when available. + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Altimetry Downloader Aviso +:link: https://cnes.github.io/altimetry-downloader-aviso/ +:link-type: url +:img-top: _static/thumbs/altimetry-downloader-aviso.png + +Python tool to simplify downloading datasets from the CNES Aviso data center. Provides command-line utilities and Python interfaces to automate altimetry data acquisition. +``` + +```{grid-item-card} Altimetry-io +:link: https://github.com/CNES/altimetry-io +:link-type: repo +:img-top: _static/thumbs/altimetry-io.png + +Python library for reading and handling satellite altimetry datasets, including NetCDF products, variables, and metadata. +Relies on **FCollections** to efficiently manage and read NetCDF datasets. +``` + +```{grid-item-card} FCollections +:link: https://cnes.github.io/fcollections/ +:link-type: url +:img-top: _static/thumbs/fcollections.png + +Lightweight Python library for managing collections of files and datasets. Provides abstractions for structured data pipelines and metadata handling. +``` \ No newline at end of file From 6eec9520df53428bed05600875762782a98a95be Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Thu, 12 Mar 2026 15:18:18 +0100 Subject: [PATCH 3/9] chore: hydro galery migration --- docs/SWOT-Oceanography | 2 +- docs/_static/HR_cloud.png | Bin 0 -> 48908 bytes docs/hydrology/basic.md | 116 ++++++++++++++++++++++++++++++++ docs/hydrology/basic.rst | 34 ---------- docs/hydrology/hydrology.md | 106 +++++++++++++++++++++++++++++ docs/hydrology/hydrology.rst | 86 ----------------------- docs/hydrology/intermediate.md | 93 +++++++++++++++++++++++++ docs/hydrology/intermediate.rst | 29 -------- docs/index.md | 35 ++-------- 9 files changed, 320 insertions(+), 181 deletions(-) create mode 100644 docs/_static/HR_cloud.png create mode 100644 docs/hydrology/basic.md delete mode 100644 docs/hydrology/basic.rst create mode 100644 docs/hydrology/hydrology.md delete mode 100644 docs/hydrology/hydrology.rst create mode 100644 docs/hydrology/intermediate.md delete mode 100644 docs/hydrology/intermediate.rst diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index f1c7b67..aa78bc1 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit f1c7b676456921df0b76ce70c13a3d28a9f6a022 +Subproject commit aa78bc16bab4ea566248a93f12eff59fa9ec2afa diff --git a/docs/_static/HR_cloud.png b/docs/_static/HR_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfc7408fca40a73fef93a3c13256c360060c288 GIT binary patch literal 48908 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 literal 0 HcmV?d00001 diff --git a/docs/hydrology/basic.md b/docs/hydrology/basic.md new file mode 100644 index 0000000..3418e11 --- /dev/null +++ b/docs/hydrology/basic.md @@ -0,0 +1,116 @@ + +(basic)= + +# Basic + +## Product Overview + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} SWOT Hydrology Dataset Exploration in the Cloud +:link: ../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_cloud_in_Earthdata +:link-type: doc +:img-top: ../_static/HR_cloud.png +``` + +```{grid-item-card} SWOT Hydrology Dataset Exploration on a local machine +:link: ../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_local_in_Earthdata +:link-type: doc +:img-top: ../_static/HR_cloud.png +``` +```` + + +```{toctree} +:hidden: + +../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_cloud_in_Earthdata +../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_local_in_Earthdata +../SWOT-Hydrology/BASIC/Read_SWOT_PixelCloud +../SWOT-Hydrology/BASIC/Read_SWOT_Raster +../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Node +../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Reach +../SWOT-Hydrology/BASIC/Create_River_Profiles +../SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples +../SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package +../SWOT-Hydrology/BASIC/Search_by_HUC_ID +../SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata +../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata +../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata +``` +--- + +## Read and plot + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Read and plot a SWOT-HR Pixel Cloud netcdf products +:link: ../SWOT-Hydrology/BASIC/Read_SWOT_PixelCloud +:link-type: doc +``` + +```{grid-item-card} Read and plot a SWOT-HR Raster products +:link: ../SWOT-Hydrology/BASIC/Read_SWOT_Raster +:link-type: doc +``` + +```{grid-item-card} Read and plot a SWOT-HR River Single Pass Node product +:link: ../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Node +:link-type: doc +``` + +```{grid-item-card} Read and plot a SWOT-HR River Single Pass Reach product +:link: ../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Reach +:link-type: doc +``` + +```` + +## Tools to classify + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Create River Profiles from SWOT Hydrology Data in the Cloud +:link: ../SWOT-Hydrology/BASIC/Create_River_Profiles +:link-type: doc +``` + +```{grid-item-card} Hydrocron API: SWOT Hydrology Time Series Examples +:link: ../SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples +:link-type: doc +:img-top: ../_static/Hydrocron_logo.png +``` + +```{grid-item-card} Search and Download SWOT Data via earthaccess +:link: ../SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package +:link-type: doc +:img-top: ../_static/earthaccess_logo.png +``` + +```{grid-item-card} Search by HUC Example +:link: ../SWOT-Hydrology/BASIC/Search_by_HUC_ID +:link-type: doc +``` + +```{grid-item-card} Search via SWORD River ID or Geometry +:link: ../SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata +:link-type: doc +:img-top: ../_static/SWORD_River_reaches.png +``` + +```{grid-item-card} SWOT Water Mask Raster Image Data Product: In AWS Cloud +:link: ../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata +:link-type: doc +:img-top: ../_static/Raster_QF_example.png +``` + +```{grid-item-card} SWOT Water Mask Raster Image Data Product: Local Machine Download +:link: ../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata +:link-type: doc +:img-top: ../_static/Raster_QF_example.png +``` + +```` \ No newline at end of file diff --git a/docs/hydrology/basic.rst b/docs/hydrology/basic.rst deleted file mode 100644 index e7b47fe..0000000 --- a/docs/hydrology/basic.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. _basic: - -=================== -Basic -=================== - -.. nblinkgallery:: - :caption: Product Overview - :name: product_overview - - ../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_cloud_in_Earthdata.ipynb - ../SWOT-Hydrology/BASIC/Product_Overview_SWOT_HR_local_in_Earthdata.ipynb - -.. nblinkgallery:: - :caption: Read and plot - :name: read_plot - - ../SWOT-Hydrology/BASIC/Read_SWOT_PixelCloud.ipynb - ../SWOT-Hydrology/BASIC/Read_SWOT_Raster.ipynb - ../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Node.ipynb - ../SWOT-Hydrology/BASIC/Read_SWOT_RiverSP_Reach.ipynb - - -.. nblinkgallery:: - :caption: Tools to classify - :name: to_classify - - ../SWOT-Hydrology/BASIC/Create_River_Profiles.ipynb - ../SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples.ipynb - ../SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package.ipynb - ../SWOT-Hydrology/BASIC/Search_by_HUC_ID.ipynb - ../SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata.ipynb - ../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata.ipynb - ../SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata.ipynb \ No newline at end of file diff --git a/docs/hydrology/hydrology.md b/docs/hydrology/hydrology.md new file mode 100644 index 0000000..b18d3d3 --- /dev/null +++ b/docs/hydrology/hydrology.md @@ -0,0 +1,106 @@ + +# SWOT Hydrology Data Tutorials + +Here are Hydrology-relevant tutorials and resources for the Surface Water and Ocean Topography (SWOT) Mission, using cloud computing or via local machine. + + +```{admonition} Warning +:class: warning + +These depict the most simple and commonly used methods to our knowledge to get a hand on SWOT HR products. +Should you have other methods or tools, please share! +``` + +## Tutorials + +````{grid} 1 1 2 2 +:gutter: 2 + +```{grid-item-card} Basic Gallery +:link: basic +:link-type: doc +``` + +```{grid-item-card} Intermediate Gallery +:link: intermediate +:link-type: doc +``` + +```{grid-item-card} Expert Gallery +:link: expert +:link-type: doc +``` +```` + +```{toctree} +:hidden: +:maxdepth: 1 + +basic +intermediate +expert +``` + +--- + +## Data Portals + +| | | +|---|---| +| ![hydroweb.next](../_static/hydroweb_next_1024px.png){width=30%} | ![podaac](../_static/podaac.png){width=15%} | + +All SWOT Hydrology data illustrated in these tutorials can be accessed via: + +- [PO.DAAC Earthdata](https://search.earthdata.nasa.gov/search?portal=podaac-cloud): search for, visualize and download all SWOT products via interactive GUI developed by NASA and PO.DAAC, Earthdata +- [hydroweb.next](https://hydroweb.next.theia-land.fr/): search for, visualize, and download SWOT Hydrology products via interactive GUI developed by CNES and Theia, hydroweb.next + +--- + +## Other useful tools + +- [Hydrocron](https://podaac.github.io/hydrocron/intro.html): An API that repackages the river shapefile dataset (L2_HR_RiverSP) into CSV or GeoJSON formats for easier time-series analysis. +- [SWODLR](https://github.com/podaac/swodlr): A system for generating on-demand raster products from SWOT L2 raster data with custom resolutions, projections, and extents. *(in development)* +- [SWOT Hydrology Toolbox](https://github.com/CNES/swot-hydrology-toolbox): Together with RiverObs, open-source tools to generate virtually all SWOT HR L2 products with fairly (but not fully) representative characteristics. +- [SWOT RiverObs Tool](https://github.com/SWOTAlgorithms/RiverObs.git): Together with SWOT Hydrology Toolbox, enables generation of SWOT HR L2 products. + +--- + +## A Priori Databases + +- [SWOT River Database (SWORD)](https://www.swordexplorer.com/): Database for rivers SWOT products are based upon; great for discovering river reach IDs. Available also via [hydroweb.next](https://hydroweb.next.theia-land.fr/?pid=SWOT_PRIOR_RIVER_DATABASE) +- [Prior Lake Database (PLD)](https://hydroweb.next.theia-land.fr/?pid=SWOT_PRIOR_LAKE_DATABASE): + - Add the PLD layer into hydroweb.next to see the lakes SWOT products are based upon, great for discovering lake IDs! + - Ask for PLD updates on the page :ref:`pld-label` + +--- + +## Products Description + +- [SWOT Data User Handbook](https://archive.podaac.earthdata.nasa.gov/podaac-ops-cumulus-docs/web-misc/swot_mission_docs/D-109532_SWOT_UserHandbook_20240502.pdf?_ga=2.124259722.1042075570.1716930479-1354658737.1715875596): first reference document +- [Product Description Documents](https://podaac.jpl.nasa.gov/SWOT?tab=datasets-information): more detailed product information +- [Latest Release Notes – Version C KaRIn Science Data Products](https://archive.podaac.earthdata.nasa.gov/podaac-ops-cumulus-docs/web-misc/swot_mission_docs/releases/SWOT_VersionC_KaRIn_Products_Release_Note.pdf): See section 6 for current issues and features + +--- + +## Additional Resources + +- [PO.DAAC Cookbook: SWOT Chapter](https://podaac.github.io/tutorials/quarto_text/SWOT.html): data resources, tips, tutorials for hydrology and oceanography SWOT communities +- [GIS SWOT StoryMap](https://storymaps.arcgis.com/stories/4a9184e813e540248040069580f6a54c) + +--- + +## Features of KaRIn Data that Users Should be Aware of + +- [Slide Deck Presented at the SWOT Science Team by Curtis Chen](https://swotst.aviso.altimetry.fr/fileadmin/user_upload/SWOTST2023/20230919_3_Karin_overview2/14h10-KaRInFeatures.pdf): Addresses practical aspects of interpreting SWOT KaRIn data products, answers FAQs, and provides tips to avoid misinterpretation. + +--- + +## Earthdata Webinar + +- [Accessing Data for the World's Water with SWOT](https://www.earthdata.nasa.gov/learn/webinars-and-tutorials/webinar-podaac-2024-03-20): Watch the recording! Learn to discover, access, and use SWOT mission data from PO.DAAC. + +--- + +## 2024 SWOT Hydrology Data Access Workshop + +[SWOT 2024 Hydrology Workshop](https://podaac.github.io/2024-SWOT-Hydro-Workshop/) diff --git a/docs/hydrology/hydrology.rst b/docs/hydrology/hydrology.rst deleted file mode 100644 index e739ba8..0000000 --- a/docs/hydrology/hydrology.rst +++ /dev/null @@ -1,86 +0,0 @@ -SWOT Hydrology Data Tutorials -==================================== - -Here are Hydrology-relevant tutorials and resources for the Surface Water and Ocean Topography (SWOT) Mission, using cloud computing or via local machine. - -.. warning:: - - Those depict the most simple and commonly used methods to our knowledge to get a hand on SWOT HR products. - Should you have other methods or tools, please share! - -.. toctree:: - :caption: Tutorials for - :maxdepth: 3 - - basic - intermediate - expert - - -------------- -Data Portals -------------- -.. |hnext| image:: ../_static/hydroweb_next_1024px.png - :width: 30% -.. |podaac| image:: ../_static/podaac.png - :width: 15% - -|hnext| |podaac| - -All SWOT Hydrology data illustrated in these tutorials can be accessed via - -* `PO.DAAC Earthdata `_: search for, visualize and download all SWOT products vie intereactive GUI developped by NASA and PO.DAAC, earthdata -* `hydroweb.next `_: Search for, visualize, and download SWOT Hydrology products via interactive GUI developed by CNES and Theia, hydroweb.next - - - ------------------------ -Other useful tools ------------------------ - -* `Hydrocron `_: An API that repackages the river shapefile dataset (L2_HR_RiverSP) into csv or GeoJSON formats that make time-series analysis easier. -* `SWODLR `_: A system for generating on demand raster products from SWOT L2 raster data with custom resolutions, projections, and extents. -in development -* `SWOT hydrology toolbox `_: Together with RiverObs, open-source tools that enable end-users to generate virtually all SWOT HR level-2 (L2) products with fairly (but not fully) representative characteristics (see section on caveats below) -* `SWOT RiverObs tool `_: Together with SWOT Hydrology Toolbox, open-source tools that enable end-users to generate virtually all SWOT HR level-2 (L2) products with fairly (but not fully) representative characteristics (see section on caveats below) - -------------------- -A Priori Databases -------------------- - -* `SWOT River Database (SWORD) `_: the database for rivers SWOT products are based upon, great for discovering river reach IDs!. The dataset is also available in `hydroweb.next `_ -* `Prior Lake Database (PLD) `_: - * Add the PLD layer into hydroweb.next to see the lakes SWOT products are based upon, great for discovering lake IDs! - * Ask for PLD updates in the page :ref:`pld-label` - ---------------------- -Products Description ---------------------- -* `SWOT Data User Handbook `_ is your first document -* `Product Description Documents `_: find more detailed information in this table! -* `Latest Release Notes - Version C KaRIn Science Data Products `_: See section 6 for current issues and features of the datasets! - ---------------------- -Additional Resources ---------------------- -* `PO.DAAC Cookbook: SWOT Chapter `_: Visit for more data resources, tips, and tutorials related to both the hydrology and oceanography SWOT communities. -* `GIS SWOT StoryMap `_ - ------------------------------------------------------ -Features of KaRIn Data that Users Should be Aware of ------------------------------------------------------ - -* `Slide Deck Presented at the SWOT Science Team by Curtis Chen `_: Addresses practical aspects of interpreting SWOT KaRIn data products, answers frequently asked questions, and provides tips to hopefully avoid misinterpretation and confusion of the data. - ------------------- -Earthdata Webinar ------------------- -* `Accessing Data for the World's Water with SWOT `_: Watch the Recording! Learn how to discover, access, and use SWOT mission data from PO.DAAC and how these data can lead to new, innovative science and applications in the world of water. - ------------------------------------------ -2024 SWOT Hydrology Data Access Workshop ------------------------------------------ - -`https://podaac.github.io/2024-SWOT-Hydro-Workshop/ `_ - - - diff --git a/docs/hydrology/intermediate.md b/docs/hydrology/intermediate.md new file mode 100644 index 0000000..6c8993c --- /dev/null +++ b/docs/hydrology/intermediate.md @@ -0,0 +1,93 @@ +(intermediate)= + +# Intermediate + +## Use multiple vector products at once + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Plot time series from multiple lake prior datasets +:link: ../SWOT-Hydrology/INTERMEDIATE/plot_timeseries_from_multiple_lakesp_prior +:link-type: doc +``` + +```{grid-item-card} Plot geometries from multiple lake prior datasets +:link: ../SWOT-Hydrology/INTERMEDIATE/plot_geometries_from_multiple_lakesp_prior +:link-type: doc +``` +```` + +```{toctree} +:hidden: + +../SWOT-Hydrology/INTERMEDIATE/plot_timeseries_from_multiple_lakesp_prior +../SWOT-Hydrology/INTERMEDIATE/plot_geometries_from_multiple_lakesp_prior + +``` +--- + +## Download and Convert Pixel Cloud products into a user-friendly format + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} Download Pixel Cloud to GeoPackage +:link: ../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg +:link-type: doc +:img-top: ../_static/geopkg.png +``` + +```{grid-item-card} Download Pixel Cloud to Zarr +:link: ../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr +:link-type: doc +:img-top: ../_static/zarr.png +``` + +```` + +```{toctree} +:hidden: + +../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg +../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr +``` + +--- + +## Dive in Pixel Cloud data + +````{grid} 1 1 3 4 +:gutter: 2 + +```{grid-item-card} From Pixel Cloud to Virtual Stations +:link: ../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations +:link-type: doc +:img-top: ../_static/from_pixc_virtual_stations_example.png +``` + +```{grid-item-card} From Pixel Cloud to River Profile +:link: ../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_river_profile +:link-type: doc +``` + +```{grid-item-card} PIXC Phase Unwrap (local machine) +:link: ../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_PhaseUnwrap_localmachine +:link-type: doc +``` + +```{grid-item-card} PIXC Area Analysis (local machine) +:link: ../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_Area_localmachine +:link-type: doc +``` +```` + +```{toctree} +:hidden: + +../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations +../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_river_profile +../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_PhaseUnwrap_localmachine +../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_Area_localmachine + +``` \ No newline at end of file diff --git a/docs/hydrology/intermediate.rst b/docs/hydrology/intermediate.rst deleted file mode 100644 index 2be786a..0000000 --- a/docs/hydrology/intermediate.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _intermediate: - -=================== -Intermediate -=================== - -.. nblinkgallery:: - :caption: Use multiple vector products at once - :name: vector_products - - ../SWOT-Hydrology/INTERMEDIATE/plot_timeseries_from_multiple_lakesp_prior.ipynb - ../SWOT-Hydrology/INTERMEDIATE/plot_geometries_from_multiple_lakesp_prior.ipynb - -.. nblinkgallery:: - :caption: Download and Convert Pixel Cloud products into a user-friendly format - :name: pixcdust - - ../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg.ipynb - ../SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr.ipynb - - -.. nblinkgallery:: - :caption: Dive in Pixel Cloud data - :name: pixc4experts - - ../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations.ipynb - ../SWOT-Hydrology/INTERMEDIATE/from_pixc_to_river_profile.ipynb - ../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_PhaseUnwrap_localmachine.ipynb - ../SWOT-Hydrology/INTERMEDIATE/SWOT_PIXC_Area_localmachine.ipynb diff --git a/docs/index.md b/docs/index.md index c534587..a579c02 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,52 +21,25 @@ Hydrology-related analyses and examples. ```` ```{toctree} +:caption: Galleries :hidden: :maxdepth: 1 cnes hydrology/hydrology ``` - --- -## Ocean Products - -````{grid} 1 1 2 2 -:gutter: 2 - -```{grid-item-card} L3 LR SSH -:link: l3_lr_ssh/index -:link-type: doc - -Documentation and examples for the Level-3 Low Resolution SSH product. -``` -```` - ```{toctree} -:hidden: +:caption: Ocean Products :maxdepth: 1 l3_lr_ssh/index ``` - --- -## Ocean Tools - -````{grid} 1 1 2 2 -:gutter: 2 - -```{grid-item-card} Tools -:link: tools -:link-type: doc - -Useful tools developed around satellite altimetry and ocean data processing. -``` -```` - ```{toctree} -:hidden: +:caption: Ocean Tools :maxdepth: 1 tools @@ -78,4 +51,4 @@ tools * {ref}`genindex` * {ref}`modindex` -* {ref}`search` +* {ref}`search` \ No newline at end of file From dcd7eed977845645536baa9718722e4a2da5cdb5 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Thu, 12 Mar 2026 16:45:51 +0100 Subject: [PATCH 4/9] refactor: updated scripts --- docs/SWOT-Oceanography | 2 +- docs/conf.py | 25 ------------------ docs/scripts/generate_thumbnails.py | 3 --- docs/scripts/insert_download_links.py | 38 ++++++++++++++++++--------- 4 files changed, 26 insertions(+), 42 deletions(-) diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index aa78bc1..8176caf 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit aa78bc16bab4ea566248a93f12eff59fa9ec2afa +Subproject commit 8176caf2074ef0021ed9cf70b25b981214d6b20e diff --git a/docs/conf.py b/docs/conf.py index 3414bba..3d6191f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,31 +24,6 @@ # Don't add .txt suffix to source files: html_sourcelink_suffix = '' -# This is processed by Jinja2 and inserted before each notebook -# nbsphinx_prolog = r""" -# {% set docname = 'doc/' + env.doc2path(env.docname, base=None) %} -# -# .. raw:: html -# -# -# """ - -# nbsphinx_epilog = nbsphinx_prolog - -# nbsphinx_thumbnails = { -# 'SWOT-Oceanography/ex_aviso_download_swot': '_images/aviso.png', -# 'SWOT-Hydrology/BASIC/Hydrocron_SWOT_timeseries_examples': '_static/Hydrocron_logo.png', -# 'SWOT-Hydrology/BASIC/Search_by_earthaccess_python_package': '_static/earthaccess_logo.png', -# 'SWOT-Hydrology/BASIC/Search_by_SWORD_River_ID_in_Earthdata': '_static/SWORD_River_reaches.png', -# 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_cloud_in_Earthdata': '_static/Raster_QF_example.png', -# 'SWOT-Hydrology/BASIC/SWOT_Raster_Notebook_local_in_Earthdata': '_static/Raster_QF_example.png', -# 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_zarr': '_static/zarr.png', -# 'SWOT-Hydrology/INTERMEDIATE/download_pixc_to_gpkg': '_static/geopkg.png', -# 'SWOT-Hydrology/INTERMEDIATE/from_pixc_to_virtual_stations': '_static/from_pixc_virtual_stations_example.png', -# } - nb_execution_mode = "off" nb_execution_timeout = 120 nb_execution_allow_errors = False diff --git a/docs/scripts/generate_thumbnails.py b/docs/scripts/generate_thumbnails.py index a92c214..8592797 100644 --- a/docs/scripts/generate_thumbnails.py +++ b/docs/scripts/generate_thumbnails.py @@ -36,17 +36,14 @@ def extract_thumbnail(nb_path, thumb_path): for cell in nb["cells"]: - # vérifier tag thumbnail tags = cell.get("metadata", {}).get("tags", []) if "thumbnail" in tags and thumbnail_cell is None: thumbnail_cell = cell - # garder première cellule avec image comme fallback if fallback_cell is None: if get_image_from_cell(cell) is not None: fallback_cell = cell - # priorité au tag thumbnail target_cell = thumbnail_cell if thumbnail_cell else fallback_cell if target_cell: diff --git a/docs/scripts/insert_download_links.py b/docs/scripts/insert_download_links.py index 8d62204..6ec224d 100644 --- a/docs/scripts/insert_download_links.py +++ b/docs/scripts/insert_download_links.py @@ -1,17 +1,29 @@ -import glob, os, nbformat +import glob +import os +import nbformat + +GALLERIES = [ + "docs/SWOT-Oceanography", + "docs/SWOT-Hydrology", +] + +def process_notebook(fn): + nb = nbformat.read(fn, as_version=4) + basename = os.path.basename(fn) + + link = f"{{download}}`Download notebook <{basename}>`" + cell = nbformat.v4.new_markdown_cell(link) + + if not any(c.cell_type == "markdown" and link in c.source for c in nb.cells): + nb.cells.insert(0, cell) + nb.cells.append(cell) + nbformat.write(nb, fn) def main(): - pattern = "docs/SWOT-Oceanography/*.ipynb" - for fn in glob.glob(pattern): - nb = nbformat.read(fn, as_version=4) - basename = os.path.basename(fn) - link = f"[Download notebook]({basename})" - cell = nbformat.v4.new_markdown_cell(link) - - if not any(c.cell_type=="markdown" and c.source==link for c in nb.cells): - nb.cells.insert(0, cell) - nb.cells.append(cell) - nbformat.write(nb, fn) + for gallery in GALLERIES: + pattern = os.path.join(gallery, "**", "*.ipynb") + for fn in glob.glob(pattern, recursive=True): + process_notebook(fn) -if __name__=="__main__": +if __name__ == "__main__": main() \ No newline at end of file From 7dbe3e503e64ad27336f20ee5ba8914b5978e543 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Fri, 13 Mar 2026 10:33:24 +0100 Subject: [PATCH 5/9] chore: clean up --- docs/SWOT-Oceanography | 2 +- docs/_static/notebook_version.js | 63 ----------- docs/_static/oceano/notebook_versions.json | 126 --------------------- docs/changelog_oceano.rst | 4 - docs/conf.py | 15 +-- docs/docs_hydrology/hydrology.rst | 84 -------------- 6 files changed, 7 insertions(+), 287 deletions(-) delete mode 100644 docs/_static/notebook_version.js delete mode 100644 docs/_static/oceano/notebook_versions.json delete mode 100644 docs/changelog_oceano.rst delete mode 100644 docs/docs_hydrology/hydrology.rst diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index 8176caf..f1c7b67 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit 8176caf2074ef0021ed9cf70b25b981214d6b20e +Subproject commit f1c7b676456921df0b76ce70c13a3d28a9f6a022 diff --git a/docs/_static/notebook_version.js b/docs/_static/notebook_version.js deleted file mode 100644 index 8ef3030..0000000 --- a/docs/_static/notebook_version.js +++ /dev/null @@ -1,63 +0,0 @@ -document.addEventListener("DOMContentLoaded", async () => { - try { - const downloadLink = document.querySelector(".admonition.note a.download"); - if (!downloadLink) return; - - const currentFile = downloadLink.getAttribute("href"); - const notebookName = currentFile.replace(".ipynb", ""); - console.log(notebookName); - - const response = await fetch("../_static/notebook_versions.json"); - if (!response.ok) return; - - const data = await response.json(); - const nbData = data[notebookName]; - if (!nbData || !nbData.versions) return; - console.log(nbData.versions); - - const sortedVersions = nbData.versions.sort((a, b) => - new Date(b.date) - new Date(a.date) - ); - - const previousVersions = sortedVersions.slice(1); - console.log(previousVersions); - if (previousVersions.length === 0) return; - - const container = document.querySelector(".other-versions-container"); - if (!container) return; - - const title = document.createElement("h4"); - title.textContent = "Previous versions:"; - container.appendChild(title); - - const ul = document.createElement("ul"); - ul.className = "previous-versions"; - - previousVersions.forEach(v => { - const li = document.createElement("li"); - const a = document.createElement("a"); - - a.href = v.file + "?raw=true"; - a.textContent = `${v.date} (${v.commit})`; - a.setAttribute("download", getFilename(v.file)); - li.appendChild(a); - - if (v.message) { - const span = document.createElement("span"); - span.textContent = ` — ${v.message}`; - li.appendChild(span); - } - - ul.appendChild(li); - }); - - container.appendChild(ul); - - function getFilename(pathOrUrl) { - return pathOrUrl.split("/").pop(); - } - - } catch (err) { - console.warn("Erreur lors du remplissage des anciennes versions :", err); - } -}); diff --git a/docs/_static/oceano/notebook_versions.json b/docs/_static/oceano/notebook_versions.json deleted file mode 100644 index dacf110..0000000 --- a/docs/_static/oceano/notebook_versions.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "ex_AWS_Cloud_SWOT_L2_Ocean_podaac": { - "latest": "2024-07-02", - "versions": [ - { - "date": "2024-07-02", - "commit": "6b90908", - "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_AWS_Cloud_SWOT_L2_Ocean_podaac.ipynb" - } - ] - }, - "ex_Localmachine_SWOT_L2_Ocean_podaac": { - "latest": "2024-07-02", - "versions": [ - { - "date": "2024-07-02", - "commit": "6b90908", - "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_Localmachine_SWOT_L2_Ocean_podaac.ipynb" - } - ] - }, - "ex_SWOT_quality_flag_demo": { - "latest": "2024-07-02", - "versions": [ - { - "date": "2024-07-02", - "commit": "6b90908", - "message": "Add PO.DAAC tutorials to Oceanography SWOT-community", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/6b90908/ex_SWOT_quality_flag_demo.ipynb" - } - ] - }, - "ex_subset_swot_lr": { - "latest": "2025-12-11", - "versions": [ - { - "date": "2025-12-11", - "commit": "b9aa239", - "message": "refactor: following refactoring using cnes tools", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_lr.ipynb" - } - ] - }, - "ex_search_swot": { - "latest": "2025-12-19", - "versions": [ - { - "date": "2025-12-19", - "commit": "9465152", - "message": "feat: notebooks with fcollections", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/9465152/ex_search_swot.ipynb" - }, - { - "date": "2024-10-23", - "commit": "c809d8b", - "message": "update thumbnails choice", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/c809d8b/ex_search_swot.ipynb" - }, - { - "date": "2024-10-22", - "commit": "f239f75", - "message": "Added tutorial to subset L2 LR Unsmoothed data via AVISO's FTP Server", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/f239f75/ex_search_swot.ipynb" - }, - { - "date": "2024-10-21", - "commit": "97a296b", - "message": "minor updates", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/97a296b/ex_search_swot.ipynb" - } - ] - }, - "ex_subset_swot_l2_unsmoothed": { - "latest": "2025-12-11", - "versions": [ - { - "date": "2025-12-11", - "commit": "b9aa239", - "message": "refactor: following refactoring using cnes tools", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_l2_unsmoothed.ipynb" - } - ] - }, - "ex_subset_swot_l3_unsmoothed": { - "latest": "2025-12-11", - "versions": [ - { - "date": "2025-12-11", - "commit": "b9aa239", - "message": "refactor: following refactoring using cnes tools", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_subset_swot_l3_unsmoothed.ipynb" - } - ] - }, - "ex_swot_l3_unsmoothed": { - "latest": "2025-12-19", - "versions": [ - { - "date": "2025-12-19", - "commit": "9465152", - "message": "feat: notebooks with fcollections", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/9465152/ex_swot_l3_unsmoothed.ipynb" - }, - { - "date": "2025-12-11", - "commit": "b9aa239", - "message": "refactor: following refactoring using cnes tools", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/b9aa239/ex_swot_l3_unsmoothed.ipynb" - }, - { - "date": "2025-06-16", - "commit": "0d2a6f8", - "message": "updated tutorials with new TDS serveur version + products versions", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/0d2a6f8/ex_swot_l3_unsmoothed.ipynb" - }, - { - "date": "2024-11-18", - "commit": "dbccb90", - "message": "Added a tutorial on Swot L3 Unsmoothed", - "raw_url": "https://raw.githubusercontent.com/ORG/REPO/dbccb90/ex_swot_l3_unsmoothed.ipynb" - } - ] - } -} \ No newline at end of file diff --git a/docs/changelog_oceano.rst b/docs/changelog_oceano.rst deleted file mode 100644 index 96ad490..0000000 --- a/docs/changelog_oceano.rst +++ /dev/null @@ -1,4 +0,0 @@ -Changelog -========= - -.. notebook-changelog:: oceano diff --git a/docs/conf.py b/docs/conf.py index 3d6191f..59144cd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -9,7 +9,7 @@ project = 'SWOT Gallery' copyright = '2024, SWOT Community' author = 'SWOT Community' -release = '0.0' +release = '1.0' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -41,14 +41,16 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = 'sphinx_rtd_theme' -# html_theme = 'pydata_sphinx_theme' -#html_theme = 'alabaster' - # Title html_title = "SWOT Community" html_short_title = "SWOT Community" +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + # These paths are either relative to html_static_path # or fully qualified paths (eg. https://...) html_css_files = ["css/custom.css"] @@ -66,11 +68,6 @@ "navigation_depth": 4, } -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - import subprocess from pathlib import Path diff --git a/docs/docs_hydrology/hydrology.rst b/docs/docs_hydrology/hydrology.rst deleted file mode 100644 index 83f5f6a..0000000 --- a/docs/docs_hydrology/hydrology.rst +++ /dev/null @@ -1,84 +0,0 @@ -SWOT Hydrology Data Tutorials -==================================== - -Here are Hydrology-relevant tutorials and resources for the Surface Water and Ocean Topography (SWOT) Mission, using cloud computing or via local machine. - -.. warning:: - - Those depict the most simple and commonly used methods to our knowledge to get a hand on SWOT HR products. - Should you have other methods or tools, please share! - -.. toctree:: - :caption: Tutorials for - :maxdepth: 3 - - basic - intermediate - expert - - -------------- -Data Portals -------------- -.. |hnext| image:: ../_static/hydroweb_next_1024px.png - :width: 30% -.. |podaac| image:: ../_static/podaac.png - :width: 15% - -|hnext| |podaac| - -All SWOT Hydrology data illustrated in these tutorials can be accessed via - -* `PO.DAAC Earthdata `_: search for, visualize and download all SWOT products vie intereactive GUI developped by NASA and PO.DAAC, earthdata -* `hydroweb.next `_: Search for, visualize, and download SWOT Hydrology products via interactive GUI developed by CNES and Theia, hydroweb.next - - - ------------------------ -Other useful tools ------------------------ - -* `Hydrocron `_: An API that repackages the river shapefile dataset (L2_HR_RiverSP) into csv or GeoJSON formats that make time-series analysis easier. -* `SWODLR `_: A system for generating on demand raster products from SWOT L2 raster data with custom resolutions, projections, and extents. -in development -* `SWOT hydrology toolbox `_: Together with RiverObs, open-source tools that enable end-users to generate virtually all SWOT HR level-2 (L2) products with fairly (but not fully) representative characteristics (see section on caveats below) -* `SWOT RiverObs tool `_: Together with SWOT Hydrology Toolbox, open-source tools that enable end-users to generate virtually all SWOT HR level-2 (L2) products with fairly (but not fully) representative characteristics (see section on caveats below) - -------------------- -A Priori Databases -------------------- - -* `SWOT River Database (SWORD) `_: the database for rivers SWOT products are based upon, great for discovering river reach IDs!. The dataset is also available in `hydroweb.next `_ -* `Prior Lake Database (PLD) `_: Add in the PLD layer into hydroweb.next to see the lakes SWOT products are based upon, great for discovering lake IDs! - ---------------------- -Products Description ---------------------- -* `SWOT Data User Handbook `_ is your first document -* `Product Description Documents `_: find more detailed information in this table! -* `Latest Release Notes - Version C KaRIn Science Data Products `_: See section 6 for current issues and features of the datasets! - ---------------------- -Additional Resources ---------------------- -* `PO.DAAC Cookbook: SWOT Chapter `_: Visit for more data resources, tips, and tutorials related to both the hydrology and oceanography SWOT communities. -* `GIS SWOT StoryMap `_ - ------------------------------------------------------ -Features of KaRIn Data that Users Should be Aware of ------------------------------------------------------ - -* `Slide Deck Presented at the SWOT Science Team by Curtis Chen `_: Addresses practical aspects of interpreting SWOT KaRIn data products, answers frequently asked questions, and provides tips to hopefully avoid misinterpretation and confusion of the data. - ------------------- -Earthdata Webinar ------------------- -* `Accessing Data for the World's Water with SWOT `_: Watch the Recording! Learn how to discover, access, and use SWOT mission data from PO.DAAC and how these data can lead to new, innovative science and applications in the world of water. - ------------------------------------------ -2024 SWOT Hydrology Data Access Workshop ------------------------------------------ - -`https://podaac.github.io/2024-SWOT-Hydro-Workshop/ `_ - - - From 22af87f0616ac0feead8be3ce31f439984d72b03 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Fri, 13 Mar 2026 16:22:04 +0100 Subject: [PATCH 6/9] feat: galery versioning system --- docs/SWOT-Oceanography | 2 +- docs/cnes.md | 14 ++++++ docs/conf.py | 83 +++++++++++++------------------ docs/scripts/generate_versions.py | 71 ++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 50 deletions(-) create mode 100644 docs/scripts/generate_versions.py diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index f1c7b67..b66e318 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit f1c7b676456921df0b76ce70c13a3d28a9f6a022 +Subproject commit b66e318ba99a697b53e1f727a6b2a7cd26ae5f2c diff --git a/docs/cnes.md b/docs/cnes.md index b212c17..3c37a20 100644 --- a/docs/cnes.md +++ b/docs/cnes.md @@ -1,5 +1,17 @@ # SWOT Ocean Data Tutorials +```{admonition} Gallery Versions & Changelog +:class: dropdown tip + +Current version: {{ swot_oceanography_latest_badge }} + +Download a release: + +{{ swot_oceanography_downloads }} + +📄 [Changelog](#changelog) +``` + ## Access to data ````{grid} 1 1 3 4 @@ -116,3 +128,5 @@ SWOT-Oceanography/ex_swot_l3_lr_ww_startup ```{image} aviso.png :class: hidden ``` + +```{include} SWOT-Oceanography/changelog.md \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 59144cd..a160cfb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,85 +1,70 @@ # Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +import subprocess +import sys +from pathlib import Path + +# -- Path setup --------------------------------------------------------------- + +SCRIPTS_PATH = Path(__file__).parent / "scripts" +sys.path.insert(0, str(SCRIPTS_PATH)) + +# -- Project information ------------------------------------------------------ project = 'SWOT Gallery' copyright = '2024, SWOT Community' author = 'SWOT Community' release = '1.0' -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration +# -- General configuration ---------------------------------------------------- extensions = [ "myst_nb", "sphinx_design", - 'sphinx.ext.mathjax', - 'sphinx_tabs.tabs', + "sphinx.ext.mathjax", + "sphinx_tabs.tabs", ] -# Don't add .txt suffix to source files: -html_sourcelink_suffix = '' +templates_path = ['_templates'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +pygments_style = "sphinx" + +# -- MyST configuration ------------------------------------------------------- + +myst_enable_extensions = ["substitution"] + +from generate_versions import get_myst_substitutions +myst_substitutions = get_myst_substitutions() + +# -- Notebook execution ------------------------------------------------------- nb_execution_mode = "off" nb_execution_timeout = 120 nb_execution_allow_errors = False -templates_path = ['_templates'] -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output +# -- HTML output -------------------------------------------------------------- html_theme = 'sphinx_rtd_theme' - -# Title html_title = "SWOT Community" html_short_title = "SWOT Community" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] - -# These paths are either relative to html_static_path -# or fully qualified paths (eg. https://...) html_css_files = ["css/custom.css"] - - -# Logo html_logo = "_static/SWOT_spacecraft_model.png" - -# Favicon html_favicon = "_static/swot_favicon.png" +html_sourcelink_suffix = '' -# Theme options html_theme_options = { "logo_only": True, "navigation_depth": 4, } -import subprocess -from pathlib import Path - -def generate_thumbnails(app): - - script = Path(__file__).parent / "scripts" / "generate_thumbnails.py" - subprocess.run(["python", str(script)]) - -def insert_links(app): - script = Path(__file__).parent / "scripts" / "insert_download_links.py" - subprocess.run(["python", str(script)]) +# -- Build hooks -------------------------------------------------------------- def setup(app): - app.connect("builder-inited", generate_thumbnails) - app.connect("builder-inited", insert_links) \ No newline at end of file + app.connect("builder-inited", lambda app: subprocess.run( + ["python", str(SCRIPTS_PATH / "generate_thumbnails.py")] + )) + app.connect("builder-inited", lambda app: subprocess.run( + ["python", str(SCRIPTS_PATH / "insert_download_links.py")] + )) \ No newline at end of file diff --git a/docs/scripts/generate_versions.py b/docs/scripts/generate_versions.py new file mode 100644 index 0000000..691bfa6 --- /dev/null +++ b/docs/scripts/generate_versions.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +""" +generate_versions.py +Generate JSON file with gallery versions based on Git tags of submodules. +""" +import subprocess +from pathlib import Path + +GALLERIES = { + "SWOT-Oceanography": Path("../docs/SWOT-Oceanography"), +} + +def get_git_tags_with_dates(repo_path): + """Return a list of (tag, date) tuples sorted by creation date descending.""" + try: + output = subprocess.check_output( + ["git", "-C", str(repo_path), "tag", "--sort=-creatordate", + "--format=%(refname:short)|%(creatordate:short)"], + text=True + ).splitlines() + tags = [] + for line in output: + if "|" in line: + tag, date = line.split("|", 1) + tags.append({"tag": tag.strip(), "date": date.strip()}) + return tags + except Exception: + return [] + +def get_versions(): + """Return a dict with latest version, all tags with dates, and zip URLs.""" + gallery_versions = {} + for name, path in GALLERIES.items(): + tags = get_git_tags_with_dates(path) + latest = tags[0] if tags else {"tag": "dev", "date": ""} + zip_base = f"https://github.com/SWOT-community/{name}/archive/refs/tags" + gallery_versions[name] = { + "latest": latest["tag"], + "latest_date": latest["date"], + "tags": tags[1:], + "zip_base": zip_base, + } + return gallery_versions + +def get_myst_substitutions(): + """Return a dict of MyST substitutions for all galleries.""" + substitutions = {} + for name, v in get_versions().items(): + key = name.replace("-", "_").lower() + + substitutions[f"{key}_latest_badge"] = ( + f"{{bdg-primary}}`{v['latest']}` {{bdg-secondary}}`{v['latest_date']}`" + ) + + lines = [ + f"- {{bdg-primary}}`{v['latest']}` _{v['latest_date']}_ — " + f"[Download ZIP]({v['zip_base']}/{v['latest']}.zip) ⬅ **latest**" + ] + for t in v["tags"]: + lines.append( + f"- {{bdg-secondary}}`{t['tag']}` _{t['date']}_ — " + f"[Download ZIP]({v['zip_base']}/{t['tag']}.zip)" + ) + substitutions[f"{key}_downloads"] = "\n".join(lines) + substitutions[f"{key}_latest"] = v["latest"] + + return substitutions + +if __name__ == "__main__": + import pprint + pprint.pprint(get_myst_substitutions()) \ No newline at end of file From 602884ad833086a74ad16061d188fe667a914c40 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Mon, 16 Mar 2026 15:54:31 +0100 Subject: [PATCH 7/9] feat: add altimetry-search tool --- docs/SWOT-Oceanography | 2 +- docs/tools.md | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index b66e318..5a768f0 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit b66e318ba99a697b53e1f727a6b2a7cd26ae5f2c +Subproject commit 5a768f05f1433e0b43f4e1470885fc9c53b03fcf diff --git a/docs/tools.md b/docs/tools.md index d4dda57..6846a42 100644 --- a/docs/tools.md +++ b/docs/tools.md @@ -28,4 +28,12 @@ Relies on **FCollections** to efficiently manage and read NetCDF datasets. :img-top: _static/thumbs/fcollections.png Lightweight Python library for managing collections of files and datasets. Provides abstractions for structured data pipelines and metadata handling. +``` + +```{grid-item-card} Altimetry Search +:link: https://github.com/CNES/altimetry-search +:link-type: url +:img-top: _static/thumbs/altimetry-search.png + +Interactive tool for altimetry missions passes search - available on Binder and as a Python library. ``` \ No newline at end of file From 15a37150d290a6719558504e0eff960506a0dabe Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Wed, 18 Mar 2026 08:33:02 +0100 Subject: [PATCH 8/9] updated requirements --- docs/SWOT-Oceanography | 2 +- docs/requirements.txt | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/SWOT-Oceanography b/docs/SWOT-Oceanography index 5a768f0..d2a65c8 160000 --- a/docs/SWOT-Oceanography +++ b/docs/SWOT-Oceanography @@ -1 +1 @@ -Subproject commit 5a768f05f1433e0b43f4e1470885fc9c53b03fcf +Subproject commit d2a65c89be0e762895431d514023d965221d87f9 diff --git a/docs/requirements.txt b/docs/requirements.txt index c148c47..4b7a056 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,10 +1,8 @@ numpy myst-nb -myst-parser -sphinx-design -nbformat sphinx>=6,<8 sphinx-tabs +sphinx-design markupsafe==2.0.1 jinja2==3.1 xarray From c6ca51848e54a3783a8635e6865f35aa3d2e5f84 Mon Sep 17 00:00:00 2001 From: "Tonneau Anne-Sophie (CELAD)" Date: Thu, 19 Mar 2026 12:32:37 +0100 Subject: [PATCH 9/9] chore: migration ok --- .gitignore | 3 +- docs/SWOT-Hydrology | 2 +- docs/_static/HR_cloud.png | Bin 48908 -> 0 bytes .../{ => images}/SWOT_spacecraft_model.png | Bin docs/_static/images/cnes_aviso.png | Bin 0 -> 42376 bytes .../{ => images/hydrology}/Hydrocron_logo.png | Bin .../hydrology}/Raster_QF_example.png | Bin .../hydrology}/SWORD_River_reaches.png | Bin .../hydrology}/earthaccess_logo.png | Bin .../from_pixc_virtual_stations_example.png | Bin .../_static/{ => images/hydrology}/geopkg.png | Bin .../hydrology}/hydroweb_next_1024px.png | Bin .../_static/{ => images/hydrology}/podaac.png | Bin docs/_static/{ => images/hydrology}/zarr.png | Bin .../images/oceanography}/aviso.png | Bin .../oceanography}/aviso_authent.png | Bin .../{ => images/oceanography}/opendap_url.png | Bin docs/_static/{ => images}/swot_favicon.png | Bin docs/cnes.md | 28 +++++++++--------- docs/conf.py | 4 +-- docs/hydrology/basic.md | 22 +++++++++----- docs/hydrology/hydrology.md | 4 +-- docs/hydrology/intermediate.md | 27 ++++++++++------- docs/scripts/generate_thumbnails.py | 23 +++++++------- docs/scripts/generate_versions.py | 15 +++++----- docs/scripts/insert_download_links.py | 6 ++-- docs/tools.md | 8 ++--- 27 files changed, 79 insertions(+), 63 deletions(-) delete mode 100644 docs/_static/HR_cloud.png rename docs/_static/{ => images}/SWOT_spacecraft_model.png (100%) create mode 100644 docs/_static/images/cnes_aviso.png rename docs/_static/{ => images/hydrology}/Hydrocron_logo.png (100%) rename docs/_static/{ => images/hydrology}/Raster_QF_example.png (100%) rename docs/_static/{ => images/hydrology}/SWORD_River_reaches.png (100%) rename docs/_static/{ => images/hydrology}/earthaccess_logo.png (100%) rename docs/_static/{ => images/hydrology}/from_pixc_virtual_stations_example.png (100%) rename docs/_static/{ => images/hydrology}/geopkg.png (100%) rename docs/_static/{ => images/hydrology}/hydroweb_next_1024px.png (100%) rename docs/_static/{ => images/hydrology}/podaac.png (100%) rename docs/_static/{ => images/hydrology}/zarr.png (100%) rename docs/{ => _static/images/oceanography}/aviso.png (100%) rename docs/_static/{ => images/oceanography}/aviso_authent.png (100%) rename docs/_static/{ => images/oceanography}/opendap_url.png (100%) rename docs/_static/{ => images}/swot_favicon.png (100%) diff --git a/.gitignore b/.gitignore index 61933ce..a8b0dbe 100644 --- a/.gitignore +++ b/.gitignore @@ -72,7 +72,8 @@ instance/ _build docs/_build/ docs/build -docs/_static/thumbs +docs/_static/images/oceanography/_thumbs +docs/_static/images/hydrology/_thumbs docs/jupyter_execute # PyBuilder diff --git a/docs/SWOT-Hydrology b/docs/SWOT-Hydrology index a947e79..9c64078 160000 --- a/docs/SWOT-Hydrology +++ b/docs/SWOT-Hydrology @@ -1 +1 @@ -Subproject commit a947e7946278b5bbde4036e9ac9a3d92035c229e +Subproject commit 9c64078a0ce5f550839a5758dbcb926e4ad84bd8 diff --git a/docs/_static/HR_cloud.png b/docs/_static/HR_cloud.png deleted file mode 100644 index fcfc7408fca40a73fef93a3c13256c360060c288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48908 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 diff --git a/docs/_static/SWOT_spacecraft_model.png b/docs/_static/images/SWOT_spacecraft_model.png similarity index 100% rename from docs/_static/SWOT_spacecraft_model.png rename to docs/_static/images/SWOT_spacecraft_model.png diff --git a/docs/_static/images/cnes_aviso.png b/docs/_static/images/cnes_aviso.png new file mode 100644 index 0000000000000000000000000000000000000000..82b9611e304b3d84432b53b594725be1f03d5f02 GIT binary patch literal 42376 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