当前位置: 首页 > news >正文

【药物设计】三种分子碎片化方法介绍:Recap、BRICS与eMolFrag

三种分子碎片化方法介绍:RECAP、BRICS与eMolFrag

  • 1. RECAP
    • 1.1 简介
    • 1.2 特点
    • 1.3 方法
      • 1.3.1 Concept of RECAP
      • 1.3.2 断裂规则(Cleavage Rules)
      • 1.3.3 断裂示例
    • 1.4 代码实现
  • 2. BRICS
    • 2.1 BRICS做的事:
    • 2.2 BRICS划分过程:
    • 2.3 代码实现
      • 2.3.1 BRICS拆解
      • 2.3.2 BRICS合成
  • 3. eMolFrag
    • 3.1 方法
      • 第一步:分子碎片化
      • 第二步:减少片段冗余
    • 3.2 总结
  • 补充
  • 参考资料

1. RECAP

Recap可以模仿实验室中的正向合成过程来进行逆向操作,对分子进行一系列的转换与分解,最终得到一组合理的分子片段。Recap可以对拆解过程进行追踪,并形成类似树的数据结构。原始分子记为根节点(root),被拆解的分子记为父节点(parent),拆解得到的分子记为子节点(children),某节点下的所有分支节点为子孙节点(all children),某节点上的所有父节点为祖先节点(ultimate parents),无法继续拆解分子记为叶子节点(leaves)。所有英文翻译对应recap中的属性或方法名。

1.1 简介

  • 组合化学:若用一个构建块的n个单元和另一个构建块的n个单元同时反应,就能产生n*n个化合物,效率非常高。
  • 组合化学的重点:找到高质量的构建块。
  • 解决方法:运用RECAP, 基于化学知识将分子划分成构建块,并存入库中。之后就可以直接从这个库中取构建块使用。

这篇论文中motif和fragment是类似的意思。building blocks是要构建的库中的元素,它包含motif/fragment
motifs
fragments
blocks

1.2 特点

RECAP的主要做法是:通过分割活性分子来获得活性构建块。我们知道有一些常见化学反应会形成的键,所以在分割分子的时候,我们就分割这些键。
RECAP的特点:在11个预定义的键上分割。这11个预定义的键保证了分出来的碎片是适合组合的,是适用于组合化学的。

1.3 方法

1.3.1 Concept of RECAP

Recap流程

  • 1:收集一系列对特定目标有活性的结构。
  • 2:使用RECAP进行碎片化——只保留最终碎片而不保留中间过程。
  • 3:对碎片进行分析。包括该碎片在原始活性结构中出现频率的分析和集群分析(将类似的片段组合到一个群中)
  • 4:碎片分析好后合并成为构建块,计入库中。

1.3.2 断裂规则(Cleavage Rules)

所谓的断裂规则指的就是:

  1. 预定义了11种bond,遇见这种bond就切一刀。
  2. 如果裂解完的碎片只包含小的官能团(氢、甲基、乙基、丙基和丁基),则这个碎片不裂解。目的:1.避免产生无用小片段。2.处于类药性考虑。
  3. 保留环结构

断裂规则
这些键选择了常见的化学反应会产生的键,之所以要这么选择,是为了使这些碎片易于合成。(基于这些碎片易于合成更大单位的构建块,另外,用户也可以自定义可切割的键。)

1.3.3 断裂示例

断裂规则示例
上图中一个分子有3条可断的键,形成4个碎片。碎片上有标记。文献中这个标记命名为“同位素标记”(Isotopic labels),但实际上它就是指:这条可断的键在11种可断键中的序号。作者认为,这个标记表示了裂解点(/碎片)所处的原子环境(/化学环境)。

化学环境的意义:

  1. 用于综合规划。在合成的时候可以依据这类信息选取部分碎片。
  2. 可以得到一个碎片有几个裂解点,这个信息也是很重要的。据此可以将碎片划分成terminal monomer(一个裂解点)和 core template(多个裂解点)。上图中(2)(5)属于terminal monomer,(3)(4)属于core template

1.4 代码实现

RDkit封装了RECAP的过程。可以用Chem.Recap.RecapDecompose()将分子碎片化,输入为mol类型,输出为RecapHierarchyNode类型。这个类型可以理解为:分子树

from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, Draw
from rdkit.Chem import Recap
import pubchempy as pcpcelecoxib = pcp.get_compounds('celecoxib', 'name')
celecoxib = celecoxib[0]
sm = celecoxib.canonical_smiles							#转换成smiles
celecoxib = Chem.MolFromSmiles(sm)						#转换成mol
hierarch = Chem.Recap.RecapDecompose(celecoxib)	#碎片化
print(type(hierarch))												#碎片化后是一个特殊的数据类型

