RosettaScripts
RosettaScripts是一种脚本式的自定义模块,通常情况下在Rosetta中应用都是单独存在,需要用户去分别调用。为了满足用户想要同时运行多个脚本和修改多个参数的需求,就产生了基于XML的RosettaScripts。RosettaScripts相比于PyRosetta来说更简单,但是功能确实非常强大的,并且有大量的相关的文献。Rosetta的最新版本中使用Pyrosetta可以运行完整的RosettaScript。
RosettaScripts 的组成
RosettaScripts 的骨架:
<ROSETTASCRIPTS>
<SCOREFXNS>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<SIMPLE_METRICS>
</SIMPLE_METRICS>
<FILTERS>
</FILTERS>
<MOVERS>
</MOVERS>
<PROTOCOLS>
</PROTOCOLS>
<OUTPUT />
</ROSETTASCRIPTS>
上述个模块所表达的意思:
- ScoreFunctions:通过物理和统计能量项来评估pose的能量得分
- ResidueSelectors:根据一些标准来选择pose中的氨基酸残基
- TaskOperations:控制侧链的组装和设计
- SimpleMetrics:返回pose的一些度量值,可以是数字,字符串等
- Filters: 为了提升效率,需要在早期采样中对结果进行评估,抛弃一些不合理的结构
- Movers: 对pose进行操作,通常使用apply()进行操作
- Protocols: 使用上述的哪一个方法对pose进行操作
- Output: 输出
<SCOREFXNS>
</SCOREFXNS>
<SCOREFXNS/>
上面的两种方式是等价的
RosettaScripts 的举例
<ROSETTASCRIPTS>
<SCOREFXNS>
</SCOREFXNS>
<RESIDUE_SELECTORS>
<CDR name="L1" cdrs="L1"/>
</RESIDUE_SELECTORS>
<MOVE_MAP_FACTORIES>
<MoveMapFactory name="movemap_L1" bb="0" chi="0">
<Backbone residue_selector="L1" />
<Chi residue_selector="L1" />
</MoveMapFactory>
</MOVE_MAP_FACTORIES>
<SIMPLE_METRICS>
<TimingProfileMetric name="timing" />
<SelectedResiduesMetric name="rosetta_sele" residue_selector="L1" rosetta_numbering="1"/>
<SelectedResiduesPyMOLMetric name="pymol_selection" residue_selector="L1" />
<SequenceMetric name="sequence" residue_selector="L1" />
<SecondaryStructureMetric name="ss" residue_selector="L1" />
</SIMPLE_METRICS>
<MOVERS>
<MinMover name="min_mover" movemap_factory="movemap_L1" tolerance=".1" />
<RunSimpleMetrics name="run_metrics1" metrics="pymol_selection,sequence,ss,rosetta_sele" prefix="m1_" />
<RunSimpleMetrics name="run_metrics2" metrics="timing,ss" prefix="m2_" />
</MOVERS>
<PROTOCOLS>
<Add mover_name="run_metrics1"/>
<Add mover_name="min_mover" />
<Add mover_name="run_metrics2" />
</PROTOCOLS>
</ROSETTASCRIPTS>
我们将其命名为 min_L1.xml ,然后使用pyrosetta去运行他
parser = RosettaScriptsParser()
protocol = parser.generate_mover("min_L1.xml")
protocol.apply(pose)
同样也可以再python中通过XMLObjects 将字符串转换成XML文件
min_L1 = """
<ROSETTASCRIPTS>
<SCOREFXNS>
</SCOREFXNS>
<RESIDUE_SELECTORS>
<CDR name="L1" cdrs="L1"/>
</RESIDUE_SELECTORS>
<MOVE_MAP_FACTORIES>
<MoveMapFactory name="movemap_L1" bb="0" chi="0">
<Backbone residue_selector="L1" />
<Chi residue_selector="L1" />
</MoveMapFactory>
</MOVE_MAP_FACTORIES>
<SIMPLE_METRICS>
<TimingProfileMetric name="timing" />
<SelectedResiduesMetric name="rosetta_sele" residue_selector="L1" rosetta_numbering="1"/>
<SelectedResiduesPyMOLMetric name="pymol_selection" residue_selector="L1" />
<SequenceMetric name="sequence" residue_selector="L1" />
<SecondaryStructureMetric name="ss" residue_selector="L1" />
</SIMPLE_METRICS>
<MOVERS>
<MinMover name="min_mover" movemap_factory="movemap_L1" tolerance=".1" />
<RunSimpleMetrics name="run_metrics1" metrics="pymol_selection,sequence,ss,rosetta_sele" prefix="m1_" />
<RunSimpleMetrics name="run_metrics2" metrics="timing,ss" prefix="m2_" />
</MOVERS>
<PROTOCOLS>
<Add mover_name="run_metrics1"/>
<Add mover_name="min_mover" />
<Add mover_name="run_metrics2" />
</PROTOCOLS>
</ROSETTASCRIPTS>
"""
xml = XmlObjects.create_from_string(min_L1)
protocol = xml.get_mover("ParsedProtocol")
protocol.apply(pose)
也可以通过XMLObjects 创建一个单独的section
L1_sele = XmlObjects.static_get_residue_selector('<CDR name="L1" cdrs="L1"/>')
创建的XML文件是这样的
<ROSETTASCRIPTS>
<RESIDUE_SELECTORS>
<CDR cdrs="L1" name="L1"/>
</RESIDUE_SELECTORS>
<PROTOCOLS/>
</ROSETTASCRIPTS>
总结
RosettaScripts 无论是在pyrosetta还是在rosetta中的使用频率都是非常之高的,如果关注Baker lab的文章的话,会发现当他们使用rosetta的时候,大部分都是以XML为基础将各种应用串起来的,例如 FastDesign,Motif-Graft等等,所以想要学好rosetta,XML的书写和使用是不能绕过的一步(这句话也是写给我自己的)。
参考
RosettaScripts更详细的解释和教程:Creating protocols with RosettaScripts (rosettacommons.org),
知乎上的大神同样对此做了非常详尽的解释:RosettaScripts基础教程中译 - 知乎 (zhihu.com)