Protein Surface Conservation Analysis – 부제 : ‘소중한 것은 세월이 가도 남는 법이죠’

부제가 어째 나카지마 ‘멘붕’ 미유키 눈화 실연노래 가사같네 ㅋㅋㅋ

왜 이런게 필요한가?

자 고갱님, 모진 고생을 겪고 새로운 단백질 구조를 푸셨습니다. 축하드려요.
근데 이제 어쩌라구? 단백질 구조를 부는 것은 결국 구조를 통해서 단백질 기능을 파악하고자 함이다. 구조를 푸는 것 만으로 너님 자연과학세포 당첨요 ㅋ 인생피셨네요 하는 좋은 시간은 다 갔습니다. 그렇다면 어떤 단백질 구조를 규명했다 치고, 이 단백질의 기능을 구조를 통해서 어떻게 파악할 수 있을까?

가령 다른 단백질과 상호작용하여 ‘뭔가’ 를 하는 단백질이라고 치자. 이 단백질이 다른 단백질과 결합한다는 것은 이미 알고 있다. 그러나 결합구조 등이 없는 상황에서 단지 단백질 생긴 모양만 보고 이 단백질의 어떤 부분에 다른 단백질이 결합하여…를 손쉽게 알 수 있으면 좋겠지만 구조만 보고서 그걸 안다는 것은 쉽지 않다.

예를 들어 보자면..

beta-catenin 이라는 단백질은 signaling에서 매우 중요한 역할을 하는 단백질로써, 여러가지 파트너와 결합하여 시그널링에서 매우 중요한 역할을 수행한다. 그러나 이 단백질의 구조만 보고서 다른 단백질이 어떤 부위에 들러붙어서 서로 상호작용을 수행할 지 알 수 있을까? 단순히 구조만 보고서는 좀 깝깝하다.


꽈배기 돋네. but so what?

물론 이 단백질의 경우에는 다른 여러가지 바인딩 파트너와의 결합구조가 추후에 규명되었기 때문에 이러한 걱정을 할 필요가 없다. 그러나 지금 자기 자신이 연구하는 단백질의 구조가 있고, 결합구조를 풀려고 하는데 그건 잘 안되고, 그러면 손가락만 빨고 놀면 되겠죠? -.-;; 뭐 그럴려면 그러시라. 그러나 나 같으면 현재 구조 정보만 가지고 뭔가 실마리를 알아내도록 노력하겠다.

이러한 방법 중의 하나는 단백질 homolog 중에서 어떤 부분이 보존되었는지를 찾는 것이다.
즉, 웬만한 단백질이라면 대개 유사종의 생물, 특정한 단백질의 경우라면 박테리아로부터 사람까지 모두 보존되어 있는 경우도 있다. 이때 단백질의 구조가 변하지 않았고, 그 기능이 변하지 않았다면, 기능적으로 중요한 단백질 부위 / 잔기는 대개 homolog 중에서 보존되어 있을 가능성이 많고, 반면에 단백질의 기능에 별 영향이 없는 부분이라면 상대적으로 변화가 좀 많아도 상관없을 것이다. 사실 어떤 Residue가 중요한가에 대한 2차 정보는 Multiple Sequence Alignment 를 하면 쉽게 알 수 있다.

그런데 Multiple Sequence Alignment는 어디까지나 1차원적인 정보고, 우리는 이미 해당 단백질의 3차 구조를 알고 있다. 즉 단백질이 어떻게 생겨먹었는지를 안다는 이야기다. 그렇다면 단백질의 구조 입장에서 볼때 이들이 어떻게 보존되는지를 비주얼하게 볼 수 있다면, 대략적으로 어떤 부분이 보존되어 있는지를 알 수 있을 것이고, 이렇게 표면에 있는 아미노산 중에서 잘 변하지 않는 부분은 대개 단백질 상호작용 등에서 중요한 역할을 한다. (안 할 수도 있다. 물론. -.-;;) 즉 1차원적인 Multiple Sequence Alignment의 아미노산 보존 정보를 3차원 단백질 구조에 투영하는 것이 오늘 할 일이라고 할 수 있다.

오늘은 두 가지 상반된 방법을 알아보기로 하자. 첫번째는 이미 만들어져 있는 웹 서버 (Consurf)를 이용하여 자동적으로 Multiple Sequence Alignment를 계산하고, 여기에 따라서 Residue 별로 보존된 정도를 숫자화하여 단백질 표면에 그려주는 것. 분석 대상인 단백질이 한두개거나, 프로그래밍 등에 전혀 지식이 없는 초보자라면 이 방법을 사용하면 된다.

