[Rdkit-discuss] Inversion of chirality using reaction SMARTS
Open-Source Cheminformatics and Machine Learning
Brought to you by:
glandrum
|
From: Thomas D. <tho...@in...> - 2018-06-08 17:11:56
|
Hi RDKiters,
I am trying to build reaction SMARTS that encode inversion of chirality.
However, I get different results (inversion of chirality done, vs. fail) depending of the order in which the atoms are given in the SMARTS reaction string. Below a toy example:
# 2 different ways to depict a same reaction (L-lactate to D-lactate)
rsmarts1 = '[#8:6]-[#6@:2](-[#1:8])(-[#6:3](-[#8-:5])=[#8:4])-[#6:1]>>[#8:6]-[#6@@:2](-[#1:8])(-[#6:3](-[#8-:5])=[#8:4])-[#6:1]'
rsmarts2 = '[#1:8]-[#6@@:2](-[#6:1])(-[#8:6])-[#6:3](-[#8-:5])=[#8:4]>>[#1:8]-[#6@:2](-[#6:1])(-[#8:6])-[#6:3](-[#8-:5])=[#8:4]'
rxn1 = AllChem.ReactionFromSmarts(rsmarts1)
rxn2 = AllChem.ReactionFromSmarts(rsmarts2)
rxn1.Initialize()
rxn2.Initialize()
# Reactions SMILES of the reactions are the same
assert AllChem.ReactionToSmiles(rxn1) == AllChem.ReactionToSmiles(rxn2)
# OK
# Let's apply the reaction on L- and D-lactate
llac = Chem.MolFromSmiles('C[C@H](O)C([O-])=O')
llac = Chem.AddHs(llac)
# rsmarts1 depiction: successful inversion of chirality
ps = rxn1.RunReactants((llac,))
print('rxn1', len(ps))
print('Sub ', Chem.MolToSmiles(llac))
print('Prod', Chem.MolToSmiles(ps[0][0]))
# Sub [H]O[C@]([H])(C(=O)[O-])C([H])([H])[H]
# Prod [H]O[C@@]([H])(C(=O)[O-])C([H])([H])[H]
# rsmarts2 depiction: inversion of chirality fail
ps = rxn2.RunReactants((llac,))
print('rxn2', len(ps))
print('Sub ', Chem.MolToSmiles(llac))
print('Prod', Chem.MolToSmiles(ps[0][0]))
# Sub [H]O[C@]([H])(C(=O)[O-])C([H])([H])[H]
# Prod [H]O[C@]([H])(C(=O)[O-])C([H])([H])[H]
Did I make a mistake somewhere, or is there something additional to do in order to make inversion of chirality working in all cases? I am using the last stable conda version of rdkit (2018.03.2.0).
Thank you by advance for any clue,
Best wishes,
Thomas
|