I've been looking at a lot of conformational manifolds lately. I used to do this with the RDKit's PyMol integration, but since that doesn't run on either of my laptops and since py3DMol looks awesome, I invested a bit of time in figuring out how to make it work with ipywidgets in jupyter. I figure this might be useful to others (and having the code online will be useful to me as well!), I'm doing another short post.
What I want to do is generate a set of conformers for a molecule and scroll through them interactively. Here's some code for doing that:
def drawit(m,p,confId=-1): mb = Chem.MolToMolBlock(m,confId=confId) p.removeAllModels() p.addModel(mb,'sdf') p.setStyle({'stick':{}}) p.setBackgroundColor('0xeeeeee') p.zoomTo() return p.show()
You use it like this:
import py3Dmol from rdkit import Chem from rdkit.Chem import AllChem from ipywidgets import interact, interactive, fixed m = Chem.MolFromSmiles(r'COc1ccc2[nH]c([S@@+]([O-])Cc3ncc(C)c(OC)c3C)nc2c1') # esomeprazole m = Chem.AddHs(m) AllChem.EmbedMultipleConfs(m,numConfs=10,randomSeed=0xf00d,useExpTorsionAnglePrefs=True,\ useBasicKnowledge=True) # align to one of the ring systems: AllChem.AlignMolConformers(m,m.GetSubstructMatch(Chem.MolFromSmarts('c1[nH]c2ccccc2n1'))) # now construct the view and interactive widget: p = py3Dmol.view(width=400,height=400) interact(drawit, m=fixed(m),p=fixed(p),confId=(0,m.GetNumConformers()-1));
And here's what the output looks like in the notebook:
Simple and, I think, quite useful.
You can also display the whole bundle at once:
def drawit2(m,p,confId=-1): mb = Chem.MolToMolBlock(m,confId=confId) p.addModel(mb,'sdf') p.setStyle({'stick':{}}) p.setBackgroundColor('0xeeeeee') p.zoomTo() p = py3Dmol.view(width=400,height=400) for confId in range(10): drawit2(m,p,confId) p.show()
This yields:
1 comment:
Greg, unfortunately, the interactive slider bar example here doesn't seem to work in 2017.09 anymore. :-(
Some internal miscommunication due to the inclusion of py3Dmol being used internally in RDKit iPython now?
Post a Comment