diff --git a/ipython/Conformer Generation Workflow.ipynb b/ipython/Conformer Generation Workflow.ipynb index f4b25044..ac89b8fb 100644 --- a/ipython/Conformer Generation Workflow.ipynb +++ b/ipython/Conformer Generation Workflow.ipynb @@ -9,8 +9,8 @@ "Leverage ETKDG and GeoMol as 3D geometry embedder for stochastic conformer generation\n", "\n", "The idea is to have modular methods for each step, which are currently hardcoded. This includes:\n", - "- initial conformer embedding (ETKDG, GeoMol)\n", - "- optimization/energy (MMFF, UFF, GFN-FF, GFN2-xTB)\n", + "- initial conformer embedding (ETKDG, GeoMol, Torsional-Diffusion)\n", + "- optimization/energy (MMFF, UFF, GFN-FF, GFN2-xTB, other semi-empirical in QM software)\n", "- pruning (torsion fingerprints, CREGEN)\n", "- convergence metrics (conformational entropy/partition function)" ] @@ -22,6 +22,8 @@ "metadata": {}, "outputs": [], "source": [ + "from pathlib import Path\n", + "\n", "from rdmc.conformer_generation.embedders import *\n", "from rdmc.conformer_generation.optimizers import *\n", "from rdmc.conformer_generation.pruners import *\n", @@ -29,7 +31,7 @@ "from rdmc.conformer_generation.generators import StochasticConformerGenerator\n", "from rdmc.conformer_generation.utils import dict_to_mol\n", "\n", - "from rdmc import RDKitMol\n", + "from rdmc import Mol\n", "from rdtools.view import mol_viewer, interactive_conformer_viewer, conformer_viewer\n", "\n", "T = 298 # K\n", @@ -66,7 +68,7 @@ "smi = \"[C:1]([C@@:2]([O:3][H:12])([C:4]([N:5]([C:6](=[O:7])[H:16])[H:15])([H:13])[H:14])[H:11])([H:8])([H:9])[H:10]\" # example 1\n", "smi = \"CN1C2=C(C=C(C=C2)Cl)C(=NCC1=O)C3=CC=CC=C3\" # example 2\n", "\n", - "mol_viewer(RDKitMol.FromSmiles(smi))" + "mol_viewer(Mol.FromSmiles(smi))" ] }, { @@ -87,8 +89,7 @@ "n_confs = 10 # Number of conformers to create\n", "\n", "embedder = ETKDGEmbedder() # Initialize conformer embedder\n", - "unique_mol_data = embedder(smi, n_confs) # Embed molecule 3D geometries with ETKDG\n", - "mol = dict_to_mol(unique_mol_data) # Convert raw data to a molecule object" + "mol = embedder(smi, n_confs) # Embed molecule 3D geometries with ETKDG" ] }, { @@ -140,9 +141,8 @@ "dataset = \"drugs\"\n", "device = \"cuda\"\n", "\n", - "embedder = GeoMolEmbedder(dataset=dataset, track_stats=True, temp_schedule=\"none\", device=device) # Initialize conformer embedder\n", - "unique_mol_data = embedder(smi, n_confs) # Embed molecule 3D geometries with ETKDG\n", - "mol = dict_to_mol(unique_mol_data) # Convert raw data to a molecule object" + "embedder = GeoMolEmbedder(dataset=dataset, track_stats=True, temp_schedule=\"none\", device=device)\n", + "mol = embedder(smi, n_confs)" ] }, { @@ -157,6 +157,57 @@ "mol_viewer(mol, conf_id=visualize_conf_id) # visualize the molecule" ] }, + { + "cell_type": "markdown", + "id": "cf852fbd", + "metadata": {}, + "source": [ + "### 1.3 Torsional-Diffusion Embedder\n" + ] + }, + { + "cell_type": "markdown", + "id": "a00f0f28", + "metadata": {}, + "source": [ + "You can skip this block if you don't have Torsional-Diffusion installed. To install it,\n", + "\n", + "Clone Xiaorui's fork\n", + "```\n", + "git clone https://github.com/xiaoruiDong/torsional-diffusion\n", + "```\n", + "and then follow the instruction for installing the environment and downloading the trained models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38d85e46", + "metadata": {}, + "outputs": [], + "source": [ + "n_confs = 10 # Number of conformers to create\n", + "\n", + "embedder = TorsionalDiffusionEmbedder(\n", + " repo_dir= Path.home() / \"Apps/torsional-diffusion\", # path to cloned repo\n", + " model_dir= Path.home() / \"Apps/torsional-diffusion/workdir/drugs_default\", # path to downloaded model\n", + ")\n", + "\n", + "mol = embedder(smi, n_confs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd37bd33", + "metadata": {}, + "outputs": [], + "source": [ + "visualize_conf_id = 2\n", + "\n", + "mol_viewer(mol, conf_id=visualize_conf_id) # visualize the molecule" + ] + }, { "cell_type": "markdown", "id": "46be5c44", @@ -195,6 +246,9 @@ "optimizer = MMFFOptimizer()\n", "# if you installed XTB, you can uncomment the following line\n", "# optimizer = XTBOptimizer()\n", + "# if you have Gaussian, Orca, or QChem, you can try the following optimizers\n", + "# but they can be much slower when using more expansive methods\n", + "# optimizer = GaussianOptimizer(nprocs=16, memory=32, method=\"PM7\")\n", "\n", "# Pruner\n", "pruner = TorsionPruner(max_chk_threshold=30)\n", @@ -220,7 +274,7 @@ "source": [ "smi = \"CN1C2=C(C=C(C=C2)Cl)C(=NCC1=O)C3=CC=CC=C3\"\n", "\n", - "mol_viewer(RDKitMol.FromSmiles(smi))" + "mol_viewer(Mol.FromSmiles(smi))" ] }, { @@ -232,9 +286,9 @@ }, "outputs": [], "source": [ - "n_conformers_per_iter = 100\n", - "min_iters = 2\n", - "max_iters = 5\n", + "n_conformers_per_iter = 10\n", + "min_iters = 1\n", + "max_iters = 3\n", "\n", "scg = StochasticConformerGenerator(\n", " smiles=smi,\n", @@ -250,16 +304,25 @@ "print(\n", " f\"Number of conformers: {len(unique_mol_data)}\\n\"\n", " f\"Metric: {scg.metric.metric_history[-1]:.3e}\"\n", - ")" + ")\n", + "mol = dict_to_mol(unique_mol_data)" ] }, { "cell_type": "code", "execution_count": null, - "id": "5aee01ec", + "id": "d9e4925b", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "from rdkit import Chem\n", + "\n", + "Chem.rdMolAlign.AlignMolConformers(\n", + " mol, atomIds=[atom.GetIdx() for atom in mol.GetHeavyAtoms()]\n", + ") # Align heavy atoms\n", + "\n", + "interactive_conformer_viewer(mol)" + ] } ], "metadata": { diff --git a/ipython/Forcefield Examples.ipynb b/ipython/Forcefield Examples.ipynb index f15494dc..ffa00f86 100644 --- a/ipython/Forcefield Examples.ipynb +++ b/ipython/Forcefield Examples.ipynb @@ -16,18 +16,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "from pathlib import Path\n", "import sys\n", @@ -54,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -71,17 +62,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mmff94s\n" - ] - } - ], + "outputs": [], "source": [ "ff = RDKitFF('mmff94s')\n", "print(ff.type)" @@ -96,17 +79,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Optimizability of this molecule: True\n" - ] - } - ], + "outputs": [], "source": [ "opt_mol = mol1.Copy()\n", "ff.setup(opt_mol, ignore_interfrag_interactions=False)\n", @@ -122,83 +97,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Optimization success: True\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "success = ff.optimize()\n", "print(f'Optimization success: {success}')\n", @@ -222,17 +123,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "gaff\n" - ] - } - ], + "outputs": [], "source": [ "obff = OpenBabelFF('gaff')\n", "print(obff.type)" @@ -247,17 +140,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Optimizability of this molecule: True\n" - ] - } - ], + "outputs": [], "source": [ "opt_mol = mol1.Copy()\n", "obff.setup(opt_mol)\n", @@ -266,76 +151,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "obff.optimize()\n", "opt_mol = obff.get_optimized_mol()\n", @@ -359,76 +177,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "mol2 = Mol.FromSmiles('C=O.C=O')\n", "mol2.EmbedConformer()\n", @@ -444,76 +195,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ff = RDKitFF()\n", "ff.setup(mol2.Copy(), ignore_interfrag_interactions=False)\n", @@ -530,76 +214,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ff = OpenBabelFF()\n", "ff.setup(mol2.Copy())\n", @@ -623,86 +240,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Before optimization\n", - "d(1,2) = 3.091533633597571\n", - "d(0,3) = 5.54344245067431\n", - "\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xyz = \"\"\"C 2.164196 0.180658 0.005381\n", "O 0.942631 0.078687 0.002344\n", @@ -732,86 +272,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "After Optimization:\n", - "d(1,2) = 2.0104161144672386\n", - "d(0,3) = 2.0104161207438698\n", - "\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ff = RDKitFF()\n", "ff.setup(mol3.Copy())\n", @@ -836,85 +299,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "d(1,2) = 2.0010775081854573\n", - "d(0,3) = 2.000991178438568\n", - "\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ff = OpenBabelFF()\n", "ff.setup(mol3.Copy()) # directly assign mol to allow correct atom index when setting constraints\n", @@ -939,114 +326,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "conformer 0\n", - "d(1,2) = 1.2175480914480463\n", - "d(0,3) = 1.2141275783373007\n", - "\n", - "conformer 1\n", - "d(1,2) = 1.1921424503791371\n", - "d(0,3) = 1.2442288478856651\n", - "\n", - "conformer 2\n", - "d(1,2) = 1.205391551161533\n", - "d(0,3) = 1.237817705103411\n", - "\n", - "conformer 3\n", - "d(1,2) = 1.196583728687554\n", - "d(0,3) = 1.2153392084098922\n", - "\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xyz = \"\"\"C 2.164196 0.180658 0.005381\n", "O 0.942631 0.078687 0.002344\n", @@ -1081,115 +363,9 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "conformer 0\n", - "d(1,2) = 2.0813138368027926\n", - "d(0,3) = 2.0813176199831016\n", - "\n", - "conformer 1\n", - "d(1,2) = 2.0813154376358542\n", - "d(0,3) = 2.0813153060303526\n", - "\n", - "conformer 2\n", - "d(1,2) = 2.0813155343734144\n", - "d(0,3) = 2.08131529926818\n", - "\n", - "conformer 3\n", - "d(1,2) = 2.0813154240425233\n", - "d(0,3) = 2.0813157149607884\n", - "\n", - "Force field energies for each conformers: [44.31933079730308, 44.319330840996656, 44.3193308404387, 44.319330795469625]\n" - ] - }, - { - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ff = RDKitFF()\n", "ff.setup(mol5.Copy())\n", @@ -1218,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1242,7 +418,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1254,30 +430,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = plt.subplots(1, 1)\n", "plot_curve(x=angles1, y=rigid_E,\n", @@ -1295,86 +450,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "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" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "viewer = grid_viewer(viewer_grid=(1, 2), viewer_size=(800, 400), linked=True)\n", "\n", diff --git a/ipython/Handle molecule with XYZ.ipynb b/ipython/Handle molecule with XYZ.ipynb index f198a47d..be37db3c 100644 --- a/ipython/Handle molecule with XYZ.ipynb +++ b/ipython/Handle molecule with XYZ.ipynb @@ -7,17 +7,17 @@ "# A Demo of using RDMC with XYZs\n", "Author: Xiaorui Dong\n", "\n", - "This notebook demonstrates how RDMC handles XYZ. Molecules can be perceived by using [openbabel](http://openbabel.org/wiki/Main_Page) / [method from Jensen et al.](https://github.com/jensengroup/xyz2mol). The created molecule can be visualized by `mol_viewer` and exported to xyz format." + "This notebook demonstrates how RDMC handles XYZ. Molecules can be perceived by using [openbabel](http://openbabel.org/wiki/Main_Page) / [xyz2mol](https://github.com/jensengroup/xyz2mol). The created molecule can be visualized by `mol_viewer` and exported to xyz format." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "from rdmc.mol import RDKitMol\n", - "from rdmc.view import mol_viewer\n", + "from rdmc.mol import Mol\n", + "from rdtools.view import mol_viewer\n", "from rdkit.Chem.Draw import IPythonConsole" ] }, @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -72,31 +72,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. Generate an RDKitMol from xyz\n", + "## 2. Generate an Mol from xyz\n", "**Arguments:**\n", - "- `backend`: choose the `openbabel` or `jensen` backend\n", + "- `backend`: choose the `openbabel` or `xyz2mol` backend\n", "- `header`: indicate if the str includes lines of atom number and title" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "" + "" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "RDKitMol.FromXYZ(xyz, backend='openbabel', header=True)" + "Mol.FromXYZ(xyz, backend='openbabel', header=True)" ] }, { @@ -108,63 +108,63 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "" + "" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "RDKitMol.FromXYZ(xyz_without_header, backend='openbabel', header=False)" + "Mol.FromXYZ(xyz_without_header, backend='openbabel', header=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Use `jensen` backend. For most cases, Jensen's method returns the same molecule as using `openbabel` backend" + "Use `xyz2mol` backend. For most cases, xyz2mol's method returns the same molecule as using `openbabel` backend" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "" + "" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "RDKitMol.FromXYZ(xyz, backend='jensen', header=True)" + "Mol.FromXYZ(xyz, backend='xyz2mol', header=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The optional arguments for the Jensen et al. method are provided." + "The optional arguments for the xyz2mol method are provided. Note, RDKit starts to have a native xyz2mol since version 2022.09, but you can choose to use the original python version (with minor modifications to work with RDMC) with `force_rdmc = True`. The reason to support both is that (1) we introduce the python version to rdmc since 2021 and (2) RDKit's native is not always reliable (e.g., rdkit-2023.09.6-macosarm64 version run into erros)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -176,26 +176,27 @@ }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAezElEQVR4nO3deVQUV9oG8KfZVw0CiqBBQnABjQbFGEVBxGg0Gg3BCAaNohidHJwvo8FEHcjJqJBx4hq/4A5xohL1c0lEBBQFEVFEUFBcIUhAaFBk3/p+f1QHUWlAu7uqm35/xzOn6L5d9bZxHm5V3XtLxBgDIYSQV6UldAGEEKLeKEYJIUQuFKOEECIXilFCCJELxSghhMiFYpQQQuSiI3QBRN00NiI1FVlZKCuDnh66d4erK2xthS6LEMFQjJIOq6/Hhg34/nuUlj7/1siRCA3F6NFClEWIwEQ0/J50SEUFpk9HfDwA9OwJT0/07o2aGly/joQENDRAWxtbtuDzz4UulBC+UYySjpk1C7/8ApEI332HZcugp/f0rTt3MGsWUlOhpYVTpzBunHBVEiIAilHSAadPS8Pxu++wcmUrDZ48wdChuHMHDg64eRNadOuSaBD650464McfAaBXLyxf3nqDLl0QFgYAt28jJoa/wghRARSjpD0SifSS6IwZ0JF9T3LKFHTtCgCxsTwVRohqoBgl7blzB+XlADBsWFvNdHXx9tsAkJbGR1WEqAwa8ETaU1ws3bC2bqeljQ0AlJQotx5+icXiw4cPA/Dy8jI3N2+1zZEjR4qLi/v37z9mzBh+qyMqgWKUtKeqSrphaNhOS2NjAKioUG49/MrLy1u4cCGAYcOGyYrRtWvXpqam+vv7U4xqJjqpJ+0xNZVuVFe307KyEgC6dFFuPYSoGIpR0h5LS+nGn3+207KgAAC6d1duPYSoGIpR0h57e+kt+LbvHTU24upVABg6lI+qCFEZFKOkPVpa8PAAgEOH0NQks9mJE9Ib+u+9x1NhhKgGilHSAYsWAUBeHjZvbr1BXR1WrACAvn3h6clfYYSoAIpR0gHjx2P6dABYtgzbt+O5CcRiMaZPx/XrEImwefPTmaCFhXzXSYgQaMAT6ZgdO/DgAS5dQkAANm/GlCno1Qt1dcjMxP/9Hx4/hkiE779/ekYfGYnPP8fatViyRNC6FWbChAm6urqtviUWi3kuhqgUilEig0SCO3fQt6/0x27dcPo0QkKwZQuuXcO1a8807tsX69ZhypSnr5w/j5oa/P3vuHAB4eHSm1TqjLKSyEIxSlrT2IiAABw6hIQE6RRPACYmWLcO33yDuDhcvw6xGHp66NkTbm5wcYG29jN7CA+HpycCAnDgAC5cwN697S7qvHXr1tu3bw8dOvTTTz9ttUFGRsaePXsArF271sDAQO4v+XJiYmIGDRrU6luTJ09OT0/nuR6iQhghz6moYBMmMIB16cISEuTa1f37bORIBjBtbRYUxOrr22jr7u4OwMfHR1aDqKgo7h/to0eP5KrqZVy+fJk7aFpamqw2w4cPB+Dv789bVUSl0C0m8qyyMkyYgJgY9OiBM2fg5ibX3vr0wdmzCA4GYwgLw5gxuHdPQYUSoiooRkkLeXkYORLJybCzQ2IinJ0VsE8dHYSEIC4ONjZISYGzM/btU8BulaOkpOQf//gHo7XMycugGCV/yc7G6NHIycHAgUhMhIODInc+diyuXsXUqSgvh68vZs+WTsBXMebm5mlpaRs3bhS6EKJOKEYJAODiRYwZg/x8uLsjKUm65J1iWVjg6FFERMDICD//jGHDcOWK4o/yqnJychhjWlpau3fvXrNmTWZmptAVEbVBMUqA48cxdixKSzFtGqKjlTs4afZsXL6MwYORk4MRIxASAolEiYfrsM8//5zrhNrZ2YWGhvr6+tbW1gpdFFEPFKMaLzISXl6oqcHcufj1V/AwkGjAAKSkIDAQjY349ltMmNBy7ajGxsYnMtTU1CivqF27djV3QufNm+fo6Lhq1SrlHY50KkIPFSCC2rCBiUQMYEFBAhz95ElmZcUAZmnJfvuNG/DUEQoc8LR9+/ZNmzZx2zt37nRycqqpqWGMlZSU2NjYxMfHV1RUJCQkJCQkVFRUyNrJlStXEhISuMsCRANRjGoqiYQtXSod0fm//ytYGUVFbOJEBjCRyL1XLwC6urpdZTAyMlJ4jN67d8/S0jIjI4P70dvbe9myZdx2dHT0yJEjFXUg0olRjGqkujrm68sApqfHDhwQuBiJhG3YwPT0uL6oz/vvy2qowOH3lZWV8fHx3PauXbte7IRyb3EvEtI2ujaqeaqqMG0afvkFJiY4fhwzZghcj0iEJUuQmMg966kkPX379u3KPubDhw9nzpyZlZUFYO7cuY6OjsHBwQAsLCx27NjRPLOT/ymnRC0JneOEX6Wl7N13GcB69GBXrghdzTPcR48GoC0SAfDy8iorK3uugUJ6o42NjdzGi1dCT58+/cq7JZqMeqOahJukdOGCdJJS85ojKkJbG8C7o0aZmZkdOnRo8ODBZ8+eVewRmpqaXFxcuE4odzu+uRO6f//+Xr16KfZwRENQjGqMrCy4uiInB4MGISlJwZOUFKd3797p6emurq75+fkeHh5LlixpaGhQ1M61tbX/9re/ffLJJ9yY0K1bt/73v/+9du0aAFdXVwdV/TshKo5iVDNcvAg3Nzx4AHd3JCbC2lrogtpia2t75syZ4OBgkUi0adMmV1fXu3fvyrnPI0eOcJ1Qf3//lp3Q1NRUWcvfEdJBFKMagM9JSgqio6MTEhKSmJhoZ2eXmprq7Oy8d+9eeXYoFotnzpzZ3Ak9e/ZsZWUlAGvV/o1C1ALFaGcXGYmPPkJNDRYvxqFDfExSUpx33303PT195syZT5488fPz27Jlyyvs5NGjRwDmz58/YMCA5k5oSkqKiYmJgsslGkvoe1xEmdLTpZOUQkKELqV9ZWVlRUVF5eXlL74VERFhbGwMoHfv3r/99ptEIungPqOjo4cMGVJXV8cYKykpWb16tSIrJoQxxpiI0dKK6qiiAseO4fRpFBTg8WOYm8PODuPHY9IkPPfYtdWrYW6Ozz8XqFCFuXnzpo+Pz9WrV3V0dFasWPHPf/5TS6tD51LTpk1zcnJavXq1siskmkvoHCcvb88e1r07A1r54+DA/pqB08k0NjYmJye7/bUav4eHx4MHD2Q1rqioWLx4MdcJLS4uvnXrFo+VEo1DvVF1ExqKr78GgF69sGAB3nkHZmYoLsaZM9i+HRUV0NXFvn3w8hK6UMW4d+9eXFxcXFxcfHy8nZ2dp6enmZnZhg0bioqKLCwsdu3aNaXl40hbmD59upeXl6yn4xGiSELnOHkZZ84wLS0GsKlTWVXV8+/m5zNHR+mj6O7dE6I+Bbtw4YK1tfXcuXP3798vFoubX3/48OGkSZO4f8B+fn5VLf4qcnJyuE4oTYcnvKEYVSvcPE4HB1Zd3XqDO3eYkRED2Pz5/FamFE1NTc+9Ul1dffLkyYMHD0okkg0bNujr6wNwdHRsXqLpyy+/pAXrCM/opF59ZGVh4EAA2LYNCxbIbLZoEX76CUZGEIu5xT46gevXr586dSomJubChQvOzs6zZs1asGABgLS0NF9f31u3bhkaGl69erVv375CV0o0EY0b5cn69eudnJzef/99WQ0KCwudnJycnJySk5Nbb5GYKN2QcTVQato0AKiuVqknHclj/Pjx06ZNu3PnzuLFiwsKChISEhb89Vtk6NChV69enTRpkkQi8ff3F7ZOorF0hC5AUxQVFWVnZ9fV1clqUF9fn52dDaBS1iMzs7MBwNISVlZtHWnwYOlGVhZGjXq1alXKr7/++tprr7V8pbKysnnwvKGhoZOT04kTJzIyMoSojhDqjaqRsjIAMDdvp5mFxTPt1R+XoRKJ5PLly6tXr3Zzc7OxsSktLW1ukJOTA6CNX1GEKBXFqPrgFjrSae8EQlsb3Lh0xS2MJLjY2FgrK6vPPvusrKxsxYoVRUVF5i1+nXCrLNfX11dXVwtXI9FcdFKv8nJzoaWF118Hd2JbUdFO+8pK6SOLnz0RVmsuLi5XrlxpdT3QkpKS/Px8kUjEGBOLxa+//jr/5RENR71RVVRZWfnzzz/Pmzev4J13YGeH9esBgAuRggK0/fz027elG50oUF577TUuQxsbGxMTE1etWnXy5EnurdTUVADcjHuxWCxgkURjUYyqopqamjlz5uzevfu0ri66dZOeyL/zDgA0NuLixbY+3HxDn2vfifj6+lpaWn755ZcSiaS513n58mUA3Dk+xSgRBJ3U86qqqurgwYOtvtUyAiwtLRcvXmxvb+86bhwGDpRe6xw9GubmKC3Fzp34a2r58yQS7NoFAKNGtXNDXw3Nnz9/48aNlpaWLV9MS0sDYGNjk5eX1/K+EyG8oRjlVVFRkbe3d0datrK2pqEhFi3Cv/6FvXsxaxYmTGjlY//+NzIzAeDLL+UsVQV5eHhwG7W1tffv3x8wYAD+6o3a29snJydTb5QIgmKUVyYmJrJG4FdXV//+++/tfH7FChw+jOxsTJ+OsDAEBEBfX/rW48f417/www8A4OWFjz5SYNmqIz4+ft26defPn580adL+/fsLCgoKCwvNzMzs7OwAaEJvNC8v79dffwUQEBDQpUuXVtvs3Lnz0aNHw4cPHzNmDL/VaSiKUV716NGj+SnBz8nLy2s/Rg0McOoUJk7E9esIDMQ338DZGd26oagIV66gvh4ApkxBZKSiC1cV3bp1CwgIOHDgAJcgXFd02LBh3Jm+JvRGc3Jyli1bBsDb21tWjK5du/bu3btfffUVxSg/KEbVjY0NUlOxaRPCw3H/Ps6dk74uEmHIECxdCh8fdGw9Y3X09ttvv93iudDNMWphYQHNiFGigihG1ZChIYKCEBSEu3fx4AHKy9GtG+zt0bOn0JXxoba2dv369adOndqxYwcXo0OHDu3atSsoRolAKEbVmb097O2FLoJv+vr6lZWVQUFBNjY23G36YcOGcc+toxglgqAYJWpGJBJxD1bKzc0tKSmxsLCwtbXV1tYGxSgRCMUoUUuZmZnR0dEAXFxcANC1USKgTnsvgnRuly9f5hZmHTZsGAADAwNjY+O6ujqZywwSojTUG+WJtbX1W2+91cbCGXp6em+99RYAU1NTHutSV/Pmzdu3bx/+ilEAFhYWVVVVYrG4eSnSzs3JyUkkErX6VlVVFc/FaDiKUZ4sWbJkyZIlbTTo2bMnLTzccU1NTdxt+iFDhnCvWFhY5OXlicXiPn36CFkZXygrVQed1BP109jYOH/+fABaWlpubm7btm1ramrStMujN27cqJThjTfeELo6zUK9UaJmqqqqvLy8YmJijI2Ne/funZubu3Dhwk2bNnXr1g2aFKOGhobc8oAvknWyT5SEeqNEnZSVlb333nsxMTE9evQ4d+7cvXv3oqKiHBwcsrKyEhMTAcTFxdHDbgnPKEaJ2vjzzz/d3d2Tk5Pt7OwSExOdnZ21tLS8vb2zsrIiIiLMzMwAREREjBw58vjx40IXSzQIxShRDzdu3BgxYsS1a9cGDhyYmJjo4ODQ/Jauru7s2bO//fZbAEZGRikpKVOnTnV1dU1ISBCsXKJJKEZVT0YGAgMxaBC6doVIBHNzuLjg66+Rlyd0ZYJJTU0dM2ZMfn6+m5tbUlKSjY3Ni22srKwATJgwYcOGDd27dz9//vzYsWPHjx/P3dDvBO7fvy90CUQGRlRHQwNbvJhpaTGglT/6+iw0VOgSBRAbG8sNBf3www+rq6tlNauqqiorK+O2KyoqQkNDm59u7+npmZ6ezle9isc9VMbMzOzWrVsxMTHcl8rNzZXV3t7eHsBXX33FZ5GajGJUlcycKU3MiRPZyZPs8WPGGCsuZlFRbMgQ6VurVgldJa9+/vlnXV1dAJ999llDQ0PLt4qLi5OSkpKSkiQSSaufLS0t9ff3525nc1dRc3JyeKlakfLz87kpBqampqdOnaIYVUEUoypjzx5pUK5Y0cq79fVs+nQGMC0tlpTEe3HC2LBhg5aWFoCgoKAXs3LPnj1coNTX18vag5GREYBx48YZGho2h+mdO3eUXLjCJCcn9+zZE4C9vf21a9cYY0+ePElLS0tLS6urq5P1qaysrLS0tIKCAh4r1WgUo6qhqYn17csA5urKZPStWHk5s7ZmAJs8md/iBCCRSIKDgwGIRKJ169a12qbjMbp+/fr8/PzAwEB9fX0Aurq6AQEBDx48UFr5irF3714u/ceMGVNcXCx0OUQmilHVkJIi7YoePNhWs5AQaYdULOarMgE0T1LS09Pbt2+frGYvFaPcj7m5uQEBATo6OtzOAwICCgsLFf8F5NbY2BgUFMR9u4CAgDa+IFEFFKOq4YcfGMBEIvbXTZLWJSdL0/b33/mqjG+1tbUfffQRAGNj4+jo6DZavkKMcm7cuOHn58ctUWpsbBwUFFTW9l87v0pLSz09PQHo6+vv3LlT6HJI+2jAkzDq6uqOHz/OrdkOAPfuAYCVFczM2vqYo6N04+5dZVYnmEePHnl6eh4+fLhbt26xsbETJ05UxlH69+8fGRmZkZHh7e1dXV0dFhZma2u7fPny8vJyZRzupdy6dWvUqFFxcXGWlpYxMTHz5s0TuiLSPopRYaxcuXLq1Kk+Pj7Sn7k87dq1nY916QJt7aftO5fCwsKxY8cmJSXZ2tomJye/++67Sj2ck5NTVFRUSkrKBx98UFFRERYWZm9vHxYWVlNTo9TjtuHEiRPDhw+/efPmkCFDLl265ObmJlQl5KVQjAqjR48ezf8LQPosz45MBufadLpnf969e3f06NEZGRmOjo5JSUn9+vXj57jDhw8/fvw4N1a/tLR0+fLltra2YWFhtbW1/BTAYYyFhYVNmTKlvLz8k08+OX/+vK2tLZ8FEHnQCk/CWLp06cyZM62traU/cwPFHz9u52Pl5ZBInrbvNFJTJatW5d2/7+rqeuzYMbO2r2y8YNKkSbLWNKqrq+vIHkaOHHn69Om4uLhvvvnm0qVLy5cv//HHH1euXDlv3jzufpRS1dbWLliwYO/evSKRKDg4ODg4mJZoUjNCX5wljDHGNm6U3jtq+xZ8UpK02alTfFWmfDExzMSEAVe/+KKNSUovar7F1K7nbjG1LTY21tnZmftgnz59wsPDGxsbX/5bdVTL0fVHjhxR3oGI8lBvVDWMGCHdOHMGH38ss1lcHABoa8PFhY+qeHD4MHx9UVcHP7/BP/wAXd1X2Ed0dDR32/1FU6dOfdnTc09Pz8uXLx88eHDVqlU5OTkLFy7cuHFjSEjIxx9/rPBO4vnz5728vB4+fPjmm28ePXrUsfkWIlEvQuc4YYwxJpFIh9+PGSNz+H1lJevViwFs2jTpK19/zQICWH4+b2Uq2JYt0gUEAgNlfmvZXnnAUwc1NTVFRUW9+eab3FEGDRoUFRX1CvuRZdu2bXp6egAmTJigUiOuyMuiGFUZu3ZJT9jXrGnl3aYm5ufHAKatzS5cYIyxJ0+YqSkDmIEBCwxkKjmMvC2hodKhsmFhr7YDZccop76+Pjw8vHlNqREjRnArQ8ujoaGh5ej659YKIGqHYlSVTJsmTVIfH3b5srSD1tDATp9m7u6tzLjPzmZ+fkxbW7r+U0AA+/NPoWp/CY2NbOFC6a+EHTteeTf8xCinrq4uPDycm94OYNSoUQkJCa+2K7FYPG7cOAD6+vq7d++WszCiCihGVUldHZs9++nKeAYGrHt3pqsr/VFHh4WEtPKprCzm5yc9OzY2ZoGBrKiI99I7rLaWeXszgBkZsd9+k2dPfMYop7KyklvMlDsudxX1pfaQmZlpZ2cHwNraOiUlRSFVEcFRjKqec+eYry/r3v1pnvbpwxYuZNnZbX3q2jXm7c1EImmYBgWx0lK+Ku6wigo2fjwDmJmZ/OtU8R+jHG4x065duwIQiUQffPBBBxczPX78eJcuXQA4Ozvn5eUpsCQiLIpRFVZTw8Ri9lLLUmRkPA1TExMWFNTOJH0+FRayt99mAOvZk2VkyL8/oWKUIxaLg4ODTU1N0YHFTCUSSWhoKLfon4+Pz0uN6yKqj2K0M0pJYR98IO3JmpqyoCDpCtACunePOTgwgPXvzxTUERM2RjnFxcVBQUEGBgYAdHR0/Pz87t69+1ybiooKLy8vANra2qEa+fyCTo9itPNKTn4apubmLDiYlZcLU0lmpnSlVBcXprh1M2/evLlly5YtW7Y0NTXJahMeHr5ly5YMRXR+2/DHH380L2bKrb/XvGTyH3/8MXToUABdunQ5duyYUssgQqEY7eySkpiHhzRMLSxYaCirquK1gDNnWNeuDGDjxrEnT3g9NL+4xUy5iQD6+voBAQFHjx7l7kc5ODhkt31pm6gzilHNkJj4dMiUpSULDWX8XJ47coQZGDCA+fq+3EVetZWVldU834k72Z88eXK5UOcBhBcUo5okNpYNHy4N0+7dWWgoq6lR4uF272Y6OgxgX3zBZJ93d0pXrlyxsrLS1dX19fVt45oD6Rw623prpC2enrh4EbGxcHFBcTGWL0ffvti4ER1bBunlhIVh7lw0NSE4GJs3d76V/dr21ltv1dXVNTQ09O/fX0vDvrsGov/AmsfTE6mpiI2FszPy8/H3vys+TPfswfLl0NbG9u0ICVHYbtXHpUuXHj16ZGpqevLkSaFrIUonYh1ZKph0Sozht98QHIz0dACwtcU332DePLSxwmZVFeLikJiIhw9RVwdzczg6YuJEODg806y+Hl5emD8fH36o3K+gqv7zn/8sXbp00KBBubm50dHRo0aNEroiokxCX1UgQmtqYlFRrH9/6TVTOzsWHs5aXWFz61Zmafl0blXzH5GIeXurx3R+HmVnZ69YsQLAhx9+KHQtRLmoN0oAABIJDh3CypW4dQsABgzA8uWYNQvN63gGBmLzZgDo3Rs+Phg0CPr6ePAAJ05IV0Ht0wfx8XjjDYG+gAAqKioKCwsBODg4tLoUaXR09OTJk3v27HnmzJm+ffvyXiDhi9A5TlRJQwPbtYvZ2Um7mXPnSl/fs+fpKy+OlDp2jBkZMYANH64ho5o4ERER3P+JamtrW22QmZnJxevo0aN5ro3wiW4xkRZ0dDB3LnJyEBEBe3t8+ikA1NWBWxzT3R07d8LQ8PlPTZmCn34CgNRU7N/Pb8UqzcrKitu4fft2Q0ODsMUQ5aEYJS/Q1cXs2bhxAx4eAHD0KB4+BIDvvoOsp2j4+WHgQADYto2vKtWAhYUF1xstKSnZvXu30OUQZaEYJTI0Pxbp7FkA6N4dbd9u5h4hdfEihHvOu6ppvmDa1NQUGRkpbDFEeShGSXuuXQOAwYNldkU53NM0Gxpw8yYfVamJ5iTNyspKSUkRthiiJBSjpD2lpQBgadlOs+YGXHvyrMePH3///fdCV0GUgmKUtIeb3aSn104zAwPpBp3Ut9ByIFRaWlpxcbGAxRAloefUk/Z07QoAFRXtNHvyRLrx2mvKrUf1zJkzR9bE+aampubtP/74Y+3atevXr+erLsITilHSHu5xmLm57TS7f1+68deziDXHgQMHOtgyPj6+sbFRp43ptkQN0X9O0h4XF/z+O65fR2UlTExkNktOBgBLS9jZ8VaaioiMjJSVjHPmzGk5YvTmzZsRERH+/v58lUb4QJNBSXvS0jBsGABs347581tvU1kJW1uUlWHePOzcyWd1AoqMjJwzZw6A2tpa7gkiLzIyMqp59mLx6NGjz507x0d9hC90i4m0Z+hQ6YjRVauk4/BfFBSEsjJoaSEwkM/SVN+Lc+2vX79+5coVQYohSkIxSjogPBwGBigqgpsbLl585q0nT7BoEbZuBYD/+R8MHixIgSrrxVtPjx49WrNmjSDFECWha6OkA5yccPgwvL2Rk4MRIzB4MAYPlq7wdPYsqqsBYPZsrF0rdKHqIS0trbS01NzcXOhCiGJQb5R0zPvvIz0d3t7Q00NGBiIjsX07oqNRXY3+/fHLL9iz5+n8UdKm3Nxc6pB2JtQbJR3m4ICoKFRW4sIFFBWhthaWlhg4EG++KXRl6ic2NrapqUm7eTlXos4oRslLMjHB+PFCF6H2bt68uXfvXu5GP1F32iEa+cQxQuQnEomsrKzc3d3d3d1lzWLS0tIqKioqKSlp+aKJiUmfPn3Mzc09PT15qZQoF40bJUS5Fi1a9NNPPxkYGNjY2PTq1cvJyWnGjBkjR47UpUvJnQWd1BOiXDNmzNDR0fH19XVxcaFpoJ0S9UYJIUQu9LuREOVqaGi4f/8+gN69exu++CQrAEBBQUFVVZWpqWlPbiEYolZo3CghypWfn9+vX79+/fpduHBBVht/f/9+/fp98cUXfBZGFIVilBBC5EIxSgghcqEYJYQQuVCMEkKIXChGCSFELhSjhBAiFxo3SghP1qxZs1PGE1YyMzN5LoYoEMUoITyJj48XugSiFBSjhPBkxYoVTk5Orb4VGhpKHVL1RTFKCE88PDw8PDxafSsiIoJiVH3RLSZCCJELxSghhMiFYpQQQuRCMUoIIXKhGCWEELlQjBJCiFxowBMhymVmZhYcHAzAzs5OVptPP/10xIgRjo6OPNZFFIaexUQIIXKhk3pCCJELxSghhMiFYpQQQuRCMUoIIXKhGCWEELlQjBJCiFz+HwU3J7/f+f9GAAABVHpUWHRyZGtpdFBLTCByZGtpdCAyMDIzLjA5LjYAAHice79v7T0GIOBnQAA+IOYF4gZGNgMVIM3EIgniOpbk54JwZrJfaa6iFBtUtQyDNpsCSBkjC6OCBohmhNEcCgog7RBpJgxpNGU4uQvANDcDI8gQJgZmBgYWBkZWBkZOBkYuFiYWbgZWNhZGVnYGVg4GTl4Gbh4GEZC7xDeBtEExA9+KoMf7jz3ksbdZELM/NuD9fjXJnbaTTUUO8Gsk739sNs0+9Kb5/h/3b+1/ITxzX62S/r4KbqsDkXfX2f/o4NivUSeyf0WQ8P6btoYHXkVv27c0e9f+nyJcB9jjO+xe3Hxje3m+7oGaHTr7a+1z98+LKz5Q/tnqQJR+3P5V22UOTF7JdiDkWL49s5rdAT/XigNZwt/tFuScsq173HvA++w6u0fWhvtPxLUeMPmSvy/SRPOAGADZTGUmK4UFYgAAAcp6VFh0TU9MIHJka2l0IDIwMjMuMDkuNgAAeJx9k0tu4zAMhvc+hS5QQRQpPhZdJHEfg5kmQCftHWY/90dJqa4VFKidhUl8JH8+sqR4Xtff//6nrwfXZUmp/PAzs/SOpZTlJcVHOj48/Tqn0/Vw3Dyny9v5+jcBJUCP8feWPVwvL5sH0indQRZpxg7m1grWku5KVgatEX16fLqvG18Hr2xMwRcrqM7XjNBENh42HtNzT6aCUS2DoJcIl4ACT9ooSFfiHXIHqqlp/wKBghPa0iUqWmFrkRSZATvZEJEmkkOuu7WUUbVJo6FX2Kh860+GXmwM3ozrocYEPcD7a7MKddRVMmOLSQA0biMzVNUJtJGThdi6CKssgWLWUiPoC/VKo7UKAJ9rEBv1idTnMLEQeV1XcYGhwHwOtaPmoMxojbReTqxGC5m0Nhn7U50HBn1hlMnHGNvPSEBDCXtsnVGKpJSBRcfJVKTYsgtgwnE8r4f1vqb3w5/9JB7O680JjqM8Xs7rfpTxTjcXJvZF4X5Y4aT9esJs+4V4fOL9DMKEsm+523CbUiODz2rfG3ik3B40lO7VaQth2zRq6BBNI4XuxnkCc79hb39g/14+ABKZxsII9U1UAAABGXpUWHRTTUlMRVMgcmRraXQgMjAyMy4wOS42AAB4nE2QOW7DMBBFr5LSAihi9sVqAjiFO1WpBOUabnz4DKnGjTjk05955PE89/1xO57nMj/H4/u8dvuxn8sneZ5f79sqXViAGnQWFGwrdEti2lbu4VUVkSD1WiEjZFupJ1hqw85myCOizFwEu7um1a+qwDRIGEY1qyKcuTLorDqIY6DNDGRl6oQyMkaBjsADhaXJnAxchDqjug8FhJKFnqVAA2RFJkhCxGuyJw4kEo5b3RTNY0oRS7kUMuHLTgNgWqmrzEluKYOwGnorF1GT2a8UlLfqYsZaDohqOiNIESNjLpajW5J5oXpKINOl/eE92+v3jpWC18+dOzfr9v4HrMlbcnCe4iAAAAAASUVORK5CYII=", "text/plain": [ - "" + "" ] }, - "execution_count": 6, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "RDKitMol.FromXYZ(xyz,\n", - " backend='jensen',\n", - " header=True,\n", - " allow_charged_fragments=False, # radical => False\n", - " use_graph=True, # Use networkx to accelerate (enabled by default)\n", - " use_huckel=True, # Use extended Huckel bond orders to locate bonds\n", - " embed_chiral=True, # Embed chiral information\n", - " force_rdmc=False, # use RDMC's implementation of xyz2mol\n", - " )" + "Mol.FromXYZ(\n", + " xyz,\n", + " backend='xyz2mol',\n", + " header=True,\n", + " allow_charged_fragments=False, # radical => False\n", + " use_graph=True, # Use networkx to accelerate (enabled by default)\n", + " use_huckel=True, # Use extended Huckel bond orders to locate bonds\n", + " embed_chiral=True, # Embed chiral information\n", + " force_rdmc=True, # use RDMC's implementation of xyz2mol\n", + ")" ] }, { @@ -207,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -233,8 +234,8 @@ } ], "source": [ - "mol = RDKitMol.FromXYZ(xyz)\n", - "print(f'xyz coordinate: \\n{mol.GetPositions(id=0)}')" + "mol = Mol.FromXYZ(xyz)\n", + "print(f'xyz coordinate: \\n{mol.GetPositions(confId=0)}')" ] }, { @@ -246,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -266,7 +267,8 @@ "H -2.104100 0.936620 -2.971070\n", "O -3.879230 0.482570 0.098840\n", "H -4.434020 0.341410 -0.692320\n", - "O -4.167820 -0.234330 -2.643820\n" + "O -4.167820 -0.234330 -2.643820\n", + "\n" ] } ], @@ -302,7 +304,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.11.8" } }, "nbformat": 4, diff --git a/ipython/notebooks_to_clean/TS Conformer Generation Workflow.ipynb b/ipython/notebooks_to_clean/TS Conformer Generation Workflow.ipynb new file mode 100644 index 00000000..342c71a4 --- /dev/null +++ b/ipython/notebooks_to_clean/TS Conformer Generation Workflow.ipynb @@ -0,0 +1,4025 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[12:22:52] WARNING: not removing hydrogen atom without neighbors\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "import os\n", + "from rdkit import Chem\n", + "from rdmc import Mol, Reaction\n", + "\n", + "from rdmc.conformer_generation.ts_generators import TSConformerGenerator\n", + "from rdmc.conformer_generation.ts_guessers import TSEGNNGuesser, RMSDPPGuesser, AutoNEBGuesser, TSGCNGuesser\n", + "from rdmc.conformer_generation.ts_optimizers import SellaOptimizer, OrcaOptimizer, GaussianOptimizer\n", + "from rdmc.conformer_generation.ts_verifiers import XTBFrequencyVerifier, OrcaIRCVerifier\n", + "from rdmc.conformer_generation.pruners import CRESTPruner, TorsionPruner\n", + "\n", + "from rdtools.view import interactive_conformer_viewer\n", + "# from rdmc.external.xtb_tools.opt import run_xtb_calc\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "ArgumentError", + "evalue": "Python argument types in\n RWMol.__init__(RDKitMol, NoneType)\ndid not match C++ signature:\n __init__(_object* self, RDKit::ROMol mol, bool quickCopy=False, int confId=-1)\n __init__(_object* self, std::__cxx11::basic_string, std::allocator > pklString, unsigned int propertyFlags)\n __init__(_object* self, std::__cxx11::basic_string, std::allocator > pklString)\n __init__(_object* self)\n __init__(_object* self, RDKit::ROMol m)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mArgumentError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mMol\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mMolFromSDFFile\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/home/xiaorui/scratch/Gau-3140007.EIn\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Apps/RDMC/rdmc/mol/transform.py:287\u001b[0m, in \u001b[0;36mMolFromMixin.MolFromSDFFile\u001b[0;34m(cls, path, removeHs, sanitize, sameMol)\u001b[0m\n\u001b[1;32m 284\u001b[0m suppl \u001b[38;5;241m=\u001b[39m Chem\u001b[38;5;241m.\u001b[39mSDMolSupplier(path, removeHs\u001b[38;5;241m=\u001b[39mremoveHs, sanitize\u001b[38;5;241m=\u001b[39msanitize)\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m sameMol:\n\u001b[0;32m--> 287\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m[\u001b[49m\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mm\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msuppl\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 289\u001b[0m new_mol \u001b[38;5;241m=\u001b[39m copy(suppl[\u001b[38;5;241m0\u001b[39m])\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m suppl:\n", + "File \u001b[0;32m~/Apps/RDMC/rdmc/mol/transform.py:287\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 284\u001b[0m suppl \u001b[38;5;241m=\u001b[39m Chem\u001b[38;5;241m.\u001b[39mSDMolSupplier(path, removeHs\u001b[38;5;241m=\u001b[39mremoveHs, sanitize\u001b[38;5;241m=\u001b[39msanitize)\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m sameMol:\n\u001b[0;32m--> 287\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mm\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m suppl]\n\u001b[1;32m 289\u001b[0m new_mol \u001b[38;5;241m=\u001b[39m copy(suppl[\u001b[38;5;241m0\u001b[39m])\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m suppl:\n", + "\u001b[0;31mArgumentError\u001b[0m: Python argument types in\n RWMol.__init__(RDKitMol, NoneType)\ndid not match C++ signature:\n __init__(_object* self, RDKit::ROMol mol, bool quickCopy=False, int confId=-1)\n __init__(_object* self, std::__cxx11::basic_string, std::allocator > pklString, unsigned int propertyFlags)\n __init__(_object* self, std::__cxx11::basic_string, std::allocator > pklString)\n __init__(_object* self)\n __init__(_object* self, RDKit::ROMol m)" + ] + } + ], + "source": [ + "Mol.MolFromSDFFile(\"/home/xiaorui/scratch/Gau-3140007.EIn\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "opt1 = GaussianOptimizer(track_stats=True)\n", + "opt1.optimize_ts = False" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "mol = Mol.FromSmiles(\"CC\")\n", + "mol.EmbedMultipleConfs(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n", + "\n", + "C 0.749910 0.005816 -0.058451\n", + "C -0.736625 0.007027 0.038979\n", + "H 1.259132 -0.392965 0.857771\n", + "H 1.064340 -0.637787 -0.887571\n", + "H 1.092689 1.054550 -0.137005\n", + "H -1.156472 0.990945 -0.285009\n", + "H -1.228044 -0.769937 -0.606496\n", + "H -1.044928 -0.257649 1.077782\n", + "\n" + ] + } + ], + "source": [ + "print(mol.ToXYZ())" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run into error in conformer optimization.\n", + "Run into error in conformer optimization.\n" + ] + } + ], + "source": [ + "# opt.work_dir = Path(\"test_conformer\").absolute()\n", + "opt_mol = opt1(mol, save_dir=\"/home/xiaorui/test_rdmc\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/03/28 11:24:47 AM | cclib | INFO: Identified logfile to be in ORCA format\n" + ] + } + ], + "source": [ + "# opt.work_dir = Path(\"test_conformer\").absolute()\n", + "opt_mol = opt2(mol, save_dir=\"test_conformer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from rdmc.conformer_generation.verifiers.orca import OrcaFreqVerifier" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "freq = OrcaFreqVerifier(method=\"AM1\", nprocs=1, memory=16, track_stats=True, binary_path=\"/home/xiaorui/Apps/orca_5_0_4_linux_x86-64_shared_openmpi411/orca\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "delattr(opt_mol, \"KeepIDs\")\n", + "delattr(opt_mol, \"frequency\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024/03/28 11:26:13 AM | cclib | INFO: Identified logfile to be in ORCA format\n" + ] + }, + { + "data": { + "image/png": "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", + "text/html": [ + "\n", + "
Energy-4225.401110340381
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "freq(opt_mol, save_dir=\"test_conformer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{0: array([1348.14, 1363.43, 1384.77, 1395.37, 1414.74, 3104.11, 3136.26,\n", + " 3179.21, 3257.89])}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "opt_mol.frequency" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# specify reaction\n", + "\n", + "rxn_smiles = '[C:11]1([H:23])([H:24])[C:12]([H:25])([H:26])[C:13]([H:27])([H:28])[C:14]([H:29])=[C:15]([H:30])[C:16]1([H:31])[H:32].[c:1]1([H:17])[c:2]([H:18])[c:3]([H:19])[c:4]([C:7](=[O:8])[O:9][O:10][H:22])[c:5]([H:20])[c:6]1[H:21]>>[C:11]1([H:23])([H:24])[C:12]([H:25])([H:26])[C:13]([H:27])([H:28])[C:14]2([H:29])[O:10][C:15]2([H:30])[C:16]1([H:31])[H:32].[c:1]1([H:17])[c:2]([H:18])[c:3]([H:19])[c:4]([C:7]([O:8][H:22])=[O:9])[c:5]([H:20])[c:6]1[H:21]'\n", + "# rxn_smiles = '[C:1]([C:2]([C:3]([H:20])([H:21])[H:22])([O:4])[C:5]([H:23])([H:24])[H:25])([H:17])([H:18])[H:19].[C:6]([C:7]([C:8]([H:29])([H:30])[H:31])([C:9]([H:32])([H:33])[H:34])[c:10]1[c:11]([H:35])[c:12]([H:36])[c:13]([O:14][H:37])[c:15]([H:38])[c:16]1[H:39])([H:26])([H:27])[H:28]>>[C:1]([C:2]([C:3]([H:20])([H:21])[H:22])([O:4][H:37])[C:5]([H:23])([H:24])[H:25])([H:17])([H:18])[H:19].[C:6]([C:7]([C:8]([H:29])([H:30])[H:31])([C:9]([H:32])([H:33])[H:34])[c:10]1[c:11]([H:35])[c:12]([H:36])[c:13]([O:14])[c:15]([H:38])[c:16]1[H:39])([H:26])([H:27])[H:28]'\n", + "# rxn_smiles = \"[C:1]([C@@:2]([O:3][H:12])([C:4]([N:5]([C:6](=[O:7])[H:16])[H:15])([H:13])[H:14])[H:11])([H:8])([H:9])[H:10]>>[C:1]([C@@:2]([O:3][H:12])([C:4](/[N:5]=[C:6](/[O:7][H:15])[H:16])([H:13])[H:14])[H:11])([H:8])([H:9])[H:10]\"\n", + "\n", + "# rxn_smiles = '[C:1](=[C:2]([C:3]([C:4]([C:5](=[C:6]([C:7]([H:17])[H:18])[H:16])[H:15])([H:13])[H:14])([H:11])[H:12])[H:10])([H:8])[H:9]>>[C:1]([C:2]1([H:10])[C:3]([H:11])([H:12])[C:4]([H:13])([H:14])[C:5]([H:15])=[C:6]([H:16])[C:7]1([H:17])[H:18])([H:8])[H:9]'\n", + "# rxn_smiles = '[C:1](=[C:2]([C:3]([C:4]([C:5]([C:6](=[C:7]([H:17])[H:18])[H:16])[H:15])([H:13])[H:14])([H:11])[H:12])[H:10])([H:8])[H:9]>>[C:1]1([H:8])([H:9])[C:2]([H:10])[C:3]([H:11])([H:12])[C:4]([H:13])([H:14])[C@@:5]1([C:6](=[C:7]([H:17])[H:18])[H:16])[H:15]'\n", + "# rxn_smiles = '[N:1]([c:2]1[c:3]([H:9])[n:4]([H:10])[c:5]([H:11])[n:6]1)([H:7])[H:8]>>[N:1]([C:2]1=[N:6][C:5]([H:11])=[N:4][C:3]1([H:9])[H:10])([H:7])[H:8]'\n", + "# rxn_smiles = \"[C:1]([C:2]([C:3]([H:11])([H:12])[H:13])([C:4]([C:5]#[N:6])([H:14])[H:15])[H:10])([H:7])([H:8])[H:9]>>[C:1]([C:2]([C:3]([H:11])([H:12])[H:13])([C:4]([N+:6]#[C-:5])([H:14])[H:15])[H:10])([H:7])([H:8])[H:9]\"\n", + "# rxn_smiles = \"[C:1]([C:2]([C:3]([H:11])([H:12])[H:13])([C:4]([C:5]#[N:6])([H:14])[H:15])[H:10])([H:7])([H:8])[H:9]>>[C:1]([C:2]([C:3]([H:11])([H:12])[H:13])=[C:4]([C:5]#[N:6])[H:14])([H:7])([H:8])[H:9].[H:10][H:15]\"\n", + "# rxn_smiles = '[C:1]([C:2]1([H:10])[C:3]([H:11])([H:12])[C:4]1([C:5]#[N:6])[H:13])([H:7])([H:8])[H:9]>>[C:1](=[C:2]([C:3]([C:4]1([H:13])[C:5]([H:8])=[N:6]1)([H:11])[H:12])[H:10])([H:7])[H:9]'\n", + "# rxn_smiles = '[C:1]([O:2][C:3]([C:4]([O:5][H:13])([H:11])[H:12])([H:9])[H:10])([H:6])([H:7])[H:8]>>[C:1]([O:2][C:3](=[C:4]([H:11])[H:12])[H:10])([H:6])([H:7])[H:8].[O:5]([H:9])[H:13]'\n", + "# rxn_smiles = \"[C:1]([C:2]1=[C:3]([H:13])[C:4]2([C:5]([H:14])([H:15])[H:16])[C:6]([H:17])=[C:7]([H:18])[C:8]1([H:19])[C:9]2([H:20])[H:21])([H:10])([H:11])[H:12]>>[C:1]([C:2]#[C:3][H:13])([H:10])([H:11])[H:12].[C:4]1([C:5]([H:14])([H:15])[H:16])=[C:6]([H:17])[C:7]([H:18])=[C:8]([H:19])[C:9]1([H:20])[H:21]\"\n", + "\n", + "# ts egnn failures\n", + "# rxn_smiles = '[N:1]#[C:2][C@@:3]1([H:8])[C:4]([H:9])([H:10])[C@@:5]2([H:11])[C:6]([H:12])([H:13])[N:7]12>>[N:1]#[C:2][C@@:3]1([H:8])[C:4]([H:9])([H:10])[C:5]([H:11])=[N+:7]1[C-:6]([H:12])[H:13]'" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rxn = Reaction.from_reaction_smiles(rxn_smiles)\n", + "rxn" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from ts_ml.utils import trained_model_dir" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Can't instantiate abstract class GaussianOptimizer with abstract method is_available", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mGaussianOptimizer\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: Can't instantiate abstract class GaussianOptimizer with abstract method is_available" + ] + } + ], + "source": [ + "GaussianOptimizer()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Can't instantiate abstract class GaussianOptimizer with abstract method is_available", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 13\u001b[0m\n\u001b[1;32m 2\u001b[0m embedder \u001b[38;5;241m=\u001b[39m TSEGNNGuesser(trained_model_dir, track_stats\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# trained_model_dir = \"../../ts_egnn/trained_models/ts_gcn/2022_03_18/\"\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# embedder = TSGCNGuesser(trained_model_dir, track_stats=True)\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# embedder = RMSDPPGuesser(track_stats=True)\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# embedder = AutoNEBGuesser(track_stats=True)\u001b[39;00m\n\u001b[1;32m 10\u001b[0m ts_gen \u001b[38;5;241m=\u001b[39m TSConformerGenerator(\n\u001b[1;32m 11\u001b[0m rxn_smiles\u001b[38;5;241m=\u001b[39mrxn_smiles,\n\u001b[1;32m 12\u001b[0m embedder\u001b[38;5;241m=\u001b[39membedder,\n\u001b[0;32m---> 13\u001b[0m optimizer\u001b[38;5;241m=\u001b[39m\u001b[43mGaussianOptimizer\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 14\u001b[0m pruner\u001b[38;5;241m=\u001b[39mTorsionPruner(),\n\u001b[1;32m 15\u001b[0m verifiers\u001b[38;5;241m=\u001b[39m[XTBFrequencyVerifier(track_stats\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)],\n\u001b[1;32m 16\u001b[0m save_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m./test_ts\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 17\u001b[0m multiplicity\u001b[38;5;241m=\u001b[39mrxn\u001b[38;5;241m.\u001b[39mreactant_complex\u001b[38;5;241m.\u001b[39mGetSpinMultiplicity(),\n\u001b[1;32m 18\u001b[0m \n\u001b[1;32m 19\u001b[0m )\n", + "\u001b[0;31mTypeError\u001b[0m: Can't instantiate abstract class GaussianOptimizer with abstract method is_available" + ] + } + ], + "source": [ + "trained_model_dir = trained_model_dir / \"ts_egnn/2022_07_10_am1\"\n", + "embedder = TSEGNNGuesser(trained_model_dir, track_stats=True)\n", + "\n", + "# trained_model_dir = \"../../ts_egnn/trained_models/ts_gcn/2022_03_18/\"\n", + "# embedder = TSGCNGuesser(trained_model_dir, track_stats=True)\n", + "\n", + "# embedder = RMSDPPGuesser(track_stats=True)\n", + "# embedder = AutoNEBGuesser(track_stats=True)\n", + "\n", + "ts_gen = TSConformerGenerator(\n", + " rxn_smiles=rxn_smiles,\n", + " embedder=embedder,\n", + " optimizer=GaussianOptimizer(),\n", + " pruner=TorsionPruner(),\n", + " verifiers=[XTBFrequencyVerifier(track_stats=True)],\n", + " save_dir=\"./test_ts\",\n", + " multiplicity=rxn.reactant_complex.GetSpinMultiplicity(),\n", + "\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022/04/25 06:24:44 PM | TSConformerGenerator | INFO: Embedding stable species conformers...\n", + "2022/04/25 06:24:44 PM | StochasticConformerGenerator | INFO: Config specified: using default settings for loose config\n", + "2022/04/25 06:24:44 PM | StochasticConformerGenerator | INFO: Generating conformers for [C:1]([C:2]([C:3]([H:20])([H:21])[H:22])([O:4])[C:5]([H:23])([H:24])[H:25])([H:17])([H:18])[H:19]\n", + "2022/04/25 06:24:44 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 1: embedding 20 initial guesses...\n", + "2022/04/25 06:24:44 PM | StochasticConformerGenerator | INFO: Iteration 1: optimizing initial guesses...\n", + "2022/04/25 06:24:45 PM | StochasticConformerGenerator | INFO: Iteration 1: pruning conformers...\n", + "2022/04/25 06:24:45 PM | StochasticConformerGenerator | INFO: Iteration 1: kept 15 unique conformers\n", + "2022/04/25 06:24:45 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 2: embedding 20 initial guesses...\n", + "2022/04/25 06:24:45 PM | StochasticConformerGenerator | INFO: Iteration 2: optimizing initial guesses...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 2: pruning conformers...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 2: kept 20 unique conformers\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 3: embedding 20 initial guesses...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 3: optimizing initial guesses...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 3: pruning conformers...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 3: kept 23 unique conformers\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 4: embedding 20 initial guesses...\n", + "2022/04/25 06:24:46 PM | StochasticConformerGenerator | INFO: Iteration 4: optimizing initial guesses...\n", + "2022/04/25 06:24:47 PM | StochasticConformerGenerator | INFO: Iteration 4: pruning conformers...\n", + "2022/04/25 06:24:47 PM | StochasticConformerGenerator | INFO: Iteration 4: kept 25 unique conformers\n", + "2022/04/25 06:24:47 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 5: embedding 20 initial guesses...\n", + "2022/04/25 06:24:47 PM | StochasticConformerGenerator | INFO: Iteration 5: optimizing initial guesses...\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 5: pruning conformers...\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 5: kept 27 unique conformers\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 6: embedding 20 initial guesses...\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 6: optimizing initial guesses...\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 6: pruning conformers...\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 6: kept 27 unique conformers\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Iteration 6: stop crietria reached\n", + "\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Config specified: using default settings for loose config\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: Generating conformers for [C:6]([C:7]([C:8]([H:29])([H:30])[H:31])([C:9]([H:32])([H:33])[H:34])[c:10]1[c:11]([H:35])[c:12]([H:36])[c:13]([O:14][H:37])[c:15]([H:38])[c:16]1[H:39])([H:26])([H:27])[H:28]\n", + "2022/04/25 06:24:48 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 1: embedding 20 initial guesses...\n", + "2022/04/25 06:24:49 PM | StochasticConformerGenerator | INFO: Iteration 1: optimizing initial guesses...\n", + "2022/04/25 06:24:49 PM | StochasticConformerGenerator | INFO: Iteration 1: pruning conformers...\n", + "2022/04/25 06:24:49 PM | StochasticConformerGenerator | INFO: Iteration 1: kept 19 unique conformers\n", + "2022/04/25 06:24:49 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 2: embedding 20 initial guesses...\n", + "2022/04/25 06:24:49 PM | StochasticConformerGenerator | INFO: Iteration 2: optimizing initial guesses...\n", + "2022/04/25 06:24:50 PM | StochasticConformerGenerator | INFO: Iteration 2: pruning conformers...\n", + "2022/04/25 06:24:50 PM | StochasticConformerGenerator | INFO: Iteration 2: kept 36 unique conformers\n", + "2022/04/25 06:24:50 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 3: embedding 20 initial guesses...\n", + "2022/04/25 06:24:50 PM | StochasticConformerGenerator | INFO: Iteration 3: optimizing initial guesses...\n", + "2022/04/25 06:24:51 PM | StochasticConformerGenerator | INFO: Iteration 3: pruning conformers...\n", + "2022/04/25 06:24:51 PM | StochasticConformerGenerator | INFO: Iteration 3: kept 49 unique conformers\n", + "2022/04/25 06:24:51 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 4: embedding 20 initial guesses...\n", + "2022/04/25 06:24:51 PM | StochasticConformerGenerator | INFO: Iteration 4: optimizing initial guesses...\n", + "2022/04/25 06:24:52 PM | StochasticConformerGenerator | INFO: Iteration 4: pruning conformers...\n", + "2022/04/25 06:24:52 PM | StochasticConformerGenerator | INFO: Iteration 4: kept 60 unique conformers\n", + "2022/04/25 06:24:52 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 5: embedding 20 initial guesses...\n", + "2022/04/25 06:24:52 PM | StochasticConformerGenerator | INFO: Iteration 5: optimizing initial guesses...\n", + "2022/04/25 06:24:53 PM | StochasticConformerGenerator | INFO: Iteration 5: pruning conformers...\n", + "2022/04/25 06:24:53 PM | StochasticConformerGenerator | INFO: Iteration 5: kept 68 unique conformers\n", + "2022/04/25 06:24:53 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 6: embedding 20 initial guesses...\n", + "2022/04/25 06:24:53 PM | StochasticConformerGenerator | INFO: Iteration 6: optimizing initial guesses...\n", + "2022/04/25 06:24:54 PM | StochasticConformerGenerator | INFO: Iteration 6: pruning conformers...\n", + "2022/04/25 06:24:54 PM | StochasticConformerGenerator | INFO: Iteration 6: kept 77 unique conformers\n", + "2022/04/25 06:24:54 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 7: embedding 20 initial guesses...\n", + "2022/04/25 06:24:54 PM | StochasticConformerGenerator | INFO: Iteration 7: optimizing initial guesses...\n", + "2022/04/25 06:24:55 PM | StochasticConformerGenerator | INFO: Iteration 7: pruning conformers...\n", + "2022/04/25 06:24:55 PM | StochasticConformerGenerator | INFO: Iteration 7: kept 86 unique conformers\n", + "2022/04/25 06:24:55 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 8: embedding 20 initial guesses...\n", + "2022/04/25 06:24:55 PM | StochasticConformerGenerator | INFO: Iteration 8: optimizing initial guesses...\n", + "2022/04/25 06:24:56 PM | StochasticConformerGenerator | INFO: Iteration 8: pruning conformers...\n", + "2022/04/25 06:24:56 PM | StochasticConformerGenerator | INFO: Iteration 8: kept 93 unique conformers\n", + "2022/04/25 06:24:56 PM | StochasticConformerGenerator | INFO: Iteration 8: stop crietria reached\n", + "\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Config specified: using default settings for loose config\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Generating conformers for [C:1]([C:2]([C:3]([H:20])([H:21])[H:22])([O:4][H:37])[C:5]([H:23])([H:24])[H:25])([H:17])([H:18])[H:19]\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 1: embedding 20 initial guesses...\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Iteration 1: optimizing initial guesses...\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Iteration 1: pruning conformers...\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Iteration 1: kept 19 unique conformers\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 2: embedding 20 initial guesses...\n", + "2022/04/25 06:24:58 PM | StochasticConformerGenerator | INFO: Iteration 2: optimizing initial guesses...\n", + "2022/04/25 06:24:59 PM | StochasticConformerGenerator | INFO: Iteration 2: pruning conformers...\n", + "2022/04/25 06:24:59 PM | StochasticConformerGenerator | INFO: Iteration 2: kept 33 unique conformers\n", + "2022/04/25 06:24:59 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 3: embedding 20 initial guesses...\n", + "2022/04/25 06:24:59 PM | StochasticConformerGenerator | INFO: Iteration 3: optimizing initial guesses...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 3: pruning conformers...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 3: kept 45 unique conformers\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 4: embedding 20 initial guesses...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 4: optimizing initial guesses...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 4: pruning conformers...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 4: kept 51 unique conformers\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 5: embedding 20 initial guesses...\n", + "2022/04/25 06:25:00 PM | StochasticConformerGenerator | INFO: Iteration 5: optimizing initial guesses...\n", + "2022/04/25 06:25:01 PM | StochasticConformerGenerator | INFO: Iteration 5: pruning conformers...\n", + "2022/04/25 06:25:01 PM | StochasticConformerGenerator | INFO: Iteration 5: kept 57 unique conformers\n", + "2022/04/25 06:25:01 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 6: embedding 20 initial guesses...\n", + "2022/04/25 06:25:01 PM | StochasticConformerGenerator | INFO: Iteration 6: optimizing initial guesses...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 6: pruning conformers...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 6: kept 64 unique conformers\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 7: embedding 20 initial guesses...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 7: optimizing initial guesses...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 7: pruning conformers...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 7: kept 67 unique conformers\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 7: stop crietria reached\n", + "\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Config specified: using default settings for loose config\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Generating conformers for [C:6]([C:7]([C:8]([H:29])([H:30])[H:31])([C:9]([H:32])([H:33])[H:34])[c:10]1[c:11]([H:35])[c:12]([H:36])[c:13]([O:14])[c:15]([H:38])[c:16]1[H:39])([H:26])([H:27])[H:28]\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 1: embedding 20 initial guesses...\n", + "2022/04/25 06:25:02 PM | StochasticConformerGenerator | INFO: Iteration 1: optimizing initial guesses...\n", + "2022/04/25 06:25:03 PM | StochasticConformerGenerator | INFO: Iteration 1: pruning conformers...\n", + "2022/04/25 06:25:03 PM | StochasticConformerGenerator | INFO: Iteration 1: kept 18 unique conformers\n", + "2022/04/25 06:25:03 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 2: embedding 20 initial guesses...\n", + "2022/04/25 06:25:03 PM | StochasticConformerGenerator | INFO: Iteration 2: optimizing initial guesses...\n", + "2022/04/25 06:25:04 PM | StochasticConformerGenerator | INFO: Iteration 2: pruning conformers...\n", + "2022/04/25 06:25:04 PM | StochasticConformerGenerator | INFO: Iteration 2: kept 27 unique conformers\n", + "2022/04/25 06:25:04 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 3: embedding 20 initial guesses...\n", + "2022/04/25 06:25:04 PM | StochasticConformerGenerator | INFO: Iteration 3: optimizing initial guesses...\n", + "2022/04/25 06:25:05 PM | StochasticConformerGenerator | INFO: Iteration 3: pruning conformers...\n", + "2022/04/25 06:25:05 PM | StochasticConformerGenerator | INFO: Iteration 3: kept 37 unique conformers\n", + "2022/04/25 06:25:05 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 4: embedding 20 initial guesses...\n", + "2022/04/25 06:25:05 PM | StochasticConformerGenerator | INFO: Iteration 4: optimizing initial guesses...\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: Iteration 4: pruning conformers...\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: Iteration 4: kept 44 unique conformers\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 5: embedding 20 initial guesses...\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: Iteration 5: optimizing initial guesses...\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: Iteration 5: pruning conformers...\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: Iteration 5: kept 51 unique conformers\n", + "2022/04/25 06:25:06 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 6: embedding 20 initial guesses...\n", + "2022/04/25 06:25:07 PM | StochasticConformerGenerator | INFO: Iteration 6: optimizing initial guesses...\n", + "2022/04/25 06:25:07 PM | StochasticConformerGenerator | INFO: Iteration 6: pruning conformers...\n", + "2022/04/25 06:25:07 PM | StochasticConformerGenerator | INFO: Iteration 6: kept 55 unique conformers\n", + "2022/04/25 06:25:07 PM | StochasticConformerGenerator | INFO: \n", + "Iteration 7: embedding 20 initial guesses...\n", + "2022/04/25 06:25:07 PM | StochasticConformerGenerator | INFO: Iteration 7: optimizing initial guesses...\n", + "2022/04/25 06:25:08 PM | StochasticConformerGenerator | INFO: Iteration 7: pruning conformers...\n", + "2022/04/25 06:25:08 PM | StochasticConformerGenerator | INFO: Iteration 7: kept 59 unique conformers\n", + "2022/04/25 06:25:08 PM | StochasticConformerGenerator | INFO: Iteration 7: stop crietria reached\n", + "\n", + "2022/04/25 06:25:11 PM | TSConformerGenerator | INFO: Generating initial TS guesses...\n", + "2022/04/25 06:25:15 PM | TSConformerGenerator | INFO: Optimizing TS guesses...\n", + "2022/04/25 06:29:13 PM | TSConformerGenerator | INFO: Pruning TS guesses...\n", + "2022/04/25 06:29:13 PM | TSConformerGenerator | INFO: Pruned 0 TS conformers\n", + "2022/04/25 06:29:13 PM | TSConformerGenerator | INFO: Verifying TS guesses...\n" + ] + } + ], + "source": [ + "opt_ts_mol = ts_gen(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a97d83374c3e485391d3d4b3913b791a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(IntSlider(value=0, description='confId', max=4), Output()), _dom_classes=('widget-intera…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + ".(confId)>" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_guess_mol = RDKitMol.FromFile(\"./test_ts/ts_initial_guess_confs.sdf\", sameMol=True)\n", + "# initial_guess_mol = RDKitMol.FromFile(\"/home/lagnajit/test3/ts_initial_guess_confs.sdf\", sameMol=True)\n", + "interactive_conformer_viewer(initial_guess_mol)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6cdbe7d829504c07880a2d3f8d0cdfbf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(IntSlider(value=0, description='confId', max=4), Output()), _dom_classes=('widget-intera…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + ".(confId)>" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "opt_ts_mol = RDKitMol.FromFile(\"./test_ts/ts_optimized_confs.sdf\", sameMol=True)\n", + "# opt_ts_mol = RDKitMol.FromFile(\"/home/lagnajit/test3/ts_optimized_confs.sdf\", sameMol=True)\n", + "interactive_conformer_viewer(opt_ts_mol)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[True, True, True, True, False, True, True, False, False, False]\n", + "[True, True, True, False, False, True, True, False, False, False]\n", + "{0: True, 1: True, 2: True, 3: False, 4: False, 5: True, 6: True, 7: False, 8: False, 9: False, 10: True, 11: False, 12: False, 13: True, 14: True, 15: False, 16: True, 17: False, 18: False, 19: False}\n" + ] + } + ], + "source": [ + "import pickle\n", + "\n", + "test_dir = \"/home/lagnajit/test3/\"\n", + "freq_path = os.path.join(test_dir, \"freq_check_ids.pkl\")\n", + "irc_path = os.path.join(test_dir, \"irc_check_ids.pkl\")\n", + "workflow_path = os.path.join(test_dir, \"workflow_check_ids.pkl\")\n", + "\n", + "with open(freq_path, \"rb\") as f:\n", + " freq_check = pickle.load(f)\n", + "with open(irc_path, \"rb\") as f:\n", + " irc_check = pickle.load(f)\n", + "with open(workflow_path, \"rb\") as f:\n", + " workflow_check = pickle.load(f)\n", + "\n", + "print(freq_check)\n", + "print(irc_check)\n", + "print(workflow_check)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "opt_ts_mol.KeepIDs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "keep_ids = {i: True for i in range(opt_ts_mol.GetNumConformers())}\n", + "energies = {i: i for i in range(opt_ts_mol.GetNumConformers())}\n", + "opt_ts_mol.KeepIDs = keep_ids\n", + "opt_ts_mol.Energies = energies\n", + "# setattr(opt_ts_mol._mol, \"KeepIDs\", keep_ids)\n", + "\n", + "opt_ts_mol.KeepIDs[0] = False\n", + "opt_ts_mol.KeepIDs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "copied_mol = opt_ts_mol.Copy(quickCopy=True, copy_attrs=[\"KeepIDs\", \"Energies\"])\n", + "copied_mol.KeepIDs\n", + "copied_mol.Energies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "copied_mol.KeepIDs[1] = False\n", + "opt_ts_mol.KeepIDs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from rdmc.conformer_generation.utils import mol_to_dict, dict_to_mol" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mol_dict = mol_to_dict(opt_ts_mol, conf_copy_attrs=[\"KeepIDs\", \"Energies\"])\n", + "mol_dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d2m_mol = dict_to_mol(mol_dict, conf_copy_attrs=[\"KeepIDs\", \"Energies\"])\n", + "d2m_mol.Energies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "opt_ts_mol.KeepIDs\n", + "unique_ids = [0, 1, 2, 3, 4, 6]\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "with open(\"/home/lagnajit/Downloads/0/0/freq_check_ids.pkl\", \"rb\") as f:\n", + " freq_check = pickle.load(f)\n", + " \n", + "freq_check" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "with open(\"./test_ts/freq_check_ids.pkl\", \"rb\") as f:\n", + " freq_check = pickle.load(f)\n", + " \n", + "print(freq_check)\n", + "\n", + "\n", + "with open(\"./test_ts/workflow_check_ids.pkl\", \"rb\") as f:\n", + " full_check = pickle.load(f)\n", + " \n", + "print(full_check)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(opt_ts_mol.GetNumConformers()):\n", + " save_dir = os.path.join(\"./test_ts\", f\"sella_opt{i}\")\n", + " props = run_xtb_calc(opt_ts_mol, confId=i, job=\"--hess\", save_dir=save_dir)\n", + " print(props[\"frequencies\"][:5])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "opt_ts_mol = RDKitMol.FromFile(\"../../../../Windows/Papers/ts2/scheme_examples/ts_initial_guess_confs_fig.sdf\", sameMol=True)\n", + "interactive_conformer_viewer(opt_ts_mol)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check some examples\n", + "save_dir = \"../rdmc/conformer_exps/ts_conf_gen/exps/val_rxns_egnn/1000/\"\n", + "r_file = os.path.join(save_dir, \"reactant_confs.sdf\")\n", + "p_file = os.path.join(save_dir, \"product_confs.sdf\")\n", + "ts_guess_file = os.path.join(save_dir, \"ts_initial_guess_confs.sdf\")\n", + "ts_opt_file = os.path.join(save_dir, \"ts_optimized_confs.sdf\")\n", + "freq_ver_file = os.path.join(save_dir, \"freq_check_ids.pkl\")\n", + "irc_ver_file = os.path.join(save_dir, \"irc_check_ids.pkl\")\n", + "\n", + "with open(freq_ver_file, \"rb\") as f:\n", + " freq_ids = pickle.load(f)\n", + "print(freq_ids)\n", + "\n", + "with open(irc_ver_file, \"rb\") as f:\n", + " irc_ids = pickle.load(f)\n", + "print(irc_ids)\n", + "\n", + "guess_ts = RDKitMol.FromFile(ts_guess_file, sanitize=False, sameMol=True)\n", + "opt_ts = RDKitMol.FromFile(ts_opt_file, sanitize=False, sameMol=True)\n", + "\n", + "interactive_conformer_viewer(guess_ts)\n", + "interactive_conformer_viewer(opt_ts)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# make things look pretty with pymol\n", + "\n", + "# distance d1, o1, h1\n", + "# hide labels, d1\n", + "\n", + "# unbond c2, o1\n", + "# distance d2, c2, o1\n", + "# hide labels, d2\n", + "\n", + "# unbond h1, c1\n", + "# distance d3, h1, c1\n", + "# hide labels, d3\n", + "\n", + "# set dash_color, white\n", + "# set dash_gap, 0.15\n", + "# set dash_radius, 0.03" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# allow old models with pyg 1.7 to be compatible with new pyg 2.0\n", + "# layernorm was incorrectly implemented, so we need to change the shape\n", + "# of any \"node_norm\" weights/biases from [1] to [hidden_dim]\n", + "# previously, this meant that weights/biases in layernorm were incorrectly broadcasted\n", + "\n", + "# import torch\n", + "# from copy import deepcopy\n", + "\n", + "# trained_model_dir = \"../../ts_egnn/trained_models/ts_egnn/2022_02_07\"\n", + "# old_model = torch.load(os.path.join(trained_model_dir, \"best_model.ckpt\"))\n", + "\n", + "# new_state_dict = deepcopy(old_model[\"state_dict\"])\n", + "# for param in new_state_dict:\n", + "# if \"node_norm\" in param:\n", + "# new_param = new_state_dict[param] * torch.ones([64])\n", + "# new_state_dict[param] = new_param\n", + " \n", + "# old_model[\"state_dict\"] = new_state_dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ts_ml1", + "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.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/ipython/TS Conformer Generation[WIP].ipynb b/ipython/notebooks_to_clean/TS Conformer Generation[WIP].ipynb similarity index 100% rename from ipython/TS Conformer Generation[WIP].ipynb rename to ipython/notebooks_to_clean/TS Conformer Generation[WIP].ipynb diff --git a/ipython/TS-GCN+RDMC_v1.ipynb b/ipython/notebooks_to_clean/TS-GCN+RDMC_v1.ipynb similarity index 100% rename from ipython/TS-GCN+RDMC_v1.ipynb rename to ipython/notebooks_to_clean/TS-GCN+RDMC_v1.ipynb diff --git a/ipython/TS-GCN+RDMC_v2.ipynb b/ipython/notebooks_to_clean/TS-GCN+RDMC_v2.ipynb similarity index 100% rename from ipython/TS-GCN+RDMC_v2.ipynb rename to ipython/notebooks_to_clean/TS-GCN+RDMC_v2.ipynb diff --git a/ipython/TS-GCN+RDMC_v3.ipynb b/ipython/notebooks_to_clean/TS-GCN+RDMC_v3.ipynb similarity index 100% rename from ipython/TS-GCN+RDMC_v3.ipynb rename to ipython/notebooks_to_clean/TS-GCN+RDMC_v3.ipynb diff --git a/ipython/TS-GCN+RDMC_v4.ipynb b/ipython/notebooks_to_clean/TS-GCN+RDMC_v4.ipynb similarity index 100% rename from ipython/TS-GCN+RDMC_v4.ipynb rename to ipython/notebooks_to_clean/TS-GCN+RDMC_v4.ipynb diff --git a/ipython/TS-GCN+RDMC_v5.ipynb b/ipython/notebooks_to_clean/TS-GCN+RDMC_v5.ipynb similarity index 100% rename from ipython/TS-GCN+RDMC_v5.ipynb rename to ipython/notebooks_to_clean/TS-GCN+RDMC_v5.ipynb diff --git a/ipython/Well Conformer Generation[WIP].ipynb b/ipython/notebooks_to_clean/Well Conformer Generation[WIP].ipynb similarity index 100% rename from ipython/Well Conformer Generation[WIP].ipynb rename to ipython/notebooks_to_clean/Well Conformer Generation[WIP].ipynb diff --git a/ipython/develop_ts_screener.ipynb b/ipython/notebooks_to_clean/develop_ts_screener.ipynb similarity index 100% rename from ipython/develop_ts_screener.ipynb rename to ipython/notebooks_to_clean/develop_ts_screener.ipynb diff --git a/ipython/ts_generation_pipeline_LP.ipynb b/ipython/notebooks_to_clean/ts_generation_pipeline_LP.ipynb similarity index 100% rename from ipython/ts_generation_pipeline_LP.ipynb rename to ipython/notebooks_to_clean/ts_generation_pipeline_LP.ipynb diff --git a/rdmc/conformer_generation/embedders/__init__.py b/rdmc/conformer_generation/embedders/__init__.py index e5499d67..e5a7c2e0 100644 --- a/rdmc/conformer_generation/embedders/__init__.py +++ b/rdmc/conformer_generation/embedders/__init__.py @@ -1,3 +1,6 @@ from rdmc.conformer_generation.embedders.etkdg import ETKDGEmbedder from rdmc.conformer_generation.embedders.geomol import GeoMolEmbedder from rdmc.conformer_generation.embedders.random import RandomEmbedder +from rdmc.conformer_generation.embedders.torsional_diffusion import ( + TorsionalDiffusionEmbedder, +)