두번째 방법은 매우 다양한 단백질 한 수백개 정도에 동일한 처리를 해서 분석을 해야 하는 경우인데, 이러한 경우 웹 서버에서 하나씩 일일히 작업을 할 수는 없으므로 이미 만들어져 있는 consurf 웹 서버의 기반이 되는 소프트웨어인 Rate4Site를 직접 실행시켜서 직접 Multiple Sequence Alignment 를 수치적으로 분석하고, 이 결과물과 pdb 파일을 파싱하여 수치에 따라서 다른 색을 칠해주는 pymol 스크립트를 생성하는 스크립트를 작성해 보기로 하는 것을 알아보기로 하자.

일단 그냥 닥치고 서버로 고고
http://consurf.tau.ac.il/


아미노산 or 핵산? 아미노산이지 당근.

오늘 예로 쓸 것은 마우스 b-catenin. PDB id는 3BCT

어떤 chain을 기준으로 할래 결정하고 (여기의 예에서는 체인 하나밖에 없으니까 그냥 A), MSA를 미리 만들어 둔 것이 있으면 MSA를 업로드할 수 있고, 그렇지 않은 경우면 자기가 알아서 PDB 의 아미노산을 추출해서 선택한 DB (위의 예에서는 UNIREF-90 -Uniprot db 중에서 상동성이 90% 이상 되는 것들은 중복이라고 보고 제거하고 모든 서열이 최소 10% 이상은 틀린 것들만 나오도록 redundancy를 줄인 db-를 선택함)에서 BLAST 를 쳐서 지정된 criterion 되는 넘을 선택한 다음 이것을 원하는 MSA 방법으로 MSA를 만든다.

이렇게 만들어진 MSA를 대상으로 rate4sites 라는 알고리즘을 돌려서, 원래 입력으로 넣은 PDB의 아미노산들이 MSA 에서 얼마나 conserve 되어있는지를 숫자화한다. 어차피 이것은 뒤에서 수동으로 돌려볼 때 다시 알아볼 것이다.

그러면 이런 화면이 나오고 어느정도의 시간이 걸린 후에 (서버 상태에 따라서 틀리겠지만 위의 예에서는 10분 정도?) 결과로 고고.

제일 위의 링크를 클릭하면 Jmol 이라는 자바 애플릿을 통하여 ‘그다지 이쁘지는 않지만’ 어쨌든 색칠이 된 단백질 구조를 살펴볼 수 있다.

여기서 보라색은 제일 보존이 잘된 부분, 하늘색으로 갈수록 보존이 안 된 부분. 물론 여기서 대충 보고 감잡는 것이야 상관없지만 아무래도 좀 안 예쁘니 마음에 안 든다. 일단 단백질은 예뻐야 된다능. 예쁜 것은 항상 옳습니다. 단백질 외모지상주의 돋네. 모든 데이터를 일단 다 받은 다음 이것을 PyMol에서 좀 분칠해 보자.

일단 다 받아부려

압축파일을 열러보면 이런 파일들이 나오는데, 이중에서 몇 가지만 살펴보면

MultiColored_msa.html 파일을 보면 conservation에 따라서 다르게 컬러링이 된 MSA가 나온다. 여기서 색깔은 역시 보라색은 conservation, 가장 자주 바뀌는 것일수록 하늘색.

여러가지 pdb가 나오는데 여기서 3bct_ATOMS_selection_With_ConSurf.pdb (“3bct” 부분은 사용한 pdb id에 따라서 틀려짐) 를 한번 텍스트 에디터로 열어보도록 하자. (PyMol이 아니고? 하실 분이 있지만 잠깐 기다려 보삼. 뭔가 확인해 볼 게 있어서 그러는 것임)

얼핏 보기에는 원본의 PDB 파일과 별 차이가 없어 보이나 몇 가지 차이가 있는데

– REMARK 부분의 주석이 다 싸그리 사라졌고
– 물분자나 Selenomethionine 등의 Hetero atom이 다 제거되었다
– 그리고 b-factor 컬럼이 1에서 9까지의 conservation score로 대치되었다.

