Coming back to an old one that was mostly answered already:

On Thu, Jan 12, 2017 at 3:11 AM, Curt Fischer <curt.r.fisc...@gmail.com>
wrote:

>
> 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?
>

This was covered already: you need to sanitize the outputs of RunReactants()


> Second, how can I modify my SMARTS reaction query to avoid duplication of
> each product?
>

You probably can't and still support the same reaction.
Here's your input:

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'

The first reactant - '[C:1]#[C:2]' - can match any given acetylene group
two ways. This means you'll get two possible products for every acetylene.
In the specific example you give below, these actually yield different
products, but there are more symmetric cases where the products are
degenerate.
If you were willing to only allow terminal groups - *-C#[CH] - to react you
could use [C:1]#[CH1:2] as a SMARTS pattern. This would prevent you from
getting duplicates, but I suspect this isn't what you want.

The standard approach to solving the degenerate products problem is to
uniquify them via SMILES:

products = list(chain(*products_tuples))
[Chem.SanitizeMol(x) for x in products]
uproducts = []
smis = set()
for p in products:
    smi = Chem.MolToSmiles(p,isomericSmiles=True)
    if smi in smis:
        continue
    smis.add(smi)
    uproducts.append(p)

There's a bit of extra computation here due to the need to generate
canonical SMILES, but it shouldn't be too bad.

Best,
-greg





> Here's some example code, also available at https://github.com/
> tentrillion/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
> Rdkit-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to