RFDiffusion 潜力

太长不看:本文主要为已经对 RFDiffusion 有一定了解的用户介绍如何使用“引导势”。文中提供了数学描述、推荐的势设置以及命令行示例。
引言
RFDiffusion 是一种去噪扩散概率模型,通常简称为“DDPM”或“扩散模型”,它可以从头开始生成 3D 蛋白质骨架,既可以无条件生成,也可以根据各种约束条件生成。RFDiffusion 是一个非常强大的工具,**如果你知道如何使用它**,特别是**如果你知道如何将其与其他几个模型结合使用**,例如 LigandMPNN、RoseTTAFold、RoseTTAFold All Atom、AlphaFold-Multimer 等。该模型能够实现多种有趣的功能,例如单体的无条件生成、对称寡聚体的无条件生成、基序支架、用于精炼蛋白质结构的局部扩散、序列填充以及结合基序支架的结合剂设计。
该模型还可以通过各种**势**进行条件化。通过 RFDiffusion,我们可以例如,轻松生成对几乎任何目标蛋白具有高亲和力和高特异性的多个结合剂。用户可以尝试的第一个好例子是设计用于 PD-L1 蛋白的结合剂,以破坏其与 PD-1 蛋白的相互作用。这种相互作用有效地关闭了免疫细胞,阻止它们攻击癌细胞,因此通过设计对 PD-L1 具有高亲和力和高特异性的结合剂来破坏这种相互作用是治疗各种癌症的一种有用方法。
我们还可以将 RFDiffusion 与 ALphaFold-Multimer 等工具结合使用,以嫁接来自不同蛋白质的各种基序,并设计佐剂等。还有一种名为 RFDiffusion All Atom 的 RFDiffusion 版本,它可以设计具有与任何小分子靶标高度互补的结合口袋的蛋白质。这也可以与基序支架结合,以生成除了所需的小分子靶标结合口袋之外还具有所需功能基序的蛋白质。
在这篇文章中,您将找到使用 RFDiffusion 的势的介绍。这样的介绍尚未撰写,并且使用势是一种艺术形式,目前只有少数投入大量时间磨练使用该模型技能的研究人员才知道;因此,希望这能成为一个有用的参考。势的灵感来自分子动力学模拟,通常简称为“MD”。如果您刚刚开始使用 RFDiffusion 并且对使用该模型并非严格必要,则可以省略这些势。这篇文章更适合那些已经熟悉 RFDiffusion 的所有基本知识,并希望改进其结果并对模型输出进行更精细控制的高级用户。
理想情况下,至少其中一些潜力可以转移到最近发布的新的 RFDiffusion All Atom,或简称为“RFDiffusion-AA”中。因此,稍作努力,您也应该能够将这些信息中的一部分应用于 RFDiffusion-AA。这篇文章总结了我根据 RFDiffusion 代码库及其中的文档,以及文件 potentials.py
第 122、154 和 193 行引用的 Plumed v2.7 文档中整理出的信息。另请参阅 此 Plumed 参考。
描述各种势的数学
monomer_ROG
和binder_ROG
- 方程: 其中 是 Cα 原子的数量, 是第 个 Cα 原子的位置, 是 Cα 原子的质心。
- 势定义为: 其中 是权重参数。
dimer_ROG(二聚体回转半径)
:- 方程: 其中 和 分别是单体 1 和 2 的回转半径, 和 是每个单体的质心。
- 势定义为: 其中 是权重参数。
binder_ncontacts
和interface_ncontacts
- 方程: 其中 是原子 和 之间的距离, 和 是距离阈值, 和 是指数(默认 ,)。
- 势定义为: 其中 是权重参数。
monomer_contacts(单体接触)
:- 方程: 其中 是原子 和 之间的距离, 和 是距离阈值, 和 是指数(默认 ,)。
- 势定义为: 其中 是权重参数。
olig_contacts(寡聚体接触)
:- 方程:,其中是链中的残基与链中的残基之间的距离,和是距离阈值,而和是指数(默认,)。
- 势能定义为:,其中是链的数量,是每条链的残基数量,是链和的接触矩阵条目,是权重因子(链内接触为
weight_intra
,链间接触为weight_inter
)。
substrate_contacts(底物接触)
:- 方程
- 吸引项:,其中是蛋白质原子与任何底物原子之间的最小距离,和是距离阈值。
- 排斥项:,其中和是控制斥力强度和距离尺度的参数。
- 势能定义为:,其中是权重参数,是蛋白质Cα原子的数量,是蛋白质原子与任何底物原子之间的最小距离,是吸引项的缩放因子。
- 方程
这些方程提供了RFDiffusion代码库中potentials.py
文件中实现的势能的数学描述。这些势能旨在鼓励特定的结构特性,例如紧凑性(monomer_ROG
,binder_ROG
,dimer_ROG
)、单体内部或单体之间的接触(binder_ncontacts
,interface_ncontacts
,monomer_contacts
)、对称低聚物中的接触(olig_contacts
)以及蛋白质-底物相互作用(substrate_contacts
)。
无条件生成势能
monomer_ROG
概述:monomer_ROG
势能用于单体蛋白质的无条件生成。它通过最小化Cα原子的回转半径(ROG)来鼓励模型生成紧凑的结构。较小的ROG表示更紧凑的结构。
技术细节:ROG的计算方法是Cα原子与其质心之间距离的均方根。该势能返回ROG的负值,并乘以一个权重因子。最小化负ROG等同于最大化结构的紧凑性。
此势能的关键设置是:
weight
:此参数缩放势能的整体强度。较高的权重将更强烈地优先考虑紧凑性,这可能会以牺牲其他结构特征为代价。建议范围为1-10,但最佳值可能取决于特定的蛋白质和正在使用的其他势能。min_dist
:此参数设置每个Cα原子与质心之间的最小距离约束。它防止结构过度坍塌并变得不真实。根据单体蛋白质的典型尺寸,建议范围为10-20 Å。将min_dist
设置得过低可能允许结构过于紧凑,而设置得过高可能导致势能没有任何效果。
monomer_contacts
概述:monomer_contacts
势能鼓励单体蛋白质内部形成接触。它使用基于平滑切换函数的可微分接触定义,该函数随着原子间距离的增加从1(接触)变为0(不接触)。最大化所有原子对的切换函数之和有利于形成更多接触的结构,这些结构通常更稳定且排列紧密。
技术细节:切换函数定义为:
其中是原子和之间的距离,和是距离阈值,而和是控制过渡锐度的指数(默认,)。
此势能的关键设置是:
weight
:缩放势能的整体强度。较高的权重将优先形成更多的接触,这可能会以牺牲其他结构特征为代价。建议范围为1-10。r_0
:此参数控制切换函数从1(接触)到0(不接触)的距离。它应根据所需的接触定义进行设置。较小的值(例如6 Å)将仅考虑非常近的原子接触,而较大的值(例如12 Å)将包括更远的相互作用。建议范围为6-12 Å。d_0
:此参数设置切换函数始终为1(确定接触)的距离以下。它应小于r_0
。建议范围为2-6 Å。
对称无条件生成势能
olig_contacts
概述:olig_contacts
势能旨在生成对称低聚蛋白质。它允许指定低聚物不同链之间的吸引、排斥或中性相互作用,从而控制整体拓扑和链间接触。
该势能使用类似于monomer_contacts
势能的平滑接触定义,计算不同链中Cα原子之间的成对接触能之和。每对链之间相互作用的强度和符号由用户提供的接触矩阵确定。
技术细节:此势能的关键设置是:
weight_intra
:缩放链内接触(每条链内部的相互作用)的强度。较高的值将优先考虑单个链的紧凑性。建议范围为0.1-2。weight_inter
:缩放链间接触(不同链之间的相互作用)的强度。较高的值将优先考虑链间界面的接触。建议范围为0.1-2。contact_matrix
:一个方阵,指定链对之间所需的相互作用。矩阵的每个元素应为1(吸引)、-1(排斥)或0(无相互作用)。矩阵应是对称的,因为相互作用是成对的。矩阵的维度决定了低聚物中链的数量。olig_intra_all
,olig_inter_all
:二进制标志,分别指示是否将接触势能应用于所有链内或链间对。如果设置为True
,则接触矩阵的相应元素将被覆盖。olig_custom_contact
:一个字符串,指定特定链对的自定义接触定义。每个定义应为“A&B”(吸引)或“A!B”(排斥)的形式,其中A和B是链标识符。多个定义用逗号分隔。r_0
,d_0
:切换函数的距离阈值,类似于monomer_contacts
势能。对于r_0
,建议范围为6-12 Å;对于d_0
,建议范围为2-6 Å。
olig_contacts
势能提供了一种灵活的方式来控制对称低聚物的拓扑结构。通过仔细设计接触矩阵和调整相互作用权重,可以生成各种几何形状,从环状和二面体对称性到更复杂的排列。该势能还可以与其他势能(如monomer_ROG
)结合使用,以同时控制低聚物的紧凑性和链间相互作用。
基序支架势能
substrate_contacts
概述:substrate_contacts
势能用于基序支架,其目标是围绕给定功能基序设计蛋白质结构。该势能模拟设计蛋白质与虚拟底物或配体之间的相互作用,鼓励形成适应基序的结合位点。
该势能包含两个主要部分:有利于蛋白质与底物原子之间接触的吸引项,以及防止冲突的排斥项。底物由一组原子定义,这些原子的坐标是相对于设计蛋白质中的参考系提供的。在设计过程中,底物坐标会根据当前的蛋白质构象进行转换,从而实现诱导契合般的调整。
技术细节:该势能的吸引部分使用类似于monomer_contacts
势能的平滑接触函数定义:
其中 是蛋白质原子和底物原子之间的距离, 和 是距离阈值。
排斥分量是一个软多项式势:
其中 和 是控制排斥强度和距离尺度的参数。
此势能的关键设置是:
weight
:缩放势的整体强度。较高的权重会更强烈地优先考虑蛋白质-底物相互作用,这可能会牺牲其他结构特征。建议范围为 1-10。r_0
,d_0
:控制吸引接触项的距离依赖性,类似于monomer_contacts
势。建议r_0
的范围为 6-12 Å,d_0
的范围为 2-6 Å。s
:吸引接触项的缩放因子。值越高,蛋白质和底物原子之间的吸引力越强。建议范围为 0.1-2。rep_r_0
:排斥项的距离阈值。小于此距离的蛋白质-底物原子对将受到排斥力。建议范围为 2-6 Å。rep_s
:排斥项的强度。值越高,短距离处的排斥力越大。建议范围为 1-10。rep_r_min
:排斥项的最小距离。如果指定,排斥力将仅在距离大于此值时应用,允许蛋白质和底物原子之间存在一些重叠。建议范围为 1-3 Å。
要使用 substrate_contacts
势,用户必须提供相对于蛋白质中参考框架(例如一组残基的 Cα 坐标)的底物原子坐标。然后,该势将根据当前的蛋白质构象转换底物坐标并计算相互作用能。
substrate_contacts
势通过定义一个适应设计的蛋白质结构的虚拟结合位点,实现灵活的基序支架搭建。通过调整势设置,用户可以控制蛋白质-底物相互作用的强度和特异性,以及原子之间允许的重叠程度。该势可以与其他势(如 monomer_ROG
和 monomer_contacts
)结合使用,以生成容纳所需基序的物理上真实的支架。
示例用法:
monomer_ROG
./scripts/run_inference.py \
'contigmap.contigs=[100]' \
inference.output_prefix=outputs/monomer_rog_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:monomer_ROG,weight:5,min_dist:15"]
此命令将使用 monomer_ROG
势生成 10 个 100 残基单体蛋白的设计。该势将以 5 的权重和每个 Cα 原子与质心之间 15 Å 的最小距离应用。输出结构将保存在 outputs/monomer_rog_example
目录中。
monomer_contacts
./scripts/run_inference.py \
'contigmap.contigs=[100]' \
inference.output_prefix=outputs/monomer_contacts_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:monomer_contacts,weight:2,r_0:8,d_0:4"]
此命令将使用 monomer_contacts
势生成 10 个 100 残基单体蛋白的设计。该势将以 2 的权重、8 Å 的 值和 4 Å 的 值应用。输出结构将保存在 outputs/monomer_contacts_example
目录中。
olig_contacts
./scripts/run_inference.py \
--config-name symmetry \
inference.symmetry=c3 \
'contigmap.contigs=[120]' \
inference.output_prefix=outputs/olig_contacts_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:olig_contacts,weight_intra:1,weight_inter:0.5"] \
potentials.olig_intra_all=True \
potentials.olig_inter_all=False \
potentials.olig_custom_contact="A&B,A!C"
此命令将使用 olig_contacts
势生成 10 个 120 残基 C3 对称低聚体的设计。该势将以 1 的链内权重和 0.5 的链间权重应用。所有链内接触将是吸引性的,而特定的链间接触将使用自定义接触字符串 "A&B,A!C"(链 A 和 B 之间吸引,链 A 和 C 之间排斥)定义。输出结构将保存在 outputs/olig_contacts_example
目录中。
substrate_contacts
./scripts/run_inference.py \
'contigmap.contigs=[10-20/A10-30/50-60]' \
inference.input_pdb=motifs/example_motif.pdb \
inference.output_prefix=outputs/substrate_contacts_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:substrate_contacts,weight:3,s:1,r_0:10,d_0:6,rep_r_0:4,rep_s:2"]
此命令将为 motifs/example_motif.pdb
中提供的基序生成 10 个蛋白质支架设计。支架将包括基序 N 端 10-20 个残基、基序本身(链 A 的 10-30 个残基)和基序 C 端 50-60 个残基。substrate_contacts
势将以 3 的权重、1 的吸引强度 s
、10 Å 的 值、6 Å 的 值、4 Å 的排斥距离阈值 rep_r_0
和 2 的排斥强度 rep_s
应用。输出结构将保存在 outputs/substrate_contacts_example
目录中。
注意:substrate_contacts
势需要在代码中进行额外设置,以定义底物原子相对于基序残基的位置。此设置未在 CLI 示例中显示。
这些示例展示了如何通过 RFDiffusion 命令行界面使用不同的势。具体设置,例如权重和距离阈值,可以根据设计任务的要求进行调整。多个势也可以通过在 potentials.guiding_potentials
列表中指定为单独的字符串来组合使用。
结合剂设计
结合剂设计势
binder_ROG
概述:binder_ROG
势用于设计蛋白质结合剂。它通过最小化结合剂中 Cα 原子的旋转半径 (ROG),鼓励模型为结合剂区域生成紧凑结构。较小的 ROG 表示结合剂结构更紧凑。
技术细节:ROG 计算为结合剂中 Cα 原子到其质心的均方根距离。该势返回 ROG 的负值,并乘以权重因子。最小化负 ROG 等同于最大化结合剂结构的紧凑性。
此势能的关键设置是:
binderlen
:结合剂区域的残基数量。这用于从整体结构中提取结合剂的 Cα 坐标。weight
:此参数缩放势的整体强度。较高的权重会更强烈地优先考虑结合剂的紧凑性,这可能会牺牲其他结构特征。建议范围为 1-10,但最佳值可能取决于特定的结合剂和正在使用的其他势。min_dist
:此参数设置结合剂中每个 Cα 原子与质心之间的最小距离约束。它防止结合剂过度塌缩并变得不真实。建议范围为 10-20 Å,基于蛋白质结合剂的典型大小。将min_dist
设置得过低可能会允许过于紧凑的结合剂,而设置得过高可能会使势不起作用。
binder_ncontacts
/interface_ncontacts
概述:binder_ncontacts
和 interface_ncontacts
势分别鼓励在结合剂区域内以及结合剂和靶蛋白之间的界面处形成接触。它们使用基于平滑切换函数的可微分接触定义,该函数随着原子之间距离的增加从 1(接触)变为 0(不接触)。最大化相关原子对上切换函数的总和有利于形成更多接触的结构,这有助于结合剂-靶相互作用的稳定性和特异性。
技术细节:切换函数定义为:
其中是原子和之间的距离,和是距离阈值,而和是控制过渡锐度的指数(默认,)。
这些势的关键设置是
binderlen
:结合剂区域的残基数量。这用于从整体结构中提取结合剂和靶标的 Cα 坐标。weight
:缩放势能的整体强度。较高的权重将优先形成更多的接触,这可能会以牺牲其他结构特征为代价。建议范围为1-10。r_0
:此参数控制切换函数从1(接触)到0(不接触)的距离。它应根据所需的接触定义进行设置。较小的值(例如6 Å)将仅考虑非常近的原子接触,而较大的值(例如12 Å)将包括更远的相互作用。建议范围为6-12 Å。d_0
:此参数设置切换函数始终为1(确定接触)的距离以下。它应小于r_0
。建议范围为2-6 Å。
示例用法:
binder_ROG
./scripts/run_inference.py \
'contigmap.contigs=[B1-100/0 100]' \
inference.output_prefix=outputs/binder_rog_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:binder_ROG,binderlen:100,weight:5,min_dist:15"]
此命令将生成 10 个 100 残基蛋白质结合剂与靶蛋白(链 B,残基 1-100)的设计。binder_ROG
势将以 5 的权重和结合剂中每个 Cα 原子与结合剂质心之间 15 Å 的最小距离应用。输出结构将保存在 outputs/binder_rog_example
目录中。
binder_ncontacts
/ interface_ncontacts
./scripts/run_inference.py \
'contigmap.contigs=[B1-100/0 100]' \
inference.output_prefix=outputs/binder_contacts_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:binder_ncontacts,binderlen:100,weight:2,r_0:8,d_0:4","type:interface_ncontacts,binderlen:100,weight:1,r_0:10,d_0:6"]
此命令将使用 binder_ncontacts
和 interface_ncontacts
势的组合生成 10 个 100 残基蛋白质结合剂与靶蛋白(链 B,残基 1-100)的设计。binder_ncontacts
势将以 2 的权重、8 Å 的 值和 4 Å 的 值应用,而 interface_ncontacts
势将以 1 的权重、10 Å 的 值和 6 Å 的 值应用。输出结构将保存在 outputs/binder_contacts_example
目录中。
这些示例展示了如何将 binder_ROG
、binder_ncontacts
和 interface_ncontacts
势用于蛋白质结合剂设计任务。具体设置,例如权重和距离阈值,可以根据设计任务的要求和靶蛋白的性质进行调整。这些势也可以与其他势(如 monomer_ROG
和 monomer_contacts
)结合使用,以同时优化结合剂结构及其与靶标的相互作用。
在设计蛋白质结合剂时,重要的是要考虑结合剂的紧凑性(由 binder_ROG
控制)与结合剂内部和界面处有利接触的形成(由 binder_ncontacts
和 interface_ncontacts
控制)之间的平衡。过分强调紧凑性可能会阻止形成互补的结合表面,而过分强调接触可能会导致不真实或不稳定的结构。
迭代设计和实验验证通常是找到特定结合剂设计任务的最佳势组合和设置所必需的。建议从适度的权重开始,并根据结果进行调整,同时考虑不同结构特征和结合剂所需特性之间的权衡。
组合多个势的示例
以下是一些如何使用 RFDiffusion 命令行界面组合多个势的示例
示例 1:组合 monomer_ROG
和 monomer_contacts
进行无条件生成
./scripts/run_inference.py \
'contigmap.contigs=[100]' \
inference.output_prefix=outputs/monomer_combined_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:monomer_ROG,weight:3,min_dist:12","type:monomer_contacts,weight:1,r_0:8,d_0:4"] \
potentials.guide_scale=5 \
potentials.guide_decay="linear"
此命令将使用 monomer_ROG
和 monomer_contacts
势的组合生成 10 个 100 残基单体蛋白的设计。monomer_ROG
势将以 3 的权重和 12 Å 的最小距离应用,而 monomer_contacts
势将以 1 的权重、8 Å 的 值和 4 Å 的 值应用。引导势的整体强度将按 5 的因子缩放,并且势的影响将在设计轨迹过程中线性衰减。输出结构将保存在 outputs/monomer_combined_example
目录中。
示例 2:组合 olig_contacts
和 monomer_ROG
用于对称低聚物生成
./scripts/run_inference.py \
--config-name symmetry \
inference.symmetry=d2 \
'contigmap.contigs=[120]' \
inference.output_prefix=outputs/olig_combined_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:olig_contacts,weight_intra:1,weight_inter:0.5","type:monomer_ROG,weight:2,min_dist:10"] \
potentials.olig_intra_all=True \
potentials.olig_inter_all=True \
potentials.guide_scale=3 \
potentials.guide_decay="quadratic"
此命令将使用 olig_contacts
和 monomer_ROG
势的组合生成 10 个 120 残基 D2 对称低聚体的设计。olig_contacts
势将以 1 的链内权重和 0.5 的链间权重应用,所有链内和链间接触都设置为吸引性的。monomer_ROG
势将应用于每个单独的链,权重为 2,最小距离为 10 Å。引导势的整体强度将按 3 的因子缩放,并且其影响将在设计轨迹过程中二次衰减。输出结构将保存在 outputs/olig_combined_example
目录中。
示例 3:组合 substrate_contacts
、monomer_ROG
和 monomer_contacts
用于基序支架
./scripts/run_inference.py \
'contigmap.contigs=[10-20/A10-30/50-60]' \
inference.input_pdb=motifs/example_motif.pdb \
inference.output_prefix=outputs/scaffold_combined_example \
inference.num_designs=10 \
potentials.guiding_potentials=["type:substrate_contacts,weight:3,s:1,r_0:10,d_0:6,rep_r_0:4,rep_s:2","type:monomer_ROG,weight:1,min_dist:15","type:monomer_contacts,weight:0.5,r_0:8,d_0:4"] \
potentials.guide_scale=4 \
potentials.guide_decay="cubic"
此命令将使用 substrate_contacts
、monomer_ROG
和 monomer_contacts
势的组合为 motifs/example_motif.pdb
中提供的基序生成 10 个蛋白质支架设计。支架将包括基序 N 端 10-20 个残基、基序本身(链 A 的 10-30 个残基)和基序 C 端 50-60 个残基。substrate_contacts
势将以 3 的权重和指定设置应用,monomer_ROG
势将以 1 的权重和 15 Å 的最小距离应用,而 monomer_contacts
势将以 0.5 的权重、8 Å 的 值和 4 Å 的 值应用。引导势的整体强度将按 4 的因子缩放,并且其影响将在设计轨迹过程中立方衰减。输出结构将保存在 outputs/scaffold_combined_example
目录中。
这些示例展示了如何组合多个势,以引导设计过程朝着同时满足多个标准的结构发展。通过调整单个势的权重和设置,以及整体缩放和衰减行为,用户可以微调不同结构特征之间的平衡,并控制设计轨迹的演变。
组合势时,重要的是要考虑它们的相对强度以及它们之间可能如何相互作用。例如,对 monomer_ROG
势使用高权重可能会导致过于紧凑的结构,从而没有足够的空间来形成有利的接触。同样,使用强 substrate_contacts
势而没有足够的排斥力可能会导致蛋白质和底物原子之间发生碰撞。
实验和迭代通常是为给定设计任务找到最佳势组合和设置所必需的。建议从适度的权重开始,并根据结果进行调整,同时监控输出结构是否存在任何不期望的伪影或不稳定性。