ProteinMPNN的linux本地安装及使用

ProteinMPNN

dauparas/ProteinMPNN: Code for the ProteinMPNN paper

工具介绍

        ProteinMPNN 是一个基于深度学习的蛋白质序列设计工具,旨在根据给定的蛋白质结构信息来设计或优化蛋白质序列。

核心功能

  • 蛋白质序列设计:根据输入的蛋白质结构(PDB 文件),为其设计合适的氨基酸序列。用户可以指定设计的链、固定的残基位置、氨基酸组成偏好等条件,以满足不同的设计需求。
  • 序列评分:计算给定蛋白质结构 - 序列对的得分,反映模型对该序列的不确定性。得分基于负对数概率,可用于评估设计序列的质量。
  • 概率输出:可以输出条件概率和无条件概率,帮助用户了解每个位置上不同氨基酸的可能性分布。

代码组织

  • protein_mpnn_run.py:主脚本,用于初始化和运行模型。
  • protein_mpnn_utils.py:包含了主脚本所需的实用函数。
  • examples/:提供了多个简单的代码示例,涵盖了单体设计、多链设计、固定残基位置、添加氨基酸偏好等多种场景。
  • inputs/:包含示例所需的输入 PDB 文件。
  • outputs/:存储示例运行的输出结果。
  • colab_notebooks/:提供了 Google Colab 示例,方便用户在云端环境中运行代码。
  • training/:包含了重新训练模型所需的代码和数据。

安装

运行 ProteinMPNN 需要克隆 GitHub 仓库,并安装 Python(版本 >= 3.0)、PyTorch 和 Numpy。

git clone https://github.com/dauparas/ProteinMPNN.git

这里我是使用conda创建了虚拟环境,使用的python 3.8

conda create --name MPNN python=3.8

激活环境

conda activate MPNN

这里还安装了一个TMalign(用于计算两个蛋白质链之间的 TM 分数、RMSD 等指标

wget https://zhanggroup.org/TM-align/TMalign.gz
gunzip TMalign.gz
chmod +x TMalign
mv TMalign /usr/local/bin/

代码简介

1. StructureDataset 和 StructureLoader
  • 简介:用于处理蛋白质结构数据集,StructureDataset 负责封装数据集,StructureLoader 负责将数据集按照序列长度聚类并批量加载数据。
  • 文件位置ProteinMPNN/training/utils.py 和 ProteinMPNN/protein_mpnn_utils.py

2. make_fixed_positions_dict.py
  • 简介:根据输入的 PDB 解析文件和指定的链及位置信息,生成固定位置的字典。
  • 文件位置ProteinMPNN/helper_scripts/make_fixed_positions_dict.py
3. parse_multiple_chains.py
  • 简介:解析包含多个蛋白质链的 PDB 文件,提取序列和坐标信息,并保存为 JSON 文件。
  • 文件位置ProteinMPNN/helper_scripts/parse_multiple_chains.py
4. assign_fixed_chains.py
  • 简介:根据输入的 JSON 文件和指定的链列表,分配固定链和设计链。
  • 文件位置ProteinMPNN/helper_scripts/assign_fixed_chains.py
5. make_bias_AA.py
  • 简介:根据输入的氨基酸列表和偏置列表,生成氨基酸偏置字典。
  • 文件位置ProteinMPNN/helper_scripts/make_bias_AA.py
6. TMalign
  • 简介:计算两个蛋白质链之间的 TM 分数、RMSD 等指标。
  • 文件位置ProteinMPNN/training/parse_cif_noX.py
7. training.py
  • 简介:用于训练蛋白质序列预测的神经网络模型。
  • 文件位置ProteinMPNN/training/training.py

脚本使用

        作者还提供了很多示例脚本,展示了如何使用 ProteinMPNN 进行不同场景下的蛋白质序列设计。

1. submit_example_1.sh

  • 功能:简单单体示例,用于处理单个蛋白质链的设计。
  • 步骤
    • 解析 inputs/PDB_monomers/pdbs/ 目录下的 PDB 文件为 jsonl 格式。
    • 运行 protein_mpnn_run.py 脚本进行序列设计,每个目标生成 2 条序列,采样温度为 0.1,随机种子为 37,批次大小为 1。
  • 结果
    • 成功为两个蛋白质结构生成了序列,并记录了生成时间和序列长度。
    • 其中,5L33的结果
  • 生物学意义

  submit_example_1.sh 可以为单体蛋白质生成新的氨基酸序列,这些序列可能会改变蛋白质的催化活性、结合亲和力、稳定性等性质。例如,对于一种酶蛋白,通过设计新的序列可能提高其催化效率,从而更高效地参与生物化学反应。

2. submit_example_2.sh

  • 功能:简单多链示例,处理包含多个蛋白质链的复合物。
  • 步骤
    • 解析 inputs/PDB_complexes/pdbs/ 目录下的 PDB 文件为 jsonl 格式。
    • 指定设计链为 A 和 B,并将设计信息保存到 assigned_pdbs.jsonl 中。
    • 运行 protein_mpnn_run.py 脚本进行序列设计,参数与示例 1 类似。
  • 结果

3. submit_example_3.sh

  • 功能:直接从单个 PDB 文件路径进行设计。

4. submit_example_3_score_only.sh

  • 功能:仅返回模型的得分(模型的不确定性),不进行序列设计。

5. submit_example_3_score_only_from_fasta.sh

  • 功能:从 FASTA 文件加载序列,仅返回模型的得分(模型的不确定性)。

6. submit_example_4.sh

  • 功能:固定某些残基位置,不进行设计。

7. submit_example_4_non_fixed.sh

  • 功能:指定需要设计的残基位置。

8. submit_example_5.sh

  • 功能:将某些位置绑定在一起(考虑对称性),即这些位置的氨基酸选择是相关的。

9. submit_example_6.sh

  • 功能:同源寡聚体示例,处理由相同亚基组成的蛋白质复合物。

10. submit_example_7.sh

  • 功能:返回序列的无条件概率(类似 PSSM)。

11. submit_example_8.sh

  • 功能:添加氨基酸偏好,使某些氨基酸更有可能被选择。

12. submit_example_pssm.sh

  • 功能:在设计序列时使用 PSSM(位置特异性得分矩阵)进行偏置。

这些示例脚本涵盖了 ProteinMPNN 的常见使用场景,用户可以根据自己的需求参考这些示例进行蛋白质序列设计。

测试

使用RFdiffusion生成的结构(序列全是G,150 AA)

修改并运行submit_example_1.sh,结果:

  • 温度(T)T=0.1 表示在生成序列时使用的采样温度为 0.1。较低的温度会使模型更倾向于选择概率较高的氨基酸,生成的序列相对保守;较高的温度会增加随机性,生成更多样化的序列。
  • 样本编号(sample)sample=1 和 sample=2 分别表示生成的第 1 个和第 2 个样本序列。
  • 得分(score):根据文档,score 是对设计的氨基酸进行负对数概率平均后的结果。负对数概率是衡量模型对生成序列的置信度,得分越低表示模型对生成的氨基酸序列越有信心。
  • 全局得分(global_score)global_score 是对所有链中所有残基(包括固定和设计的残基)的负对数概率平均。同样,得分越低表示模型对整个结构 - 序列的匹配越有信心。
  • 序列恢复率(seq_recovery)seq_recovery 表示生成的序列与原始序列的相似程度。在这个例子中,两个样本的序列恢复率均为 0.0333,说明生成的序列与原始序列的相似度非常低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值