RFdiffusion使用

设计无条件单体

#设计无条件单体,unconditional monomer
./scripts/run_inference.py 'contigmap.contigs=[150-150]'
#contigmao.contigs=[a-b],指定长度在a到b
inference.output_prefix=test_outputs/test inference.num_designs=10
#对长度为150aa的蛋白质进行无条件设计,

给模体设计支架

任何以字母为前缀的内容都表示这是一个主题,该字母对应于输入pdb文件中的链字母。例如,A10-25属于相应输入pdb中的残数(‘A’,10),(‘A’,11)…(‘A’,25)
任何没有字母前缀的东西都表示要构建蛋白质。这可以作为一个长度范围输入。这些长度范围在rf扩散推理的每次迭代随机采样
要指定断链,我们使用/0。

#给模体设计支架
contigmap.length=55-55
#指定长度55
contigmap.contigs=[5-15/A10-25/30-40/0 B1-100]
#在A链10-25号残基N端设计5-15个残基,C端设计30-40个残基
#/0表示断链;B1-100 被用作一个独立的蛋白质区域,与A链上的A10-25区域通过一个链断裂(由/0表示)分隔开来。这意味着在设计新的蛋白质结构时,模型将尝试在A链的A10-25区域和B链的B1-100区域之间建立适当的连接,同时保持它们在结构上的独立性
#“活性位点”模型可将非常小的基序保持在适当位置
inference.ckpt_override_path=models/ActiveSite_ckpt.pt
#对于诸如酶活性位点之类的脚手架极简位点,能够更好地保持较小的基序,并更好地生成硅成功。
#如果您的输入函数motif非常小,我们建议使用这个模型。
#The inpaint_seq flag,蛋白融合、接面残基优化、隐藏序列身份
#在两种蛋白质融合时帮助调整氨基酸的性质,以确保融合后的蛋白质具有合适的结构和功能。在这种情况下,一些在融合前位于蛋白质表面的氨基酸(通常是极性氨基酸)可能需要变成疏水氨基酸,以适应蛋白质的内部核心区域。通过使用 contigmap.inpaint_seq 标志,我们可以隐藏这些氨基酸的序列身份,让 RFdiffusion 算法自动调整和优化这些位置的氨基酸。
contigmap.inpaint_seq=[A1/A30-40]
#其中 A1 表示隐藏第一个氨基酸的序列身份,A30-40 表示隐藏从第30到第40个氨基酸的序列身份(包括第30和第40个氨基酸)。

部分扩散

#部分扩散,Partial diffusion
#More noise == more diversity.
'contigmap.contigs=[100-100/0 B1-150]' diffuser.partial_T=20
#加噪声和去噪声,增加多样性
#因此我们指定 [100-100],即对所有 100 个残基进行噪声处理

#也可以指定部分序列保持固定
#在螺旋肽结合的背景下,如果你已经将螺旋肽序列穿入理想螺旋,现在想要使复合物多样化,从而优化螺旋
'contigmap.contigs=[100-100/0 20-20]' 'contigmap.provide_seq=[100-119]' diffuser.partial_T=10
#在这种情况下,20aa 链是螺旋肽。
#contigmap.provide_seq 输入是零索引的,您可以提供一个范围(因此 100-119 是一个包含范围,揭示了肽的整个序列)。可以提供多个序列范围,用逗号分隔,例如“contigmap.provide_seq=[172-177,200-205]”。

'contigmap.contigs=["172-172/0 34-34"]' diffuser.partial_T=10 inference.num_designs=10 'contigmap.provide_seq=[172-205]'
#固定172-205这些残基;34个残基是螺旋肽,对前172个残基进行噪声处理,优化结构

'contigmap.contigs=["172-172/0 34-34"]' diffuser.partial_T=10 inference.num	_designs=10 'contigmap.provide_seq=[172-177,200-205]'
#固定172到177和200到205共12个残基;34个残基是螺旋肽,对前172个残基进行噪声处理,优化结构

binder 设计

但是,这可能不是制作结合剂的最佳方法。由于扩散在某种程度上需要大量计算,因此我们需要尝试使其尽可能快。如果目标很大(并且大多数感兴趣的目标,例如细胞表面受体往往非常大),则提供未裁剪的整个目标将使扩散非常缓慢。加快结合剂设计的一种行之有效的方法是裁剪所需界面位置周围的目标蛋白。但是!这会产生一个问题:如果您裁剪目标并可能暴露在裁剪之前被埋藏的疏水核心残基,您如何保证结合剂将到达目标表面上的预期界面位置,而不是瞄准您刚刚人工创建的诱人的疏水斑块?

我们通过为模型提供我们所谓的“热点残基”来解决这个问题。我们在本 README 文件中前面提到的复杂模型都已使用热点残基进行了训练,在这种训练方案中,在每个示例中,模型都会被告知目标蛋白上与目标接触的残基(即作为界面一部分的残基)。模型很容易学会它应该制作一个涉及这些热点残基的界面。然后在推理时,我们可以提供我们自己的热点残基来定义结合剂必须接触的区域。这些指定如下:“ppi.hotspot_res=[A30,A33,A34]”,其中 A 是热点残基在输入 pdb 文件中的链 ID,数字是热点残基在输入 pdb 文件中的残基索引。

