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

本文介绍了使用RDKit在Python中对分子进行子结构删除、替换和切割的操作,包括删除子结构、替换子结构、切掉侧链、切掉母核以及其他分子切分方法,如BRICS和Recap算法。详细阐述了相关函数的使用和示例。
部署运行你感兴趣的模型镜像

分子子结构操作

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

1

  • 删除子结构:DeleteSubstructs(mol, query, onlyFrags, useChirality)
    mol: 要操作的mol对象
    query: 要操作的子结构
    onlyFrags: 默认False,即只要匹配一致就删除。为True时,只有当匹配且为一个单独的片段才删除
    useChirality: 匹配手性,默认False
    原始的分子不会被改变,新的分子将作为返回值返回
>>> rm = Chem.DeleteSubstructs(m, patt)
>>> Draw.MolToImage(rm, (250,250))

2

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]

3

  • 苯丙氨酸变成异亮氨酸
    设置replacementConnectionPoint:默认0,要从哪个原子处成键,这里选择1或2
>>> repl = Chem.MolFromSmiles('CCCC')
>>> rms = AllChem.ReplaceSubstructs(m, patt, repl, replacementConnectionPoint=1)
>>> rms[0]

4

  • 有时也会产生一些奇奇怪怪的结构,比如生成个乙酸乙酯
    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]

5

  • 那就核对一下分子:Chem.SanitizeMol(rms[0])
    计算凯库勒式、检查化合价、芳香性、共轭及杂化
>>> 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)

5.其他分子切分方法

  • BRICS算法,基于可合成的键进行拆分分子
  • Recap算法,模仿实验中的正向合成来做逆向拆分
  • 上面两种方法可以参考这篇文章

此外,rdkit中还提供了非常灵活的函数,用来对指定的键进行拆解来获得分子片段,下面以断裂掉所有环中原子和环外原子间的键为例,来做一个简要的介绍。

  • 先定义一个包含环状结构的分子
  • 通过SMARTS定义要断裂键所涉及的原子
  • 查找匹配所有符合SMARTS的子结构
>>> m = Chem.MolFromSmiles('CC1CC(O)C1CCC1CC1')
>>> patt = Chem.MolFromSmarts('[!R][R]')
>>> bis = m.GetSubstructMatches(patt)
>>> print(bis)
((0, 1), (4, 3), (6, 5), (7, 8))
>>> m

6

  • 遍历匹配上的原子对
  • 通过匹配得到的原子索引,获取相应的键:GetBondBetweenAtoms()
  • 获得键的索引:GetIdx()
>>> bs = [m.GetBondBetweenAtoms(x, y).GetIdx() for x, y in bis]
>>> bs
[0, 3, 5, 7]
  • 通过断裂键来获取片段:FragmentOnBonds(mol, bondIndices, addDummies, bondTypes , …)
    mol:要拆解的分子
    bondIndices:键的索引
    addDummies:默认True,即添加一个虚原子来标明断裂的位置
    bondTypes:片段和虚原子之间用什么键连接,默认是单键
>>> nm = Chem.FragmentOnBonds(m, bs, addDummies=False)
>>> nm

7

  • 从一个混合物中,获取所有片段:Chem.GetMolFrags()
>>> mol_list = Chem.GetMolFrags(nm, asMols=True)
>>> Draw.MolsToGridImage(mol_list, molsPerRow=5, subImgSize=(200,100))

8

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

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

RDKit是一种常用的分子仿真、分析和可视化工具,它可以对化学分子进行多种操作和计算。其中包括基于片段的分子生成,这也是RDKit在药物发现和化学合成中的一个重要应用。 基于片段的分子生成是指根据已知的分子结构中所包含的骨架a和骨架b,生成之相似但不完全相同的化合物。这种方法可以用于研究药物分子结构的多样性、发现药物活性的结构相关性,以及优化化合物的代谢性质、药效学性质等。 具体来说,基于片段的分子生成一般分为两个步骤。首先,需要对已知的骨架a和骨架b进行分段,得到不同的化学片段。然后,根据这些片段的性质和结构,结合组成分子的其他原子和键,利用相应的算法和软件程序生成相似的化合物。这些化合物可以通过计算化学性质、分析构效关系等方法进行进一步的研究和优化。 RDKit提供了一系列用于基于片段的分子生成的工具和函数,如MolFragmenter,MolStandardize,MolInterchange等。这些工具可以高效地对分子进行分段、生成相似分子、处理化学反应等操作,加速药物发现和化学研究的过程。同时,RDKit还支持多种化学文件格式、API接口、可视化效果等,方便用户使用和操作。 总之,基于片段的分子生成是RDKit在药物发现和化学合成领域中的重要应用之一。它为研究药物结构、优化化合物性质、设计新的药物分子等方面提供了有效的工具和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值