RosettaScripts

RosettaScripts

Overview

本文根据官网英文教程翻译及个人理解编写完成,具体包括如下内容:

  • RosettaScripts编写范式
  • RosettaScripts编写语法
  • 控制RosettaScripts文件输出
  • 使用Movers控制蛋白结构
    • 使用MoveMaps调用minimizer控制movers
    • 使用TaskOperations调用packer控制movers
  • 使用residue selectors选择残基
  • 使用filters评估生成构象优劣以及控制protocol

什么是RosettaScripts?在RosettaScripts没出来之前,Rosetta的每个app都有其特定的用途,因此研究者将这些app整合起来形成一个完整的protocol是很难的(需要修改C++源码)。因此RosettaScripts应运而生,它可以将Rosetta中的app整合起来:输入一个结构,执行一系列步骤,这些步骤根据定义使用某种方式修改pose或者评估该pose,最后输出该结构。重复运行此protocol即可生成输出结构的集合。通俗地讲,RosettaScripts就是Rosetta的各个模块通过线性序列组合并执行,很大程度上减少了设计的工作量

如何生成一个空示例文件

1
/path/to/rosetta_scripts.linuxgccrelease > template.xml

上述指令生成一个template.xml文件,此时我们只需要注意文件中的以下xml blocks.linuxgccrelease后缀需要根据你编译的rosetta版本而更改。

  • xml文件中尖括号之外的所有内容均被忽略,方便编写comment

  • xml标签被尖括号(<>)包围,标记必须以斜杠结束。标签可以嵌套

  • 等价写法

    1
    2
    <SCOREFXNS>
    </SCOREFXNS>
    1
    <SCOREFXNS/>
  • RosettaScripts会忽略一切空格

  • 标签中包含一个接受逗号分隔列表选项时,选项之间不能包含空格

    1
    2
    <PackRotamers name="pack1" task_operations="task1,task2,task3" /> #允许
    <PackRotamers name="pack2" task_operations="task2, task2, task3" /> #禁止
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ROSETTASCRIPTS>
<SCOREFXNS>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<PACKER_PALETTES>
</PACKER_PALETTES>
<TASKOPERATIONS>
</TASKOPERATIONS>
<MOVE_MAP_FACTORIES>
</MOVE_MAP_FACTORIES>
<SIMPLE_METRICS>
</SIMPLE_METRICS>
<FILTERS>
</FILTERS>
<MOVERS>
</MOVERS>
<PROTOCOLS>
</PROTOCOLS>
<OUTPUT />
</ROSETTASCRIPTS>
  • Rosetta运行时默认会添加丢失氢以及补全侧链侧链原子。当真正运行protocol时,建议先使用clean_pdb.py prep一下蛋白。
  • Rosetta输出的pdb文件会包含标准的Rosetta打分表。默认情况下,结构打分函数为ref2015。可以使用-score:weights控制打分函数

控制输出

控制输出有两种方式:

  • 修改xml标签<OUTPUT/>
  • 在命令行运行时指定flags

实际研究中,通常会根据研究需要使用不同的打分函数或者自定义打分函数(改变权重,使用低解析度的能量函数),我们可以使用以下流程:

  • <SCOREFXNS>block中添加自定义打分函数
  • 添加打分函数名到<OUTPUT/>标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
scoring.xml
<ROSETTASCRIPTS>
<SCOREFXNS>
定义了两个打分函数,其名为:molmech和r15_cart
r15_cart通过修改组分权重来修改ref2015打分函数
定义的molmech打分函数并未使用,但是并不会对RosettaScripts造成影响
<ScoreFunction name="molmech" weights="mm_std_fa_elec_dslf_fa13" />
<ScoreFunction name="r15_cart" weights="ref2015" >
<Reweight scoretype="pro_close" weight="0.0" />
<Reweight scoretype="cart_bonded" weight="0.625" />
</ScoreFunction>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
</PROTOCOLS>
使用r15_cart对结构重新打分。
<OUTPUT scorefxn="r15_cart" />
</ROSETTASCRIPTS>
1
/path/to/rosetta_scripts.linuxgccrelease -s 1ubq.pdb -parser:procotol scoring.xml -out:prefix scoring_
  • 1ubq.pdb 自行rcsb下载
  • -parser:procotol 指定使用的xml文件
  • -out:prefix scoring_ 指定输出文件前缀
  • -out:file:silent scoring.silent 当不需要输出pdb文件时,可以使用该命令将pdb结构保存为二进制文件,同时可以使用extract_pdbs提取pdb