最后,据观察,默认的 RFdiffusion 模型通常主要生成螺旋状结合物。这些具有很高的计算和实验成功率。但是,在某些情况下可能需要其他类型的拓扑结构。为此,我们提供了一个“beta”模型,该模型可以生成更多种类的拓扑结构,但尚未经过广泛的实验验证。请自行承担风险尝试此方法:

inference.ckpt_override_path=models/Complex_beta_ckpt.pt
可以在 ./examples/design_ppi.sh 中找到使用 RFdiffusion 进行结合物设计的示例。

#binder design
./scripts/run_inference.py 'contigmap.contigs=[B1-100/0 100-100]' inference.output_prefix=test_outputs/binder_test inference.num_designs=10
#这将生成针对 B 链 1-100 个残基的 100 个残基长的结合剂
'ppi.hotspot_res=[A30,A33,A34]'
#指定热点残基,来定义结合区域必须接触的区域;A是输入pdb文件中热点残基的链ID

#默认模型主要是设计螺旋结构的binder,计算和实验中成功率较高
#其他拓扑结构,“beta”模型,生成的拓扑结构更加多样化,但是未经广泛实验验证
inference.ckpt_override_path=models/Complex_beta_ckpt.pt
#慎重

设计binder的实际考虑

Practical Considerations for Binder Design,设计binder的实际考虑:

1、选择目标位点
目标蛋白上的每个位点并非都是结合剂设计的良好候选者。对于一个位点而言,它应该具有 >~3 个疏水残基,以便结合剂与之相互作用。与带电极性位点结合仍然相当困难。与附近有聚糖的位点结合也很难,因为它们在结合时通常会变得有序,而你会因此受到能量打击。从历史上看,结合剂设计也避免了非结构化环(loops的一种,更加灵活没有稳定的三维结构),目前尚不清楚这是否仍然是一项要求,因为 RFdiffusion 已用于结合与非结构化环有很多共同之处的非结构化肽。

  1. 截断你的目标蛋白质

rf扩散在运行时的规模为O(N^2)其中N是系统中残留物的数量。因此,截断大型目标是一个非常好的主意,这样您的计算就不会不必要地昂贵。rf扩散和所有下游步骤(包括AF2)的设计允许截断目标。截断目标是一门艺术。对于一些靶标,如多结构域胞外膜,自然截断点是两个结构域由柔性连接物连接的地方。对于其他蛋白质,如病毒刺突蛋白,这个截断点不太明显。一般来说,您希望保留二级结构并尽可能少地引入断链。你也应该试着在目标部位的每一侧留下10A左右的目标蛋白。我们建议使用PyMol截断目标蛋白。

  1. 选择热点

热点是我们集成到模型中的一个功能,允许控制绑定器将与之交互的目标上的站点。在本文中,我们将热点定义为靶蛋白上的残基,它与粘合剂的距离在10A Cbeta范围内。在目标上识别的所有热点中,0-20%的热点实际上提供给了模型,其余的被屏蔽。这对于理解如何在推理时选择热点非常重要。模型预计必须进行比您指定的更多的接触。我们通常建议在3-6个热点之间,您应该在生成数千个设计之前运行一些试点运行,以确保您提供的热点数量将提供您喜欢的结果。

如果你已经运行了之前的PatchDock RifDock粘合剂设计管道,对于RFdiffusion论文,我们选择我们的热点作为目标的PatchDock残基。

  1. 粘合剂设计量表

在该文中,我们为每个目标生成了约10000个RFdiffusion结合骨架。从这些骨架中,我们使用ProteinMPNN-FastRelax(下文将详细介绍)生成了每个骨架的两个序列。然后,我们使用AF2(下文也将详细介绍)对这些约20000个设计进行筛选,并使用初始猜测和目标模板(下文也将详细介绍)。

鉴于我们在该文中观察到的高成功率,对于某些目标,在一次活动中生成约1000个RFdiffusion结合骨架可能就足够了。您需要的是获得足够多的通过pAE_interaction < 10(将在“结合骨架过滤”部分中详细介绍)筛选的设计,以便能够用这些成功的设计填充DNA订单。我们发现,未通过pAE_interaction < 10筛选的设计不值得订购,因为它们在实验中很可能无法正常工作。

  1. binder的序列设计

你可能已经注意到,由RFdiffusion设计的binder产生了一个聚甘氨酸序列。这不是一个bug。RFdiffusion是一种骨干生成模型,不能为设计区域生成序列,因此,必须使用另一种方法为结合物分配序列。本文采用ProteinMPNN-FastRelax协议进行序列设计。我们建议您也这样做(nrbennet/dl_binder_design (github.com))。该协议的代码可以在GitHub的repo中找到。虽然我们没有发现协议的FastRelax部分产生了与rifdock生成的码头相比的巨大的硅成功率提高,但它仍然是增加每个RFdiffusion骨干(计算成本很高)的成功几率的好方法。如果您希望在没有FastRelax步骤的情况下简单地在粘合剂上运行ProteinMPNN,这将工作得很好,但计算成本会更高。

  1. binder设计筛选

