2011-05-12 19 views
5

Hola
Actualmente estoy involucrado en la creación de un sitio web destinado a combinar toda la información del virus del papiloma en un solo lugar. Como parte del esfuerzo estamos curando todos los archivos conocidos en servidores públicos (por ejemplo, genbank) Uno de los problemas con los que me encontré fue que muchas (~ 50%) de todas las estructuras resueltas no están numeradas según la proteína. Es decir un subdominio se cristalizó (aminoácido 310-450), sin embargo, el cristalógrafo lo depositó como residuo 1-140. Me preguntaba si alguien sabe de una forma de renumerar todo el archivo pdb. He encontrado formas de renumerar la secuencia (identificada por seqres), sin embargo, esto no actualiza la información de hélice y hoja. Le agradecería que si tuviera alguna sugerencia ...
Graciasresiduos de renumeración en un archivo de estructura de proteínas (pdb)

Respuesta

1

Con frecuencia encuentro este problema también. Después de abandonar un antiguo script de Perl que tenía para esto, he estado experimentando con Python. Esta solución supone que tienes instalado Biopython, ProDy (http://www.csb.pitt.edu/ProDy/#prody) y EMBOSS (http://emboss.sourceforge.net/).

Utilicé una de las entradas PDB de papiloma virus aquí.

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 AP-herramientas
  3. BioPython o Bio3D

Compruebe el primero - que debe adaptarse a sus necesidades

+0

El pdb-tools 'renumberer' no es para recomendar. Por ejemplo, ni siquiera considera las entradas de HETATM. –

+0

gracias ... Jan-Philip. ¿Tiene alguna otra sugerencia? – Stylize

+0

Tengo un problema similar. Ver mi publicación aquí: http://stackoverflow.com/questions/10786803/protein-sequence-alignment-from-protein-databank-to-cosmic-or-uniprot ¿Alguna vez lo resolvió? – user1357015

6

Soy el mantenedor de pdb-tools - que ma ser una herramienta que puede ayudarlo.

He modificado recientemente el script residue-renumber dentro de mi aplicación para proporcionar más flexibilidad. Ahora puede renumberhetatms y cadenas específicas, y puede forzar que los números de residuo sean continuos o simplemente agregar un desplazamiento especificado por el usuario a todos los residuos.

Háganme saber si esto le ayuda.

+0

gracias, lo verificaré y ¡lo mantendré informado! – Stylize

Cuestiones relacionadas