2011-05-12 205 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