텍스트 툴로 pdb 뒤비기.

이 바닥의 대개의 데이터 파일이 다 그렇지만 PDB 파일 역시 텍스트 에디터로 열리는 텍스트 파일. 가끔 뉴비들이 “단백질 구조파일에서 원하는 내용만 잘라내려면 어떤 프로그램 써야해염? 프로그램이 읍써여 ㅠ.ㅠ” 이러는 거 보는데 별거 없다. 텍스트 파일이므로 그냥 에디터로 열어서 편집하면 됨. ㅎㅎ

그러나 몇가지 간단한 작업의 경우에는 에디터를 열 것도 없이 간단한 유닉스 명령어 조합으로 조작하는 것이 더 편하다. 자주 사용하는 몇 가지를 정리해 봄.

1. 특정한 chain만 따로 빼내기

grep ^ATOM pdb_file_name | awk '{if ($5=="chain_name") print} > new_file_name'

즉 예를 보면

grep ^ATOM 1i7x.pdb | awk '{if ($5=="C") print} > chain.pdb'

grep으로 줄 처음에 ATOM으로 시작되는 부분만을 찾아서 출력하고 이중, 5번째 필드의 내용 (chain) 이 “C”인 것만을 골라서 전체 출력. 그걸 chain.pdb에 저장한다.

ATOM   8398  C   SER C 663      86.657  -0.132   8.966  1.00111.08           C 
  $1    $2  $3   $4 $5 $6         $7

특히 awk의 경우에는 이렇게 테이블 형식으로 되어 있는 자료를 뽑는 것에는 갑이므로 이것을 잘 활용해 본다.

grep ^ATOM 1i7x.pdb | awk '{if (($5=="B") || ($5=="C")) print}' > chain.pdb

이번에는 B chain 또는 C chain을 뽑는다.

grep ^ATOM 1i7x.pdb | awk '{if (($5!="B")) print}' > chain.pdb

B Chain 만을 빼고 뽑는다. 즉 B Chain 만을 삭제한 셈.

2. 특정한 chain 을 다른 이름으로 바꾸기.

일단 이전에 PDB 파일 중의 Coordinate (실제 원자위치) 가 들어있는 부분의 형식을 살펴보자. 이렇게 몇번째 컬럼에 무슨 데이터가 들어가있는지가 미리 규약되어 있다는 것을 잘 알수 있다.

COLUMNS        DATA  TYPE    FIELD        DEFINITION
-------------------------------------------------------------------------------------
 1 -  6        Record name   "ATOM  "
 7 - 11        Integer       serial       Atom  serial number.
13 - 16        Atom          name         Atom name.
17             Character     altLoc       Alternate location indicator.
18 - 20        Residue name  resName      Residue name.
22             Character     chainID      Chain identifier.
23 - 26        Integer       resSeq       Residue sequence number.
27             AChar         iCode        Code for insertion of residues.
31 - 38        Real(8.3)     x            Orthogonal coordinates for X in Angstroms.
39 - 46        Real(8.3)     y            Orthogonal coordinates for Y in Angstroms.
47 - 54        Real(8.3)     z            Orthogonal coordinates for Z in Angstroms.
55 - 60        Real(6.2)     occupancy    Occupancy.
61 - 66        Real(6.2)     tempFactor   Temperature  factor.
77 - 78        LString(2)    element      Element symbol, right-justified.
79 - 80        LString(2)    charge       Charge  on the atom.

처음의 예에서는 awk의 필드구분 기능을 이용해서 간단하게 번호를 뽑았지만, 이번에는 실제 컬럼위치를 통해서 체인 번호를 바꿔보도록 하자.

grep ^ATOM 1i7x.pdb | awk '{if (substr($0,22,1)=="C") {print substr($0,0,21) "Z" substr($0,23)} else print $0}' > final.pdb

22번째 라인이 C면 이것을 Z로 바꾸고 나머지는 그대로 출력.

3. 아미노산 일부영역만 뽑아내기

grep ^ATOM 1i7x.pdb | awk '{if (($5=="B") && ($6>=630) && ($6<=650)) print}'> cut.pdb 

$6 컬럼에는 아미노산 번호가 들어 있는데 이를 가지고 영역을 조사하여 B Chain에서 아미노산 잔기 630에서 650까지 출력해내고 이를 cut.pdb에 저장

4. 단백질에서 물빼기

