Skip to content

Instantly share code, notes, and snippets.

@iwatobipen
Created June 4, 2019 13:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save iwatobipen/06baf157d521fa25285c2e908329ff9c to your computer and use it in GitHub Desktop.
Save iwatobipen/06baf157d521fa25285c2e908329ff9c to your computer and use it in GitHub Desktop.
constrained embeddings
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from rdkit import Chem\n",
"from rdkit.Chem import AllChem\n",
"from rdkit.Chem import rdFMCS\n",
"from rdkit.Chem.Draw import IPythonConsole"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"mol1 = Chem.MolFromSmiles('CCc1ccccc1')\n",
"mol2 = Chem.MolFromSmiles('CCc1nnccc1')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"AllChem.EmbedMolecule(mol1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"application/3dmoljs_load.v0": "<div id=\"3dmolviewer_15596521281286132\" style=\"position: relative; width: 200px; height: 200px\">\n <p id=\"3dmolwarning_15596521281286132\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n return new Promise((resolve, reject) => {\n var tag = document.createElement('script');\n tag.src = uri;\n tag.async = true;\n tag.onload = () => {\n resolve();\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n}\n\nvar viewer_15596521281286132 = null;\nvar warn = document.getElementById(\"3dmolwarning_15596521281286132\");\nif(warn) {\n warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_15596521281286132 = $3Dmol.createViewer($(\"#3dmolviewer_15596521281286132\"),{backgroundColor:\"white\"});\n\tviewer_15596521281286132.removeAllModels();\n\tviewer_15596521281286132.addModel(\"\\n RDKit 3D\\n\\n 8 8 0 0 0 0 0 0 0 0999 V2000\\n 2.7975 0.0839 0.7058 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.9966 0.0409 -0.5636 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5291 0.0093 -0.2802 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0984 -1.2078 -0.1315 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4446 -1.2253 0.1282 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1521 -0.0544 0.2377 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4891 1.1401 0.0826 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.1390 1.2133 -0.1791 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 7 1 0\\n 7 8 2 0\\n 8 3 1 0\\nM END\\n\",\"sdf\");\n\tviewer_15596521281286132.setStyle({\"stick\": {}});\n\tviewer_15596521281286132.setBackgroundColor(\"0xeeeeee\");\n\tviewer_15596521281286132.zoomTo();\nviewer_15596521281286132.render();\n});\n</script>",
"text/html": [
"<div id=\"3dmolviewer_15596521281286132\" style=\"position: relative; width: 200px; height: 200px\">\n",
" <p id=\"3dmolwarning_15596521281286132\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n",
" <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
" </div>\n",
"<script>\n",
"\n",
"var loadScriptAsync = function(uri){\n",
" return new Promise((resolve, reject) => {\n",
" var tag = document.createElement('script');\n",
" tag.src = uri;\n",
" tag.async = true;\n",
" tag.onload = () => {\n",
" resolve();\n",
" };\n",
" var firstScriptTag = document.getElementsByTagName('script')[0];\n",
" firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
"});\n",
"};\n",
"\n",
"if(typeof $3Dmolpromise === 'undefined') {\n",
"$3Dmolpromise = null;\n",
" $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n",
"}\n",
"\n",
"var viewer_15596521281286132 = null;\n",
"var warn = document.getElementById(\"3dmolwarning_15596521281286132\");\n",
"if(warn) {\n",
" warn.parentNode.removeChild(warn);\n",
"}\n",
"$3Dmolpromise.then(function() {\n",
"viewer_15596521281286132 = $3Dmol.createViewer($(\"#3dmolviewer_15596521281286132\"),{backgroundColor:\"white\"});\n",
"\tviewer_15596521281286132.removeAllModels();\n",
"\tviewer_15596521281286132.addModel(\"\\n RDKit 3D\\n\\n 8 8 0 0 0 0 0 0 0 0999 V2000\\n 2.7975 0.0839 0.7058 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.9966 0.0409 -0.5636 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5291 0.0093 -0.2802 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0984 -1.2078 -0.1315 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4446 -1.2253 0.1282 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1521 -0.0544 0.2377 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4891 1.1401 0.0826 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.1390 1.2133 -0.1791 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 7 1 0\\n 7 8 2 0\\n 8 3 1 0\\nM END\\n\",\"sdf\");\n",
"\tviewer_15596521281286132.setStyle({\"stick\": {}});\n",
"\tviewer_15596521281286132.setBackgroundColor(\"0xeeeeee\");\n",
"\tviewer_15596521281286132.zoomTo();\n",
"viewer_15596521281286132.render();\n",
"});\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"IPythonConsole.drawMol3D(mol1, size=(200,200))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"mcs = rdFMCS.FindMCS([mol1, mol2])\n",
"mcs_mol = Chem.MolFromSmarts(mcs.smartsString)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"ref_match = mol1.GetSubstructMatch(mcs_mol)\n",
"target_match = mol2.GetSubstructMatch(mcs_mol)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(0, 1, 2, 3, 4, 5) (0, 1, 2, 7, 6, 5)\n"
]
}
],
"source": [
"print(ref_match, target_match)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"rwmol = Chem.RWMol(mcs_mol)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"rwconf = Chem.Conformer(rwmol.GetNumAtoms())\n",
"matches = rwmol.GetSubstructMatch(mcs_mol)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.797503065062055\n",
"1.9965837331267733\n",
"0.5291080593215798\n",
"-0.09836576154290043\n",
"-1.444598670619997\n",
"-2.1521053683742934\n"
]
}
],
"source": [
"ref_conf = mol1.GetConformer()\n",
"for i, match in enumerate(matches):\n",
" print(ref_conf.GetAtomPosition(ref_match[i]).x)\n",
" rwconf.SetAtomPosition(match, ref_conf.GetAtomPosition(ref_match[i]))\n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.797503065062055 0.08393698531448948 0.7058212432454596\n",
"1.9965837331267733 0.04091937598459714 -0.5635829154801455\n",
"0.5291080593215798 0.00932480299515561 -0.2802135129357946\n",
"-0.09836576154290043 -1.2078412356493724 -0.13145634839820414\n",
"-1.444598670619997 -1.2253207297818316 0.12824947496784708\n",
"-2.1521053683742934 -0.05441461335304368 0.2376898645891146\n"
]
}
],
"source": [
"for i in matches:\n",
" pos=rwconf.GetAtomPosition(i)\n",
" print(pos.x, pos.y, pos.z)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rwmol.AddConformer(rwconf)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"application/3dmoljs_load.v0": "<div id=\"3dmolviewer_1559652366264313\" style=\"position: relative; width: 400px; height: 400px\">\n <p id=\"3dmolwarning_1559652366264313\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n return new Promise((resolve, reject) => {\n var tag = document.createElement('script');\n tag.src = uri;\n tag.async = true;\n tag.onload = () => {\n resolve();\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n}\n\nvar viewer_1559652366264313 = null;\nvar warn = document.getElementById(\"3dmolwarning_1559652366264313\");\nif(warn) {\n warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_1559652366264313 = $3Dmol.createViewer($(\"#3dmolviewer_1559652366264313\"),{backgroundColor:\"white\"});\n\tviewer_1559652366264313.removeAllModels();\n\tviewer_1559652366264313.addModel(\"\\n RDKit 3D\\n\\n 6 5 0 0 0 0 0 0 0 0999 V2000\\n 2.7975 0.0839 0.7058 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.9966 0.0409 -0.5636 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5291 0.0093 -0.2802 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0984 -1.2078 -0.1315 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4446 -1.2253 0.1282 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1521 -0.0544 0.2377 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 4 0\\n 4 5 4 0\\n 5 6 4 0\\nM END\\n\",\"sdf\");\n\tviewer_1559652366264313.setStyle({\"stick\": {}});\n\tviewer_1559652366264313.setBackgroundColor(\"0xeeeeee\");\n\tviewer_1559652366264313.zoomTo();\nviewer_1559652366264313.render();\n});\n</script>",
"text/html": [
"<div id=\"3dmolviewer_1559652366264313\" style=\"position: relative; width: 400px; height: 400px\">\n",
" <p id=\"3dmolwarning_1559652366264313\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n",
" <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
" </div>\n",
"<script>\n",
"\n",
"var loadScriptAsync = function(uri){\n",
" return new Promise((resolve, reject) => {\n",
" var tag = document.createElement('script');\n",
" tag.src = uri;\n",
" tag.async = true;\n",
" tag.onload = () => {\n",
" resolve();\n",
" };\n",
" var firstScriptTag = document.getElementsByTagName('script')[0];\n",
" firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
"});\n",
"};\n",
"\n",
"if(typeof $3Dmolpromise === 'undefined') {\n",
"$3Dmolpromise = null;\n",
" $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n",
"}\n",
"\n",
"var viewer_1559652366264313 = null;\n",
"var warn = document.getElementById(\"3dmolwarning_1559652366264313\");\n",
"if(warn) {\n",
" warn.parentNode.removeChild(warn);\n",
"}\n",
"$3Dmolpromise.then(function() {\n",
"viewer_1559652366264313 = $3Dmol.createViewer($(\"#3dmolviewer_1559652366264313\"),{backgroundColor:\"white\"});\n",
"\tviewer_1559652366264313.removeAllModels();\n",
"\tviewer_1559652366264313.addModel(\"\\n RDKit 3D\\n\\n 6 5 0 0 0 0 0 0 0 0999 V2000\\n 2.7975 0.0839 0.7058 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1.9966 0.0409 -0.5636 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5291 0.0093 -0.2802 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0984 -1.2078 -0.1315 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4446 -1.2253 0.1282 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1521 -0.0544 0.2377 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 4 0\\n 4 5 4 0\\n 5 6 4 0\\nM END\\n\",\"sdf\");\n",
"\tviewer_1559652366264313.setStyle({\"stick\": {}});\n",
"\tviewer_1559652366264313.setBackgroundColor(\"0xeeeeee\");\n",
"\tviewer_1559652366264313.zoomTo();\n",
"viewer_1559652366264313.render();\n",
"});\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"IPythonConsole.drawMol3D(rwmol)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<rdkit.Chem.rdchem.Mol at 0x119b9dee0>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"AllChem.ConstrainedEmbed(mol2, rwmol)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"application/3dmoljs_load.v0": "<div id=\"3dmolviewer_1559652414289742\" style=\"position: relative; width: 400px; height: 400px\">\n <p id=\"3dmolwarning_1559652414289742\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n </div>\n<script>\n\nvar loadScriptAsync = function(uri){\n return new Promise((resolve, reject) => {\n var tag = document.createElement('script');\n tag.src = uri;\n tag.async = true;\n tag.onload = () => {\n resolve();\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n});\n};\n\nif(typeof $3Dmolpromise === 'undefined') {\n$3Dmolpromise = null;\n $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n}\n\nvar viewer_1559652414289742 = null;\nvar warn = document.getElementById(\"3dmolwarning_1559652414289742\");\nif(warn) {\n warn.parentNode.removeChild(warn);\n}\n$3Dmolpromise.then(function() {\nviewer_1559652414289742 = $3Dmol.createViewer($(\"#3dmolviewer_1559652414289742\"),{backgroundColor:\"white\"});\n\tviewer_1559652414289742.removeAllModels();\n\tviewer_1559652414289742.addModel(\"\\n RDKit 3D\\n\\n 8 8 0 0 0 0 0 0 0 0999 V2000\\n 2.7972 0.0849 0.7132 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 2.0013 0.0551 -0.5760 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5443 0.0073 -0.2790 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.1738 1.1566 -0.1708 N 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4845 1.1340 0.0822 N 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1546 -0.0385 0.2385 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4628 -1.2423 0.1318 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0973 -1.2199 -0.1320 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 7 1 0\\n 7 8 2 0\\n 8 3 1 0\\nM END\\n\",\"sdf\");\n\tviewer_1559652414289742.setStyle({\"stick\": {}});\n\tviewer_1559652414289742.setBackgroundColor(\"0xeeeeee\");\n\tviewer_1559652414289742.zoomTo();\nviewer_1559652414289742.render();\n});\n</script>",
"text/html": [
"<div id=\"3dmolviewer_1559652414289742\" style=\"position: relative; width: 400px; height: 400px\">\n",
" <p id=\"3dmolwarning_1559652414289742\" style=\"background-color:#ffcccc;color:black\">You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension: <br>\n",
" <tt>jupyter labextension install jupyterlab_3dmol</tt></p>\n",
" </div>\n",
"<script>\n",
"\n",
"var loadScriptAsync = function(uri){\n",
" return new Promise((resolve, reject) => {\n",
" var tag = document.createElement('script');\n",
" tag.src = uri;\n",
" tag.async = true;\n",
" tag.onload = () => {\n",
" resolve();\n",
" };\n",
" var firstScriptTag = document.getElementsByTagName('script')[0];\n",
" firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n",
"});\n",
"};\n",
"\n",
"if(typeof $3Dmolpromise === 'undefined') {\n",
"$3Dmolpromise = null;\n",
" $3Dmolpromise = loadScriptAsync('https://3dmol.csb.pitt.edu/build/3Dmol.js');\n",
"}\n",
"\n",
"var viewer_1559652414289742 = null;\n",
"var warn = document.getElementById(\"3dmolwarning_1559652414289742\");\n",
"if(warn) {\n",
" warn.parentNode.removeChild(warn);\n",
"}\n",
"$3Dmolpromise.then(function() {\n",
"viewer_1559652414289742 = $3Dmol.createViewer($(\"#3dmolviewer_1559652414289742\"),{backgroundColor:\"white\"});\n",
"\tviewer_1559652414289742.removeAllModels();\n",
"\tviewer_1559652414289742.addModel(\"\\n RDKit 3D\\n\\n 8 8 0 0 0 0 0 0 0 0999 V2000\\n 2.7972 0.0849 0.7132 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 2.0013 0.0551 -0.5760 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 0.5443 0.0073 -0.2790 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.1738 1.1566 -0.1708 N 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4845 1.1340 0.0822 N 0 0 0 0 0 0 0 0 0 0 0 0\\n -2.1546 -0.0385 0.2385 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -1.4628 -1.2423 0.1318 C 0 0 0 0 0 0 0 0 0 0 0 0\\n -0.0973 -1.2199 -0.1320 C 0 0 0 0 0 0 0 0 0 0 0 0\\n 1 2 1 0\\n 2 3 1 0\\n 3 4 2 0\\n 4 5 1 0\\n 5 6 2 0\\n 6 7 1 0\\n 7 8 2 0\\n 8 3 1 0\\nM END\\n\",\"sdf\");\n",
"\tviewer_1559652414289742.setStyle({\"stick\": {}});\n",
"\tviewer_1559652414289742.setBackgroundColor(\"0xeeeeee\");\n",
"\tviewer_1559652414289742.zoomTo();\n",
"viewer_1559652414289742.render();\n",
"});\n",
"</script>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"IPythonConsole.drawMol3D(mol2)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" RDKit 3D\n",
"\n",
" 8 8 0 0 0 0 0 0 0 0999 V2000\n",
" 2.7975 0.0839 0.7058 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 1.9966 0.0409 -0.5636 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0.5291 0.0093 -0.2802 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -0.0984 -1.2078 -0.1315 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -1.4446 -1.2253 0.1282 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -2.1521 -0.0544 0.2377 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -1.4891 1.1401 0.0826 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -0.1390 1.2133 -0.1791 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 1 2 1 0\n",
" 2 3 1 0\n",
" 3 4 2 0\n",
" 4 5 1 0\n",
" 5 6 2 0\n",
" 6 7 1 0\n",
" 7 8 2 0\n",
" 8 3 1 0\n",
"M END\n",
"\n",
"\n",
" RDKit 3D\n",
"\n",
" 8 8 0 0 0 0 0 0 0 0999 V2000\n",
" 2.7972 0.0849 0.7132 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 2.0013 0.0551 -0.5760 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0.5443 0.0073 -0.2790 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -0.1738 1.1566 -0.1708 N 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -1.4845 1.1340 0.0822 N 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -2.1546 -0.0385 0.2385 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -1.4628 -1.2423 0.1318 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" -0.0973 -1.2199 -0.1320 C 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 1 2 1 0\n",
" 2 3 1 0\n",
" 3 4 2 0\n",
" 4 5 1 0\n",
" 5 6 2 0\n",
" 6 7 1 0\n",
" 7 8 2 0\n",
" 8 3 1 0\n",
"M END\n",
"\n"
]
}
],
"source": [
"print(Chem.MolToMolBlock(mol1))\n",
"print(Chem.MolToMolBlock(mol2))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment