{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## One- and Two-Dimensional Scans of Potential Energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Introduction\n", "\n", "In this notebook, we will perform 1D and 2D scans of molecular potential energies using `tqchem`. The aim is to calculate and visualize the potential energy of a molecule (octane) as a function of torsion angle(s). We will cover the following steps:\n", "\n", "1. Set up the molecule and the calculation parameters.\n", "2. Perform the energy calculations for different torsion angles.\n", "3. Save the trajectory of the molecule.\n", "4. Plot and visualize the results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 1: Setting Up Paths and Parameters\n", "In this step, we import the necessary dependencies, define the input and output paths, create the molecule object and display it as a graph and 3D model.\n", "\n", "**Code Explanation**\n", "\n", "We specify the path to the XYZ file of the molecule and create an output directory for saving results, \n", "From the XYZ file we create a `MolecularSystem` and call `draw` to display its graph representation.\n", "By calling `plot_3D_molecule` we display the 3D structure of the molecule using py3Dmol." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:19:52.739287Z", "iopub.status.busy": "2025-01-24T17:19:52.739139Z", "iopub.status.idle": "2025-01-24T17:19:58.933748Z", "shell.execute_reply": "2025-01-24T17:19:58.933356Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAtfRJREFUeJzs3Xd8zXf///HHyd57iZAYsQlihdpiBDVKKVpKtbS9uinaotVNW6WtVhXVUq1de0asBAmxYoUkIiEyyV7n8/vDL+crTULGyX7db7dzu66c8/m8z+ucyyVP76lSFEVBCCGEEEKIUtKp7AKEEEIIIUT1JoFSCCGEEEKUiQRKIYQQQghRJhIohRBCCCFEmUigFEIIIYQQZSKBUgghhBBClIkESiGEEEIIUSYSKIUQQgghRJlIoBRCCCGEEGUigVIIIYQQQpSJBEohhBBCCFEmEiiFEEIIIUSZSKAUQgghhBBlIoFSCCGEEEKUiQRKIYQQQghRJhIohRBCCCFEmUigFEIIIYQQZSKBUgghhBBClIkESiGEEEIIUSYSKIUQQgghRJlIoBRCCCGEEGUigbKacXNzY/HixY+9RqVSsXXr1lK/x+HDh1GpVCQlJZW6jdIKDw9HpVIRHBxc4e8thBBCiNKptYFy0qRJqFQqVCoVenp61K9fn+nTp5OYmFjsNsoSfsoa+oQQQgghqopaGygBBg4cyJ07dwgPD2fFihVs376dV199tbLLEkIIIYSoVmp1oDQ0NMTJyQkXFxf69+/PmDFj2Ldvn+Z1tVrNJ598gouLC4aGhrRt25Y9e/ZoXm/QoAEA7dq1Q6VS0atXLwBOnz6Nt7c3dnZ2WFpa0rNnT86cOaO5z83NDYARI0agUqk0P9+4cYNhw4bh6OiImZkZHTt25MCBAwXqTk5OZty4cZiZmeHs7MzSpUsf+zmjoqIYM2YM1tbW2NraMmzYMMLDw5/4/Rw/fhwPDw+MjIzo3LkzFy5cyPf6pk2baNmyJYaGhri5ufHNN9/ke93NzY3PP/+cyZMnY25uTv369Vm+fHm+a06dOkW7du0wMjKiQ4cOnD17Nt/riYmJjB8/Hnt7e4yNjXF3d2fVqlVPrF0IIYQQFadWB8pH3bx5kz179qCvr6957vvvv+ebb75h0aJFnD9/ngEDBvD0009z/fp14GEYAjhw4AB37txh8+bNwMPAN3HiRI4ePUpAQADu7u74+PiQnJwMPAycAKtWreLOnTuan1NSUvDx8eHAgQOcPXuWAQMGMHToUG7dupWv1oULF9KmTRvOnDnD7Nmzefvtt9m/f3+hnystLY3evXtjZmbGkSNHOHbsGGZmZgwcOJCsrKzHficzZsxg0aJFnD59GgcHB55++mmys7MBCAoK4tlnn2Xs2LFcuHCB+fPn89FHH7F69ep8bXzzzTeaoPjqq68yffp0rly5AkBqaipDhgyhadOmBAUFMX/+fN57771893/00UeEhISwe/duLl++zLJly7Czs3ts3UIIIYSoYEo58fT0VOrWrVuhD09Pz2LXN3HiREVXV1cxNTVVjIyMFEABlG+//VZzjbOzs/LZZ5/lu69jx47Kq6++qiiKooSFhSmAcvbs2ce+V05OjmJubq5s375d8xygbNmy5Yl1tmjRQlm6dKnmZ1dXV2XgwIH5rhkzZowyaNCgQtv+7bfflKZNmypqtVrzemZmpmJsbKzs3bu30Pf09fVVAGX9+vWa5+Lj4xVjY2Pl77//VhRFUcaNG6d4e3vnu2/GjBlKixYt8tU6YcIEzc9qtVpxcHBQli1bpiiKovzyyy+KjY2Nkpqaqrlm2bJl+b7ToUOHKi+++GLRX5AQQgghKp1eeQXVu3fvEhUVVV7Na0Xv3r1ZtmwZaWlprFixgmvXrvG///0PgAcPHhAdHU23bt3y3dOtWzfOnTv32Hbv3bvH3LlzOXToEDExMeTm5pKWllagp/G/UlNT+fjjj9mxYwfR0dHk5OSQnp5e4D4vL68CPxe18jsoKIjQ0FDMzc3zPZ+RkcGNGzceW8+j72NjY0PTpk25fPkyAJcvX2bYsGH5ru/WrRuLFy8mNzcXXV1dANq0aaN5XaVS4eTkxL179zRteHh4YGJiUuRnmz59Os888wxnzpyhf//+DB8+nK5duz62biGEEEJUrHILlE5OTuXVtNbe09TUlMaNGwOwZMkSevfuzccff8yCBQs016hUqnz3KIpS4Ln/mjRpErGxsSxevBhXV1cMDQ3x8vIq1hDz3r17WbRoEY0bN8bY2JhRo0Y98b7C6syjVqvx9PRk7dq1BV6zt7d/YrtFvU9h34OiKAWuf3QKQd79arW6yOv/a9CgQURERLBz504OHDhA3759ee2111i0aFGJaxdCCCFE+Si3QBkYGFheTZebefPmMWjQIKZPn46zszPOzs4cO3aMHj16aK45ceIEnTp1AsDAwACA3NzcfO0cPXqUn376CR8fHwAiIyOJi4vLd42+vn6h902aNIkRI0YAD+dUFrZ4JiAgoMDPzZo1K/QztW/fnr///hsHBwcsLCye9BUUaLd+/frAw8Ux165d07xPixYtOHbsWL7rT5w4QZMmTTS9k0/SokUL/vjjD9LT0zE2Ni70s8HD4Dtp0iQmTZpE9+7dNXM7hRBCCFE1yKKcR/Tq1YuWLVvy+eefAw97DL/66iv+/vtvrl69yqxZswgODubNN98EwMHBAWNjY/bs2UNMTAz3798HoHHjxvzxxx9cvnyZkydPMn78eE1gyuPm5sbBgwe5e/euZu/Lxo0bs3nzZoKDgzl37hzjxo3T9OY96vjx43z99ddcu3aNH3/8kQ0bNmhq+q/x48djZ2fHsGHDOHr0KGFhYfj5+fHmm29y+/btx34fn3zyCQcPHuTixYtMmjQJOzs7hg8fDsC7777LwYMHWbBgAdeuXeP333/nhx9+KLCo5nHGjRuHjo4OU6ZMISQkhF27dhUIinPnzmXbtm2EhoZy6dIlduzYQfPmzYv9HkIIIYSoAJU7hbPyTJw4URk2bFiB59euXasYGBgot27dUnJzc5WPP/5YqVu3rqKvr694eHgou3fvznf9r7/+qtSrV0/R0dFRevbsqSiKopw5c0bp0KGDYmhoqLi7uysbNmxQXF1dle+++05z37///qs0btxY0dPTU1xdXRVFebjIp3fv3oqxsbFSr1495YcfflB69uypvPnmm5r7XF1dlY8//lh59tlnFRMTE8XR0VFZvHhxvpr4z4KfO3fuKC+88IJiZ2enGBoaKg0bNlSmTp2q3L9/v9DvJm9Rzvbt25WWLVsqBgYGSseOHZXg4OB8123cuFFp0aKFoq+vr9SvX19ZuHBhvtf/+5kVRVE8PDyUefPmaX729/dXPDw8FAMDA6Vt27bKpk2b8i3KWbBggdK8eXPF2NhYsbGxUYYNG6bcvHmz0LqFEEIIUTlUilKMiWxCCCGEEEIUQYa8hRBCCCFEmUigFEIIIYQQZSKBUgghhBBClIkESiGEEEIIUSbltg+lEEIIIcpHbm4ux44d4/Tp05w9e5YHDx4A4OjoiKenJ127dsXDw6OSqxS1iazyFkIIIaqJlJQUli5dyoEDB+jduzddu3alXbt2WFtboygKd+7cISgoiEOHDhESEsK4ceOYMGFCsQ+cEKK0JFAKIYQQ1YCvry8LFizgrbfeYsiQIejoPH7WWnp6Or/99hu7du3i+++/x93dvYIqFbWRBEohhBCiilu8eDEXL17ku+++w9zcvET3RkREMG3aNN5991369etXThWK2k7mUAohhBBV2I8//khUVBS//vorKpWqxPe7urqyefNmxo4di6GhId27dy+HKkVtJ6u8C9GrVy/eeuutcn2P+fPn07Zt2yJfP3z4MCqViqSkpHKtozDh4eGoVCqCg4Mr/L2FEEL8n7Nnz3Ls2DG+/vrrUoXJPMbGxqxdu5Z58+ZVyu8VUfPV2kA5adIkVCpVgUdoaCibN29mwYIFlV2iEEKIWiw7O5uZM2fy/fffk5KSwsyZM+nfvz/29vaoVCrmz59f6H1nzpyhX79+mJmZYWVlxciRI7l58yZmZmYsWLCAmTNnVuwHEbVCrQ2UAAMHDuTOnTv5Hg0aNMDGxqbEc1SEEEIIbdq6dStPP/00Dg4OxMfHs3z5cjIzMxk+fHiR91y5coVevXqRlZXFP//8w8qVK7l27Rrdu3cnNjaWbt26kZGRQXh4eIV9DlE71OpAaWhoiJOTU76Hrq5uviHvK1euYGJiwrp16zT3bd68GSMjIy5cuADA/fv3efnll3FwcMDCwoI+ffpw7ty5fO/15Zdf4ujoiLm5OVOmTCEjI6NYNR4/fhwPDw+MjIzo3Lmz5j3zbNq0iZYtW2JoaIibmxvffPNNvtfd3Nz4/PPPmTx5Mubm5tSvX5/ly5fnu+bUqVO0a9cOIyMjOnTowNmzZ/O9npiYyPjx47G3t8fY2Bh3d3dWrVpVrPqFEEKUzpo1a3jhhReAh/MgExMT8fPz44svvijynrlz52JoaMiOHTvw8fFh5MiR7Ny5k9jYWBYtWgTAtGnTCvweEKKsanWgLI5mzZqxaNEiXn31VSIiIoiOjmbq1Kl8+eWXtG7dGkVRGDx4MHfv3mXXrl0EBQXRvn17+vbtS0JCAgD//PMP8+bN47PPPiMwMJA6derw008/Fev9Z8yYwaJFizh9+jQODg48/fTTZGdnAxAUFMSzzz7L2LFjuXDhAvPnz+ejjz5i9erV+dr45ptvNEHx1VdfZfr06Vy5cgWA1NRUhgwZQtOmTQkKCmL+/Pm89957+e7/6KOPCAkJYffu3Vy+fJlly5ZhZ2dXxm9WCCFEURITEzEzM8PS0hJAMy3rcXJyctixYwfPPPMMFhYWmuddXV3p3bs3W7ZsAcDLy6tAx4EQZVVuq7yzs7OJi4srr+YLZWdnh76+frGv37FjB2ZmZpqfBw0axIYNGwpc9+qrr7Jr1y6ef/55DAwM8PT05M033wQe7gt24cIF7t27h6GhIQCLFi1i69atbNy4kZdffpnFixczefJkXnrpJQA+/fRTDhw4UKxeynnz5uHt7Q3A77//jouLC1u2bOHZZ5/l22+/pW/fvnz00UcANGnShJCQEBYuXMikSZM0bfj4+PDqq68C8P777/Pdd99x+PBhmjVrxtq1a8nNzWXlypWYmJjQsmVLbt++zfTp0zX337p1i3bt2tGhQwfgYa+nEEKI8nPmzBnN37nFdePGDdLT02nTpk2B19q0acP+/fvJyMjAyMgICwsLkpOTZXqX0JpyC5RxcXEV3qX+8ssvU6dOnWJf37t3b5YtW6b52dTUtMhrV65cSZMmTdDR0eHixYuafykGBQWRkpKCra1tvuvT09O5ceMGAJcvX2batGn5Xvfy8sLX1/eJNXp5eWn+u42NDU2bNuXy5cuadocNG5bv+m7durF48WJyc3M1JyM8+peLSqXCycmJe/fuadrw8PDAxMSk0PcEmD59Os888wxnzpyhf//+DB8+nK5duz6xdiGEEKVz8eLFQoPh48THxwMPf1f8l42NDYqikJiYSJ06dWjVqhUhISF07txZK/UKUW6B0s7Ojpdffrm8mi/yPUvC1NSUxo0bF+vac+fOkZqaio6ODnfv3sXZ2RkAtVpNnTp1OHz4cIF7rKysSlRPceWFWUVRCgyBFLZP/X97bVUqFWq1usjr/2vQoEFERESwc+dODhw4QN++fXnttdc083GEEEJoV0pKSr4RtJJ43NB43mvm5uakpqaWqn0hClNugVJfX79EvYVVWUJCApMmTeKDDz7g7t27jB8/njNnzmBsbEz79u25e/cuenp6RQ4FN2/enICAAM3kaoCAgIBivXdAQAD169cHHs6puXbtGs2aNQOgRYsWHDt2LN/1J06coEmTJsU+t7VFixb88ccfpKenY2xsXGRt9vb2TJo0iUmTJtG9e3fN3E4hhBDap6+vT1ZWVonuyRspy+upfFRCQgIqlUrT0ZGVlVWiKWJCPIksyimGadOmUa9ePT788EO+/fZbFEXRLFzp168fXl5eDB8+nL179xIeHs6JEyf48MMPCQwMBODNN99k5cqVmu0b5s2bx6VLl4r13p988gkHDx7k4sWLTJo0CTs7O82WEe+++y4HDx5kwYIFXLt2jd9//50ffvihwKKaxxk3bhw6OjpMmTKFkJAQdu3aVSAozp07l23bthEaGsqlS5fYsWMHzZs3L/Z7CCGEKJlGjRoRGhpa4nuMjY0L7AYCcOHCBRo3boyRkREA169fp2HDhlqpVQiQQPlEa9asYdeuXfzxxx/o6elhYmLC2rVrWbFiBbt27UKlUrFr1y569OjB5MmTadKkCWPHjiU8PBxHR0cAxowZw9y5c3n//ffx9PQkIiIi36KXx/nyyy9588038fT05M6dO/z7778YGBgA0L59e/755x/Wr19Pq1atmDt3Lp988km+BTlPYmZmxvbt2wkJCaFdu3Z88MEHfPXVV/muMTAwYPbs2bRp04YePXqgq6vL+vXri/0eQgghSsbT01PTKVFcenp6DB06lM2bN5OcnKx5/tatW/j6+jJy5EjNc1FRUZqpW0Jog0opziQ6IYQQQlQYRVHo168f+/bt00xh2r17N6mpqSQnJzN58mRGjx7Ns88+CzzczcPExIQrV67QsWNH2rdvz6xZs8jIyGDu3LkkJCQQHByMvb09t27d4sMPP2TNmjWV+RFFDSOBUgghhKiCFi5cSPPmzRkyZAjwcMu2iIiIQq8NCwvTzOMPCgri/fffx9/fHz09Pfr06cOiRYto1KgRAB9++CEDBw7kqaeeqpDPIWoHCZRCCCFEFRQfH8+4cePYuXMnenraWUN79+5dJk2axO7du5+4UboQJSFzKIUQQogqyNbWlueee67AkbqlpSgKb775Jl9//bWESaF1EiiFEEKIKmrixImcO3eOffv2lbmtr7/+mg4dOpR4w3QhikOGvIUQQogqLCMjg3HjxvH8888zYsSIEt+vVqtZsGABGRkZfP7559I7KcqF9FAKIYQQVZiRkRHr16/n2LFjvPTSSyQlJRX73tDQUIYOHUqdOnX44osvJEyKciM9lEIIIUQ1cfz4cT777DMaN27MlClTaN26NTo6+fuGMjMzOXHiBCtWrECtVvPFF18UeZKbENoigVIIIYSoZv7991+WLl2K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8zg5OTFw4EBcXV210nZVoSgK0dHRREZGcvjwYbKyspg9e3at6tUQRVu2bBnOzs4MGzasskupFIqikJCQkG/+Y2JiIgDW1taa8Ojq6oqNjU2p/+45ceIEv/zyC6tXry7z318XL17ko48+YvPmzbXuHwESKIUQVVpkZCR79uwhOjqali1b4u3tXSMXpuzdu5fQ0FBee+21yi5FVAH3799n8eLFjBo1ipYtW1Z2ORVCrVZz9+5dTYC8deuWZlsxJycnTYCsX78+5ubmWn3vJUuWcPv2bb766qtSB8Fr164xbdo0/vrrLxwdHbVaX3Ugq7yFEFVavXr1eOmllzh37hwHDx7khx9+oFu3bnTr1q1G9eQZGxuTnp5e2WWIKuL69euoVCoaNWpU2aWUm+zsbKKiojTzHyMjI8nKykJXV5e6devSrl076tevT7169cp9LvUbb7zBkiVLeOGFF/j++++xsbEp0f07duzg+++/588//6yVYRIkUAohqgGVSkXbtm1p3rw5R48e5dixY5w9exZvb29atmxZI4aW8gKloig14vOIsrl+/Tr169evUYvS0tPT8/U+RkdHo1arMTQ0pH79+nTv3p369evj7OyMnl7Fx5M33niDgIAARo0axQsvvMDYsWOf+P1fvnyZr776CgcHB/7999/HbiVU00mgFEJUG4aGhvTr14/27duzb98+Nm3axOnTpxk4cCB16tSp7PLKxNjYGLVaTXZ2tqzoruVycnIICwur9lsF3b9/XzP38datW8TGxgJgbm5O/fr1ad26Na6urtjb21eZRXddunRh165drF27lqeffhp3d3c6depE27ZtsbS01PxvExQUxPHjx3F2dubdd9+ldevWlV16pZM5lEKIauvGjRvs3buX2NhY2rVrR9++favtZsI3btzgzz//5K233qqRc0RF4dLS0rh48SIPHjxAV1cXFxcXANatW8f06dNxcHCo5AqLR1EUYmNj8/VA3r9/HwA7O7t88x+trKyqRS+8oijcuHGDoKAgzp07R3JyMrq6uri6uuLp6Un79u0fuxdlbSOBUghRranVak6fPs3hw4dRFIWePXvSqVOnJ+57WdVERUWxYsUKXnnllSL3pxQ1Q0xMDD/99BMHDhxApVJhb2+PoaEharWa5ORkoqOjUalUzJs3j6effrpK/lnOzc3lzp07mvmPt27dIj09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Xr2qNiczOTkZLVq00Fm9RA0BF+UQERGVY25uDisrKzx8+BDNmzdHREQEQkND4e/vj6FDhyI6Olqtva+vL6RSKQYPHoxx48ahffv2sLKywu3bt7Fp0yaUlJSoQuiNGzfQtm1bmJiY6OOtEdUZbmxORET0lJMnT+LcuXMIDQ1F//79ERUVVWlbQRBQUlKCGTNm4M8//0RycjKKi4vh5uaG/v37Y+HChZBIJACAGTNmYNq0aejWrVt9vRWiesFASURE9BRBEBAQEIAvvvgCbdq00Umff//9N1atWoXvv/9eJ/0RNSQMlERERBW4c+cO5s6di4MHD0IkEmnVV0lJCYYNG4adO3fCzc1NRxUSNRxclENERFSB9u3b46233sKHH36IsrKyWvcjk8kQHByM2bNnM0yS0WKgJCIiqsTbb7+t2lMyJyenxs9/+PAhRo4cibFjx+K1116rgwqJGgbe8iYiInqG6OhoLF68GNOmTcObb74JM7OqN0kpKSnB7t27sW/fPqxfv577TpLRY6AkIiKqhuLiYnz55Zf45Zdf0KdPH/Tp0wc+Pj5wdnYGAKSnpyM2NhZnzpxBXFwcRo4cicmTJ6NJkyZ6rpyo7jFQEhER1UBZWRmio6Nx4cIFxMXFITc3FyYmJhCLxapjF318fLjXJDUqDJREREREpBUuyiEiIiIirTBQEhEREZFWGCiJiIiISCsMlERERESkFQZKIiIiItIKAyURERERaYWBkoiIiIi0wkBJRERERFphoCQiIiIirTBQEhEREZFWGCiJiIiISCsMlERERESkFQZKIiIiItIKAyURERERaYWBkoiIiIi0wkBJRERERFphoCQiIiIirTBQEhEREZFWGCiJiIiISCsMlERERESkFQZKIiIiItIKAyURERERaYWBkoiIiIi0wkBJRERERFphoCQiIiIirTBQEhEREZFWGCiJiIiISCsMlERERESkFQZKIiIiItIKAyURERERaYWBkoiIiIi0wkBJRERERFphoCQiIiIirTBQEhEREZFWGCiJiIiISCsMlERERESkFQZKIiIiItIKAyURERERaeX/AXF66qwh+PAQAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/3dmoljs_load.v0": "
\n

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n
\n", "text/html": [ "
\n", "

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from pathlib import Path\n", "from plotly import graph_objects as go\n", "\n", "from tqchem.ttconf.electronic_structure_interfaces import TBliteInterface\n", "from tqchem.molgraph import molecularSystem\n", "from tqchem.internal_coordinates import MolecularGrid\n", "from tqchem.chem import xyz_contents\n", "from tqchem.viewer import plot_3D_molecule, display_trajectory\n", "\n", "\n", "xyz = Path(\"../tests/octane.xyz\")\n", "output_dir = Path(\".outputs_screen_energy\")\n", "output_dir.mkdir(exist_ok=True)\n", "\n", "# read octane.xyz into MoleculrSystem class and draw the graph/molecule\n", "octane = molecularSystem(xyz)\n", "octane.draw()\n", "view = plot_3D_molecule(octane.ase)\n", "view.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2: Internal coordinates and bond to screen\n", "\n", "In this step, set up the internal coordinates for octane (Bonds, Angles and Torsions) and we define the bond to be rotated, and the grid of torsion angles.\n", "\n", "**Code Explanation**\n", "\n", "We choose a number of grid points, i.e. how many points we want to sample when rotating around the bond.\n", "Because `molecularSystem` sets sensible default grids for each bond (used in the conformer optimization), we need to reconstruct the molecular system while overwriting these default grids with the grid we want.\n", "Then we set up the `MolecularGrid` for octane which constructs the\n", "internal coordinates for the system. The `shift_by_reference` keyword, let's change dihedral values based on the initial structure instead of setting all dihedrals to 0.0 initially.\n", "We determine the bond we want to rotate around as index of the list of `variable_atom_indices`.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:19:58.935437Z", "iopub.status.busy": "2025-01-24T17:19:58.935123Z", "iopub.status.idle": "2025-01-24T17:19:59.982803Z", "shell.execute_reply": "2025-01-24T17:19:59.982405Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Bond(1, 2)', 'Bond(2, 3)', 'Bond(3, 4)', 'Bond(4, 5)', 'Bond(5, 6)']\n" ] } ], "source": [ "n_gridpoints = 120\n", "dihedral_angles = np.linspace(0, 360, n_gridpoints, endpoint=False)\n", "octane = molecularSystem(xyz)\n", "\n", "molecule_grid = MolecularGrid(\n", " octane, shift_by_reference=True, overwrite_grids=dihedral_angles\n", ")\n", "print(molecule_grid.list_variables())\n", "bond_grid_shape = molecule_grid.shape()\n", "\n", "bond_index = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3: Screen single coordinate\n", "\n", "We first set up an energy calculator (using the GFN2-xTB method) and an output file to store all the geometries of octane while scanning the coordinate.\n", "We then loop through the values of the coordinate, calculate the energy and save the coordinates in the trajectory file.\n", "\n", "**Code Explanation**\n", "\n", "The `superindex` is a list of indices telling each variable (rotatable bond) of the molecular grid, which value of the grid it should assume." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:19:59.984526Z", "iopub.status.busy": "2025-01-24T17:19:59.984139Z", "iopub.status.idle": "2025-01-24T17:21:42.541875Z", "shell.execute_reply": "2025-01-24T17:21:42.541433Z" } }, "outputs": [], "source": [ "superindex = [0] * molecule_grid.n_variables()\n", "\n", "energy_calculator = TBliteInterface(\n", " method=\"GFN2-xTB\", ref_mol=octane.ase, local_optimization=False\n", ")\n", "energies = []\n", "xyzs = []\n", "\n", "output_name = \"octane34\"\n", "\n", "for i in bond_grid_shape[bond_index]:\n", " superindex[bond_index] = i\n", " molecule = molecule_grid(superindex)\n", " energies.append(energy_calculator(molecule.ase))\n", " xyzs.append(xyz_contents(molecule.ase))\n", "\n", "trajectory_file = output_dir / f\"{output_name}.xyz\"\n", "_ = trajectory_file.write_text(\"\".join(xyzs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 4: Plot results\n", "\n", "We convert the gridpoints into degree of the dihedral angle and plot the energy as a function of the dihedral angle." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:21:42.543963Z", "iopub.status.busy": "2025-01-24T17:21:42.543491Z", "iopub.status.idle": "2025-01-24T17:21:42.764627Z", "shell.execute_reply": "2025-01-24T17:21:42.764103Z" } }, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "mode": "lines+markers", "type": "scatter", "x": [ 0.0, 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0, 24.0, 27.0, 30.0, 33.0, 36.0, 39.0, 42.0, 45.0, 48.0, 51.0, 54.0, 57.0, 60.0, 63.0, 66.0, 69.0, 72.0, 75.0, 78.0, 81.0, 84.0, 87.0, 90.0, 93.0, 96.0, 99.0, 102.0, 105.0, 108.0, 111.0, 114.0, 117.0, 120.0, 123.0, 126.0, 129.0, 132.0, 135.0, 138.0, 141.0, 144.0, 147.0, 150.0, 153.0, 156.0, 159.0, 162.0, 165.0, 168.0, 171.0, 174.0, 177.0, 180.0, 183.0, 186.0, 189.0, 192.0, 195.0, 198.0, 201.0, 204.0, 207.0, 210.0, 213.0, 216.0, 219.0, 222.0, 225.0, 228.0, 231.0, 234.0, 237.0, 240.0, 243.0, 246.0, 249.0, 252.0, 255.0, 258.0, 261.0, 264.0, 267.0, 270.0, 273.0, 276.0, 279.0, 282.0, 285.0, 288.0, 291.0, 294.0, 297.0, 300.0, 303.0, 306.0, 309.0, 312.0, 315.0, 318.0, 321.0, 324.0, 327.0, 330.0, 333.0, 336.0, 339.0, 342.0, 345.0, 348.0, 351.0, 354.0, 357.0 ], "y": [ -715.5428070697623, -715.5529181547522, -715.5607656976241, -715.5662342886097, -715.5692583689497, -715.5698383379851, -715.568049093288, -715.5640411803577, -715.5580357406417, -715.5503149257539, -715.5412094728713, -715.531084890745, -715.5203273543631, -715.5093300606421, -715.4984805127827, -715.4881489976308, -715.4786783963626, -715.4703754072136, -715.4635032375465, -715.4582758178315, -715.454853585523, -715.4533408715293, -715.4537848940125, -715.4561763237034, -715.4604513411506, -715.466495060996, -715.4741461603986, -715.4832025205143, -715.4934276716139, -715.5045578267734, -715.5163092914917, -715.5283860472291, -715.5404873227984, -715.5523149866718, -715.5635806153053, -715.574012114234, -715.5833597918349, -715.5914018055624, -715.597948920067, -715.6028485308285, -715.6059879180974, -715.6072967013246, -715.6067484655545, -715.6043615286841, -715.6001988143175, -715.5943667917002, -715.5870134447157, -715.5783252398844, -715.5685230815344, -715.5578572717984, -715.5466015356466, -715.5350462202912, -715.5234908313291, -715.5122361134858, -715.5015759171371, -715.4917891055375, -715.483131750623, -715.4758298386356, -715.4700726647675, -715.4660070465455, -715.4637324359558, -715.4632969704073, -715.4646944775611, -715.46786244299, -715.4726809627754, -715.4789727309319, -715.4865041532966, -715.4949877317252, -715.5040859243566, -715.5134167571337, -715.5225615316212, -715.5310750309179, -715.5384986481663, -715.5443768308578, -715.5482771420542, -715.5498140743346, -715.5486763349406, -715.5446560615188, -715.5376759066185, -715.5278078216724, -715.5152784502125, -715.5004587741478, -715.4838364789703, -715.4659700960614, -715.4474273229457, -715.4287149386678, -715.4102118314814, -715.3921183156015, -715.3744336159909, -715.3569693017403, -715.3394003275916, -715.3213485715866, -715.3024875979714, -715.2826521193582, -715.2619316220404, -715.2407278768196, -715.2197626457036, -715.200031158191, -715.1827056532494, -715.16900184001, -715.1600284794174, -715.1566441809165, -715.159345028605, -715.1682017129831, -715.1828559197857, -715.2025745488733, -715.2263497063981, -715.253025016639, -715.2814260617612, -715.3104745059795, -715.3392705958454, -715.3671361206486, -715.3936181595082, -715.4184608309339, -715.4415561413185, -715.4628860348146, -715.4824667893653, -715.5003045406428, -715.5163673337139, -715.5305752968106 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "title": { "text": "Dihedral of Bond(4,3) (°)" } }, "yaxis": { "title": { "text": "Energy (eV)" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = go.Figure()\n", "fig.add_trace(go.Scatter(x=dihedral_angles, y=energies, mode=\"lines+markers\"))\n", "fig.update_layout(xaxis_title=\"Dihedral of Bond(4,3) (°)\", yaxis_title=\"Energy (eV)\")\n", "fig.show()\n", "\n", "output_html = output_dir / f\"{output_name}.html\"\n", "fig.write_html(output_html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 5: Visualize the conformers during the screening" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:21:42.766950Z", "iopub.status.busy": "2025-01-24T17:21:42.766770Z", "iopub.status.idle": "2025-01-24T17:21:42.774587Z", "shell.execute_reply": "2025-01-24T17:21:42.774129Z" } }, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n
\n", "text/html": [ "
\n", "

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "view = display_trajectory(xyzs, repetitions=1, time=30)\n", "view.show()\n", "# view.apng(100) # display as animated png (apng)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 6: Screening two coordinates\n", "\n", "We now want to screen two dihedral angles and select the bond connecting the carbon atoms 2 and 3\n", "and the bond connecting carbon atom 3 and 4.\n", "To reduce the computational time we select only 25 grid points per coordinate,\n", "for which we set up a new `molecularSystem` and `MolecularGrid` object." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:21:42.776885Z", "iopub.status.busy": "2025-01-24T17:21:42.776714Z", "iopub.status.idle": "2025-01-24T17:21:43.800180Z", "shell.execute_reply": "2025-01-24T17:21:43.799775Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Bond(1, 2)', 'Bond(2, 3)', 'Bond(3, 4)', 'Bond(4, 5)', 'Bond(5, 6)']\n", "[range(0, 25), range(0, 25), range(0, 25), range(0, 25), range(0, 25)]\n" ] } ], "source": [ "n_gridpoints = 25\n", "dihedral_angles = np.linspace(0, 360, n_gridpoints, endpoint=False)\n", "octane = molecularSystem(xyz)\n", "\n", "molecule_grid = MolecularGrid(\n", " octane, shift_by_reference=True, overwrite_grids=dihedral_angles\n", ")\n", "print(molecule_grid.list_variables())\n", "grid = molecule_grid.shape()\n", "print(grid)\n", "\n", "bond_index1 = 1\n", "bond_index2 = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 7: Screen two coordinates\n", "\n", "We now repeat Step 3, but instead of iterating over the grid for one coordinate,\n", "we iterate over the product of the two coordinates." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:21:43.801574Z", "iopub.status.busy": "2025-01-24T17:21:43.801420Z", "iopub.status.idle": "2025-01-24T17:30:39.719124Z", "shell.execute_reply": "2025-01-24T17:30:39.718651Z" } }, "outputs": [], "source": [ "from itertools import product\n", "\n", "superindex = [0] * molecule_grid.n_variables()\n", "\n", "energy_calculator = TBliteInterface(\n", " method=\"GFN2-xTB\", ref_mol=octane.ase, local_optimization=False\n", ")\n", "energies = np.zeros((n_gridpoints, n_gridpoints))\n", "xyzs = []\n", "\n", "output_name = \"octane_23_34\"\n", "trajectory_file = output_dir / f\"{output_name}.xyz\"\n", "\n", "for i, j in product(grid[bond_index1], grid[bond_index2]):\n", " superindex[bond_index1] = i\n", " superindex[bond_index2] = j\n", " molecule = molecule_grid(superindex)\n", " energies[i, j] = energy_calculator(molecule.ase)\n", " xyzs.append(xyz_contents(molecule.ase))\n", "\n", "_ = trajectory_file.write_text(\"\".join(xyzs))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:30:39.720981Z", "iopub.status.busy": "2025-01-24T17:30:39.720767Z", "iopub.status.idle": "2025-01-24T17:30:39.745044Z", "shell.execute_reply": "2025-01-24T17:30:39.744679Z" } }, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n
\n", "text/html": [ "
\n", "

3Dmol.js failed to load for some reason. Please check your browser console for error messages.

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "view = display_trajectory(xyzs, repetitions=1, time=100)\n", "view.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 8: Plot energy as a function of both dihedral angles" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2025-01-24T17:30:39.756551Z", "iopub.status.busy": "2025-01-24T17:30:39.756400Z", "iopub.status.idle": "2025-01-24T17:30:39.774340Z", "shell.execute_reply": "2025-01-24T17:30:39.773991Z" } }, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "type": "surface", "x": [ 0.0, 14.4, 28.8, 43.2, 57.6, 72.0, 86.4, 100.8, 115.2, 129.6, 144.0, 158.4, 172.8, 187.20000000000002, 201.6, 216.0, 230.4, 244.8, 259.2, 273.6, 288.0, 302.40000000000003, 316.8, 331.2, 345.6 ], "y": [ 0.0, 14.4, 28.8, 43.2, 57.6, 72.0, 86.4, 100.8, 115.2, 129.6, 144.0, 158.4, 172.8, 187.20000000000002, 201.6, 216.0, 230.4, 244.8, 259.2, 273.6, 288.0, 302.40000000000003, 316.8, 331.2, 345.6 ], "z": [ [ -715.5428070697624, -715.5699153804527, -715.5449950318344, -715.4942658264731, -715.4574427987428, -715.4604513411512, -715.5022727870372, -715.5591596614042, -715.6001137007211, -715.6036682581029, -715.5685230815335, -715.5144487334782, -715.4721797566681, -715.4657546327185, -715.496769826586, -715.538498648166, -715.5456964971703, -715.4906668949026, -715.4029207794586, -715.317649393602, -715.2197626457038, -715.1568442073831, -715.2164250949724, -715.3505587061766, -715.4669415438912 ], [ -715.4831941288536, -715.5404625095281, -715.5286573959909, -715.4788666958091, -715.4378671538415, -715.4361228361455, -715.4756346019044, -715.533632534066, -715.5779793808824, -715.585054605702, -715.5514158881039, -715.4954975919751, -715.4485102949033, -715.4371279065751, -715.4665743855359, -715.514348738769, -715.5417168461383, -715.5213320112631, -715.4505035250183, -715.3224059161055, -715.1554597362291, -715.0701535948351, -715.13783621959, -715.2622525396902, -715.3779790748642 ], [ -715.4107758615605, -715.4964502328172, -715.4885586168458, -715.433336765043, -715.3860320064367, -715.3810031148163, -715.4216156144646, -715.4837662691464, -715.5324284367173, -715.5413933018881, -715.5059321458397, -715.444988927641, -715.3923593145429, -715.3784245434916, -715.4111718604295, -715.469423149658, -715.5141733108107, -715.5067107440257, -715.4115328040904, -715.2059677742217, -714.9700411720959, -714.8911955709235, -714.9845423491829, -715.1096028286144, -715.2543113238686 ], [ -715.3702901856169, -715.4635252829138, -715.4460973598481, -715.3810839666172, -715.328460451897, -715.3237434029363, -715.3690152413669, -715.4366993440062, -715.4883273213384, -715.496058670168, -715.4556392273507, -715.3884677371682, -715.3321118626538, -715.3199438809514, -715.3599673482406, -715.4283723791306, -715.480109225415, -715.4590813146413, -715.3027585349731, -715.0017895256074, -714.7304291961801, -714.7078358451516, -714.8280577226095, -714.9633293780149, -715.1653154739728 ], [ -715.3835122806399, -715.4566428588276, -715.4216672016081, -715.3489905218536, -715.296370245577, -715.2966534814201, -715.3482482057065, -715.4196834830128, -715.4706105401842, -715.4738011680707, -715.4273881043017, -715.3561928779218, -715.3007976872364, -715.2947495532961, -715.3426654907809, -715.4155640892985, -715.4594940416998, -715.3997197250496, -715.1611759097665, -714.7896343780354, -714.569053375895, -714.6272228129138, -714.7460932819408, -714.9069103774489, -715.1673898804625 ], [ -715.4191356848206, -715.45963489494, -715.4166275227279, -715.3515436388507, -715.3091896015826, -715.3177265813141, -715.3732748667677, -715.443458556399, -715.4894499033436, -715.4869858987846, -715.437313829399, -715.3675378933522, -715.3182033331602, -715.3194277402746, -715.3708915507451, -715.4388453676802, -715.4609584450418, -715.3498613573404, -715.0473138267924, -714.6974909948964, -714.6000404395488, -714.6841932370739, -714.7683515917596, -714.9549647817141, -715.2331043366648 ], [ -715.3584828589865, -715.3874970501729, -715.3934719508998, -715.378767063568, -715.3609184879489, -715.3763019864773, -715.4289702907614, -715.4918149746456, -715.5310948400835, -715.5262814833243, -715.479868056811, -715.4175831105631, -715.3759999556991, -715.3802057522638, -715.4268371606572, -715.4808315208428, -715.4763837898822, -715.3300167969925, -715.0352308171958, -714.8031906266885, -714.7827550985412, -714.7819686096191, -714.766071124609, -714.9358354279999, -715.2125318350782 ], [ -714.906883719652, -715.0663715146319, -715.3033475313791, -715.4076713446525, -715.4197270447606, -715.4316296701854, -715.4711344421818, -715.5228009070124, -715.5598809651667, -715.5623611957016, -715.5279990576275, -715.4760067411388, -715.4370045405526, -715.4334462112156, -715.464797108854, -715.5017418146357, -715.4844805639498, -715.3509469717337, -715.1421708510659, -715.0117829345437, -714.8959571572998, -714.5584442220049, -714.2296653478, -714.4547761618777, -714.811919814609 ], [ -713.5815231459268, -714.5009219286633, -715.2075099331087, -715.4219032005736, -715.4334231608533, -715.4201696065526, -715.4367731317939, -715.4835868807139, -715.5362219180965, -715.5626875013927, -715.546384366361, -715.4975429568752, -715.4440386915048, -715.4139531079677, -715.421621581671, -715.4536791444464, -715.4600121748915, -715.3917532850178, -715.2698151336971, -715.0592200964369, -714.3717983784749, -712.8546299411123, -712.27576503805, -713.199498960674, -713.4744520917768 ], [ -712.012043639811, -714.2932156663259, -715.1818175381642, -715.3704868738246, -715.3338422893044, -715.2778702198453, -715.2823995355935, -715.3572963890166, -715.4554890707512, -715.5149166516089, -715.5038079963465, -715.4303984565177, -715.3310353789369, -715.2578159780674, -715.2568773125857, -715.3261774168084, -715.3994206275804, -715.3961304169009, -715.198190796851, -714.3108255166462, -711.2947147660661, -707.1131918832557, -709.8769668555904, -710.8163481274254, -710.0948131155026 ], [ -712.30210321063, -714.3249648471444, -715.0590923112694, -715.18707171921, -715.0972423179965, -715.0251371467025, -715.0724926471122, -715.2153296749048, -715.3581285642603, -715.4204663902613, -715.3734065189999, -715.2372597441555, -715.0772623477387, -714.9910945509998, -715.0439776060713, -715.193276436304, -715.3171333474728, -715.2263135541368, -714.3603094348463, -710.6037803974228, 450.23140195986076, -705.5202689858319, -707.1993701147826, -704.96095726913, -707.2674481329769 ], [ -712.2984325184503, -714.024588653959, -714.8493179355534, -714.9552785877441, -714.8541605214817, -714.8312179002878, -714.9464117427932, -715.1224795609967, -715.2554437120735, -715.2766087751448, -715.1700248531982, -714.9806803095437, -714.8172958137101, -714.7948825297307, -714.9245026279472, -715.1024317395554, -715.1306868539854, -714.4683255120249, -711.0678811861867, 779.3103173733033, -702.7807955733118, -703.8440787576385, -700.4858105122878, -702.1391161073803, -709.3863519722875 ], [ -711.5361884880224, -714.0538594496641, -714.8361407401156, -714.8589342489441, -714.7671922066457, -714.7724260726762, -714.8878784242844, -715.0451866397135, -715.1533537801769, -715.1462658609058, -715.0190053242429, -714.8410724019147, -714.7255538878807, -714.7419320711645, -714.8678348441028, -714.9698282475441, -714.6248379409118, -712.3816471281062, 125.23008820279297, -703.204095081162, -702.5342096398292, -697.5503312757343, -699.0313491500883, -706.1360104202938, -709.0432337663688 ], [ -712.7349492606882, -714.6869320267365, -714.9890003701548, -714.8827434538215, -714.7578138317748, -714.7456635195812, -714.8640112412787, -715.035745867704, -715.149664030621, -715.1407739521024, -715.0158574390159, -714.843792450516, -714.7204481185296, -714.7210784833404, -714.8276087651848, -714.7900541279157, -713.8190056092511, -710.2220703740136, -706.8757343619425, -704.1143251346714, 98.3921399718066, -696.3201782999909, -703.9887319707026, -705.9906470267453, -706.8723279389578 ], [ -714.5537744368257, -715.1473151262778, -715.0978378657055, -714.9116800353925, -714.7904408283323, -714.8288511950111, -714.9972346385665, -715.1774953437259, -715.2680366240888, -715.2262000919133, -715.0694444615541, -714.8758146518112, -714.7653130546996, -714.8150713658674, -714.9289735287512, -714.7509004157729, -713.583859590897, -711.2232831630572, -707.6693996598691, 198.90437664519723, 278.2017430198198, -704.1911998405476, -705.1474183463642, 180.5277446202824, -711.5234284032057 ], [ -715.2670576483902, -715.322466000898, -715.1780849987316, -715.0297150862322, -714.992329880183, -715.0882404403453, -715.2437467881975, -715.3667566460119, -715.3962287003324, -715.3133182482567, -715.1538430992646, -715.0127921140313, -714.9906960227873, -715.086956839672, -715.1633006706334, -714.9313280989329, -713.890631701443, -711.2091784996661, 69.06626280647367, 306.787177405844, -706.6316601357083, -706.9789055902239, 93.35498407935175, -711.2934517698476, -714.5016743265004 ], [ -715.4535336975704, -715.4163123458912, -715.3222623232133, -715.254354593854, -715.2613080358633, -715.3331394002687, -715.4242685218067, -715.4862987484161, -715.4852925735255, -715.4168197655138, -715.3202245156633, -715.2618688249868, -715.2777617148981, -715.3388273977763, -715.3467693404748, -715.0399434358284, -713.7466640225745, -709.9103344055021, 39.94224131165564, -709.8152175728194, -710.3834911954858, -709.4377641436475, -712.1573643371772, -714.5234104743301, -715.2942435625945 ], [ -715.4843253236238, -715.4916268412417, -715.4576874164682, -715.4203480074293, -715.4111395076752, -715.4372486842965, -715.4849192595831, -715.5278985592466, -715.5409111296503, -715.5169775933625, -715.4743538369127, -715.4409191503343, -715.4326328950281, -715.4408571826106, -715.3912401912362, -715.02360661054, -713.8150026146686, -712.1287102740822, -712.6114936882634, -713.1601694685556, -712.9195415699328, -713.4615956748798, -714.6032651551625, -715.2069800448825, -715.4150430550302 ], [ -715.4568004035826, -715.5132492993604, -715.50240409201, -715.459475767783, -715.4262087287667, -715.4273883302297, -715.4634082025686, -715.5133324576996, -715.5491714970318, -715.5529896327041, -715.5251630547685, -715.4816234716286, -715.4451060617811, -715.4252522831774, -715.373831862413, -715.1434686330338, -714.675408425232, -714.482694509333, -714.6503880090985, -714.57887637972, -714.465752051669, -714.7063526250736, -715.0349625202896, -715.2273749414114, -715.3481770885404 ], [ -715.4112136808159, -715.4898831449166, -715.4769019773815, -715.4211274756971, -715.3741239097609, -715.3683014100004, -715.4073004074643, -715.4680793249561, -715.5167993545133, -715.5280791207781, -715.4967903266256, -715.4400778671729, -715.3888256836387, -715.3658150208605, -715.3569912284142, -715.3160225940139, -715.261001694279, -715.2639655773322, -715.2056290726339, -714.9804140481175, -714.7939346565003, -714.8368309025581, -714.9781399802532, -715.0969877313131, -715.2499251116594 ], [ -715.3901314922088, -715.4626874761553, -715.4362511703986, -715.3697988681772, -715.3177762447841, -715.3136583033572, -715.3592502390023, -715.4272614205929, -715.4797430446904, -715.489116607562, -715.4508684417037, -715.3857963602418, -715.3303653970366, -715.3151234406748, -715.3431302022997, -715.39097773342, -715.4298130298253, -715.4065194392779, -715.2309279510264, -714.9215404651109, -714.7200444373419, -714.7611450530407, -714.8671614026492, -714.9944882417986, -715.2023533356031 ], [ -715.4124753399011, -715.460785774659, -715.4195793026008, -715.347739816316, -715.2970090529037, -715.2981942604922, -715.3492752402692, -715.4196188821713, -715.4702631112388, -715.4747768797648, -715.4311689901821, -715.3633972906014, -715.310508571154, -715.3042633861825, -715.3487090971586, -715.4163850887137, -715.4537180848014, -715.3807338707757, -715.1322242443742, -714.8097658783245, -714.6848086543957, -714.7524504322125, -714.8397742611141, -714.9994832280047, -715.2381652999173 ], [ -715.4669971032909, -715.4894289136492, -715.4396685323568, -715.3689544567584, -715.3234593167778, -715.3298039065335, -715.3827323295625, -715.4509045889411, -715.4970513796408, -715.4973077863212, -715.4520512472056, -715.3866359530189, -715.3394223230679, -715.3392396785665, -715.3866120272615, -715.4493683429403, -715.4651848565958, -715.3520180353702, -715.0845923388449, -714.8357114100638, -714.7950115452803, -714.8484309515144, -714.9239265480783, -715.1072125336038, -715.3315732097014 ], [ -715.5257618342944, -715.5333044241921, -715.4844677961872, -715.4199397529551, -715.3802393971149, -715.3887828666714, -715.4395303895307, -715.5030256805064, -715.5449159962675, -715.5436313307647, -715.5005320200692, -715.4401397694918, -715.3979253936903, -715.3991922785283, -715.4423441340848, -715.49399687778, -715.4916939331004, -715.3685185930581, -715.1480357972847, -714.9998429128088, -714.985346581998, -714.9985943971384, -715.0688311702644, -715.24685523676, -715.4295200522705 ], [ -715.5579038582147, -715.5668749160725, -715.5275403868832, -715.4708881510829, -715.4345453098985, -715.4416109937484, -715.4878529455907, -715.5468890788744, -715.586837320176, -715.587033988266, -715.5481030461485, -715.4922458376095, -715.4518573153921, -715.4504214367646, -715.4868581858659, -715.5299817888884, -715.5244780422953, -715.4270486849092, -715.2825571911117, -715.1941455803889, -715.1520899943108, -715.1238578303797, -715.1876916282873, -715.3429283482994, -715.4840269749186 ] ] } ], "layout": { "autosize": false, "height": 700, "margin": { "b": 50, "l": 50, "r": 50, "t": 60 }, "scene": { "xaxis": { "title": { "text": "Dihedral of Bond(3,2) (°)" } }, "yaxis": { "title": { "text": "Dihedral of Bond(4,3) (°)" } }, "zaxis": { "title": { "text": "Energy (eV)" } } }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ], "sequentialminus": [ [ 0.0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1.0, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Surface plot of energy" }, "width": 700 } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a 2D surface plot of the energy landscape\n", "fig = go.Figure(\n", " data=[\n", " go.Surface(\n", " # z=-1.0 / np.sqrt(np.abs(energies)),\n", " z=energies,\n", " x=dihedral_angles,\n", " y=dihedral_angles,\n", " )\n", " ]\n", ")\n", "\n", "fig.update_scenes(\n", " xaxis_title=\"Dihedral of Bond(3,2) (°)\",\n", " yaxis_title=\"Dihedral of Bond(4,3) (°)\",\n", " zaxis_title=\"Energy (eV)\",\n", ")\n", "fig.update_layout(\n", " title=\"Surface plot of energy\",\n", " autosize=False,\n", " width=700,\n", " height=700,\n", " margin=dict(l=50, r=50, b=50, t=60),\n", ")\n", "fig.show()" ] } ], "metadata": { "kernelspec": { "display_name": "tqchem", "language": "python", "name": "python3" }, "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.8" } }, "nbformat": 4, "nbformat_minor": 4 }