일반적으로 단백질 결정학으로 결정된 구조에서 b-factor (Temperature Factor)는 해당 위치에 원자가 위치하고 있는 확률에 의해서 결정되는데, 이 factor의 숫자가 높을수록 그 위치에 원자가 정확히 위치할 확률이 낮아진다. 사실 단백질 결정학에서 구조를 표현할 때 사용하는 트릭 중의 하나는 b-factor 가 필요없을때는 해당 컬럼에 임의의 다른 정보를 치환하여 이것을 대신 표시하는 것인데, 여기서는 b-factor 대신 해당 위치의 아미노산이 얼마나 보존되어 있나의 정보를 넣어서 pdb 를 수정한 것이다. 이것을 응용하여 PyMol 에서는 b-factor 컬럼에 들어있는 아미노산의 보존수치를 이용하여 해당 아미노산에 다른 색을 칠하게 되는 것이다.

이제 PyMOL에서 3bct_ATOMS_selection_With_ConSurf.pdb 파일을 열어본다.

그다음에

hide all
show cartoon

이제 b-factor 컬럼에 들어있는 conservation score 를 이용하여 색을 칠해보자.

color-spectrum-b-factors 를 선택하면


이렇게 바뀜 ㅋ 여기서 빨강색으로 갈 수록 conservation이 높은 것, 파란색으로 갈수록 낮은 것.

show surface

표면을 보여주는 것이 좀 더 확실하게 볼 수 있다.

어떤가? 저 트위스트된 꽈배기(…)의 가운데 부분이 뻘겋게 칠해져 있다. 아마 여기가 제일 conservation 된 부분으로 생각된다. 아마 단백질 상호작용에서도 이 부분이 핫스폿이 아닐까? 한번 좀 있다가 살펴보고 지금은..

색깔이 마음에 안든다고? 색깔을 바꿔보자.

spectrum b, cyan_white_magenta

이제 아까 JMOL에서 본 것처럼 보라색이 가장 conservation, 하늘색이 가장 덜 보존된 형식으로 색상을 바꿔보았다. 이외에 다른 색상 형식으로 표현하려면

blue_green
blue_magenta
blue_red
blue_white_green
blue_white_magenta
blue_white_red
blue_white_yellow
blue_yellow
cbmr
cyan_magenta
cyan_red
cyan_white_magenta
cyan_white_red
cyan_white_yellow
cyan_yellow
gcbmry
green_blue
green_magenta
green_red
green_white_blue
green_white_magenta
green_white_red
green_white_yellow
green_yellow
green_yellow_red
magenta_blue
magenta_cyan
magenta_green
magenta_white_blue
magenta_white_cyan
magenta_white_green
magenta_white_yellow
magenta_yellow
rainbow
rainbow2
rainbow2_rev
rainbow_cycle
rainbow_cycle_rev
rainbow_rev red_blue
red_cyan red_green
red_white_blue
red_white_cyan
red_white_green
red_white_yellow
red_yellow
red_yellow_green
rmbc
yellow_blue
yellow_cyan
yellow_cyan_white
yellow_green
yellow_magenta
yellow_red
yellow_white_blue
yellow_white_green
yellow_white_magenta
yellow_white_red
yrmbcg

Spectrum b, 다음에 위의 색상패턴을 써 주면 된다. 가령 yellow_white_magenta를 써주면 제일 conservation이 낮은 데는 노랑에서부터 하양으로 치고올라가 보라가 제일 conservation이 높은 것으로 끝나게 된다.

동영상으로 보면 알기 쉬운데

즉 꽈배기의 안쪽 -.-;; 이 보라색이므로 주로 안쪽이 진화적으로 보존되어 있다는 것을 쉽게 알 수 있다.

그런데 여기서 잠깐. ‘왜 이 짓거리를 하고 있지? 나는 누군가 여기는 또 어딘가‘ 하실 분을 위하여 처음 이야기한 것으로 되돌아간다면,

단백질의 표면에서 진화적으로 보존된 부분은 ‘뭔가 중요한 것’ 을 하는 부분이다.
하는 드립을 다시 생각해 보자. 우리가 예로 사용된 단백질인 b-catenin의 경우에는 시그널링에서 중요한 역할을 하는 단백질로써 다른 단백질과 상호작용한다는 것이 (APC, ICAT, TCF-4…) 널리 알려져 있다. 그렇다면 저기서 보라색으로 색칠된 부분, 즉 이 단백질에서 잘 보존된 부분은 혹시 단백질 상호작용과 연관이 있지 않을까?

