自由度
如运动自由度是确定一个系统在空间中的位置所需要的最小坐标数。例如火车车厢沿铁轨的运动,只需从某一起点站沿铁轨量出路程,就可完全确定车厢所在的位置,即其位置用一个量就可确定,我们说火车车厢的运动有一个自由度;汽车能在地面上到处运动,自由程度比火车大些,需要用两个量(例如直角坐标x,y)才能确定其位置,我们说汽车的运动有两个自由度;飞机能在空中完全自由地运动,需要用三个量(例如直角坐标x,y,z)才能确定其位置,我们说飞机在空中的运动有三个自由度。所谓自由度数就是确定物体在空间的位置所需独立坐标的数目。
内坐标
我们知道PDB中储存每一个原子的空间位置都是以卡迪尔坐标(x,y,z)来表示的,每一个原子都有三个自由度,当我们模拟蛋白质的结构时,需要进行大量的调整原子的坐标,计算量很庞大。为了提高效率,rosetta使用内坐标来表示蛋白的内部结构,内坐标有三个自由度组成:键长,键角,二面角。一般的常温情况下,氨基酸的键长和键角的变化较小,因此可以作为常量来处理。蛋白质的构象的变化大都是由氨基酸原子间二面角的改变引起的,因此我们可以将内坐标的自由度较少到1.除此之外,对于某些原子(氢原子),他们的扭转角的自由度是受到周围化学环境影响的,因为自由度可以从3降为0.
我们可以在以下的路径的文件中找到每种氨基酸内坐标的参数。
$ROSETTA/main/database/chemical/residue_type_sets/fa_standard/residue_types/l-caa
这个文件的参数可以这个查看:rosetta_basics/file_types/Residue Params file (rosettacommons.org)
FoldTree
FoldTree 记录着每一个氨基酸和其他氨基酸的‘上下游’关系,就像一个标签器,当我们选择一个氨基酸时,这个氨基酸的上有和下游序列的氨基酸就会自动呗贴上对应的标签,二这个标签的作用就是用于明确哪些原子的卡迪尔坐标该如何进行换算。
FoldTree的格式
FoldTree的记录格式 共分为4个字段:EDGE、Start、End、Define。
如果Define字段以-1结尾,代表这个EDGE区段所有的氨基酸均已共价键相连,并且FlodTree的顺序按照start至end的顺序进行延申。
# 这个EDGE区段代表一段多肽链。
EDGE start end -1
如果Define字段以正整数结尾,代表这个是一个Jump点,在FoldTree中,第start号氨基酸和第end号氨基酸之间将建立虚拟链接,Jump点会直接改变不同多肽链之间的上下游的关系。
# jump EDGE的基本格式:
EDGE start end jump_number
FoldTree的杠杆效应
此处以实例说明FoldTree是如何控制内坐标变化后卡迪尔坐标的换算: 以5个氨基酸组成的短肽(序列为"KPALN")为例。
该短肽的FoldTree格式: 代表EDGE的范围为1~5号氨基酸,上下游关系的顺序为N->C端。
EDGE 1 5 -1

如图所示,当我们改变了其中3号丙氨酸(A)的phi二面角后,发现只有处于FoldTree"下游"的氨基酸序列4号亮氨酸(L),5号天冬酰胺(N)以及3号丙氨酸部分的的卡迪尔坐标产生了变化。当某个氨基酸的一个二面角发生变化时,约定俗成地只有会将这个氨基酸的"下游"序列进行卡迪尔坐标的换算,而这种换算所带来的变化称为FoldTree的杠杆效应(the lever arm effect)。我们也可以在这里找到它的英文解释。
值得注意的是: 除了丙氨酸自身的phi角度变化,其余氨基酸的内坐标没有发生任何改变,但是ALN氨基酸的卡迪尔坐标却发生了移动。以一个自由度的改变,表示了3N*atom_number个自由度的卡迪尔坐标换算,这种计算效率是极高的。
FoldTree的顺序性
在FoldTree种start和end字段是顺序敏感的,包括N->C顺序以及C->N顺序。不同顺序,代表EDGE内氨基酸所对应的上下游关系不同
还是以上例短肽为例说明:两种不同顺序的FoldTree对杠杆效应的影响。
FoldTree1:
EDGE 1 5 -1
当短肽的FoldTree为FoldTree1时: 我们改变序号为3号丙氨酸氨基酸的phi二面角时, 1-2号氨基酸(KP)的坐标不会发生改变,而3-5号氨基酸(ALN)发生杠杆效应。
FoldTree2:
EDGE 5 1 -1
当短肽的FoldTree为FoldTree2时: 我们改变3号丙氨基酸的phi二面角时,1-2号氨基酸(KP)发生杠杆效应,而3-5号氨基酸(ALN)的坐标不变。
FoldTree 中的jump点
在FoldTree的概念中,蛋白质所有的原子都是‘相互连接’的,但是当蛋白质由多条链组成是,多条链之间并不存在实际的共价连接。此时就需要定义Jump点。Jump点可以看作是一种虚拟的共价连接。当定义了Jump之后,Jumo前后可视为一个完整的FoldTree,在FoldTree中所有的原子上下游关系重置。
Jump案例一:
举例:目前有链A和链B的同源二聚体(长度均为50个氨基酸)
EDGE 1 50 -1 EDGE 50 51 1 EDGE 51 100 -1
以图的形式来表示该FoldTree: 存在两条多肽链(两个define为-1),EDGE 1 50以及EDGE 50 51。这两条多肽的50号与51号氨基酸之间以虚拟的Linker相连(Jump1),FoldTree的顺序为从N——>C端的顺序。