물먹는 하마를 쓰세요. 아님 말리시죠.

많은 결정구조에는 물분자가 모델 내에 들어가 있는데, 가령 Molecular Replacement 등으로 서치를 한다고 할때 물분자의 위치는 대개 틀릴테므로 물분자는 제거해 버리는 게 좋다. 이건 이렇게 하면 간단.

cat 1t44.pdb | awk '{if ($4!="HOH")  print}' > dehydrate.pdb

즉 cat 으로 1t44.pdb 를 출력해서 이것을 awk 에 보내고, $4 행 (분자) 가 HOH 가 아닌 넘만 출력해서 dehydrate.pdb에 저장하쇼 하는 명령이다. 참 쉽져? ㅋ

5. 쓸데없는 잡내용 빼기

pdb에 디포짓 되어 있는 내용중에는 사실 벼라별 쓰잘데 없는 내용이 REMARK 필드에 다 들어있다. 물론 참고로 있으면 좋지만 아 이런거 다 필요읍 할때는 위의 물빼기와 마찬가지로

cat 1t44.pdb | awk '{if ($1!="REMARK")  print}' > remarkless.pdb

즉 첫째 필드 ($1) 의 내용을 검사해서 이것이 REMARK’가 아니면’ 출력을 해줌.

비슷한 예로

cat 1t44.pdb | awk '{if ($1!="ANISOU")  print}' > remarkless.pdb

ANISOU 필드 제거

6. 정보 추출

가령 PDB 파일을 한 200개 받아놨는데 각각의 최대 resolution 이 얼마인지 알고 싶다면? 물론 pdb 파일 열어서

REMARK   1  REF    CELL(CAMBRIDGE,MASS.)         V.  90   871 1997              
REMARK   1  REFN                   ISSN 0092-8674                               
REMARK   1  DOI    10.1016/S0092-8674(00)80352-9                                
REMARK   2                                                                      
REMARK   2 RESOLUTION.    3.00 ANGSTROMS.                                       
REMARK   3                                                                      
REMARK   3 REFINEMENT.                             

여기 보면 RESOLUTION 나오니 이거 일일히 보고적어도 되겠지만, 200개에 대해서 다 하려면 깝깝. 석사 1학기 시키세여 쿨하게

이럴때는 이렇게 하면 된다.

grep "^REMARK   2 RESOLUTION." *.pdb | awk '{print substr($1,0,4) "\t" $4}'

그러면 이런 테이블이 샥 나온다. 물론 해당 PDB가 pdb에 정상적으로 deposit 되어 REMARK가 들어있는 것에 한함. 자기가 구조풀어놓고 PDB에 디포짓하지도 않아놓고 내노라면 곤란. -.-

1i7x	3.00
1jpp	3.10
1s1h	11.70
1t44	2.00
1ux4	3.3
2a3z	2.08
2cg9	3.1
2q97	2.50
2v51	2.35
2v52	1.45
2yle	1.80
2z6h	2.20
3ci5	1.70
3rp0	3.00
3ryl	3.10
3seo	2.31

grep으로 모든 pdb에 대해서 resolution 다 찾고, awk 으로 결과 약간 필터링해주면 이렇게 결과 나온다. 참 쉽져? ㅋ

각각의 pdb가 무슨 구조인지 보고 싶다면?

grep "^TITLE" *.pdb | awk '{if (substr($0,19,1)==" ") {print substr($0,1,4) "\t" substr($0,20)} else {print "\t" substr($0,21)}}'

이렇게 때리면

3iq2	HUMAN SORTING NEXIN 7, PHOX HOMOLOGY (PX) DOMAIN                      
3kgf	THE STRUCTURE OF 3-DEOXY-D-ARABINO-HEPTULOSONATE 7-PHOSPHATE SYNTHASE 
	FROM MYCOBACTERIUM TUBERCULOSIS COMPLEXED WITH PHENYLALANINE AND     
	TRYPTOPHAN                                                           
3klt	CRYSTAL STRUCTURE OF A VIMENTIN FRAGMENT                              
3ky9	AUTOINHIBITED VAV1                                                    
3kyc	HUMAN SUMO E1 COMPLEX WITH A SUMO1-AMP MIMIC                          
3l2j	DIMERIC STRUCTURE OF THE LIGAND-FREE EXTRACELLULAR DOMAIN OF          
	THE HUMAN PARATHYROID HORMONE RECEPTOR (PTH1R)                       