그런데 이미 b-catenin의 경우 상당수의 단백질 결합 구조가 이미 실험적으로 나와 있다. 우리가 지금 할 일은 이미 결정된 단백질 결합구조를 불러온 다음, b-catenin 에서 다른 단백질 붙는 부위가 과연 진화적으로 어떻게 보존되어 있는지를 살펴보는 것이다. 간단하죠?

PDB에서 1JPW (b-catenin/TCF-4), 1LUJ (b-catenin/ICAT), 1QZ7 (b-catenin/Axin), 2GL7(APC), 1TH1(Phosphorylated APC), 1M1E (ICAT) 등의 구조를 불러온다

fetch 1JPW
fetch 1LUJ
fetch 1QZ7
....

그 다음 structural align 을 하여 conservation에 의해 색칠한 beta-catenin에 각각의 complex를 정렬한다.

align 1JPW, 3bct_ATOMS_section_With_ConSurf
align 1LUJ, 3bct_ATOMS_section_With_ConSurf
....

그다음 각각을 cartoon으로 다시 그리고, 동영상으로 만든 결과를 보면

어떤가? 각각 노란색, 초록색, 파란색 등으로 되어 있는 b-catenin 과 결합하는 단백질 부위는 여지없이 ‘꽈배기의 안쪽’, 즉 conservation 으로 볼때 보라색으로 가장 보존된 영역을 중심으로 결합되어 있음을 알 수 있다. 특히 대부분의 단백질이 공통적으로 지나가는 ‘interaction hotspot’ 의 경우에는 완죤 보라색이다

위의 예에서는 이미 파트너와 결합구조가 알려진 단백질을 가지고 이런 분석을 했으니 어떻게 보면 ‘답을 미리 아는 상황에서 문제를 푼 셈’ (ㅋㅋ) 이지만, 만약 결합구조가 알려지지 않은 단백질에서 단백질 상호작용을 하는 부위를 예측하려고 할 때도 위와 같은 방법론을 사용하는 것도 꽤 유용한 방법일 것이다. 물론 표면이 보존되었다고 해당 부위가 반드시 단백질 결합의 핫스팟이라는 보장은 없긴 하지만, 적어도 추가 실험을 할때 (가령 mutagenesis를 한다든지) 일단 중요한 후보자리는 될 수 있을 것이기 때문이다.

자, 이제까지 consurf 서버를 이용하여 하나의 단백질에 대한 conservation surface 분석을 하는 것을 알아보았다. 그렇다면 수백개의 단백질을 대상으로 이런 분석을 자기가 하고 싶다고 하자. 이럴때는 어떻게 해야 하나? 석사과정 시켜서 하나씩 일일히 시킨다 말고. ㅋ

일단 단백질 구조를 받고, 해당하는 단백질에 대해서 Multiple Sequence Alignment를 만드는 것 까지는 했다고 치자. 이렇게 만들어진 Multiple Sequence Alignment 에 대해서 각각의 아미노산에 대해서 conservation score를 구하는 데는 다음의 툴을 사용한다.

rate4site

wget http://www.tau.ac.il/~itaymay/cp/rate4site.3.2.source.zip
unzip rate4site.3.2.source.zip

소스 받고 소스 디렉 이동

make
g++ -O3 -Wno-deprecated   -c -o AddLog.o AddLog.cpp
g++ -O3 -Wno-deprecated   -c -o NNiProp.o NNiProp.cpp
g++ -O3 -Wno-deprecated   -c -o NNiSep.o NNiSep.cpp
g++ -O3 -Wno-deprecated   -c -o Nni.o Nni.cpp
g++ -O3 -Wno-deprecated   -c -o aaJC.o aaJC.cpp
g++ -O3 -Wno-deprecated   -c -o allTrees.o allTrees.cpp
g++ -O3 -Wno-deprecated   -c -o allTreesSeparateModel.o allTreesSeparateModel.cpp
....

컴파일

그러면 rate4site라는 실행파일이 나오는데, 다음과 같이 실행


./rate4site -s catenin.aln
START OF LOG FILE

 =======================================================
 the rate for site project:                             
 Version: 2.01. Last updated 6.11.06                     
 Tal Pupko and his lab:     talp@post.tau.ac.il         
 Nir Ben-Tal and his lab:   bental@ashtoret.tau.ac.il   
 Itay Mayrose:  itayMay@post.tau.ac.il                  
 For program support, please contact Itay Mayrose       
 =======================================================


 ---------------------- THE PARAMETERS ----------------------------
