next up previous index
Siguiente: Procesando resultados de BLAST Subir: Ejercicios que manejan archivos Anterior: Ejercicios que manejan archivos   Índice de Materias

Leyendo archivos Protein Data Bank (PDB)

El Protein Data Bank (Berman et al., 2000) es un repositorio de descripciones experimentales de las estructuras moleculares de proteínas y ácidos nucleicos resueltos hasta el momento. Cada descripción es un archivo de texto que contiene las coordenadas atómicas de la molécula en cuestión en un formato que se llama PDB.

Aquí podéis ver un ejemplo sencillo, la estructura de una proteína reguladora de ratón en complejo con una molécula de ADN, en el archivo 1lfu.pdb. Podéis desplegar esta molécula con programas como Rasmol y, en cualquier caso, debéis abrir este archivo con vuestro editor de texto para verle las tripas.

Figura 2.1: Representación de Rasmol del archivo PDB 1LFU.
\begin{figure}
\begin{center}
\includegraphics[width=0.8\textwidth]{1lfu}
\end{center}
\end{figure}

En este ejemplo es muestro el programa extraeProtPDB.pl que lee un archivo PDB, como 1lfu.pdb y separa el esqueleto peptídico (backbone) de las proteínas presentes y las deposita en un nuevo archivo.

#!/usr/bin/perl -w 
# Ejemplo escrito por Bruno Contreras en Julio de 2005

# Programa extraeProtPDB.pl que lee un archivo PDB pasado como argumento, 
# separa el esqueleto peptídico de las proteínas presentes y lo deposita
# en formato PDB en un archivo llamado esquelto.pdb

use strict; 

## variables importantes ###########################################################

my ($archivoPDB,$nombre_atomo,@esqueleto);

## revisa los argumentos pasados al invocar el programa ############################
if(scalar(@ARGV) < 1)
{	
	die "uso: extraeProtPDB.pl <archivoPDB>\n";	
}
else 
{	
	$archivoPDB = $ARGV[0];	# lee el nombre del argumento y asígnalo a  
}


## abre $archivoPDB en modo lectura y lo recorre línea a línea ###############
open(PDB,$archivoPDB) || die "# no puedo abrir $archivoPDB\n";
while(<PDB>)
{
	if(/^ATOM/) # líneas de coordenadas atómicas, si abrís 1lfu.pdb sabréis a qué me refiero
	{
		$nombre_atomo = substr($_,13,4); # toma la parte de la línea que contiene el nombre del átomo
		                                 # en el formato PDB
	
	 	# toma sólo los átomos correspondientes al esqueleto peptídico: N,CA,C,O
		if($nombre_atomo =~ /N / || $nombre_atomo =~ /CA/ || $nombre_atomo =~ /C /|| $nombre_atomo =~ /O /)
	 	{
			push(@esqueleto,$_);
		}
	}
}
close(PDB);

# crea un nuevo archivo para depositar ahí las coordenadas del esqueleto peptídico ###
open(ESQPDB,">esqueleto.pdb") || die "lo siento, no puedo crear esqueleto.pdb\n";

print ESQPDB "HEADER esqueleto peptídico de $archivoPDB\n";
print ESQPDB @esqueleto;

close(ESQPDB);

Ahora, como ejercicio, os pido que modifiquéis este programa para que cree una cadena de caracteres con la secuencia de la proteína 1lfu.pdb en código de una letra. Por ejemplo, Ala deberá ser 'A' y Trp 'W'. El programa deberá además crear un nuevo archivo e imprimir dentro la secuencia en formato FASTA, como el que vísteis en 2.7.5.


next up previous index
Siguiente: Procesando resultados de BLAST Subir: Ejercicios que manejan archivos Anterior: Ejercicios que manejan archivos   Índice de Materias
Bruno Contreras Moreira 2007-06-15