RDKit|分子子结构的删除、替换与切割

  • 分子子结构操作
    • 1.删除子结构
    • 2.替换子结构
    • 3.切掉侧链
    • 4.切掉母核

分子子结构操作

RDKit包含了一些修改分子的函数,这些函数可以方便地对分子进行子结构删除/替换等操作。更复杂的操作可以看Chemical Reactions中相关的功能。

1.删除子结构

  • 先初始化一下
    定义一个苯丙氨酸分子,要把苯甲基删掉,变成甘氨酸
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem, Draw
>>> m = Chem.MolFromSmiles('OC(=O)C(N)Cc1ccccc1')
>>> m = Chem.MolFromSmiles('c1ccccc1CC(N)C(=O)O')
>>> patt = Chem.MolFromSmarts('Cc1ccccc1')
  • 查看patt是否在m中:GetSubstructMatches()
    返回值是原分子中与子结构匹配的原子索引
>>> matches = m.GetSubstructMatches(patt)
>>> matches
((6, 5, 4, 3, 2, 1, 0),)
  • 查看分子及高亮显示子结构
>>> Draw.MolToImage(m, (250,250), highlightAtoms=matches[0])
苯丙氨酸
  • 删除子结构:DeleteSubstructs(mol, query, onlyFrags, useChirality)
    mol: 要操作的mol对象
    query: 要操作的子结构
    onlyFrags: 默认False,即只要匹配一致就删除。为True时,只有当匹配且为一个单独的片段才删除
    useChirality: 匹配手性,默认False
    原始的分子不会被改变,新的分子将作为返回值返回
>>> rm = Chem.DeleteSubstructs(m, patt)
>>> Draw.MolToImage(rm, (250,250))
甘氨酸

2.替换子结构

现在把苯甲基变成羟甲基,也就是丝氨酸

  • 设置要替换的结构
>>> repl = Chem.MolFromSmiles('CO')
  • 替换子结构:ReplaceSubstructs(mol, query, replacement, replaceAll, replacementConnectionPoint, useChirality)
    mol: 要操作的mol对象
    query: 要操作的子结构
    replacement:要替换上去的结构
    replaceAll: 默认False,即如果出现多个匹配的子结构,那就进行多次替换并产生不同的新分子。为True时,对所有匹配结构进行替换并产生一个分子
    replacementConnectionPoint:默认0,从哪里成键
    useChirality: 匹配手性,默认False
>>> rms = AllChem.ReplaceSubstructs(m, patt, repl)
>>> rms[0]
丝氨酸
  • 苯丙氨酸变成异亮氨酸
    设置replacementConnectionPoint:默认0,要从哪个原子处成键,这里选择1或2
>>> repl = Chem.MolFromSmiles('CCCC')
>>> rms = AllChem.ReplaceSubstructs(m, patt, repl, replacementConnectionPoint=1)
>>> rms[0]
异亮氨酸
  • 有时也会产生一些奇奇怪怪的结构,比如生成个乙酸乙酯
    patt中的"[$(OC=O)]"表示寻找羟基氧,而非羰基氧。对SMARTS不明白的可以看看另一篇文章:SMARTS规则速查表
>>> m = Chem.MolFromSmiles('CC(=O)O')
>>> patt = Chem.MolFromSmarts('[$(OC=O)]')
>>> repl = Chem.MolFromSmiles('OCC')
>>> rms = Chem.ReplaceSubstructs(m, patt, repl)
>>> rms[0]
error

计算凯库勒式、检查化合价、芳香性、共轭及杂化

>>> Chem.SanitizeMol(rms[0])

3.切掉侧链

保留氨基酸的母核:NH2-C-COOH

  • 切掉侧链,保留母核:ReplaceSidechains(mol, coreQuery , useChirality)
    mol: mol对象
    coreQuery: 母核结构
    useChirality: 匹配手性,默认False
>>> m = Chem.MolFromSmiles('c1ccccc1CC(N)C(=O)O')
>>> core = Chem.MolFromSmiles('NCC(=O)O')
>>> m1 = Chem.ReplaceSidechains(m, core)
>>> m1
  • 很简单的操作,就不放图了。

4.切掉母核

保留R基,去除母核

  • 切掉母核:ReplaceCore(mol, core , ...)
    mol: mol对象
    coreQuery: 母核结构
    保留侧链,去掉母核
>>> r = AllChem.ReplaceCore(m, core)
  • 获取侧链片段:GetMolFrags(mol, asMols, sanitizeFrags, ...)
    asMols:默认False,即返回原子索引。True时,将片段转成mol对象
    sanitizeFrags:默认True,即返回时会进行检查。
>>> side_mols = Chem.GetMolFrags(r, asMols=True)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容