美文网首页RDKit | 操作与实践
RDKit|在化学反应中对原子进行保护

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

作者: 最会设计的科研狗 | 来源:发表于2020-05-22 17:42 被阅读0次

    文章目录

    • 1.rxn文件创建反应
    • 2.保护目标原子

    在化学反应中保护原子

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

    1.rxn文件创建反应

    • 通过rxn文件创建一个反应模式:ReactionFromRxnFile()
    • 检查一下该反应:ReactionToImage()
    >>> 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和base
    • 按照模式进行反应:rxn.RunReactants()
    • 对反应物进行核对:SanitizeMol()
    >>> 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.保护目标原子

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

    • 将要保护的基团转成SMARTS,记录在amidep中
    • 在反应物中查找所有符合amidep的子结构
    • 遍历每个符合的子结构,设置属性,键为"_protected",值随意
    >>> 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官方文档
    代码及源文件在这里

    相关文章

      网友评论

        本文标题:RDKit|在化学反应中对原子进行保护

        本文链接:https://www.haomeiwen.com/subject/pwkcahtx.html