RDKit | 操作与实践

RDKit|在化学反应中对原子进行保护

2020-05-22  本文已影响0人  最会设计的科研狗

文章目录

在化学反应中保护原子

本文是化学反应的进阶操作,关于使用rdkit进行化学反应的操作可以参考这篇文章。有时在使用rxn文件时,很难准确表达或全面考虑到每个细节,导致不需要的原子发生反应,并产生副产物。而rdkit也提供了保护原子的操作,避免不需要的原子参与到反应中。还是以形成酰胺键为例。

1.rxn文件创建反应

>>> import os
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem as Chem
>>> from rdkit import RDConfig
>>> rxn_file = os.path.join(RDConfig.RDDocsDir, 'Book\data\AmideBond.rxn')
>>> rxn = Chem.ReactionFromRxnFile(rxn_file)
>>> Chem.Draw.ReactionToImage(rxn, subImgSize=(300, 100))
1

在这个反应中,氮原子只要连有氢原子,就可以发生反应。当使用一个已经含有酰胺键的化合物作为反应物时,同样也可以发生反应。

>>> acid = Chem.MolFromSmiles('CC(=O)O')
>>> base = Chem.MolFromSmiles('CC(=O)NCCN')
>>> ps = rxn.RunReactants((acid,base))
>>> [Chem.SanitizeMol(x[0]) for x in ps]
>>> Chem.Draw.MolsToGridImage([x[0] for x in ps], molsPerRow=2, subImgSize=(300, 300))
2

2.保护目标原子

如果不想让酰胺氮原子发生反应,可以将它保护起来

>>> amidep = Chem.MolFromSmarts('[N;$(NC=[O,S])]')
>>> for match in base.GetSubstructMatches(amidep):
>>>     base.GetAtomWithIdx(match[0]).SetProp('_protected', '1')
>>> ps = rxn.RunReactants((acid,base))
>>> print(len(ps))
>>> Chem.MolToSmiles(ps[0][0])
1
'CC(=O)NCCNC(C)=O'

本文参考自rdkit官方文档
代码及源文件在这里

上一篇下一篇

猜你喜欢

热点阅读