I'm trying to figure out which atoms lose chirality after breaking bonds using 
FragmentOnBonds().

Here's an example where a chiral carbon after fragmentation gets two "*" atoms, 
which makes the carbon achiral:

>>> from rdkit import Chem
>>> mol = Chem.MolFromSmiles("F[C@](Cl)(Br)O")
>>> fragmented_mol = Chem.FragmentOnBonds(mol, [0, 1], dummyLabels=((0, 0), (0, 
>>> 0)))
>>> Chem.MolToSmiles(fragmented_mol, isomericSmiles=True)
'[*]C([*])(O)Br.[*]Cl.[*]F'

I thought I could use CanonicalRankAtoms() to look at the local symmetry. If a 
previously chiral atom after fragmentation contains two neighbors with the same 
canonical rank, then that atom is no longer chiral.


>>> fragmented_mol.UpdatePropertyCache(strict=False)
>>> list(Chem.CanonicalRankAtoms(fragmented_mol, breakTies=False))
[5, 8, 6, 7, 4, 2, 0, 1, 3]

As you can see, all of the atoms are considered to be different. I did not 
expect this. I expected two of the atoms (the two new dummy atoms attached to 
the carbon) would have the same canonical rank.

On the other hand, if I reparse the achiral SMILES:

>>> new_mol = Chem.MolFromSmiles('[*]C([*])(O)Br.[*]Cl.[*]F')
>>> list(Chem.CanonicalRankAtoms(new_mol, breakTies=False))
[2, 8, 2, 4, 7, 1, 6, 0, 5]

The two occurrences of "2" show that the first and third are considered to be 
identical. This is what I expected earlier.

The problem is the carbon in fragmented_mol still has the 'clockwise' chiral 
tag:

>>> list(Chem.CanonicalRankAtoms(fragmented_mol, breakTies=False))
[5, 8, 6, 7, 4, 2, 0, 1, 3]
>>> fragmented_mol.GetAtomWithIdx(1).GetChiralTag()
rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW

If I manually remove it:

>>> fragmented_mol.GetAtomWithIdx(1).SetChiralTag(Chem.ChiralType.CHI_UNSPECIFIED)
>>> list(Chem.CanonicalRankAtoms(fragmented_mol, breakTies=False))
[5, 8, 6, 7, 4, 2, 0, 1, 2]

I find that I have two equivalent atoms, which is why I expected.

How do I clear the useless chiral flags without removing the ones which still 
make sense?

I tried calling ClearProps() and calling Chem.AssignStereochemistry() with 
force=True and flagPossibleStereoCenters=True, but they did nothing.

Cheers,

                                Andrew
                                [email protected]



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to