{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ac64343b-1edd-4dd7-9b21-889e4429bdcd",
   "metadata": {},
   "source": [
    "# Rstoolbox Plot API\n",
    "\n",
    "@Author: 吴炜坤\n",
    "\n",
    "@email:weikun.wu@xtalpi.com/weikunwu@163.com"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0cbcffee-9896-4cdd-8257-c639fb088faf",
   "metadata": {},
   "source": [
    "在上一章节,我们已经介绍了最重要,且最基础的rstoolbox的使用方法。在这一节,我们尝试撰写一些rstoolbox的作图API以及蛋白设计筛选的。\n",
    "\n",
    "目前发现就两个比较有用:\n",
    "- 突变频率分析\n",
    "- 序列相似性分析\n",
    "\n",
    "更多API请阅读:\n",
    "http://jaumebonet.cat/RosettaSilentToolbox/tutorial.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "caa54b76-e03b-4e72-9f78-8d73298759a8",
   "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=-1116185448 seed_offset=0 real_seed=-1116185448 thread_index=0\n",
      "\u001b[0mbasic.random.init_random_generator: {0} \u001b[0mRandomGenerator:init: Normal mode, seed=-1116185448 RG_type=mt19937\n"
     ]
    }
   ],
   "source": [
    "# 初始化pyrosetta\n",
    "from pyrosetta import *\n",
    "init()\n",
    "# 初始化\n",
    "import rstoolbox as rs\n",
    "from rstoolbox.io import parse_rosetta_file\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "963b3752-1d59-4f8b-b127-d0406f5c8468",
   "metadata": {},
   "source": [
    "### 1. 突变频率分析\n",
    "rstoolbox也可以非常方便地分析RosettaDesign之后的一大批序列上每个位点的频率,类型等。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "19a93ab5-d4ea-4ec5-8f8d-1963a20602f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>score</th>\n",
       "      <th>fa_atr</th>\n",
       "      <th>description</th>\n",
       "      <th>sequence_A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-115.348</td>\n",
       "      <td>-248.220</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb</td>\n",
       "      <td>SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-111.579</td>\n",
       "      <td>-239.381</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb</td>\n",
       "      <td>SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-107.145</td>\n",
       "      <td>-245.738</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb</td>\n",
       "      <td>SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-116.810</td>\n",
       "      <td>-243.867</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb</td>\n",
       "      <td>SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-121.064</td>\n",
       "      <td>-244.426</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb</td>\n",
       "      <td>TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-118.053</td>\n",
       "      <td>-246.797</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb</td>\n",
       "      <td>SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-104.212</td>\n",
       "      <td>-233.769</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb</td>\n",
       "      <td>DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-111.605</td>\n",
       "      <td>-241.044</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb</td>\n",
       "      <td>TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-114.042</td>\n",
       "      <td>-232.848</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb</td>\n",
       "      <td>SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-99.049</td>\n",
       "      <td>-240.205</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb</td>\n",
       "      <td>SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     score   fa_atr                                         description  \\\n",
       "0 -115.348 -248.220  EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb   \n",
       "1 -111.579 -239.381  EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb   \n",
       "2 -107.145 -245.738  EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb   \n",
       "3 -116.810 -243.867  EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb   \n",
       "4 -121.064 -244.426  EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb   \n",
       "5 -118.053 -246.797  EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb   \n",
       "6 -104.212 -233.769  EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb   \n",
       "7 -111.605 -241.044  EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb   \n",
       "8 -114.042 -232.848  EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb   \n",
       "9 -99.049  -240.205  EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb   \n",
       "\n",
       "                                    sequence_A  \n",
       "0  SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV  \n",
       "1  SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI  \n",
       "2  SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR  \n",
       "3  SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY  \n",
       "4  TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK  \n",
       "5  SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM  \n",
       "6  DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG  \n",
       "7  TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG  \n",
       "8  SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI  \n",
       "9  SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据rules进行读取:\n",
    "# 定义description, description是一个字典格式;\n",
    "rules = {'scores': ['score', 'fa_atr', 'description'], 'sequence': 'A'}\n",
    "\n",
    "# 根据rules进行读取:\n",
    "silent_file = './data/design_result.silent'\n",
    "df = parse_rosetta_file(silent_file, rules)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "225dcde8-6e40-41fe-9e91-dcca01307c0e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 添加野生型序列\n",
    "wildtype_seq = 'SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV'\n",
    "df.add_reference_sequence('A', wildtype_seq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "0414bf03-57c3-4f40-9b65-1433bf35ed8f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>score</th>\n",
       "      <th>fa_atr</th>\n",
       "      <th>description</th>\n",
       "      <th>sequence_A</th>\n",
       "      <th>mutants_A</th>\n",
       "      <th>mutant_positions_A</th>\n",
       "      <th>mutant_count_A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-115.348</td>\n",
       "      <td>-248.220</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb</td>\n",
       "      <td>SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-111.579</td>\n",
       "      <td>-239.381</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb</td>\n",
       "      <td>SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI</td>\n",
       "      <td>H2V,I3E,E5I,I6V,F7K,E9M,L10I,Q11K,R12K,Q13A,N14S,A15G,S16A,N17S,L18R,R19E,E20Q,F21I,V22K,E23K,E24L,W26E,R27K,R28I,G29P,E30G,M31V,S32D,E34R,L35V,Y36I,K38M,M39A,K40E,K41R,I42L,V43I</td>\n",
       "      <td>2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31,32,34,35,36,38,39,40,41,42,43</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-107.145</td>\n",
       "      <td>-245.738</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb</td>\n",
       "      <td>SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR</td>\n",
       "      <td>H2E,I3E,E5K,I6E,K8L,E9K,L10R,Q11V,R12K,Q13D,N14K,A15D,S16P,N17E,R19A,E20K,F21K,V22M,E23Q,E24K,A25L,W26L,R27E,R28N,E30Y,M31A,E33I,L35Q,Y36L,K37Q,M39Q,K40L,K41E,I42K,V43R</td>\n",
       "      <td>2,3,5,6,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,31,33,35,36,37,39,40,41,42,43</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-116.810</td>\n",
       "      <td>-243.867</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb</td>\n",
       "      <td>SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY</td>\n",
       "      <td>H2E,I6L,F7A,E9R,Q11L,R12K,Q13D,N14S,A15R,S16G,N17D,E20K,F21L,V22L,A25L,W26Q,R28N,G29N,E30Q,M31P,S32N,E33Y,E34Q,L35Y,Y36V,K37E,K38H,M39L,K40L,K41R,I42K,V43Y</td>\n",
       "      <td>2,6,7,9,11,12,13,14,15,16,17,20,21,22,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-121.064</td>\n",
       "      <td>-244.426</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb</td>\n",
       "      <td>TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK</td>\n",
       "      <td>S1T,H2P,I3L,E4D,I6E,F7A,K8R,E9R,L10A,Q11F,R12Q,Q13R,A15S,N17T,L18A,R19Q,F21L,V22L,E23K,E24Q,A25L,W26E,R28D,G29S,E30R,M31A,S32D,E33P,E34R,L35V,Y36I,K37E,K38E,M39L,K40R,K41R,I42L,V43K</td>\n",
       "      <td>1,2,3,4,6,7,8,9,10,11,12,13,15,17,18,19,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-118.053</td>\n",
       "      <td>-246.797</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb</td>\n",
       "      <td>SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM</td>\n",
       "      <td>H2E,I3E,E4V,E5K,I6K,F7I,K8L,E9K,L10E,Q11L,R12L,Q13K,N14D,A15K,S16D,N17K,L18Q,R19E,E20A,F21L,V22K,E23K,E24W,W26K,R27K,R28A,E30L,M31T,S32D,E34H,L35V,Y36R,K37R,K38L,V43M</td>\n",
       "      <td>2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,30,31,32,34,35,36,37,38,43</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-104.212</td>\n",
       "      <td>-233.769</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb</td>\n",
       "      <td>DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG</td>\n",
       "      <td>S1D,H2P,I3K,E4T,I6E,F7L,K8I,E9K,L10Q,Q11Y,R12Q,Q13R,N14K,A15E,S16R,N17S,L18E,R19E,E20M,F21M,V22E,E24L,A25R,W26K,R27K,R28A,G29N,E30N,M31R,S32N,E33K,L35M,Y36I,M39A,K40R,I42D,V43G</td>\n",
       "      <td>1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,35,36,39,40,42,43</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-111.605</td>\n",
       "      <td>-241.044</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb</td>\n",
       "      <td>TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG</td>\n",
       "      <td>S1T,H2E,I3V,F7L,E9R,L10A,Q11A,R12K,Q13K,N14P,A15D,S16H,N17K,L18F,F21I,V22F,E23R,A25L,W26I,R27E,G29N,E30L,M31A,S32N,E34L,L35A,Y36K,K37Q,K38I,M39L,K41E,I42L,V43G</td>\n",
       "      <td>1,2,3,7,9,10,11,12,13,14,15,16,17,18,21,22,23,25,26,27,29,30,31,32,34,35,36,37,38,39,41,42,43</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-114.042</td>\n",
       "      <td>-232.848</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb</td>\n",
       "      <td>SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI</td>\n",
       "      <td>H2P,I3E,E5F,I6E,F7K,K8L,E9K,L10E,Q11K,R12A,Q13K,N14R,A15E,S16N,L18E,R19E,E20V,F21L,V22R,E23K,E24L,A25E,W26E,R27A,R28A,G29K,E30N,M31A,L35E,Y36I,K38E,M39L,K41R,I42Q,V43I</td>\n",
       "      <td>2,3,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,35,36,38,39,41,42,43</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-99.049</td>\n",
       "      <td>-240.205</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb</td>\n",
       "      <td>SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK</td>\n",
       "      <td>H2E,I6R,F7L,K8E,E9K,Q11A,Q13S,N14E,A15T,S16G,N17T,L18E,R19E,E20Q,F21M,V22R,E23Q,E24L,W26K,R27K,R28Y,G29E,E30D,M31P,E33A,E34R,L35E,Y36F,K37L,M39R,K40Y,K41R,I42E,V43K</td>\n",
       "      <td>2,6,7,8,9,11,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31,33,34,35,36,37,39,40,41,42,43</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     score   fa_atr                                         description  \\\n",
       "0 -115.348 -248.220  EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb   \n",
       "1 -111.579 -239.381  EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb   \n",
       "2 -107.145 -245.738  EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb   \n",
       "3 -116.810 -243.867  EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb   \n",
       "4 -121.064 -244.426  EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb   \n",
       "5 -118.053 -246.797  EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb   \n",
       "6 -104.212 -233.769  EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb   \n",
       "7 -111.605 -241.044  EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb   \n",
       "8 -114.042 -232.848  EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb   \n",
       "9 -99.049  -240.205  EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb   \n",
       "\n",
       "                                    sequence_A  \\\n",
       "0  SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV   \n",
       "1  SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI   \n",
       "2  SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR   \n",
       "3  SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY   \n",
       "4  TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK   \n",
       "5  SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM   \n",
       "6  DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG   \n",
       "7  TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG   \n",
       "8  SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI   \n",
       "9  SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK   \n",
       "\n",
       "                                                                                                                                                                               mutants_A  \\\n",
       "0                                                                                                                                                                                          \n",
       "1  H2V,I3E,E5I,I6V,F7K,E9M,L10I,Q11K,R12K,Q13A,N14S,A15G,S16A,N17S,L18R,R19E,E20Q,F21I,V22K,E23K,E24L,W26E,R27K,R28I,G29P,E30G,M31V,S32D,E34R,L35V,Y36I,K38M,M39A,K40E,K41R,I42L,V43I      \n",
       "2  H2E,I3E,E5K,I6E,K8L,E9K,L10R,Q11V,R12K,Q13D,N14K,A15D,S16P,N17E,R19A,E20K,F21K,V22M,E23Q,E24K,A25L,W26L,R27E,R28N,E30Y,M31A,E33I,L35Q,Y36L,K37Q,M39Q,K40L,K41E,I42K,V43R                \n",
       "3  H2E,I6L,F7A,E9R,Q11L,R12K,Q13D,N14S,A15R,S16G,N17D,E20K,F21L,V22L,A25L,W26Q,R28N,G29N,E30Q,M31P,S32N,E33Y,E34Q,L35Y,Y36V,K37E,K38H,M39L,K40L,K41R,I42K,V43Y                             \n",
       "4  S1T,H2P,I3L,E4D,I6E,F7A,K8R,E9R,L10A,Q11F,R12Q,Q13R,A15S,N17T,L18A,R19Q,F21L,V22L,E23K,E24Q,A25L,W26E,R28D,G29S,E30R,M31A,S32D,E33P,E34R,L35V,Y36I,K37E,K38E,M39L,K40R,K41R,I42L,V43K   \n",
       "5  H2E,I3E,E4V,E5K,I6K,F7I,K8L,E9K,L10E,Q11L,R12L,Q13K,N14D,A15K,S16D,N17K,L18Q,R19E,E20A,F21L,V22K,E23K,E24W,W26K,R27K,R28A,E30L,M31T,S32D,E34H,L35V,Y36R,K37R,K38L,V43M                  \n",
       "6  S1D,H2P,I3K,E4T,I6E,F7L,K8I,E9K,L10Q,Q11Y,R12Q,Q13R,N14K,A15E,S16R,N17S,L18E,R19E,E20M,F21M,V22E,E24L,A25R,W26K,R27K,R28A,G29N,E30N,M31R,S32N,E33K,L35M,Y36I,M39A,K40R,I42D,V43G        \n",
       "7  S1T,H2E,I3V,F7L,E9R,L10A,Q11A,R12K,Q13K,N14P,A15D,S16H,N17K,L18F,F21I,V22F,E23R,A25L,W26I,R27E,G29N,E30L,M31A,S32N,E34L,L35A,Y36K,K37Q,K38I,M39L,K41E,I42L,V43G                         \n",
       "8  H2P,I3E,E5F,I6E,F7K,K8L,E9K,L10E,Q11K,R12A,Q13K,N14R,A15E,S16N,L18E,R19E,E20V,F21L,V22R,E23K,E24L,A25E,W26E,R27A,R28A,G29K,E30N,M31A,L35E,Y36I,K38E,M39L,K41R,I42Q,V43I                 \n",
       "9  H2E,I6R,F7L,K8E,E9K,Q11A,Q13S,N14E,A15T,S16G,N17T,L18E,R19E,E20Q,F21M,V22R,E23Q,E24L,W26K,R27K,R28Y,G29E,E30D,M31P,E33A,E34R,L35E,Y36F,K37L,M39R,K40Y,K41R,I42E,V43K                    \n",
       "\n",
       "                                                                                          mutant_positions_A  \\\n",
       "0                                                                                                              \n",
       "1  2,3,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31,32,34,35,36,38,39,40,41,42,43    \n",
       "2  2,3,5,6,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,30,31,33,35,36,37,39,40,41,42,43          \n",
       "3  2,6,7,9,11,12,13,14,15,16,17,20,21,22,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43                 \n",
       "4  1,2,3,4,6,7,8,9,10,11,12,13,15,17,18,19,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43   \n",
       "5  2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,30,31,32,34,35,36,37,38,43            \n",
       "6  1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,35,36,39,40,42,43      \n",
       "7  1,2,3,7,9,10,11,12,13,14,15,16,17,18,21,22,23,25,26,27,29,30,31,32,34,35,36,37,38,39,41,42,43               \n",
       "8  2,3,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,31,35,36,38,39,41,42,43           \n",
       "9  2,6,7,8,9,11,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31,33,34,35,36,37,39,40,41,42,43            \n",
       "\n",
       "   mutant_count_A  \n",
       "0  0               \n",
       "1  37              \n",
       "2  35              \n",
       "3  32              \n",
       "4  38              \n",
       "5  35              \n",
       "6  37              \n",
       "7  33              \n",
       "8  35              \n",
       "9  34              "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 鉴别突变残基位点:\n",
    "df_mut = df.identify_mutants('A')\n",
    "df_mut"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c92fb3d7-9ec5-446c-922f-ef6b52da937b",
   "metadata": {},
   "source": [
    "**位点频率绘图**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "5422face-f77c-479c-9779-e32a1f5276c2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1800x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from rstoolbox.plot import sequence_frequency_plot\n",
    "fig = plt.figure(figsize=(25, 10))\n",
    "ax = plt.subplot2grid((1, 1), (0, 0))\n",
    "sequence_frequency_plot(df_mut, \"A\", ax, refseq=False, cbar=False, xrotation=90)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "463249d2-2ee9-4442-a2a7-eb6a3f5b5cbc",
   "metadata": {},
   "source": [
    "**突变位点相似性绘图**: 比较每个位置突变与wildtype的相似,参考BLOSUM62矩阵。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "e93dec1e-0115-4013-9c8e-62f662f72616",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>identity_perc</th>\n",
       "      <th>positive_perc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.888889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.777778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.555556</td>\n",
       "      <td>0.777778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.777778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.888889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>0.444444</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.888889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.555556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>0.222222</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>0.111111</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    identity_perc  positive_perc\n",
       "1   0.666667       0.888889     \n",
       "2   0.000000       0.000000     \n",
       "3   0.222222       0.444444     \n",
       "4   0.666667       0.777778     \n",
       "5   0.555556       0.777778     \n",
       "6   0.111111       0.333333     \n",
       "7   0.111111       0.111111     \n",
       "8   0.333333       0.555556     \n",
       "9   0.000000       0.555556     \n",
       "10  0.222222       0.333333     \n",
       "11  0.000000       0.222222     \n",
       "12  0.111111       0.777778     \n",
       "13  0.000000       0.555556     \n",
       "14  0.111111       0.444444     \n",
       "15  0.000000       0.111111     \n",
       "16  0.111111       0.333333     \n",
       "17  0.111111       0.444444     \n",
       "18  0.222222       0.222222     \n",
       "19  0.222222       0.333333     \n",
       "20  0.222222       0.666667     \n",
       "21  0.000000       0.000000     \n",
       "22  0.000000       0.333333     \n",
       "23  0.222222       0.888889     \n",
       "24  0.222222       0.444444     \n",
       "25  0.333333       0.333333     \n",
       "26  0.000000       0.000000     \n",
       "27  0.222222       0.666667     \n",
       "28  0.111111       0.111111     \n",
       "29  0.222222       0.222222     \n",
       "30  0.000000       0.222222     \n",
       "31  0.000000       0.111111     \n",
       "32  0.333333       0.666667     \n",
       "33  0.444444       0.555556     \n",
       "34  0.333333       0.444444     \n",
       "35  0.000000       0.444444     \n",
       "36  0.000000       0.111111     \n",
       "37  0.333333       0.888889     \n",
       "38  0.333333       0.555556     \n",
       "39  0.111111       0.555556     \n",
       "40  0.333333       0.666667     \n",
       "41  0.222222       1.000000     \n",
       "42  0.111111       0.444444     \n",
       "43  0.000000       0.333333     "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from rstoolbox.analysis import positional_sequence_similarity\n",
    "positional_sequence_similarity(df_mut.iloc[1:], 'A')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94d81f61-bf58-45a2-8716-bcffbf9822d2",
   "metadata": {},
   "source": [
    "**高亮突变发生位置的丑图**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "74b61d46-17e2-4c8c-bc40-8a557ac04c2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from rstoolbox.plot import plot_alignment\n",
    "ax = plt.subplot2grid((1, 1), (0, 0))\n",
    "plot_alignment(df, 'A', ax)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3be5a2a-28d4-41f1-b81a-89ff2b4b5fc7",
   "metadata": {},
   "source": [
    "### 2. 序列相似性分析\n",
    "参考: http://jaumebonet.cat/RosettaSilentToolbox/generated/rstoolbox.analysis.sequence_similarity.html#rstoolbox.analysis.sequence_similarity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "e318ce54-0f71-4e95-87ea-98cd32d43c2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>score</th>\n",
       "      <th>fa_atr</th>\n",
       "      <th>description</th>\n",
       "      <th>sequence_A</th>\n",
       "      <th>blosum62_A_raw</th>\n",
       "      <th>blosum62_A_identity</th>\n",
       "      <th>blosum62_A_positive</th>\n",
       "      <th>blosum62_A_negative</th>\n",
       "      <th>blosum62_A_ali</th>\n",
       "      <th>blosum62_A_per_res</th>\n",
       "      <th>blosum62_A_perc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-111.579</td>\n",
       "      <td>-239.381</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb</td>\n",
       "      <td>SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI</td>\n",
       "      <td>19</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>21</td>\n",
       "      <td>S..E.+.K.+++.+.++..+..+.A.+...+.E.+.K..++++</td>\n",
       "      <td>[4, -3, -3, 5, -3, 3, -3, 5, -2, 2, 1, 2, -1, 1, 0, 1, 1, -2, 0, 2, 0, -2, 1, -3, 4, -3, 2, -3, -2, -2, 1, 0, 5, 0, 1, -1, 5, -1, -1, 1, 2, 2, 3]</td>\n",
       "      <td>0.087156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-107.145</td>\n",
       "      <td>-245.738</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb</td>\n",
       "      <td>SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR</td>\n",
       "      <td>11</td>\n",
       "      <td>8</td>\n",
       "      <td>17</td>\n",
       "      <td>26</td>\n",
       "      <td>S..E+.F.+..+.....L.+.+++....G..S.E..+K..+..</td>\n",
       "      <td>[4, 0, -3, 5, 1, -3, 6, -2, 1, -2, -2, 2, 0, 0, -2, -1, 0, 4, -1, 1, -3, 1, 2, 1, -1, -2, 0, 0, 6, -2, -1, 4, -3, 5, -2, -1, 1, 5, 0, -2, 1, -3, -3]</td>\n",
       "      <td>0.050459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-116.810</td>\n",
       "      <td>-243.867</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb</td>\n",
       "      <td>SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY</td>\n",
       "      <td>48</td>\n",
       "      <td>11</td>\n",
       "      <td>23</td>\n",
       "      <td>20</td>\n",
       "      <td>S.IEE+.K.L.+.+..+LR+.+EE..R..+.+.+..+.+.+..</td>\n",
       "      <td>[4, 0, 4, 5, 5, 2, -2, 5, 0, 4, -2, 2, 0, 1, -1, 0, 1, 4, 5, 1, 0, 1, 5, 5, -1, -2, 5, 0, 0, 2, -2, 1, -2, 2, -1, -1, 1, -1, 2, -2, 2, -3, -1]</td>\n",
       "      <td>0.220183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-121.064</td>\n",
       "      <td>-244.426</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb</td>\n",
       "      <td>TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK</td>\n",
       "      <td>28</td>\n",
       "      <td>5</td>\n",
       "      <td>23</td>\n",
       "      <td>20</td>\n",
       "      <td>+.++E..+...++N+S..+E.+++..R.......+.++++++.</td>\n",
       "      <td>[1, -2, 2, 2, 5, -3, -2, 2, 0, -1, -3, 1, 1, 6, 1, 4, 0, -1, 1, 5, 0, 1, 1, 2, -1, -3, 5, -2, 0, 0, -1, 0, -1, 0, 1, -1, 1, 1, 2, 2, 2, 2, -2]</td>\n",
       "      <td>0.128440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-118.053</td>\n",
       "      <td>-246.797</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb</td>\n",
       "      <td>SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM</td>\n",
       "      <td>11</td>\n",
       "      <td>8</td>\n",
       "      <td>17</td>\n",
       "      <td>26</td>\n",
       "      <td>S...+...+...++........+.A.+.G...E.+.+.MKKI+</td>\n",
       "      <td>[4, 0, -3, -2, 1, -3, 0, -2, 1, -3, -2, -2, 1, 1, -1, 0, 0, -2, 0, -1, 0, -2, 1, -3, 4, -3, 2, -1, 6, -3, -1, 0, 5, 0, 1, -2, 2, -2, 5, 5, 5, 4, 1]</td>\n",
       "      <td>0.050459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-104.212</td>\n",
       "      <td>-233.769</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb</td>\n",
       "      <td>DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>15</td>\n",
       "      <td>28</td>\n",
       "      <td>....E...+..++...+.....E...+....++E+.KK.+K..</td>\n",
       "      <td>[0, -2, -3, -1, 5, -3, 0, -3, 1, -2, -1, 1, 1, 0, -1, -1, 1, -3, 0, -2, 0, -2, 5, -3, -1, -3, 2, -1, 0, 0, -1, 1, 1, 5, 2, -1, 5, 5, -1, 2, 5, -3, -3]</td>\n",
       "      <td>0.004587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-111.605</td>\n",
       "      <td>-241.044</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb</td>\n",
       "      <td>TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG</td>\n",
       "      <td>35</td>\n",
       "      <td>10</td>\n",
       "      <td>19</td>\n",
       "      <td>24</td>\n",
       "      <td>+.+EEI.K...++.....RE...E...R...+E...+.+K++.</td>\n",
       "      <td>[1, 0, 3, 5, 5, 4, 0, 5, 0, -1, -1, 2, 1, -2, -2, -1, 0, 0, 5, 5, 0, -1, 0, 5, -1, -3, 0, 5, 0, -3, -1, 1, 5, -3, -1, -2, 1, -3, 2, 5, 1, 2, -3]</td>\n",
       "      <td>0.160550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-114.042</td>\n",
       "      <td>-232.848</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb</td>\n",
       "      <td>SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>17</td>\n",
       "      <td>26</td>\n",
       "      <td>S..E....+.+.+..+N.....+........SEE..K++K+.+</td>\n",
       "      <td>[4, -2, -3, 5, -3, -3, -3, -2, 1, -3, 1, -1, 1, 0, -1, 1, 6, -3, 0, -2, 0, -3, 1, -3, -1, -3, -1, -1, -2, 0, -1, 4, 5, 5, -3, -1, 5, 1, 2, 5, 2, -3, 3]</td>\n",
       "      <td>0.018349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-99.049</td>\n",
       "      <td>-240.205</td>\n",
       "      <td>EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb</td>\n",
       "      <td>SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK</td>\n",
       "      <td>19</td>\n",
       "      <td>9</td>\n",
       "      <td>17</td>\n",
       "      <td>26</td>\n",
       "      <td>S.IEE..++L.R.......+..+.A.+..+.S...+.K..+..</td>\n",
       "      <td>[4, 0, 4, 5, 5, -3, 0, 1, 1, 4, -1, 5, 0, 0, 0, 0, 0, -3, 0, 2, 0, -3, 2, -3, 4, -3, 2, -2, -2, 2, -2, 4, -1, 0, -3, 3, -2, 5, -1, -2, 2, -3, -2]</td>\n",
       "      <td>0.087156</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     score   fa_atr                                         description  \\\n",
       "0 -111.579 -239.381  EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb   \n",
       "1 -107.145 -245.738  EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb   \n",
       "2 -116.810 -243.867  EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb   \n",
       "3 -121.064 -244.426  EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb   \n",
       "4 -118.053 -246.797  EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb   \n",
       "5 -104.212 -233.769  EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb   \n",
       "6 -111.605 -241.044  EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb   \n",
       "7 -114.042 -232.848  EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb   \n",
       "8 -99.049  -240.205  EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb   \n",
       "\n",
       "                                    sequence_A  blosum62_A_raw  \\\n",
       "0  SVEEIVKKMIKKASGASREQIKKLAEKIPGVDERVIKMAERLI  19               \n",
       "1  SEEEKEFLKRVKDKDPELAKKMQKLLENGYASIEQLQKQLEKR  11               \n",
       "2  SEIEELAKRLLKDSRGDLRKLLEELQRNNQPNYQYVEHLLRKY  48               \n",
       "3  TPLDEEARRAFQRNSSTAQELLKQLERDSRADPRVIEELRRLK  28               \n",
       "4  SEEVKKILKELLKDKDKQEALKKWAKKAGLTDEHVRRLMKKIM  11               \n",
       "5  DPKTEELIKQYQRKERSEEMMEELRKKANNRNKEMIKKARKDG  1                \n",
       "6  TEVEEILKRAAKKPDHKFREIFRELIERNLANELAKQILKELG  35               \n",
       "7  SPEEFEKLKEKAKRENNEEVLRKLEEAAKNASEEEIKELKRQI  4                \n",
       "8  SEIEERLEKLARSETGTEEQMRQLAKKYEDPSAREFLKRYREK  19               \n",
       "\n",
       "   blosum62_A_identity  blosum62_A_positive  blosum62_A_negative  \\\n",
       "0  6                    22                   21                    \n",
       "1  8                    17                   26                    \n",
       "2  11                   23                   20                    \n",
       "3  5                    23                   20                    \n",
       "4  8                    17                   26                    \n",
       "5  6                    15                   28                    \n",
       "6  10                   19                   24                    \n",
       "7  8                    17                   26                    \n",
       "8  9                    17                   26                    \n",
       "\n",
       "                                blosum62_A_ali  \\\n",
       "0  S..E.+.K.+++.+.++..+..+.A.+...+.E.+.K..++++   \n",
       "1  S..E+.F.+..+.....L.+.+++....G..S.E..+K..+..   \n",
       "2  S.IEE+.K.L.+.+..+LR+.+EE..R..+.+.+..+.+.+..   \n",
       "3  +.++E..+...++N+S..+E.+++..R.......+.++++++.   \n",
       "4  S...+...+...++........+.A.+.G...E.+.+.MKKI+   \n",
       "5  ....E...+..++...+.....E...+....++E+.KK.+K..   \n",
       "6  +.+EEI.K...++.....RE...E...R...+E...+.+K++.   \n",
       "7  S..E....+.+.+..+N.....+........SEE..K++K+.+   \n",
       "8  S.IEE..++L.R.......+..+.A.+..+.S...+.K..+..   \n",
       "\n",
       "                                                                                                                                        blosum62_A_per_res  \\\n",
       "0  [4, -3, -3, 5, -3, 3, -3, 5, -2, 2, 1, 2, -1, 1, 0, 1, 1, -2, 0, 2, 0, -2, 1, -3, 4, -3, 2, -3, -2, -2, 1, 0, 5, 0, 1, -1, 5, -1, -1, 1, 2, 2, 3]         \n",
       "1  [4, 0, -3, 5, 1, -3, 6, -2, 1, -2, -2, 2, 0, 0, -2, -1, 0, 4, -1, 1, -3, 1, 2, 1, -1, -2, 0, 0, 6, -2, -1, 4, -3, 5, -2, -1, 1, 5, 0, -2, 1, -3, -3]      \n",
       "2  [4, 0, 4, 5, 5, 2, -2, 5, 0, 4, -2, 2, 0, 1, -1, 0, 1, 4, 5, 1, 0, 1, 5, 5, -1, -2, 5, 0, 0, 2, -2, 1, -2, 2, -1, -1, 1, -1, 2, -2, 2, -3, -1]            \n",
       "3  [1, -2, 2, 2, 5, -3, -2, 2, 0, -1, -3, 1, 1, 6, 1, 4, 0, -1, 1, 5, 0, 1, 1, 2, -1, -3, 5, -2, 0, 0, -1, 0, -1, 0, 1, -1, 1, 1, 2, 2, 2, 2, -2]            \n",
       "4  [4, 0, -3, -2, 1, -3, 0, -2, 1, -3, -2, -2, 1, 1, -1, 0, 0, -2, 0, -1, 0, -2, 1, -3, 4, -3, 2, -1, 6, -3, -1, 0, 5, 0, 1, -2, 2, -2, 5, 5, 5, 4, 1]       \n",
       "5  [0, -2, -3, -1, 5, -3, 0, -3, 1, -2, -1, 1, 1, 0, -1, -1, 1, -3, 0, -2, 0, -2, 5, -3, -1, -3, 2, -1, 0, 0, -1, 1, 1, 5, 2, -1, 5, 5, -1, 2, 5, -3, -3]    \n",
       "6  [1, 0, 3, 5, 5, 4, 0, 5, 0, -1, -1, 2, 1, -2, -2, -1, 0, 0, 5, 5, 0, -1, 0, 5, -1, -3, 0, 5, 0, -3, -1, 1, 5, -3, -1, -2, 1, -3, 2, 5, 1, 2, -3]          \n",
       "7  [4, -2, -3, 5, -3, -3, -3, -2, 1, -3, 1, -1, 1, 0, -1, 1, 6, -3, 0, -2, 0, -3, 1, -3, -1, -3, -1, -1, -2, 0, -1, 4, 5, 5, -3, -1, 5, 1, 2, 5, 2, -3, 3]   \n",
       "8  [4, 0, 4, 5, 5, -3, 0, 1, 1, 4, -1, 5, 0, 0, 0, 0, 0, -3, 0, 2, 0, -3, 2, -3, 4, -3, 2, -2, -2, 2, -2, 4, -1, 0, -3, 3, -2, 5, -1, -2, 2, -3, -2]         \n",
       "\n",
       "   blosum62_A_perc  \n",
       "0  0.087156         \n",
       "1  0.050459         \n",
       "2  0.220183         \n",
       "3  0.128440         \n",
       "4  0.050459         \n",
       "5  0.004587         \n",
       "6  0.160550         \n",
       "7  0.018349         \n",
       "8  0.087156         "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from rstoolbox.analysis import sequence_similarity\n",
    "\n",
    "# 根据rules进行读取:\n",
    "# 定义description, description是一个字典格式;\n",
    "rules = {'scores': ['score', 'fa_atr', 'description'], 'sequence': 'A'}\n",
    "\n",
    "# 根据rules进行读取:\n",
    "silent_file = './data/design_result.silent'\n",
    "df = parse_rosetta_file(silent_file, rules)\n",
    "\n",
    "# 添加野生型序列\n",
    "wildtype_seq = 'SHIEEIFKELQRQNASNLREFVEEAWRRGEMSEELYKKMKKIV'\n",
    "df.add_reference_sequence('A', wildtype_seq)\n",
    "\n",
    "sequence_similarity(df.iloc[1:], 'A')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "259382d7-4aab-4c4f-b165-f4c001245a40",
   "metadata": {
    "tags": []
   },
   "source": [
    "结果解读:\n",
    "- blosum62_A_identity: 代表Total identity matches。\n",
    "- blosum62_A_perc: 代表相似性得分"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d70d69e-da94-48e1-928d-3e0ea2c84821",
   "metadata": {
    "tags": []
   },
   "source": [
    "### 3. 序列的距离矩阵\n",
    "该矩阵可以后续用于聚类分析,挑选序列等操作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "0086e255-519a-488b-b0fb-945150f05b66",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb</th>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb</th>\n",
       "      <td>0</td>\n",
       "      <td>37</td>\n",
       "      <td>35</td>\n",
       "      <td>32</td>\n",
       "      <td>38</td>\n",
       "      <td>35</td>\n",
       "      <td>37</td>\n",
       "      <td>33</td>\n",
       "      <td>35</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb</th>\n",
       "      <td>37</td>\n",
       "      <td>0</td>\n",
       "      <td>39</td>\n",
       "      <td>37</td>\n",
       "      <td>35</td>\n",
       "      <td>33</td>\n",
       "      <td>36</td>\n",
       "      <td>37</td>\n",
       "      <td>29</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb</th>\n",
       "      <td>35</td>\n",
       "      <td>39</td>\n",
       "      <td>0</td>\n",
       "      <td>32</td>\n",
       "      <td>40</td>\n",
       "      <td>36</td>\n",
       "      <td>38</td>\n",
       "      <td>34</td>\n",
       "      <td>34</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb</th>\n",
       "      <td>32</td>\n",
       "      <td>37</td>\n",
       "      <td>32</td>\n",
       "      <td>0</td>\n",
       "      <td>33</td>\n",
       "      <td>39</td>\n",
       "      <td>39</td>\n",
       "      <td>31</td>\n",
       "      <td>38</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb</th>\n",
       "      <td>38</td>\n",
       "      <td>35</td>\n",
       "      <td>40</td>\n",
       "      <td>33</td>\n",
       "      <td>0</td>\n",
       "      <td>39</td>\n",
       "      <td>36</td>\n",
       "      <td>34</td>\n",
       "      <td>33</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb</th>\n",
       "      <td>35</td>\n",
       "      <td>33</td>\n",
       "      <td>36</td>\n",
       "      <td>39</td>\n",
       "      <td>39</td>\n",
       "      <td>0</td>\n",
       "      <td>37</td>\n",
       "      <td>37</td>\n",
       "      <td>31</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb</th>\n",
       "      <td>37</td>\n",
       "      <td>36</td>\n",
       "      <td>38</td>\n",
       "      <td>39</td>\n",
       "      <td>36</td>\n",
       "      <td>37</td>\n",
       "      <td>0</td>\n",
       "      <td>38</td>\n",
       "      <td>31</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb</th>\n",
       "      <td>33</td>\n",
       "      <td>37</td>\n",
       "      <td>34</td>\n",
       "      <td>31</td>\n",
       "      <td>34</td>\n",
       "      <td>37</td>\n",
       "      <td>38</td>\n",
       "      <td>0</td>\n",
       "      <td>37</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb</th>\n",
       "      <td>35</td>\n",
       "      <td>29</td>\n",
       "      <td>34</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>31</td>\n",
       "      <td>31</td>\n",
       "      <td>37</td>\n",
       "      <td>0</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb</th>\n",
       "      <td>34</td>\n",
       "      <td>34</td>\n",
       "      <td>36</td>\n",
       "      <td>34</td>\n",
       "      <td>38</td>\n",
       "      <td>36</td>\n",
       "      <td>33</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  32                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  34                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  29                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  34                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  32                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  40                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  36                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  32                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  32                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  34                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  40                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  38                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  36                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  39                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  36                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  33                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  38                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  \\\n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  35                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  29                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  34                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  38                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  33                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  31                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  37                                                   \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  0                                                    \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  33                                                   \n",
       "\n",
       "                                                    EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032157.pdb  34                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032313.pdb  34                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032428.pdb  36                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032600.pdb  34                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032649.pdb  38                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032655.pdb  36                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032822.pdb  33                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032833.pdb  38                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032943.pdb  33                                                  \n",
       "EHPC100_job_77_hhh_11.5.10.5.10_20201122032955.pdb  0                                                   "
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据rules进行读取:\n",
    "# 定义description, description是一个字典格式;\n",
    "rules = {'sequence': 'A'}\n",
    "\n",
    "# 根据rules进行读取:\n",
    "silent_file = './data/design_result.silent'\n",
    "df = parse_rosetta_file(silent_file, rules)\n",
    "\n",
    "# 产生距离矩阵\n",
    "df.sequence_distance('A')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cf266a84-8d13-4b6b-b925-41a8ccd2ba41",
   "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
}