{ "cells": [ { "cell_type": "markdown", "id": "75ab2410", "metadata": {}, "source": [ "A while ago there was a [question on Twitter](https://twitter.com/GeorgeK_86/status/1425807309700276227) about highlighting bonds which changed in a reaction. I put together a quick bit of example code to answer that question and made a note to do a blog post on the topic. I'm finally getting around to doing that blog post.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "a2a456ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2021.09.2\n" ] } ], "source": [ "from rdkit import Chem\n", "from rdkit.Chem import Draw\n", "from rdkit.Chem.Draw import IPythonConsole\n", "from rdkit.Chem import rdChemReactions\n", "import rdkit\n", "print(rdkit.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's something similar to the reaction from the question:" ] }, { "cell_type": "code", "execution_count": 2, "id": "a1a62215", "metadata": {}, "outputs": [], "source": [ "rxn1 = rdChemReactions.ReactionFromRxnBlock('''$RXN\n", "\n", " Mrv2102 111820212128\n", "\n", " 2 1\n", "$MOL\n", "\n", " Mrv2102 11182121282D \n", "\n", " 13 13 0 0 0 0 999 V2000\n", " -7.5723 2.6505 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0\n", " -6.8579 2.2380 0.0000 O 0 0 0 0 0 0 0 0 0 2 0 0\n", " -6.8580 1.4130 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0\n", " -6.1435 1.0004 0.0000 O 0 0 0 0 0 0 0 0 0 4 0 0\n", " -7.5725 1.0005 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0\n", " -7.5725 0.1755 0.0000 N 0 0 0 0 0 0 0 0 0 6 0 0\n", " -8.2869 -0.2369 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0\n", " -8.2870 -1.0620 0.0000 C 0 0 0 0 0 0 0 0 0 8 0 0\n", " -9.0015 -1.4745 0.0000 C 0 0 0 0 0 0 0 0 0 9 0 0\n", " -9.0015 -2.2995 0.0000 C 0 0 0 0 0 0 0 0 0 10 0 0\n", " -8.2870 -2.7120 0.0000 C 0 0 0 0 0 0 0 0 0 11 0 0\n", " -7.5726 -2.2995 0.0000 C 0 0 0 0 0 0 0 0 0 12 0 0\n", " -7.5726 -1.4745 0.0000 C 0 0 0 0 0 0 0 0 0 13 0 0\n", " 1 2 1 0 0 0 0\n", " 2 3 1 0 0 0 0\n", " 3 4 2 0 0 0 0\n", " 3 5 1 0 0 0 0\n", " 5 6 1 0 0 0 0\n", " 6 7 2 0 0 0 0\n", " 7 8 1 0 0 0 0\n", " 8 9 1 0 0 0 0\n", " 8 13 2 0 0 0 0\n", " 9 10 2 0 0 0 0\n", " 10 11 1 0 0 0 0\n", " 11 12 2 0 0 0 0\n", " 12 13 1 0 0 0 0\n", "M END\n", "$MOL\n", "\n", " Mrv2102 11182121282D \n", "\n", " 12 11 0 0 0 0 999 V2000\n", " -3.7934 0.7703 0.0000 C 0 0 0 0 0 0 0 0 0 14 0 0\n", " -3.0790 1.1828 0.0000 C 0 0 0 0 0 0 0 0 0 15 0 0\n", " -2.3645 0.7703 0.0000 C 0 0 0 0 0 0 0 0 0 16 0 0\n", " -3.7934 -0.0547 0.0000 C 0 0 0 0 0 0 0 0 0 17 0 0\n", " -4.5078 -0.4672 0.0000 O 0 0 0 0 0 0 0 0 0 18 0 0\n", " -3.0789 -0.4671 0.0000 O 0 0 0 0 0 0 0 0 0 19 0 0\n", " -1.6500 1.1828 0.0000 O 0 0 0 0 0 0 0 0 0 20 0 0\n", " -2.3645 -0.0547 0.0000 O 0 0 0 0 0 0 0 0 0 21 0 0\n", " -3.0788 -1.2922 0.0000 C 0 0 0 0 0 0 0 0 0 22 0 0\n", " -1.6500 -0.4672 0.0000 C 0 0 0 0 0 0 0 0 0 23 0 0\n", " -2.3644 -1.7046 0.0000 C 0 0 0 0 0 0 0 0 0 24 0 0\n", " -1.6500 -1.2922 0.0000 C 0 0 0 0 0 0 0 0 0 25 0 0\n", " 1 2 2 0 0 0 0\n", " 1 4 1 0 0 0 0\n", " 2 3 1 0 0 0 0\n", " 3 7 2 0 0 0 0\n", " 3 8 1 0 0 0 0\n", " 4 5 2 0 0 0 0\n", " 4 6 1 0 0 0 0\n", " 6 9 1 0 0 0 0\n", " 8 10 1 0 0 0 0\n", " 9 11 1 0 0 0 0\n", " 10 12 1 0 0 0 0\n", "M END\n", "$MOL\n", "\n", " Mrv2102 11182121282D \n", "\n", " 25 26 0 0 0 0 999 V2000\n", " 5.1328 0.9532 0.0000 C 0 0 0 0 0 0 0 0 0 5 0 0\n", " 5.8002 0.4683 0.0000 N 0 0 0 0 0 0 0 0 0 6 0 0\n", " 5.5453 -0.3163 0.0000 C 0 0 0 0 0 0 0 0 0 7 0 0\n", " 4.7203 -0.3163 0.0000 C 0 0 0 0 0 0 0 0 0 14 0 0\n", " 4.4654 0.4683 0.0000 C 0 0 0 0 0 0 0 0 0 15 0 0\n", " 5.1328 1.7782 0.0000 C 0 0 0 0 0 0 0 0 0 3 0 0\n", " 3.6807 0.7232 0.0000 C 0 0 0 0 0 0 0 0 0 16 0 0\n", " 4.2354 -0.9838 0.0000 C 0 0 0 0 0 0 0 0 0 17 0 0\n", " 6.0302 -0.9838 0.0000 C 0 0 0 0 0 0 0 0 0 8 0 0\n", " 6.8507 -0.8975 0.0000 C 0 0 0 0 0 0 0 0 0 9 0 0\n", " 7.3356 -1.5650 0.0000 C 0 0 0 0 0 0 0 0 0 10 0 0\n", " 7.0001 -2.3187 0.0000 C 0 0 0 0 0 0 0 0 0 11 0 0\n", " 6.1796 -2.4049 0.0000 C 0 0 0 0 0 0 0 0 0 12 0 0\n", " 5.6947 -1.7375 0.0000 C 0 0 0 0 0 0 0 0 0 13 0 0\n", " 3.4149 -0.8975 0.0000 O 0 0 0 0 0 0 0 0 0 18 0 0\n", " 4.5709 -1.7375 0.0000 O 0 0 0 0 0 0 0 0 0 19 0 0\n", " 4.0860 -2.4049 0.0000 C 0 0 0 0 0 0 0 0 0 22 0 0\n", " 3.2655 -2.3187 0.0000 C 0 0 0 0 0 0 0 0 0 24 0 0\n", " 3.5092 1.5302 0.0000 O 0 0 0 0 0 0 0 0 0 20 0 0\n", " 3.0676 0.1712 0.0000 O 0 0 0 0 0 0 0 0 0 21 0 0\n", " 2.2830 0.4261 0.0000 C 0 0 0 0 0 0 0 0 0 23 0 0\n", " 1.6699 -0.1259 0.0000 C 0 0 0 0 0 0 0 0 0 25 0 0\n", " 5.8473 2.1907 0.0000 O 0 0 0 0 0 0 0 0 0 4 0 0\n", " 4.4183 2.1907 0.0000 O 0 0 0 0 0 0 0 0 0 2 0 0\n", " 4.4183 3.0157 0.0000 C 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 2 1 0 0 0 0\n", " 2 3 1 0 0 0 0\n", " 3 4 1 0 0 0 0\n", " 4 5 1 0 0 0 0\n", " 1 5 1 0 0 0 0\n", " 1 6 1 0 0 0 0\n", " 5 7 1 0 0 0 0\n", " 4 8 1 0 0 0 0\n", " 3 9 1 0 0 0 0\n", " 10 11 2 0 0 0 0\n", " 11 12 1 0 0 0 0\n", " 12 13 2 0 0 0 0\n", " 13 14 1 0 0 0 0\n", " 9 10 1 0 0 0 0\n", " 9 14 2 0 0 0 0\n", " 8 15 2 0 0 0 0\n", " 8 16 1 0 0 0 0\n", " 16 17 1 0 0 0 0\n", " 17 18 1 0 0 0 0\n", " 7 19 2 0 0 0 0\n", " 7 20 1 0 0 0 0\n", " 20 21 1 0 0 0 0\n", " 21 22 1 0 0 0 0\n", " 6 23 2 0 0 0 0\n", " 6 24 1 0 0 0 0\n", " 24 25 1 0 0 0 0\n", "M END\n", "''')" ] }, { "cell_type": "markdown", "id": "8899c183", "metadata": {}, "source": [ "Let's take a look at the reaction:" ] }, { "cell_type": "code", "execution_count": 3, "id": "30457372", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "IPythonConsole.molSize = (600,250)\n", "IPythonConsole.highlightByReactant = True\n", "rxn1\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can ask the reaction to tell us which atoms in the reactants are modified in the reaction:" ] }, { "cell_type": "code", "execution_count": 4, "id": "6d3abe01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((4, 5, 6), (0, 1))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxn1.Initialize()\n", "rxn1.GetReactingAtoms()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The information about which atoms react is enough to figure out which bonds change, but we have to do some additional work for this:" ] }, { "cell_type": "code", "execution_count": 5, "id": "28f25400", "metadata": {}, "outputs": [], "source": [ "from collections import namedtuple\n", "AtomInfo = namedtuple('AtomInfo',('mapnum','reactant','reactantAtom','product','productAtom'))\n", "def map_reacting_atoms_to_products(rxn,reactingAtoms):\n", " ''' figures out which atoms in the products each mapped atom in the reactants maps to '''\n", " res = []\n", " for ridx,reacting in enumerate(reactingAtoms):\n", " reactant = rxn.GetReactantTemplate(ridx)\n", " for raidx in reacting:\n", " mapnum = reactant.GetAtomWithIdx(raidx).GetAtomMapNum()\n", " foundit=False\n", " for pidx,product in enumerate(rxn.GetProducts()):\n", " for paidx,patom in enumerate(product.GetAtoms()):\n", " if patom.GetAtomMapNum()==mapnum:\n", " res.append(AtomInfo(mapnum,ridx,raidx,pidx,paidx))\n", " foundit = True\n", " break\n", " if foundit:\n", " break\n", " return res\n", "def get_mapped_neighbors(atom):\n", " ''' test all mapped neighbors of a mapped atom'''\n", " res = {}\n", " amap = atom.GetAtomMapNum()\n", " if not amap:\n", " return res\n", " for nbr in atom.GetNeighbors():\n", " nmap = nbr.GetAtomMapNum()\n", " if nmap:\n", " if amap>nmap:\n", " res[(nmap,amap)] = (atom.GetIdx(),nbr.GetIdx())\n", " else:\n", " res[(amap,nmap)] = (nbr.GetIdx(),atom.GetIdx())\n", " return res\n", "\n", "BondInfo = namedtuple('BondInfo',('product','productAtoms','productBond','status'))\n", "def find_modifications_in_products(rxn):\n", " ''' returns a 2-tuple with the modified atoms and bonds from the reaction '''\n", " reactingAtoms = rxn.GetReactingAtoms()\n", " amap = map_reacting_atoms_to_products(rxn,reactingAtoms)\n", " res = []\n", " seen = set()\n", " # this is all driven from the list of reacting atoms:\n", " for _,ridx,raidx,pidx,paidx in amap:\n", " reactant = rxn.GetReactantTemplate(ridx)\n", " ratom = reactant.GetAtomWithIdx(raidx)\n", " product = rxn.GetProductTemplate(pidx)\n", " patom = product.GetAtomWithIdx(paidx)\n", "\n", " rnbrs = get_mapped_neighbors(ratom)\n", " pnbrs = get_mapped_neighbors(patom)\n", " for tpl in pnbrs:\n", " pbond = product.GetBondBetweenAtoms(*pnbrs[tpl])\n", " if (pidx,pbond.GetIdx()) in seen:\n", " continue\n", " seen.add((pidx,pbond.GetIdx()))\n", " if not tpl in rnbrs:\n", " # new bond in product\n", " res.append(BondInfo(pidx,pnbrs[tpl],pbond.GetIdx(),'New'))\n", " else:\n", " # present in both reactants and products, check to see if it changed\n", " rbond = reactant.GetBondBetweenAtoms(*rnbrs[tpl])\n", " if rbond.GetBondType()!=pbond.GetBondType():\n", " res.append(BondInfo(pidx,pnbrs[tpl],pbond.GetIdx(),'Changed'))\n", " return amap,res\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at what that function returns for our reaction:" ] }, { "cell_type": "code", "execution_count": 6, "id": "c0dbffb9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[AtomInfo(mapnum=5, reactant=0, reactantAtom=4, product=0, productAtom=0), AtomInfo(mapnum=6, reactant=0, reactantAtom=5, product=0, productAtom=1), AtomInfo(mapnum=7, reactant=0, reactantAtom=6, product=0, productAtom=2), AtomInfo(mapnum=14, reactant=1, reactantAtom=0, product=0, productAtom=3), AtomInfo(mapnum=15, reactant=1, reactantAtom=1, product=0, productAtom=4)]\n", "[BondInfo(product=0, productAtoms=(4, 0), productBond=4, status='New'), BondInfo(product=0, productAtoms=(2, 1), productBond=1, status='Changed'), BondInfo(product=0, productAtoms=(3, 2), productBond=2, status='New'), BondInfo(product=0, productAtoms=(4, 3), productBond=3, status='Changed')]\n" ] } ], "source": [ "atms,bnds = find_modifications_in_products(rxn1)\n", "print(atms)\n", "print(bnds)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, define the funciton which we'll use to draw the product molecule with highlights shown for bonds and atoms involved in the reaction:" ] }, { "cell_type": "code", "execution_count": 7, "id": "cc197a20", "metadata": {}, "outputs": [], "source": [ "from IPython.display import Image\n", "def draw_product_with_modified_bonds(rxn,atms,bnds,productIdx=None,showAtomMaps=False):\n", " if productIdx is None:\n", " pcnts = [x.GetNumAtoms() for x in rxn.GetProducts()]\n", " largestProduct = list(sorted(zip(pcnts,range(len(pcnts))),reverse=True))[0][1]\n", " productIdx = largestProduct\n", " d2d = Draw.rdMolDraw2D.MolDraw2DCairo(350,300)\n", " pmol = Chem.Mol(rxn.GetProductTemplate(productIdx))\n", " Chem.SanitizeMol(pmol)\n", " if not showAtomMaps:\n", " for atom in pmol.GetAtoms():\n", " atom.SetAtomMapNum(0)\n", " bonds_to_highlight=[]\n", " highlight_bond_colors={}\n", " atoms_seen = set()\n", " for binfo in bnds:\n", " if binfo.product==productIdx and binfo.status=='New':\n", " bonds_to_highlight.append(binfo.productBond)\n", " atoms_seen.update(binfo.productAtoms)\n", " highlight_bond_colors[binfo.productBond] = (1,.4,.4)\n", " if binfo.product==productIdx and binfo.status=='Changed':\n", " bonds_to_highlight.append(binfo.productBond)\n", " atoms_seen.update(binfo.productAtoms)\n", " highlight_bond_colors[binfo.productBond] = (.4,.4,1)\n", " atoms_to_highlight=set()\n", " for ainfo in atms:\n", " if ainfo.product != productIdx or ainfo.productAtom in atoms_seen:\n", " continue\n", " atoms_to_highlight.add(ainfo.productAtom)\n", "\n", " d2d.drawOptions().useBWAtomPalette()\n", " d2d.drawOptions().continuousHighlight=False\n", " d2d.drawOptions().highlightBondWidthMultiplier = 24\n", " d2d.drawOptions().setHighlightColour((.9,.9,0))\n", " d2d.drawOptions().fillHighlights=False\n", " atoms_to_highlight.update(atoms_seen)\n", " d2d.DrawMolecule(pmol,highlightAtoms=atoms_to_highlight,highlightBonds=bonds_to_highlight,\n", " highlightBondColors=highlight_bond_colors)\n", " d2d.FinishDrawing()\n", " return d2d.GetDrawingText()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can draw the highlighted product molecule:" ] }, { "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": [ "Image(draw_product_with_modified_bonds(rxn1,atms,bnds))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at some other reactions. I will use the SI data from " ] }, { "cell_type": "code", "execution_count": 9, "id": "3a9d8374", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
rxn_ClasspatentIDrxnSmiles_Mapping_NameRxnreactantSet_NameRxnNameRxn_Mapping_CompleterxnSmiles_Mapping_IndigoTKreactantSet_IndigoTKIndigoTK_Mapping_CompleterxnSmiles_IndigoAutoMapperKNIMEreactantSet_IndigoAutoMapperKNIMEIndigoAutoMapperKNIME_Mapping_Complete
06US05849732C.CCCCCC.CO.O=C(OCc1ccccc1)[NH:1][CH2:2][CH2:3...set([3, 4])TrueC(OC([NH:11][CH2:12][CH2:13][CH2:14][CH2:15][C...set([0, 2])TrueC.CCCCCC.CO.[CH3:10][O:11][C:12]([C@@H:14]([NH...set([3, 4])True
12US20120114765A1O[C:1](=[O:2])[c:3]1[cH:4][c:5]([N+:6](=[O:7])...set([0, 1])True[Cl:1][c:2]1[cH:3][n:4][cH:5][c:6]([Cl:20])[c:...set([0, 1])True[NH2:1][c:2]1[c:11]2[c:6]([cH:7][n:8][cH:9][cH...set([0, 1])True
21US08003648B2Cl.O=[CH:1][c:2]1[cH:3][cH:4][c:5](-[c:6]2[n:7...set([1, 3])True[CH2:1]([NH:3][CH2:4][CH3:5])[CH3:2].C([BH3-])...set([0, 3])True[CH3:1][CH2:2][NH:3][CH2:4][CH3:5].[CH3:6][c:7...set([0, 1])True
31US09045475B2CC(=O)O[BH-](OC(C)=O)OC(C)=O.ClCCl.O=[C:1]([CH...set([2, 3])True[nH:1]1[c:5]2[n:6][cH:7][c:8]([O:10][c:11]3[cH...set([0, 3])TrueCC(O[BH-](OC(=O)C)OC(=O)C)=O.[CH3:14][C:15]1([...set([1, 3])True
42US08188098B2CCN(C(C)C)C(C)C.ClCCl.Cl[C:1](=[O:2])[O:3][CH:...set([2, 5])TrueCl[C:2]([O:4][CH:5]1[CH2:9][CH2:8][CH2:7][CH2:...set([0, 2])TrueCCN(C(C)C)C(C)C.[CH3:10][CH2:11][O:12][c:13]1[...set([1, 4])True
\n", "
" ], "text/plain": [ " rxn_Class patentID \\\n", "0 6 US05849732 \n", "1 2 US20120114765A1 \n", "2 1 US08003648B2 \n", "3 1 US09045475B2 \n", "4 2 US08188098B2 \n", "\n", " rxnSmiles_Mapping_NameRxn reactantSet_NameRxn \\\n", "0 C.CCCCCC.CO.O=C(OCc1ccccc1)[NH:1][CH2:2][CH2:3... set([3, 4]) \n", "1 O[C:1](=[O:2])[c:3]1[cH:4][c:5]([N+:6](=[O:7])... set([0, 1]) \n", "2 Cl.O=[CH:1][c:2]1[cH:3][cH:4][c:5](-[c:6]2[n:7... set([1, 3]) \n", "3 CC(=O)O[BH-](OC(C)=O)OC(C)=O.ClCCl.O=[C:1]([CH... set([2, 3]) \n", "4 CCN(C(C)C)C(C)C.ClCCl.Cl[C:1](=[O:2])[O:3][CH:... set([2, 5]) \n", "\n", " NameRxn_Mapping_Complete \\\n", "0 True \n", "1 True \n", "2 True \n", "3 True \n", "4 True \n", "\n", " rxnSmiles_Mapping_IndigoTK reactantSet_IndigoTK \\\n", "0 C(OC([NH:11][CH2:12][CH2:13][CH2:14][CH2:15][C... set([0, 2]) \n", "1 [Cl:1][c:2]1[cH:3][n:4][cH:5][c:6]([Cl:20])[c:... set([0, 1]) \n", "2 [CH2:1]([NH:3][CH2:4][CH3:5])[CH3:2].C([BH3-])... set([0, 3]) \n", "3 [nH:1]1[c:5]2[n:6][cH:7][c:8]([O:10][c:11]3[cH... set([0, 3]) \n", "4 Cl[C:2]([O:4][CH:5]1[CH2:9][CH2:8][CH2:7][CH2:... set([0, 2]) \n", "\n", " IndigoTK_Mapping_Complete \\\n", "0 True \n", "1 True \n", "2 True \n", "3 True \n", "4 True \n", "\n", " rxnSmiles_IndigoAutoMapperKNIME \\\n", "0 C.CCCCCC.CO.[CH3:10][O:11][C:12]([C@@H:14]([NH... \n", "1 [NH2:1][c:2]1[c:11]2[c:6]([cH:7][n:8][cH:9][cH... \n", "2 [CH3:1][CH2:2][NH:3][CH2:4][CH3:5].[CH3:6][c:7... \n", "3 CC(O[BH-](OC(=O)C)OC(=O)C)=O.[CH3:14][C:15]1([... \n", "4 CCN(C(C)C)C(C)C.[CH3:10][CH2:11][O:12][c:13]1[... \n", "\n", " reactantSet_IndigoAutoMapperKNIME IndigoAutoMapperKNIME_Mapping_Complete \n", "0 set([3, 4]) True \n", "1 set([0, 1]) True \n", "2 set([0, 1]) True \n", "3 set([1, 3]) True \n", "4 set([1, 4]) True " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "df = pd.read_csv('../data/reaction_data_ci6b00564/dataSetB.csv')\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 11, "id": "c3e97304", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[AtomInfo(mapnum=1, reactant=3, reactantAtom=1, product=0, productAtom=0), AtomInfo(mapnum=7, reactant=4, reactantAtom=0, product=0, productAtom=6)]\n", "[BondInfo(product=0, productAtoms=(6, 0), productBond=5, status='New')]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxnclass = 1\n", "class_smis = df[df['rxn_Class']==rxnclass].rxnSmiles_Mapping_NameRxn.to_list()\n", "rxn = rdChemReactions.ReactionFromSmarts(class_smis[3],useSmiles=True)\n", "rxn.Initialize()\n", "atms,bnds = find_modifications_in_products(rxn)\n", "print(atms)\n", "print(bnds)\n", "Image(draw_product_with_modified_bonds(rxn,atms,bnds))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[AtomInfo(mapnum=1, reactant=1, reactantAtom=1, product=0, productAtom=0), AtomInfo(mapnum=2, reactant=1, reactantAtom=2, product=0, productAtom=9), AtomInfo(mapnum=16, reactant=2, reactantAtom=0, product=0, productAtom=18), AtomInfo(mapnum=17, reactant=2, reactantAtom=1, product=0, productAtom=16), AtomInfo(mapnum=19, reactant=2, reactantAtom=3, product=0, productAtom=15)]\n", "[BondInfo(product=0, productAtoms=(9, 0), productBond=8, status='Changed'), BondInfo(product=0, productAtoms=(18, 0), productBond=18, status='New'), BondInfo(product=0, productAtoms=(15, 9), productBond=14, status='New'), BondInfo(product=0, productAtoms=(16, 18), productBond=17, status='Changed'), BondInfo(product=0, productAtoms=(15, 16), productBond=15, status='Changed')]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxnclass = 4\n", "class_smis = df[df['rxn_Class']==rxnclass].rxnSmiles_Mapping_NameRxn.to_list()\n", "rxn = rdChemReactions.ReactionFromSmarts(class_smis[1],useSmiles=True)\n", "rxn.Initialize()\n", "atms,bnds = find_modifications_in_products(rxn)\n", "print(atms)\n", "print(bnds)\n", "Image(draw_product_with_modified_bonds(rxn,atms,bnds))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Look at an example where there are no changed bonds in the products but where there is a changed atom:" ] }, { "cell_type": "code", "execution_count": 13, "id": "4b06fb79", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[AtomInfo(mapnum=1, reactant=1, reactantAtom=1, product=0, productAtom=0)]\n", "[]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rxnclass = 7\n", "class_smis = df[df['rxn_Class']==rxnclass].rxnSmiles_Mapping_NameRxn.to_list()\n", "rxn = rdChemReactions.ReactionFromSmarts(class_smis[1],useSmiles=True)\n", "rxn.Initialize()\n", "atms,bnds = find_modifications_in_products(rxn)\n", "print(atms)\n", "print(bnds)\n", "Image(draw_product_with_modified_bonds(rxn,atms,bnds))" ] }, { "cell_type": "code", "execution_count": null, "id": "7a94bd23", "metadata": {}, "outputs": [], "source": [] }, { "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.9.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }