如果有低级的化学错误请戳戳>v<

文章目录

  • 一、RECAP
    • 1.1 简介
    • 1.2 一些不太相关的话
    • 1.3 Introduction
    • 1.4 Method
      • 1.4.1 Concept of RECAP
      • 1.4.2 Cleavage Rules
      • 1.4.3 A Cleavage Example
    • 1.5 代码实现
  • 二、BRICS
    • 2.1 一些不相关的话
    • 2.2 文献
    • 2.3 代码实现
      • 2.3.1 拆解
      • 2.3.2 合成
  • 三、eMolFrag
    • 3.1一些不相关的话
    • 3.2 Introduction
    • 3.3 Methods
      • 3.3.1 Part I: Fragmentation
      • 3.3.2 Part II: Mitigation of Fragment Redundancy

一、RECAP

Recap可以模仿实验室中的正向合成过程来进行逆向操作,对分子进行一系列的转换与分解,最终得到一组合理的分子片段。

1.1 简介

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

1.2 一些不太相关的话

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


1.3 Introduction

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

1.4 Method

1.4.1 Concept of RECAP


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

1.4.2 Cleavage Rules

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

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

    这些键选择了常见的化学反应会产生的键,之所以要这么选择,是为了使这些碎片易于合成。(没道理啊?应该是说基于这些碎片易于合成更大单位的构建块还差不多)
    ↑上面这句的原文描述
    另外,用户也可以自定义可切割的键。

1.4.3 A Cleavage Example


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

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

1.5 代码实现

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
decomp = Chem.Recap.RecapDecompose(celecoxib)#碎片化
print(type(decomp))#碎片化后是一个特殊的数据类型


RecapHierarchyNode类型有children属性和parents属性,得到的都是一个字典。以children为例,得到的字典的键是【一个分子二分后所有可能的碎片】的字符串表示(是SMILES吗?好像不太像),值是其RecapHierarchyNode类型。

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

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


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

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

这一行在pycharm中运行显示不出来,但是可以在jupyternotebook中看到。这里应该有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类型还有以下一些方法:
hierarch.GetLeaves():输出一个字典,键是所有叶子节点,即最终产生的最简单的化合物)的字符串表示;值是它们的RecapHierarchyNode类型。

hierarch.GetAllChildren():输出一个字典,是所有的非根节点,其他与hierarch.GetLeaves()一致。

hierarch.getUltimateParents():返回一个只有一个元素的列表,这个就是根节点的RecapHierarchyNode类型。

二、BRICS

天惹这是一篇没有小标题的文献(ಥ_ಥ)

2.1 一些不相关的话

  1. 这篇文献对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产生了“碎片空间”的概念。这个碎片空间和碎片库(为什么是碎片库?不应该是碎片构成的building blocks即构建块库吗?)的区别是:它还包含了碎片融合的规则,即如何融合motifs以重组片段。(所以motifs和fragment还是不一样的?可能motif是一种种类的概念,而片段指的是具体的某个碎片?)

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

但是看起来和划分没有关系的话那就和我没有关系吧^^

  1. 现有的问题是:“类药”的碎片空间是啥样的,碎片类药性是否取决于【该碎片是否来自于药物分子】。因此,有必要衡量当前模型和方法表示化学空间的程度和准确性。

2.2 文献

BRICS做的事:

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

意义:
更好的碎片集、更高性能的碎片空间。

特点:

  1. 同时切所有可断的键,以避免产生冗余碎片。这与RECAP是一致的。但是在rdkit中RECAP是一层一层二分的?
    ↑原文描述

下图描述了一个BRICS划分的过程。它好像和RECAP没啥区别,但是又有区别:

  1. RECAP直接在划分后注上“同位素标签”即可断键的id。但BRICS划分后先注上“同位素标签”,再用link atoms取代这些同位素标签——但这些link atoms看起来正是可断键的id。(在eMolFrag中解释,所谓的link )
  2. 每个键断裂之后会产生两个断裂点,对RECAP来说两个断裂点打的同位素标签对应的可断键id是相同的;而BRICS是不同的。
    当然还有一些简单的事情,例如它也会丢弃/不划分很细枝末节的碎片。

下图是16种片段。只列出了断裂点的化学环境,由于R基的多样性,碎片也具有多样性。L1L6&L8L4出现了两次,它们的区分为:是否“appeared as cyclic or acyclic substituents or linkers”。


我认为这里的16个rules和RECAP的11个rules形式上不同,RECAP列出的是可断键,而BRICS列出的是碎片结构
BRICS同样实现了用户自定义功能。

2.3 代码实现

2.3.1 拆解

参考资料:RDKit|通过Recap和BRICS对分子拆解与合成

与recap不同,该算法是根据键是否能够合成来进行拆解

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

from rdkit.Chem import BRICS
m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')
BRICS.BRICSDecompose(m)


可以由一组分子生成片段

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))
print(sorted(allfrags)[:3])

2.3.2 合成

BRICS.BRICSBuild的输入是由mol组成的列表,输出是一个generator类型的生成器。generator类型有next方法,在返回一个mol类型的合成分子的同时,计数器+1。

fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
ms = BRICS.BRICSBuild(fragms)
print(type(ms))
prods = [next(ms) for x in range(4)]
Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))


三、eMolFrag

这是一个软件,可以把分子分成bricks和linkers两种类型的碎片,它们都属于构建块(building blocks)。

3.1一些不相关的话

文献中对BRICS进行了阐述:

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.

BRICS考虑了每种断裂键的化学环境和周围的子结构。言下之意是否是RECAP没有考虑这些?我觉得RECAP应该是属于考虑了化学环境但没有考虑周围子结构。

3.2 Introduction

在基于碎片的药物设计中,如果能够得到【带有碎片的连接信息】的构建块,效果会很好。
但是众多碎片化工具在提取构建块时,并不会储存碎片的连接信息,所以这篇文章提出eMolFrag,在提取构建块的同时储存了碎片的连接信息。

3.3 Methods

eMolFrag将分子划分成碎片集经过两个步骤:

3.3.1 Part I: Fragmentation

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

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

下图为某linker储存的信息,额外信息只有:

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

3.3.2 Part II: Mitigation of Fragment Redundancy

如果两种碎片满足xxxx(略),则认为它们是等价的,会被合并到同一类碎片中。这就是为什么BRICKS碎片中会有fragments similar信息。注意:虽然只有BRICKS碎片注释了这个信息,但BRICKS和linkers都从Part II中得到了size的缩减。

三种碎片化方法:RECAP, BRICS与eMolFrag相关推荐

  1. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV

    @Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...

  2. Python实现二叉树的三种深度遍历方法!

    python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...

  3. php调用mysql库_PHP调用三种数据库的方法(1)

    PHP调用三种数据库的方法(1) 更新时间:2006年10月09日 00:00:00   作者: MySQL是一个小巧灵珑的数据库服务器软件,对于中.小型应用系统是非常理想的.除了支持标准的ANSI ...

  4. 实现两数 交换的三种不同编程方法。

    第一种 即常规方法 借助第三变量 int a = 5,b = 3,c; c = a; a = b; b = c; 第二种 不借助第三变量 int a=5,b=3,c; a = a+b;    //(缺 ...

  5. 常用的分隔符有哪三种_掌握这三种调漂方法,你想怎么钓就怎么钓,再也不用求人...

    调漂对于刚学钓鱼的钓友来说是一件非常头痛的事情,每次钓鱼大部分时间都浪费在调漂上,总是感觉调不好,不是灵了就是钝了!那么问题到底出在哪呢?今天就和大家分享三种针对悬坠钓的调漂方法,看懂弄明白了,再也不 ...

  6. Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  7. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  8. devexpress控件的2种汉化方法,官方想得很周到

    devexpress控件库默认安装后,使用的本地资源为英文.但其实它都有本地化资源包,比如按钮属性,控件属性描述,菜单项,确认和错误的信息等等,所有这些资源字符串可以很容易地被翻译成各种语言.对于要求 ...

  9. 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢

    极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 原创 ADI 亚德诺半导体 2022-04-19 11:48 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 Q: 是否可以利用 ...

  10. 分享三种高效的方法,快速将一个PDF文件分割成两个!

    如何将一个PDF分割成两个?PDF文件在学习和工作中都是常用的文件格式,但是有时候我们可能只需要其中的一部分内容,这时候就需要将PDF文件分割成两个或多个.本文将分享三种不同的方法,供大家参考. 一. ...

最新文章

  1. 清华南开出品最新视觉注意力机制Attention综述
  2. 机器学习“七宗罪”:影响可信度的七个常见错误
  3. office插入常见数学公式
  4. java reduce.mdn_reduce高级用法
  5. boost::describe模块实现overloaded的测试程序
  6. 使用 Cuttlefish 虚拟 Android 设备
  7. CPU:别再拿我当搬砖工!
  8. LeetCode004-寻找两个正序数组的中位数(Median of two sorted arrays)-Rust语言实现
  9. 使用Linux创建自己的视频流服务器
  10. 用两万篇论文告诉你:机器学习在过去五年中发生了什么
  11. Studio for WPF:使用 C1TileView 创建图片库
  12. 原生js实现分页效果(带实例)
  13. 高斯求积分公式matlab,matlab高斯积分公式
  14. 彻底删除手机系统软件
  15. 龙讯3号 龙芯电脑即将店面销售
  16. win10换开始菜单工具ClassicShell
  17. IOS应用程序崩溃日志分析
  18. MySQL 5.7.17.0 下载安装笔记
  19. 【2015NOIP普及组】T4:推销员 试题解析
  20. 倒计时!「一起学」大会线下分享与社群内部直播!

热门文章

  1. 图片和视频混合广告栏轮播实现
  2. android之DEX文件格式
  3. csgo如何旋转跳?如何连跳
  4. Window7激活 电话激活小记;
  5. 敏捷顾问的MBTI体验:8个认知能力胜过4个字母组合
  6. HLOJ486 种花小游戏
  7. 全国计算机二级重难点,计算机二级office重难点.doc
  8. activiti选择上一步下一步处理人
  9. python的常量_python中的常量
  10. 社交网络中影响力传播模型