# Rosetta
# 简介
基于Rosetta软件套件包括用于蛋白质结构计算建模和分析的算法。它使计算生物学取得了显著的科学进步,包括从头蛋白质设计、酶设计、配体对接以及生物大分子和大分子复合物的结构预测。
- 能量最小化
通过精确调整蛋白质内原子位置,将其从不稳定构象引导至低能量平衡状态,优化整体结构和局部区域的稳定性。用户可以选择全局或局部优化策略,解决蛋白质折叠、错配修复、配体与受体结合优化等问题。
- 侧链优化
专注于蛋白质中氨基酸侧链的优化。通过合理排列氨基酸侧链的空间构象,能够有效降低能量,优化蛋白质的稳定性、功能性以及蛋白质-配体、蛋白质-蛋白质相互作用。该模块广泛应用于蛋白质设计、分子对接等领域。
# 版本
rosetta/3.17
# 使用步骤
打开神农量子云平台 (opens new window)【靶点准备-Rosetta 】模块。
# 输入文件准备
- 待优化蛋白质文件:PDB格式的蛋白质文件
- 命令行参数文件 通常以flags直接命名或后缀命名的文本文件。 示例:minimize_flags和packer_flags
# minimize_flags
-s 1erb.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_tolerance 0.001
-movemap movemapfile
-out:suffix _minwithmm
# packer_flags
-in:file:s 1l2y.pdb
-in:file:fullatom
-resfile resfile.txt
-nstruct 5
- 附加参数文件 [可选]
MoveMap文本文件,对应上述minimize_flags命令行参数文件中的 “-movemap movemapfile”,“-movemap”是命令参数,“movemapfile”是具体的附加参数文件名称。在能量最小化模块中使用 resfile文本文件,对应上述packer_flags命令行文件中的“-resfile resfile.txt”,“-resfile”是命令参数,“resfile.txt”是参数文件名称。在侧链优化模块中使用。
# 命令运行形式
#!/bin/sh
# 超算参数设置
#SBATCH --
# 模块计算
模块.mpi.linuxgccrelease @flags
# 结果处理打包
是在超算中的调用形式,只需按照上述格式准备数据。
# 结果说明
- 能量最小化
├── 3hon.pdb # 输入文件,为靶点文件
├── 3hon_0001.pdb # 出文件,能量最小化后的结构文件
├── default.sc # 输入靶点文件的属性数据
├── score.sc # 输出的结构文件的属性数据
├── readme.txt # 说明文档
└── runstatus.log # 任务运行日志,以及可能存在rosetta运行文件
- 侧链优化
├── 1l2y.pdb # 输入文件,为靶点文件
├── 1l2y_0001.pdb # 输出文件,侧链优化后的结构文件
├── 1l2y_0002.pdb # 输出文件,侧链优化后的结构文件
├── 1l2y_000{n}.pdb # 输出文件:生成个数根据运行参数决定
├── default.sc # 输入靶点文件的属性数据
├── score.sc # 输出的结构文件的属性数据
├── readme.txt # 说明文档
└── runstatus.log # 任务运行日志,以及可能存在rosetta运行文件
# 输入文件介绍
# 蛋白质文件
标准PDB格式蛋白质结构文件。
# 命令行参数文件
-s 1erb.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_toleranace 0.001
-constraints:cst_file cstfile
-score:weights ref2015_cst
-out:suffix _minwithcsts
这里使用的 ref2015_cst 打分函数与默认的 ref2015 相同,只是添加了一些约束项,包括 chainbreak,coordinate_constraint,atom_pair_constraint,angle_constraint,dihedral_constraint,res_type_constraint,所有项权重均为 1。
“-s” 指定了我们的输入文件,在这种情况下,是 3hon 的晶体结构文件。 “-run:min_type” 指定了要使用的最小化算法的类型,在这种情况下是 “lbfgs_armijo_nonmonotone”(这里使用的值 “lbfgs_armijo_nonmonotone” 是当前的默认算法,所以从技术上来说,这一行可以省略)。 “-run:min_tolerance” 指定了最小化算法的收敛容差。 “-constraints:cst_file” 用于指定要使用的约束文件的名称。 “-score:weights” 指定用于能量函数的权重集。在这种情况下,我们指定了 “ref2015_cst” 权重文件 “-out:suffix” 选项会在新输出文件名的末尾附加后缀 “_minwithcsts”,从而避免覆盖我们之前的输出文件。
# 附件参数文件
# MoveMap介绍
MoveMap 是Rosetta最小化中很重要的一个概念,其可以让我们控制最小化过程中哪些自由度可以改变,那些又是固定不动的。例如,在建模时不想移动高度保守的侧链,在设计时想要保留特定的相互作用等。每个调用 minimizer 的 protocol 都可以接受一个用户定义的 movemap 文件
Movemap 文件的一般格式
MoveMap 文件的每一行定义一个 jump,一个残基或残基区间,紧跟允许移动的自由度
RESIDUE <#> <BB/CHI/BBCHI/NO> # 单个残基,紧跟一个允许移动的单一自由度,即四选一
RESIDUE <#1> <#2> <BB/CHI/BBCHI/NO> # 残基区间,紧跟一个允许移动的单一自由度,即四选一
JUMP <#> <YES/NO> # JUMP,设定是否允许被 JUMP 分割的结构间发生刚性变换
RESIDUE * CHI # 允许所有残基的侧链移动
JUMP * YES # 允许被 JUMP 分割的所有结构间都可发生刚性变换
RESIDUE * CHI
RESIDUE * BB # 当一个残基多次出现时,会被覆写,即只允许所有残基的骨架移动
注意,如果一个残基或 JUMP 没有在 MoveMap 中被指定,则它将回归默认设定,具体与 Protocols 有关。在大多数,但不是所有情况下,默认是允许所有扭转角自由度和所有刚体自由度都可以移动,但最好显式指定
设定 flags 文件和 movemap 文件
我们需要添加参数来告诉Rosetta去读取 movemap 文件:
-in:file:s path/to/xxxx.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_toleranace 0.001
-movemap movemapfile # 指定了应用到结构上的 movemap 文件
-out:suffix _minwithmm
RESIDUE * BBCHI # 先允许所有残基的骨架和侧链扭转角可移动
RESIDUE 47 55 NO # 再固定残基 47-55,会覆写上一行的设定
# resfile介绍
在Rosetta中,Packer通过遍历计算每个氨基酸位点上的Rotamer组合生成预计算的相互作用对的能量表,后续使用模拟退火的方法来预测给定骨架状态下,氨基酸的侧链Rotamer状态,这个过程就是"Pack Rotamers"。这个过程分为Repack、Design、NoRepack三种情况:
- NoRepack,顾名思义,不允许Rotamer的采样,该位点的氨基酸类型将保持为输入状态(min时还是会发生坐标变化,因此并非是冻结)。
- Repack: 允许Rotamer搜索采样,但Rotamer的类型为输入的氨基酸类型,不允许发生变化。(Rotamer能采样,但是氨基酸类型不变)
- Design:该位点氨基酸的类型可发生变换(如从ALA变为ARG)和侧链Rotamer构象可进行采样搜索。
注: 如果不加以指定,Rosetta将默认对该位点氨基酸进行Design处理
Resfile文件用于告诉Rosetta Packer如何对结构中的每一个氨基酸侧链进行计算 只要与PackTask相关的都可以通过TaskOperation读取Resfile控制Pack行为
在控制采样的逻辑方面方面,Resfile可以指定氨基酸的突变方向,比如我可以让51号Leu突变成非极性氨基酸(POLAR),Resfile也可以通过PIKAA语法指定突变的氨基酸类型 在返回结果方面,Resfile会计算所有指定的氨基酸类型,并返回一个当前骨架状态下,能量最佳的序列。
# Resfile的格式与编写
在Resfile中,我们时候用的编号策略是: PDB Numbering, 并且大小写敏感
通常一个Resfile的格式包括两部分:HEADER & BODYs.
HEADER
.....
start
--------
BODY1
BODY2
BODY3
BODY4
每个部分的作用:
HEADER: 控制全局如何进行Rotamer搜索方式; BODY: 记录明确指定的特定氨基酸Rotamer搜索方式;
(1) HEADER写法:
HEADER头文件部分由"自由度控制指令","额外Rotamer采样控制"组成
COMMAND # 详见COMMAND语法;用于控制全局氨基酸侧链搜索方式
EX (ARO) <chi-id> ( LEVEL <sample level> ) # 增加Rotamer采样的指令;
EX_CUTOFF <num-neighbors> # 界定包埋氨基酸的标准;
USE_INPUT_SC # 第一次Repack时使用input的构象侧链
start # 强制使用,该字段表面开始撰写BODY的内容
(1.1) 自由度控制常用指令(COMMAND)
ALLAA # 允许设计为20种氨基酸
ALLAAxc # 允许设计为非半胱氨酸以外的所有氨基酸
POLAR # 允许设计极性氨基酸(DEHKNQRST)
APOLAR # 允许设计非极性氨基酸(ACFGILMPVWY)
NOTAA <list of AAs> .. # 不允许设计为特定的氨基酸列表。(列表连续编写无空格)
PIKAA <list of AAs> .. # 只允许设计为特定的氨基酸列表。(列表连续编写无空格)
NATAA # Repack当前氨基酸类型,只允许构象变化
NATRO # NoRepack不允许构象变化
PROPERTY <property> # 只允许设计为有以下性质的氨基酸
当我们在HEADER处指定了一个COMMAND后,在所有的未在BODY处指定的Rotamer采样的氨基酸都按照HEADER指定的自由度进行采样。如HEADER中指定了NATAA,那么所有的氨基酸只能够进行Repack,而不能进行Design
(1.2) 额外Rotamer采样控制(Extra Rotamer Commands)
Rosetta Pack采样Rotamer时是离散的,默认只会采纳每个格点的中心富集的构象。我们可以通过Extra Rotamer Commands来增加Rotamer的采样
一般只要在Resfile中HEADER中使用Extra Rotamer Commands字段即可,目前针对不同的氨基酸有三种编写方式:
EX <chi-id> LEVEL <level-value>
含义为,额外采集二面角的Rotamer(1-4)。如果level缺省,默认为+/-1标准误范围。level等级可分为7个级别, 级别越大考虑的构象越多,计算耗时越大。一般来说level = 1、2 已经足够。即EX 1、EX 2级别具体的含义:
0 ...... no extra chi angles
1 ...... sample at 1 standard deviation
2 ...... sample at 1/2 standard deviation
3 ...... sample at two full standard deviations
4 ...... sample at two 1/2 standard deviations
5 ...... sample at four 1/2 standard deviations
6 ...... sample at three 1/3 standard deviations
7 ...... sample at six 1/4 standard deviations
EX ARO <chi-id> LEVEL <level-value>
ARO字段代表,增加Rotamer采集时,仅对非芳香环氨基酸(FHYW)生效。ARO字段仅对chi-id=1、2生效。设置为3、4时直接报错
EX_CUTOFF <number(default=18)>
Rosetta默认不会对处于蛋白表面的氨基酸进行额外Rotamer采集,除非用户显式地设置(EX_CUTOFF >=1-3等)。默认每个氨基酸计算10埃范围内残基数量,当数量大于设定的时,认为是"包埋"的氨基酸,进行额外的Rotamer采样。因此通常EX_CUTOFF显式地设置为0,考虑所有的氨基酸位点都做Rotamer
除了全局控制,我们可以还可在HEADER中特定地给一些氨基酸设置额外Rotamer采集:
一些额外Rotamer采样控制例子:
# 对chi1,chi2二面角进行level1增加采样
10 B EX 1 EX 2
# 对chi2二面角进行level1增加采样
8 B EX ARO 2
# 报错,ARO字段仅对chi-id=1,2起效
7 B EX ARO 3
# chi1,level7采样
6 B EX 1 LEVEL 7
# 非芳香氨基酸chi1,level4采样,其余类型氨基酸chi1,level1采样
13 B EX 1 EX ARO 1 LEVEL 4
(2) BODY的写法:
BODY部分用于指明特定位点的氨基酸Rotamer搜索方式。一共指定的形式有5种:
- 位点指定
第一列为氨基酸的PDB编号(允许有insert code)。第二列为PDB链编号(支持icode),第三列为COMMAND项
<PDBNUM>[<ICODE>] <CHAIN> <COMMANDS>
使用举例:
25 A ALLAA # 25号位允许设计为20种氨基酸的Rotamer
30 A APOLAR # 30号位只允许在非极性氨基酸范围内进行Rotamer搜索
.......
- 位点范围指定
范围氨基酸指定格式:
<PDBNUM>[<ICODE>] - <PDBNUM>[<ICODE>] <CHAIN> <COMMANDS>
使用举例:
25-30 A APOLAR # A链25-30号位只允许在非极性氨基酸范围内进行Rotamer搜索
250-499 B ALLAA # B链250-499位允许设计为20种天然氨基酸 .
.....
- 链指定
链单位指定基本格式:
* <CHAIN> <COMMANDS>
使用举例:
* A ALLAA # A链所有位点可设计为20种天然氨基酸
* B ALLAA # A链所有位点可设计为20种天然氨基B
......
- 多重指定
在Resfile中,如果BODY部分指定发生了重叠,那么按照交集逻辑进行处理:
<PDBNUM>[<ICODE>] - <PDBNUM>[<ICODE>] <CHAIN> <COMMANDS>
<PDBNUM>[<ICODE>] <CHAIN> <COMMANDS>
使用实例:
25-30 A APOLAR # A链25-30号位只允许在非极性氨基酸范围内进行Rotamer搜索
25 A PIKAA E # A链25号氨基酸设计为谷氨酸
得到的结果: 25号设计为谷氨酸,26-30号氨基酸设计为非极性氨基酸
- 非标准氨基酸指定
当在BODY中想引入非标准氨基酸时,需要特殊的格式进行指定(2019年版本的Rosetta支持该语法)
<PDBNUM>[<ICODE>] <CHAIN> <COMMANDS> X[ncaa]
不同的地方在于COMMANDs部分: 非标准氨基酸加入前必须加入"X[ncaa]" ncaa=非标准氨基酸的三字母缩写
举例说明:
25 A PIKAA X[B36] # 25号引入单点非标准氨基酸
30 A PIKAA ADPX[B36] # 25号引入单点非标准氨基酸B36以及多个天然氨基酸列表(ALA/ASP/PRO/B36)
35 A PIKAA X[B36]X[A20] # 25号引入单点非标准氨基酸B36以及A20非标准氨基酸
(3) 合并
Resfile实例
NATAA
EX 1 LEVEL 2
EX 2 LEVEL 4
EX_CUTOFF 2
USE_INPUT_SC
start
25 A PIKAA X[B36]
30 A PIKAA ADPFGX[B36]
35 A PIKAA X[B36]X[A20]
* B PIKAA ADEPKG
25-30 A APOLAR
25-30 B POLAR