Skip to content

Instantly share code, notes, and snippets.

@ptosco
Created August 14, 2020 20:31
Show Gist options
  • Save ptosco/36574d7f025a932bc1b8db221903a8d2 to your computer and use it in GitHub Desktop.
Save ptosco/36574d7f025a932bc1b8db221903a8d2 to your computer and use it in GitHub Desktop.
CanonicalReordering
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.Draw import MolsToGridImage"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def addAtomIndices(mol):\n",
" for i, a in enumerate(mol.GetAtoms()):\n",
" a.SetAtomMapNum(i)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"m = Chem.MolFromSmiles(\"CC[C@H](C1=CC=CC2=C1C=CC=C2)C\")\n",
"m1 = Chem.MolFromInchi(\"InChI=1S/C14H16/c1-3-11(2)13-10-6-8-12-7-4-5-9-14(12)13/h4-11H,3H2,1-2H3/t11-/m1/s1\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Chem.MolToSmiles(m) == Chem.MolToSmiles(m1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"m_neworder = tuple(zip(*sorted([(j, i) for i, j in enumerate(Chem.CanonicalRankAtoms(m))])))[1]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"m1_neworder = tuple(zip(*sorted([(j, i) for i, j in enumerate(Chem.CanonicalRankAtoms(m1))])))[1]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m_neworder == m1_neworder"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"addAtomIndices(m)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"addAtomIndices(m1)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=600x200 at 0x7FAE4C1997B8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"MolsToGridImage((m, m1))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"m_renum = Chem.RenumberAtoms(m, m_neworder)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"m1_renum = Chem.RenumberAtoms(m1, m1_neworder)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"addAtomIndices(m_renum)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"addAtomIndices(m1_renum)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.PngImagePlugin.PngImageFile image mode=RGB size=600x200 at 0x7FAE4C127390>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"MolsToGridImage((m_renum, m1_renum))"
]
},
{
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@JanCBrammer
Copy link

Thanks @ptosco, the gist saves the day!

For those who, like me, find it taxing to parse the expression in cells 5 and 6, here's the expression somewhat unpacked:

canon_idx_old_idx = [(j, i) for i, j in enumerate(CanonicalRankAtoms(m))] # [(0, 0), (2, 1), (1, 2)]
old_idcs_sorted_by_canon_idcs = tuple(zip(*sorted(canon_idx_old_idx))) # ((0, 1, 2), (0, 2, 1))
canonical_order = old_idcs_sorted_by_canon_idcs[1] # (0, 2, 1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment