首页 > 其他分享 >残基和原子

残基和原子

时间:2024-09-30 20:24:04浏览次数:7  
标签:self mask 原子 weights atom 残基 氨基酸

从您提供的 aa_feature 类的截图信息来看,以下是对 aa_feature 类中各个属性的整理:

主要属性说明

  1. aa_embedding:

    • residue_embedding: 一个嵌入层,形状为 (25, 64),用于表示氨基酸残基的嵌入。
    • res_pos_embedding: 一个嵌入层,形状为 (192, 64),用于表示氨基酸残基的位置嵌入。
    • atom_embedding: 一个嵌入层,形状为 (6, 16),用于表示原子类型的嵌入。
    • atom_pos_embedding: 一个嵌入层,形状为 (9, 16),用于表示原子位置的嵌入。
  2. atom_pad_idx: 值为 0,表示填充原子的索引。

  3. atom_mask_idx: 值为 1,表示掩码原子的索引。

  4. atom_pos_mask_idx: 值为 1,表示原子位置掩码的索引。

  5. atom_pos_bb_idx: 值为 2,表示骨架原子的索引。

  6. num_aa_type: 值为 25,表示氨基酸的种类数量(通常是20种标准氨基酸 + 特殊标记)。

其他属性

  • boa_idx, boh_idx, bol_idx: 分别为 22, 23, 24,可能是用于表示不同链(抗原链、重链、轻链)起始位置的索引。
  • mask_idx: 值为 21,表示掩码索引。
  • num_atom_type: 值为 6,表示原子类型的数量。
  • num_atom_pos: 值为 9,表示原子位置的数量。
  • dump_patches: 一个布尔值,默认 False,是否用于某些调试或保存中间结果。
  • backbone_only: 一个布尔值,默认 False,表示是否仅包含骨架原子。
  • fix_atom_weights: 一个布尔值,表示是否固定原子权重。

关于边和侧链的相关参数

  • sidechain_bonds: 一个张量,表示氨基酸侧链原子的键连接关系。
  • sidechain_bonds_mask: 一个布尔张量,表示侧链键的掩码。
  • sidechain_chi_angles_atoms: 包含 χ 角信息的参数,用于表示侧链旋转构象。

其他

  • edge_constructor: 可能是一个与图结构相关的对象,用于构建图中的边连接关系。
  • residue_atom_pos, residue_atom_type: 表示残基原子位置和类型的参数,分别记录氨基酸残基中原子的位置和类型信息。
  • residue_atom_weight: 存储每个氨基酸的原子权重信息。

总结

aa_feature 类是用于对氨基酸、原子、侧链等信息进行嵌入和编码的类,属性涉及到氨基酸残基、原子位置、原子类型、侧链连接等各种信息,适用于将氨基酸序列转化为模型可处理的嵌入向量,同时考虑了骨架、侧链结构以及不同氨基酸的特征。

def get_atom_weights(self, residue_types):
weights = torch.where(
self.atom_weights_mask,
self.zero_atom_weight,
self.atom_weight
) # [num_aa_classes, max_atom_number(n_channel)]
if not self.fix_atom_weights:
weights = F.normalize(weights, dim=-1)
return weights[residue_types] 我想知道这里对于每个residue,如果它的max channel是14,但实际上它没达到max channel,那么它的atom_weights

在这个代码片段中,get_atom_weights 函数计算了每个氨基酸残基的原子权重 (atom_weights)。由于每个氨基酸的原子数量不同,实际的原子数量通常小于 max_atom_number(即 14)。在这种情况下,未达到最大通道数的部分将通过 atom_weights_mask 被填充为 0。

代码中的关键部分解释

  1. self.atom_weights_mask:

    • 这是一个布尔张量,形状为 [num_aa_classes, max_atom_number]。其中每个元素为 True 表示当前氨基酸在该位置上没有原子,False 表示该位置有原子。
  2. self.zero_atom_weight:

    • 这是一个全零的权重张量,与 atom_weights 的形状相同。当 self.atom_weights_maskTrue 时,原子权重将被设置为 0。
  3. weights = torch.where(self.atom_weights_mask, self.zero_atom_weight, self.atom_weight):

    • 这个操作会将 self.atom_weights_mask 中为 True 的位置填充为 0,表示该位置没有原子,从而确保这些位置不影响计算。
  4. F.normalize(weights, dim=-1):

    • 如果 fix_atom_weightsFalse,则对每个氨基酸的权重向量进行归一化,确保它们在通道维度上(-1 维)具有单位范数。这意味着每个氨基酸的实际原子权重将在它的非零位置上进行归一化。

