Re: [Rdkit-discuss] UpdatePropertyCache() after RunReactants
Open-Source Cheminformatics and Machine Learning
Brought to you by:
glandrum
From: Michal K. <mic...@gm...> - 2017-01-12 17:32:25
|
You need to sanitize the products, just run Chem.SanitizeMol on each molecule. See http://www.rdkit.org/docs/GettingStartedInPython.html#chemical-reactions : "the molecules that are produced by the chemical reaction processing code are not sanitized". Best, Michal On 12 January 2017 at 17:22, Curt Fischer <cur...@gm...> wrote: > What makes you think the molecules are nonsensical? They look OK to me. > Converting to SMILES before doing any UpdatePropertyCache() stuff.... > > > > *products_tuples = copper_click.RunReactants((diyne, azide))products = > list(chain(*products_tuples))print [Chem.MolToSmiles(prod) for prod in > products]* > > gives.... > > >> *['C#CC(O)Cc1cnnn1CCC', 'C#CC(O)Cc1cn(CCC)nn1', 'C#CCC(O)c1cn(CCC)nn1', >> 'C#CCC(O)c1cnnn1CCC']* > > > ...and those all look like valid SMILES strings to me. > > I'm not sure exactly how to turn off all sanitization, but I did > > *Draw.MolsToGridImage(products, kekulize = False)* > > and as long that is invoked before UpdatePropertyCache, there is a > *different* error than the one I reported last time. > > ---------------------------------------------------------------------------RuntimeError Traceback (most recent call last)<ipython-input-22-0305dfc54e69> in <module>() 7 print [Chem.MolToSmiles(prod) for prod in products] 8 ----> 9 Draw.MolsToGridImage(products, kekulize = False) > /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/IPythonConsole.pyc in ShowMols(mols, **kwargs) 198 else: 199 fn = Draw.MolsToGridImage--> 200 res = fn(mols, **kwargs) 201 if kwargs['useSVG']: 202 return SVG(res) > /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in MolsToGridImage(mols, molsPerRow, subImgSize, legends, highlightAtomLists, useSVG, **kwargs) 400 if useSVG: 401 return _MolsToGridSVG(mols, molsPerRow=molsPerRow, subImgSize=subImgSize, legends=legends,--> 402 highlightAtomLists=highlightAtomLists, **kwargs) 403 else: 404 return _MolsToGridImage(mols, molsPerRow=molsPerRow, subImgSize=subImgSize, legends=legends, > /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in _MolsToGridSVG(mols, molsPerRow, subImgSize, legends, highlightAtomLists, stripSVGNamespace, **kwargs) 374 nmol = rdMolDraw2D.PrepareMolForDrawing(mol, kekulize=kwargs.get('kekulize', True)) 375 d2d = rdMolDraw2D.MolDraw2DSVG(subImgSize[0], subImgSize[1])--> 376 d2d.DrawMolecule(nmol, legend=legends[i], highlightAtoms=highlights) 377 d2d.FinishDrawing() 378 txt = d2d.GetDrawingText() > RuntimeError: Pre-condition Violation > getNumImplicitHs() called without preceding call to calcImplicitValence() > Violation occurred on line 153 in file Code/GraphMol/Atom.cpp > Failed Expression: d_implicitValence > -1 > RDKIT: 2016.09.2 > BOOST: 1_56 > > > > On Thu, Jan 12, 2017 at 4:41 AM, Brian Kelley <fus...@gm...> > wrote: > >> The outputs of reaction are a bit confusing. >> >> Reactions can have multiple product templates so the output of >> RunReactants is a list of list of molecules. >> >> For products in result: >> For molecule in products: >> Molecule.UpdatePropertyCache() >> >> However, it looks like your reaction is generating non sensical molecules >> so you may want to draw with sanitizaton turned off so you can see the >> reaction output. >> >> ---- >> Brian Kelley >> >> On Jan 11, 2017, at 9:11 PM, Curt Fischer <cur...@gm...> >> wrote: >> >> Hi all, >> >> I recently wanted to use RDKit to model the famous copper-catalyzed >> cycloaddition of alkynes and azides. >> >> I eventually got things working, kind of, but had two questions. First, >> I was surprised to find that the products of RunReactants don't have update >> property caches. Is this something I should have expected, or is it a >> bug? If the latter, is it any easy-to-fix bug or a hard-to-fix one? >> >> Second, how can I modify my SMARTS reaction query to avoid duplication of >> each product? >> >> Here's some example code, also available at https://github.com/tentrill >> ion/ipython_notebooks/blob/master/rdkit_smarts_reactions_ >> needs_updating.ipynb >> >> # -------BEGIN CODE------ # >> # import rdkit components >> from rdkit import rdBase >> from rdkit import Chem >> from rdkit.Chem import AllChem >> from rdkit.Chem import Draw >> >> # use IPythonConsole for pretty drawings >> from rdkit.Chem.Draw import IPythonConsole >> # IPythonConsole.ipython_useSVG=True # leave out for github >> >> # for flattening >> from itertools import chain >> >> # define reactants >> diyne_smiles = 'C#CCC(O)C#C' >> azide_smiles = 'CCCN=[N+]=[N-]' >> >> diyne = Chem.MolFromSmiles(diyne_smiles) >> azide = Chem.MolFromSmiles(azide_smiles) >> >> # define reaction >> copper_click_smarts = '[C:1]#[C:2].[N:3]=[N+:4]=[N-: >> 5]>>[c:1]1[c:2][n-0:3][n-0:4][n-0:5]1' >> copper_click = AllChem.ReactionFromSmarts(copper_click_smarts) >> >> # run reaction >> products_tuples = copper_click.RunReactants((diyne, azide)) >> >> # flatten product tuple of tuples into list >> products = list(chain(*products_tuples)) >> >> # FAILS: mol property caches are not updated >> try: >> Draw.MolsToGridImage(products) >> except (RuntimeError, ValueError) as e: >> print 'FAILED!' >> my_error = e >> >> # this works: force updating >> for product in products: >> product.UpdatePropertyCache() >> >> Draw.MolsToGridImage(products) >> >> my_error >> >> products_tuples = copper_click.RunReactants((diyne, azide)) >> products = list(chain(*products_tuples)) >> # FAILS: mol property caches are not updated >> Draw.MolsToGridImage(products) >> >> # -------END CODE------ # >> >> The stacktrace is: >> >> ---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-4-7962390107ec> in <module>() 2 products = list(chain(*products_tuples)) 3 # FAILS: mol property caches are not updated----> 4 Draw.MolsToGridImage(products) >> /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/IPythonConsole.pyc in ShowMols(mols, **kwargs) 198 else: 199 fn = Draw.MolsToGridImage--> 200 res = fn(mols, **kwargs) 201 if kwargs['useSVG']: 202 return SVG(res) >> /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in MolsToGridImage(mols, molsPerRow, subImgSize, legends, highlightAtomLists, useSVG, **kwargs) 403 else: 404 return _MolsToGridImage(mols, molsPerRow=molsPerRow, subImgSize=subImgSize, legends=legends,--> 405 highlightAtomLists=highlightAtomLists, **kwargs) 406 407 >> /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in _MolsToGridImage(mols, molsPerRow, subImgSize, legends, highlightAtomLists, **kwargs) 344 highlights = highlightAtomLists[i] 345 if mol is not None:--> 346 img = _moltoimg(mol, subImgSize, highlights, legends[i], **kwargs) 347 res.paste(img, (col * subImgSize[0], row * subImgSize[1])) 348 return res >> /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in _moltoimg(mol, sz, highlights, legend, **kwargs) 309 from rdkit.Chem.Draw import rdMolDraw2D 310 if not hasattr(rdMolDraw2D, 'MolDraw2DCairo'):--> 311 img = MolToImage(mol, sz, legend=legend, highlightAtoms=highlights, **kwargs) 312 else: 313 nmol = rdMolDraw2D.PrepareMolForDrawing(mol, kekulize=kwargs.get('kekulize', True)) >> /Users/curt/anaconda2/lib/python2.7/site-packages/rdkit/Chem/Draw/__init__.pyc in MolToImage(mol, size, kekulize, wedgeBonds, fitImage, options, canvas, **kwargs) 112 from rdkit import Chem 113 mol = Chem.Mol(mol.ToBinary())--> 114 Chem.Kekulize(mol) 115 116 if not mol.GetNumConformers(): >> ValueError: Sanitization error: Can't kekulize mol. Unkekulized atoms: 3 >> >> >> ------------------------------------------------------------ >> ------------------ >> Developer Access Program for Intel Xeon Phi Processors >> Access to Intel Xeon Phi processor-based developer platforms. >> With one year of Intel Parallel Studio XE. >> Training and support from Colfax. >> Order your platform today. http://sdm.link/xeonphi >> >> _______________________________________________ >> Rdkit-discuss mailing list >> Rdk...@li... >> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss >> >> > > ------------------------------------------------------------ > ------------------ > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today. http://sdm.link/xeonphi > _______________________________________________ > Rdkit-discuss mailing list > Rdk...@li... > https://lists.sourceforge.net/lists/listinfo/rdkit-discuss > > |