binder设计流程中最重要的部分之一是筛选步骤,以评估binder是否实际预测可以工作。在本文中,我们使用带有初始猜测目标模板的AF2进行过滤,此协议的脚本可在此处获得(nrbennet/dl_binder_design (github.com))。我们发现pae_interaction < 10的过滤可以很好地预测粘合剂的工作。

#!/bin/bash
#BATCH --nodes=1 # allocate 1 nodes for the job
#SBATCH --ntasks-per-node=16  # set the number of tasks (processes) per node
#SBATCH --mem=32GB
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --job-name=4B7Q_RFdifussion # set name of job
#SBATCH --output=run.log  # set batch script's standard output

source /project/zengjw/miniconda3/etc/profile.d/conda.sh
#conda.sh 脚本(这个脚本通常用于设置 Conda 环境)会被加载到当前的 shell 环境中,从而使得 Conda 的命令和环境变量可以在当前的 shell 会话中使用
conda activate SE3nv
/project/zengjw/qinlw/RFdiffusion/scripts/run_inference.py 
'contigmap.contigs=[10-25/0 B83-469]'
#B83-469:师兄提示过,尽量改成B链
#前82个氨基酸在结构中没有显示出来,PBD文件里有
#diffuser.partial_T=20
#
'ppi.hotspot_res=[B247, B277, B148, B149]'
#223野生型没参与药物结合(文章没指出)
#148和149,作者建议作为额外,如果加了这两个,需不需要活性口袋周围都加上(RFdiffusion建议3-6个热点)
inference.output_prefix=/project/zengjw/qinlw/project_outputs/test 
inference.input_pdb=/project/zengjw/qinlw/4B7Q_1.pdb 
inference.num_designs=10

4B7Q_神经氨酸酶三个预测脚本

#wangyang
#!/bin/bash
#BATCH --nodes=1 # allocate 1 nodes for the job
#SBATCH --ntasks-per-node=16  # set the number of tasks (processes) per node
#SBATCH --mem=32GB
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --job-name=4B7Q_1_RFdifussion # set name of job
#SBATCH --output=run.log  # set batch script's standard output

source  /home/wangyang/miniconda3/etc/profile.d/conda.sh
conda activate SE3
/project/wangyang/qinlw/RFdiffusion/scripts/run_inference.py 'contigmap.contigs=[B83-469/0 50-70]' 'ppi.hotspot_res=[B247,B277,B148,B149]' inference.output_prefix=/project/wangyang/qinlw/test_1/project_outputs/test inference.input_pdb=/project/wangyang/qinlw/4B7Q_B.pdb inference.num_designs=1000
source /home/wangyang/miniconda3/etc/profile.d/conda.sh
conda activate SE3
/project/wangyang/qinlw/RFdiffusion/scripts/run_inference.py 'contigmap.contigs=[B83-469/0 15-25]' 'ppi.hotspot_res=[B296,B149]' inference.output_prefix=/project/wangyang/qinlw/test_2/project_outputs_2/test inference.input_pdb=/project/wangyang/qinlw/4B7Q_B.pdb inference.num_designs=1000
source  /home/wangyang/miniconda3/etc/profile.d/conda.sh
conda activate SE3
/project/wangyang/qinlw/RFdiffusion/scripts/run_inference.py 'contigmap.contigs=[B83-469/0 50-70]' 'ppi.hotspot_res=[B88,B235,B146]' inference.output_prefix=/project/wangyang/qinlw/test_3/project_outputs/test inference.input_pdb=/project/wangyang/qinlw/4B7Q_B.pdb inference.num_designs=1000

折叠调节

在特定拓扑结构上调节粘合剂设计(或单体生成)非常有效。这是通过提供(部分)二级结构块邻接信息(block adjacency information,不同结构单元螺旋或折叠之间的连接关系)来实现的(对于已经训练到以此为条件的模型)。

我们仍然在研究在推理时生成该输入的最佳方法,但是现在,我们已经决定直接从pdb结构生成输入。这允许输出拓扑的“低分辨率”规范(例如,我想要一个TIM桶(由多个β折叠片和α螺旋交替排列形成),但我不关心驻留的精确位置)。在’ helper_scripts/ ‘中,有一个名为’ make_secstruc_adj.py '的脚本,可以这样使用:

#pdb文件转pytorch文件(包含二级结构和块邻接信息)
./make_secstruc_adj.py \
#RFdiffusion/helper_scripts文件夹下脚本make_secstruc_adj.py,就是转换输入文件
--input_pdb ./2KL8.pdb \
#输入pdb文件(4B7Q_B.pdb)
--out_dir /my/dir/for/adj_secstruct
#输出的pytorch文件

#pdb文件夹转pytorch文件夹
./make_secstruc_adj.py \
--pdb_dir ./pdbs/ \
#输入的支架库(文件夹)
--out_dir /my/dir/for/adj_secstruct
#输出:能输入支架预测的支架库pytorch文件

