专栏名称: 生信杂谈
生物信息学;生物信息;计算机辅助药物设计;测序分析;Python;R;机器学习;论文写作;网站制作;LOL;dota2。
目录
相关文章推荐
51好读  ›  专栏  ›  生信杂谈

RosettaScript快速入门

生信杂谈  · 公众号  ·  · 2020-01-02 14:48

正文

请到「今天看啥」查看全文


此文不完全翻译自: Creating protocols with RosettaScripts [1]

大家可能对 RosettaScript 可能并不陌生,因为 Rosetta 官网上非常多的教程都是用的脚本,脚本是使用 xml 文件来进行的。首先我们来看基本的骨架例子。

<ROSETTASCRIPTS>
<SCOREFXNS>
SCOREFXNS>
<RESIDUE_SELECTORS>
RESIDUE_SELECTORS>
<TASKOPERATIONS>
TASKOPERATIONS>
<FILTERS>
FILTERS>
<MOVERS>
MOVERS>
<APPLY_TO_POSE>
APPLY_TO_POSE>
<PROTOCOLS>
PROTOCOLS>
<OUTPUT />
ROSETTASCRIPTS>

1.运行脚本

运行脚本非常简单,只要使用 rosetta_scripts 模块的 -parser:protocol 设置即可。

$ROSETTA3/bin/rosetta_scripts.mpi.linuxgccrelease -s 1ubq.pdb -parser:protocol nothing.xml

2.注释

在 xml 文件中只要不是位于 < 内的内容,均为注释,例如:

<ROSETTASCRIPTS>
这是一个注释
<SCOREFXNS>
SCOREFXNS>
<RESIDUE_SELECTORS>
RESIDUE_SELECTORS>
<TASKOPERATIONS>
TASKOPERATIONS>
<FILTERS>
FILTERS>
<MOVERS>
这也是一个注释,虽然其位于闭包内,但是其并未位于尖括号内
MOVERS>
<APPLY_TO_POSE>
APPLY_TO_POSE>
<PROTOCOLS>
PROTOCOLS>
<OUTPUT />
ROSETTASCRIPTS>

3.标签

3.1 标签写法

对于网页 xml,有开头标签就必须要有关闭标签,如:

<SCOREFXNS>
SCOREFXNS>

对于 rosetta,若标签之间没有嵌套,则可以直接简写,这与 html 中的
类似,如:

<SCOREFXNS/>

这是等价的。为了阅读方便,往往我们会进行缩进,但是机器阅读的时候是没有必要的,但是要注意的是,命令接受一个逗号分割的列表时,是不能有空格的,例如:


#含有空格,这是不被允许的
3.2 标签命名

我们在使用编程语言的时候,非常重要的一个基础语法就是变量,通过定义变量能够方便的在多个地方运用变量,例如 javascipt:

//将变量a赋值1
var a=1;
var i;
for (i=0;i<5;i++){
console.log(a)
}

rosetta 脚本使用这个功能则为在标签内进行命名 name ,调用的时候调用该名称进行指定对象。

<MOVERS>
<PackRotamers name="pack1" task_operations="task1,task2,task3" />
MOVERS>
调用名称为pack1的语法
<PROTOCOLS>
<Add mover="pack1" />
PROTOCOLS>
3.3 输出标签

有时候我们需要将有些计算进行输出,则需要使用 标签,如下面的例子:

<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>
MOVERS>
<APPLY_TO_POSE>
APPLY_TO_POSE>
<PROTOCOLS>
PROTOCOLS>
<OUTPUT scorefxn="r15_cart" />
ROSETTASCRIPTS>

我们首先定义了两个得分函数,分别命名为 molmech r15_cart 。其中第二个得分权重为 ref2015 ,并且重新赋权 pro_close cart_bonded 选项。我们再来看一下 内的内容,其包含 scorefxn 表示 内内容输出,引用的内容为 r15_cart ,故 molmech 虽然被申明但是不会被输出,仅会输出后面的 ScoreFunction 的内容。我们来运行一下:

$ROSETTA3/bin/rosetta_scripts.default.linuxgccrelease -s 1ubq.pdb -parser:protocol scoring.xml -out:prefix scoring_

其得到的文件打分项内包含 cart_bonded 项,并且没有 pro_close 项(因为权限被赋予为 0)

3.4 标签设置

有时候我们对标签内的运行进行设置,若有默认值省略则为默认值,但是有一些没有默认值的则必须填写,否则可能会报错。对于 boolean 设置,则可以填写以下均正确:

1/0, T/F, Y/N, true/false, on/off
3.5.Movers 标签

RosettaScript XML 的脚本有 Movers,翻译为行动器?这是脚本内最为核心的内容 如下有个简单的最小化例子:

    <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>

标签内可以运行的设置可以具体参考 RosettaScripts-Movers [2] . MinMover 为最小化侧链或者骨架 Movers。 min_torsion 设置 cartesian 为 false(将会使用默认的 torsinal 进行最小化),并且使用名为 molmech 的打分函数,chi,bb 均设置的为 true,表示侧链与骨架均进行最小化优化。

3.6 PROTOCOLS 标签