当我们改变A链中的最后一个氨基酸(50号)的psi二面角时,就会发现整个B链的卡迪尔坐标也会发生相应的变化(杠杆效应)。因为从FoldTree中得出EDGE 51-100的任何一个氨基酸均是EDGE 1-50的下游部分。
(实例如图)A链C端与B链N端被虚拟的Jump1相连。

Jump案例二:
举例:目前有链A和链B的同源二聚体(长度均为50个氨基酸),这个FoldTree是Rosetta默认生成的:
FOLD_TREE EDGE(Default) 1 50 -1 EDGE 1 51 1 EDGE 51 100 -1
以图的形式来表示该FoldTree:

看似与第一个案例中的FoldTree十分相似(两条链,两个define为-1),区别仅仅在EDGE 1 51 1, Jump1虚拟点连接的是1号和51号氨基酸。是带来了完全不同的杠杆效应。当我们改变任意1-50号氨基酸的某个二面角时,会发现B链没有因为A链的变化而收到任何影响。因为对于EDGE 1-50而言, EDGE 51-100就像处于平行宇宙一样,跟他没有任何的上下游关系。此时FoldTree可以理解为表示两条单独的多肽链: 1 + (51-100) 以及 1-51两个部分。
Docking中的FoldTree
FoldTree中的Jump对分子对接十分重要,它直接决定了两个刚体之间应该如何进行选择平移。在Docking中我们可以使用setup_foldtree函数快速设定组分间的FoldTree,从而避免出错。此处稍微讲解下分子对接中FoldTree的设置的原理。
setup_foldtree函数本质上就是将两个对接分子的质量中心建立Jump连接点。
举例:以异源二聚体A(1-150号氨基酸)和B链(151-277号氨基酸)为例, A链和B链分子的质量中心分别为127号氨基酸以及187号氨基酸,FoldTree在Docking中是如何设置的。
EDGE 1 127 -1 EDGE 127 150 -1 EDGE 127 187 1 EDGE 187 151 -1 EDGE 187 277 -1
以图形表示:

A链被分为了两个部分EDGE 1 127和EDGE 127 150.
B链也被分为了两个部分EDGE 187 151和EDGE 187 277.
此时共存在3条"多肽链"关系:
- 1-127-127-150 (A链)
- 1-127-187-151
- 1-127-187-277
此时的无论我们如何对B链(151-277)的氨基酸进行整体卡迪尔坐标的转换,均不会对A链(1-150)造成任何影响。因为对于B链来说,A链永远是它的上游部分。
PyRosetta自建FoldTree的方法
方法十分简单,无论是EDGE还是Jump都可以通过add_egde函数进行添加。
pose = pyrosetta.toolbox.pose_from_rcsb("1v74")
ft = FoldTree()
ft.add_edge(1, 107, -1)
ft.add_edge(107, 108, 1)
ft.add_edge(108, 194, -1)
pose.fold_tree(ft)
print(pose.fold_tree())
core.import_pose.import_pose: {0} File '1V74.clean.pdb' automatically determined to be of type PDB
core.conformation.Conformation: {0} [ WARNING ] missing heavyatom: OXT on residue LEU:CtermProteinFull 107
core.conformation.Conformation: {0} [ WARNING ] missing heavyatom: OXT on residue LEU:CtermProteinFull 194
FOLD_TREE EDGE 1 107 -1 EDGE 107 108 1 EDGE 108 194 -1
参考
Rosetta中FoldTree的概念 - 知乎 (zhihu.com)
这里我就是几乎将 吴炜坤 大神的知乎写成我能理解的东西
或者Rosetta 官网 :Fold tree (rosettacommons.org)