3lge	CRYSTAL STRUCTURE OF RABBIT MUSCLE ALDOLASE-SNX9 LC4 COMPLEX          
3llp	1.8 ANGSTROM HUMAN FASCIN 1 CRYSTAL STRUCTURE                         
3lue	MODEL OF ALPHA-ACTININ CH1 BOUND TO F-ACTIN                           
3lwb	CRYSTAL STRUCTURE OF APO D-ALANINE:D-ALANINE LIGASE (DDL)             
	FROM MYCOBACTERIUM TUBERCULOSIS                                      
3m1f	CROSSLINKED COMPLEX OF ACTIN WITH FIRST W DOMAIN OF VIBRIO            
	PARAHAEMOLYTICUS VOPL                                                
3mfp	ATOMIC MODEL OF F-ACTIN BASED ON A 6.6 ANGSTROM RESOLUTION CRYOEM MAP 
3mjh	CRYSTAL STRUCTURE OF HUMAN RAB5A IN COMPLEX WITH THE C2H2 ZINC FINGER 
	OF EEA1                                                              
3mlf	PUTATIVE TRANSCRIPTIONAL REGULATOR FROM STAPHYLOCOCCUS AUREUS.        
3mn7	STRUCTURES OF ACTIN-BOUND WH2 DOMAINS OF SPIRE AND THE IMPLICATION FOR
	FILAMENT NUCLEATION                                                  
3mpx	CRYSTAL STRUCTURE OF THE DH AND PH-1 DOMAINS OF HUMAN FGD5            
3mwb	THE CRYSTAL STRUCTURE OF PREPHENATE DEHYDRATASE IN COMPLEX WITH L-PHE 
	FROM ARTHROBACTER AURESCENS TO 2.0A                                  

요런 식으로 나온다.

7. pdb에서 sequence 추출

물론 이것도 awk 이나 기타 스크립트로 짤 수 있겠으나 원라인 이상이 될 것 같으므로 그냥 쿨하게(…) phenix 에 있는 phenx.print_sequence를 쓰기로 하자. 어차피 이런 짓거리가 필요한 사람이라면 phenix 정도는 깔려 있을테니.

phenix.print_sequence 1t44.pdb
>1t44.pdb|Chain=G
EHPEFLKAGKEPGLQIWRVEKFDLVPVPTNLYGDFFTGDAYVILKTVQLRNGNLQYDLHYWLGNECSQDESGAAAIFTVQ
LDDYLNGRAVQHREVQGFESATFLGYFKSGLKYKKGGVASGFKHVETQEKNPLPSKETIEQEKQ
>1t44.pdb|Chain=A
TALVCDNGSGLVKAGFAGDDAPRAVFPSIVGRPDSYVGDEAQSKRGILTLKYPIEHGIITNWDDMEKIWHHTFYNELRVA
PEEHPTLLTEAPLNPKANREKMTQIMFETFNVPAMYVAIQAVLSLYASGRTTGIVLDSGDGVTHNVPIYEGYALPHAIMR
LDLAGRDLTDYLMKILTERGYSFVTTAEREIVRDIKEKLCYVALDFENEMATAASSSSLEKSYELPDGQVITIGNERFRC
PETLFQPSFIGMESAGIHETTYNSIMKCDIDIRKDLYANNVMSGGTTMYPGIADRMQKEITALAPSTMKIKIIAPPERKY
SVWIGGSILASLSTFQQMWITKQEYDEAGPSIVHRKCF
>1t44.pdb|Chain=G
??
>1t44.pdb|Chain=A
??

8. Polyalanine Model

가끔은 단백질의 Side Chain을 몽땅 알라닌으로 치환한 모델이 필요할 때가 있다. 가령 시퀀스 상동성이 떨어지는 동일한 폴드를 가진 단백질을 가지고 Molecular Replacement 를 돌릴 때라든가..물론 여기에 쓰는 전용 프로그램이 있지만 이렇게 해도 간단하게 가능하다.

grep "^ATOM" 3fog.pdb | awk '{if (($3=="CA") || ($3=="N") || ($3=="C") || ($3=="O") || ($3=="CB")) { print substr($0,0,17) "ALA" substr($0,21)}}' > ala.pdb

오늘은 이것만. 나중에 생각나면 더 업데이트 하게씀. 없음 말구.

One thought on “텍스트 툴로 pdb 뒤비기.

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