seq file is: catenin.aln
output file is: r4s.res
rate inference method is: empirical Bayesian estimate
using a Gamma prior distribution with: 16 discrete categories
probablistic_model is: JTT
branch lengths optimization is ML using a gamma model

 -----------------------------------------------------------------
get Starting Tree Topology
#MSA diversity matrix
#Average pairwise distance= 0.905339
#lower bound = -0
#upper bound = 3.9941
#end of MSA diversity matrix
((tr_B4DL06_B4DL06_HUMAN_cD:0.000001,(tr_F1QGH7_F1QGH7_DANRE_Un:0.017280,(tr_F1RX81_F1RX81_PIG_Unch:0.032191,(2z6g_chainA_p003:0.000001,(3ouw_chainA_p001:0.000001,((sp_P14923_PLAK_HUMAN_Junc:0.205775,(tr_E3N1M2_E3N1M2_CAERE_CR:0.989430,(sp_Q18825_BAR1_CAEEL_Beta:1.156835,3c2g_chainA_p002:2.837263):0.243982):0.322198):0.073749,(tr_Q75WV7_Q75WV7_BRABE_Be:0.106455,(tr_B5THL1_B5THL1_SACKO_Be:0.103638,(tr_Q75WU5_Q75WU5_PARTP_Ar:0.101574,(tr_F4X7D1_F4X7D1_9HYME_Ar:0.079856,sp_P18824_ARM_DROME_Armad:0.073557):0.066150):0.059965):0.010124):0.028710):0.047350):0.044875):0.015882):0.014945):0.006105):0.000732,(sp_Q0VCX4_CTNB1_BOVIN_Cat:0.000253,tr_O42486_O42486_CHICK_Be:0.004780):0.000718,(tr_Q5R5L8_Q5R5L8_PONAB_Pu:0.000130,tr_Q76LW0_Q76LW0_MERUN_Be:0.002383):0.000546);
After Tree Topology
get Starting Branch Lengths And Alpha
Optimizing branch lengths and alpha...
# bestAlphaAndBBL::bestAlphaAndBBL iteration 0
# old L = -1.79769e+308	# new L = -13703.1
# new Alpha = 2.02229

즉 여기서는 catenin.aln 이라는 clustalw 형식의 MSA 파일이 있다고 가정하고, 이것을 -s 옵션으로 불러온다. 그러면 r4s.res 라는 이름으로 conservation score가 계산되어 나오는데

#Rates were calculated using the expectation of the posterior rate distribution
#Prior distribution is Gamma with 16 discrete categories

#SEQ: the amino acid in the reference sequence in one letter code.
#SCORE: The conservation scores. lower value = higher conservation.
#QQ-INTERVAL: the confidence interval for the rate estimates. The default interval is 25-75 percentiles
#STD: the standard deviation of the posterior rate distribution.
#MSA DATA: The number of aligned sequences having an amino acid (non-gapped) from the overall number of sequences at each position.

#POS SEQ  SCORE    QQ-INTERVAL     STD      MSA DATA
#The alpha parameter 1.58359
1    M    -1.3171  [-1.4789,-1.2984] 0.2163  16/18
2    A    1.5800   [0.4872,3.5176] 1.3364  14/18
3    T    0.9597   [-0.0078,1.8847] 1.2649  13/18
4    Q    1.7341   [0.4872,3.5176] 1.3779  13/18
5    A    1.7749   [0.8141,3.5176] 1.3698  12/18
6    D    0.3089   [-0.5551,0.8141] 1.2156  13/18
7    L    1.1486   [-0.0078,1.8847] 1.4492  13/18
8    M    2.4633   [1.2421,3.5176] 1.2209  13/18
9    E    0.8803   [-0.2078,1.8847] 1.3112  13/18
10   L    0.5953   [-0.2078,1.2421] 1.2068  13/18
11   D    2.8568   [1.8847,3.5176] 1.0415  13/18
12   M    1.3555   [0.4872,1.8847] 1.3022  14/18
13   A    1.2234   [0.2201,1.8847] 1.2408  15/18
14   M    1.3727   [0.4872,1.8847] 1.3369  15/18
15   E    3.2591   [3.5176,3.5176] 0.6750  15/18
16   P    2.9583   [1.8847,3.5176] 0.9594  15/18
17   D    1.0551   [0.2201,1.8847]
...

여기서 세번째 컬럼이 바로 conservation score. 높을수록 conservation 정도가 높음을 의미한다. 이것을 파싱하여 pdb를 읽어들인 후 pdb에 따라서 서로 다른 색을 칠하는 pymol script 를 만들어 보았는데

