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 >
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的核心为Movers
。Movers
可以改变蛋白结构,换句话说,Movers
是改变蛋白pose的一切。包括原子坐标、FoldTree、constraints、sequence、covalent
connectivity。RosettaScripts内置了不同的Movers
,有些Mover
会改变辅助信息,而不改变原子坐标。
可用的Movers见Movers
(RosettaScripts)
(rosettacommons.org) ,自已自行根据自己需要选择合适的Mover。
Mover 标签内的选项解析:
name
: 设置该Mover操作的句柄,以便后续使用
其他选项用于控制mover行为
默认选项一般为推荐使用值,如果不确定选项值,可以忽视该选项,即使用默认值
某些选项并没有给出默认值,因此必须人为指定
xml
布尔值选项:1/0
、T/F
、Y/N
、true/false
、on/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
重新设计蛋白核心域。
重新设计蛋白核心(找到新的序列)
将ResidueSelectors
和TaskOperations
PackRotamersMover
联用
理解TaskOperation的交换性
下面考虑一个更加复杂的例子。从结构中挑出部分残基并对pose的不同部分施加不同的任务。蛋白被埋的核心区域残基寻找到一个新的序列,同时允许边界残基重新填充,并完全禁止表面残基移动。限制核心区域为疏水性氨基酸类型。实现以上任务,需要使用ResidueSelectors
选择残基(TaskOperation也可以选择残基,不太方便)。ResidueSelectors
可以选择氨基酸子集,然后被用于TaskOperation
或其他RosettaScripts对象。ResidueSelectors
可以以各种方式组合,以选择您想要的特定残基。
定义三个残基选择器ResidueSelectors
选择in
core、boundary和surface
层级氨基酸。LayerSelector
基于埋藏深度选择残基。
对于核心区域,我们希望设置为疏水性氨基酸残基类型。使用resfile指定允许的残基类型,使用ReadResFile
TaskOperation和corelayer
ResidueSelector
将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文件中添加另一个ReadResFile
TaskOperation,在第二个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
分别为AndResdiueSelector
、OrResdiueSelector
和NotResdiueSelector
将下述代码填充到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
部分中,mover
和filter
按照执行顺序排布。该结构会先被重新采样,然后用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 >
filter
在PROTOCOLS
部分发挥筛选作用,而指标评估仅仅在最后发挥作用,即计算输出结构的相关指标。
小结
在此,根据官网手册翻译了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)