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

PSP - 蛋白质复合物结构预测 Template Pair 特征 Mask 可视化

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/134333419

在蛋白质复合物结构预测中,在 TemplatePairEmbedderMultimer 层中 ,构建 Template Pair 特征的源码,即:

  • 将特征 template_dgrampseudo_beta_mask_2daatype_one_hotbackbone_mask_2dunit_vector(x/y/z) 特征,通过 linear 层累加到一起。
  • 其中,都需要使用 multichain_mask_2d 进行固定掩码,选择单链区域。
  • 输出维度:([1, 1102, 1102, 64]),linear层的输出 c_out 维度是 64。

源码如下:

def forward(self,template_dgram: torch.Tensor,aatype_one_hot: torch.Tensor,query_embedding: torch.Tensor,pseudo_beta_mask: torch.Tensor,backbone_mask: torch.Tensor,multichain_mask_2d: torch.Tensor,unit_vector: geometry.Vec3Array,
) -> torch.Tensor:act = 0.0pseudo_beta_mask_2d = (pseudo_beta_mask[..., None] * pseudo_beta_mask[..., None, :])pseudo_beta_mask_2d = pseudo_beta_mask_2d * multichain_mask_2dtemplate_dgram = template_dgram * pseudo_beta_mask_2d[..., None]act += self.dgram_linear(template_dgram)act += self.pseudo_beta_mask_linear(pseudo_beta_mask_2d[..., None])aatype_one_hot = aatype_one_hot.to(template_dgram.dtype)act += self.aatype_linear_1(aatype_one_hot[..., None, :, :])act += self.aatype_linear_2(aatype_one_hot[..., None, :])backbone_mask_2d = backbone_mask[..., None] * backbone_mask[..., None, :]backbone_mask_2d = backbone_mask_2d * multichain_mask_2dx, y, z = [coord * backbone_mask_2d for coord in unit_vector]act += self.x_linear(x[..., None])act += self.y_linear(y[..., None])act += self.z_linear(z[..., None])act += self.backbone_mask_linear(backbone_mask_2d[..., None])query_embedding = self.query_embedding_layer_norm(query_embedding)act += self.query_embedding_linear(query_embedding)return act

template_dgram 特征:

template_dgram

template_dgram 特征与 multichain_mask_2d

template_dgram mask

backbone_mask_2d 特征:

backbone_mask_2d

backbone_mask_2d 特征与 multichain_mask_2d

backbone_mask_2d mask

写入特征,即:

tmp_dict = dict()
tmp_dict["pseudo_beta_mask_2d_prev"] = pseudo_beta_mask_2d.cpu().numpy()
tmp_dict["pseudo_beta_mask_2d_post"] = pseudo_beta_mask_2d.cpu().numpy()
tmp_dict["template_dgram_post"] = template_dgram.cpu().numpy()
tmp_dict["backbone_mask_2d_prev"] = backbone_mask_2d.cpu().numpy()
tmp_dict["backbone_mask_2d_post"] = backbone_mask_2d.cpu().numpy()import pickle
with open("template_pair_embedder_multimer.pkl", "wb") as f:pickle.dump(tmp_dict, f)
logger.info(f"[CL] saved template_pair_embedder_multimer!")

读取特征,即:

def load_tensor_dict(input_path):"""加载特征文件['template_dgram', 'z', 'pseudo_beta_mask', 'backbone_mask', 'multichain_mask_2d','unit_vector_x', 'unit_vector_y', 'unit_vector_z']"""import picklewith open(input_path, "rb") as f:obj = pickle.load(f)print(f"[Info] feat_dict: {obj.keys()}")return objdef process_template_pair_embedder_multimer_dict(feat_dict, output_dir):print(f"[Info] feat_dict.keys: {feat_dict.keys()}")draw_tensor_2d(feat_dict["pseudo_beta_mask_2d_prev"], os.path.join(output_dir, "pseudo_beta_mask_2d_prev.png"))draw_tensor_2d(feat_dict["pseudo_beta_mask_2d_post"], os.path.join(output_dir, "pseudo_beta_mask_2d_prev.png"))draw_template_dgram(feat_dict["template_dgram_post"], os.path.join(output_dir, "template_dgram_post.png"))draw_tensor_2d(feat_dict["backbone_mask_2d_prev"], os.path.join(output_dir, "backbone_mask_2d_prev.png"))draw_tensor_2d(feat_dict["backbone_mask_2d_post"], os.path.join(output_dir, "backbone_mask_2d_post.png"))def draw_tensor_2d(feat, output_path):"""backbone_mask: torch.Size([1, 1102])"""feat = np.squeeze(feat)f, ax_arr = plt.subplots(1, 1, figsize=(8, 5))im = ax_arr.imshow(feat)f.colorbar(im, ax=ax_arr)plt.savefig(output_path, bbox_inches='tight', format='png')plt.show()def draw_template_dgram(feat, output_path):"""template_dgram: torch.Size([1, 1102, 1102, 39])"""f, ax_arr = plt.subplots(6, 7, figsize=(24, 15))ax_arr = ax_arr.flatten()feat = np.squeeze(feat)print(f"[Info] feat: {feat.shape}")for i in range(0, 42):if i <= 38:im = ax_arr[i].imshow(feat[:, :, i], interpolation='none')f.colorbar(im, ax=ax_arr[i])else:ax_arr[i].set_axis_off()plt.savefig(output_path, bbox_inches='tight', format='png')plt.show()