这将处理单个pdb或一个pdb文件夹,并输出包含二级结构块邻接信息的pytorch文件,准备进入模型。现在(尽管这可能不是必需的),您还应该为目标蛋白质生成这些文件(如果您正在执行PPI),并将其提供给模型。然后你可以在推理中使用这些,如下所示:

./scripts/run_inference.py \ 
#预测脚本
inference.output_prefix=./scaffold_conditioned_test/test \
#输出目录
scaffoldguided.scaffoldguided=True \
#启用,支架引导(预测使用支架库信息来生成蛋白质结构)
scaffoldguided.target_pdb=False \
#指定:不使用目标蛋白pdb文件
scaffoldguided.scaffold_dir=./examples/ppi_scaffolds_subset
#指定支架库文件的目录(两万个支架)

如上所述,对于PPI,您需要提供一个目标蛋白,以及它的二级结构块邻接信息。这可以通过添加:

scaffoldguided.target_pdb=True \
#使用目标蛋白pdb文件
scaffoldguided.target_path=input_pdbs/insulin_target.pdb \
#目标蛋白pdb文件路径
inference.output_prefix=insulin_binder/jordi_ss_insulin_noise0_job0 \
#输出文件目录
'ppi.hotspot_res=[A59,A83,A91]' \
scaffoldguided.target_ss=target_folds/insulin_target_ss.pt \
#二级结构信息文件路径
scaffoldguided.target_adj=target_folds/insulin_target_adj.pt
#块邻接信息文件路径

要生成这些块邻接性二级结构输入,可以使用helper脚本。

这将产生3-螺旋束(HB)胰岛素的目标。

对于ppi,可能也值得添加这个标志:

scaffoldguided.mask_loops=False
#不屏蔽环结构(不忽略环结构的细节)

理解这一点非常重要。在训练过程中,我们屏蔽了一些二级结构和块邻接。这是很方便的,因为它允许我们在推理时很容易地添加额外的残基,而不必为每个残基指定精确的二级结构。例如,如果你想制作一个长3螺旋束(HB),你可以掩盖环,并在该环中添加例如20个更多的“掩盖”标记。然后,模型将(可能)选择将这些残基中的15个形成螺旋(以延长3HB),然后5个形成环。但是,你不需要指定这个,这很好。这样做的方法是:

scaffoldguided.mask_loops=True \
#忽略环结构(的细节信息)
scaffoldguided.sampled_insertion=15 \
#在环中插入最多15个残基。由于之前已经忽略了环结构的细节,模型在生成蛋白质结构时可以自由地决定这15个残基的具体结构
scaffoldguided.sampled_N=5 \
#在N端最多插入5个残基	
scaffoldguided.sampled_C=5
#在C端最多插入5个残基

这将在每次推理运行时,采样多达15个残基以插入到3HB(螺旋束)输入的loop环中,并在N和C端添加多达5个残基。如果您没有大量的pdb集来创建块邻接,则此策略非常有用。例如,我们展示了使用此策略可以从单个启动pdb生成大量加长的TIM桶。然而,对于PPI,如果您使用的是提供的支架集,那么就没有必要这样做(因为有太多的支架可以开始使用,生成额外的多样性并不是特别必要的)。

这段话的意思是:在每次推理运行时,系统会尝试在您的3HB输入中的环状结构中插入最多15个残基,并在N端和C端各插入最多5个残基。这种策略非常有用,特别是当您没有大量PDB文件来建立块邻接关系时。例如,我们展示了通过这种策略,可以从一个起始的PDB文件生成许多延长的TIM桶。然而,对于蛋白质-蛋白质相互作用(PPI),如果您使用提供的支架集,可能就不需要这种策略,因为支架集本身已经提供了足够多的起始结构,生成额外的多样性并不是特别必要。

解释:

  1. 3HB输入:指的是由三个螺旋组成的螺旋束结构作为输入。
  2. 环状结构:指的是连接蛋白质中不同二级结构单元(如螺旋或β折叠)的区域。
  3. N端和C端:N端是蛋白质的氨基端(开始端),C端是羧基端(结束端)。
  4. 块邻接关系:指的是在蛋白质结构中,不同的结构单元(如螺旋、折叠等)之间的连接关系。
  5. TIM桶:一种常见的蛋白质结构,由多个β折叠片和α螺旋交替排列形成。

最后,如果你有一个大的块邻接/二级结构文件目录,但不想使用它们,你可以将你想使用的文件创建一个.txt文件,并传递:

scaffoldguided.scaffold_list=path/to/list
#

对于PPI,我们一直看到减少推理时增加的噪声可以改善设计。这是以牺牲多样性为代价的,但是,考虑到支架集是巨大的,这可能不是太重要。因此,我们建议降低噪音。0.5可能是一个不错的折衷方案:

denoiser.noise_scale_ca=0.5 \
#C原子噪声=0.5(0.5是一个百分比值:即原本噪声强度的一半)
denoiser.noise_scale_frame=0.5
#噪声=0.5

这只是将我们添加到C原子噪声(noise_scale_ca)框架噪声(noise_scale_frame)中的噪声量缩放0.5。

