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

分子骨架跃迁工具-DiffHopp 评测

一、文章背景介绍

DiffHopp模型发表在ICML 2023 Workshop on Computational Biology(简称:2023 ICML-WCB)上的文章。第一作者是剑桥计算机系的Jos Torge。

DiffHopp是一个专门针对骨架跃迁任务而训练的E3等变条件扩散模型。此外,DiffHopp使用了更具有几何表达力的图神经网络GVP模型。DiffHopp模型针对给定蛋白质-配体复合物,使用等变扩散模型从以官能团和蛋白质袋为条件的骨架分布中对骨架进行采样。 所得骨架与官能团合并以形成骨架跃迁配体。

(有趣的是,我在生成分子的代码中,并没有看到输入官能团的参数。官能团不知道是怎么识别的?估计在数据处理的代码中,需要仔细看看)

关于骨架跃迁任务,作者认为是:保留了原始支架的基本分子特征,同时引入新的化学元素或结构特征以增强效力、选择性或生物利用度。分子结构中间区域都会发生改变,但是做两侧的基团不发生变化或者少量变化。换句话说,骨架跃迁需要通常需要重新设计大部分分子。如下图所示。

这一点与我们之前介绍的其他模型明显不同,Difflinker,Dlinker,Delinker, DEVELOP都是仅修改指定的分子中间一小段。而DiffHopp是不能指定特定的分子区域,同时分子修改区域很大,两侧的功能基团的位置也会发生变化。但这一点其实是不利的,因为在做骨架跃迁项目时,我们希望生成的分子具有晶体分子一样的性质,里面就包括,类似的结合模式和形状。当功能基团的位置发生变化了,很可能原先的相互作用模式被改变了,生成的分子也就没有被相信的理由了。没办法,项目就是这样子,可以相信一个可能对的东西,但是绝对不会信一个AI的观察,毕竟现在AI的观察还是不完善的。

作者以6bqd作为例子,生成了10个分子,然后进行VINA打分。最优打分的分子的docking score为-10.4明显小于参考分子的-9.4,如下图所示。功能基团为红色标记区域。

作者对测试集体系都做了DiffHopp模型的骨架跃迁设计,并使用vina评估打分,结果如下表。DiffHopp模型的结果要优于GVP和ENGG等模型使用inpainting模式的结果,特别是在分子成药性QED和结合力 vina score上。同时也验证了使用GVP模型的扩散模型 (DiffHopp)比使用ENGG模型的扩散模型(DiffHopp-EGNN)生成的分子更具有优势(DiffHopp vs. DiffHopp-EGNN)

但是根据作者的结果,生成分子的QED、SA分数,和vina score打分上仅比测试集的数据分布好一些,说明生成的骨架跃迁分子要优于参考分子,模型在某些体系上捕捉到了额外的蛋白分子相互作用。但结果并不显著。

二、代码复制与环境安装

复制项目代码

git clone https://github.com/jostorge/diffusion-hopping.git

创建conda环境和安装相应的包

#安装环境
conda env create -f environment.yml
#激活环境
conda activate diffusion_hopping

注意,可能由于cuda版本以及系统的原因,导致安装的pytorch可能是cpu版本需要重新安装pytorch。

安装reduce

reduce是用于蛋白质中H原子处理的包,可以加氢也可以删除氢,同时也可以对氨基酸做一些处理,例如HIS。reduce的安装可以参考:GitHub - rlabduke/reduce: Reduce - tool for adding and correcting hydrogens in PDB files.

也可以安装AMBERTools,使用AMBERTools中的reduce替代, 然后将reduce软连接出来。

AMBERTools的安装方法: 

conda install -c conda-forge ambertools=23

软连接方法:在~/.bashrc文件中添加如下行

alias reduce='~/anaconda3/envs/AmberTools23/bin/reduce'

安装Qvina,选装。(仅在分子评估部分使用)

这里略过

安装mgltools

conda install mgltools -c bioconda

三、案例测试(1)

作者在代码中自带了一个体系,1a0q,路径为:

./tests_data/complexes/1a0q

口袋和分子结构见下图:

使用如下命令生成100个新骨架跃迁分子:

python generate_scaffolds.py \
--input_molecule ./tests_data/complexes/1a0q/ligand.sdf \
--input_protein ./tests_data/complexes/1a0q/protein.pdb \
--num_samples 100 \
--output test_data_results

生成的分子保存在自动创建的 ./test_data_results文件夹内。其中,只产生了100个sdf文件,对应100个分子。生成过程不存在不合格的分子。

