{ "cells": [ { "cell_type": "markdown", "id": "8e86520a", "metadata": {}, "source": [ "# Figure 2D: per-method scaled error and slope vs a CCSD(T) reference (NS372)\n", "\n", "Each conventional method placed by **scaled error** (RMSE after rescaling into CCSD(T) units via the\n", "per-method fit) and **slope** of that fit, vs a CCSD(T)/pcSseg-3 reference on the NS372 benchmark\n", "(proton shieldings); third axis is the method's introduction year, colored by Jacob's-ladder rung." ] }, { "cell_type": "code", "execution_count": null, "id": "37fd61c1", "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "\n", "# make the in-repo modules importable (not pip-installed)\n", "REPO = os.path.abspath(\"../..\")\n", "for _p in (\"analysis/code\", \"analysis/code/shared\"):\n", " sys.path.insert(0, os.path.join(REPO, _p))" ] }, { "cell_type": "code", "execution_count": null, "id": "3de7e8c2", "metadata": {}, "outputs": [], "source": "import leveling\nimport convergence_plot" }, { "cell_type": "code", "execution_count": null, "id": "de9503d1", "metadata": {}, "outputs": [], "source": [ "# the Kaupp NS372 spreadsheet is small and ships in the repo's data/ns372/ folder\n", "KAUPP_XLSX = os.path.join(REPO, \"data\", \"ns372\", \"ct1c00919_si_002.xlsx\")\n", "\n", "def figure_path(name):\n", " os.makedirs(\"figures\", exist_ok=True)\n", " return os.path.join(\"figures\", name)" ] }, { "cell_type": "code", "execution_count": null, "id": "a3bba2c1", "metadata": {}, "outputs": [], "source": [ "# the 1H / pcSseg-3 slice as a raw-named table, then per-method statistics (slope and scaled RMSE vs CCSD(T)).\n", "cc_df = leveling.load_ns372_1h_convergence(KAUPP_XLSX)\n", "fig2c_results_df = leveling.convergence_statistics(cc_df)\n", "print(f\"{len(fig2c_results_df)} methods vs CCSD(T)/pcSseg-3\")\n", "fig2c_results_df.sort_values(\"RMSE (scaled)\").head(6)" ] }, { "cell_type": "code", "execution_count": null, "id": "afb2a097", "metadata": {}, "outputs": [], "source": [ "# rung colors follow Jacob's ladder (DFT approximation hierarchy).\n", "METHOD_COLOR_MAP = {\n", " \"Ab Initio\": \"#2B2B2B\",\n", " \"LDA\": \"#3B82F6\",\n", " \"GGA\": \"#1A2A6B\",\n", " \"Meta-GGA\": \"#1E7A8B\",\n", " \"Global Hybrid\": \"#22C55E\",\n", " \"Range-Separated Hybrid\": \"#F59E0B\",\n", " \"Local Hybrid\": \"#EF4444\",\n", " \"Double Hybrid\": \"#A855F7\",\n", "}\n", "\n", "methods_categorization = {\n", " \"HF\": \"Ab Initio\", \"MP2\": \"Ab Initio\",\n", " \"SVWN\": \"LDA\",\n", " \"BP86\": \"GGA\", \"BLYP\": \"GGA\", \"PBE\": \"GGA\", \"KT1\": \"GGA\", \"KT2\": \"GGA\",\n", " \"KT3\": \"GGA\", \"HCTH\": \"GGA\", \"B97D\": \"GGA\",\n", " \"TPSS\": \"Meta-GGA\", \"τ-HCTH\": \"Meta-GGA\", \"M06-L\": \"Meta-GGA\", \"VSXC\": \"Meta-GGA\",\n", " \"MN15-L\": \"Meta-GGA\", \"B97M-V\": \"Meta-GGA\", \"SCAN\": \"Meta-GGA\", \"rSCAN\": \"Meta-GGA\",\n", " \"r2SCAN\": \"Meta-GGA\",\n", " \"TPSSh\": \"Global Hybrid\", \"B3LYP\": \"Global Hybrid\", \"B97-2\": \"Global Hybrid\",\n", " \"PBE0\": \"Global Hybrid\", \"M06\": \"Global Hybrid\", \"PW6B95\": \"Global Hybrid\",\n", " \"BHLYP\": \"Global Hybrid\", \"MN15\": \"Global Hybrid\", \"M06-2X\": \"Global Hybrid\",\n", " \"CAM-B3LYP\": \"Range-Separated Hybrid\", \"ωB97X-D\": \"Range-Separated Hybrid\",\n", " \"ωB97X-V\": \"Range-Separated Hybrid\", \"ωB97M-V\": \"Range-Separated Hybrid\",\n", " \"LH07s-SVWN\": \"Local Hybrid\", \"MPSTS\": \"Local Hybrid\", \"LHJ14\": \"Local Hybrid\",\n", " \"LH07t-SVWN\": \"Local Hybrid\", \"LH12ct-SsirPW92\": \"Local Hybrid\",\n", " \"LH12ct-SsifPW92\": \"Local Hybrid\", \"LH14t-calPBE\": \"Local Hybrid\", \"LH20t\": \"Local Hybrid\",\n", " \"B2PLYP\": \"Double Hybrid\", \"B2GP-PLYP\": \"Double Hybrid\", \"DSD-PBEP86\": \"Double Hybrid\",\n", "}\n", "\n", "year_map = {\n", " \"ωB97X-D\": 2008, \"ωB97X-V\": 2014, \"r2SCAN\": 2020, \"M06-L\": 2006, \"B97D\": 1997,\n", " \"SVWN\": 1980, \"MP2\": 1934, \"HF\": 1930, \"DSD-PBEP86\": 2011, \"BP86\": 1988, \"BLYP\": 1988,\n", " \"PBE\": 1996, \"KT1\": 2003, \"KT2\": 2003, \"HCTH\": 1998, \"TPSS\": 2003, \"τ-HCTH\": 2002,\n", " \"VSXC\": 1998, \"MN15-L\": 2016, \"B97M-V\": 2015, \"KT3\": 2004, \"SCAN\": 2015, \"rSCAN\": 2019,\n", " \"TPSSh\": 2003, \"B3LYP\": 1994, \"B97-2\": 1998, \"PBE0\": 1999, \"M06\": 2008, \"PW6B95\": 2005,\n", " \"BHLYP\": 1993, \"MN15\": 2016, \"M06-2X\": 2008, \"CAM-B3LYP\": 2004, \"ωB97M-V\": 2016,\n", " \"LH07s-SVWN\": 2007, \"LH07t-SVWN\": 2007, \"LHJ14\": 2014, \"LH12ct-SsirPW92\": 2017,\n", " \"LH12ct-SsifPW92\": 2017, \"LH14t-calPBE\": 2014, \"LH20t\": 2020, \"B2PLYP\": 2006,\n", " \"B2GP-PLYP\": 2006, \"MPSTS\": 2021,\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "62e50faa", "metadata": {}, "outputs": [], "source": "highlight_methods = [\n \"DSD-PBEP86\", \"LH07t-SVWN\", \"LH14t-calPBE\", \"ωB97X-D\", \"ωB97X-V\",\n \"BHLYP\", \"M06-L\", \"r2SCAN\", \"B97D\", \"SVWN\", \"MP2\", \"HF\",\n]\n\nfig, ax, saved = convergence_plot.plot_statistics_3d_emphasize_rungs(\n x_param=\"Slope\",\n y_param=\"RMSE (scaled)\",\n z_param=None,\n results_df=fig2c_results_df,\n methods_categorization=methods_categorization,\n method_color_map=METHOD_COLOR_MAP,\n year_map=year_map,\n save_path=figure_path(\"fig2d_convergence_1H.png\"),\n dpi=200,\n highlight_methods=highlight_methods,\n highlight_marker_size=80, # uniform with the non-highlighted points\n highlight_edgewidth=1.3,\n highlight_text=True,\n highlight_text_size=8,\n highlight_text_dx_frac=0.03,\n highlight_text_dy_frac=-0.05,\n highlight_text_dz=2.0,\n year_tick_step=5,\n z_jitter_by_category=0.03,\n z_lane_by_category=True,\n z_lane_width=2,\n elev=12,\n azim=25,\n xlim=(0.99, 1.105),\n ylim=(0, 0.40),\n z_break=(1935, 1980),\n z_break_gap=8,\n zlim=(1930, 2025),\n xy_lane_by_category=True,\n xy_lane_strength=0.1,\n xy_lane_style=\"circle\",\n lane_exclude_categories=(\"ab initio\",),\n group_by_decade=False,\n)" } ], "metadata": { "kernelspec": { "display_name": "magnet-venv", "language": "python", "name": "magnet-venv" }, "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.12.13" } }, "nbformat": 4, "nbformat_minor": 5 }