Linux下安装Foldseek并从蛋白质的PDB结构中获取 3Di Token 和 3Di Embedding
0. 说明:
Foldseek 是由韩国国立首尔大学 (Seoul National University) 的 Martin Steinegger (MMseqs2 和 Linclust 的作者) 开发的一款用于快速地从大型蛋白质结构数据库中检索相似结构蛋白质的工具,可以用于计算两个蛋白之间的结构相似性,可以用于蛋白质结构比对,也可以与 MMseqs2 和 Linclust 结合实现基于结构对蛋白质聚类。
本文的目的在于利用 Foldseek 将蛋白质的PDB结构转化为 3Di alphabet 表示的 3Di 序列,同时获取蛋白质蓄力的 3Di Embedding Matrix。
1. 下载和安装 Foldseek:
根据 github 上提供的安装教程(https://github.com/steineggerlab/foldseek),首先确定 Linux 的架构,然后根据相应的下载和安装命令进行 Foldseek 的下载和安装。
# Linux AVX2 build (check using: cat /proc/cpuinfo | grep avx2)
wget https://mmseqs.com/foldseek/foldseek-linux-avx2.tar.gz; tar xvzf foldseek-linux-avx2.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH# Linux SSE2 build (check using: cat /proc/cpuinfo | grep sse2)
wget https://mmseqs.com/foldseek/foldseek-linux-sse2.tar.gz; tar xvzf foldseek-linux-sse2.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH# Linux ARM64 build
wget https://mmseqs.com/foldseek/foldseek-linux-arm64.tar.gz; tar xvzf foldseek-linux-arm64.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH# MacOS
wget https://mmseqs.com/foldseek/foldseek-osx-universal.tar.gz; tar xvzf foldseek-osx-universal.tar.gz; export PATH=$(pwd)/foldseek/bin/:$PATH# Conda installer (Linux and macOS)
conda install -c conda-forge -c bioconda foldseek
2. 利用 Foldseek 将PDB转化为3Di
在 foldseek 程序所在的目录下,运行:
命令:./foldseek structureto3didescriptor --help
usage: foldseek structureto3didescriptor <i:PDB|mmCIF[.gz]> ... <i:PDB|mmCIF[.gz]> <o:3didescriptor> [options]By Martin Steinegger <martin.steinegger@snu.ac.kr>
options: misc: --mask-bfactor-threshold FLOAT mask residues for seeding if b-factor < thr [0,100] [0.000]--file-include STR Include file names based on this regex [.*]--file-exclude STR Exclude file names based on this regex [^$]
common: --threads INT Number of CPU-cores used (all by default) [40]-v INT Verbosity level: 0: quiet, 1: +errors, 2: +warnings, 3: +info [3]
expert: --chain-name-mode INT Add chain to name:0: auto1: always add[0]--write-mapping INT write _mapping file containing mapping from internal id to taxonomic identifier [0]--coord-store-mode INT Coordinate storage mode: 1: C-alpha as float2: C-alpha as difference (uint16_t) [2]--write-lookup INT write .lookup file containing mapping from internal id, fasta id and file number [1]--tar-include STR Include file names based on this regex [.*]--tar-exclude STR Exclude file names based on this regex [^$]examples:Convert PDB/mmCIF/tar[.gz] files to a dbreferences:- van Kempen, M., Kim, S.S., Tumescheit, C., Mirdita, M., Lee, J., Gilchrist, C.L.M., Söding, J., and Steinegger, M. Fast and accurate protein structure search with Foldseek. Nature Biotechnology, doi:10.1038/s41587-023-01773-0 (2023)
从上述帮助文档的结果可以看出,将一个蛋白PDB转化为3Di,命令:
./foldseek structureto3didescriptor prot.pdb res_prot.3di --threads 1 (用一个线程将 prot.pdb 转化为 res_prot.3di)
结果示例:
将人类蛋白 A1IGU5.pdb 转化为 A1IGU5.3di,部分结果如下:

3. 从 3Di 结果中将 3Di Token 和 3Di Embedding 取出
import numpy as npdef deal3DiRes(threeDifile):with open(threeDifile) as inF:for line in inF:line = line.strip().split("\t")## 3Di Tokentoken_3di = line[-2].strip()## 3Di Embeddingmatrix_3di = np.array(line[-1].strip().split(","), dtype=float)matrix_3di_reshape = matrix_3di.reshape(-1,10) ## 因为每个氨基酸是用长度为 10 的向量来表示的,所以把最后一列分成 nx10 的矩阵即可。breakreturn token_3di, matrix_3di_reshapeif __name__ == "__main__":res = deal3DiRes(threeDifile="../VirusHumanProt3DiFiles/Human3Di/A1IGU5.3di")print(res[0]) ## 3Di 序列print(res[1]) ## 3Di matrix
A1IGU5.3di 的处理结果如下
DDDDDDDDDPDPPPPVVVVVVVLLVVLLVQLVVLLVVVLVVLVVLLVLLCCVVPQLLVLVVVDDPVLSCLLCPVSVLVSVLSVVLSVQLVVLVVPSVCNLLSNLVSLVVCLVSLLVRLLRLLLSLVVNVVSLVVQVVVVVSVVSQQVSQCVSPVVCPPVRSVSSSCSSVVVLVCPLVSLVSSLVSDDCPDPSNVSSVVSSVSSVVSNVSSVLSSLLSVLLVVFLPPDPDDPVVVVVPDDPVVVVLVVQLVVLVVCCVVVVDPADDDPLVVVLVVLLVVLLVVLVVQLVVLVVVLVVLVVVLVDQPLPDDPVPPDAPVPLVSVLSVCCSVPLSVVLSVLCCVQQNVLSVVLNSVSSSVVRLVVVLSSLSSLQVVQVVCCVVPVDDDPVSVVSNVSNVSSVVSSSVVSVVSSVVSVVSVVVSVVSVVVSVVVSVVVSVVSVVVSLVPHPCSPPDPVRVVVVVVVVVVVVVVVVVVVVVVVLVPDDFPDLDDDDVPCPVQVVVVCVVANLQFKKFQRAFDDDDDDQDDGDHGGQIWGFPACADPVRHNQWTWIDSSPDIGIDGPVRIDRRDDDPPVVNVCVVVPDDDDDDDDDDDDDDDDDDDDDPPFKKFFCDWDDDDDPQADTHHHRAIKDFPACAPPVRHNQWTFIDGPNDTHIDGSVRMDTDDDDDPDDDDDDD
[[ 2.629e-316 1.156e-316 2.629e-316 ... 1.482e-323 -1.661e+0012.872e+013][ 7.838e-001 6.043e-001 7.838e-001 ... 3.854e+000 1.000e+0006.931e-001][ 6.043e-001 1.280e-001 6.043e-001 ... 3.703e+000 1.000e+0006.931e-001]...[ 3.958e-001 3.127e-001 -1.000e+000 ... 3.815e+000 -1.000e+000-6.931e-001][ 3.945e-001 3.958e-001 -1.000e+000 ... 3.853e+000 -1.000e+000-6.931e-001][ 0.000e+000 0.000e+000 0.000e+000 ... 0.000e+000 0.000e+0000.000e+000]]
参考:
[1]. van Kempen M, Kim S, Tumescheit C, Mirdita M, Lee J, Gilchrist C, Söding J, and Steinegger M. Fast and accurate protein structure search with Foldseek. Nature Biotechnology, doi:10.1038/s41587-023-01773-0 (2023)
[2]. Barrio-Hernandez I, Yeo J, Jänes J, Mirdita M, Gilchrist LMC, Wein T, Varadi M, Velankar S, Beltrao P and Steinegger M. Clustering predicted structures at the scale of the known protein universe. Nature, doi:10.1038/s41586-023-06510-w (2023)
[3]. https://github.com/steineggerlab/foldseek
相关文章:
Linux下安装Foldseek并从蛋白质的PDB结构中获取 3Di Token 和 3Di Embedding
0. 说明: Foldseek 是由韩国国立首尔大学 (Seoul National University) 的 Martin Steinegger (MMseqs2 和 Linclust 的作者) 开发的一款用于快速地从大型蛋白质结构数据库中检索相似结构蛋白质的工具,可以用于计算两个蛋白之间的结构相似性,…...
单元测试-java.lang.NullPointerException
报错信息 java.lang.NullPointerException 空指针异常 空对象引用 来源 对Controller层进行单元测试,解决完Spring上下文报错后继续报错。 解决 在测试方法执行前要为字段完成对象的注入,否则就报空指针异常。 测试例子 不完整启动Spring框架 pub…...
机器学习数据集整理:图像、表格
前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 表格数据 Sklearn 提供了 13 个表格型数据,且数据处理接口统一;LIBSVM 提供了 131 个表格型数据&a…...
Vue: Cannot find module @/xx/xx/xx.vue or its corresponding type declarations.
编辑器:Webstorm项目技术栈:vitevuets解决 1.vite.config.js设置别名resolve: {alias: {: path.resolve(__dirname, ./src),}, }, 2.src下创建globals.d.ts//通用声明 // Vue declare module *.vue {import { DefineComponent } from vue;const componen…...
怎样自动把网页截图发到微信群里
现在很多公司都在使用企业微信了,不但方便公司内部交流和客户交流,还能组建各种小组群,业务群。企业微信群提供一个机器人的功能,方便我们把公司业务信息,或来自外部的信息自动发布到群里。 这里研究一下如何向微信群…...
Netty实现websocket且实现url传参的两种方式(源码分析)
1、先构建基本的netty框架 再下面的代码中我构建了一个最基本的netty实现websocket的框架,其他个性化部分再自行添加。 Slf4j public class TeacherServer {public void teacherStart(int port) throws InterruptedException {NioEventLoopGroup boss new NioEve…...
深入理解C语言指针:基础概念、语法和实际应用
导言: 在C语言编程中,指针是一个强大而灵活的概念,它直接涉及到内存的操作,为程序员提供了更多的控制权。本文将深入探讨C语言指针的基础概念、语法规则以及实际应用,帮助读者更好地理解和运用这一重要的编程工具。 1…...
百度云加速免费版下线,推荐几款目前仍旧免费的CDN
近日,百度云加速实施了新政策,将不再支持免费套餐服务。现在免费的CDN也越来越少了,推荐几款目前仍旧免费的CDN,大家且用且珍惜! 1、雨云【点此直达】 源站为雨云产品可以免费使用CDN,源站非雨云产品流量包…...
HarmonyOS(五)—— 认识页面和自定义组件生命周期
前言 在前面我们通过如何创建自定义组件一文知道了如何如何自定义组件以及自定义组件的相关注意事项,接下来我们认识一下页面和自定义组件生命周期。 自定义组件和页面的关系 在开始之前,我们先明确自定义组件和页面的关系 自定义组件:Co…...
DevExpress WinForms TreeMap组件,用嵌套矩形可视化复杂分层数据
DevExpress WinForms TreeMap控件允许用户使用嵌套的矩形来可视化复杂的平面或分层数据结构。 DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是Office风…...
IO口速度影响了什么?
我们在初学单片机的时候都知道单片机GPIO的作用是巨大的,在配置GPIO的时候,结构体初始化里有一个选项是配置输入输出速度的,对于这个速度输出是必须要配置的,输入没有明令说明需不需要配置。 这个速度对于学习过32单片机的都应该知…...
Verilog基础:时序调度中的竞争(一)
相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言,Verilog HDL常常需要使用语句描述并行执行的电路,但其实在仿真器的底层,这些并行执行的语句是有先后顺序…...
nginx 配置静态缓存全教程 (以及静态缓存文件没有生成)
一、第一步定义一个缓存目录设置目录结构 在 http 模块下定义(keys_zone 缓存区名:后面是缓存区大小 inactive 不活跃的文件多久清理 max_size 缓存区所占磁盘的上限 use_temp_path 默认关闭(有需要自己百度)) proxy_cache_path /path/your…...
自己动手打包构建编译cri-dockerd
1.背景 本机是 armv7l架构cpu,发现官方文档中竟然没有,因此需要自己编译下; [rootcontainer0 ~]# uname -a Linux container0 5.4.206-v7l.1.el7 #1 SMP Mon Jul 25 14:13:29 UTC 2022 armv7l armv7l armv7l GNU/Linux2.打包/构建/编译 gi…...
Self-Supervised Exploration via Disagreement论文笔记
通过分歧进行自我监督探索 0、问题 使用可微的ri直接去更新动作策略的参数的,那是不是就不需要去计算价值函数或者critic网络了? 1、Motivation 高效的探索是RL中长期存在的问题。以前的大多数方式要么陷入具有随机动力学的环境,要么效率…...
【网络奇幻之旅】那年我与区块链技术的邂逅
🌺个人主页:Dawn黎明开始 🎀系列专栏:网络奇幻之旅 ⭐每日一句:追光的人,终会光芒万丈 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 &#…...
1.5.1 git/svn日志格式规范
文章目录 git日志规范一 基本原则二 日志格式1 type:2 keys3 subject4 body5 footergit日志规范 一 基本原则 《规则1》小步提交,每个功能模块分别提交 《规则2》源文件与修改文件,分别提交 《规则3》 二 日志格式 type:keys:subject:body:footer 1 type: - `feat`: 新…...
[autojs]ui线程中更新控件的值的问题
"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"开启悬浮窗" textSize"15sp" /><button id"autoService" text"开启无障碍服务" textSize"15sp" /><button id"…...
机器视觉技术在现代汽车制造中的应用
原创 | 文 BFT机器人 机器视觉技术,利用计算机模拟人眼视觉功能,从图像中提取信息以用于检测、测量和控制,已广泛应用于现代工业,特别是汽车制造业。其主要应用包括视觉测量、视觉引导和视觉检测。 01 视觉测量 视觉测量技术用于…...
学习视频剪辑方法:AI智剪助力,批量处理短视频无忧
随着短视频的兴起,越来越多的人开始关注如何有效地制作和发布这些内容。但是,短视频的制作并不容易,要耗费大量的时间和精力。现在有很多AI智能剪辑工具可以快速、高效地制作短视频。其中,AI智剪是一款非常受欢迎的视频剪辑功能&a…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
