{ "cells": [ { "cell_type": "markdown", "id": "22688575", "metadata": {}, "source": [ "# Tutorial 1 – SPaiNN Database\n", "\n", "This tutorial describes how data needs to be prepared and stored in order to be used with **SPaiNN**. \n", "If you are using SHARC to generate data or already have an existing database for SchNarc this step is simple and straight forward. \n", "If you generate your data with other tools you might have to create a custom script to convert the data in the correct form. For latter you find a description on how data needs to be prepared in this tutorial.\n", "\n", "The data pipeline of **SpaiNN** mainly consists of DatabaseUtils and involves the creation of a database using the ``GenerateDB`` class or the conversion of existing databases (e.g., SchNarc database) using the ``ConvertDB`` class.\n", "\n", "## Convert an existing database\n", "\n", "The following example demonstrates how to convert an existing database into a **SPaiNN** database.\n", "For this purpose, we use the database obtained for the methylenimmonium cation ($\\mathsf{CH_2NH_2^+}$), which was *e.g.* used in combination with the SchNarc sofware package.\n", "\n", "\n", "\n", "The sample SchNarc database (``schnarc_ch2nh2+.db``) contains energies, forces, non-adiabatic coupling, dipoles, and spin-orbit couplings of 99 geometries of the methylenimmonium cation.\n", "The respective properties are stored in form of an Atomic Simulation Environment (ASE) databse.\n", "\n", "In the following way, one can perform the conversion of the databases.\n", "\n", "**1. Import Required Packages**\n", "\n", "To start, you need to import necessary packages. This can be achieved by including the following lines of code:" ] }, { "cell_type": "code", "execution_count": 1, "id": "32d43b98", "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "from ase.db import connect\n", "\n", "import spainn\n", "from spainn.asetools import ConvertDB" ] }, { "cell_type": "markdown", "id": "0f1e0916", "metadata": {}, "source": [ "**2. Converting the Database**\n", "\n", "To convert an existing database, you employ the `convert` function from the `ConvertDB` module of **SPaiNN**. This function brings the property entries of the existing databse in the shapes as needed in the SPaiNN data pipeline. For instance, the forces must be of shape $N_{atoms}\\times N_{states}\\times 3$. \n", "Moreover, the nonadiabatic couplings can be smoothed when converting the database, *i.e.*, the original nonadiabatic coupling entries are divided by the energy difference of the respective coupled states. Here’s how to perform this step:" ] }, { "cell_type": "code", "execution_count": 2, "id": "0a3c8729", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:spainn.asetools.convert_db:Converting /home/carolin/Documents/00_software/SPaiNN/tutorials/data/schnarc_ch2nh2+.db into /home/carolin/Documents/00_software/SPaiNN/tutorials/data/spainn_ch2nh2+.db\n", "INFO:spainn.asetools.convert_db:/home/carolin/Documents/00_software/SPaiNN/tutorials/data/schnarc_ch2nh2+.db has 99 entries\n", "INFO:spainn.asetools.convert_db:/home/carolin/Documents/00_software/SPaiNN/tutorials/data/schnarc_ch2nh2+.db keys: energy socs forces nacs dipoles\n" ] } ], "source": [ "%rm ./data/spainn_ch2nh2+.db\n", "# Path to existing and to-be-created database\n", "oldDB = os.path.join(os.getcwd(), 'data', 'schnarc_ch2nh2+.db')\n", "newDB = os.path.join(os.getcwd(), 'data', 'spainn_ch2nh2+.db')\n", "\n", "convDB = ConvertDB()\n", "convDB.convert(olddb=oldDB, newdb=newDB, copy_metadata=True, smooth_nacs=True)" ] }, { "cell_type": "markdown", "id": "b02571ab", "metadata": {}, "source": [ "**3. Updating Metadata**\n", "\n", "Finally, you update the metadata information of the database. Noteworthy, for now we have just kept the metadata information of the original **SchNarc** database. However, we have to add a dictionary of units (properties and atomic coordinates) and states (number of singlet, doublet, and triplet states) as metadata. This is required at later stages in the **SPaiNN** data pipeline. The following code snippet demonstrates how to add this information during the database conversion:" ] }, { "cell_type": "code", "execution_count": 3, "id": "3bd47b2c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n_singlets': 3,\n", " 'n_triplets': 0,\n", " 'states': 'S S S ',\n", " 'phasecorrected': False,\n", " 'ReferenceMethod': 'MR-CISD(6,4)/aug-cc-pVDZ, program: COLUMBUS',\n", " 'atomrefs': {}}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Current metadata\n", "db_new = connect(newDB)\n", "metadata_ori = db_new.metadata\n", "metadata_ori" ] }, { "cell_type": "code", "execution_count": 4, "id": "1fd9dc73", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n_singlets': 3,\n", " 'n_triplets': 0,\n", " 'states': 'S S S ',\n", " 'phasecorrected': False,\n", " 'ReferenceMethod': 'MR-CISD(6,4)/aug-cc-pVDZ, program: COLUMBUS',\n", " 'atomrefs': {},\n", " '_distance_unit': 'Bohr',\n", " '_property_unit_dict': {'energy': 'Hartree',\n", " 'forces': 'Hartree/Bohr',\n", " 'nacs': '1',\n", " 'smooth_nacs': '1'}}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Dictionary of units and how to add it to existing metadata\n", "\n", "unit_dict = {\n", " '_distance_unit': 'Bohr',\n", " '_property_unit_dict': {'energy': 'Hartree', 'forces': 'Hartree/Bohr', 'nacs': '1', 'smooth_nacs': '1'},\n", "}\n", "\n", "db_new.metadata = {**metadata_ori, **unit_dict}\n", "db_new.metadata" ] }, { "cell_type": "markdown", "id": "4aba2aff", "metadata": {}, "source": [ "## Overview of the dataset (energies)" ] }, { "cell_type": "code", "execution_count": 5, "id": "d4961ac8", "metadata": {}, "outputs": [ { "data": { "image/png": "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tWuH9u3bA/j/APvvgPHkHaWlnty/J38aQdM2hBD46quvtNYik8nQtGlTLFmyBAkJCapT371798ZHH32EGzduPPUUakW+32Q5GIRIr86cOaM6x65QKHDw4EHEx8fDysoKW7duLXOH15NWrlyJffv2oVevXggMDMTjx49V/5da+kOMzs7OqFmzJn788Ud06dIFNWrUgIeHR6Vv9fbz80Pfvn0RHR0NX19ffPPNN9izZw8WLFiguvunVatWqFevHt577z0UFxfDzc0NW7duxaFDh8psr0mTJtiyZQtWrFiBFi1aoFq1amq/q/SkuXPnYseOHejUqRPmzJmDGjVqYP369di5cycWLlyo9W6hioqNjUV4eDg6deqE9957D7a2toiLi8OZM2ewcePGZ7ojKCMjQ+Nt3p6enmp3L5XH5MmT8cMPP6Bjx46YMmUKgoKCoFQqkZGRgZ9//hnvvvvuUwPKzJkzsX37dnTp0gUzZ86Evb09Vq5cqbp7sFo17VcDDBkyBOvXr0fPnj0xadIktG7dGjY2Nrh+/Tr279+Pfv36oX///uX6nBpL6S9Hf/nll3B2doadnR1q166t8ZSYNvoYd6VSqfocFBQUICMjA7t378bmzZvRoEEDbN68WbVsu3bt4Obmhv/85z+YO3cubGxssH79epw6darMdps0aQIAWLBgASIiImBlZYWgoCCEh4fD1tYWQ4cOxdSpU/H48WOsWLECd+/eVVt/x44diIuLw8svv4w6depACIEtW7bg3r17CA8PBwC89NJLePPNNzFq1CikpqaiY8eOcHR0xK1bt3Do0CE0adIE//3vf1X1lPf7TRbEZJdpU5VSemdV6cvW1lZ4eXmJ0NBQMX/+fKFQKMqs8+87uY4cOSL69+8vatasKeRyuXB3dxehoaEiMTFRbb1ffvlFNGvWTMjlcgFAjBgxQm17T94xpK0vIf65a6xXr17i+++/F40aNRK2traiVq1aYvHixWXWv3jxoujWrZtwcXERnp6e4p133hE7d+4sc8dOTk6OGDRokKhevbqQyWRqfULD3W5//vmn6NOnj3B1dRW2traiadOmIj4+Xm2Z0rvGvvvuO7X5pXcc/Xt5TQ4ePCg6d+4sHB0dhb29vWjTpo3Yvn27xu3p466x119/XbVsaGioaNSoUZltjBgxoswdOA8fPhSzZs0S9erVE7a2tsLV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iIioijBpEEpNTUWnTp1U06XX9owYMQLR0dFITEwEAAQHB6utt3//foSFhRmrTCIiIqqiTBqEwsLCIITQ2q6rjYiIiOhZ8VljREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWQxCREREJFkMQkRERCRZDEJEREQkWSYNQgcOHECfPn3g5+cHmUyGbdu2qbULIRAdHQ0/Pz/Y29sjLCwMZ8+eNU2xREREVOWYNAjl5eWhadOmWLZsmcb2hQsXYvHixVi2bBlSUlLg4+OD8PBwPHjwwMiVEhERUVVkbcrOIyIiEBERobFNCIGlS5di5syZGDBgAABg7dq18Pb2xoYNGzB+/HhjlkpERERVkNleI5Seno7MzEx069ZNNU8ulyM0NBSHDx82YWVERERUVZj0iJAumZmZAABvb2+1+d7e3vj777+1rldQUICCggLVdG5urmEKJCIiIotntkeESslkMrVpIUSZeU+KjY2Fq6ur6hUQEGDoEomIiMhCmW0Q8vHxAfD/R4ZKKRSKMkeJnhQVFYX79++rXteuXTNonURERGS5zDYI1a5dGz4+PtizZ49qXmFhIX799Ve0a9dO63pyuRwuLi5qLyIiIiJNTHqN0MOHD3H58mXVdHp6Ok6ePIkaNWogMDAQkydPxvz58/HCCy/ghRdewPz58+Hg4IDXXnvNhFUTERFRVVGpIFSnTh2kpKTA3d1dbf69e/fQvHlzXLlypVzbSU1NRadOnVTTkZGRAIARI0YgISEBU6dOxaNHj/DWW2/h7t27CAkJwc8//wxnZ+fKlE1ERESkplJB6OrVqygpKSkzv6CgADdu3Cj3dsLCwiCE0Nouk8kQHR2N6OjoypRJREREpFOFglBiYqLqv3/66Se4urqqpktKSrB3717UqlVLb8URERERGVKFgtDLL78M4J8jNSNGjFBrs7GxQa1atbBo0SK9FUdERERkSBUKQkqlEsA/d3SlpKTAw8PDIEUR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E2Pgqsononc/ZN3O1tp+/VoG/AMCNbZ5e3pg944fDVVapenapyvp6TrXTUtLQ/OQlzS26RoLQPd4PG2czXUsddG1T4bcH1P1ayqX09IQ1qaZ1va/r11HzQB/jW01PL2xZXuSoUozOzcuXUbciFit7dXyHxuxGsNLS0tDi3YttLZ7eXhhd+Juvfcb0TcCimyF0fuVMrMOQteuXcOkSZPw888/w87OrlzrREVFITIyUjWdm5uLgIAAQ5WoU9btbAz/IF5r+6xX22ttXzdrlKHKeia69mnWq+11rlusVOpcV9dY6RqPp42zuY6lLrr2yZD7Y6p+TUZZjOTYwVqb/Qf9T2t7WNRmQ1VllqopixA/vZXW9u7jqlZILlYWY0zcGK3tq99abZB+FdkKk/QrZWYdhI4dOwaFQoEWLf4/lZeUlODAgQNYtmwZCgoKYGVlpbaOXC6HXC43dqlERERkgcw6CHXp0gV//vmn2rxRo0ahfv36mDZtWpkQRERERFQRZh2EnJ2d0bhxY7V5jo6OcHd3LzOfiIiIqKIs4q4xIiIiIkMw6yNCmiQnJ5u6BCIiIqoieESIiIiIJItBiIiIiCSLQYiIiIgki0GIiIiIJItBiIiIiCSLQYiIiIgki0GIiIiIJItBiIiIiCSLQYiIiIgki0GIiIiIJItBiIiIiCSLQYiIiIgki0GIiIiIJItBiIiIiCTL2tQFWLqI3v2QdTtbY9uV9HQjV0MVpev9Awz3HqalpaF5yEuV6vdp616/lgH/gMAKtz1rv96eHti940eNbQP69EDO7Syt69bw9MaW7Ula283R5bQ0hLVpprU9/UqaEavRD137VFRQaORqiIyDQegZZd3OxvAP4jW2zXq1vZGroYrS9f4BhnsPi5XKSvdbnnV1fSYN1e+6WaO0tuXczkJy7GCt7WFRm7W2mS1lsc598h/0PyMWoyc69smzz2kjF0NkHDw1RkRERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSxSBEREREksUgRERERJLFIERERESSZdZBKDY2Fq1atYKzszO8vLzw8ssv48KFC6Yui4iIiKoIsw5Cv/76KyZMmIDff/8de/bsQXFxMbp164a8vDxTl0ZERERVgLWpC9AlKSlJ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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "db_spainn = connect(newDB)\n", "\n", "table_data = [\n", " {\n", " 'Molecule': db_spainn.get_atoms(mols+1).get_chemical_formula(),\n", " 'S$_0$': db_spainn.get(mols+1).data['energy'][0][0],\n", " 'S$_1$': db_spainn.get(mols+1).data['energy'][0][1],\n", " 'S$_2$': db_spainn.get(mols+1).data['energy'][0][2]\n", " }\n", " for mols in range(len(db_spainn))\n", "]\n", "\n", "df = pd.DataFrame(table_data)\n", "\n", "# Create a combined histogram plot\n", "sns.histplot(data=df, bins=60, kde=False, multiple='layer')\n", "\n", "# Set labels and title\n", "plt.xlabel('Energy / Hartree')\n", "plt.ylabel('Count')\n", "plt.title('Distribution of Energies in the Dataset')\n", "\n", "# Show the plot\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }