{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "623cbc23-45bf-4dfd-9f49-8d814d0394ba",
   "metadata": {
    "papermill": {
     "duration": 0.003329,
     "end_time": "2025-10-28T22:33:38.523648",
     "exception": false,
     "start_time": "2025-10-28T22:33:38.520319",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# LDF\n",
    "\n",
    "The output from the stand-alone LDF configuration is in the link below\n",
    "\n",
    "\n",
    "Note that LDF is currently run by users. Temporarily, we suggest users walk through the following process:\n",
    "1) Install LDF and activate cupid-analysis\n",
    "2) Use the `CUPiD/helper_scripts/generate_ldf_config_file.py` script to generate a LDF config file based on a CUPiD configuration file.\n",
    "   * `cd CUPiD/examples/external_diag_packages`\n",
    "   * `../../helper_scripts/generate_ldf_config_file.py --cupid-config-loc . --ldf-template ../../externals/LDF/config_clm_unstructured_plots.yaml --out-file LDF_config.yaml`\n",
    "2) Run LDF with the newly created configuration file.\n",
    "   * `../../externals/LDF/run_adf_diag LDF_config.yaml`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "82af7435-3849-4fd1-bb2d-2e062719ec5b",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:38.530344Z",
     "iopub.status.busy": "2025-10-28T22:33:38.530031Z",
     "iopub.status.idle": "2025-10-28T22:33:38.794236Z",
     "shell.execute_reply": "2025-10-28T22:33:38.793573Z"
    },
    "papermill": {
     "duration": 0.268282,
     "end_time": "2025-10-28T22:33:38.795096",
     "exception": false,
     "start_time": "2025-10-28T22:33:38.526814",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-cell"
    ]
   },
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "from IPython.core.display import HTML, Image\n",
    "from IPython.display import display\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2a759f1b-eca7-4eec-a16a-eede1a6ab36c",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:38.798823Z",
     "iopub.status.busy": "2025-10-28T22:33:38.798647Z",
     "iopub.status.idle": "2025-10-28T22:33:38.801442Z",
     "shell.execute_reply": "2025-10-28T22:33:38.800850Z"
    },
    "papermill": {
     "duration": 0.005045,
     "end_time": "2025-10-28T22:33:38.801990",
     "exception": false,
     "start_time": "2025-10-28T22:33:38.796945",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "parameters",
     "hide-cell"
    ]
   },
   "outputs": [],
   "source": [
    "ldf_root = \".\"\n",
    "case_name = None\n",
    "base_case_name = None\n",
    "start_date = \"\"\n",
    "end_date = \"\"\n",
    "base_start_date = None\n",
    "base_end_date = None\n",
    "key_plots = None\n",
    "# ldf_root will be external_diag_packages/computed_notebooks/LDF/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8c9a8455",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:38.805509Z",
     "iopub.status.busy": "2025-10-28T22:33:38.805177Z",
     "iopub.status.idle": "2025-10-28T22:33:39.263693Z",
     "shell.execute_reply": "2025-10-28T22:33:39.262993Z"
    },
    "papermill": {
     "duration": 0.461888,
     "end_time": "2025-10-28T22:33:39.265239",
     "exception": false,
     "start_time": "2025-10-28T22:33:38.803351",
     "status": "completed"
    },
    "tags": [
     "injected-parameters"
    ]
   },
   "outputs": [],
   "source": [
    "# Parameters\n",
    "case_name = \"b.e30_alpha07c_cesm.B1850C_LTso.ne30_t232_wgx3.232\"\n",
    "base_case_name = \"b.e30_alpha07c_cesm.B1850C_LTso.ne30_t232_wgx3.228\"\n",
    "CESM_output_dir = \"/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CESM_output_for_testing\"\n",
    "start_date = \"0001-01-01\"\n",
    "end_date = \"0021-01-01\"\n",
    "base_start_date = \"0001-01-01\"\n",
    "base_end_date = \"0045-01-01\"\n",
    "obs_data_dir = (\n",
    "    \"/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CUPiD_obs_data\"\n",
    ")\n",
    "ts_dir = None\n",
    "lc_kwargs = {\"threads_per_worker\": 1}\n",
    "serial = False\n",
    "ldf_root = \"../../examples/key_metrics/LDF_output/\"\n",
    "key_plots = [\n",
    "    \"GPP_ANN_LatLon_Mean.png\",\n",
    "    \"ELAI_ANN_LatLon_Mean.png\",\n",
    "    \"TOTECOSYSC_GlobalMean_ANN_TimeSeries_Mean.png\",\n",
    "    \"RegionalClimo_Amazonia_RegionalClimo_Mean.png\",\n",
    "]\n",
    "subset_kwargs = {}\n",
    "product = \"/glade/work/richling/CUPid_pr_test/CUPiD/examples/key_metrics/computed_notebooks//lnd/LDF.ipynb\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "81bf4573-8806-486f-a2f6-79e244415c07",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:39.273299Z",
     "iopub.status.busy": "2025-10-28T22:33:39.273031Z",
     "iopub.status.idle": "2025-10-28T22:33:39.276711Z",
     "shell.execute_reply": "2025-10-28T22:33:39.276028Z"
    },
    "papermill": {
     "duration": 0.008628,
     "end_time": "2025-10-28T22:33:39.277766",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.269138",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-cell"
    ]
   },
   "outputs": [],
   "source": [
    "# Want some base case parameter defaults to equal control case values\n",
    "if base_case_name is not None:\n",
    "    if base_start_date is None:\n",
    "        base_start_date = start_date\n",
    "\n",
    "    if base_end_date is None:\n",
    "        base_end_date = end_date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4104f878-a8c3-4d0f-8c00-555e6b2b3273",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:39.282941Z",
     "iopub.status.busy": "2025-10-28T22:33:39.282844Z",
     "iopub.status.idle": "2025-10-28T22:33:39.287219Z",
     "shell.execute_reply": "2025-10-28T22:33:39.286602Z"
    },
    "papermill": {
     "duration": 0.006906,
     "end_time": "2025-10-28T22:33:39.287790",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.280884",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-cell"
    ]
   },
   "outputs": [],
   "source": [
    "# convert start-date and end-date to year range\n",
    "case_year_range = [int(start_date.split(\"-\")[0]), int(end_date.split(\"-\")[0]) - 1]\n",
    "\n",
    "base_case_year_range = [\n",
    "    int(base_start_date.split(\"-\")[0]),\n",
    "    int(base_end_date.split(\"-\")[0]) - 1,\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ee0774cc-c68a-4385-b94c-08fa806f28c0",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:39.291140Z",
     "iopub.status.busy": "2025-10-28T22:33:39.290919Z",
     "iopub.status.idle": "2025-10-28T22:33:39.302984Z",
     "shell.execute_reply": "2025-10-28T22:33:39.302538Z"
    },
    "papermill": {
     "duration": 0.014582,
     "end_time": "2025-10-28T22:33:39.303810",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.289228",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "Full LDF output"
      ],
      "text/plain": [
       ""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ldf_comparison_name = f\"{case_name}_{case_year_range[0]}_{case_year_range[1]}_vs_{base_case_name}_{base_case_year_range[0]}_{base_case_year_range[1]}\"\n",
    "ldf_root = os.path.join(ldf_root, ldf_comparison_name)\n",
    "display(\n",
    "    HTML(\n",
    "        f'Full LDF output'\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9234aec-1fe5-4bbf-ad6c-fb565297afbe",
   "metadata": {
    "papermill": {
     "duration": 0.002163,
     "end_time": "2025-10-28T22:33:39.309428",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.307265",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## Key Metrics from LDF\n",
    "\n",
    "Some important things to look at from LDF include a comparison table and a few maps:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a5b02451-98ad-4089-b184-75391a262db3",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:39.312464Z",
     "iopub.status.busy": "2025-10-28T22:33:39.312357Z",
     "iopub.status.idle": "2025-10-28T22:33:39.315037Z",
     "shell.execute_reply": "2025-10-28T22:33:39.314451Z"
    },
    "papermill": {
     "duration": 0.004842,
     "end_time": "2025-10-28T22:33:39.315617",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.310775",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "comparison_table = os.path.join(ldf_root, \"amwg_table_comp.csv\")\n",
    "if os.path.isfile(comparison_table):\n",
    "    table = pd.read_csv(comparison_table)\n",
    "    display(HTML(table.to_html(index=False, float_format=\"{:6g}\".format)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "be819352-c723-4f48-afac-d93f6d192f96",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2025-10-28T22:33:39.319260Z",
     "iopub.status.busy": "2025-10-28T22:33:39.319008Z",
     "iopub.status.idle": "2025-10-28T22:33:39.324899Z",
     "shell.execute_reply": "2025-10-28T22:33:39.324479Z"
    },
    "papermill": {
     "duration": 0.008252,
     "end_time": "2025-10-28T22:33:39.325380",
     "exception": false,
     "start_time": "2025-10-28T22:33:39.317128",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "for path_to_key_plot in key_plots:\n",
    "    full_path = os.path.join(ldf_root, path_to_key_plot)\n",
    "    if os.path.isfile(full_path):\n",
    "        display(Image(full_path))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "cupid-infrastructure",
   "language": "python",
   "name": "cupid-infrastructure"
  },
  "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.11.4"
  },
  "papermill": {
   "duration": 1.585752,
   "end_time": "2025-10-28T22:33:39.546378",
   "exception": null,
   "input_path": "/glade/derecho/scratch/richling/tmp/tmp7q8dqa6d.ipynb",
   "output_path": "/glade/work/richling/CUPid_pr_test/CUPiD/examples/key_metrics/computed_notebooks/lnd/LDF.ipynb",
   "parameters": {
    "CESM_output_dir": "/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CESM_output_for_testing",
    "base_case_name": "b.e30_alpha07c_cesm.B1850C_LTso.ne30_t232_wgx3.228",
    "base_end_date": "0045-01-01",
    "base_start_date": "0001-01-01",
    "case_name": "b.e30_alpha07c_cesm.B1850C_LTso.ne30_t232_wgx3.232",
    "end_date": "0021-01-01",
    "key_plots": [
     "GPP_ANN_LatLon_Mean.png",
     "ELAI_ANN_LatLon_Mean.png",
     "TOTECOSYSC_GlobalMean_ANN_TimeSeries_Mean.png",
     "RegionalClimo_Amazonia_RegionalClimo_Mean.png"
    ],
    "lc_kwargs": {
     "threads_per_worker": 1
    },
    "ldf_root": "../../examples/key_metrics/LDF_output/",
    "obs_data_dir": "/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CUPiD_obs_data",
    "product": "/glade/work/richling/CUPid_pr_test/CUPiD/examples/key_metrics/computed_notebooks//lnd/LDF.ipynb",
    "serial": false,
    "start_date": "0001-01-01",
    "subset_kwargs": {},
    "ts_dir": null
   },
   "start_time": "2025-10-28T22:33:37.960626"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}