{
 "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",
    "\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": "7cca1b3f",
   "metadata": {
    "tags": [
     "injected-parameters"
    ]
   },
   "outputs": [],
   "source": [
    "# Parameters\n",
    "cmorout = \"/scratch/yanchun/cmorout\"\n",
    "source_id = \"DUMMY-MODEL\"\n",
    "experiment_id = \"piControl\"\n",
    "variant_label = \"r1i1p1f1\"\n",
    "grid_label = \"g999\"\n",
    "version = \"v20260601\"\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": [
    "**List of data validated:**"
   ]
  },
  {
   "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",
    "    coord = cname.split('.')[2]\n",
    "    if realm != 'ocean' or coord not in coords:\n",
    "        continue\n",
    "    else:\n",
    "        print(cname)\n"
   ]
  },
  {
   "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",
    "    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.title(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": "g999",
    "source_id": "DUMMY-MODEL",
    "variant_label": "r1i1p1f1",
    "version": "v20260601"
   },
   "version": "2.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}