RFdiffusion get_torsions函数解读

server/2024/12/23 11:41:33/

函数功能

get_torsions 函数根据输入的原子坐标(xyz_in)和氨基酸序列(seq),计算一组主链和侧链的扭转角(torsions)。同时生成备用扭转角(torsions_alt),用于表示可以镜像翻转的几何结构,并返回掩码(tors_mask)和是否平面化(tors_planar)的信息。

输入参数

  • xyz_in: 原子坐标张量,形状 [B, L, 27, 3],其中 B 是批量大小,L 是残基数量,27 表示原子类型(如 N, CA, C, CB),3 是坐标。
  • seq: 氨基酸序列,形状 [B, L],每个值对应氨基酸编号。
  • torsion_indices: 表示计算侧链扭转角所需的 4 个原子索引。
  • torsion_can_flip: 布尔数组,指示哪些扭转角可以翻转。
  • ref_angles: 理想化的参考角度,主要用于 CB 弯曲、CB 扭转和 CG 弯曲。
  • mask_in: 掩码(可选),用于屏蔽特定残基。

返回值

  1. torsions: 主链和侧链的扭转角张量,形状 [B, L, 10, 2]
  2. torsions_alt: 扭转角备用版本(翻转版),形状同上。
  3. tors_mask: 扭转角的有效掩码。
  4. tors_planar: 布尔掩码,指示哪些扭转角是平面的。

源代码:

def get_torsions(xyz_in, seq, torsion_indices, torsion_can_flip, ref_angles, mask_in=None
):B, L = xyz_in.shape[:2]tors_mask = get_tor_mask(seq, torsion_indices, mask_in)# torsions to restrain to 0 or 180degreetors_planar = torch.zeros((B, L, 10), dtype=torch.bool, device=xyz_in.device)tors_planar[:, :, 5] = seq == aa2num["TYR"]  # TYR chi 3 should be planar# idealize given xyz coordinates before computing torsion anglesxyz = xyz_in.clone()Rs, Ts = rigid_from_3_points(xyz[..., 0, :], xyz[..., 1, :], xyz[..., 2, :])Nideal = torch.tensor([-0.5272, 1.3593, 0.000], device=xyz_in.device)Cideal = torch.tensor([1.5233, 0.000, 0.000], device=xyz_in.device)xyz[..., 0, :] = torch.einsum("brij,j->bri", Rs, Nideal) + Tsxyz[..., 2, :] = torch.einsum("brij,j->bri", Rs, Cideal) + Tstorsions = torch.zeros((B, L, 10, 2), device=xyz.device)# avoid undefined angles for H generationtorsions[:, 0, 1, 0] = 1.0torsions[:, -1, 0, 0] = 1.0# omegatorsions[:, :-1, 0, :] = th_dih(xyz[:, :-1, 1, :], xyz[:, :-1, 2, :], xyz[:, 1:, 0, :], xyz[:, 1:, 1, :])# phitorsions[:, 1:, 1, :] = th_dih(xyz[:, :-1, 2, :], xyz[:, 1:, 0, :], xyz[:, 1:, 1, :], xyz[:, 1:, 2, :])# psitorsions[:, :, 2, :] = -1 * th_dih(xyz[:, :, 0, :], xyz[:, :, 1, :], xyz[:, :, 2, :], xyz[:, :, 3, :])# chisti0 = torch.gather(xyz, 2, torsion_indices[seq, :, 0, None].repeat(1, 1, 1, 3))ti1 = torch.gather(xyz, 2, torsion_indices[seq, :, 1, None].repeat(1, 1, 1, 3))ti2 = torch.gather(xyz, 2, torsion_indices[seq, :, 2, None].repeat(1, 1, 1, 3))ti3 = torch.gather(xyz, 2, torsion_indices[seq, :, 3, None].repeat(1, 1, 1, 3))torsions[:, :, 3:7, :] = th_dih(ti0, ti1, ti2, ti3)# CB bendNC = 0.5 * (xyz[:, :, 0, :3] + xyz[:, :, 2, :3])CA = xyz[:, :, 1, :3]CB = xyz[:, :, 4, :3]t = th_ang_v(CB - CA, NC - CA)t0 = ref_angles[seq][..., 0, :]torsions[:, :, 7, :] = torch.stack((torch.sum(t * t0, dim=-1), t[..., 0] * t0[..., 1] - t[..., 1] * t0[..., 0]),dim=-1,)# CB twistNCCA = NC - CANCp = xyz[:, :, 2, :3] - xyz[:, :, 0, :3]NCpp = (NCp- torch.sum(NCp * NCCA, dim=-1, keepdim=True)/ torch.sum(NCCA * NCCA, dim=-1, keepdim=True)* NCCA)t = th_ang_v(CB - CA, NCpp)t0 = ref_angles[seq][..., 1, :]torsions[:, :, 8, :] = torch.stack((torch.sum(t * t0, dim=-1), t[..., 0] * t0[..., 1] - t[..., 1] * t0[..., 0]),dim=-1,)# CG bendCG = xyz[:, :

