{ "cells": [ { "cell_type": "markdown", "id": "54c81d8b-b0bc-463a-a89a-eace54106f2d", "metadata": {}, "source": [ "## Initial imports" ] }, { "cell_type": "code", "execution_count": 1, "id": "646ac933-1033-4a21-be93-145e6b8218b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PLAMS working folder: /path/plams/examples/ReactionsDiscovery/plams_workdir.002\n" ] } ], "source": [ "from typing import List\n", "import scm.plams as plams\n", "from scm.input_classes import engines\n", "from scm.reactions_discovery import ReactionsDiscoveryJob\n", "from rdkit import Chem\n", "from rdkit.Chem import Draw\n", "\n", "# Settings for displaying molecules in the notebook\n", "from rdkit.Chem.Draw import IPythonConsole\n", "\n", "IPythonConsole.ipython_useSVG = True\n", "IPythonConsole.molSize = 250, 250\n", "\n", "# this line is not required in AMS2025+\n", "plams.init()" ] }, { "cell_type": "markdown", "id": "dccfa8cf-d714-4794-8cee-16f2a2c7a56e", "metadata": {}, "source": [ "## Helpers for showing molecules" ] }, { "cell_type": "code", "execution_count": 2, "id": "75b4eb3a-7df4-4d07-849d-b26b0648c565", "metadata": {}, "outputs": [], "source": [ "def draw_molecules(molecules: List[plams.Molecule]):\n", " smiles = [molecule.properties.smiles for molecule in molecules]\n", " return draw_smiles(smiles)\n", "\n", "\n", "def draw_smiles(smiles: List[str]):\n", " rd_mols = [Chem.MolFromSmiles(s) for s in smiles]\n", " return Draw.MolsToGridImage(rd_mols)" ] }, { "cell_type": "markdown", "id": "c20519db-4075-4ed7-b9f4-8c71efd95ea0", "metadata": {}, "source": [ "## The ReactionsDiscoveryJob class" ] }, { "cell_type": "code", "execution_count": 3, "id": "4eb04a9f-76f2-4f50-9474-afeff147d9be", "metadata": {}, "outputs": [], "source": [ "job = ReactionsDiscoveryJob(name=\"MyDiscovery\")\n", "driver = job.input\n", "md = driver.MolecularDynamics" ] }, { "cell_type": "markdown", "id": "7428aa3d-cffe-405d-acee-05b338eaf425", "metadata": {}, "source": [ "## Setting up the reactants for molecular dynamics" ] }, { "cell_type": "code", "execution_count": 4, "id": "cfd00f27-0f8b-4739-a359-8d6871159da7", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", "H2O\n", "\n", "\n", "\n", "\n", "\n", "NH2\n", "HO\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "O\n", "O\n", "" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "md.NumSimulations = 4\n", "build = md.BuildSystem\n", "build.NumAtoms = 250\n", "build.Density = 0.9\n", "build.Molecule[0].SMILES = \"O\" # Water\n", "build.Molecule[0].MoleFraction = 1\n", "build.Molecule[1].SMILES = \"NCCO\" # MEA\n", "build.Molecule[1].MoleFraction = 2\n", "build.Molecule[2].SMILES = \"O=C=O\" # Carbondioxide\n", "build.Molecule[2].MoleFraction = 3\n", "draw_smiles([build.Molecule[i].SMILES.val for i in range(len(build.Molecule))])" ] }, { "cell_type": "markdown", "id": "80c6cf90-1ff3-4fe4-917f-8f08b489e18d", "metadata": {}, "source": [ "## Setting up reactive molecular dynamics" ] }, { "cell_type": "code", "execution_count": 5, "id": "74a4161c-af92-4b80-90e5-02cddcf6291e", "metadata": {}, "outputs": [], "source": [ "md.Enabled = \"Yes\"\n", "md.Type = \"NanoReactor\"\n", "reactor = md.NanoReactor\n", "reactor.NumCycles = 10\n", "reactor.Temperature = 500\n", "reactor.MinVolumeFraction = 0.6" ] }, { "cell_type": "markdown", "id": "68065274-aafe-4c71-a3b6-c7874e2f1346", "metadata": {}, "source": [ "## Setting up network extraction and ranking" ] }, { "cell_type": "code", "execution_count": 6, "id": "ad3a5359-ba17-4078-952b-2011b3f7e4aa", "metadata": {}, "outputs": [], "source": [ "network = driver.NetworkExtraction\n", "network.Enabled = \"Yes\"\n", "network.UseCharges = \"Yes\"\n", "ranking = driver.ProductRanking\n", "ranking.Enabled = \"Yes\"" ] }, { "cell_type": "markdown", "id": "8e12fa12-45cf-482e-b08b-f882e52721e0", "metadata": {}, "source": [ "## Selecting the AMS engine to use" ] }, { "cell_type": "code", "execution_count": 7, "id": "6cb9802e-1f11-45cd-a6c1-4e451278e3d3", "metadata": {}, "outputs": [], "source": [ "engine = engines.ReaxFF()\n", "engine.ForceField = \"Glycine.ff\"\n", "engine.TaperBO = \"Yes\" # This is a really important setting for reaction analysis with ReaxFF potentials\n", "driver.Engine = engine" ] }, { "cell_type": "markdown", "id": "09e24a5e-c921-40d1-a76f-3a9a2dd569f6", "metadata": {}, "source": [ "## Running reactions discovery" ] }, { "cell_type": "code", "execution_count": 8, "id": "edd1b191-327e-40b8-9389-6229ace022c6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[11.02|09:43:46] JOB MyDiscovery STARTED\n", "[11.02|09:43:46] JOB MyDiscovery RUNNING\n", "[11.02|09:46:16] JOB MyDiscovery FINISHED\n", "[11.02|09:46:17] JOB MyDiscovery SUCCESSFUL\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = job.run() # start the job\n", "job.check() # check if job was succesful" ] }, { "cell_type": "markdown", "id": "f4d5a1ba-3601-4119-af28-2aa1fabd1424", "metadata": {}, "source": [ "## Obtain the results" ] }, { "cell_type": "code", "execution_count": 9, "id": "bb2f3296-d277-42c7-9217-6b2fd7256075", "metadata": {}, "outputs": [], "source": [ "graph, molecules, categories = result.get_network()" ] }, { "cell_type": "markdown", "id": "261ff4dd-5232-4c62-90ef-76b643654e27", "metadata": {}, "source": [ "## Categories\n", "\n", "The categories are `Products` `Reactants` and `Unstable`, as described in the reactions discovery manual. `molecules` is a dictionary with keys equal to the categories and each concomitant value is a list of PLAMS molecules." ] }, { "cell_type": "code", "execution_count": 10, "id": "2a4dc01a-416e-4f84-bf94-8bdff68541d0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Reactants', 'Products', 'Unstable']\n" ] } ], "source": [ "print(categories)" ] }, { "cell_type": "code", "execution_count": 11, "id": "273eeb7d-fd8c-4013-8d26-ade0573dbca8", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", "\n", "\n", "\n", "\n", "\n", "NH2\n", "HO\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "O\n", "O\n", "H2O\n", "" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "draw_molecules(molecules[\"Reactants\"])" ] }, { "cell_type": "markdown", "id": "7be84197-8c90-4622-9255-413fdfaf217a", "metadata": {}, "source": [ "## Products\n", "\n", "These are the side products that reactions discovery found in the order as found by the ranking algorithm." ] }, { "cell_type": "code", "execution_count": 12, "id": "ab518b1e-694b-406a-a46d-f61fae9356d1", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", "\n", "\n", "\n", "\n", "O\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "NH2\n", "O\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "HO\n", "NH\n", "OH\n", "\n", "\n", "\n", "\n", "\n", "\n", "NH\n", "OH\n", "NH3\n", "\n", "\n", "H2N\n", "OH\n", "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "draw_molecules(molecules[\"Products\"][:6])" ] }, { "cell_type": "markdown", "id": "f4b119bf-147a-4251-83f2-f7ccb5d7d400", "metadata": {}, "source": [ "## Unstable\n", "\n", "Unstable products were determined to not likely exist outside of reactive dynamics. This e.g. includes radicals or structures that don't form stable molecules in isolation. Not all unstable molecules have a sensible 2d structure, so instead we plot their 3d structure." ] }, { "cell_type": "code", "execution_count": 13, "id": "369bfce7-7cfa-4bfd-bd35-5f901e6d5cfb", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for unstable_molecule in molecules[\"Unstable\"][:3]:\n", " plams.plot_molecule(unstable_molecule);" ] }, { "cell_type": "markdown", "id": "537e6ab5-1684-48ba-8b2f-1c96301bb235", "metadata": {}, "source": [ "## Graph of the reaction network\n", "\n", "The graph is a bipartate networkx DiGraph with reaction and molecule nodes. This can be stored on disk in standard graph formats, e.g. `.gml`" ] }, { "cell_type": "code", "execution_count": 14, "id": "9322fa85-6f75-4fa9-9d0c-ba79de4ce649", "metadata": {}, "outputs": [], "source": [ "import networkx as nx\n", "\n", "nx.write_gml(graph, \"reaction_network.gml\")" ] }, { "cell_type": "markdown", "id": "d6155c64-420a-4e13-ad0d-945f4eda143a", "metadata": {}, "source": [ "## Load a job not originally run by PLAMS" ] }, { "cell_type": "code", "execution_count": 19, "id": "26b955b1-5777-4d89-9080-7e897ac14197", "metadata": {}, "outputs": [], "source": [ "from scm.plams import FileError\n", "\n", "try:\n", " job = ReactionsDiscoveryJob.load_external(\"plams_workdir/MyDiscovery\")\n", " graph, molecules, categories = job.results.get_network()\n", "except FileError:\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "id": "1e09313c-bfc1-4e58-a0d1-72736352b0ba", "metadata": {}, "outputs": [], "source": [] } ], "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.8.16" } }, "nbformat": 4, "nbformat_minor": 5 }