# 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