当实际原子数量小于 max_atom_number 时,atom_weights 的情况

  • 对于每个氨基酸,实际存在的原子位置会有权重值,而超出该氨基酸原子数量的部分(没有实际原子的通道位置)会被 self.atom_weights_mask 设置为 0。最终结果是,atom_weights 中没有实际原子的通道部分的权重值始终为 0。
  • 如果 fix_atom_weightsFalse,实际存在的原子权重会被归一化。

举例说明

假设一个氨基酸残基的实际原子数是 6,而 max_atom_number = 14,那么对应的 atom_weights 在计算后会是一个长度为 14 的向量,其中前 6 个元素包含归一化后的权重值,后 8 个元素全为 0。

总结

对于每个氨基酸残基,如果它的实际原子数量小于 max_atom_number(14),那么 get_atom_weights 函数会将多余的通道位置的权重设为 0,确保只有实际存在的原子通道具有有效的权重值。如果 fix_atom_weightsFalse,这些有效权重还会进行归一化处理。

标签:self,mask,原子,weights,atom,残基,氨基酸
From: https://www.cnblogs.com/csjywu01/p/18442102

相关文章

  • 可见性 原子性
    有序性importorg.junit.jupiter.api.Test;publicclassT{//flag初始值staticbooleanflag=false;@Testpublicvoidbusiness(){newThread(()->{//①资源准备prepare();//②资源准备好,更改flag......
  • CAS原子类:AtomicLongArray源码解析
    AtomicLongArray内部维护了一个int类型的数组,需要先复习下数组对象的在内存中的结构,这对接下来对数组类型原子类的理解至关重要。一、数组对象的内存结构我们运行以下代码并将数组对象的内存结构通过JOL工具打印出来,关于这部分知识,参考之前的文章:深入理解Java对象结构publiccl......
  • [正点原子-I.MX6ULL]嵌入式 Linux 通过 nfs 下载出现 T T T T
    [正点原子-I.MX6ULL]嵌入式Linux通过nfs下载出现TTTT问题叙述但是有几个地方要注意1.安装驱动应该是2.修改GRUB_DEFAULT时,后面的引号是英文字符,直接复制过去会有语法报错3.最后就是重启linux时,如果你是在vmware上运行的,记得按shift进入boot界面问题叙述其实......
  • 深入理解并发原子性、可见性、有序性与JMM内存模型
    1.并发三大特性并发编程Bug的源头:原子性、可见性和有序性问题1.1原子性一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操作并不是......
  • 正点原子阿尔法ARM开发板-IMX6ULL(八)——串口通信(寄存器解释)(补:有源蜂鸣器)
    文章目录一、蜂鸣器(待,理解)1.1第一行1.2第二行1.3第三行二、串口原理2.1通信格式2.2UART寄存器一、蜂鸣器(待,理解)1.1第一行对于第一行,首先先到fsl_iomuxc文件里面寻找IOMUXC_SetPinMux这个函数其次确定了SNV_TAMPER1并且复用为GPIO模式之后查看,IM6ULL的参考手册,看到第32章......
  • 正点原子RK3588(一)——开机测试+AI初探
    一、adbadbshell,进入板子的根目录exit,退出到linuxadbpull板子linux(从板子到linux)adbpushlinux板子(从linux到板子)二、测试AI功能2.1resnet18importcv2importnumpyasnpimportplatformfromsynset_labelimportlabelsfromrknnlite.apiimportRKNNLite#decic......
  • 架构师手写代码:分享数据库原子性与一致性实现方案(不再背概念)
    数据库事务的原子性和一致性是数据库管理系统(DBMS)中确保数据完整性和可靠性的两个关键属性。下面是这两个属性的基本概念和实现逻辑:肖哥弹架构跟大家“弹弹”数据库设计技巧,关注公号回复'mvcc'获得手写数据库事务代码欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取......
  • 【全新课程】正点原子《ESP32基础及项目实战入门》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!熟练掌握ESP-IDF开发,突破ESP32入门难题!一、课程介绍本课程针对ESP32的入门和基础外设进行系统教学,内容包括环境搭建、编程软件使用、外设基础知识、模块驱动及多个实战项目。课程旨在帮助学员掌握E......
  • 【全新课程】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!彻底解决ARM32单片机项目入门难的问题!一、课程介绍本课程专为ARM32单片机的入门学习者设计,涵盖了环境搭建、编程软件使用、模块基础驱动和多个实战项目等等!全面讲解从基础到实战应用的全套内容,让大......
  • 【全新课程】正点原子《ESP32物联网项目实战》培训课程上线!
    正点原子《ESP32物联网项目实战》全新培训课程上线啦!正点原子工程师手把手教你学!通过多个项目实战,掌握ESP32物联网项目的开发!一、课程介绍本课程围绕物联网实战项目展开教学,内容循序渐进,涵盖了环境搭建、编程软件使用、模块基础驱动、物联网基础知识和多个实战项目等等。在物联......