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

news2024/11/25 10:33:14

一、文章背景介绍

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上真不多见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1265292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三、详解桶排序以及排序内容大总结

详解桶排序以及排序内容大总结 文章目录 详解桶排序以及排序内容大总结堆堆的操作(大)heapinsert --- 调整成大根堆heapify --- 移除原根节点后,继续调整成大根堆堆中某个位置的数值发生改变 堆排序优化 堆练习比较器桶排序基数排序 堆 注:堆是一种特殊…

mongodb查询数据库集合的基础命令

基础命令 启动mongo服务 mongod -f /usr/local/mongodb/mongod.conf //注意配置文件路径停止mongo服务 关闭mongodb有三种方式: 一种是进入mongo后通过mongo的函数关闭; use admin db.shutdownServer()一种是通过mongod关闭; mongod --s…

算法分析-寻找假币题

一.题目需求 你手里有70枚重量相等的真金硬币,但你知道其中有一枚是假币,比其他金币轻。 你有一个平衡秤,你可以一次在两边放上任意数量的硬币,它会告诉你两边是否重量相同,或者如果不相同,哪边更轻。 问题…

C语言——输入两个正整数 m 和 n。求其最大公约数和最小公倍数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int m, n;int i;int x 1;int y 0;printf("请输入两个正整数m和n&#xff1a;\n");scanf("%d,%d", &m, &n);for (i 1; i < m && i < n; i) {if (m % i 0 …

汉威科技全系列VOC气体检测产品,护航绿色低碳安全发展

可能很多人都不知道&#xff0c;危化品爆炸、城市光化学烟雾污染&#xff08;如英国伦敦烟雾事件&#xff09;、城市灰霾、温室效应、臭氧层空洞等问题背后的元凶都是VOC。VOC(Volatile Organic Compounds)即挥发性有机物&#xff0c;这类物质易挥发&#xff0c;且普遍具有毒性…

【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)

文章目录 一、MySQL简介二、MySQLi函数1. 开启mysqli扩展&#xff1a;2. PHP MySQLi扩展的常用函数 三、PHP与MySQL交互0. 准备1. 创建连接&#xff08;mysqli_connect() &#xff09;连接mysql语法 2. 选择数据库&#xff08;mysqli_select_db()&#xff09;3. 在php中操作数据…

算法通关村-----数据流的中位数

数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFin…

使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据

使用 DMA 在 FPGA 中的 HDL 和嵌入式 C 之间传输数据 该项目介绍了如何在 PL 中的 HDL 与 FPGA 中的处理器上运行的嵌入式 C 之间传输数据的基本结构。 介绍 鉴于机器学习和人工智能等应用的 FPGA 设计中硬件加速的兴起&#xff0c;现在是剥开几层“云雾”并讨论 HDL 之间来回传…

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

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

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO 概述 上节 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 讲述了如何通过网页控制一个 GPIO。本节实现在网页上控制多个 GPIO。 示例解析 前端设计 前端代码建立了四个 GPIO&#xff0c;如下死 GPIO 2 在前端的…

【Java Spring】Spring MVC基础

文章目录 1、Spring MVC 简介2、Spring MVC 功能1.1 Spring MVC 连接功能2.2 Spring MVC 获取参数2.2.1 获取变量2.2.2 获取对象2.2.3 RequestParam重命名后端参数2.2.4 RequestBody 接收Json对象2.2.5 PathVariable从URL中获取参数 1、Spring MVC 简介 Spring Web MVC是构建于…

【计算机网络笔记】以太网

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

鸿蒙开发学习——应用程序框架

文章目录 UIAbility的生命周期Create状态WindowStageCreateForeground和Background前后台展示控制onWindowStageDestroyDestory 总结 UIAbility的生命周期 感觉这里他讲的不清晰&#xff0c;UIAbility的4个声明周期是Create、Foreground&#xff08;桌面展示&#xff09;、Back…

C#-认识串口通信并使用串口助手

串口通讯(Serial Communication)&#xff0c;是指外设和计算机间&#xff0c;通过数据信号线、地线等&#xff0c;按位进行传输数据的一种双向通讯方式。 串口是一种接口标准&#xff0c;它规定了接口的电气标准&#xff0c;没有规定接口插件电缆以及使用的通信协议&#xff0…

ModbusRTU\TCP消息帧解析(C#实现报文发送与解析)

目录 知识点常用链接一、Modbus1.ModbusRTU消息帧解析2.主站poll、从站slave通讯仿真-modbusRTU1.功能码01读线圈状态2.功能码03读保持寄存器报文解析&#xff08;寄存器存整型&#xff09;报文解析&#xff08;寄存器存float&#xff09; 3.C#模拟主站Poll&#xff08;ModbusR…

P24 C++ 字符串常量

前言 本期我们讨论字符串字面量。 这是一种基于字符串的东西&#xff0c;上一章我们讲过字符串&#xff0c;你一定要去先去看看那一期的内容。 P23 C字符串-CSDN博客 01 什么是字符串字常量呢&#xff1f; 字符串字面量就是在双引号之间的一串字符 在上面的代码中&#xf…

Linux CentOS_7解决无法上网的问题

参考视频&#xff1a;保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 配置网络&#xff1a;解决上网问题 第一步&#xff1a;选择网络模式 第二步&#xff1a;配置网卡命令&#xff1a;打开终端执行命令&#xff1a; 1、先切换到根目录下&#xff0c;防止在第执行cd …

计网Lesson4 - 计算机组网模型

文章目录 计算机的连接方式1. 两台计算机的互联2. 多台计算机的互联&#xff08;旧式&#xff09;3. 多台计算机的互联 --- 集线器&#xff08;Hub&#xff09;4. 网桥5. 多台计算机的互联 --- 交换器&#xff08;Switch&#xff09; 计算机的连接方式 1. 两台计算机的互联 网…

什么是路由抖动?该如何控制

路由器在实现不间断的网络通信和连接方面发挥着重要作用&#xff0c;具有所需功能的持续可用的路由器可确保其相关子网的良好性能&#xff0c;由于网络严重依赖路由器的性能&#xff0c;因此确保您的路由器不会遇到任何问题非常重要。路由器遇到的一个严重的网络问题是路由抖动…

如何使用APP UI自动化测试提高测试效率与质量?

pythonappium自动化测试系列就要告一段落了&#xff0c;本篇博客咱们做个小结。 首先想要说明一下&#xff0c;APP自动化测试可能很多公司不用&#xff0c;但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的&#xff0c;所以为了更好的待遇&#xff0c;我们还…