先简单查看几个生成的分子,如下图。生成的分子与参考分子并没有明显的变化,只有在口袋内侧的苯环发生了角度旋转。这一结果来说,DiffHopp模型对于这个体系的骨架跃迁就失败了。很有可能是代码在识别scaffold区域时,只识别到了苯环,而在生成scaffold时也只生成了苯环。

另外,所有生成的分子均为23个重原子数,与参考分子完全相同。侧面也说明,DiffHopp生成的分子和SBDD等分子生成模型,或者Difflinker等骨架跃迁模型的inpainting模式类似,并不改变生成分子的原子数量。模型时调整原子的位置及其元素种类,而生成新的分子。

生成分子的视频如下:

DiffHopp_1a0q

四、案例测试(2)

有请我们骨架跃迁模型的老演员,3FI3。

分子的二维结构:

将3FI3体系的口袋和分子分别保存为pocket.pdb和ligand.sdf,然后上传至./tests_data/complexes/3FI3目录中。然后执行如下命令生成分子:

python generate_scaffolds.py \
--input_molecule ./tests_data/complexes/3FI3/ligand.sdf \
--input_protein ./tests_data/complexes/3FI3/pocket.pdb \
--num_samples 100 \
--output test_data_results-2

运行结束后,生成的分子保存在./test_data_results-2文件夹内。一共生成了98个分子,有2个分子在生成过程中失败。

先简单查看一下生成的分子吗,随机挑了6个,如下图:

从上图中,DiffHopp模型在骨架跃迁的时候,生了大量的新颖结构的分子,分子也能比较好的放置在口袋中,没有与口袋发生严重的碰撞。值得注意的是,分子两端的三氟苯和苯环片段的结构并没有发生变化,同时,整个分子的所有片段都有一定程度的位移。显然,这些生成的分子是需要进行进一步的筛选和处理的。

以下是生成分子的视频。

DiffHopp_3FI3

五、总结

DiffHopp是一种专门针对骨架跃迁的训练出来的AI工具。整体看来效果还行。偶尔能生成比参考分子结合力更好的分子。

与之前介绍的Difflinker,Delinker, DEVELOP等不同,DiffHopp骨架跃迁部分不能指定,且范围更大,且两端的功能基团的位置也会发生变化,更接近分子生成方法中的inpainting技术。

此外,由于作者提供的checkpoint并非基于口袋的全原子模型训练的,因此,模型性能比较差。最好能自己训练一个口袋全原子的版本。

注:作者提供的代码非常全面,从数据处理到训练模型,到生成分子评估,应有尽有,值得好好学习,加以改进。毕竟,那么全的代码,还可以顺利安装不需要修改代码的AIDD项目,在github上真不多见。

相关文章:

分子骨架跃迁工具-DiffHopp 评测

一、文章背景介绍 DiffHopp模型发表在ICML 2023 Workshop on Computational Biology(简称:2023 ICML-WCB)上的文章。第一作者是剑桥计算机系的Jos Torge。 DiffHopp是一个专门针对骨架跃迁任务而训练的E3等变条件扩散模型。此外,…...

MySQL双主双从数据库集群搭建

1 引言 在之前的文章中提到过相关搭建方法,具体请参考《MySQL主从数据库搭建》这篇文章,本文主要讲述双主双从,双主多从集群的搭建方式。 这里要问一个问题,为什么MySQL要搭建数据库集群呢?我想应该有以下几点原因&…...

vue实现动态路由菜单!!!

目录 总结一、步骤1.编写静态路由编写router.jsmain.js注册 2.编写permisstions.js权限文件编写permisstions.jsaxios封装的APIstore.js状态库system.js Axios-APIrequest.js axios请求实例封装 3.编写菜单树组件MenuTree.vue 4.主页中使用菜单树组件 总结 递归处理后端响应的…...

企业如何选择安全又快速的大文件传输平台

在现代信息化社会,数据已经成为各个行业的重要资源,而数据的传输和交换则是数据价值的体现。在很多场合,企业需要传输或接收大文件,例如设计图纸、视频素材、软件开发包、数据库备份等。这些文件的大小通常在几百兆字节到几十个字…...

springboot 自定义starter逐级抽取

自定义starter 背景:各个组件需要引入starter 还有自己的配置风格 –基本配置原理 (1)自定义配置文件 导入配置可以在配置文件中自动识别,提示 导入依赖后可以发现提示 (2)配置文件实现 –让配置文件对其他模块生…...

GAN:ImprovedGAN-训练GAN的改进策略

论文:https://arxiv.org/abs/1606.03498 代码:https://github.com/openai/improved_gan 发表:NIPS 2016 一、文章创新 1:Feature matching:特征匹配通过为生成器指定新目标来解决GANs的不稳定性,从而防止…...

