Home > Community > How to search substructures with explicit hydrogen in RDKit?
Upvote

28

Downvote
+ Cheminformatics
+ Chemistry
Posted by
Adam Moss

How to search substructures with explicit hydrogen in RDKit?

Bob Weiss  Follow

If you work in a Jupyter Notebook you can visualize your substructure patterns and the search results, so you can see how the patterns work.

from rdkit import Chemfrom rdkit.Chem import Drawsmiles = ['CC1=CC=CC=C1','CC1=C([H])C([H])=C([H])C([H])=C1[H]',          'C1(C2=CC=CC=C2)=CC=CC=C1','C12=C(CC3=CC=CC=C3C2)C=CC=C1',          'C12=CC=CC=C1C=C3C(C=CC=C3)=C2','C12=C(C(C(C=C3)=CC=C4)=C4C=C2)C3=CC=C1']params = Chem.SmilesParserParams()params.removeHs=False # draw and work with explicit Hsmols = [Chem.MolFromSmiles(s, params) for s in smiles]Draw.MolsToGridImage(mols, molsPerRow=3)

This will give you the compounds and especially the one with the explicit Hs.

Compounds

Now we get the patterns and especially the one with the explicit Hs.

patt1 = Chem.MolFromSmiles('CC1=CC=CC=C1')patt2 = Chem.MolFromSmiles('CC1=C([H])C([H])=C([H])C([H])=C1[H]', params) # search with explicit Hspatt3 = Chem.MolFromSmiles('Cc1ccccc1')patt4 = Chem.MolFromSmarts('Cc1ccccc1')patt5 = Chem.MolFromSmarts('[cR1]1[cR1][cR1][cR1][cR1][cR1]1-[c,C]')patts = [patt1,patt2,patt3,patt4,patt5]leg = ['CC1=CC=CC=C1','CC1=C([H])C([H])=C([H])C([H])=C1[H]','Cc1ccccc1 smiles',       'Cc1ccccc1 smarts','[cR1]1[cR1][cR1][cR1][cR1][cR1]1-[c,C]']Draw.MolsToGridImage(patts, molsPerRow=3, legends=leg)

patterns

Search and highlight the result.

ms = []patt = []allsubs = []for m in range(len(mols)):    for p in range(len(patts)):        sub = mols[m].GetSubstructMatches(patts[p])        if len(sub) > 0:            ms.append(mols[m])            patt.append(leg[p])            allsubs.append(sub[0]) # substructures could be find multiple time - just take the firstDraw.MolsToGridImage(ms, molsPerRow=3, legends=patt, highlightAtomLists=allsubs)

Compounds 5 and 6 have no nonaromatic bonds, so there is nothing to find.

Results

More

Upvote

VOTE

Downvote
Hatice Aslan  Follow
, you will find what is expected. However, there are other cases which I still do not understand. I need more testing.More
Upvote

VOTE

Downvote
Jay  Follow
params.removeHs=FalseMore
Upvote

VOTE

Downvote
Godson Ugwu  Follow
If Im using More
Upvote

VOTE

Downvote
Isaac Wingfield  Follow
It took me a while, but you can find 1, 2 and 3 with More
Upvote

VOTE

Downvote
Jim Henderson  Follow
@theozh It is not the extra carbon, it is just that 1 and 3 do not have explicit Hs. If I add explicit Hs to 3 it is found. I thought C[c;H,h]1[c;H,h][c;H,h][c;H,h][c;H,h][c;H,h]1 (see More
Upvote

VOTE

Downvote
more replies