Here's the ToC figure, which shows a sketch of the final product on the left:
Since I've been looking at how well the RDKit does at conformation generation for highly constrained systems, I thought this would be a nice example molecule to try out. I was also quite curious about the shape of that beast.
The first problem was getting the structure in. I wasn't completely confident in my ability to reproduce that sketch and JACS, of course, doesn't have a way to provide structures in electronic form. Fortunately the authors had solved x-ray structures of their final product and a bunch of intermediates and the CIF files were in the supplementary material. So I converted the CIF to a mol file with OpenBabel (hopefully using the correct CIF file... they aren't particularly well labelled as far as I can tell) and got started from there.
Note: I haven't been able to make blogger work well with py3Dmol, so there are static screenshots below of the 3D structures. Interactive structures are available by viewing the original notebook: https://github.com/greglandrum/rdkit_blog/blob/master/notebooks/3D%20structure%20of%20a%20natural%20product.ipynb with the fantastic nbviewer: http://nbviewer.jupyter.org/github/greglandrum/rdkit_blog/blob/master/notebooks/3D%20structure%20of%20a%20natural%20product.ipynb
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from rdkit import rdBase
print(rdBase.rdkitVersion)
import os,time
print( time.asctime())
import py3Dmol
def drawit(m,p=None,confId=-1):
mb = Chem.MolToMolBlock(m,confId=confId)
if p is None:
p = py3Dmol.view(width=400,height=400)
p.removeAllModels()
p.addModel(mb,'sdf')
p.setStyle({'stick':{}})
p.setBackgroundColor('0xeeeeee')
p.zoomTo()
return p.show()
mExpt = Chem.MolFromMolFile("/home/glandrum/Downloads/paper/ja6b06623_si_010.cif.mol",removeHs=False)
drawit(mExpt)
m = Chem.MolFromMolFile("/home/glandrum/Downloads/paper/ja6b06623_si_010.cif.mol",removeHs=False)
Chem.AssignAtomChiralTagsFromStructure(m)
AllChem.EmbedMolecule(m,useExpTorsionAnglePrefs=True,useBasicKnowledge=True)
drawit(m)
print("RMS: ",AllChem.GetBestRMS(m,mExpt),
"Heavy Atom RMS:",
AllChem.GetBestRMS(Chem.RemoveHs(m),Chem.RemoveHs(mExpt)))
Because we can, let's look at the two structures superimposed:
AllChem.AlignMol(m,mExpt)
mb = Chem.MolToMolBlock(m)
mbExpt = Chem.MolToMolBlock(mExpt)
p = py3Dmol.view(width=400,height=400)
p.removeAllModels()
p.addModel(mb,'sdf')
p.addModel(mbExpt,'sdf')
p.setStyle({'stick':{}})
p.setBackgroundColor('0xeeeeee')
p.zoomTo()
p.show()
Chem.MolToSmiles(Chem.RemoveHs(m),True)
Chem.MolFromSmiles('C[C@H]1C(=O)[C@@]23CC[C@@H]1C[C@@]21O[C@@H]2C(C)(C)C=CC(=O)[C@]23COC1=O')