PSP - 蛋白质复合物结构预测 Template 的 Multichain Mask 2D (二维多链掩码)

news/2025/2/19 8:05:53/

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

在 蛋白质复合物结构预测 中,AlphaFold2 Multimer 的 Multichain Mask 2D 对于 模版特征 (Template) 的影响较大,默认使用单链进行模版搜索,关闭链间 Docking 信息,只保留链内信息,当单链来源自同一个模版时,则可以保留链间信息。

测试 Case,8BBY:

>A
MSKVETGDQGYTVVQSKYKKAVEQLQKGLLDGEIKIFFEGTLASTIYCLHKVDNKLDNLGDGDYVDFLIITKLRILNAKEETIDIDASSSKTAQDLAKKYVFNKTDLNTLYRVLNGDEADTNRLVEEVSGKYQVVLYPEGKRV
>B
AAKASIADENSPVKLTLKSDKKKDLKDYVDDLRTYNNGYSNAIEVAGEDRIETAIALSQKYYNSDDENAIFRDSVDNVVLVGGNAIVDGLVASPLASEKKAPLLLTSKDKLDSSVKAEIKRVMNIKSTTGINTSKKVYLAGGVNSISKEVENELKDMGLKVTRLAGDDRYETSLKIADEVGLDNDKAFVVGGTGLADAMSIAPVASQLRNANGKMDLADGDATPIVVVDGKAKTINDDVKDFLDDSQVDIIGGENSVSKDVENAIDDATGKSPDRYSGDDRQATNAKVIKESSYYQDNLNNDKKVVNFFVAKDGSTKEDQLVDALAAAPVAANFGVTLNSDGKPVDKDGKVLTGSDNDKNKLVSPAPIVLATDSLSSDQSVSISKVLDKDNGENLVQVGKGIATSVINKLKDLLSM
>C
DMSKVETGDQGYTVVQSKYKKAVEQIKIFFEGTLAYCLHKVDNKLDNLGDGDYVDFLIITKLRILNAKEETIDIDASSSKTAQDLAKKYVFNKTDLNTLYRVLNGDEADTNRVEEVSGKYQVVLYPEGKRV
>D
ASIADENSPVKLTLKSDKKKDLKDYVDDLRTYNNGYSNAIEVAGEDRIETAIALSQKYYNSDDENAIFRDSVDNVVLVGGNAIVDGLVASPLASEKKAPLLLTSKDKLDSSVKAEIKRVMNIKSTTGINTSKKVYLAGGVNSISKEVENELKDMGLKVTRLAGDDRYETSLKIADEVGLDNDKAFVVGGTGLADAMSIAPVASQLRNANGKMDLADGDATPIVVVDGKAKTINDDVKDFLDDSQVDIIGGENSVSKDVENAIDDATGKSPDRYSGDDRQATNAKVIKESSYYQDNLNNDKKVVNFFVAKDGSTKEDQLVDALAAAPVAANFGVTLNSDGKPVDKDGKVLTGSDNDKNKLVSPAPIVLATDSLSSDQSVSISKVLDKDNGENLVQVGKGIATSVINKLKDLLS

使用单链 GT PDB 作为 Template 时,TMScore 是 0.4954,增加链间的 Docking 信息,TMScore 提升至 0.9917,提升很大。

预测结构 (0.9917) 蓝色 与真实结构的比较如下:
GT

逻辑位于 openfold/model/model.py,增加 globals.use_template_unmask 参数,修改逻辑:

if not self.globals.use_template_unmask:multichain_mask_2d = (asym_id[..., None] == asym_id[..., None, :])  # [N_res, N_res]
else:# 保留链内信息# mask_inter = (asym_id[..., None] == asym_id[..., None, :])# 保留链间信息# mask_intra = (asym_id[..., None] != asym_id[..., None, :])  # [N_res, N_res]# 保留全部信息tmp_tensor = torch.ones(asym_id.shape, dtype=asym_id.dtype).to(asym_id.device)mask_none = (tmp_tensor[..., None] == tmp_tensor[..., None, :])mask_list = []for i in range(n_tmpl):# if i == 0:#     mask_list.append(mask_inter)# else:#     mask_list.append(mask_intra)mask_list.append(mask_none)multichain_mask_2d = torch.stack(mask_list, dim=0)logger.info(f"[CL] use_template_unmask: {self.globals.use_template_unmask}, "f"multichain_mask_2d: {multichain_mask_2d.shape}")# -------------- 验证 multichain_mask_2d -------------- #
# tmp = multichain_mask_2d.cpu().numpy()
# import pickle
# with open("multichain_mask_2d.pkl", "wb") as f:
#     pickle.dump(tmp, f)
# logger.info(f"[CL] saved multichain_mask_2d!")
# -------------- 验证 multichain_mask_2d -------------- ## 调用逻辑
template_embeds = self.template_embedder(template_feats,z,pair_mask.to(dtype=z.dtype),no_batch_dims,chunk_size=self.globals.chunk_size,multichain_mask_2d=multichain_mask_2d,use_fa=self.globals.use_fa,
)

只保留链内信息:

multichain_mask_2d = (asym_id[..., None] == asym_id[..., None, :])  # [N_res, N_res]

只保留链间信息:

# 保留链间信息
multichain_mask_2d = (asym_id[..., None] != asym_id[..., None, :])  # [N_res, N_res]