相关文章:

PSP - 蛋白质复合物结构预测 Template Pair 特征 Mask 可视化

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134333419 在蛋白质复合物结构预测中&#xff0c;在 TemplatePairEmbedderMultimer 层中 &#xff0c;构建 Template Pair 特征的源码&#xff0c…...

RK3568开发笔记-amixer开机设置音量异常

目录 前言 一、amixer介绍 1. 显示音频设备信息 2. 显示音量信息...

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计&#xff0c;我想在读者阅读本文之前应该已经有所了解&#xff0c;所以本文的重点是代码的分享和分析。至于具体的原理&#xff0c;我觉得读者不必阅读长篇大论的文章&#xff0c;只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…...

区间内的真素数问题(C#)

题目&#xff1a;区间内的真素数 找出正整数 M 和 N 之间&#xff08;N 不⼩于 M&#xff09;的所有真素数。真素数的定义&#xff1a;如果⼀个正整数P 为素数&#xff0c;且其反序也为素数&#xff0c;那么 P 就为真素数。例如&#xff0c;11&#xff0c;13 均为真素数&#…...

eclipse安装lombok插件

lombok插件下载:Download 下载完成&#xff0c;lombok.jar放到eclipse根目录&#xff0c;双击jar运行 运行界面&#xff0c;点击Install安装。 安装完成&#xff0c;重启IDE&#xff0c;rebuild 项目。 rebuild 项目...

故障演练 | 微服务架构下如何做好故障演练

前言 微服务架构场景中&#xff0c;应用系统复杂切分散。长期运行时&#xff0c;局部出现故障时不可避免的。如果发生故障时不能进行有效反应&#xff0c;系统的可用性将极大地降低。 什么是故障演练 故障演练是指模拟生产环境中可能出现的故障&#xff0c;测试系统或应用在…...

Python爬虫-获取汽车之家车家号

前言 本文是该专栏的第9篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly9jaGVqaWFoYW8uYXV0b2hvbWUuY29tLmNuL0F1dGhvcnMjcHZhcmVhaWQ9MjgwODEwNA== 需求:获取汽车之家车家号数据 笔者将在正文中介绍详细的思路以及采集方法,废话不多说,跟着笔者直接往…...

No195.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

pytest与testNg自动化框架

一.pytest 1.安装pytest&#xff1a; pip install pytest 2.编写用例 - 收集用例 - 执行用例 - 生成报告 3.pytest如何自动识别用例  识别规则如下&#xff1a; 1、搜索根目录&#xff1a;默认从当前目录中搜集测试用例&#xff0c;即在哪个目录下运行pytest命令&#xff0c;…...

数据库安全:Hadoop 未授权访问-命令执行漏洞.

数据库安全&#xff1a;Hadoop 未授权访问-命令执行漏洞. Hadoop 未授权访问主要是因为 Hadoop YARN 资源管理系统配置不当&#xff0c;导致可以未经授权进行访问&#xff0c;从而被攻击者恶意利用。攻击者无需认证即可通过 RESTAPI 部署任务来执行任意指令&#xff0c;最终完…...

前端---认识HTML

文章目录 什么是HTML&#xff1f;HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…...

竞赛 题目:基于FP-Growth的新闻挖掘算法系统的设计与实现

文章目录 0 前言1 项目背景2 算法架构3 FP-Growth算法原理3.1 FP树3.2 算法过程3.3 算法实现3.3.1 构建FP树 3.4 从FP树中挖掘频繁项集 4 系统设计展示5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于FP-Growth的新闻挖掘算法系统的设计与实现…...

保姆级jupyter lab配置清单

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

数据结构预算法--链表(单链表,双向链表)

1.链表 目录 1.链表 1.1链表的概念及结构 1.2 链表的分类 2.单链表的实现(不带哨兵位&#xff09; 2.1接口函数 2.2函数的实现 3.双向链表的实现&#xff08;带哨兵位&#xff09; 3.1接口函数 3.2函数的实现 1.1链表的概念及结构 概念&#xff1a;链表是一种物理存储结…...

数据结构线性表——栈

前言&#xff1a;哈喽小伙伴们&#xff0c;今天我们将一起进入数据结构线性表的第四篇章——栈的讲解&#xff0c;栈还是比较简单的哦&#xff0c;跟紧博主的思路&#xff0c;不要掉队哦。 目录 一.什么是栈 二.如何实现栈 三.栈的实现 栈的初始化 四.栈的操作 1.数据入栈…...

自定义 springboot 启动器 starter 与自动装配原理

Maven 依赖 classpath 类路径管理 Maven 项目中的类路径添加来源分为三类 自定义 springboot starter starter 启动器定义的规则自定义 starter 示例 自动装配 文章链接...

16 _ 二分查找(下):如何快速定位IP对应的省份地址?

通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地。 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现的。地址库中包括IP地址范围和归属地的对应关系。 当我们想要查询202…...

vb.net圣经带快捷键,用原装的数据库

Imports System.Data.SqlServerCe Imports System.Text.RegularExpressions Imports System.Data.OleDbPublic Class Form1Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "…...

Unity中Shader的雾效

文章目录 前言一、Unity中的雾效在哪开启二、Unity中不同种类雾的区别1、线性雾2、指数雾1&#xff08;推荐用这个&#xff0c;兼具效果和性能&#xff09;3、指数雾2&#xff08;效果更真实&#xff0c;性能消耗多&#xff09; 三、在我们自己的Shader中实现判断&#xff0c;是…...

企业微信开发教程一:添加企微应用流程图解以及常见问题图文说明

最近在前辈的基础上新添加了一个企微应用&#xff0c;过程中遇到了一些卡点&#xff0c;这里一一通过图片标注与注释的方式记录一下&#xff0c;希望能给后来人提供一些清晰明了的帮助&#xff0c;话不多说&#xff0c;大家直接看图吧。 &#xff08;文中包括一些本项目独有的配…...

Claude Code 接入 DeepSeek、GLM、MiniMax 等国产大模型,手把手带你起飞!

每天免费领 1亿 Token&#xff0c;白嫖DeepSeek、GLM、MiniMax、Kimi等大模型&#xff01; 这篇文章是专门写给那些想撸起袖子直接开干的朋友们的。咱们不整那些虚头巴脑的理论&#xff0c;核心就帮大家解决四件事&#xff1a;搞定 Claude Code 的安装、确认这玩意儿能跑通、成…...

如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术:终极完整指南

如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术&#xff1a;终极完整指南 【免费下载链接】proc-macro-workshop Learn to write Rust procedural macros  [Rust Latam conference, Montevideo Uruguay, March 2019] 项目地址: https://gitcode.com/gh_mirrors/…...

力扣热门100题之合并区间

这题核心就两步&#xff1a;先按起点排序 → 再逐个合并重叠区间 思路 1. 按每个区间的左端点从小到大排序 2. 用一个列表保存结果 3. 遍历每个区间&#xff1a; ◦ 如果结果为空&#xff0c;直接加入 ◦ 否则看当前区间起点 ≤ 最后一个区间终点 → 重叠&#xff0c;合并 ◦ 不…...

健身与猝死的关系

## 延迟性肌肉酸痛&#xff08;DOMS&#xff09;定义&#xff1a;延迟性肌肉酸痛&#xff08;DOMS&#xff09;是一种在进行了非常规或强度较大的体育锻炼后&#xff0c;特别是力量训练后出现的肌肉酸痛现象。这种痛感通常在锻炼后24到48小时内出现&#xff0c;最严重时可持续数…...

SEO_掌握这5个SEO技巧,让流量持续增长

SEO技巧&#xff1a;让你的网站流量持续增长的5个关键策略 在当今数字化时代&#xff0c;网站流量的稳定增长对于企业的成功至关重要。搜索引擎优化&#xff08;SEO&#xff09;是提高网站流量的核心手段之一。掌握一些关键的SEO技巧&#xff0c;不仅可以帮助你在搜索结果中获…...

信通院:AI4SE行业现状调查报告 2026

这份信通院 2026 年 AI4SE 行业现状调查报告&#xff0c;核心是 AI 与软件工程深度融合进入规模化落地关键期&#xff0c;全流程提效显著&#xff0c;企业高度重视&#xff0c;但仍面临人才、成本等挑战&#xff0c;未来将走向自主编程、多智能体协同的新范式。一、调研概况有效…...

智能对话式开发:通过快马平台AI模型将你的想法直接变为cloud code应用

智能对话式开发&#xff1a;通过快马平台AI模型将你的想法直接变为cloud code应用 最近在尝试用AI辅助开发一个天气查询小工具&#xff0c;整个过程让我深刻体会到cloud code与AI结合的强大之处。传统开发需要自己写代码、调试、部署&#xff0c;而现在只需要用自然语言描述需…...

x86汇编堆栈

x86汇编堆栈 1&#xff09;堆栈操作 x86汇编中的堆栈是一块特殊的内存区域&#xff0c;用于存储程序运行时的数据。它遵循"后进先出LIFO的原则"&#xff0c;主要用于函数调用时的参数传递、局部变量存储以及保存返回地址。 堆栈操作的核心指令是PUSH和POP。PUSH指令将…...

基于Matlab的分布式电源选址定容软件:优化接入点与容量,降低网损与电压越限风险

分布式电源选址定容 软件&#xff1a;Matlab 介绍&#xff1a;在改进的IEEE33节点系统中分布式电源选择最佳接入点和接入容量&#xff0c;以网损和电压越限惩罚为目标进行粒子群优化&#xff0c;能得出最佳接入点和接入容量&#xff0c;接入前后电压变化&#xff0c;基础程…...

2025最权威的五大降重复率工具推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理以及机器学习算法的AI论文查重系统&#xff0c;会去分析文本语义&#xff0…...