Movers

Simple Minimization

RosettaScripts的核心为MoversMovers可以改变蛋白结构,换句话说,Movers是改变蛋白pose的一切。包括原子坐标、FoldTree、constraints、sequence、covalent connectivity。RosettaScripts内置了不同的Movers,有些Mover会改变辅助信息,而不改变原子坐标。

可用的Movers见Movers (RosettaScripts) (rosettacommons.org),自已自行根据自己需要选择合适的Mover。

Mover 标签内的选项解析:

  • name: 设置该Mover操作的句柄,以便后续使用
  • 其他选项用于控制mover行为
  • 默认选项一般为推荐使用值,如果不确定选项值,可以忽视该选项,即使用默认值
  • 某些选项并没有给出默认值,因此必须人为指定
  • xml 布尔值选项:1/0T/FY/Ntrue/falseon/off
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
minimize.xml
定义两个MinMovers(min_torsion和min_cart)
min_torsion: 使用默认旋转角最小化,打分函数 molmech
min_cart:使用直角坐标最小化 打分函数 r15_cart
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="molmech" weights="mm_std_fa_elec_dslf_fa13" />
<ScoreFunction name="r15_cart" weights="ref2015" >
<Reweight scoretype="pro_close" weight="0.0" />
<Reweight scoretype="cart_bonded" weight="0.625" />
</ScoreFunction>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<MinMover name="min_torsion" scorefxn="molmech" chi="true" bb="1" cartesian="F" >
</MinMover>
<MinMover name="min_cart" scorefxn="r15_cart" chi="true" bb="1" cartesian="T" >
</MinMover>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
上述定义的Mover并不会立即生效,需要在Protocol标签里指定才能生效。
运行RosettaScripts,会以序列形式运行Procotol部分的输入。
上一步的输出为下一步的输入
<PROTOCOLS>
<Add mover="min_cart" />
</PROTOCOLS>
<OUTPUT scorefxn="r15_cart" />
</ROSETTASCRIPTS>
1
/path/to/rosetta_scripts.linuxgccrelease -s 1ubq.pdb -parser:protocol minimize.xml -out:prefix minimize_

当然了,你也可以在Protocol里面添加<Add mover="min_torsion" />以进行两步最小化。

Advanced Minimization

最小化pose,使用MoveMap控制最小化

MoveMap允许用户设置最小化过程的自由度和可替换残基,即残基是否可旋转等等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
minimize2.xml
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="molmech" weights="mm_std_fa_elec_dslf_fa13" />
<ScoreFunction name="r15_cart" weights="ref2015" >
<Reweight scoretype="pro_close" weight="0.0" />
<Reweight scoretype="cart_bonded" weight="0.625" />
</ScoreFunction>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
使用MoveMap控制最小化过程
在MoveMap定义中:1)对于所有残基的chi和bb禁止移动
2)1-50残基chi和bb可以移动
3)5-10残基bb禁止移动
<MinMover name="min_torsion" scorefxn="molmech" chi="true" bb="1" cartesian="F" >
<MoveMap name="min_torsion_mm"> # Add this
<Span begin="1" end="999" chi="false" bb="false" /> # And this
<Span begin="1" end="50" chi="true" bb="true" /> # And this
<Span begin="5" end="10" chi="true" bb="false" /> # And this
</MoveMap> # And this
</MinMover>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="min_torsion" />
</PROTOCOLS>
<OUTPUT scorefxn="r15_cart" />
</ROSETTASCRIPTS>
1
/path/to/rosetta_scripts.linuxgccrelease -s 1ubq.pdb -parser:protocol minimize2.xml -out:prefix minimize2_

Packing

Repacking sidechain

  • 使用TaskOperations调用packer
  • 使用packer优化侧链构象

PackRotamersMover是另一个常用的Rosetta mover。

MoveMaps 控制minimizer

TaskOperations控制packer

movers调用packer时将TaskOperations作为输入

MOVERS标签里面创建一个PackRotamersMover。创建之后,切勿忘记添加到PROTOCOLS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" task_operations="" />
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack1" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>

上述代码, PackRotamersMover将调用packer,packer对每个氨基酸残基使用所有的rotamers,也就是说,将尝试设计整个蛋白质。

Packer 默认设计每个位置的标准氨基酸。

