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