可以从节点对象通过函数获取其叶子节点、子孙节点,得到的都是字典,键为节点的smiles,值为节点对象。

  • 叶子节点函数:hierarch.GetLeaves()
  • 子孙节点函数:hierarch.GetAllChildren()
  • 祖先节点函数,返回列表:getUltimateParents()

以children为例,得到的字典的键是【一个分子二分后所有可能的碎片】的字符串表示,值是其RecapHierarchyNode类型。

RecapHierarchyNode类型还有mol方法和smiles方法,它可以把RecapHierarchyNode类型转换成mol形式和smiles形式。下面的第一行代码把一个分子树分了一次,得到的first_gen为所有可能的碎片的列表(mol形式)。

first_gen = [node.mol for node in hierarch.children.values()]
print(first_gen)
node_type = [node for node in hierarch.children.values()]
print(node_type)

可以看到,first_gen枚举了所有二分后的可能性。

Draw.MolsToGridImage(first_gen, molsPerRow=4, legends=[Chem.MolToSmiles(m) for m in first_gen])

这一行在PyCharm中运行显示不出来,但是可以在jupyter notebook中看到。这里应该有3条可断边,所以它断成了2*2=4种。所谓的可断边是确定的,就是11种可能性
二分后的结果
下面这段代码递归生成一棵分子-碎片树,描述了一个分子是怎样被一步步断开的(的所有可能性):

def get_leaves(recap_decomp, n=1):for child in recap_decomp.children.values():print('\t'*n+child.smiles)if child.children: ##さらなるフラグメント化のチェックget_leaves(child, n=n+1)def get_recap_tree(mol):recap = Chem.Recap.RecapDecompose(mol)print(Chem.MolToSmiles(mol))get_leaves(recap)get_recap_tree(celecoxib)

除此之外,RecapHierarchyNode类型还有以下一些方法:

  1. hierarch.GetLeaves():输出一个字典,键是所有叶子节点(即最终产生的最简单的化合物)的字符串表示;值是它们的RecapHierarchyNode类型。
    hierarch.GetLeves()
  2. hierarch.GetAllChildren():输出一个字典,是所有的非根节点,其他与hierarch.GetLeaves()一致。
    hierarch.GetAllChildren()
  3. hierarch.getUltimateParents():返回一个只有一个元素的列表,这个就是根节点的RecapHierarchyNode类型。
    hierarch.getUltimateParents

2. BRICS

Rdkit中还有一种BRICS算法,同样可以用于拆解分子。与recap不同,该算法是根据键是否能够合成来进行拆解。该方法返回一个经过去重的列表,在原子上的序号对应一种特定的反应类型。

2.1 BRICS做的事:

  1. 给出了一套更好的碎片化的rules
  2. 给出一套重组模体(motif)的rules,以形成碎片空间。——正如前文所说,碎片空间除了碎片外,还需要重组模体/碎片的规则。
  3. 获得了一个高质量、高性能、公开可用的碎片集。

意义:更好的碎片集、更高性能的碎片空间。
特点:同时切所有可断的键,以避免产生冗余碎片。这与RECAP是一致的。

2.2 BRICS划分过程:

  1. RECAP直接在划分后注上“同位素标签”即可断键的id。但BRICS划分后先注上“同位素标签”,再用link atoms取代这些同位素标签——但这些link atoms看起来正是可断键的id。(在eMolFrag中解释,所谓的link )
  2. 每个键断裂之后会产生两个断裂点,对RECAP来说两个断裂点打的同位素标签对应的可断键id是相同的;而BRICS是不同的。

当然还有一些简单的事情,例如它也会丢弃/不划分很细枝末节的碎片。
BRICS划分
下图是16种片段。只列出了断裂点的化学环境,由于R基的多样性,碎片也具有多样性。L1L6&L8L4出现了两次,它们的区分为:是否“appeared as cyclic or acyclic substituents or linkers”。
16种片段
这里的16个rules和RECAP的11个rules形式上不同,RECAP列出的是可断键,而BRICS列出的是碎片结构。BRICS同样实现了用户自定义功能。

2.3 代码实现

2.3.1 BRICS拆解

由BRICS分解后的mol不再是一个用于表示分子树的新类型了,而是一个“一步到位的划分好的无冗余的碎片字符串”组成的列表

