PSP - 蛋白质复合物 AlphaFold2 Multimer MSA Pairing 逻辑与优化

news2024/11/21 0:12:42

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

Img
在蛋白质复合物结构预测中,当序列 (Sequence) 是异源多链时,无论是AB,还是AABB,都需要 MSA 配对,即 MSA Pairing。在 MSA 的搜索过程中,按照单链维度进行搜索,通过 MSA Pairing 进行合并,作为特征输入至 Multimer 结构预测。

控制 MSA 数量,包括需要 3 个超参数:

  1. max_msa_crop_size,用于确定 MSA 的长度,默认设置 2048
  2. max_msa_clusters,用于确定推理中 MSA 特征的长度,默认设置 252
  3. max_extra_msa,用于限制推理中 Extra MSA 特征的长度,默认设置 1024

这 3 个参数,依次设定,从前到后相互包含,可以根据不同情况进行调节,其中 第1个参数 > (第2个参数 + 第3个参数)。

默认单链的搜索文件如下:

bfd_uniref_hits.a3m
mgnify_hits.sto
pdb_hits.sto
uniprot_hits.sto
uniref90_hits.sto

其中 uniref90_hits.sto 用于 MSA Pairing,pdb_hits.sto 用于 模版 (Template) 特征,bfd_uniref_hits.a3mmgnify_hits.stouniref90_hits.sto,用于单链 MSA 特征。我们以 ABAB 格式的 4 链 PDB 进行假设。

优化1:MSA Pairing 默认只使用 uniprot_hits.sto,当数量较少时,可以使用 uniref90_hits.sto 作为补充。

源码 openfold/data/data_pipeline.py,如下:

# ++++++++++ 补充 MSA Pairing 源的逻辑 ++++++++++ #
# 标准的 AF2 Multimer 流程中没用 target_seq,即 target_seq 是 None
# logger.info(f"[CL] target_seq: {target_seq}")
msa = parsers.parse_stockholm(result, query_seq=target_seq)
msa = msa.truncate(max_seqs=self._max_uniprot_hits)

msa_extra = parsers.parse_stockholm(result_extra, query_seq=target_seq)
msa_extra = msa_extra.truncate(max_seqs=self._max_uniprot_hits)

logger.info(f"[CL] all_seq msa: {len(msa.sequences)}, add uniref msa: {len(msa_extra.sequences)}")
all_seq_features = make_msa_features([msa, msa_extra])
logger.info(f"[CL] all_seq msa: {all_seq_features['msa'].shape}")
# ++++++++++ 补充 MSA Pairing 源的逻辑 ++++++++++ #

优化2:当单链 MSA 数量较少时,使用 uniprot_hits.sto 作为 MSA 的补充。

源码 openfold/data/data_pipeline.py,如下:

# ++++++++++ 补充单链 MSA 序列的逻辑 ++++++++++ #
msa_seq_list = set()
for _, msa in msa_dict.items():
    for sequence_index, sequence in enumerate(msa.sequences):
        msa_seq_list.add(sequence)
msa_seq_list = list(msa_seq_list)
thr = 64  # 这影响没有 pairing 的序列,数值不宜过大
msa_size = len(msa_seq_list)
if msa_size < thr and uniprot_path:
    logger.info(f"[CL] single msa too small {msa_size} < {thr} (thr), uniprot_path: {uniprot_path}")
    with open(uniprot_path) as f:
        sto_string = f.read()
    msa_obj = parsers.parse_stockholm(sto_string)
    msa_seq_list += msa_obj.sequences
    msa_seq_list = list(set(msa_seq_list))
    diff_size = len(msa_seq_list) - msa_size
    logger.info(f"[CL] single msa from {msa_size} to {len(msa_seq_list)}, add {diff_size}")
    if diff_size > 0:
        msa_list.append(msa_obj)  # 加入额外的数据
# ++++++++++ 补充单链 MSA 序列的逻辑 ++++++++++ #

优化3:当 MSA Pairing 数量过少时,尤其是 全链 Pairing 数量过少时,使用 其他物种 的 MSA 作为 MSA Pairing 的补充。

源码 openfold/data/msa_pairing.py,如下:

# ++++++++++ 补充 MSA Pairing 的逻辑 ++++++++++ #
thr = 128
num_all_pairing = len(tmp_dict1[num_examples])
if num_all_pairing < thr:
    logger.info(f"[CL] full msa pairing ({num_examples} chains) is too little ({num_all_pairing}<{thr}), "
                f"so add more!")
    tmp_dict2 = process_species(
        num_examples, common_species, all_chain_species_dict, prokaryotic, is_fake=True)
    # all_paired_msa_rows_dict = tmp_dict2
    tmp_item = list(tmp_dict1[num_examples]) + list(tmp_dict2[num_examples])  # 增补部分 MSA
    tmp_item = np.unique(tmp_item, axis=0)  # 先去重
    tmp_item = tmp_item[:thr]  # 再截取
    if len(tmp_item) > num_all_pairing:
        all_paired_msa_rows_dict[num_examples] = tmp_item
        logger.info(f"[CL] full msa pairing ({num_examples} chains) add to {len(tmp_item)}! ")
