@Author: Jian Huang | 吴炜坤
@email: jian.huang@xtalpi.com | weikun.wu@xtalpi.com
Main reference:
@关键词 constraint,限制文件,限制惩罚类型和函数
约束惩罚,是Rosetta中使用约束信息对构象的能量有偏向性调整的一种常用方式。
首先让我们考虑一个实际的应用场景:当我们在进行某一个蛋白质的构象优化的时候,我们通过某些实验数据表征了解到某两个残基在空间中需要保持足够近的距离(以此满足形成某些相互作用,或比如二硫键等),此时,我们应该如何在Rosetta中考虑这种“额外的实验数据”呢?
答案就是利用Rosetta中的Constraint,对体系施加限制。
当我们在具备一定实验数据基础或特定生物体系的先验条件后,简单使用Rosetta中默认的打分函数不一定能很好地、针对性的捕获到这种“考量”。
约束惩罚项是一种常用来对打分函数的修饰,以更加便捷考虑这些额外的实验信息。本质而言,constraint是一种对打分函数的附加项,基于实验数据基础,人为定义施加在原有打分函数上偏向势。
Rosetta中Constraint的工作原理分为三个步骤:
我们可以预想,在原来的能量函数上添加了约束惩罚后,构像优化的结果将会偏向我们设定方向。因为一旦偏离限制越远,惩罚函数将会施加越多的能量,体系能量升高。
由于使用约束文件可以适用大多数情况下定义的限制,这里多费一些笔墨介绍约束文件的编写。
几何约束文件都由以下两个部分组成:
限制文件的一般格式为每一行定义一种限制:
Constraint_Type1 Constraint_Def1
Constraint_Type2 Constraint_Def2
...
Constraint_Type会定义哪一种类型的测量值需要被限制,例如距离、角度、二面角等,并且会包含定义该测量值的一系列原子、残基编号(一般使用Rosetta numbering,如果要使用PDB numbering需要使用编号+链号,无空格的形式,例如“30A”;此外不支持PDB中的insertion code)等。
Constraint_Def部分会定义限制/惩罚函数的形式,即随着pose中该测量值偏移定义的理想值,应该如何施加额外的能量得分。
举一个简单的例子, 左边的部分是Constraint_Type1语句,右边的部分是Constraint_Def1语句:
AtomPair CA 20 CA 6 LINEAR_PENALTY 9.0 0 0 1.0
<Constraint_Type1> | <Constraint_Def1>
解释:
AtomPair CA 20 CA 6 # 告诉Rosetta去测量哪两个原子的距离(AtomPair):20位置的Cα原子和6位置的Cα原子(Rosetta Numbering)
LINEAR_PENALTY 9.0 0 0 1.0 # 告诉Rosetta如何将测量出来的距离转化为罚分 -- 惩罚函数的形式
这里使用了LINEAR_PENALTY的函数来处理罚分,后面跟随的四个数字代表这个函数的参数:
第一个参数9.0:设置该两个原子的距离最优(能量最低)是9.0 Angstrom;
第二个参数和第三个参数:指定平坦区(flat)的数值和范围, 平坦区值和范围的意思是,当两个原子的距离超过了9.0,即使已经偏移最优距离,但此时如果设定该距离在平坦区域内,全部使用该平坦区的值作为罚分。
第四个参数:指定线性惩罚的斜率,这里是1。
如下图:
下面介绍所有Rosetta支持的几何约束类型:
AtomPair Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Func_Type Func_Def
score term: atom_pair_constraint
在Atom1和Atom2之间设置距离限制。AtomPairConstraint 可以与PDB numbering兼容
举例:20-6号残基Ca原子组成的距离约束
AtomPair CA 20 CA 6 LINEAR_PENALTY 9.0 0 0 1.0
NamedAtomPair Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Func_Def
能量函数中需要激活的score term:atom_pair_constraint
在Atom1和Atom2之间设置距离限制。NamedAtomPair中原子ResNum使用的是PDB的编号如20A, 30A(残基号+链号),而非Pose编号。
举例:20A-6A号残基Ca原子组成的距离约束
NamedAtomPair CA 20A CA 6A LINEAR_PENALTY 9.0 0 0 1.0
Angle Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Atom3_Name Atom3_ResNum Func_Type Func_Def
能量函数中需要激活的score term: angle_constraint
限制向量(Atom2_Atom1)和向量(Atom2_Atom3)之间的角度。角度以弧度表示。
举例:20-6-30号残基Ca原子组成的键角度约束
Angle CA 20 CA 6 CA 30 CIRCULARHARMONIC 3.14 0.35
NamedAngle Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Atom3_Name Atom3_ResNum Func_Type Func_Def
能量函数中需要激活的score term: angle_constraint
限制向量(Atom2_Atom1)和向量(Atom2_Atom3)之间的角度。角度以弧度表示。对应于Angle中的“NamedAtomPair”,原理类似,NamedAtomPair中原子ResNum使用的是PDB的编号如20A, 30A(残基号+链号),而非Pose编号。
举例:20B-6B-30B号残基Ca原子组成的键角度约束
NamedAngle CA 20B CA 6B CA 30B CIRCULARHARMONIC 3.14 0.35
Dihedral Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Atom3_Name Atom3_ResNum Atom4_Name Atom4_ResNum Func_Type Func_Def
能量函数中需要激活的score term: dihedral_constraint
由四个原子构成的二面角的限制,Rosetta中的二面角弧度范围为 -pi ~ +pi
举例:20-6-30-31号残基组成的二面角角度约束
Dihedral CA 20 CA 6 CA 30 CA 31 CIRCULARHARMONIC 3.14 0.35
DihedralPair Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Atom3_Name Atom3_ResNum Atom4_Name Atom4_ResNum Atom5_Name Atom5_ResNum Atom6_Name Atom6_ResNum Atom7_Name Atom7_ResNum Atom8_Name Atom8_ResNum Func_Type Func_Def
能量函数中需要激活的score term: dihedral_constraint
用于约束任意两个二面角的角度相同。
举例:20-6-30-31号残基组成Ca原子的二面角,与1-2-3-4号残基Ca原子组成二面角的角度约束
DihedralPair CA 20 CA 6 CA 30 CA 31 CA 1 CA 2 CA 3 CA 4 CIRCULARHARMONIC 3.14 0.35
CoordinateConstraint Atom1_Name Atom1_ResNum[Atom1_ChainID] Atom2_Name Atom2_ResNum[Atom2_ChainID] Atom1_target_X_coordinate Atom1_target_Y_coordinate Atom1_target_Z_coordinate Func_Type Func_Def
能量函数中需要激活的score term: coordinate_constraint
用于限制atom1原子的坐标为设定的“靶标” X Y Z值,以atom2的坐标作为参照系,观察atom1是否发生了运动(Rosetta以此判断是否需要rescore)。在ResNum后面可以接chainID说明支持PDB numbering。
举例:20号残基 vs 6号残基的坐标变化
CoordinateConstraint CA 20A CA 6A HARMONIC 0.0 0.2
LocalCoordinateConstraint Atom1_Name Atom1_ResNum Atom2_Name Atom3_Name Atom4_Name Atom234_ResNum Atom1_target_X_coordinate Atom1_target_Y_coordinate Atom1_target_Z_coordinate Func_Type Func_Def
能量函数中需要激活的score term: coordinate_constraint
用于限制atom1原子的坐标为设定的“靶标” X Y Z值,以atom2,3,4三个原子定义的坐标系作为参考系。兼容PDB numbering。
举例:
20号残基 vs 6/7/8号残基的坐标变化,20号残基的坐标为(34.00 -20.00 -7.00), 约束使用HARMONIC惩罚函数
LocalCoordinateConstraint CA 20A CA 6A 7A 8A 34.00 -20.00 -7.00 HARMONIC 0.0 0.2
AmbiguousNMRDistance Atom1_Name Atom1_ResNum Atom2_Name Atom2_ResNum Func_Type Func_Def
能量函数中需要激活的score term: atom_pair_constraint
atom1和atom2的距离限制。与Atompair的区别是这里的原子名会被特别处理 -- 遍历所有的同类模糊氢原子 (即化学环境或实验/旋转相同的氢原子)。
举例:
(我也没找到demo...)
SiteConstraint Atom1_Name Atom1_ResNum Opposing_chain Func_Type Func_Def
能量函数中需要激活的score term: atom_pair_constraint
限制atom1与某定义的chain具有相互作用。SiteConstraint可以施加一系列的模糊原子对限制,评估该原子是否与某一条链或某一个区域大体上是否存在相互作用。 具体而言,若我们在atom1施加了这种限制,那么其Cα与另一条定义的链的所有Cα之间都存在距离限制关系。在每一对距离限制的值计算出来后,只有最低的那个能量得分值才会作为SiteConstraint的最终得分。
举例:
20号残基 vs 链B残基的坐标变化,约束使用SIGMOID惩罚函数
SiteConstraint CA 20A B SIGMOID 5.0 -2.0
SiteConstraintResidues Atom1_Name Atom1_ResNum Res2 Res3 Func_Type Func_Def
能量函数中需要激活的score term: atom_pair_constraint
限制atom1至少与res2 3之中一个存在相互作用。atom1 + 其残基号用于定义特定原子与res2 3的Cα的相互作用的限制。
举例:
20号残基 vs 50,60号氨基酸的坐标变化,约束使用SIGMOID惩罚函数
SiteConstraintResidues CA 20A 50 60 SIGMOID 5.0 -2.0
BigBin res_number bin_char sdev
能量函数中需要激活的score term: dihedral_constraint
限制某残基的二面角处于的范围,以字母进行表示。
‘O’ 表示cis-顺式的omega角度 [-10, 10]
‘G’ 表示在 [-100, 100] 的phi和psi正值角度
‘E’ 表示在 [100, -90] 的phi和psi正值角度
‘A’ 表示在 [-50, 30] 的phi和psi负值角度
‘B’ 表示在 [100, 175] 的phi和psi负值角度
举例:
20号残基 约束二面角在 G 的范围内,可偏移超出量为0.1弧度(sdev)(<待确定,无官方demo>)
BigBin 20 G 0.1
限制文件中每一行最后,都以Func_Type Func_Def
定义惩罚函数的形式和参数
这里介绍几种简单、容易理解、并且最常用的惩罚函数类型,众多更复杂的函数形式请参照上文提到的官网链接。
https://new.rosettacommons.org/docs/latest/rosetta_basics/file_types/constraint-file
HARMONIC
参数 x0 sd
f(x)=((x−x0)/sd)2
FLAT_HARMONIC
参数 x0 sd tol
f(x)=((x−x0)/sd)2
在x0-tol到x0+tol之间惩罚值为0,其余部分按照原函数处理
BOUNDED
参数 lb ub sd 0.5 tag
f(x)={(x−lbsd)2 for x<lb0 for lb≤x≤ub(x−ubsd)2 for ub<x≤ub+rswitch⋅sd1sd(x−(ub+ rswitch ⋅sd))+(r switth sdsd)2 for x>ub+rswitch⋅sd
GAUSSIANFUNC
参数 mean sd tag WEIGHT weight
f(x)=−ln(1sd∗√2π∗exp(−(x−mean)22sd2))
LINEAR_PENALTY
参数 x0 depth width slope
f(x)=depth;x0−depth≤x≤x0−depth
f(x)=depth+slope∗(abs(x−x0)−width);width≤abs(x−x0)
CIRCULARHARMONIC
参数 x0 sd
f(x)=( Nearest AngleRadians (x,x0)−x0sd)2
SIGMOID
参数 x0 m
S(x)=11+e−m∗(x−x0)
SQUARE_WELL
参数 x0 depth
f(x) = 0 for x >= x0
f(x) = depth for x < x0
序列特征约束不同于几何结构的约束,通常用于指定序列的数理关系。 如疏水氨基酸/亲水氨基酸比例、总带电氨基酸数目等。
目前有两种常用类型:
特别注意:目前约束编写的方式只能选其一,约束比例或绝对数量。不可两者混编使用!
需要激活的函数权重: score term: aa_composition
用于描述蛋白质内氨基酸类型的组成,编写通用格式:
# 定义起始声明
PENALTY_DEFINITION
# 声明约束的内容,氨基酸类型或氨基酸性质,可兼容“选择性语句NOT_OR”
TYPE|NOT_TYPE|PROPERTIES|OR_PROPERTIES|NOT_PROPERTIES <restype1>|<property1>
# 声明比例|数量的下限值,目标值,上限值:
FRACT_DELTA_START|DELTA_START <float>|<integer> # 定义下限惩罚的起始
FRACTION|ABSOLUTE <float>|<integer> # 定义目标值
FRACT_DELTA_END|DELTA_END <float>|<integer> # 定义上限惩罚的起始
# 声明惩罚函数的权重:
PENALTIES <float1> <float2> <float3> # 分别定义BEFORE_FUNCTION(下限)、FRACTION|ABSOLUTE(目标)、AFTER_FUNCTION(上限)区段的惩罚权重
BEFORE_FUNCTION <string> # 超出FRACTION或ABSOLUTE范围之后,使用的函数 | 函数的左边界
AFTER_FUNCTION <string> # 超出FRACTION或ABSOLUTE范围之后,使用的函数 | 函数的右边界
# 定义结束声明
END_PENALTY_DEFINITION
列举两个容易理解的Demo:
例子1: 拥有40%的脂肪族(AROMATIC )或芳香族氨基酸(ALIPHATIC),并且不能为Leu。当偏移目标值+-5%时使用CONSTANT惩罚, 惩罚权重为100
PENALTY_DEFINITION
OR_PROPERTIES AROMATIC ALIPHATIC
NOT_TYPE LEU
FRACT_DELTA_START -0.05
FRACTION 0.4
FRACT_DELTA_END 0.05
PENALTIES 100 0 100
BEFORE_FUNCTION CONSTANT
AFTER_FUNCTION CONSTANT
END_PENALTY_DEFINITION
例子2: 含有5个的Leu,当目标值+-1个氨基酸时使用CONSTANT惩罚, 惩罚权重为100
PENALTY_DEFINITION
TYPE LEU
DELTA_START -1
ABSOLUTE 5
DELTA_END 1
PENALTIES 100 0 100
BEFORE_FUNCTION CONSTANT
AFTER_FUNCTION CONSTANT
END_PENALTY_DEFINITION
需要激活的函数权重: score term: netcharge
用于设定Pose或Region中氨基酸组成为一个净电荷的值, charge文件的编写比comp文件要简单一些。
用于描述蛋白质内氨基酸类型的组成,编写通用格式:
DESIRED_CHARGE <int>
PENALTIES_CHARGE_RANGE <int> <int>
PENALTIES <int> <int> <int> ...
BEFORE_FUNCTION <String>
AFTER_FUNCTION <String>
字段内容解释:
列举4个容易理解的Demo:
例子1: 设定pose中的总净电荷为0
DESIRED_CHARGE 0
PENALTIES_CHARGE_RANGE -1 1
PENALTIES 10 0 10
BEFORE_FUNCTION QUADRATIC
AFTER_FUNCTION QUADRATIC
特别注意: 从例子1可见PENALTIES需要和PENALTIES_CHARGE_RANGE数量对应,如-1到1之间共计有3档电荷。PENALTIES也需要有3个weight!!
例子2: 设定pose中的总净电荷在-1~+3之间
DESIRED_CHARGE 0
PENALTIES_CHARGE_RANGE -2 4
PENALTIES 10 0 0 0 0 0 10
BEFORE_FUNCTION QUADRATIC
BEFORE_FUNCTION QUADRATIC
特别注意: 从例子2可见PENALTIES需要和PENALTIES_CHARGE_RANGE数量对应,如-2到4之间共计有7档电荷。PENALTIES也需要有7个weight!!
例子3: 设定pose中的净电荷最大不超过-3
DESIRED_CHARGE -3
PENALTIES_CHARGE_RANGE -4 -2
PENALTIES 0 0 10
BEFORE_FUNCTION CONSTANT # 当净电荷于小于-4时,惩罚项恒定为0.
AFTER_FUNCTION QUADRATIC
例子4: 设定净电荷的绝对值大于2
DESIRED_CHARGE 0
PENALTIES_CHARGE_RANGE -2 2
PENALTIES 0 25 50 25 0
BEFORE_FUNCTION CONSTANT # 当净电荷小于-2时,惩罚项恒定为0.
AFTER_FUNCTION CONSTANT # 当净电荷大于2时,惩罚项恒定为0.