# BRICS算法拆解分子:BRICS.BRICSDecompose(m)
>>> from rdkit.Chem import BRICS
>>> m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')
>>> BRICS.BRICSDecompose(m)
{'[1*]C(=O)CC', '[16*]c1ccccc1', '[3*]O[3*]', '[4*]CC[4*]'}# 对一组分子生成片段
>>> import os
>>> from rdkit.Chem import RDConfig
>>> cdk_file = os.path.join(RDConfig.RDDocsDir, 'Book\data\cdk2.sdf')
>>> cdk2mols = Chem.SDMolSupplier(cdk_file)
>>> allfrags = set()
>>> for m in cdk2mols:
>>>     pieces = BRICS.BRICSDecompose(m)
>>>     allfrags.update(pieces)
>>> print(len(allfrags))
90
>>> print(sorted(allfrags)[:3])
['NS(=O)(=O)c1ccc(N/N=C2\\C(=O)Nc3ccc(Br)cc32)cc1', '[1*]C(=O)C(C)C', '[1*]C(=O)NN(C)C']

2.3.2 BRICS合成

BRICS模块除了支持拆解分子,也可以对一组片段进行合成:BRICS.BRICSBuild()
返回一个生成器,可以通过next()来获取元素
生成的分子也是未经过核对的,可以对分子重新计算一下隐式化合价、环相关等属性,并做更新:UpdatePropertyCache()

>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))

BRICSBuild()
BRICSBuild()
可以通过设置随机种子或设置scrambleReagents参数来保证可重复性:

# 在BRICSBuild执行前设置随机种子
>>> import random
>>> random.seed(100)
>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))# 设置scrambleReagents参数
>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms, scrambleReagents=False)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))

3. eMolFrag

这是一个软件,可以把分子分成brickslinkers两种类型的碎片,它们都属于构建块(building blocks)。在基于碎片的药物设计中,如果能够得到"带有碎片的连接信息"的构建块,效果会很好。但是众多碎片化工具在提取构建块时,并不会储存碎片的连接信息,所以这篇文章提出eMolFrag,在提取构建块的同时储存了碎片的连接信息。

3.1 方法

eMolFrag 采用基于图的表示法,其中分子被视作由节点组成的集合,这些节点代表原子,并通过边连接,边对应于化学键。片段则是分子中的一个子结构,可能包含该分子的所有原子和部分化学键,或仅部分原子与化学键。根据其功能,片段可分为“bricks”和“linkers”两类。给定一组分子后,如图1所示,eMolFrag将分子划分成碎片集经过两个步骤:第一步称为“Part I”,负责生成初始片段集;第二步则名为“Part II”,旨在确保最终得到的片段集完全无重复。
eMolFrag
图1. eMolFrag 流程图。第一部分:利用 BRICS 算法对输入分子进行裂解,生成一套完整的构建模块;第二部分:通过 kcombu 程序进行两两化学比对,去除碎片冗余。最终,系统会报告去除了冗余后的非重复性bricks与linkers集合,并附带整合的连接信息,以及已被移除的相似片段列表

第一步:分子碎片化

在eMolFrag中,首先利用RDKit实现的BRICS算法,将一组分子分解为各自的组成片段。根据BRICS模型定义的16种化学环境,化学化合物被拆解成更大的基团,即“bricks”,这些bricks通过linkers相互连接;碎片化过程的伪代码详见支持信息中的算法S1。其中,一个linkers片段是指至少包含四个非氢原子的分子结构单元。随后,从分子中移除linkers,剩余的片段则被归类为linkers(具体参见支持信息中的算法S2)。断裂的化学键会被虚拟原子取代,这些虚拟原子仅作为被移除特定化学键上原子的占位符。为了便于提供经验性的连接模式,每块bricks都会存储与其相关联的化学键类型等完整信息。而linkers则携带不同的辅助连接信息——即这些片段仅标注了各位置上可能的最大键数。支持信息中还分别提供了bricks和linkers的示例(示例S1和S2)。我们发现,这种方法能够高效地构建出一系列新分子,其化学性质与母体化合物高度相似。

解读:这一步使用BRICS算法将分子划分成碎片。其中含有至少4个非氢原子的碎片被归类为bricks,移除所有bricks后剩下的是linkers.
bricks储存完整的信息。下图为某bricks储存的信息。额外信息包括:
Fragmentation

  1. ATOMTYPES:碎片中每个原子的类型
  2. BRANCH @atom-number eligible-atmtype-to-connect:所有的断裂键。每个断裂键是一个二维数组,第一维是碎片中的连着断裂键的原子的id,第二维是不在碎片中的、断裂键应连接的原子的类型。例如图中的6 C.3,指的是该碎片的第六个原子连着断裂键,断裂键的另一侧应该是一个类型为C.3的原子。
  3. fragments similar:被删除的类似片段。

下图为某linker储存的信息,额外信息只有:
linker
MAX-NUMBER-Of-CONTACTS ATOMTYPES:每个位置所能连接的最大键数和键另一端的原子类型,每个位置表示为一个二维数组。例如这个linker这栏信息的第二行为1 C.3, 表示这个linker的第二个位置最多可以连1个键,键的另一边连接的原子类型应为C.3。