另外一个带有支架指导设计的PPI示例可以在这里找到:./examples/ design_ppi_scaffded .sh

#!/bin/bash
#这里我们设计binder,并且我们从指定输入里指定了“粗粒度模型”(指的是对细节的简化或抽象。在分子模拟和结构生物学中,粗粒度模型(course-grained models)通常忽略原子级别的细节,而关注更大尺度的结构特征,如蛋白质的二级结构单元或结构域的排列。)
#我们指定目标蛋白的路径,在这个例子中是胰岛素受体,以及输出的文件路径
#我们告诉RFdiffusion我们想要“scaffold指导”预测(我们想要指定蛋白质的折叠)
#我们告诉RFdifusion我们想要结合在输入蛋白哪个位置,这个例子中是A链的59号,83号和91号
#我们告诉RFdffusion我们想要给目标蛋白设计一个binder,并且提供“二级结构信息”和“块邻近信息”这个可能不是必须的。
#我们提供了不同支架目录的路径(我们提供了一些供你使用,来自Cao et al.,2022)
#我们生成10个,并减少噪音到0(这提高了设计的质量)
../scripts/run_inference.py scaffoldguided.target_path=input_pdbs/insulin_target.pdb \
#输入目标蛋白pdb文件
inference.output_prefix=example_outputs/design_ppi_scaffolded scaffoldguided.scaffoldguided=True 'ppi.hotspot_res=[A59,A83,A91]' \
#指定蛋白支架设计,热点残基
scaffoldguided.target_pdb=True \
#提供目标蛋白的pdb文件
scaffoldguided.target_ss=target_folds/insulin_target_ss.pt scaffoldguided.target_adj=target_folds/insulin_target_adj.pt \
#指定粗粒度模型
scaffoldguided.scaffold_dir=./ppi_scaffolds/ \
#支架集目录。
inference.num_designs=10 \
denoiser.noise_scale_ca=0 denoiser.noise_scale_frame=0
#平移噪声0,旋转噪声0

选择的1000个pdb文件所在位置:/home/wangyang/software/Binder_Design_Protocols/supplemental_files/scaffolds/select_scaffolds/RFdiffusion转换的两个pt文件对应位置:/project/wangyang/RFdiffusion/scaffold

4B7Q蛋白_基于支架的设计流程

#zengjw
#必要输入文件的生成
#激活proteinmpnn_binder_design环境
conda activate proteinmpnn_binder_design
#获得“粗粒度模型”pytorch文件
/project/wangyang/qinlw/RFdiffusion/helper_scripts/make_secstruc_adj.py --input_pdb 4B7Q_B.pdb --out_dir /project/wangyang/qinlw/scafold_4b7q
#获得支架集蛋白质的“粗粒度模型”pytorch文件
/project/wangyang/qinlw/RFdiffusion/helper_scripts/make_secstruc_adj.py --pdb_dir /project/wangyang/qinlw/select_scaffold.pdbs/ --out_dir /project/wangyang/qinlw/select_scaffold
#预测
#激活环境SE3nv
conda activate SE3nv
/project/zengjw/qinlw/RFdiffusion/scripts/run_inference.py scaffoldguided.target_path=./4B7Q_B.pdb inference.output_prefix=./test_scafold_outputs scaffoldguided.scaffoldguided=True 'ppi.hotspot_res=[B296,B149]' scaffoldguided.target_pdb=True scaffoldguided.target_ss=./4b7q_scafold/4B7Q_B_ss.pt scaffoldguided.target_adj=./4b7q_scafold/4B7Q_B_adj.pt scaffoldguided.scaffold_dir=./select_scaffold scaffoldguided.mask_loops=False inference.num_designs=10 denoiser.noise_scale_ca=0 denoiser.noise_scale_frame=0	
#服务器上我跑的是:ca=0.5,frame=0.5;

baker-laboratory/RoseTTAFold-All-Atom (github.com)

proteinmpnn

Improving de novo protein binder design with deep learning

环境搭建

参数详解

silent file静默文件:本质上是一堆压缩的.pdb文件

允许您从pdb切换到静默文件并返回的两个命令如下:

#zengjw
/project/zengjw/qinlw/silent_tools-master/silentfrompdbs *.pdb > my_designs.silent
<base_dir>/silentextract all_structs.silent

注意:一些静默工具需要PyRosetta,如果在Python环境中运行而不访问PyRosetta,则会失败。

AF2权重模型(预训练参数)下载:

cd <base_dir>/af2_initial_guess
mkdir -p model_weights/params && cd model_weights/params
wget https://storage.googleapis.com/alphafold/alphafold_params_2022-12-06.tar
tar --extract --verbose --file=alphafold_params_2022-12-06.tar 

结合剂设计管道需要蛋白质结合剂骨架作为输入。生成这些主干的推荐方法是使用RFdiffusion,它将为您提供一个.pdb文件目录。可以将这些文件转换为静默文件,这种文件比pdb文件目录更节省内存,也更易于使用(系统管理员会感谢您使用它们),也可以将这些.pdb文件目录按原样与该管道一起使用,可以单独使用-pdbdir标志,也可以将-pdbdir标志与-runlist标志结合使用