保留全部(链内和链间)信息:

tmp_tensor = torch.ones(asym_id.shape, dtype=asym_id.dtype).to(asym_id.device)
multichain_mask_2d = (tmp_tensor[..., None] == tmp_tensor[..., None, :])

其中 multichain_mask_2d 特征,4 个特征,2 个链内 Mask,2 个链间 Mask,即:

Mask

其中,template_feats 特征维度,如下:

template_feats, template_all_atom_positions: torch.Size([4, 1102, 37, 3])
template_feats, template_all_atom_mask: torch.Size([4, 1102, 37])
template_feats, template_aatype: torch.Size([4, 1102])
template_feats, template_mask: torch.Size([4])
template_feats, template_pseudo_beta: torch.Size([4, 1102, 3])
template_feats, template_pseudo_beta_mask: torch.Size([4, 1102])
template_feats, template_torsion_angles_sin_cos: torch.Size([4, 1102, 7, 2])
template_feats, template_alt_torsion_angles_sin_cos: torch.Size([4, 1102, 7, 2])
template_feats, template_torsion_angles_mask: torch.Size([4, 1102, 7])

具体逻辑位于 openfold/model/embedders.py#TemplateEmbedderMultimer,即:

  • 其中,循环处理多个 Template
for i in range(n_templ):pair_act = self.template_pair_embedder(template_dgram,aatype_one_hot,z,pseudo_beta_mask,backbone_mask,multichain_mask_2d,unit_vector,)

调用 openfold/model/embedders.py#TemplatePairEmbedderMultimer,即:

# template_dgram 部分
pseudo_beta_mask_2d = pseudo_beta_mask_2d * multichain_mask_2d
template_dgram = template_dgram * pseudo_beta_mask_2d[..., None]
# ...
# rigid Rt 部分
backbone_mask_2d = backbone_mask_2d * multichain_mask_2d
x, y, z = [coord * backbone_mask_2d for coord in unit_vector]
# ...

使用 pickle 存储 Template 特征,即:

# 写入
if key == "template_all_atom_positions":tmp = template_feats[key].cpu().numpy()import picklewith open("template_all_atom_positions.pkl", "wb") as f:pickle.dump(tmp, f)logger.info(f"[CL] saved template_all_atom_positions!")# 读取
def load_tensor_pkl(input_path):import picklewith open(input_path, "rb") as f:obj = pickle.load(f)# print(f"[Info] feat_dict: {obj.keys()}")return obj

当只有 1组 Template 时,其他的模版 (例如最大模版数量是4) 填充至0,特征效果如下:

Feature1

相同模版复制,特征效果如下,单模版效果0.9837,全模版效果0.9917:

Feature2


http://www.ppmy.cn/news/1221149.html

相关文章

案例分析:大疆的电子产品说明书在组织分类结构方面值得借鉴的地方

大疆科技作为全球领先的无人机和航拍设备制造商,其产品众多,包括无人机、相机等电子产品。为了提供给用户详尽准确的产品信息和操作指导,大疆在其官方网站上建立了一个电子产品说明书的帮助中心。在组织分类结构方面,大疆的电子产…

数据分析 - 分散性与变异的量度

全距 - 极差 处理变异性 方差度量 数值与均值的距离,也就是数据的差异性 标准差描述:典型值 和 均值的距离的方法,数据与均值的分散情况

ES聚合与分组查询取值参数含义(Java api版本)

一、说明 在项目中使用Elasticsearch的聚合与分组查询后,对于返回结果一脸懵逼,查阅各资料后,自己总结了一下参数取值的含义,不一定全面,只含常见参数 二、分组查询 2.1 参数解释 SearchResponse<Map> searchResponse null;try {searchResponse client.search(s ->…

JavaScript 学习笔记(入门篇)

基础概念 1. 了解 JavaScript JavaScript是一门多范式、解释型的脚本语言。主要用于前端Web开发&#xff0c;实现交互式的用户界面&#xff0c;也可以用于后端开发&#xff08;Node.js&#xff09;。 2. 语言特性 动态脚本语言&#xff1a; 运行时可以改变变量类型和对象结构…

JS-水果库存记录实现全选全不选功能

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name);}} }//当页面加载完成后执行后面的…

bat随手记

目录 bat批处理常用命令reg /?reg query /?cd /d "%~dp0"%cd%和%~dp0的区别setx命令(命令行实现永久设置环境变量)/v名称&#xff0c;/t类型&#xff0c;/d数据/f没有Yes/No询问 bat批处理常用命令 bat批处理常用命令 reg /? 查询有哪些reg命令 REG Operatio…

初识Java 18-1 泛型

目录 简单泛型 元组库 通过泛型实现栈类 泛型接口 泛型方法 可变参数和泛型方法 通用Supplier 简化元组的使用 使用Set创建实用工具 本笔记参考自&#xff1a; 《On Java 中文版》 继承的层次结构有时会带来过多的限制&#xff0c;例如&#xff1a;编写的方法或类往往…

CPU版本的pytorch安装

1.安装&#xff1a;Anaconda3 2.安装&#xff1a;torch-2.0.1cpu-cp311 2.安装&#xff1a;torchvision-0.15.2cpu-cp311-cp311-win_amd64 测试是否安装成功 cmd 进入python import torch print(torch.__version__) print(torch.cuda.is_available())