{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f30aa9dc",
   "metadata": {
    "papermill": {},
    "tags": []
   },
   "source": [
    "# ocean: 1D\n",
    "\n",
    "1D ocean time series data\n",
    "\n",
    "**coordinate**: tavg-u-hm-sea\n",
    "- tavg: time average\n",
    "- u: ocean surface\n",
    "- hm: horizontal mean/sum\n",
    "- sea: ocean domain"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f1f107ce",
   "metadata": {
    "papermill": {},
    "tags": [
     "remove-input"
    ]
   },
   "outputs": [],
   "source": [
    "## Import libraries\n",
    "import numpy as np\n",
    "import xarray as xr\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib as mpl\n",
    "import sys\n",
    "import os\n",
    "import glob\n",
    "from IPython.display import HTML, display\n",
    "\n",
    "sys.path.append(os.getcwd())\n",
    "from utils import read_variables, read_compound_name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1227985d",
   "metadata": {
    "papermill": {},
    "tags": [
     "parameters",
     "remove-input"
    ]
   },
   "outputs": [],
   "source": [
    "# parameters for the cmorized data\n",
    "cmorout=''                  # root for cmorized data, e.g., '/scratch/$USER/cmorout'\n",
    "source_id      = ''         # model name, e.g., 'NorESM3-LM'\n",
    "experiment_id  = ''         # experiment name, e.g., 'historical', 'ssp585', 'piControl'\n",
    "variant_label  = ''         # variant label, e.g., 'r1i1p1f1'\n",
    "grid_label     = ''         # grid label, e.g., 'gn', 'gr', 'g999'\n",
    "version        = ''         # version, e.g., 'v20260601'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "057c8a64",
   "metadata": {
    "tags": [
     "injected-parameters"
    ]
   },
   "outputs": [],
   "source": [
    "# Parameters\n",
    "cmorout = \"/scratch/yanchun/cmorout\"\n",
    "source_id = \"UKESM1-0-LL\"\n",
    "experiment_id = \"piControl\"\n",
    "variant_label = \"r1i1p1f1\"\n",
    "grid_label = \"g99\"\n",
    "version = \"v20260609\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8314513c",
   "metadata": {
    "papermill": {},
    "tags": [
     "remove-input"
    ]
   },
   "outputs": [],
   "source": [
    "# data path\n",
    "data_path = os.path.join(cmorout, source_id, experiment_id, version)\n",
    "\n",
    "# load methods for plotting and set defaults\n",
    "methods =read_variables('data/methods.txt')\n",
    "#print(methods.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f06c51b7",
   "metadata": {
    "papermill": {},
    "tags": []
   },
   "source": [
    "---\n",
    "**List of datasets:** \\\n",
    "(datasets which are not presented/cmorized have no link.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "67a5a359",
   "metadata": {
    "papermill": {},
    "tags": [
     "remove-input"
    ]
   },
   "outputs": [],
   "source": [
    "# load compound names\n",
    "\n",
    "coords = ('tavg-u-hm-sea')\n",
    "cnames = read_compound_name('data/variables.nml')\n",
    "# examples of compound names:\n",
    "# cnames = ['ocean.sos.tavg-u-hm-sea.mon.glb', 'ocean.masscello.tavg-u-hm-sea.mon.glb']\n",
    "for cname in cnames:\n",
    "    realm = cname.split('.')[0]\n",
    "    var = cname.split('.')[1]\n",
    "    coord = cname.split('.')[2]\n",
    "    freq = cname.split('.')[3]\n",
    "    \n",
    "    if realm != 'ocean' or coord not in coords:\n",
    "        continue\n",
    "    else:\n",
    "        data_file = var+'_'+coord+'_*_'+grid_label+'_'+source_id+'_'+experiment_id+'_'+variant_label+'_*.nc'\n",
    "        if not glob.glob(os.path.join(data_path, data_file)):\n",
    "            print(cname)\n",
    "            continue\n",
    "        else:\n",
    "            display(HTML(f'<a href=\"#{cname}\">{cname}</a>'))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "213c2736",
   "metadata": {
    "papermill": {},
    "tags": []
   },
   "source": [
    "---\n",
    "**Datasets validated:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "25072041",
   "metadata": {
    "papermill": {},
    "tags": [
     "remove-input"
    ]
   },
   "outputs": [],
   "source": [
    "# loop through compound names and plot\n",
    "for cname in cnames:\n",
    "    if cname not in methods.keys():\n",
    "        print(f\"{cname} not found in methods.txt, using default methods for plotting.\")\n",
    "    else:\n",
    "        if methods[cname] is not None:\n",
    "            if 'vertical' in methods[cname].keys():\n",
    "                mth_vert = methods[cname]['vertical']\n",
    "\n",
    "            if 'timeseries' in methods[cname].keys():\n",
    "                mth_ts = methods[cname]['timeseries']\n",
    "\n",
    "            if 'cmap' in methods[cname].keys():\n",
    "                mth_cmap = methods[cname]['cmap']\n",
    "\n",
    "    realm = cname.split('.')[0]\n",
    "    var = cname.split('.')[1]\n",
    "    coord = cname.split('.')[2]\n",
    "    freq = cname.split('.')[3]\n",
    "\n",
    "    if realm != 'ocean' or coord not in coords:\n",
    "        continue\n",
    "\n",
    "    data_file = var+'_'+coord+'_*_'+grid_label+'_'+source_id+'_'+experiment_id+'_'+variant_label+'_*.nc'\n",
    "\n",
    "    if not glob.glob(os.path.join(data_path, data_file)):\n",
    "        continue\n",
    "\n",
    "    #with xr.open_mfdataset(os.path.join(data_path, data_file)) as ds:\n",
    "    data_file = glob.glob(os.path.join(data_path, data_file))[0]\n",
    "    with xr.open_dataset(os.path.join(data_path, data_file)) as ds:\n",
    "        if var in ds:\n",
    "            data = ds[var]\n",
    "        else:\n",
    "            continue\n",
    "\n",
    "\n",
    "    data1d = data\n",
    "\n",
    "    display(HTML(f'<div id=\"{cname}\"></div>'))\n",
    "    print(f'\\033[1m{cname}\\033[0m')\n",
    "    print(f'long name: {data1d.long_name} ({data1d.units})')\n",
    "\n",
    "    fig = plt.figure(figsize=(16, 3), dpi=96)\n",
    "    ax2 = fig.add_subplot(111)\n",
    "    if data1d.sizes[\"time\"] < 2:\n",
    "        ax2.text(0.1, 0.8, (f\"global {mth_ts} value: {data1d.values[0]} {data1d.units}\"))\n",
    "        ax2.text(0.1, 0.6, (\"less than 2 time steps.\"))\n",
    "        ax2.text(0.1, 0.4, (\"skipping timeseries plot.\"))\n",
    "    else:\n",
    "        data1d.plot(ax=ax2)\n",
    "    plt.suptitle(data1d.long_name)\n",
    "\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "\n",
    "    del data, data1d\n",
    "    del ax2, fig"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "cmip7validate-env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.13.3"
  },
  "papermill": {
   "default_parameters": {},
   "environment_variables": {},
   "input_path": "notebooks/ocean_1D.ipynb",
   "output_path": "ocean_1D.ipynb",
   "parameters": {
    "cmorout": "/scratch/yanchun/cmorout",
    "experiment_id": "piControl",
    "grid_label": "g99",
    "source_id": "UKESM1-0-LL",
    "variant_label": "r1i1p1f1",
    "version": "v20260609"
   },
   "version": "2.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}