FastRelax 循环是 Rosetta 软件套件中的一个优化过程,用于精炼和优化蛋白质结构。具体来说,FastRelax 通过一系列的能量最小化步骤来调整蛋白质的构象,以使其更接近于自然状态。

#example_proteinmpnn_pdbdir.py
#!/bin/bash
rm check.point 2>/dev/null
#删除 check.point 文件,如果文件不存在则忽略错误信息
../mpnn_fr/dl_interface_design.py -pdbdir inputs/pdbs -relax_cycles 0 -seqs_per_struct 4 -outpdbdir example3_out
# 运行 dl_interface_design.py 脚本,-relax_cycles参数是设置`FastRelax循环`的次数,-seqs_per_struct参数是每轮生成多少proteinMPNN序列

鲁棒性(Robustness)指的是一个系统或程序在面对异常或非预期输入时,能够保持正常运行而不崩溃或产生错误结果的能力。(强行运行性)

<base_dir>/mpnn_fr/dl_interface_design.py -h
#对非唯一索引具有“鲁棒性”
#不计算松弛侧链,AF2会补充

proteinMPNN可以固定一些区域:

python <base_dir>/helper_scripts/addFIXEDlabels.py --pdbdir /dir/of/pdbs --trbdir /dir/of/trbs --verbose
#该脚本将检测FIXED标签并保持这些序列位置固定

文件分类脚本

#!/bin/bash
mkdir -p pdb_files
mkdir -p trb_files
find . -maxdepth 1 -type f -name "*.pdb" -exec mv {} pdb_files/ \;
find . -maxdepth 1 -type f -name "*.trb" -exec mv {} trb_files/ \;
#find . 从当前目录开始查找文件和目录。
#-maxdepth 1:限制查找的深度为当前目录,即不进入子目录。
#-type f:只查找文件(不包括目录)。
#-name "*.pdb":查找文件名以 .pdb 结尾的文件。
#-exec mv {} pdb_files/ \;:对找到的每个文件执行 mv 命令,将文件移动到 pdb_files 目录。
#-exec:表示对找到的每个文件执行后面的命令。
#{}:是一个占位符,表示 find 命令找到的每个文件。
#;:表示 -exec 选项的结束。注意 \; 前面的反斜杠是为了转义分号,使其不被 shell 解释。

4B7Q_proteinMPNN脚本

#zengjw
mkdir -p 
#-p,如果父目录不在就创建父目录

#slurm脚本在每个scaffold任务下,/project/zengjw/qinlw/scafold_test_1
vim proteinmpnn_slurm

#!/bin/bash
#BATCH --nodes=1 # allocate 1 nodes for the job
#SBATCH --ntasks-per-node=16  # set the number of tasks (processes) per node
#SBATCH --mem=32GB
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --job-name=4B7Q_1_RFdifussion # set name of job
#SBATCH --output=run.log  # set batch script's standard output

#激活环境proteinmpnn_binder_design
conda activate proteinmpnn_binder_design