# ++++++++++ 补充 MSA Pairing 的逻辑 ++++++++++ #

假设序列是 AABB,顺序不重要,也可以是 ABAB,链式是 N c N_{c} Nc,MSA Pairing 只考虑 msa_all_seq 字段 (uniprot_hitsuniref90_hits 优化),即,A 链包括 MSA 数量是 L A L_{A} LA,B 链包括 MSA 数量是 L B L_{B} LB,MSA Pairing 数量是 L P a b L_{P_{ab}} LPab 。其中 MSA Pairing 包括 2 至 N c N_{c} Nc 个,例如 4 链,就是可以 Pairing 成2链、3链、4链等 4 种情况,只有 1 链时,被抛弃。

源码 openfold/data/msa_pairing.py,即:

# Skip species that are present in only one chain.
if species_dfs_present <= 1:
    continue

在 MSA Pairing 的过程中,修改 msa_all_seq 字段的 MSA 顺序,同时去除 只有 1 链 (没有配对) 的情况,假设最终 MSA Pairing 的数量是 L P a b L_{P_{ab}} LPab,全部链都是相同的,填补空位。

通过 msa_pairing.merge_chain_features() 函数,将单链 MSA 的合并至一起,即 bfd_uniref_hits.a3mmgnify_hits.stouniref90_hits.sto 的全部 MSA,组成 msa 字段特征。其中 MSA 参数1 即 max_msa_crop_size,表示合并 MSA 的最大数量。例如 链 A 的 msa_all_seq 数量是 900,最大是 2048,则 单链 msa 字段的数量最多是 1148,其余随机舍弃,即1148+900=2048

源码 openfold/data/msa_pairing.py,注意 feat_all_seq 在前,feat 在后,即 MSA Pairing 更重要,即:

def _concatenate_paired_and_unpaired_features(
    example: pipeline.FeatureDict,
) -> pipeline.FeatureDict:
    """Merges paired and block-diagonalised features."""
    features = MSA_FEATURES
    for feature_name in features:
        if feature_name in example:
            feat = example[feature_name]
            feat_all_seq = example[feature_name + "_all_seq"]
            merged_feat = np.concatenate([feat_all_seq, feat], axis=0)
            example[feature_name] = merged_feat
    example["num_alignments"] = np.array(example["msa"].shape[0], dtype=np.int32)
    return example

通过 openfold/data/data_transforms_multimer.py 函数,将输入的 msa 特征 (合并 msamsa_all_seq) 进行截取,先截取 max_seq,再截取 max_extra_msa_seq,即第 2 个和第 3 个参数,max_msa_clustersmax_extra_msa,作为最终的训练或推理 msa 特征。

logits += cluster_bias_mask * inf
index_order = gumbel_argsort_sample_idx(logits, generator=g)
logger.info(f"[CL] truly use msa raw size: {len(index_order)}, msa: {max_seq}, extra_msa: {max_extra_msa_seq}")
sel_idx = index_order[:max_seq]
extra_idx = index_order[max_seq:][:max_extra_msa_seq]

for k in ["msa", "deletion_matrix", "msa_mask", "bert_mask"]:
    if k in batch:
        batch["extra_" + k] = batch[k][extra_idx]
        batch[k] = batch[k][sel_idx]

通过不同的训练模型,与不同的参数,进行蛋白质复合物的结构预测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现hellokitty

目录 系列文章 前言 绘图基础 HelloKitty 尾声 系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.n…

山西电力市场日前价格预测【2023-11-01】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-01&#xff09;山西电力市场全天平均日前电价为280.90元/MWh。其中&#xff0c;最高日前电价为420.61元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

LIS系统解决了实验室的哪些问题?

LIS实验室管理系统源码 LIS系统全套源码 LIS系统解决了实验室的哪些问题&#xff1f; 1、普遍存在的标本送错及标本不合格问题 现状&#xff1a;实验室标本的分送由护工完成&#xff0c;通常会由于疏忽等原因导致标本与原来裹在外面的申请单搞错&#xff0c;有时还会送错标本…

一篇文章入门KNN算法

文章目录 KNNKNN算法KNN in practice推荐系统我们想回答什么问题&#xff1f;探索、清理和准备数据使用算法 Summary 参考文献 KNN 监督学习是一种依赖输入数据来学习函数的算法&#xff0c;该函数在给定新的未标记数据时可以产生适当的输出。 监督学习用于解决分类或回归问题…

手机型号抓取

Code处理结果&#xff1a;DataFrame 及 流程 方式①&#xff1a;每个页面的数据处理成df, 然后再合并df , pd.concat()/ df.append() 循环合并 方式②&#xff1a;原始数据中&#xff0c;每个页面的数据存储在一个列表中&#xff0c;然后页面中的每条数据以字典单元形式盛放在列…

数据查找(search)-----线性表查找