使用TaskOperations,或者限制某些氨基酸残基位置的packer是尤为重要

用户使用TaskOperations控制packer,用于指定哪些残基被repack和design,并设置运行方法。TaskOperations在 TASKOPERATIONS部分定义。

除此之外,TaskOperations也控制侧链采样的细节。默认情况下严格使用rotamers采样,但添加额外的sub-rotamers采样是必要的。例如,在rotamer的中心周围增加或者减去一个标准偏差,可以帮助packer搜寻到更好的侧链构象。ExtraRotamersGeneric TaskOperations允许控制rotamer采样等级。总之,添加一些额外的rotamer到chi1和chi2是有用的,尽管需要更长的收敛时间,更复杂的packing问题。当然了,也可以在命令行使用-ex1-ex2选项控制rotamer采样。

下面,我们创建两个TaskOperations。第一个让packer只使用当前位置氨基酸类型,只考虑该氨基酸的替代rotamer。第二种启用额外的rotamer。在TaskOperation部分,添加RestrictToRepacking ExtraRotamersGeneric,并为这两个任务命名。

同时,需要在MOVERS部分使用该TaskOperations,我们可以使用任意顺序指定这些任务,即TaskOperation是可交换的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
repack_only.xml
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<RestrictToRepacking name="no_design" /> #Note that there are no options except name to set.
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" /> #This one allows you to set several options, however.
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" task_operations="no_design,extrachi" />
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack1" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>
1
/path/to/rosetta_scripts.linuxgccrelease -s 1ubq.pdb -parser:protocol repack_only.xml -out:prefix repack_only_

Advanced Packing

使用ResidueSelectors重新设计蛋白核心域。

  • 重新设计蛋白核心(找到新的序列)
  • ResidueSelectorsTaskOperations PackRotamersMover联用
  • 理解TaskOperation的交换性

下面考虑一个更加复杂的例子。从结构中挑出部分残基并对pose的不同部分施加不同的任务。蛋白被埋的核心区域残基寻找到一个新的序列,同时允许边界残基重新填充,并完全禁止表面残基移动。限制核心区域为疏水性氨基酸类型。实现以上任务,需要使用ResidueSelectors选择残基(TaskOperation也可以选择残基,不太方便)。ResidueSelectors可以选择氨基酸子集,然后被用于TaskOperation或其他RosettaScripts对象。ResidueSelectors可以以各种方式组合,以选择您想要的特定残基。

定义三个残基选择器ResidueSelectors选择in core、boundary和surface 层级氨基酸。LayerSelector基于埋藏深度选择残基。

对于核心区域,我们希望设置为疏水性氨基酸残基类型。使用resfile指定允许的残基类型,使用ReadResFileTaskOperation和corelayerResidueSelector 将resfile应用到核心区域。

core_resfile.txt

1
2
PIKAA FAMILYVW #Pick amino acids PHE, ALA, MET, ILE, LEU, TYR, VAL, or TRP to design with; prohibit all others.
start
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
design_core.xml
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
<Layer name="corelayer" select_core="true" select_boundary="false" select_surface="false" core_cutoff="4.0" />
<Layer name="boundarylayer" select_core="false" select_boundary="true" select_surface="false" core_cutoff="4.0" />
<Layer name="surfacelayer" select_core="false" select_boundary="false" select_surface="true" core_cutoff="4.0" />
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<ReadResfile name="core_resfile" filename="core_resfile.txt" selector="corelayer" />
<OperateOnResidueSubset name="restrict_boundary_to_repack" selector="boundarylayer" >
<RestrictToRepackingRLT />
</OperateOnResidueSubset>
<OperateOnResidueSubset name="prevent_surface_from_repackin" selector="surfacelayer" >
<PreventRepackingRLT />
</OperateOnResidueSubset>
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" />
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" task_operations="core_resfile,prevent_surface_from_repacking,restrict_boundary_to_repack,extrachi" />
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack1" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>
1
/path/to/rosetta_scripts.linuxgccrelease -s 1ubq.pdb -parser:protocol design_core.xml -out:prefix design_core_

Understanding commutativity of TaskOperations

往之前的xml文件中添加另一个ReadResFileTaskOperation,在第二个resfile中,使用PIKAA选择允许的残基类型(PHE,TYR,ASP,GLU,LYS,ARG)

core_resfile2.txt