#pdb文件转silent文件
/project/zengjw/qinlw/silent_tools-master/silentfrompdbs /project/zengjw/qinlw/scafold_test_1/test_scafold_outputs/pdb_files/*.pdb > /project/zengjw/qinlw/scafold_test_1/design.silent
source  /project/zengjw/miniconda3/etc/profile.d/conda.sh

#添加固定残基(FIXED标签)
python /project/zengjw/qinlw/dl_binder_design-main/helper_scripts/addFIXEDlabels.py --pdbdir /project/zengjw/qinlw/scafold_test_1/test_scafold_outputs/pdb_files/ --trbdir /project/zengjw/qinlw/scafold_test_1/test_scafold_outputs/trb_file/ --verbose

#proteinMPNN预测
python /project/zengjw/qinlw/dl_binder_design-main/mpnn_fr/dl_interface_design.py -silent /project/zengjw/qinlw/scafold_test_1/design.silent

#AF2预测,激活环境dl_binder_design
conda activate dl_binder_design
cd /project/zengjw/qinlw/scafold_test_1/
python /project/zengjw/dl_binder_design-main/af2_initial_guess/predict.py -silent /project/zengjw/qinlw/scafold_test_1/design.silent
#/project/zengjw/qinlw/scafold_test_2
vim proteinmpnn_slurm
#!/bin/bash
#BATCH --nodes=1 # allocate 1 nodes for the job
#SBATCH --ntasks-per-node=16  # set the number of tasks (processes) per node
#SBATCH --mem=32GB
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --job-name=4B7Q_2_RFdifussion # set name of job
#SBATCH --output=run.log  # set batch script's standard output

#激活环境proteinmpnn_binder_design
conda activate proteinmpnn_binder_design

#pdb文件转silent文件
/project/zengjw/qinlw/silent_tools-master/silentfrompdbs /project/zengjw/qinlw/scafold_test_2/test_scafold_outputs/pdb_files/*.pdb > /project/zengjw/qinlw/scafold_test_2/design.silent
source  /project/zengjw/miniconda3/etc/profile.d/conda.sh

#添加固定残基(FIXED标签)
python /project/zengjw/qinlw/dl_binder_design-main/helper_scripts/addFIXEDlabels.py --pdbdir /project/zengjw/qinlw/scafold_test_2/test_scafold_outputs/pdb_files/ --trbdir /project/zengjw/qinlw/scafold_test_2/test_scafold_outputs/trb_file/ --verbose

#proteinMPNN预测
python /project/zengjw/qinlw/dl_binder_design-main/mpnn_fr/dl_interface_design.py -silent /project/zengjw/qinlw/scafold_test_2/design.silent

#AF2预测,激活环境dl_binder_design
conda activate dl_binder_design
cd /project/zengjw/qinlw/scafold_test_2/
python /project/zengjw/dl_binder_design-main/af2_initial_guess/predict.py -silent /project/zengjw/qinlw/scafold_test_2/design.silent
#/project/zengjw/qinlw/scafold_test_3
vim proteinmpnn_slurm
#!/bin/bash
#BATCH --nodes=1 # allocate 1 nodes for the job
#SBATCH --ntasks-per-node=16  # set the number of tasks (processes) per node
#SBATCH --mem=32GB
#SBATCH --partition=gpu
#SBATCH --gres=gpu:1
#SBATCH --job-name=4B7Q_3_RFdifussion # set name of job
#SBATCH --output=run.log  # set batch script's standard output

#激活环境proteinmpnn_binder_design
conda activate proteinmpnn_binder_design

#pdb文件转silent文件
/project/zengjw/qinlw/silent_tools-master/silentfrompdbs /project/zengjw/qinlw/scafold_test_3/test_scafold_outputs/pdb_files/*.pdb > /project/zengjw/qinlw/scafold_test_3/design.silent
source  /project/zengjw/miniconda3/etc/profile.d/conda.sh

#添加固定残基(FIXED标签)
python /project/zengjw/qinlw/dl_binder_design-main/helper_scripts/addFIXEDlabels.py --pdbdir /project/zengjw/qinlw/scafold_test_3/test_scafold_outputs/pdb_files/ --trbdir /project/zengjw/qinlw/scafold_test_3/test_scafold_outputs/trb_file/ --verbose

#proteinMPNN预测
python /project/zengjw/qinlw/dl_binder_design-main/mpnn_fr/dl_interface_design.py -silent /project/zengjw/qinlw/scafold_test_3/design.silent

#AF2预测,激活环境dl_binder_design
conda activate dl_binder_design
cd /project/zengjw/qinlw/scafold_test_3/
python /project/zengjw/dl_binder_design-main/af2_initial_guess/predict.py -silent /project/zengjw/qinlw/scafold_test_3/design.silent

AF2打分各参数意义

在这里插入图片描述

1.这些参数哪些比较重要

根据文章“ Improving de novo Protein Binder Design with Deep Learning.”提供的git仓库可以得知,pae_interaction参数,是该实验中最具预见性的分数。

在这里插入图片描述

2.这些参数值大约在什么范围代表设计比较好?

RMSD(Root Mean Square Deviation,均方根偏差) 是衡量两个结构之间相似性的一种常见方法。具体来说,RMSD测量的是两个结构中相对应原子位置之间的平均距离。

  1. 对比两个结构中的所有对应原子。
  2. 计算每个对应原子对之间的欧几里得距离。
  3. 将这些距离平方后求平均值。
  4. 取这个平均值的平方根,得到最终的RMSD值。
  1. binder_aligned_rmsd (Root Mean Square Deviation for the Binder): 这是衡量binder预测结构与真实结构在空间对齐后的均方根偏差(Root Mean Square Deviation)。RMSD值越低,表明模型预测的binder结构与实际结构越接近。值越小,说明预测的精度越高。通常,RMSD值低于2.0 Å(埃)通常被认为是很好的。

target_aligned_rmsd: 类似于binder_aligned_rmsd,但是衡量的是目标蛋白的预测结构与真实结构的偏差。

PAE(Predicted Aligned Error)指的是预测对齐误差,它估计的是不同残基之间距离预测的准确性

  1. pae_binder (Per-residue Absolute Error for the Binder)和pae_target (Per-residue Absolute Error for the Target): pae_binder针对的是binder部分,而pae_target针对的是目标蛋白质。较低的PAE值意味着更高的预测准确性。理想的PAE值取决于具体情况,但一般认为低于5Å的值是较好的。

  2. pae_interaction: 这个参数反映了蛋白质与binder之间相互作用界面残基的预测误差。较低的PAE值通常意味着更可靠的界面预测。

pLDDT(Predicted Local Distance Difference Test)是一个0到100的分数,评估局部结构的置信度。较高的分数表示更高的置信度。对于良好的设计,binder和target的pLDDT值应该尽可能高,通常高于90被认为是高质量的预测。

  1. plddt_binder (Predicted Local Distance Difference Test for the Binder): 这是预测结构中binder各部分的置信度,范围从0到100。分数高于90通常表示非常高的模型置信度。

plddt_target (Predicted Local Distance Difference Test for the Target): 同plddt_binder,但针对目标蛋白。

plddt_total: 整个复合物的PLDDT分数,包括binder和目标蛋白。较高的总PLDDT分数表示整个复合物结构的高置信度。

​ 5. time: 表示完成这一预测所需的时间。

关于参数值范围,这些参数的理想值通常取决于具体的研究目标和标准。一般来说,对于RMSD,小于2.0 Å是优秀的;对于PLDDT,分数大于90通常视为结构置信度高;而对于PAE,较低的值表示更精确的预测。

3.如何使得参数更好?

“好”的理解:

如果指定的是binder同target蛋白相互结合的空间契合性,pae_interaction参数越小越好;

如果指定是pdb文件中binder结构信息,plddt分数越高,和实验测得的结构越相似越好;

如果指定的是binder和target蛋白动力学模拟状态下结构变化最稳定,RMSD分数越小,结构越稳定;

借助Protein_MPNN对序列进行优化,是目前设计优化binder最常用的方法之一。然而,经设计后的binder参数表现出一定的随机性。所以通过多轮次筛选和优化被证明是一种有效的策略,旨在逐步提升binder的设计质量,以达到预期的生物活性和结构稳定性目标。

打分之后导出符合条件的pdb

silent_tools

conda activate proteinmpnn_binder_design
# ask how many things are in a silent file
/home/malixin/wangyang/silent_tools/silentls out.silent | wc -l   

#
/home/malixin/wangyang/silent_tools/silentfrompdbs ./*.pdb >

# extract a specific pdb from a silent file
silentextractspecific my.silent name_of_pdb_0001

/home/malixin/wangyang/silent_tools/silentextractspecific out.silent test_1006_dldesign_0_cycle1_af2pred

###流程
#1、查看pae小于10分有多少个
python counts.py
#2、输出到select.txt文件
python counts.py >> select.txt
#3、运行脚本解压PDB文件
. select.sh
#4、所有pdb文件移动至select文件夹
mkdir select
mv test* select

###shell脚本(select.sh)
#!/bin/bash

conda activate proteinmpnn_binder_design

while IFS= read -r line; do
    if [[ $line =~ test_[0-9]+_dldesign_0_cycle1_af2pred ]]; then
        x="${BASH_REMATCH[0]}"

        echo "Extracting $x from out.silent"

        /home/malixin/wangyang/silent_tools/silentextractspecific out.silent "$x"
    fi
done < ./select.txt
###

Rosetta interface interaction analyse

1、准备输入文件

1.1、快速修复输入PDB结构

使用Rosetta score_jd2对输入的PDB结构修复

wangyang账号的rosetta需要激活环境conda activate af2_binder_design

#安装好rosetta:1、git;2、官网linux版本

cd /home/malixin/wangyang/qinlw/EFNB2/outputs/test/last
# 对输入文件进行打分
score_jd2.linuxgccrelease -s ../select/*.pdb -no_optH false -ignore_unrecognized_res -out:pdb


1.2、准备运行参数文件

新建文件,输入以下参数来控制InterfaceAnalyzer计算模式:

  • 优化侧链模式(推荐使用!)
  • 非优化侧链模式(除非输入的结构已经是优化和能量最小化处理,避免使用)

以优化侧链模式的参数文件:pack_input_options.txt文件为例说明参数意义:

#specific options for InterfaceAnalyzer
-use_input_sc 
-compute_packstat true # 是否输出packstat值进行运算,评估蛋白作用界面的契合度。
-tracer_data_print true # 是否在屏幕上输出结果

# 蛋白质侧链优化选项。
-out:file:score_only pack_input_score.sc # 输出的打分文件名称
-pack_input true     # 是否对输入文件的相互作用界面进行氨基酸侧链重排优化?
-pack_separated true # 将每条蛋白质链分离,并进行侧链优化,这对界面ddG分析有用
-add_regular_scores_to_scorefile true # 是否使用标准打分函数?

#these are some tweeks that we have found helpful
-atomic_burial_cutoff 0.01 # 鉴别包埋极性原子的标准。
-sasa_calculator_probe_radius 1.4 # 蛋白表面探针的半径
-pose_metrics::interface_cutoff 8.0 # 蛋白-蛋白相互作用界面截断半径。设置越大,界面范围越大。

2. 运行InterfaceAnalyzer

InterfaceAnalyzer.linuxgccrelease

在3R2X模型中,甲型流感病毒H1N1亚型血凝素由A、B链组成的异源二聚体,HA结合蛋白为C链。我们将AB作为一个整体考虑,因此需额外加上fixedchains选项。

  • -fixedchains A B 代表:将A链与B链作为一个整体考虑,不对AB之间的相互作用进行分析。

打开终端,输入以下命令:

  • 如果需要使用非优化侧链的模式,将pack_input_options.txt替换为no_pack_input_options.txt即可。
  • 如果想要packstat值更收敛,需要加上: -packstat::oversample 100
cp ../../../../pack_input_options.txt ./
InterfaceAnalyzer.linuxgccrelease -s ./*.pdb @pack_input_options.txt
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