Dear All, I'm trying to convert some molecules which I have as SMILES strings only to 3D. I use a methodology similar to the attached script, except this example saves to SDF at different stages of conversion for test purposes.
What happens is that I get very bad 3D structures, CH3 groups with insane geometry, crazy bond lengths between heavy atoms for some molecules, even as the EmbedMolecule and MMFFOptimizeMolecule report success. The problems seem to be gone when I remove the chirality data from SMILES (as far as little I understand and like SMILES at all:) ) The script has 3 molecules to process, I'd greatly appreciate if any of you could take a look at the SDF file it produces. The first and second one are processed, the third fails, but this is OK. The problem is the geometry I get for the first molecule. Any suggestions what I might be doing wrong? I tried playing with parameters of EmbedMolecule and MMFFOptimizeMolecule, also using UFF optimization, no success. I can fix my molecules by running MM3 calculations in external software, but I'd love to avoid that. (I hope the attachment gets through) Thank you very much! Wojtek Plonka +48885756652 wojtekplonka.com <http://www.wojtekplonka.com> fb.com/wojtek.plonka
from rdkit import Chem from rdkit.Chem import AllChem # comment below to run all the troublemakers. myuglymols = [ 'C[C@@]12OC(=O)[C@]3(O)CC[C@H]4[C@@H](C[C@@H](O)[C@@]5(O)CC=CC(=O)[C@]45C)[C@@]45O[C@@]13[C@@H](C4=O)[C@]1(C)C[C@H]2OC(=O)[C@@H]1CO5', 'C[C]12OC(=O)[C]3(O)CC[CH]4[CH](C[CH](O)[C]5(O)CC=CC(=O)[C]45C)[C]45O[C]13[CH](C4=O)[C]1(C)C[CH]2OC(=O)[CH]1CO5', 'CC1=CC(=O)[C@@H](O)[C@]2(C)[C@H]3[C@]4(O)OC[C@@]33[C@@H](C[C@@H]12)OC(=O)C[C@H]3C(=C)[C@H]4O' ] w = Chem.SDWriter('uglymols.sdf') for smiles in myuglymols: m = Chem.MolFromSmiles(smiles) if (m): mold = m m.SetProp('State','MolFromSmiles') w.write(m) Chem.SanitizeMol(m) m.SetProp('State','SanitizeMol') w.write(m) try: print (smiles) m= Chem.AddHs(m) # print(AllChem.EmbedMolecule(m,randomSeed=42,useRandomCoords=True,useSmallRingTorsions=True, useMacrocycleTorsions=True)) print(AllChem.EmbedMolecule(m)) m.SetProp('State','SanitizeMol') w.write(m) opt = AllChem.MMFFOptimizeMolecule(m,maxIters=10000,ignoreInterfragInteractions=False,mmffVariant='MMFF94') m.SetProp('State','MMFFOptimizeMolecule') m.SetProp('Optimized',str(1-opt)) w.write(m) print(opt) except Exception as e: print ('Failed') m = mold m.SetProp('Optimized','Error') w.write(m) w.flush() w.close()
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss