Biopython - Módulo PDB
Biopython proporciona el módulo Bio.PDB para manipular estructuras polipeptídicas. El PDB (Protein Data Bank) es el recurso de estructura de proteínas más grande disponible en línea. Alberga muchas estructuras proteicas distintas, incluidos los complejos proteína-proteína, proteína-ADN, proteína-ARN.
Para cargar la PDB, escriba el siguiente comando:
from Bio.PDB import *
Formatos de archivo de estructura de proteínas
El PDB distribuye estructuras de proteínas en tres formatos diferentes:
- El formato de archivo basado en XML que no es compatible con Biopython
- El formato de archivo pdb, que es un archivo de texto con formato especial
- Formato de archivos PDBx / mmCIF
Los archivos PDB distribuidos por Protein Data Bank pueden contener errores de formato que los hacen ambiguos o difíciles de analizar. El módulo Bio.PDB intenta solucionar estos errores automáticamente.
El módulo Bio.PDB implementa dos analizadores diferentes, uno es el formato mmCIF y el segundo es el formato pdb.
Aprendamos a analizar cada uno de los formatos en detalle:
Analizador mmCIF
Descarguemos una base de datos de ejemplo en formato mmCIF desde el servidor pdb usando el siguiente comando:
>>> pdbl = PDBList()
>>> pdbl.retrieve_pdb_file('2FAT', pdir = '.', file_format = 'mmCif')
Esto descargará el archivo especificado (2fat.cif) del servidor y lo almacenará en el directorio de trabajo actual.
Aquí, PDBList ofrece opciones para enumerar y descargar archivos desde el servidor FTP de PDB en línea. El método retrieve_pdb_file necesita que el nombre del archivo se descargue sin extensión. retrieve_pdb_file también tiene la opción de especificar el directorio de descarga, pdir y el formato del archivo, file_format. Los posibles valores del formato de archivo son los siguientes:
- "MmCif" (predeterminado, archivo PDBx / mmCif)
- "Pdb" (formato PDB)
- "Xml" (formato PMDML / XML)
- "Mmtf" (muy comprimido)
- "Paquete" (archivo con formato PDB para estructuras grandes)
Para cargar un archivo cif, use Bio.MMCIF.MMCIFParser como se especifica a continuación:
>>> parser = MMCIFParser(QUIET = True)
>>> data = parser.get_structure("2FAT", "2FAT.cif")
Aquí, QUIET suprime la advertencia durante el análisis del archivo. get_structure will parse the file and return the structure with id as 2FAT (primer argumento).
Después de ejecutar el comando anterior, analiza el archivo e imprime una posible advertencia, si está disponible.
Ahora, verifique la estructura usando el siguiente comando:
>>> data
<Structure id = 2FAT>
To get the type, use type method as specified below,
>>> print(type(data))
<class 'Bio.PDB.Structure.Structure'>
Hemos analizado correctamente el archivo y obtuvimos la estructura de la proteína. Aprenderemos los detalles de la estructura de la proteína y cómo obtenerla en el capítulo posterior.
Analizador de PDB
Descarguemos una base de datos de ejemplo en formato PDB desde el servidor pdb usando el siguiente comando:
>>> pdbl = PDBList()
>>> pdbl.retrieve_pdb_file('2FAT', pdir = '.', file_format = 'pdb')
Esto descargará el archivo especificado (pdb2fat.ent) del servidor y lo almacenará en el directorio de trabajo actual.
Para cargar un archivo pdb, use Bio.PDB.PDBParser como se especifica a continuación:
>>> parser = PDBParser(PERMISSIVE = True, QUIET = True)
>>> data = parser.get_structure("2fat","pdb2fat.ent")
Aquí, get_structure es similar a MMCIFParser. La opción PERMISIVA intenta analizar los datos de la proteína de la forma más flexible posible.
Ahora, verifique la estructura y su tipo con el fragmento de código que se proporciona a continuación:
>>> data
<Structure id = 2fat>
>>> print(type(data))
<class 'Bio.PDB.Structure.Structure'>
Bueno, la estructura del encabezado almacena la información del diccionario. Para realizar esto, escriba el siguiente comando:
>>> print(data.header.keys()) dict_keys([
'name', 'head', 'deposition_date', 'release_date', 'structure_method', 'resolution',
'structure_reference', 'journal_reference', 'author', 'compound', 'source',
'keywords', 'journal'])
>>>
Para obtener el nombre, use el siguiente código:
>>> print(data.header["name"])
an anti-urokinase plasminogen activator receptor (upar) antibody: crystal
structure and binding epitope
>>>
También puede verificar la fecha y la resolución con el siguiente código:
>>> print(data.header["release_date"]) 2006-11-14
>>> print(data.header["resolution"]) 1.77
Estructura PDB
La estructura PDB se compone de un solo modelo, que contiene dos cadenas.
- cadena L, que contiene el número de residuos
- cadena H, que contiene número de residuos
Cada residuo está compuesto por múltiples átomos, cada uno con una posición 3D representada por las coordenadas (x, y, z).
Aprendamos cómo obtener la estructura del átomo en detalle en la siguiente sección:
Modelo
El método Structure.get_models () devuelve un iterador sobre los modelos. Se define a continuación:
>>> model = data.get_models()
>>> model
<generator object get_models at 0x103fa1c80>
>>> models = list(model)
>>> models [<Model id = 0>]
>>> type(models[0])
<class 'Bio.PDB.Model.Model'>
Aquí, un modelo describe exactamente una conformación 3D. Contiene una o más cadenas.
Cadena
El método Model.get_chain () devuelve un iterador sobre las cadenas. Se define a continuación:
>>> chains = list(models[0].get_chains())
>>> chains
[<Chain id = L>, <Chain id = H>]
>>> type(chains[0])
<class 'Bio.PDB.Chain.Chain'>
Aquí, Chain describe una estructura polipeptídica adecuada, es decir, una secuencia consecutiva de residuos unidos.
Residuo
El método Chain.get_residues () devuelve un iterador sobre los residuos. Se define a continuación:
>>> residue = list(chains[0].get_residues())
>>> len(residue)
293
>>> residue1 = list(chains[1].get_residues())
>>> len(residue1)
311
Bueno, el residuo contiene los átomos que pertenecen a un aminoácido.
Átomos
Residue.get_atom () devuelve un iterador sobre los átomos como se define a continuación:
>>> atoms = list(residue[0].get_atoms())
>>> atoms
[<Atom N>, <Atom CA>, <Atom C>, <Atom Ov, <Atom CB>, <Atom CG>, <Atom OD1>, <Atom OD2>]
Un átomo tiene la coordenada 3D de un átomo y se llama Vector. Se define a continuación
>>> atoms[0].get_vector()
<Vector 18.49, 73.26, 44.16>
Representa los valores de las coordenadas x, y y z.