Just to include other thoughts on the topic... can this issue come from the Chem.AddHs(mol) step that is performed pre-embed for 2D->3D generation?

Since the conformers of a single starting 2D structure don't all see flipping of stereochemistry when a single structure has Hs added and is sent to be embeded, I am assuming AddHs is not the problem. Here are additional example stats on how varied the stereochemistry is lost:

481809_atom_4 has 90.00 % correct with 10 conformers
482080_atom_4 has 25.00 % correct with 4 conformers
475598_atom_2 has 0.00 % correct with 6 conformers
476397_atom_1 has 40.00 % correct with 10 conformers
482629_atom_0 has 20.00 % correct with 10 conformers
475620_atom_4 has 16.67 % correct with 6 conformers
476459_atom_3 has 83.33 % correct with 6 conformers
484276_atom_0 has 10.00 % correct with 10 conformers
483000_atom_1 has 8.33 % correct with 12 conformers
483696_atom_0 has 0.00 % correct with 14 conformers
483370_atom_1 has 11.11 % correct with 18 conformers

The 6-digit code is the MOL_ID. "correct" is considered a match between the results of calling GetChiralTag() on the same atom of the 2D and 3D versions of a molecule.

-Marshall

On Apr 13, 2009, at 7:12 PM, Marshall Levesque wrote:

Greg-

Looping over the atoms of 1000 molecules with mol.GetAtomWithIdx(i).GetChiralTag() gave me the statistic of ~58% stereocenters being preserved after the molecules were embedded (2D- >3D), creating multiple conformers (about 2 conformers per rotatable bond) and UFFOptimized. So my questions are:

A) Does RDKit's embedding process preserve stereochemistry?

B) If not, is the best way to do preserve the stereochemistry by looping over the atoms in each 3D conformation produced and checking/ comparing to the original 2D structure with GetChiralTag()?

Here's the code for whoever wants to try it out:

#### chiraltest.py   ####

suppl = Chem.SDMolSupplier(infilename)

for j,mol in enumerate(suppl):
 if mol is None:
   continue
 else:
   molname = mol.GetProp(' MOLECULE_ID ')
   for i in range(mol.GetNumAtoms()):
       val = mol.GetAtomWithIdx(i).GetChiralTag()
       if val != Chem.rdchem.ChiralType.CHI_UNSPECIFIED:
           print 'Atom: ',i, 'on ', molname, 'is ', val

##################

Thanks!

-Marshall



Reply via email to