2011-05-12 196 views
5


我目前參與制作一個旨在將所有乳頭狀瘤病毒信息合併到一個地方的網站。 作爲努力的一部分,我們正在策劃在公共服務器(例如GenBank) 一個我遇到的問題所有已知的文件是許多(〜50%)都解決了結構都沒有根據蛋白質編號。 也就是說亞結晶結晶(氨基酸310-450),然而結晶學家將其作爲殘基1-140沉積。 我想知道是否有人知道重新編號整個pdb文件的方法。我已經找到了重新編號序列的方法(由seqres標識),但是這不會更新螺旋線和圖表信息。 我將不勝感激,如果你有任何建議...
感謝在一個蛋白質結構文件中重新編號殘基(pdb)

回答

1

我也經常遇到這個問題。在放棄了我以前的perl腳本之後,我一直在嘗試使用一些python。此解決方案假定您已安裝Biopython,ProDy(http://www.csb.pitt.edu/ProDy/#prody)和EMBOSS(http://emboss.sourceforge.net/)。

我這裏使用的乳頭狀瘤病毒PDB條目之一。

from Bio import AlignIO,SeqIO,ExPASy,SwissProt 
from Bio.Seq import Seq 
from Bio.SeqRecord import SeqRecord 
from Bio.Alphabet import IUPAC 
from Bio.Emboss.Applications import NeedleCommandline 
from prody.proteins.pdbfile import parsePDB, writePDB 
import os 

oneletter = { 
'ASP':'D','GLU':'E','ASN':'N','GLN':'Q', 
'ARG':'R','LYS':'K','PRO':'P','GLY':'G', 
'CYS':'C','THR':'T','SER':'S','MET':'M', 
'TRP':'W','PHE':'F','TYR':'Y','HIS':'H', 
'ALA':'A','VAL':'V','LEU':'L','ILE':'I', 
} 

# Retrieve pdb to extract sequence 
# Can probably be done with Bio.PDB but being able to use the vmd-like selection algebra is nice 
pdbname="2kpl" 
selection="chain A" 
structure=parsePDB(pdbname) 
pdbseq_str=''.join([oneletter[i] for i in structure.select("protein and name CA and  %s"%selection).getResnames()]) 
alnPDBseq=SeqRecord(Seq(pdbseq_str,IUPAC.protein),id=pdbname) 
SeqIO.write(alnPDBseq,"%s.fasta"%pdbname,"fasta") 

# Retrieve reference sequence 
accession="Q96QZ7" 
handle = ExPASy.get_sprot_raw(accession) 
swissseq = SwissProt.read(handle) 
refseq=SeqRecord(Seq(swissseq.sequence,IUPAC.protein),id=accession) 
SeqIO.write(refseq, "%s.fasta"%accession,"fasta") 

# Do global alignment with needle from EMBOSS, stores entire sequences which makes numbering easier 
needle_cli = NeedleCommandline(asequence="%s.fasta"%pdbname,bsequence="%s.fasta"%accession,gapopen=10,gapextend=0.5,outfile="needle.out") 
needle_cli() 
aln = AlignIO.read("needle.out", "emboss") 
os.remove("needle.out") 
os.remove("%s.fasta"%pdbname) 
os.remove("%s.fasta"%accession) 

alnPDBseq = aln[0] 
alnREFseq = aln[1] 
# Initialize per-letter annotation for pdb sequence record 
alnPDBseq.letter_annotations["resnum"]=[None]*len(alnPDBseq) 
# Initialize annotation for reference sequence, assume first residue is #1 
alnREFseq.letter_annotations["resnum"]=range(1,len(alnREFseq)+1) 

# Set new residue numbers in alnPDBseq based on alignment 
reslist = [[i,alnREFseq.letter_annotations["resnum"][i]] for i in range(len(alnREFseq)) if alnPDBseq[i] != '-'] 
for [i,r] in reslist: 
    alnPDBseq.letter_annotations["resnum"][i]=r 

# Set new residue numbers in the structure 
newresnums=[i for i in alnPDBseq.letter_annotations["resnum"][:] if i != None] 
resindices=structure.select("protein and name CA and %s"%selection).getResindices() 
resmatrix = [[newresnums[i],resindices[i]] for i in range(len(newresnums)) ] 
for [newresnum,resindex] in resmatrix: 
    structure.select("resindex %d"%resindex).setResnums(newresnum) 

writePDB("%s.renumbered.pdb"%pdbname,structure) 
0
  1. pdb-tools
  2. Phenix PDB工具
  3. BioPython或Bio3D

檢查的第一個 - 它應該滿足您的需求

+0

不建議使用pdb-tools'renumberer'。它甚至不考慮HETATM條目。 – 2011-07-20 14:25:38

+0

謝謝...揚 - 菲利普。你有什麼其他的建議? – Stylize 2012-01-18 13:59:56

+0

我有類似的問題。看到我的帖子在這裏:http://stackoverflow.com/questions/10786803/protein-sequence-alignment-from-protein-databank-to-cosmic-or-uniprot 你有沒有解決它? – user1357015 2012-05-28 15:51:47

6

我的pdb-tools維護者 - 這馬你是一個可以幫助你的工具。

我最近修改了應用程序內的residue-renumber腳本提供更多的靈活性。它現在可以renumberhetatms具體鏈,,要麼迫使殘留號碼是連續的或者只是添加用戶指定的偏移所有的殘留物。

請讓我知道,如果這有助於你。

+0

謝謝,我會檢查出來,讓你張貼! – Stylize 2012-12-07 16:54:23