{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "destroyed-catholic",
   "metadata": {},
   "source": [
    "## TaskOperation & PackTask\n",
    "\n",
    "@Author: 吴炜坤\n",
    "\n",
    "@email:weikun.wu@xtalpi.com/weikunwu@163.com"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "promising-budapest",
   "metadata": {},
   "source": [
    "上一节,我们详细介绍了Rotamer以及Rosetta Packer的基本工作原理。Packer有三种工作方式: “Repacking”、“Rotamer Trial”和“Design”。其中Rotamer就有可能存在3种基本状态:\n",
    "- Repacking: 该位点处Rotamer类型只能是同一种氨基酸;\n",
    "- Design: 该位点上Rotamer类型可以是多种氨酸;\n",
    "- Fixed: 该位点Rotamer不允许发生变化。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cosmetic-nothing",
   "metadata": {},
   "source": [
    "在本章节中,读者将学习到如何使用TaskOperations来控制Rotamer在Packer中的“行为规范”。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "objective-sport",
   "metadata": {},
   "source": [
    "### 一、PackerTask与TaskFactory"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "maritime-security",
   "metadata": {},
   "source": [
    "如果把Packer想象成一位“蛋白构建大师”,他正在将一些建筑材料(Rotamer)安装在地基上(Backbone的$C_{\\alpha}$原子)。**但是在施工之前,建筑大师必须知道他需要在每个地基点上能安装什么材料**,并且经过他的深思熟虑(模拟退火)来构建出最完美的艺术品。此时,他需要我们的帮助,给他一张施工的蓝图。而这张蓝图就是PackerTask。\n",
    "\n",
    "<center><img src=\"./img/PackerTask.jpg\" width = \"700\" height = \"200\" align=center /></center>\n",
    "(图片来源: 晶泰科技团队)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "matched-northwest",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PyRosetta-4 2021 [Rosetta PyRosetta4.conda.mac.cxx11thread.serialization.python37.Release 2021.26+release.b308454c455dd04f6824cc8b23e54bbb9be2cdd7 2021-07-02T13:01:54] retrieved from: http://www.pyrosetta.org\n",
      "(C) Copyright Rosetta Commons Member Institutions. Created in JHU by Sergey Lyskov and PyRosetta Team.\n",
      "\u001b[0mcore.init: {0} \u001b[0mChecking for fconfig files in pwd and ./rosetta/flags\n",
      "\u001b[0mcore.init: {0} \u001b[0mRosetta version: PyRosetta4.conda.mac.cxx11thread.serialization.python37.Release r288 2021.26+release.b308454c455 b308454c455dd04f6824cc8b23e54bbb9be2cdd7 http://www.pyrosetta.org 2021-07-02T13:01:54\n",
      "\u001b[0mcore.init: {0} \u001b[0mcommand: PyRosetta -ex1 -ex2aro -database /opt/miniconda3/lib/python3.7/site-packages/pyrosetta/database\n",
      "\u001b[0mbasic.random.init_random_generator: {0} \u001b[0m'RNG device' seed mode, using '/dev/urandom', seed=-778071707 seed_offset=0 real_seed=-778071707 thread_index=0\n",
      "\u001b[0mbasic.random.init_random_generator: {0} \u001b[0mRandomGenerator:init: Normal mode, seed=-778071707 RG_type=mt19937\n",
      "\u001b[0mcore.chemical.GlobalResidueTypeSet: {0} \u001b[0mFinished initializing fa_standard residue type set.  Created 984 residue types\n",
      "\u001b[0mcore.chemical.GlobalResidueTypeSet: {0} \u001b[0mTotal time to initialize 0.684034 seconds.\n",
      "\u001b[0mcore.import_pose.import_pose: {0} \u001b[0mFile './data/helix.pdb' automatically determined to be of type PDB\n",
      "\u001b[0mcore.conformation.Conformation: {0} \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom:  OXT on residue GLY:CtermProteinFull 14\n"
     ]
    }
   ],
   "source": [
    "# 初始化PyRosetta并读取一段螺旋结构的PDB。\n",
    "from pyrosetta import *\n",
    "init()\n",
    "pose = pose_from_pdb('./data/helix.pdb')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "stuffed-procurement",
   "metadata": {},
   "source": [
    "**PackerTask需要从TaskFactory中进行自动生成。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "powered-management",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#Packer_Task\n",
      "\n",
      "Threads to request: ALL AVAILABLE\n",
      "\n",
      "resid\tpack?\tdesign?\tallowed_aas\n",
      "1\tTRUE\tTRUE\tALA:NtermProteinFull,CYS:NtermProteinFull,ASP:NtermProteinFull,GLU:NtermProteinFull,PHE:NtermProteinFull,GLY:NtermProteinFull,HIS:NtermProteinFull,HIS_D:NtermProteinFull,ILE:NtermProteinFull,LYS:NtermProteinFull,LEU:NtermProteinFull,MET:NtermProteinFull,ASN:NtermProteinFull,PRO:NtermProteinFull,GLN:NtermProteinFull,ARG:NtermProteinFull,SER:NtermProteinFull,THR:NtermProteinFull,VAL:NtermProteinFull,TRP:NtermProteinFull,TYR:NtermProteinFull\n",
      "2\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "3\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "4\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "5\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "6\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "7\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "8\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "9\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "10\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "11\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "12\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "13\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "14\tTRUE\tTRUE\tALA:CtermProteinFull,CYS:CtermProteinFull,ASP:CtermProteinFull,GLU:CtermProteinFull,PHE:CtermProteinFull,GLY:CtermProteinFull,HIS:CtermProteinFull,HIS_D:CtermProteinFull,ILE:CtermProteinFull,LYS:CtermProteinFull,LEU:CtermProteinFull,MET:CtermProteinFull,ASN:CtermProteinFull,PRO:CtermProteinFull,GLN:CtermProteinFull,ARG:CtermProteinFull,SER:CtermProteinFull,THR:CtermProteinFull,VAL:CtermProteinFull,TRP:CtermProteinFull,TYR:CtermProteinFull\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 从TaskFactory生成packer_task\n",
    "from pyrosetta.rosetta.core.pack.task import TaskFactory\n",
    "tf = TaskFactory()\n",
    "packer_task = tf.create_packer_task(pose)\n",
    "print(packer_task)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "intellectual-camping",
   "metadata": {},
   "source": [
    "从上述结果可见,默认生成的Packer_Task包含三种数据:\n",
    "- 残基位点编号信息\n",
    "- 每个位点上,Rotamer的3种基本状态\n",
    "- 每个位点上,被允许氨基酸Rotamer类型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "gross-equity",
   "metadata": {},
   "source": [
    "**并且默认的PackerTask是运行每个位点都包含20种氨基酸的Rotamer**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "compressed-middle",
   "metadata": {},
   "source": [
    "### 二、什么是TaskOperations?\n",
    "\n",
    "TaskOperations直译的意思即为\"任务操作元件\", **TaskOperations被TaskFactory加载并创建PackerTask。**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "electric-stranger",
   "metadata": {},
   "source": [
    "TaskOperations可以直观的理解为对**指定位点氨基酸的Rotamer自由度进行消减的过程**,类似做雕刻的过程,一开始默认的PackerTask允许所有20种氨基酸的Rotamer的出现,在加载不同的TaskOperations后,PackerTask的Rotamer自由度开始不断的缩减,直到满足用户设定的需求。其中一点是非常重要的。**一旦将Rotamer的自由度缩减后,将无法在PackerTask中重新被激活。** 如,第一个TaskOperations设定5号位点为“Fixed“的状态,第二个TaskOperations再重新设定5号位点为“Repacking“的状态。TaskFactory生成的PackerTask中5号位点**依然为“Fixed(No_repack)“的状态**。从底层逻辑来理解,TaskFactory将所有的TaskOperations中取Rotamer自由度越小的那个状态来生成PackerTask。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fatty-swiss",
   "metadata": {},
   "source": [
    "<center><img src=\"./img/taskop_turnoff.png\" width = \"500\" height = \"200\" align=center /></center>\n",
    "(图片来源: jadolfbr@gmail.com提供的ppt)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "oriental-saskatchewan",
   "metadata": {},
   "source": [
    "小结: \n",
    "* TaskOperations的三层自由度级别: Design/Repack/No_repack;\n",
    "* TaskOperations形象地类似于\"冰雕设计\", 它的作用是告诉TaskFactory在Pose中每个位点的Rotamer自由度大小;\n",
    "* 一旦一个氨基酸或区域被设计定为低自由度状态时,那么这个位点将不能被重新设定为高自由度状态。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "separated-marble",
   "metadata": {},
   "source": [
    "### 三、TaskOperations的分类"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "suffering-adobe",
   "metadata": {},
   "source": [
    "TaskOperation从构建逻辑上来分类共计有两种类型:\n",
    "\n",
    "* Residue Level TaskOperations: 根据Selector设定选择范围内位点的Rotamer自由度(手动挡);\n",
    "* Specialized Operations: 根据预设好逻辑,对位点进行全局Rotamer操作(自动挡);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "periodic-transition",
   "metadata": {},
   "source": [
    "#### 3.1 Residue Level TaskOperations的使用示例"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "saved-roberts",
   "metadata": {},
   "source": [
    "Residue Level TaskOperations(RLT)一般需要配合Selector来指定操作的范围。用户可以直观地将RLT理解为一个**自定义版本的Specialized Operations**。\n",
    "\n",
    "**特别注意的是:RLT是无法直接被TaskFactory所读取,其必须通过OperateOnResidueSubset函数来生成一个标准的TaskOperations。**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "described-baptist",
   "metadata": {},
   "source": [
    "此处举一个简单RestrictToRepackingRLT(顾明思议此RTL是将Rotamer约束到现有氨基酸类型上。)应用的例子:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fluid-teaching",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#Packer_Task\n",
      "\n",
      "Threads to request: ALL AVAILABLE\n",
      "\n",
      "resid\tpack?\tdesign?\tallowed_aas\n",
      "1\tTRUE\tFALSE\tASP:NtermProteinFull\n",
      "2\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "3\tTRUE\tFALSE\tLEU\n",
      "4\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "5\tTRUE\tFALSE\tLYS\n",
      "6\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "7\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "8\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "9\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "10\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "11\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "12\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "13\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "14\tTRUE\tTRUE\tALA:CtermProteinFull,CYS:CtermProteinFull,ASP:CtermProteinFull,GLU:CtermProteinFull,PHE:CtermProteinFull,GLY:CtermProteinFull,HIS:CtermProteinFull,HIS_D:CtermProteinFull,ILE:CtermProteinFull,LYS:CtermProteinFull,LEU:CtermProteinFull,MET:CtermProteinFull,ASN:CtermProteinFull,PRO:CtermProteinFull,GLN:CtermProteinFull,ARG:CtermProteinFull,SER:CtermProteinFull,THR:CtermProteinFull,VAL:CtermProteinFull,TRP:CtermProteinFull,TYR:CtermProteinFull\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from pyrosetta.rosetta.core.pack.task.operation import RestrictToRepackingRLT, OperateOnResidueSubset\n",
    "from pyrosetta.rosetta.core.select.residue_selector import ResidueIndexSelector\n",
    "# 选择氨基酸范围\n",
    "select_pos3 = ResidueIndexSelector('1,3,5')\n",
    "\n",
    "# 使用OperateOnResidueSubset生成TaskOperations\n",
    "packing_taskop = OperateOnResidueSubset(RestrictToRepackingRLT(), select_pos3, False)\n",
    "\n",
    "# 将TaskOperations加载至TaskFactory中\n",
    "pack_tf = TaskFactory()\n",
    "pack_tf.push_back(packing_taskop)\n",
    "\n",
    "# 生成PackerTask\n",
    "packer_task = pack_tf.create_task_and_apply_taskoperations(pose)\n",
    "print(packer_task)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "mental-endorsement",
   "metadata": {},
   "source": [
    "此时,通过PackerTask我们可以观测到,我们选择的1,3,5号氨基酸都只被允许为进行pack,氨基酸的类型也只剩下pose中原本的氨基酸类型。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "approximate-level",
   "metadata": {},
   "source": [
    "除了RestrictToRepackingRLT以外,还有许多其他7种常用的RTL类型,此处做一个简单的列表解释用途:\n",
    "- RestrictToRepackingRLT: 将Rotamer自由度设置为repacking\n",
    "- PreventRepackingRLT: 将Rotamer自由度设置为no_repack\n",
    "- RestrictAbsentCanonicalAASExceptNativeRLT: 将Rotamer自由度限定在给定的氨基酸类型列表,并允许保留当前位点氨基酸类型的Rotamer\n",
    "- RestrictAbsentCanonicalAASRLT: 将Rotamer自由度限定在给定的氨基酸类型列表。\n",
    "- DisallowIfNonnativeRLT: 将Rotamer自由度限定在**非给定的氨基酸类型列表**,并允许保留当前位点氨基酸类型的Rotamer\n",
    "- IncludeCurrentRLT: 设定Packer在执行期间,考虑Pose输入时的Rotamer状态(并非全部忘记)。\n",
    "- ExtraRotamersGenericRLT: 设定在Rotamer采样中,是否考虑增加额外的数量,否则仅会考虑理想型的Rotamer。 \n",
    "\n",
    "上述的这些RTL和Selector就可以组合成任意的TaskOperations,更多RLT的API用法请参考TaskOperations API详解相关的章节。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "given-hobby",
   "metadata": {},
   "source": [
    "#### 思考\n",
    "如果将OperateOnResidueSubset中的False转变为True,PackerTask会发生什么变化?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "taken-rolling",
   "metadata": {},
   "source": [
    "#### 3.2 Specialized Operations的使用示例"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "identical-history",
   "metadata": {},
   "source": [
    "Specialized Operations其实就是开发者预先设定好一些应用场景的TaskOperations,这类TaskOperations可以直接被TaskFactory所读取,一般的这种TaskOperations的应用范围都是全局性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "lined-prayer",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#Packer_Task\n",
      "\n",
      "Threads to request: ALL AVAILABLE\n",
      "\n",
      "resid\tpack?\tdesign?\tallowed_aas\n",
      "1\tTRUE\tFALSE\tASP:NtermProteinFull\n",
      "2\tTRUE\tFALSE\tGLU\n",
      "3\tTRUE\tFALSE\tLEU\n",
      "4\tTRUE\tFALSE\tGLN\n",
      "5\tTRUE\tFALSE\tLYS\n",
      "6\tTRUE\tFALSE\tTRP\n",
      "7\tTRUE\tFALSE\tVAL\n",
      "8\tTRUE\tFALSE\tGLU\n",
      "9\tTRUE\tFALSE\tGLN\n",
      "10\tTRUE\tFALSE\tALA\n",
      "11\tTRUE\tFALSE\tGLU\n",
      "12\tTRUE\tFALSE\tARG\n",
      "13\tTRUE\tFALSE\tASN\n",
      "14\tTRUE\tFALSE\tGLY:CtermProteinFull\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from pyrosetta.rosetta.core.pack.task.operation import RestrictToRepacking\n",
    "\n",
    "# 将TaskOperations加载至TaskFactory中\n",
    "pack_tf = TaskFactory()\n",
    "pack_tf.push_back(RestrictToRepacking())\n",
    "\n",
    "# 生成PackerTask\n",
    "packer_task = pack_tf.create_task_and_apply_taskoperations(pose)\n",
    "print(packer_task)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "funny-nylon",
   "metadata": {},
   "source": [
    "可见所有位点都被限制为repacking的状态,更多Specialized Operations的API用法请参考TaskOperations API详解相关的章节。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "convenient-virginia",
   "metadata": {
    "tags": []
   },
   "source": [
    "### 四、Pack Rotamer相关Mover"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "recovered-survivor",
   "metadata": {},
   "source": [
    "#### 4.1 PackRotamersMover"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "grateful-patio",
   "metadata": {},
   "source": [
    "上述内容已经清楚地阐释了PackerTask的作用,以及如何去利用TaskOperations和TaskFactory去生成特定用途的PackerTask。当有了这张清晰的“蓝图文件后”,就实际地在Pose结构上进行“施工”,而真正执行任务的Mover大多可以在pyrosetta.rosetta.protocols.minimization_packing的API下找到。此处我们以最简单的PackRotamersMover做实例示范。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "adjusted-chemical",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0mcore.scoring.etable: {0} \u001b[0mStarting energy table calculation\n",
      "\u001b[0mcore.scoring.etable: {0} \u001b[0msmooth_etable: changing atr/rep split to bottom of energy well\n",
      "\u001b[0mcore.scoring.etable: {0} \u001b[0msmooth_etable: spline smoothing lj etables (maxdis = 6)\n",
      "\u001b[0mcore.scoring.etable: {0} \u001b[0msmooth_etable: spline smoothing solvation etables (max_dis = 6)\n",
      "\u001b[0mcore.scoring.etable: {0} \u001b[0mFinished calculating energy tables.\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBPoly1D.csv\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBFadeIntervals.csv\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/HBEval.csv\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/DonStrength.csv\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/hbonds/ref2015_params/AccStrength.csv\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/rama/fd/all.ramaProb\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/rama/fd/prepro.ramaProb\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.all.txt\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.gly.txt\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.pro.txt\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/omega/omega_ppdep.valile.txt\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/P_AA\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/P_AA_n\n",
      "\u001b[0mcore.scoring.P_AA: {0} \u001b[0mshapovalov_lib::shap_p_aa_pp_smooth_level of 1( aka low_smooth ) got activated.\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/P_AA_pp/shapovalov/10deg/kappa131/a20.prop\n",
      "\u001b[0mcore.import_pose.import_pose: {0} \u001b[0mFile './data/helix.pdb' automatically determined to be of type PDB\n",
      "\u001b[0mcore.conformation.Conformation: {0} \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing heavyatom:  OXT on residue GLY:CtermProteinFull 14\n",
      "\u001b[0mbasic.io.database: {0} \u001b[0mDatabase file opened: scoring/score_functions/elec_cp_reps.dat\n",
      "\u001b[0mcore.scoring.elec.util: {0} \u001b[0mRead 40 countpair representative atoms\n",
      "\u001b[0mcore.pack.dunbrack.RotamerLibrary: {0} \u001b[0mshapovalov_lib_fixes_enable option is true.\n",
      "\u001b[0mcore.pack.dunbrack.RotamerLibrary: {0} \u001b[0mshapovalov_lib::shap_dun10_smooth_level of 1( aka lowest_smooth ) got activated.\n",
      "\u001b[0mcore.pack.dunbrack.RotamerLibrary: {0} \u001b[0mBinary rotamer library selected: /opt/miniconda3/lib/python3.7/site-packages/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin\n",
      "\u001b[0mcore.pack.dunbrack.RotamerLibrary: {0} \u001b[0mUsing Dunbrack library binary file '/opt/miniconda3/lib/python3.7/site-packages/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin'.\n",
      "\u001b[0mcore.pack.dunbrack.RotamerLibrary: {0} \u001b[0mDunbrack 2010 library took 0.182942 seconds to load from binary\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 182 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mbasic.thread_manager.RosettaThreadManager: {?} \u001b[0mCreating a thread pool of 1 threads.\n",
      "\u001b[0mbasic.thread_manager.RosettaThreadPool: {?} \u001b[0mLaunched 0 new threads.\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pyrosetta.rosetta.protocols.minimization_packing import PackRotamersMover\n",
    "from pyrosetta import create_score_function\n",
    "pack_mover = PackRotamersMover()\n",
    "ref2015 = create_score_function('ref2015')\n",
    "pose = pose_from_pdb('./data/helix.pdb')\n",
    "\n",
    "# 不需要导入PackTask,只需要输入TaskFactory即可。\n",
    "pack_mover.task_factory(pack_tf)\n",
    "pack_mover.score_function(ref2015)\n",
    "\n",
    "# 执行repacking\n",
    "pack_mover.apply(pose)\n",
    "pose.dump_pdb('./data/repacked.pdb')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "operational-ridge",
   "metadata": {},
   "source": [
    "对比原始输入结构和repack之后的结构变化,发现只有侧链的rotamer发生了变化,和预期一致。\n",
    "<center><img src=\"./img/repacking_conf.png\" width = \"600\" height = \"200\" align=center /></center>\n",
    "(图片来源: 晶泰科技团队)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "private-fetish",
   "metadata": {},
   "source": [
    "#### 4.2 FastRelax"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "classical-andorra",
   "metadata": {},
   "source": [
    "上述的介绍的PackRotamersMover所做的就仅仅是处理侧链构象相关的模拟退火过程。但是在实际应用中Rosetta常常交替式运行Packer和Minimizer(MinMover),这类组合型的Mover常有的有FastRelaxMover以及FastDesignMover。这些Mover可以同时优化侧链和骨架去寻找能量更低的构象。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "brutal-absolute",
   "metadata": {},
   "source": [
    "一张图看懂FastRelax在做什么:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "marked-prize",
   "metadata": {},
   "source": [
    "<center><img src=\"./img/FastRelax.jpg\" width = \"600\" height = \"200\" align=center /></center>\n",
    "(图片来源: 晶泰科技团队)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "invalid-sweet",
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mReading relax scripts list from database.\n",
      "\u001b[0mcore.scoring.ScoreFunctionFactory: {0} \u001b[0mSCOREFUNCTION: \u001b[32mref2015\u001b[0m\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mLooking for MonomerRelax2019.txt\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0m================== Reading script file: /opt/miniconda3/lib/python3.7/site-packages/pyrosetta/database/sampling/relax_scripts/MonomerRelax2019.txt ==================\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mrepeat %%nrepeats%%\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mcoord_cst_weight 1.0\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.040\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mrepack\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.051\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mmin 0.01\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mcoord_cst_weight 0.5\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.265\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mrepack\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.280\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mmin 0.01\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mcoord_cst_weight 0.0\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.559\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mrepack\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 0.581\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mmin 0.01\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mcoord_cst_weight 0.0\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mscale:fa_rep 1\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mrepack\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mmin 0.00001\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0maccept_to_best\n",
      "\u001b[0mprotocols.relax.RelaxScriptManager: {0} \u001b[0mendrepeat\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repeat  -16.7505  0  0  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -16.7505  0  0  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -22.4175  0  0  0.022\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 201 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -24.6338  0  0  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.4608  0  0  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -24.4789  0.000592829  0.000592829  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -24.4789  0.000592829  0.000592829  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -21.09  0.000592829  0.000592829  0.14575\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 194 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -21.3231  0.000592829  0.000592829  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -21.1753  0.000592829  0.000592829  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -21.1948  0.000882851  0.000882851  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -21.1948  0.000882851  0.000882851  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -18.4693  0.000882851  0.000882851  0.30745\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 194 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -19.3676  0.000882851  0.000882851  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -19.2377  0.000882851  0.000882851  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -19.2466  0.00116297  0.00116297  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -19.2466  0.00116297  0.00116297  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -16.7738  0.00116297  0.00116297  0.55\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 194 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -16.2946  0.00116297  0.00116297  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -20.9544  0.271541  0.271541  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 0  -20.9544  -20.9544  0.271541  0.271541\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -20.9544  0.271541  0.271541  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -20.9544  0.271541  0.271541  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -20.9544  0.271541  0.271541  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.4018  0.271541  0.271541  0.022\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 207 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.771  0.271541  0.271541  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.6961  0.271541  0.271541  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.7002  0.27138  0.27138  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.7002  0.27138  0.27138  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.2457  0.27138  0.27138  0.14575\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 200 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -25.2457  0.27138  0.27138  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.1438  0.27138  0.27138  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -25.1559  0.270886  0.270886  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -25.1559  0.270886  0.270886  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -23.2676  0.270886  0.270886  0.30745\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 196 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -23.2676  0.270886  0.270886  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -23.1187  0.270886  0.270886  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -23.1555  0.269967  0.269967  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -23.1555  0.269967  0.269967  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -20.3431  0.269967  0.269967  0.55\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 195 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -20.3651  0.269967  0.269967  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -22.809  0.263703  0.263703  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 1  -22.809  -22.809  0.263703  0.263703\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -22.809  0.263703  0.263703  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -22.809  0.263703  0.263703  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -22.809  0.263703  0.263703  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.292  0.263703  0.263703  0.022\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 210 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -27.4217  0.263703  0.263703  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.3649  0.263703  0.263703  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -27.3682  0.263861  0.263861  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -27.3682  0.263861  0.263861  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.2615  0.263861  0.263861  0.14575\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 205 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.2615  0.263861  0.263861  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.1839  0.263861  0.263861  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.1858  0.263953  0.263953  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.1858  0.263953  0.263953  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.7424  0.263953  0.263953  0.30745\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 201 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -24.7524  0.263953  0.263953  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.6407  0.263953  0.263953  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -24.6416  0.263979  0.263979  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -24.6416  0.263979  0.263979  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -22.513  0.263979  0.263979  0.55\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 200 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -22.513  0.263979  0.263979  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -22.8052  0.264081  0.264081  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 2  -22.8052  -22.809  0.263703  0.263703\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -22.8052  0.264081  0.264081  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -22.8052  0.264081  0.264081  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -22.8052  0.264081  0.264081  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.2738  0.264081  0.264081  0.022\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 210 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -27.3953  0.264081  0.264081  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.3397  0.264081  0.264081  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -27.343  0.264247  0.264247  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -27.343  0.264247  0.264247  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.2609  0.264247  0.264247  0.14575\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 205 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.2608  0.264247  0.264247  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.185  0.264247  0.264247  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.1868  0.264353  0.264353  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.1868  0.264353  0.264353  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.7752  0.264353  0.264353  0.30745\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 201 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -24.7752  0.264353  0.264353  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.6639  0.264353  0.264353  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -24.6648  0.264378  0.264378  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -24.6648  0.264378  0.264378  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -22.5448  0.264378  0.264378  0.55\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 200 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -22.571  0.264378  0.264378  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -22.8064  0.262966  0.262966  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 3  -22.8064  -22.809  0.263703  0.263703\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -22.8064  0.262966  0.262966  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -22.8064  0.262966  0.262966  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -22.8064  0.262966  0.262966  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.2757  0.262966  0.262966  0.022\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 210 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -27.4014  0.262966  0.262966  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.3455  0.262966  0.262966  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -27.3489  0.263132  0.263132  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -27.3489  0.263132  0.263132  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.2614  0.263132  0.263132  0.14575\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 205 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.2614  0.263132  0.263132  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.1851  0.263132  0.263132  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.1869  0.263236  0.263236  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.1869  0.263236  0.263236  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.7684  0.263236  0.263236  0.30745\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 201 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -24.7684  0.263236  0.263236  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -24.6566  0.263236  0.263236  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -24.6576  0.263258  0.263258  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -24.6576  0.263258  0.263258  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -22.5273  0.263258  0.263258  0.55\n",
      "\u001b[0mcore.pack.task: {0} \u001b[0mPacker task: initialize from command line()\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 200 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating DensePDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -22.5578  0.263258  0.263258  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -22.806  0.263123  0.263123  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 4  -22.806  -22.809  0.263703  0.263703\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -22.806  0.263123  0.263123  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -22.806  0.263123  0.263123  0.55\n",
      "\u001b[0mprotocols::checkpoint: {0} \u001b[0mDeleting checkpoints of FastRelax\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# FastRelax\n",
    "from pyrosetta.rosetta.protocols.relax import FastRelax\n",
    "fastrelax = FastRelax()\n",
    "fastrelax.set_scorefxn(ref2015)\n",
    "fastrelax.set_default_movemap() #使用默认的Movemap()\n",
    "fastrelax.apply(pose)\n",
    "pose.dump_pdb('./data/fastrelaxed.pdb')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "consecutive-optics",
   "metadata": {},
   "source": [
    "<center><img src=\"./img/fastrelaxed.png\" width = \"600\" height = \"200\" align=center /></center>\n",
    "(图片来源: 晶泰科技团队)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "champion-harvey",
   "metadata": {},
   "source": [
    "尽管构象没有非常大的变化,但是可见骨架和侧链是同时被优化的。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "working-provision",
   "metadata": {},
   "source": [
    "#### 4.3 FastDesign"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "beneficial-content",
   "metadata": {},
   "source": [
    "FastDesign其实就是FastRelax的Design版本,允许序列被进行设计。此处我们定一个Task不允许1、3、5、7、9位点design,其余位点允许设计出20种氨基酸。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "smart-roads",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#Packer_Task\n",
      "\n",
      "Threads to request: ALL AVAILABLE\n",
      "\n",
      "resid\tpack?\tdesign?\tallowed_aas\n",
      "1\tTRUE\tFALSE\tASP:NtermProteinFull\n",
      "2\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "3\tTRUE\tFALSE\tLEU\n",
      "4\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "5\tTRUE\tFALSE\tLYS\n",
      "6\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "7\tTRUE\tFALSE\tVAL\n",
      "8\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "9\tTRUE\tFALSE\tGLN\n",
      "10\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "11\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "12\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "13\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "14\tTRUE\tTRUE\tALA:CtermProteinFull,CYS:CtermProteinFull,ASP:CtermProteinFull,GLU:CtermProteinFull,PHE:CtermProteinFull,GLY:CtermProteinFull,HIS:CtermProteinFull,HIS_D:CtermProteinFull,ILE:CtermProteinFull,LYS:CtermProteinFull,LEU:CtermProteinFull,MET:CtermProteinFull,ASN:CtermProteinFull,PRO:CtermProteinFull,GLN:CtermProteinFull,ARG:CtermProteinFull,SER:CtermProteinFull,THR:CtermProteinFull,VAL:CtermProteinFull,TRP:CtermProteinFull,TYR:CtermProteinFull\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 设置FastDesign的蓝图。\n",
    "from pyrosetta.rosetta.protocols.denovo_design.movers import FastDesign\n",
    "\n",
    "# 将TaskOperations加载至TaskFactory中\n",
    "# 选择氨基酸范围\n",
    "no_design_pos = ResidueIndexSelector('1,3,5,7,9')\n",
    "\n",
    "# 使用OperateOnResidueSubset生成TaskOperations\n",
    "design_taskop = OperateOnResidueSubset(RestrictToRepackingRLT(), no_design_pos, False)\n",
    "\n",
    "design_tf = TaskFactory()\n",
    "design_tf.push_back(design_taskop)\n",
    "\n",
    "# 生成PackerTask\n",
    "design_task = design_tf.create_task_and_apply_taskoperations(pose)\n",
    "print(design_task)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "computational-medicaid",
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0mcore.scoring.ScoreFunctionFactory: {0} \u001b[0mSCOREFUNCTION: \u001b[32mref2015\u001b[0m\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m#Packer_Task\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0mThreads to request: ALL AVAILABLE\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0mresid\tpack?\tdesign?\tallowed_aas\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m1\tTRUE\tFALSE\tASP:NtermProteinFull\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m2\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m3\tTRUE\tFALSE\tLEU\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m4\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m5\tTRUE\tFALSE\tLYS\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m6\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m7\tTRUE\tFALSE\tVAL\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m8\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m9\tTRUE\tFALSE\tGLN\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m10\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m11\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m12\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m13\tTRUE\tTRUE\tALA,CYS,ASP,GLU,PHE,GLY,HIS,HIS_D,ILE,LYS,LEU,MET,ASN,PRO,GLN,ARG,SER,THR,VAL,TRP,TYR\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m14\tTRUE\tTRUE\tALA:CtermProteinFull,CYS:CtermProteinFull,ASP:CtermProteinFull,GLU:CtermProteinFull,PHE:CtermProteinFull,GLY:CtermProteinFull,HIS:CtermProteinFull,HIS_D:CtermProteinFull,ILE:CtermProteinFull,LYS:CtermProteinFull,LEU:CtermProteinFull,MET:CtermProteinFull,ASN:CtermProteinFull,PRO:CtermProteinFull,GLN:CtermProteinFull,ARG:CtermProteinFull,SER:CtermProteinFull,THR:CtermProteinFull,VAL:CtermProteinFull,TRP:CtermProteinFull,TYR:CtermProteinFull\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repeat  -22.809  0  0  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -22.809  0  0  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -27.292  0  0  0.022\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2580 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -33.9419  0  0  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -33.5386  0  0  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -33.5519  0.000789733  0.000789733  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -33.5519  0.000789733  0.000789733  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.7005  0.000789733  0.000789733  0.14575\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2496 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -29.3306  0.000789733  0.000789733  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -29.1736  0.000789733  0.000789733  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -29.1777  0.00104836  0.00104836  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -29.1777  0.00104836  0.00104836  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.2553  0.00104836  0.00104836  0.30745\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2430 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.4018  0.00104836  0.00104836  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.1935  0.00104836  0.00104836  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.2022  0.00144815  0.00144815  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.2022  0.00144815  0.00144815  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -22.2381  0.00144815  0.00144815  0.55\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2379 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -24.1411  0.00144815  0.00144815  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.1179  0.140127  0.140127  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 0  -28.1179  -28.1179  0.140127  0.140127\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -28.1179  0.140127  0.140127  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -28.1179  0.140127  0.140127  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -28.1179  0.140127  0.140127  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -33.0957  0.140127  0.140127  0.022\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2531 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -35.4398  0.140127  0.140127  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -35.0094  0.140127  0.140127  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -35.0213  0.139614  0.139614  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -35.0213  0.139614  0.139614  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.7146  0.139614  0.139614  0.14575\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2429 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -31.3182  0.139614  0.139614  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.1772  0.139614  0.139614  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -31.1813  0.139846  0.139846  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -31.1813  0.139846  0.139846  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.5587  0.139846  0.139846  0.30745\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2355 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -28.7355  0.139846  0.139846  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.6147  0.139846  0.139846  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.6157  0.139874  0.139874  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -28.6157  0.139874  0.139874  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -26.3155  0.139874  0.139874  0.55\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2283 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.458  0.139874  0.139874  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.9144  0.0973955  0.0973955  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 1  -26.9144  -28.1179  0.140127  0.140127\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -26.9144  0.0973955  0.0973955  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -26.9144  0.0973955  0.0973955  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.9144  0.0973955  0.0973955  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.3626  0.0973955  0.0973955  0.022\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2534 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -35.0507  0.0973955  0.0973955  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -34.7919  0.0973955  0.0973955  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -34.8058  0.0977755  0.0977755  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -34.8058  0.0977755  0.0977755  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -29.7448  0.0977755  0.0977755  0.14575\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2427 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -31.4077  0.0977755  0.0977755  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.2744  0.0977755  0.0977755  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -31.2787  0.0978921  0.0978921  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -31.2787  0.0978921  0.0978921  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.8004  0.0978921  0.0978921  0.30745\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2359 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -28.9509  0.0978921  0.0978921  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.788  0.0978921  0.0978921  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.7896  0.0979167  0.0979167  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -28.7896  0.0979167  0.0979167  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.6866  0.0979167  0.0979167  0.55\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2280 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.6963  0.0979167  0.0979167  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.913  0.0955109  0.0955109  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 2  -26.913  -28.1179  0.140127  0.140127\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -26.913  0.0955109  0.0955109  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -26.913  0.0955109  0.0955109  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.913  0.0955109  0.0955109  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.3611  0.0955109  0.0955109  0.022\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2532 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -35.0264  0.0955109  0.0955109  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -34.769  0.0955109  0.0955109  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -34.7829  0.0958909  0.0958909  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -34.7829  0.0958909  0.0958909  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -29.7486  0.0958909  0.0958909  0.14575\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2425 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -31.388  0.0958909  0.0958909  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.2539  0.0958909  0.0958909  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -31.2583  0.0960147  0.0960147  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -31.2583  0.0960147  0.0960147  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.7637  0.0960147  0.0960147  0.30745\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2357 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -28.9487  0.0960147  0.0960147  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.7858  0.0960147  0.0960147  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.7875  0.0960447  0.0960447  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -28.7875  0.0960447  0.0960447  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.6852  0.0960447  0.0960447  0.55\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2280 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -26.6957  0.0960447  0.0960447  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -26.9132  0.095512  0.095512  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 3  -26.9132  -28.1179  0.140127  0.140127\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -26.9132  0.095512  0.095512  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -26.9132  0.095512  0.095512  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -26.9132  0.095512  0.095512  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.357  0.095512  0.095512  0.022\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2532 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -35.0274  0.095512  0.095512  0.022\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -34.7696  0.095512  0.095512  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -34.7835  0.0958912  0.0958912  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -34.7835  0.0958912  0.0958912  0.02805\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -29.7421  0.0958912  0.0958912  0.14575\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2425 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -31.3872  0.0958912  0.0958912  0.14575\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -31.2531  0.0958912  0.0958912  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -31.2575  0.0960121  0.0960121  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -31.2575  0.0960121  0.0960121  0.154\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.7652  0.0960121  0.0960121  0.30745\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2357 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -28.9502  0.0960121  0.0960121  0.30745\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -28.7875  0.0960121  0.0960121  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.7892  0.0960411  0.0960411  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: coord_cst_weight  -28.7892  0.0960411  0.0960411  0.31955\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: scale:fa_rep  -25.6913  0.0960411  0.0960411  0.55\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mbuilt 2280 rotamers at 14 positions.\n",
      "\u001b[0mcore.pack.pack_rotamers: {0} \u001b[0mRequesting all available threads for interaction graph computation.\n",
      "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: {0} \u001b[0mInstantiating PDInteractionGraph\n",
      "\u001b[0mcore.pack.rotamer_set.RotamerSets: {0} \u001b[0mCompleted interaction graph pre-calculation in 1 available threads (1 had been requested).\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: repack  -27.2444  0.0960411  0.0960411  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: min  -28.716  0.174474  0.174474  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mMRP: 4  -28.716  -28.716  0.174474  0.174474\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: accept_to_best  -28.716  0.174474  0.174474  0.55\n",
      "\u001b[0mprotocols.relax.FastRelax: {0} \u001b[0mCMD: endrepeat  -28.716  0.174474  0.174474  0.55\n",
      "\u001b[0mprotocols::checkpoint: {0} \u001b[0mDeleting checkpoints of FastRelax\n",
      "\u001b[0mprotocols.denovo_design.movers.FastDesign: {0} \u001b[0m\n",
      "------------------------------------------------------------\n",
      " Scores                       Weight   Raw Score Wghtd.Score\n",
      "------------------------------------------------------------\n",
      " fa_atr                       1.000     -56.791     -56.791\n",
      " fa_rep                       0.550       8.173       4.495\n",
      " fa_sol                       1.000      61.636      61.636\n",
      " fa_intra_rep                 0.005      21.747       0.109\n",
      " fa_intra_sol_xover4          1.000       2.734       2.734\n",
      " lk_ball_wtd                  1.000      -1.989      -1.989\n",
      " fa_elec                      1.000     -31.585     -31.585\n",
      " pro_close                    1.250       0.000       0.000\n",
      " hbond_sr_bb                  1.000      -9.781      -9.781\n",
      " hbond_lr_bb                  1.000       0.000       0.000\n",
      " hbond_bb_sc                  1.000       0.000       0.000\n",
      " hbond_sc                     1.000      -3.564      -3.564\n",
      " dslf_fa13                    1.250       0.000       0.000\n",
      " omega                        0.400       1.037       0.415\n",
      " fa_dun                       0.700      24.695      17.287\n",
      " p_aa_pp                      0.600      -2.897      -1.738\n",
      " yhh_planarity                0.625       0.000       0.000\n",
      " ref                          1.000      -5.903      -5.903\n",
      " rama_prepro                  0.450      -8.982      -4.042\n",
      "---------------------------------------------------\n",
      " Total weighted score:                      -28.716\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 初始化FastDesign:\n",
    "fastdesign = FastDesign()\n",
    "fastdesign.set_scorefxn(ref2015)\n",
    "fastdesign.set_default_movemap() #使用默认的Movemap()\n",
    "fastdesign.set_task_factory(design_tf)\n",
    "fastdesign.apply(pose)\n",
    "pose.dump_pdb('./data/fastdesign.pdb')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "swedish-violation",
   "metadata": {},
   "source": [
    "通过结构比对,我发现一些位点上的氨基酸类型发生了变化。\n",
    "<center><img src=\"./img/fastdesign.png\" width = \"500\" height = \"200\" align=center /></center>\n",
    "(图片来源: 晶泰科技团队)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "historic-payroll",
   "metadata": {},
   "source": [
    "### 练习:\n",
    "1. 【LayerDesign】找一个小于60个氨基酸的小蛋白质,通过PyMOL观察,将包埋在内部的氨基酸标记,只允许这些部分设计为疏水氨基酸,其余暴露在溶液中的部分只能设计为极性氨基酸,使用相关的ResidueSelector选择并创建相关TaskOperations,最后使用FastDesign进行设计,查看设计的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "norman-footwear",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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": 5
}