第二步:减少片段冗余

由于有效碎片化程序的目标之一是将生成的碎片用于合成过程,因此最终碎片集合的基数至关重要。为此,eMolFrag尝试通过去除冗余来最小化bricks和linkers集合的大小,具体方法是在支持信息中提出的基于划分与筛分的去除方案(算法S3)。如果两个碎片的拓扑约束下最大共同子结构经由kcombu程序计算出的Tanimoto系数(TC)等于1.0,则认为这两个碎片等价。随后,利用kcombu提供的等价原子信息及其连接关系,将完全相同的碎片合并为单一、唯一的结构单元

3.2 总结

eMolFrag 是一种快速且强大的工具,能够从小分子数据集中提取分子片段,这些片段被分类为“bricks”和“linkers”。随后,这些片段可用于构建目标导向的化合物库,以进行虚拟筛选。eMolFrag 的独特之处在于,它会存储所提取构建块之间的连接信息,从而帮助生成一系列化学上可行的新化合物。尽管 eMolFrag 经过优化,可与近期开发的分子合成算法 eSynth 协同工作,但它同样能与其他基于化学片段的化学生物信息学工具包无缝集成。目前,eMolFrag 已作为独立软件及Web服务器免费提供,用户可通过以下网址访问:www.brylinski.org/emolfraghttps://github.com/liutairan/eMolFrag


补充

一些文献对Recap的描述

In this context, the “fragment space” concept was introduced. In contrast to a fragment library, such a space consists not only of a set of fragments, but also of a set of rules that specifies how to recombine fragments by fusing the respective chemical motifs.

作者认为RECAP产生了“碎片空间”的概念。这个碎片空间和碎片库的区别是:它还包含了碎片融合的规则,即如何融合motifs以重组片段。

motif是什么?

motif是在许多蛋白质分子中,由几个具有二级结构的肽段在空间上相互接近、相互作用,所形成的折bai叠模样称为超二级结构,又称为模体。

BRICS考虑了每种断裂键的化学环境和周围的子结构。RECAP考虑了化学环境但没有考虑周围子结构

BRICS expands the bond type criteria used by RECAP from 11 to 16 taking into account the chemical environment of each bond type and the surrounding substructures.

参考资料

  1. 通过Recap和BRICS对分子拆解与合成
  2. A toolkit for fragmenting and analyzing molecular structures
  3. 分解以便积累:使用eMolFrag分解小分子,用于基于片段的药物设计
  4. 三种碎片化方法:RECAP, BRICS与eMolFrag
  5. Liu, Tairan, Misagh Naderi, Chris Alvin, Supratik Mukhopadhyay, and Michal Brylinski. “Break Down in Order To Build Up: Decomposing Small Molecules for Fragment-Based Drug Design with e MolFrag.” Journal of Chemical Information and Modeling 57, no. 4 (2017): 627-631.
http://www.dtcms.com/a/431386.html

相关文章:

  • 中断控制器介绍-硬件篇(arm)
  • 静态文件,动态文件,静态网站,动态网站
  • 如何做自动网站网站开发使用的工具
  • 用.net做购物网站西安公积金 网站建设
  • S7-200 SMART PROFINET 通信入门:硬件组态与原理详解
  • 已知三极管的类型(NPN/PNP)和基极引脚,如何区分集电极(c)和发射极(e)
  • 沈阳做网站 熊掌号西安百度竞价代运营
  • FFmpeg和ZLMediaKit 实现本地视频推流
  • 学校网站模板图片马来西亚做网站
  • 深圳展览设计网站建设门户是什么意思
  • k8s-Service服务
  • Arthas JVM 性能排查
  • 从静态图表到交互叙事:数据可视化的新范式与实现
  • QT肝8天07--连接数据库
  • 三合一网站建设什么意思做生存曲线的网站
  • 如何查询网站接入商校园网站建设系统设计
  • 什么是 Apache Ignite?
  • NI-9234 采集卡拆解
  • 大连建站企业wordpress打造官网
  • 深度学习基本函数
  • 题解:P11035 【MX-X3-T2】「RiOI-4」消えた夏の夢
  • 网站开发网页gif设计公司多后缀域名查询网站
  • pink老师html5+css3day01
  • MOS管简单入门笔记(主讲NMOS,PMOS不常用)
  • 温州网站建设设计公司级做宣传图的网站
  • 使用 CSS 绘制中国国旗并添加艺术字“中国万岁!”
  • 俄语企业网站制作东莞建设银行网点查询
  • 计算机网络-分组交换网中的时延、丢包和吞吐量
  • Jakarta EE 实验 — Web 聊天室(JSP版)
  • P1471 方差