||
Rosetta最开始是一个fortran程序,后来改写成c++,又经过一系列整合模块化成了现在的样子。所有的底层核心功能比如分子空间结构和化学信息的数据结构,打分函数,输入输出,侧链packing还有优化算法等都放在core模块中。而使用这些基本元素进行一些具体的操作比如abinitio,docking,refinment,relax等都写在protocol中,最后在应用层apps调用这些操作。一般来说一个程序只能干一件事。 但这样有一个缺点就是有时我们需要对一个蛋白质结构做很多不同的操作,要么我们得多次调用不同的程序,要么就得写一个新的app来调用不同的protocol,都略显麻烦。还有一个重要问题因是,在Rosetta@home上边只有一个程序,也就是说我们利用这么大的计算资源只能做有限的几类计算,每当有新的计算需要都得在里边加入一些代码和条件判断,这样做成本很高。 于是RosettaScripts出现了[Fleishman et al. (2011) PLoS 1 6:e20161]。它本身也是一个protocol,但不做任何具体计算而是去读入一个xml文件。它使用xml的语法,用户可以通过编写不同的xml文件,让rosetta调用几乎是任意的protocol来对蛋白结构进行操作,也可以使用任意的打分函数来打分。这大大扩展了用户对Rosetta的控制能力。从此以后,当需要比较具体的计算时,用户只需要写一个类似脚本的xml文件。 一. RosettaScripts的基本介绍 xml 文件中的内容为一个一个的块,<tag> </tag>由这样两个简括号标记,块可以包含其它块。尖括号之外的内容都会被程序忽略,可以作为注释存在。 1. 先给出一个基本的xml文件框架如下: <ROSETTASCRIPTS> <SCOREFXNS> </SCOREFXNS> <TASKOPERATIONS> </TASKOPERATIONS> <FILTERS> </FILTERS> <MOVERS> </MOVERS> <APPLY_TO_POSE> </APPLY_TO_POSE> <PROTOCOLS> </PROTOCOLS> </ROSETTASCRIPTS> 可以看到,这里面主要包括几个部分: a. <SCOREFXNS> 定义能量函数,一个程序的不同步骤往往会使用不同的打分函数,比如做pack时需要“软”一些的势能,而做最优化时需要“硬”一点。这个块可以定义多个打分函数并命名,供后边的Filter/Mover来调用。 b. <TASKOPERATIONS> 定义taskoperation,这个是用来控制packer的一套规则,默认的packer会突变所有位置的氨基酸到所有可能的rotamer,但实际操作中,我们有时需要固定序列(repack only),或者保持native的侧链构象(不pack),或者根据环境(layer)约束可能的突变氨基酸(polar/nonpolar等)。这个块可以用许多关键词来进行复杂控制,后边我们会给几个具体例子。 c. <FILTERS> 定义过滤器,顾名思义,它用来决定protocol是否继续向下进行,有时一个protocol由很多步骤组成,但当中间出现一些错误(或者说坏数据)时,再进行后面的计算就是浪费时间了,filter的作用就是过滤这些坏数据,从头开始,节约计算量。但有的filter会加入confidence=0关键字,只是为了报告一个打分,不作判断。 d. <MOVERS> 定义mover,和filter给结构打分不同,mover用来对结构进行变化,可以pack侧链,sample主链,全局优化,build loop等等。 e. <APPLY_TO_POSE>对pose进行一些预操作,比如粗粒化模型(centroid)与全原子模型(full-atom)之间的转换等。 f. <PROTOCOLS> 定义整个脚本的流程,一般为顺序执行的一系列mover和filter 二. 几个应用示例(取自前边的文献) 1. 可变主链的蛋白质单体设计(flexible backbone design for monomers) <ROSETTASCRIPTS> <SCOREFXNS> 定义能量函数 <SFXN1 weights = score12_w_corrections> <Reweight scoretype = atom_pair_constraint weight = 1.0/> </SFXN1> </SCOREFXNS> <TASKOPERATIONS> <LayerDesign name = layer layer = core_boundary_surface/> 定义pack策略,根据不同的埋藏程度,使用不同的突变 </TASKOPERATIONS> <FILTERS> <PackStat name = pstat threshold = 0.60 confidence = 0/> 过滤pack不够好的结构 </FILTERS> <MOVERS> <FlxbbDesign name = flxbb ncycles = 3 constraints_sheet=100.0 sfxn_design=SFXN1 sfxn_relax=SFXN1 clear_all_residues=1 task_operations=layer/> 做三组序列设计和主链能量优化,从全ALA开始 </MOVERS> <PROTOCOLS> <Add mover = flxbb/> 进行设计和优化 <Add filter = pstat/> 过滤 </PROTOCOLS> </ROSETTASCRIPTS> 2. 蛋白-蛋白界面重新设计以及构象采样(Protein-Protein interface redesign and comformational sampling) <ROSETTASCRIPTS> <FILTERS> <Ddg name=ddG scorefxn=score12 threshold=-15 repeats=2/> 计算结合能,两次取平均 <Sasa name=sasa threshold=800/> 复合结构埋藏的界面面积 <CompoudStatement name=ddg_sasa> <AND filter_name=ddG/> <AND filter_name=sasa/> </CompoundStatement> 两个filter可以进行逻辑组合 <FILTERS/> <MOVERS> <Docking name=docking score_high=soft_rep fullatom=1 local_refine=1/> 进行RosettaDock局域优化,全原子,软势 <Backrub name=backrub partner1=0 partner2=1 interface_distance_cutoff=8.0 moves=1000 sc_move_probability=0.25 scorefxn=score12/> 用backrub采样主链构象1000步,其中25%为侧链运动,只对链2的界面处进行 <RepackMinimize name=des1 scorefxn_repack=soft_rep scorefxn_minimize=soft_rep minimize_bb=0 minimize_rb=1> 用软势进行pack和刚体构象优化 <RepackMinimize name=des2 scorefxn_repack=score12 scorefxn_minimize=score12 minimize_bb=0 minimize_rb=1/> 用score12进行设计和刚体优化 <RepakMinimize name=des3 minimize_bb=1/> 优化主链 <ParsedProtocol name=desgin> <Add mover_name=des1 /> <Add mover_name=des2 /> <Add mover_name=des3 /> <Add mover_name=backrub /> <Add mover_name=des3 filter_name=ddg_sasa /> </ParsedProtocol> 所有步骤拼成一个mover <GenericMonteCarlo name=iterate sorefxn_name=score12 mover_name=design trials=10/> 重复十次,MC会拒绝没有通过filter的采样 <MOVERS/> <PROTOCOLS> <Add mover=docking/> <Add mover=iterate/> <Add filter=ddG/> <Add filter=sasa/> <Add filter=rmsd/> <PROTOCOLS/> </ROSETTASCRIPTS>
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-27 17:35
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社