#!/usr/bin/python
#
#
#!/usr/bin/python
#
#
from Bio.PDB import *
import numpy as np
from math import sqrt
from matplotlib.backends.backend_pdf import PdfPages
import sys,re
from pylab import *


def makeGradient(RGB,nofgradient):
#
# 
#
    
    
    if nofgradient > 0 :
        (R,G,B) = RGB
        WR=255
        WG=255
        WB=255
        dR=float((WR-R))/float(nofgradient-1)
        dG=float((WG-G))/float(nofgradient-1)
        dB=float((WB-B))/float(nofgradient-1)
        print dR, dG,dB
        listofgradient=[]
        for x in range(0,nofgradient):
            listofgradient.append((int(R+dR*(x)), int(G+dG*(x)),int(B+dB*(x))))
     
    return(listofgradient)



def remove_hetero(singlechain):
#
# remove water and heteroatoms from chains
#
    p=[]
    for residue in singlechain:
        if residue.get_full_id()[3][0]==" ":
            p.append(residue)
    return(p)

if __name__=='__main__':

    try:
        pdb_filename=sys.argv[1]
        rate4site_filename=sys.argv[2]
        chain = sys.argv[3]
        pdb=pdb_filename.replace('.pdb','').upper()
        f=open(rate4site_filename)
        filecontent=f.readlines()
        searchstring="#The alpha parameter"
        match = False
        #
        # Regex for the parsing rate4site output
        #
        StartRegex = re.compile("^" + searchstring)
        LineRegex = re.compile("^(\d+)\s+(\w)\s+([\w\.\-]+)")                
        dsequence={}
        data={}
        seq=[]
        dat=[]
        pdf=PdfPages('res.pdf')
        
        #sequence is in list 'seq'
        #conservation data is in the list 'data'

        for line in filecontent:

            if not match :
                match = StartRegex.match(line)
            else :
                linedata = LineRegex.match(line)
                if linedata:
                    dsequence[int(linedata.group(1))]=linedata.group(2)
                    data[int(linedata.group(1))]=float(linedata.group(3))
                    seq.append(linedata.group(2))
                    dat.append(float(linedata.group(3)))
        
     
        data_array = np.zeros(len(data)+1)
        x = np.zeros(len(data)+1)
        seq = np.zeros(len(data)+1)
        for seqnum, value in data.items():
            data_array[seqnum]=value
            x[seqnum]=seqnum

        diff = data_array.max()-data_array.min()
        normalized = (data_array-data_array.min())/diff
        bar(x,normalized)
        pdf.savefig()
        pdf.close()
    
        structure=PDBParser().get_structure(pdb, pdb_filename)
        model = structure[0]
        protein_chain = remove_hetero(model[chain])

        fl=open('cons.pml','w')
        writePDB="/" + pdb + "//" + chain + "/"
        RGB=(255,255,0)
        gradient=makeGradient(RGB,10)
        colorlist=[] 
        
        for row, one in enumerate(gradient):
            (R,G,B) = one
            fl.write("set_color green%d = [%d,%d,%d]\n" % (row,R,G,B))
            colorlist.append("green%d" % (row))                    


        for residue in protein_chain :
            amino = residue.get_full_id()[3][1]
            s=normalized[int(amino)]
            if s > 0 and s =0.1 and s =0.2 and s =0.3 and s =0.4 and s =0.5 and s =0.6 and s =0.7 and s =0.8 and s =0.9 and s <= 1.0:
                rescolor=colorlist[9]
            fl.write("color " + rescolor + "," + writePDB + str(amino) + "\n")

        fl.close()
     except:
        print 'usage pdb.py  '
        sys.exit(1)    

대충 biopython 을 이용하여 pdb 파싱, pdb에서 water 등 헤테로아톰 제거하고, rate4site 출력파일에서 아미노산과 conservation 스코어 파싱해서 읽어낸 다음, cons.pml 이라는 이름으로 pdb 에 대한 색을 칠하는 (이전 방법처럼 b-factor를 이용한 트릭 없이) 스크립트를 생성하는 방식이다. 위의 예는 그냥 참고로 하여 rate4site 의 출력 파일을 파싱하여 원하는 분석을 수행하면 될 것이라고 생각한다. ㅋ


(아 몰라 쓰다가 귀찮아버렸음. 나중에 시간나면 업데이트하져 뭐..)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s