docker限制容器内存的方法

在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪。而对 docker 进行限制后,可以将瘫痪范围控制在 docker 内。 因此&#…...

阿里达摩院裁撤量子实验室

我是卢松松,点点上面的头像,欢迎关注我哦! 马云的达摩院也不搞量子计算了,因为缺钱,整体裁掉了达摩院量子实验室,把所有的设备都赠送给了浙江大学。 达摩院量子实验室:总共30个研究员&#xf…...

mysql数据库基础知识,Mysql的索引和主键区别,数据库的事务的基本特性

文章目录 数据库基础知识Mysql的索引和主键的区别数据库的事务的基本特性 数据库基础知识 为什么要使用数据库 数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 数据保存在文件 优点: 数据永久保存 缺点:1&#xf…...

解决Vscode使用git提交卡住的问题

使用Vscode的git提交代码经常会很慢/卡住。 先点击左下角,进入设置 找到git的配置(建议直接搜索),把use Editor As commit input的勾选去掉即可解决。...

Linux C语言 32-网络编程之UDP例程

Linux C语言 32-网络编程之UDP例程 本节关键字:C语言 网络编程 UDP协议 套接字操作 服务端 客户端 相关C库函数:setsockopt, socket, bind, recvfrom, sendto, close 相关接口介绍 Linux C语言 30-套接字操作 例程执行任务说明 本例程中服务端的任务…...

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…...

Kafka KRaft 版本集群部署详细教程(附配置文件详细解释)

版本说明 Ubuntu 18.04.6Kafka 3.6.0JDK8 集群配置 操作系统ip域名Kafka Broker 端口Kafka Controller 端口Ubuntu 18.04.6192.168.50.131kafka1.com90929093Ubuntu 18.04.6192.168.50.132kafka2.com90929093Ubuntu 18.04.6192.168.50.133kafka3.com90929093 安装 vim, cur…...

在龙蜥 anolis os 23 上 源码安装 PostgreSQL 16.1

在龙蜥 OS 23上,本来想使用二进制安装,结果发现没有针对龙蜥的列表: 于是想到了源码安装,下面我们列出了PG源码安装的步骤: 1.安装准备 1.1.创建操作系统组及用户 groupadd postgres useradd -g postgres -m postgr…...

UDP的不可靠性可以用来做什么

User Datagram Protocol(UDP,用户数据报协议)是互联网协议套件中的一种传输层协议。与TCP不同,UDP是一种无连接的、不可靠的协议。 要知道UDP可以用来做什么,首先我们要知道它有何特点: 1,无连接: UDP是一…...

vue3还用this吗?getCurrentInstance获取当前组件实例

在 Vue 2 中,this 关键字代表当前组件实例。在组件的选项对象中,this 可以用于访问组件实例的属性、方法以及 Vue 实例的一些特定方法。 在Vue3中,我们发现this是undefined,那我们真的没法使用this了吗?vu3给我们提供…...

高校学生宿舍公寓报修维修生活管理系统 微信小程序b2529

本课题要求实现一套基于微信小程序宿舍生活管理系统,系统主要包括(管理员,学生、维修员和卫检员)四个模块等功能。 使用基于微信小程序宿舍生活管理系统相对传统宿舍生活管理系统信息管理方式具备很多优点:首先可以大幅…...

C++类与对象(7)—友元、内部类、匿名对象、拷贝对象时编译器优化

目录 一、友元 1、定义 2、友元函数 3、友元类 二、内部类 1、定义 2、特性: 三、匿名对象 四、拷贝对象时的一些编译器优化 1、传值&传引用返回优化对比 2、匿名对象作为函数返回对象 3、接收返回值方式对比 总结: 一、友元 1、定义…...

Django回顾2

目录 一.HTTP 1.URL介绍 2.格式: 3.补充: 二.web框架 1.什么是框架 2.什么是web框架 3.wsgi协议 基于wsgi协议的web服务器: 4.协议是怎么规定的 三.Django 1.MVC与MTV模型(所有框架其实都遵循MVC架构) 2.…...

<JavaDS> 二叉树遍历各种遍历方式的代码实现 -- 前序、中序、后序、层序遍历

目录 有以下二叉树: 一、递归 1.1 前序遍历-递归 1.2 中序遍历-递归 1.3 后序遍历-递归 二、递归--使用链表 2.1 前序遍历-递归-返回链表 2.2 中序遍历-递归-返回链表 2.3 后序遍历-递归-返回链表 三、迭代--使用栈 3.1 前序遍历-迭代-使用栈 3.2 中序遍…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...