PROTOCOL 为执行标签,MOVERS 标签为设置但是需要 PROTOCOL 才会执行,其按照先后顺序进行执行,上一个执行的输出会成为下一个执行的输入: 例子

    <PROTOCOLS>
<Add mover="min_cart" />
PROTOCOLS>

如上,会执行 min_cart MOVERS 标签

3.7 TaskOperations 标签

TaskOperations 用于定义 MOVER 任务 教程中以 Repacking 为例,首先我们搭基本框架:

<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="r15" weights="ref2015" />
SCOREFXNS>
<RESIDUE_SELECTORS>
RESIDUE_SELECTORS>
<TASKOPERATIONS>
TASKOPERATIONS>
<FILTERS>
FILTERS>
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" />
MOVERS >
<APPLY_TO_POSE>
APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="pack1" />
PROTOCOLS>
<OUTPUT scorefxn="r15" />
ROSETTASCRIPTS>

进行打分,输出等操作。我们进行一个任务操作:

...
<TASKOPERATIONS>
<RestrictToRepacking name="no_design" /> #未进行设置
<ExtraRotamersGeneric name="extrachi" ex1="1" ex2="1" ex1_sample_level="1" ex2_sample_level="1" /> #此设置了几个内容
TASKOPERATIONS>
...

RestrictToRepacking 这里设置的为仅允许残基 repack,而没有设计。 ExtraRotamersGeneric 为设置 rotamer 采样等级,这里设置了 chi1 chi2 ,等级均设置为 1. 随后我们在 相关标签内引用

...
<MOVERS>
<PackRotamersMover name="pack1" scorefxn="r15" task_operations="no_design,extrachi" />
MOVERS>
...

注意的是引用 task_operations 没有先后顺序。

3.8 ResidueSelectors 标签(残基选择器)

残基选择器顾名思义,就是进行用来选择一系列特定的残基子集,可以将其用于 TaskOperations 或者 RosettaScripts 其他位置。假设我们要进行这样一件 repack 的事情,我们有一个蛋白,我们仅仅需要将他内部的氨基酸残基进行 repack,但是表面残基不进行任何操作,同时我们需要限制其内部的疏水氨基酸残基的 repack。这相当于将蛋白分为多个层,此时我们就需要用到残基选择器,需要注意的是残基选择器是有顺序的,这不同于 TaskOperations 。例如我们通过 LayerSelector 选择器选择选择核心,边界,表面三层:

	<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>
<OperateOnResidueSubset name="restrict_boundary_to_repack" selector="boundarylayer" >
<RestrictToRepackingRLT />
OperateOnResidueSubset>
<OperateOnResidueSubset name="prevent_surface_from_repackin" selector="surfacelayer" >
<PreventRepackingRLT />
OperateOnResidueSubset>
TASKOPERATIONS>

同样,我们可以在选择器之间进行操作,使用 And Or Not ,分别对应选择器名称为 AndResidueSelector , OrResidueSelector , NotResidueSelector 。举个例子:

<RESIDUE_SELECTORS>
<Layer name="corelayer" select_core="true" select_boundary="false" select_surface="false" core_cutoff="4.0" />
<ResidueName name="select_polar" residue_name3="ASP,GLU,LYS,ARG,HIS,SER,THR,ASN,GLN" />
<And name="polar_and_core" selectors="select_polar,corelayer" />
RESIDUE_SELECTORS>

这样其相当于选择了内层的极性氨基酸残基。

3.9 Filters 标签

筛选器主要是用来对采样进行一步筛选。避免在下一步计算的时候白白浪费计算资源。我们来看下面的例子:

<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>

我们需要进行一步 pack ,一步 mini ,但是在最终结果里面我们需要氨基酸残基 11 与 34 之间形成盐桥,如果 pack 步骤让 11 与 34 氨基酸残基远离,那么 mini 步骤很难让他们形成盐桥,最后分析的时候虽然可以抛弃,但是白白浪费了大量计算时间用于 pack 不会形成盐桥的结构上,所以可以在此中间加入 ,若不满足此性质的结构均会在能量最小化步骤不使用。同时筛选器还有一个 confidence 参数值得注意,可以使得筛选器改造为评价器。其默认值为"1.0",表示完全过滤这些结构,若设置为"0.0",则不会进行过滤,仅会对其值进行计算,如下的例子:

...
<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>
...
<PROTOCOLS>
<Add mover="pack" />
<Add filter="salt_bridge" />
<Add mover="min" />
<Add filter="F45_rmsd" />
<Add filter="Y59_rmsd" />
PROTOCOLS>
...

上面这个例子就会在能量最小化的过程中进行 F45 以及 Y59 两个氨基酸残基在最小化过程中的 RMSD 值变化。

参考资料

[1]

Creating protocols with RosettaScripts: https://www.rosettacommons.org/demos/latest/tutorials/scripting_with_rosettascripts/scripting_with_rosettascripts

[2]

RosettaScripts-Movers: https://www.rosettacommons.org/docs/latest/scripting_documentation/RosettaScripts/Movers/Movers-RosettaScripts








请到「今天看啥」查看全文