1
2
start
1 - 76 A PIKAA FYDERK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
design_core.xml
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
<Layer name="corelayer" select_core="true" select_boundary="false" select_surface="false" core_cutoff="4.0" />
<Layer name="boundarylayer" select_core="false" select_boundary="true" select_surface="false" core_cutoff="4.0" />
<Layer name="surfacelayer" select_core="false" select_boundary="false" select_surface="true" core_cutoff="4.0" />
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<ReadResfile name="core_resfile" filename="core_resfile.txt" />
<ReadResfile name="core_resfile2" filename="core_resfile2.txt" />
禁止设计边界层
<OperateOnResidueSubset name="restrict_boundary_to_repack" selector="boundarylayer" >
<RestrictToRepackingRLT />
</OperateOnResidueSubset>
禁止设计表面层
<OperateOnResidueSubset name="prevent_surface_from_repackin" selector="surfacelayer" >
<PreventRepackingRLT />
</OperateOnResidueSubset>
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" />
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" task_operations="core_resfile,prevent_surface_from_repacking,restrict_boundary_to_repack,extrachi,core_resfile2" />
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack1" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>
  • 核心部分都是PHE和TYR,因为常用氨基酸类型只能被关闭,而不能重新使用。TaskOperations工作时会取多个命令的交集,由于core_resfile禁止使用ASP, GLU, LYS和ARG,core_resfile2禁止使用ALA, MET, ILE, LEU, TYR和VAL,只有TRP和PHE是被允许的。
  • 只重新设计了核心部分。限制或禁止特定的填充残基类型取并集:如果命令A或命令B限定了填充类型或禁止填充,那么两个命令的组合将是二者的并集。

Combining ResidueSelectors

有三个特殊的ResidueSelector 分别为AndResdiueSelectorOrResdiueSelectorNotResdiueSelector

将下述代码填充到RESIDUE_SELECTORS标签内,选择极性氨基酸

1
<ResidueName name="select_polar" residue_name3="ASP,GLU,LYS,ARG,HIS,SER,THR,ASN,GLN" />

下一步,使用AND选择器选择极性且在核心区域的残基

1
<And name="polar_and_core" selectors="select_polar,corelayer" />

最后,使用OR选择器选择(核心区域极性或者表面残基)。所有的这些都被限制repacking

1
<Or name="surface_or_buried_polar" selectors="polar_and_core,surfacelayer" />

做好残基选择之后,我们可以使用TaskOperation来执行,不要忘记添加到Movers。

1
2
3
<OperateOnResidueSubset name="prevent_surface_from_repacking" selector="surface_or_buried_polar" >
<PreventRepackingRLT />
</OperateOnResidueSubset>

在更加复杂的Protocol中,packing和minimization由不同的用户界面控制(task operations 和 move maps).

packing和minimization步骤必须单独配置

Filters

  • Filter 基于protocol运行之后生成的结构运行

Rosetta运行是随机化的,早期通常会对构象进行采样,而这些构象不会产生结果。换言之,运行生成的构象具有不确定性,无法保证其正确性,同时为了加快实验进程,在最后阶段设当放弃一些无效样本是有用的。基于此,RosettaScripts提供了Filter,它可以根据生成构象某个属性判断是否采用。

下述代码用于重新pack蛋白表面残基。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<RestrictToRepacking name="repackonly" />
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" />
</TASKOPERATIONS>
<FILTERS>
<AtomicDistance name="salt_bridge" residue1="11A" atomtype1="Nlys" residue2="34A" atomtype2="OOC" distance="3.0" />
</FILTERS>
<MOVERS>
<MinMover name="min" scorefxn="r15" chi="true" bb="true" cartesian="false" />
<PackRotamersMover name="pack" scorefxn="r15" task_operations="repackonly,extrachi"/>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack" />
<Add filter="salt_bridge" />
<Add mover="min" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>

