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