{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Building a Multi-Molecule Mol2 reader for RDKit V2\n", "\n", "In this mini-tools entry, I want to introduce a simple but power modification to my previous version of Mol2MolSupplier for RDKIT:\n", "\n", "https://chem-workflows.com/articles/2019/07/18/building-a-multi-molecule-mol2-reader-for-rdkit/\n", "\n", "Perhaps some of you (as me) encountered errors when using the previous version of the Mol2MolSupplier.\n", "\n", "Well, this modification overcomes many of the previous errors which were differences in the headers and order of the Mol2 molecule blocks in different Mol2 files.\n", "\n", "This new version used the same approach as before but in a simpler and faster way.\n", "\n", "Let's go directly to the new function:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importing the libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from rdkit import Chem\n", "from rdkit.Chem import Draw,AllChem\n", "from rdkit.Chem.Draw import IPythonConsole\n", "\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def Mol2MolSupplier (file=None,sanitize=True):\n", " mols=[]\n", " with open(file, 'r') as f:\n", " doc=[line for line in f.readlines()]\n", "\n", " start=[index for (index,p) in enumerate(doc) if '@MOLECULE' in p]\n", " finish=[index-1 for (index,p) in enumerate(doc) if '@MOLECULE' in p]\n", " finish.append(len(doc))\n", " \n", " interval=list(zip(start,finish[1:]))\n", " for i in interval:\n", " block = \",\".join(doc[i[0]:i[1]]).replace(',','')\n", " m=Chem.MolFromMol2Block(block,sanitize=sanitize)\n", " mols.append(m)\n", " return(mols)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I will use the following multi-molecule mol2 file to show how the function works. The file contains 169 different molecules from [ZINC](https://zinc.docking.org/)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "filePath ='for-sale+in-man+fda+named+endogenous.mol2'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "RDKit WARNING: [12:48:54] ZINC000003801919: warning - O.co2 with non C.2 or S.o2 neighbor.\n" ] } ], "source": [ "database=Mol2MolSupplier(filePath,sanitize=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we are using RDKit to convert mol2 block texts to RDKit molecules, we can use sanitization or not. Moreover, we can see the warning for sanitization problems. If a molecule is not valid we will get a 'None' element." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[None,\n", " None,\n", " None,\n", " None,\n", " None,\n", " None,\n", " None,\n", " None,\n", " ,\n", " ]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "database[:10] #The first 10 elements in the list " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once molecules loaded. We can perform any calculation available in RDKit or converting the molecules to other formats (e.g. SDF).\n", "For instance, creating a pandas table with some useful molecular information." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "table=pd.DataFrame()\n", "index=0\n", "for mol in database:\n", " if mol:\n", " table.loc[index,'Name']=mol.GetProp('_Name')\n", " table.loc[index,'NumAtoms']=mol.GetNumAtoms()\n", " table.loc[index,'SMILES']=Chem.MolToSmiles(mol)\n", " index=index+1" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameNumAtomsSMILES
0ZINC00000383089120.0[NH3+][C@@H](CCC(=O)N[C@@H](CS)C(=O)NCC(=O)[O-...
1ZINC00000447441429.0C=C1CC[C@H](O)C/C1=C/C=C1\\CCC[C@@]2(C)[C@H]1CC...
2ZINC00003394350822.0CC1=C(/C=C/C(C)=C\\C=C\\C(C)=C/C(=O)[O-])C(C)(C)...
3ZINC0000000010119.0O=C([O-])c1ccccc1
4ZINC00000153057522.0COc1cc(CNC(=O)CCCC/C=C/C(C)C)ccc1O
5ZINC00000378089330.0CCC(C)(C)C(=O)O[C@H]1C[C@@H](C)C=C2C=C[C@H](C)...
6ZINC00000387533228.0C[C@@H]1C[C@H]2[C@@H]3CCC4=CC(=O)C=C[C@]4(C)[C...
7ZINC00000409585831.0Cc1c(C)c2c(c(C)c1O)CC[C@@](C)(CCC[C@H](C)CCC[C...
8ZINC00000857721832.0Nc1nc2ncc(CNc3ccc(C(=O)N[C@@H](CCC(=O)[O-])C(=...
9ZINC00010001504830.0C=C1/C(=C\\C=C2/CCC[C@@]3(C)[C@H]2CC[C@@H]3[C@H...
\n", "
" ], "text/plain": [ " Name NumAtoms \\\n", "0 ZINC000003830891 20.0 \n", "1 ZINC000004474414 29.0 \n", "2 ZINC000033943508 22.0 \n", "3 ZINC000000001011 9.0 \n", "4 ZINC000001530575 22.0 \n", "5 ZINC000003780893 30.0 \n", "6 ZINC000003875332 28.0 \n", "7 ZINC000004095858 31.0 \n", "8 ZINC000008577218 32.0 \n", "9 ZINC000100015048 30.0 \n", "\n", " SMILES \n", "0 [NH3+][C@@H](CCC(=O)N[C@@H](CS)C(=O)NCC(=O)[O-... \n", "1 C=C1CC[C@H](O)C/C1=C/C=C1\\CCC[C@@]2(C)[C@H]1CC... \n", "2 CC1=C(/C=C/C(C)=C\\C=C\\C(C)=C/C(=O)[O-])C(C)(C)... \n", "3 O=C([O-])c1ccccc1 \n", "4 COc1cc(CNC(=O)CCCC/C=C/C(C)C)ccc1O \n", "5 CCC(C)(C)C(=O)O[C@H]1C[C@@H](C)C=C2C=C[C@H](C)... \n", "6 C[C@@H]1C[C@H]2[C@@H]3CCC4=CC(=O)C=C[C@]4(C)[C... \n", "7 Cc1c(C)c2c(c(C)c1O)CC[C@@](C)(CCC[C@H](C)CCC[C... \n", "8 Nc1nc2ncc(CNc3ccc(C(=O)N[C@@H](CCC(=O)[O-])C(=... \n", "9 C=C1/C(=C\\C=C2/CCC[C@@]3(C)[C@H]2CC[C@@H]3[C@H... " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table.head(10) #The first 10 non None elements in the list " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Drawing some non None molecules keeping the 3D coordinates from the mol2 file." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "no_none=[mol for mol in database if mol] # None element canĀ“t be drawn, this loop keep only valid entries\n", "[Chem.SanitizeMol(mol) for mol in no_none]\n", "Draw.MolsToGridImage(no_none[:14],molsPerRow=7,subImgSize=(150,150),legends=[mol.GetProp('_Name') for mol in no_none[:14]],maxMols=100)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

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

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

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

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

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

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n", " jupyter labextension install jupyterlab_3dmol

\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Drawing 3 random molecules of non None list\n", "Draw.IPythonConsole.drawMol3D(no_none[2])\n", "Draw.IPythonConsole.drawMol3D(no_none[6])\n", "Draw.IPythonConsole.drawMol3D(no_none[9])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### As you can see, the functionality of this library is similar to the previous one. I would strongly recommend using this version instead of the previous one to avoid several errors.\n", "\n", "### If you find this Mini-Tool useful or encounter some errors, please leave me a comment.\n", "\n", "#### Cheers!!!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ".. disqus::" ] } ], "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.11.4" } }, "nbformat": 4, "nbformat_minor": 4 }