在本例中,将TaskOperations传递给PackRotamersMover以禁止设计蛋白(仅pack),并为PackRotamersMover启用额外的rotamer。同时还定义了一个MinMover来进行最小化结构。Protocol的设置:首先调用PackRotamersMover,然后调用MinMover。在原始结构中,K11和E34之间有一个盐桥,我们希望保留它。如果侧链的初始构象中,这两个残基离得太远,那么最小化后它们形成盐桥的概率也很小。因此,没有盐桥的结构没必要继续进行能量最小化,否则将会浪费大量的CPU时间。后续步骤可能会花费几分钟到几小时,因此要避免不必要的计算。此外,最终的结构经常要手动查看,因此也要控制最终输出结构的量。在本例中,我们将使用一个过滤器抛弃能量最小化前没有盐桥的结构。为了增强本例中的盐桥,我们根据两个原子间距离定义。和之前一样,在xml的FILTERS模块粘贴说明文档例子中的标签名称。如说明文档中所写,可以指定特别原子名称,或者指定Rosetta原子类型。如果指定了类型,那么计算的距离为该类原子到其的最近距离。这正是我们想要的,因为我们并不关心羧基上哪个氧原子和Lys侧链氮原子配对。因此我们可以这样指定原子类型:E34的’OOC’原子和K11的’Nlys’。

大多数过滤器会计算一个结构矩阵,然后和阈值比较。AtomicDistance过滤器用distance选项来设置阈值:低于该值可继续下面的步骤。阈值应当合适,但通常设置过大会有错误的结果,因为minimizer可能会允许稍微出界的结构,但在这里,我们将使用偏窄的值:3.0埃。

protocols部分中,moverfilter按照执行顺序排布。该结构会先被重新采样,然后用filter过滤,最终能量最小化。如果没有通过filter,会在log文件中声明,rosetta_scripts会继续下一个工作。

接下来开始任务。我们在命令行中添加-nstruct 100来告诉rosetta_scripts重复100次任务。可以想到,大部分结构无法通过filter,但rosetta默认结构无法通过filter时,会停止任务,因此我们需要增加 -jd2:failed\_job\_exception false来告诉rosetta不要停止。(尤其是在mpi模式下,因为任何错误会使全部任务停止)。由于被filter拦截是随机的,因此得到的结果少于-nstruct规定的结果。可用-jd2:ntrials选项告知rosetta每个结构将被重复计算几次。

Filters as metric evaluators

除了结束进程,filters也可用作评估指标。例如,我们可以用filter计算特定残基的侧链RMSD,从手册上看,SidechainRmsd是一个合适的选择。将Filter作为评估指标而非进程结束者,可用confidence选项进行调节,它指出filter有多长时间作为过滤器,在这段时间它将开启过滤功能。默认的"1.0"代表它永远是filter,如果设为"0.0",则永远不具备筛选功能,只是进行评估,输出它计算的数据,并不终止进程。

加入一些仅发挥计算作用的filter,对脚本进行修改,以计算1ubq的F45和Y59残基的侧链RMSD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<RestrictToRepacking name="repackonly" />
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" />
</TASKOPERATIONS>
<FILTERS>
<AtomicDistance name="salt_bridge" residue1="11A" atomtype1="Nlys" residue2="34A" atomtype2="OOC" distance="3.0" />
<SidechainRmsd name="F45_rmsd" res1_pdb_num="45A" res2_pdb_num="45A" include_backbone="1" confidence="0.0" />
<SidechainRmsd name="Y59_rmsd" res1_pdb_num="59A" res2_pdb_num="59A" include_backbone="1" confidence="0.0" />
</FILTERS>
<MOVERS>
<MinMover name="min" scorefxn="r15" chi="true" bb="true" cartesian="false" />
<PackRotamersMover name="pack" scorefxn="r15" task_operations="repackonly,extrachi"/>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack" />
<Add filter="salt_bridge" />
<Add mover="min" />
<Add filter="F45_rmsd" />
<Add filter="Y59_rmsd" />
</PROTOCOLS>
<OUTPUT scorefxn="r15" />
</ROSETTASCRIPTS>

filterPROTOCOLS部分发挥筛选作用,而指标评估仅仅在最后发挥作用,即计算输出结构的相关指标。

小结

在此,根据官网手册翻译了RosettaScripts的基本使用方法,MOVERS和Packing是脚本的关键。在实际使用过程中,需要将他们有机地结合起来,同时学会使用filter过滤掉不合理的结构。初学者可以在已有示例脚本的基础上进行修改。如果想深入学习RosettaScript的话,还得更加深入的了解movers、selectors及filters等模块的内容。

参考链接

[1] RosettaScripts基础教程中译 - 知乎 (zhihu.com) (https://zhuanlan.zhihu.com/p/463076260)

[2] Creating protocols with RosettaScripts (rosettacommons.org) (https://www.rosettacommons.org/demos/latest/tutorials/scripting_with_rosettascripts/scripting_with_rosettascripts)