http://www.ppmy.cn/server/152479.html

相关文章

本机如何连接虚拟机MYSQL

要让本机(主机)连接到虚拟机上的 MySQL 数据库,你需要确保虚拟机和主机之间的网络连接正常,并且 MySQL 配置允许外部连接。以下是实现本机连接虚拟机 MySQL 的步骤: 步骤 1:确认虚拟机与本机的网络连接 确…

FastAPI vs Go 性能对比分析

FastAPI vs Go 性能对比分析 总体结论 FastAPI 虽然性能优秀,但整体上仍无法完全达到 Go 的性能水平。 详细对比 优势 FastAPI 开发效率高Python生态系统丰富自动API文档生成类型检查和验证异步支持好 Go 原生性能更强内存占用更低并发处理能力强编译型语言的优…

防火墙规则配置错误导致的网络问题排查

防火墙规则配置错误可能导致服务器的网络中断、服务不可用或访问受限等问题。排查和修复防火墙规则配置错误需要系统性的方法,以快速定位问题并恢复正常服务。以下是防火墙规则配置错误导致网络问题的排查与解决指南。 一、常见防火墙配置错误及其影响 错误的默认策…

vue3+vite 引入动画组件库 Inspira UI

关于Inspira UI Inspira UI不是传统的组件库。相反,它是精选的优雅组件集合,您可以轻松将其集成到您的应用程序中。只需选择所需的组件,复制代码,然后自定义以适合您的项目即可。您可以随意使用和修改代码! 官网地址…

【hackmyvm】eigthy 靶机wp

tags: HMVgopherdoas另类sudo提权knock目录穿越 Type: wp dg-publish: true 难度: ⭐️⭐️⭐️ 作者: sml 系统: Linux 这里写目录标题 2. 信息收集2.1. 端口扫描2.2. knock敲门2.3. 目录扫描2.4. 目录穿越 3. 提权 2. 信息收集 2.1. 端口扫描 ┌──(root㉿kali)-[~/Deskt…

关于VQ-GAN利用滑动窗口生成 高清图像

参考文章:VQGAN 论文与源码解读:前Diffusion时代的高清图像生成模型 | 周弈帆的博客 概念补充:所谓“高清”,就是像素很多,比如,512x512就比64x64要高清很多 请仔细琢磨上面的这几句话即可。 (…

Linux查看键鼠输入

文章目录 通过打开input设备来读取输入通过第三方程序获取xevxinputevtest 参考 本文简单介绍几种在linux下查看键鼠输入的方法 通过打开input设备来读取输入 程序如下&#xff0c;使用时需要看情况修改input设备路径 #include <fcntl.h> #include <linux/input.h&g…

每天40分玩转Django:Django缓存视图

Django缓存视图 一、今日学习内容概述 学习模块重要程度主要内容视图缓存基础⭐⭐⭐⭐⭐缓存装饰器、缓存配置基于会话缓存⭐⭐⭐⭐⭐会话存储、用户相关缓存动态缓存处理⭐⭐⭐⭐条件缓存、缓存失效缓存优化策略⭐⭐⭐⭐性能优化、最佳实践 二、缓存配置示例 # settings.p…