目录 前言 线性表查找 1.无序表查找 2.无序表查找 3.分块查找 前言 前面我们已经学习过了相关数据结构的知识&#xff0c;那么今天我们就开始去学习数据的查找&#xff0c;在不同的数据结构里面去查找目标数据&#xff0c;这就是数据的查找算法。今天就从线性结构的表去查…

QMS质量检验管理|攻克制造企业质量检验难题,助力企业提质增效

在日益激烈的市场竞争中&#xff0c;对产品质量严格把关&#xff0c;是制造企业提高核心竞争力与品牌价值的关键因素。那如何高效、高质地完成产品质检工作&#xff1f;这就需要企业在工业质检中引进数字化技术加以辅助&#xff0c;进而推动智能制造高质量发展。 蓝库云QMS质量…

VR全景对比在行业中如何呈现优势?功能有多强大?

我们在买车、买房或者是挑选旅游景区的时候&#xff0c;总是拿不定注意&#xff0c;彼此之间差异化细节处展现的并不明显&#xff0c;往往一个细节需要翻来覆去好几遍才能看懂。现在VR全景对比打破传统图片对比方式&#xff0c;让差异化效果更快展现&#xff01; VR全景对比是通…

Simulink查表法实现NTC温度计算模型

目录 前言 把NTC数据导入到excel 把excel数据导入Matlab 拟合NTC温度曲线 查表实现温度计算 总结 前言 在实际项目中需要对NTC对某些区域进行温度采样和做一些系统层面的保护等等&#xff0c;比如过温降载&#xff0c;过温保护&#xff0c;这时就需要对NTC或者其他的温度传…

Docker之docker-compose(介绍,安装及入门示例)

文章目录 一、docker-compose介绍Compose 中有两个重要的概念&#xff1a; 二、docker-compose安装三、docker-compose简单示例参考网址&#xff1a; 一、docker-compose介绍 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。 Compo…

第7讲:VBA中利用FIND的代码实现多值查找实例

《VBA代码解决方案》(10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码摆好…

diffusers-AutoPipline

https://huggingface.co/docs/diffusers/tutorials/autopipelinehttps://huggingface.co/docs/diffusers/tutorials/autopipelineAutoPipeline会自动检测要使用的正确流程类&#xff0c;这样可以更轻松地加载与任务相对应的检查点&#xff0c;而无需知道具体的流程类名称。 1.…

.net core iis 发布后登入的时候请求不到方法报错502

.net core iis 发布后登入的时候请求不到方法报错502 502 bad gateway 502 - Web 服务器在作为网关或代理服务器时收到了无效响应。 您要查找的页面有问题&#xff0c;无法显示。当 Web 服务器(作为网关或代理)与上游内容服务器联系时&#xff0c;收到来自内容服务器的无效…

配置管理工具-Confd

1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储&#xff0c;结合配置模板引擎&#xff0c;保持本地配置最新&#xff0c;同时具备定期探测机制&#xff0c;配置变更自动reload。对应的后端存储可以是etcd&#xff0c;redis、zookeeper等。[1] 通过…

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项 专职安全员一般是指从事安全管理方面的工作&#xff0c;普遍的是建筑施工行业&#xff0c;建筑工地安全员&#xff0c;专职安全员C证&#xff0c;黄冈建筑安全员ABC-建筑单位在黄冈&#xff0c;只能在黄冈报考建筑安全员ABC。…

div 中文本太长用省略号隐藏展示,鼠标放上来弹出提示

需求描述 div 中有一行文本。 文本特别特别的长&#xff0c; 反正是超出了div所容纳的长度。 你呢&#xff0c; 现在想要的效果是&#xff1a; 1.文本就展示一行&#xff0c;多余的部分用省略号代替展示&#xff1b; 2.鼠标放上去的时候&#xff0c;用tip的方式展示完整的信息…

【AIFEM案例分析】药柱随机响应分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

三分钟学习一个python小知识9-----------我的对python中random的理解

文章目录 random库一、生成随机浮点数二、生成指定范围内的随机整数三、生成指定范围内的随机浮点数四、从序列中随机选择元素总结 random库 在Python中&#xff0c;random库是用于生成随机数的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、生…

xx is not in the sudoers file. This incident will be reported

虚拟机再执行 sudo 命令的时候&#xff0c;出现类似这样的报错&#xff1a; xx is not in the sudoers file. This incident will be reported 其实&#xff0c;背景是这样的&#xff0c;我自己没事瞎作死&#xff0c;干了个这事&#xff0c;给 /etc/sudoers 文件的最下面一行…

软件开发全文档归档,开发、管理、实施、运维、服务巡检、信息安全、安全运维

在当今高度信息化的时代&#xff0c;软件开发已成为推动社会进步和发展的重要力量。软件开发过程中&#xff0c;文件支撑作为关键的一环&#xff0c;对于保障项目的顺利进行和产品的质量具有不可替代的作用。本文将探讨软件开发所需的主要文件及其作用。 一、引言 软件开发是…