3

Working with some molecules and reactions, it seems that chiral centers in smiles may not be found after applying reactions.

What I get after applying some reactions on a molecule is this smile: C[C](C)[C]1[CH+]/C=C(\\C)CC/C=C(\\C)CC1

which actually seems to a have a chiral center in carbon 3 [C]. If I use Chem.FindMolChiralCenters(n,force=True,includeUnassigned=True) I get an empty list which means that there is no chiral center.

The thing is that if I add H to that Carbon 3 so it becomes [CH] it is recognized as chiral center but with unassigned type (R or S). I tried adding Hs using Chem.AddHs(mol) and then try again Chem.FindMolChiralCenters() but didn't get any chiral center.

I was wondering if there is a way to recognize this chiral center even if they are not added H and to set the proper chiral tag following some kind of rules.

Afer applying two 1,2 hydride shift to my initial mol (Chem.MolFromSmiles('C/C1=C\\C[C@H]([C+](C)C)CC/C(C)=C/CC1')) I get the smiles mentioned before. So given that I had some initial chiral tag I want to know if there is a way to recover lost chirality after reactions.

smarts used for 1,2 hydride shift: [Ch:1]-[C+1:2]>>[C+1:1]-[Ch+0:2]

mol = Chem.MolFromSmiles('C/C1=C\\C[C@H]([C+](C)C)CC/C(C)=C/CC1')
rxn  = AllChem.ReactionFromSmarts('[Ch:1]-[C+1:2]>>[C+1:1]-[Ch+0:2]')
products = list()
for product in rxn.RunReactant(mol, 0):
    Chem.SanitizeMol(product[0])
    products.append(product[0])
print(Chem.MolToSmiles(products[0]))

After applying this reaction twice to the product created I eventually get this smile.

Output:
'C[C](C)[C]1[CH+]/C=C(\\C)CC/C=C(\\C)CC1'

which actually is where it is supposed to be a chiral center in carbon 3

Any idea or should I report it as a bug?

pppery
  • 3,731
  • 22
  • 33
  • 46
Fence
  • 323
  • 2
  • 12
  • I don't have the ability to try this right now, but have you tried specifying the chirality in the reaction smarts products? – Oliver Scott Apr 15 '19 at 08:40

1 Answers1

1

This is not a bug. I think you don't specify that you want a canonical smiles in the MolToSmiles function. So when I try:

mol = Chem.MolFromSmiles('C/C1=C\\C[C@H]([C+](C)C)CC/C(C)=C/CC1')
rxn  = AllChem.ReactionFromSmarts('[Ch:1]-[C+1:2]>>[C+1:1]-[Ch+0:2]')
products = list()
for product in rxn.RunReactant(mol, 0):
    Chem.SanitizeMol(product[0])
    products.append(product[0])
print(Chem.MolToSmiles(products[0]))
Chem.MolToSmiles(ps[0][0])

I obtained exactly the same result as you:

'C[C](C)[CH+]1CC=C(C)CCC=C(C)CC1'
'CC1=CC[CH](CCC(C)=CCC1)=C(C)C'

but when you use this one:

Chem.MolToSmiles(ps[0][0], True)

You can obtain this result:

'CC(C)=[C@H]1C/C=C(\\C)CC/C=C(\\C)CC1'
B.Gees
  • 1,125
  • 2
  • 11
  • 28