首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蛋白质结构文件(pdb)中残基的重新编号

蛋白质结构文件(pdb)中残基的重新编号
EN

Stack Overflow用户
提问于 2011-05-13 03:54:58
回答 3查看 4.8K关注 0票数 5

我目前正在制作一个网站,旨在将所有的乳头状瘤病毒信息组合在一个地方。作为我们在公共服务器(例如genbank)上管理所有已知文件的努力的一部分,我遇到的一个问题是许多(~50%)所有已解决的结构没有根据蛋白质进行编号。也就是说,一个亚域是结晶的(氨基酸310-450),然而结晶学家将其存放为残基1-140。我想知道有没有人知道给整个pdb文件重新编号的方法。我已经找到了重新编号序列(由seqres标识)的方法,但是这不会更新螺旋和板材信息。如果你有任何建议我将不胜感激…

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-22 06:32:29

我也经常遇到这个问题。在放弃了一个旧的perl脚本之后,我一直在试验一些python。本解决方案假设您已经安装了Biopython、ProDy (http://www.csb.pitt.edu/ProDy/#prody)和EMBOSS (http://emboss.sourceforge.net/)。

我在这里使用了其中一个乳头瘤病毒PDB条目。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2012-12-05 06:12:42

我是pdb-tools的维护者-这可能是一个可以帮助你的工具。

我最近修改了应用程序中的residue-renumber脚本,以提供更大的灵活性。它现在可以renumber六面体和特定的链,或者强制残基编号连续,或者只是将用户指定的偏移量添加到所有残基。

如果这对你有帮助,请告诉我。

票数 7
EN

Stack Overflow用户

发布于 2011-05-13 05:12:19

  1. pdb-tools
  2. Phenix pdb-tools
  3. BioPython或Bio3D

检查第一个-它应该符合您的需求

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5983689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档