Найти хиральные центры rdkit - PullRequest
0 голосов
/ 12 апреля 2019

Работа с некоторыми молекулами и реакциями.Я просто сталкиваюсь с тем, что хиральные центры в улыбках могут не обнаруживаться после применения реакций.

Что я получаю после применения некоторых реакций на молекулу, так это улыбка: C[C](C)[C]1[CH+]/C=C(\\C)CC/C=C(\\C)CC1

, которая на самом деле кажетсяимеют хиральный центр в углероде 3 [C].Если я использую Chem.FindMolChiralCenters(n,force=True,includeUnassigned=True), я получаю пустой список, который означает, что нет хирального центра.

Дело в том, что если я добавлю H к этому углероду 3, он станет [CH], он будет признан хиральным центромно с неназначенным типом (R или S).Я попытался добавить H, используя Chem.AddHs(mol), а затем повторить попытку Chem.FindMolChiralCenters(), но не получил никакого хирального центра.

Мне было интересно, есть ли способ распознать этот хиральный центр, даже если они не добавлены Hи установить правильную киральную метку, следуя некоторым правилам.

После применения двух 1,2-гидридных сдвигов к моему начальному молю (Chem.MolFromSmiles('C/C1=C\\C[C@H]([C+](C)C)CC/C(C)=C/CC1')) я получаю улыбки, упомянутые ранее. Поэтому, учитывая, что у меня был некоторый начальный хиралtag Я хочу знать, есть ли способ восстановить утраченную хиральность после реакций.

Смартов, используемых для сдвига 1,2-гидридов: [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]))

После применения этой реакции дважды ксозданный продукт, я в конечном итоге получаю эту улыбку.

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

, где фактически находится хиральный центр в углероде 3

Есть идеи или я должен сообщить об этом как об ошибке?

1 Ответ

0 голосов
/ 19 июня 2019

Это не ошибка.Я думаю, что вы не указываете, что хотите канонические улыбки в функции MolToSmiles.Поэтому, когда я пытаюсь:

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])

, я получаю точно такой же результат, как и вы:

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

, но когда вы используете этот:

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

Вы можетеполучить этот результат:

'CC(C)=[C@H]1C/C=C(\\C)CC/C=C(\\C)CC1'
...