diff --git a/nextGEMS_online.ipynb b/nextGEMS_online.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..8dc639d5b051009b444040ccaa91554281919ff8 --- /dev/null +++ b/nextGEMS_online.ipynb @@ -0,0 +1,143 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "15009998-b0c6-4e21-a007-197eca142975", + "metadata": {}, + "source": [ + "### Getting started: nextGEMS online" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "75824e6b-52c4-4acf-9b0b-60603eee1a2f", + "metadata": {}, + "outputs": [], + "source": [ + "import intake\n", + "from easygems import healpix as egh\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8c96543f-ce37-4fab-8c67-78f117bdbcad", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cat = intake.open_catalog(\"https://data.nextgems-h2020.eu/online.yaml\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "66ef92b1-4b8e-485f-b45d-1d899ef00de3", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/yaml": "online:\n args:\n path: https://data.nextgems-h2020.eu/online.yaml\n description: ''\n driver: intake.catalog.local.YAMLFileCatalog\n metadata: {}\n", + "text/plain": [ + "online:\n", + " args:\n", + " path: https://data.nextgems-h2020.eu/online.yaml\n", + " description: ''\n", + " driver: intake.catalog.local.YAMLFileCatalog\n", + " metadata: {}\n" + ] + }, + "metadata": { + "application/json": { + "root": "online" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "cat" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6a18cb64-3f0d-4551-a44a-05c4b3f9ab69", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "No plugins loaded for this entry: zarr\nA listing of installable plugins can be found at https://intake.readthedocs.io/en/latest/plugin-directory.html .", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ds \u001b[38;5;241m=\u001b[39m \u001b[43mcat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mICON\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mngc4008\u001b[49m(zoom\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m7\u001b[39m, time\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPT15M\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39mto_dask()\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/base.py:391\u001b[0m, in \u001b[0;36mCatalog.__getattr__\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m 388\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m item\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 389\u001b[0m \u001b[38;5;66;03m# Fall back to __getitem__.\u001b[39;00m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 391\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mitem\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;66;03m# triggers reload_on_change\u001b[39;00m\n\u001b[1;32m 392\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 393\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(item) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/base.py:436\u001b[0m, in \u001b[0;36mCatalog.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return a catalog entry by name.\u001b[39;00m\n\u001b[1;32m 428\u001b[0m \n\u001b[1;32m 429\u001b[0m \u001b[38;5;124;03mCan also use attribute syntax, like ``cat.entry_name``, or\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 432\u001b[0m \u001b[38;5;124;03mcat['name1', 'name2']\u001b[39;00m\n\u001b[1;32m 433\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 434\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mlist\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m key \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n\u001b[1;32m 435\u001b[0m \u001b[38;5;66;03m# triggers reload_on_change\u001b[39;00m\n\u001b[0;32m--> 436\u001b[0m s \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_entry\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 437\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m s\u001b[38;5;241m.\u001b[39mcontainer \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcatalog\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 438\u001b[0m s\u001b[38;5;241m.\u001b[39mname \u001b[38;5;241m=\u001b[39m key\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/utils.py:45\u001b[0m, in \u001b[0;36mreload_on_change.<locals>.wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(f)\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreload()\n\u001b[0;32m---> 45\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/base.py:323\u001b[0m, in \u001b[0;36mCatalog._get_entry\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 321\u001b[0m ups \u001b[38;5;241m=\u001b[39m [up \u001b[38;5;28;01mfor\u001b[39;00m name, up \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muser_parameters\u001b[38;5;241m.\u001b[39mitems() \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m up_names]\n\u001b[1;32m 322\u001b[0m entry\u001b[38;5;241m.\u001b[39m_user_parameters \u001b[38;5;241m=\u001b[39m ups \u001b[38;5;241m+\u001b[39m (entry\u001b[38;5;241m.\u001b[39m_user_parameters \u001b[38;5;129;01mor\u001b[39;00m [])\n\u001b[0;32m--> 323\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mentry\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/entry.py:77\u001b[0m, in \u001b[0;36mCatalogEntry.__call__\u001b[0;34m(self, persist, **kwargs)\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPersist value (\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m) not understood\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m persist)\n\u001b[1;32m 76\u001b[0m persist \u001b[38;5;241m=\u001b[39m persist \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pmode\n\u001b[0;32m---> 77\u001b[0m s \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m persist \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnever\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(s, PersistMixin) \u001b[38;5;129;01mand\u001b[39;00m s\u001b[38;5;241m.\u001b[39mhas_been_persisted:\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcontainer\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpersist\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m store\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/local.py:289\u001b[0m, in \u001b[0;36mLocalCatalogEntry.get\u001b[0;34m(self, **user_parameters)\u001b[0m\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m user_parameters \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_default_source \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_default_source\n\u001b[0;32m--> 289\u001b[0m plugin, open_args \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_open_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43muser_parameters\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 290\u001b[0m data_source \u001b[38;5;241m=\u001b[39m plugin(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mopen_args)\n\u001b[1;32m 291\u001b[0m data_source\u001b[38;5;241m.\u001b[39mcatalog_object \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_catalog\n", + "File \u001b[0;32m/jetfs/jupyterhub/alpha/envs/modelling/lib/python3.10/site-packages/intake/catalog/local.py:263\u001b[0m, in \u001b[0;36mLocalCatalogEntry._create_open_args\u001b[0;34m(self, user_parameters)\u001b[0m\n\u001b[1;32m 258\u001b[0m open_args \u001b[38;5;241m=\u001b[39m merge_pars(params, user_parameters, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_user_parameters,\n\u001b[1;32m 259\u001b[0m getshell\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgetshell, getenv\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgetenv,\n\u001b[1;32m 260\u001b[0m client\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m 262\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_plugin) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m--> 263\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mNo plugins loaded for this entry: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 264\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA listing of installable plugins can be found \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 265\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mat https://intake.readthedocs.io/en/latest/plugin\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-directory.html .\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 267\u001b[0m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_driver)\n\u001b[1;32m 268\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_plugin, \u001b[38;5;28mlist\u001b[39m):\n\u001b[1;32m 269\u001b[0m plugin \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_plugin[\u001b[38;5;241m0\u001b[39m]\n", + "\u001b[0;31mValueError\u001b[0m: No plugins loaded for this entry: zarr\nA listing of installable plugins can be found at https://intake.readthedocs.io/en/latest/plugin-directory.html ." + ] + } + ], + "source": [ + "ds = cat.ICON.ngc4008(zoom=7, time='PT15M').to_dask()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5abc468-6a16-4917-a7d8-8ce8d43413d1", + "metadata": {}, + "outputs": [], + "source": [ + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce4c9b8e-16b7-495c-8f94-5d02c331a330", + "metadata": {}, + "outputs": [], + "source": [ + "timeslice = ds.tas.sel(time='2024-11-11T11:11:00', method='nearest')\n", + "\n", + "egh.healpix_show(timeslice, cmap='inferno')\n", + "plt.title(f\"tas at {str(timeslice.time.values)[:16]}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Modelling", + "language": "python", + "name": "modelling" + }, + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}