在线使用:
ProteinMPNN - a Hugging Face Space by simonduerr
https://huggingface.co/spaces/simonduerr/ProteinMPNN
quickdemo.ipynb - Colaboratory (google.com
https://colab.research.google.com/github/dauparas/ProteinMPNN/blob/main/colab_notebooks/quickdemo.ipynb
要使用ProteinMPNN的本地版本,必须从GitHub下载源代码。该代码依赖于多个Python包,因此运行它的最便捷方式之一是通过创建一个包含必要包的conda环境。安装ProteinMPNN和执行本教程所需的包可以通过运行以下命令来完成。
这些命令来源于meiler老师的教程,仅供参考[1] 。
conda create --name ProteinMPNN_tutorial
conda activate ProteinMPNN_tutorial
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
pip3 install -r requirements.txt
如果出现:ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt' 需要先创建该文件,才能进行安装,步骤如下:
1)打开cmd,进入到项目文件夹下
2)执行语句:pip freeze > requirements.txt
3)之后执行:pip install requirements.txt
4)配置完成,打开requirements.txt文件,可以看到一些配置信息。
1. 基本用法
1.1 激活包含运行ProteinMPNN所需包的conda环境。
conda activate ProteinMPNN_tutorial
1.2 运行以下命令显示主ProteinMPNN应用程序的帮助信息。
cd ProteinMPNN #cd到下载了code的文件夹
python protein_mpnn_run.py -h
该命令将显示脚本使用说明和可用的输入参数。该脚本是初始化和运行模型的唯一脚本。其他可用的函数用于准备输入数据和创建选项文件。
1.3 首先,在没有附加选项的情况下对1QYS的整个序列进行简单的重新设计。切换到教程目录并创建一个新目录以重新设计1QYS序列。
参数含义
--pdb_path
输入pdb文件的全路径;--pdb_path_chains
需要设计pdb文件中的哪一条链;--out_folder
文件输出路径;--num_seq_per_target
设计的蛋白序列输出条数;--sampling_temp
采样温度,建议可取值0.1, 0.15, 0.2, 0.25, 0.3;--seed
设置随机数
cd ProteinMPNN_tutorial #cd到教程目录
mkdir 1qys_designs #创建新目录
python protein_mpnn_run.py --pdb_path input/1qys/1qys.pdb \
--out_folder ./1qys_designs/ --num_seq_per_target 10 --sampling_temp "0.1" \
--seed 0 --batch_size 1 --model_name v_48_020
序列生成应该只需几秒钟。生成的输出序列可以在./1qys_designs/seqs中找到。
可能会出现ModuleNotFoundError: No module named ‘numpy‘
start+R打开命令行,在里面输入以下命令下载numpy库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
或
pip install numpy
第一个为镜像,第二个为普通下载。
1.4 查看生成的序列文件。
gedit ./1qys_designs/seqs/1qys.fa
1qys.fa包含原始序列以及fasta格式中的所有设计。每个序列都附带一个分数和一个序列恢复值。在这种情况下,分数和全局分数应该是相同的。全局分数对序列中的所有残基进行平均,而分数仅代表设计残基的平均值。序列恢复显示设计残基的百分比身份。
2. 残基偏向
通过在本地安装ProteinMPNN,我们可以利用GitHub存储库中发布的一些应用程序之一。在ProteinMPNN/helper_scripts/中可以找到用于生成输入文件以使用ProteinMPNN的一些专用选项的脚本(残基偏差,省略氨基酸,固定位置)。其中一个应用是引入残基偏向,例如使疏水残基更有可能而半胱氨酸更不可能。
2.1 使用以下命令使用残基偏向重新设计1qys序列。
mkdir 1qys_designs_biased
python ~/ProteinMPNN/helper_scripts/make_bias_AA.py --output_path 1qys_bias.jsonl \
--AA_list "A F G I L M P V W Y C" \
--bias_list "1.39 1.39 1.39 1.39 1.39 1.39 1.39 1.39 1.39 1.39 -1.1"
python ~/ProteinMPNN/protein_mpnn_run.py --pdb_path input/1qys/1qys.pdb \
--out_folder ./1qys_designs_biased/ --num_seq_per_target 10 --sampling_temp "0.1" \
--seed 0 --batch_size 1 --model_name v_48_020 \
--bias_AA_jsonl 1qys_bias.jsonl
2.2 通过为两种设计创建序列标志,我们可以可视化氨基酸偏差是否对设计序列产生了影响。
python scripts/create_logo.py --fasta 1qys_designs/seqs/1qys.fa --output 1qys_unbiased_logo.png
python scripts/create_logo.py --fasta 1qys_designs_biased/seqs/1qys.fa --output 1qys_biased_logo.png
查看两个创建的序列标志。您将看到偏向某些残基会带来风险,而且偏向的类型和强度应该经过深思熟虑。
3. 固定位置
根据用例,仅重新设计蛋白质中的某些位置并保持其他部分固定可能是有意义的。在下一个案例中,我们想要重新设计SARS-CoV-2刺突蛋白受体结合结构域和迷你蛋白抑制剂LCB3之间的界面。该复合物的结构在7JZM下被结晶并发表,可以在inputs/7JZM/7jzm.pdb中找到。
3.1 我们只想设计LCB3(链A)的残基。为此,我们首先为包含我们要重新设计位置的链分配链。
python ~/ProteinMPNN/helper_scripts/parse_multiple_chains.py --input_path input/7jzm/ \
--output_path 7jzm.jsonl
python ~/ProteinMPNN/helper_scripts/assign_fixed_chains.py --input_path 7jzm.jsonl \
--output_path 7jzm_assigned.jsonl --chain_list "A"
parse_multiple_chains.py
以目录为输入变量,还可用于一次解析和随后设计目录中多个pdb文件。如果需要重新设计多个结构,例如不同对接构象的集合或幻想的支架集合,则这可能特别有用。
3.2 我们粗略假设LCB3的界面残基包括与刺突蛋白的距离为5埃的所有残基。使用pymol检查蛋白质结构并选择要进行设计的残基是一种方式。在这种情况下,我们在pymol中加载结构:
pymol input/7jzm/7jzm.pdb
选择并输出LCB3界面的残基。我们在pymol命令行中输入以下内容:
select interface, br. chain A within 5 of chain B
reslist =[]
iterate interface and name CA, reslist.append((resi))
print(*reslist)
3.3 您现在有一个位置列表,可以将其设置为可设计。ProteinMPNN只能接受应该固定的位置字典。使用以下python脚本创建包含固定位置的jsonl文件,以字典格式。
python ~/ProteinMPNN/helper_scripts/make_fixed_positions_dict.py --specify_non_fixed \
--position_list "1 3 4 6 7 8 10 11 13 14 17 18 30 31 33 34 37 40" --chain_list "A" \
--input_path input/7jzm.jsonl --output_path 7jzm_fixed_pos.jsonl
3.4 现在我们可以使用选定的残基运行ProteinMPNN。此外,这次我们想输出每个残基的得分,以了解哪些点突变对序列得分贡献最大。
mkdir 7jzm_designs
python ~/ProteinMPNN/protein_mpnn_run.py --jsonl_path 7jzm.jsonl \
--chain_id_jsonl 7jzm_assigned.jsonl --fixed_positions_jsonl 7jzm_fixed_pos.jsonl \
--out_folder 7jzm_designs --num_seq_per_target 10 --sampling_temp "0.1" \
--seed 0 --batch_size 1 --save_score 1 --save_probs 1
在目录7jzm_design
中将创建三个输出目录。在7jzm_designs/seqs/
中,我们将再次找到以fasta格式保存的设计序列。
gedit 7jzm_designs/seqs/7jzm.fasta
现在,序列分数和全局分数应该有所不同,因为这次我们只设计了蛋白质的一部分。
3.5 在Jupyter notebook会话中,我们可以交互地绘制氨基酸概率。JupyterLab是一种用于编码的交互式界面,允许我们轻松更改和运行代码。可以通过运行以下命令启动notebook。
jupyter lab scripts/plot_probs.ipynb
通过单击相应字段中的播放/运行按钮或按Ctrl+Enter键执行两个脚本块。第一个块绘制了复合物所有残基的输出氨基酸概率。在第二个块中,我们指定了重新设计的位置。现在,我们可以调查我们感兴趣的每个位置的单个分数。
根据个人的先验知识,可以在Python notebook中完全运行ProteinMPNN并绘制结果。代码示例可在ProteinMPNN/colab_notebooks/中找到,并根据需要进行定制。
参考
^meilerlab
https://meilerlab.org/wp-content/uploads/2022/12/protein_mpnn_tutorial_Nov2022.pdf