Last active
February 9, 2024 03:37
-
-
Save ljmartin/9358657b4b90c3df04c78bb6628abd74 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "75d53a1b-ed0e-4706-803b-0166ee021d9b", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from rdkit import Chem\n", | |
"from rdkit.Chem import Draw, rdChemReactions\n", | |
"from rdkit.Chem.Draw import IPythonConsole\n", | |
"from rdkit.Chem import rdqueries\n", | |
"IPythonConsole.drawOptions.addAtomIndices = True\n", | |
"IPythonConsole.molSize = (400, 400)\n", | |
"\n", | |
"from indigo import Indigo\n", | |
"import re" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "b6b5cd5b-6ff0-497d-bf6d-0eedb5e36921", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"indi = Indigo()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "c6656b45-c086-45c0-93dd-6117e6334275", | |
"metadata": {}, | |
"source": [ | |
"# parse reactions from rdfile\n", | |
"note the \"_encode\" is just removing a _ufeff tag from the start of the original" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "a800cb28-0b4d-4145-88f5-9997e6ce5fc8", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"reader = indi.iterateRDFile('./CBR18_encode.rdf')\n", | |
"pattern = r'(#\\d{1,2}):?\\d{1,2}'\n", | |
"rxns = []\n", | |
"products = []\n", | |
"reactants = []\n", | |
"indireactants = []\n", | |
"indiproducts =[]\n", | |
"qrs = []\n", | |
"for reaction in reader:\n", | |
" reaction = next(reader)\n", | |
" q = indi.loadQueryReaction(reaction.rawData())\n", | |
"\n", | |
" reactant = [i for i in q.iterateReactants()][0]\n", | |
" product = [i for i in q.iterateProducts()][0]\n", | |
" rdk_reactant = Chem.MolFromSmarts(re.sub(pattern, r'\\1', reactant.smarts()))\n", | |
" rdk_product = Chem.MolFromSmarts(re.sub(pattern, r'\\1', product.smarts()))\n", | |
" if rdk_reactant is None:\n", | |
" print('problem reactant')\n", | |
" break\n", | |
" if rdk_product is None:\n", | |
" print('problem product')\n", | |
" break\n", | |
"\n", | |
" ##not looking at reactions yet. Going to parse\n", | |
" ##the rxn smarts first\n", | |
" # rxn_string = q.smarts()\n", | |
" # rxn_string = re.sub(pattern, r'\\1', rxn_string)\n", | |
" # rxn = rdChemReactions.ReactionFromSmarts(rxn_string)\n", | |
" # if rxn is None:\n", | |
" # print('problem reaction')\n", | |
" # break\n", | |
" # rxns.append(rxn)\n", | |
" products.append(rdk_product)\n", | |
" reactants.append(rdk_reactant)\n", | |
" qrs.append(q)\n", | |
" indireactants.append(reactant)\n", | |
" indiproducts.append(product)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e8858c0e-0705-4e3b-af0e-eccbaa09dce3", | |
"metadata": {}, | |
"source": [ | |
"# parse a rxn string" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "209005e8-8768-43d9-9214-a3a67e520443", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"idx = 110\n", | |
"reactant = reactants[idx]\n", | |
"product = products[idx]\n", | |
"Draw.MolsToGridImage([reactant, product])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "fea15ba7-0ed8-439a-888d-daff3c393e62", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def parseHs(patt):\n", | |
" \"\"\"\n", | |
" Note! It might make sense to run through once, \n", | |
" count up all the hydrogens, and then just once expand the query\n", | |
" to the parent hydrogens. \n", | |
" use a dict to keep track of the remaining degree\n", | |
" \"\"\"\n", | |
" mw = Chem.RWMol(patt)\n", | |
" mw.BeginBatchEdit()\n", | |
" for atom in mw.GetAtoms():\n", | |
" if atom.GetAtomicNum()==1:\n", | |
" idx = atom.GetIdx()\n", | |
" bond = [i for i in atom.GetBonds()][0] #hydrogens only have one.\n", | |
" other_atom =bond.GetOtherAtom(atom)\n", | |
" other_idx = other_atom.GetIdx()\n", | |
" #existing degree is going to be one less after we remove this H, \n", | |
" #so enforce degree = existing_degree-1\n", | |
" other_atom.ExpandQuery(rdqueries.ExplicitDegreeEqualsQueryAtom(other_atom.GetDegree()-1))\n", | |
" mw.RemoveAtom(atom.GetIdx())\n", | |
" mw.CommitBatchEdit()\n", | |
" return mw\n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "b7e97523-c8e3-4221-b9b4-50d938ea2f8b", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"reactant = Chem.MolFromSmarts('[#6]1(=[#7])-[#6](=[#7])-[#7](-[#1])-[#6]=,:[#7]-[#7]-1-[#1]')\n", | |
"reactant = parseHs(reactant)\n", | |
"product = Chem.MolFromSmarts('[#6]1(-[#7])-[#6](-[#7])=[#7]-[#6]:[#7]-[#7]=1')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "a0b4f284-b66a-4ce1-89f0-ef319eacab42", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"rxn = rdChemReactions.ReactionFromSmarts(\n", | |
" Chem.MolToSmarts(reactant)+'>>'+Chem.MolToSmarts(product)\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e52b6c17-534e-4725-a0c1-8e8f1c76cdce", | |
"metadata": {}, | |
"source": [ | |
"# test molecule:\n", | |
"\n", | |
"has to be kekulized, removing aromaticity flags" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "4609a63a-f436-4674-a595-e61ca07a5277", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"()" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"mol = Chem.MolFromSmiles('N=C1NC=NNC1=N')\n", | |
"rxn.RunReactant(mol, 0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"id": "9efd945a-fc57-4625-b90b-a1911cfb28d5", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<rdkit.Chem.rdchem.Mol at 0x12769f220>" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"Chem.Kekulize(mol, clearAromaticFlags=True)\n", | |
"rxn.RunReactant(mol, 0)[0][0]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "aee8f2fa-0818-4e7c-96db-925841ac8cf4", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.11.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
after all this, note that this works too (on the hydrogen issue, not aromaticity):