Story Transcript
Perl + BioPerl RSG-Argentina Workshop Series 2012
DOCENTES Gonzalo Parra - LFP - FCEyN-UBA Cristian Rohr - AGBT - FCEyN - UBA Franco Simonetti - FIL Esteban Lanzarotti - SBG - FCEyN - UBA
PERL Practical Extraction and Report Language. Es un lenguaje de propósito general creado por Larry Wall. Es un lenguaje interpretado, aunque el intérprete de Perl compila los programas antes de ejecutarlos. Generalmente los comandos se almacenan en archivos llamados scripts. La unidad fundamental es el string, NO el char. Ejemplo
PERL Practical Extraction and Report Language.
Porque PERL? Practical, Extraction and Report Language Pero.. y si yo ya sé C++.... Porque no Python? Sobre gustos y colores...
● ● ● ● ● ●
Perl es ampliamente conocido, Python también... Quien te puede ayudar a aprender? Que programa el resto del mundo cercano. Que herramientas uso: Uniprot, EnsEmbl. Todo es "Mixeable" Todo bien con vos -----------------> Ups...
No un mejor lenguaje Hay problemas que resolver y hay herramientas disponibles...
Tipos de variables
Escalares El escalar representa el tipo básico en Perl. Permite representar enteros, reales y cadenas de caracteres. Las variables de tipo escalar van precedidas por el símbolo $. A continuación veremos algunos ejemplos: $real = 4.53; $entero = -45; $cadena = "Hola"; El intérprete de Perl realiza de forma automática el casteo del tipo de dato a tratar. Por ejemplo my $var=5;$var+=1; print $var ----> 6 $var="hola" . "mundo"; print $var ---> hola mundo $var = "5"; $var +=1; print $var ----> 6
Escalares: cadenas de texto Las cadenas de texto son secuencias de caracteres. Hay dos tipos: *Single Quoted: empiezan y terminan con comilla simple ' '. *Double Quoted: permiten la introducción de códigos de escape con el símbolo \ y la introducción de valores almacenados en variables, empiezan y terminan con ".
Elementos que se pueden introducir en double quoted \a Alarma(Campana) \b Retroceso \e Escape \f Salto de hoja \n Salto de línea \r Retorno de carro \t Tabulador \v Tabulador vertical \$ Signo de $ \@ Ampersand \% Signo de % \nnn Número octal \xnn Número hexadecimal \cn Carácter de control \l Cambia siguiente carácter a minúsculas \u Cambia el siguiente carácter a mayúsculas \L Cambia caracteres a minúsculas hasta encontrar \E. \Q Cita metacaracteres a literales \U Cambia los caracteres a mayúsculas hasta encontrar \E \E Termina \L \U \Q \\ Diagonal invertida
Operadores Operadores aritméticos
Operadores relacionales
Operadores Operadores logicos &&
Operadores de asignación
ARRAYS
Arrays Los arrays son un tipo de datos que permite almacenar listas de datos de tipo escalar. Son precedidos por el símbolo @. Cada objeto de la lista se denomina elemento y cada elemento puede ser un string, un número, o cualquier tipo de dato escalar. Ej. @frutas = ("frutilla","banana","mandarina"); #el array frutas contiene los elementos frutilla, banana y mandarina
Los elementos de un array se referencian mediante índices. El primer elemento se referencia por el índice 0. Por ejemplo: my $fruta = $frutas[1] ; #fruta es banana.
En Perl los arrays son completamente dinámicos y el proceso de asignación de la memoria es completamente transparente al usuario.
Tratando con arrays Puede determinarse el tamaño de un array haciendo my $tam=@array. Las funciones push y pop permiten insertar y extraer el último elemento de una array Ej. push(@list, $val); # agrega $val al final de array @list $ult_val = pop(@list); # $ult_val es el ultimo elemento del array @list @list = (1,2,3); @five = push(@list, (4,5)); # @five = (1,2,3,4,5) $num = pop(@list); # $num = 5
Operadores asociados a los arrays Las funciones shift y unshift permiten respectivamente suprimir e insertar el primer elemento de un array. Por ejemplo: unshift(@list, $val); # equivale a @list = ($val, @list) unshift(@list, $a, $b, $c); # equivale a @list = ($a, $b, $c, @list) @five = (3,4,5); unshift(@five,1,2); # @five = (1,2,3,4,5) $x = shift(@five); # $x=1, @five=(2,3,4,5)
La función reverse invierte los valores del array mientras que sort los ordena en sentido creciente. Por ejemplo: @five = (2,3,4,5,1); sort(@five); # @five = (1,2,3,4,5) reverse(@five); # @five = (5,4,3,2,1)
HASHES
Hashes Los hashes son otro tipo de variable que permite almacenar datos escalares. A diferencia de los arrays, cada elemento del hash posee un identificador denominado keys, los cuales sirven de índices. Sintaxis: %hash = (llave1, elemento1, llave2, elemento2); Para acceder a los elementos del array se usa la siguiente sintaxis $hash{$llave} Se pueden agregar elementos de la siguiente forma $hash{$llave} = $elemento;
Hashes Ej. Obtener el ID de SwissProt a partir del GI number
Operadores asociados a hashes El operador keys proporciona la lista de claves de un hash. Por ejemplo: %cuotas = ("root", 10000, "pat", 256); @list = keys(%cuotas); # @list = ("root", "pat")
El operador values devuelve los valores de una lista asociativa. Por ejemplo: %cuotas = ("root", 10000, "pat", 256); @list = values(%cuotas); # @list = (10000, 256)
También se puede acceder a un hash por pares clave-valor, permitiendo el operador each recorrerla iterativamente. El ejemplo siguiente ilustra un acceso a los pares clave-valor un hash. %cuotas = ("root", 10000, "pat", 256); while (($clave, $valor)=each(%cuotas)) { print "Login: $clave, Cuota: $valor\n"; }
Operadores asociados a hashes Para suprimir elementos de una lista asociada se usa el operador delete. Este operador permite suprimir un par clave-valor de una lista asociativa. Por ejemplo: %cuotas = ("root", 10000, "pat", 256); delete $cuota{"pat"}; #%cuotas = ("root", 10000)
Estructuras de Control
IF/ELSE La estructura if chequea si se cumple una condición y continúa ejecutando el script #!/usr/bin/perl use strict; my $var = 3; if($var == 3) { print "El valor de la variable es 3\n"; }
La estructura else, indica que no si no se cumple la condición del if se debe realizar otra acción #!/usr/bin/perl use strict; my $var = 3; if($var > 2) {print "La variable es mayor a 2;} else {print "La variables es menor a 2;}
UNLESS A diferencia del if, unless ejecuta un bloque de código si la condición es falsa. Su sintaxis es unlees (condicion) {Acciones()} Ejemplo use strict; my $b = 0; unless($b != 0) { $b += 1; } print "b = $b\n";
Muestra >b = 1
WHILE El comando while, ejecuta repetidamente un bloque de código mientras su expresión condicional sea verdadera. Sintaxis: while(condición) {acciones;} Ej. use strict; my $count = 10; while ($count >= 1) { print "$count "; $count--; } print "Fin.\n";
La salida de este codigo es: >10 9 8 7 6 5 4 3 2 1 Fin.
DO WHILE El comando do while realiza una acción y luego verifica si la condición es verdadera. Su sintaxis es: do {acciones;} while(condicion) Ej. use strict; my $numero = 3; do { print "$numero "; $numero++; } while($numero < 10); print "Termino\n";
Muestra en pantalla >3 4 5 6 7 8 9 Termino
UNTIL El comando until es el opuesto a while, ejecuta un bloque de código hasta que la expresión condicional se haga verdad. Ej: use strict; my $count = 10; until ($count == 0) { print "$count "; $count--; } print "termino el until\n"; La ejecución del script muestra: >10 9 8 7 6 5 4 3 2 1 termino el until.
DO UNTIL Ejecuta una acción hasta que la condición se cumpla, su sintaxis es: do {acciones;} until(condición). Ej. use strict; my $value=5; do{ print "$value\n"; $value=$value-1; } until($valueBOOM!!
Podemos combinar todos los system() y qx() que queramos con todas las aplicaciones externas que necesitemos y armar nuestros pipelines usando perl como centro de manejo y distribución de resultados/entradas/salidas
Entrada, salida básica
STDIN, STDOUT, STDERR Un filehandle representa el estado del canal actual de entrada o salida. Cada programa de Perl tiene 3 filehandles disponibles: *STDIN (entrada) *STDOUT (salida) *STDERR (salida de errores). Por default, todos los print van a STDOUT, mientras que los errores y advertencias van a STDERR.
Entrada por STDIN #!/usr/bin/perl -w use strict; print "Hola usuario, ingrese su nombre: "; my $nombre = ; print "Bienvenido $nombre\n";
Salida por STDOUT Standard output STDOUT, se refiere al destino de salida normal del programa. Por ejemplo, cada salida generada por la sentencia print, va hacia STDOUT, entonces al hacer print "Hola\n";, lo que estamos haciendo en realidad es decir que la salida debe ser enviada a STDOUT. STDOUT es un ejemplo de filehandle. Esto es un tipo especial de variable asociada con un destino de salida, y es usado para decirle a tu programa donde queremos que la salida vaya. STDOUT puede ser alterado desde afuera del programa, con el operador de redireccion. Por ejemplo, si queremos la salida en un archivo en lugar de la pantalla, podemos redirigir STDOUT con el símbolo '>' perl ejemplo.pl > salida.txt La salida del programa ejemplo.pl se guarda en el archivo salida.txt
Manipulación de archivos
Manipulación de archivos Para que Perl pueda manipular un archivo utiliza lo que es denominado "filehandle" o "file descriptor", este "filehandle" es una referencia hacia el archivo en cuestión. Si queremos manejar el fichero fichero.txt haríamos: open(MIFICH,"fichero.txt"); # abrimos un fichero existente para lectura # y le asignamos el descriptor MIFICH open(MIFICH,">fichero.txt"); # creamos un nuevo fichero y le asignamos # el descriptor MIFICH open(MIFICH,">>fichero.txt"); # abrimos un fichero existente para añadir # contenido al final, conservando el contenido # original, y le asignamos el descriptor MIFICH close(MIFICH);
# así cerramos el archivo en cualquier caso
Una versión más segura hubiera sido: open(MIFICH,"fichero.txt") || die "lo siento, no puedo encontrar fichero.txt\n";
Ejemplo lectura Para abrir un archivo se utiliza el parámetro OPEN , seguido el nombre del "filehandle" y finalmente el archivo. Ej. Lectura de un archivo de texto linea por linea y mostrarlo por pantalla #!/usr/bin/perl use strict; open(ENTRADA,"mi_archivo.txt"); while(my $linea = ) { print $linea; } close(ENTRADA);
Ejemplo escritura Para abrir un archivo se utiliza el parámetro OPEN , seguido el nombre del "filehandle" y finalmente el archivo. Junto al nombre del archivo se debe colocar el operador > o >>. > reemplaza el contenido del archivo. >> agrega lineas al final del archivo. #!/usr/bin/perl use strict; open(SALIDA,">archivo.txt"); print SALIDA "Archivo sobreescrito\n"; close(SALIDA); open(SALIDA2,">>archivo2.txt"); print SALIDA2 "Agrego linea al final\n"; close(SALIDA2);
Gnuplot Gnuplot es un programa para graficar funciones y datos a partir de valores almacenados en archivos. Compatible con muchos SO y particularmente útil en Linux por la capacidad para scriptear que ofrece. Perl tiene la posibilidad de conectar directamente con Gnuplot y esto abre un abanico de posibilidades muy grande a la hora de graficar nuestros datos, automáticamente y para múltiples sets de datos de forma iterativa.
Expresiones regulares
Expresiones regulares En linea de comandos de Linux si buscamos todas las líneas de un archivo que contienen el string abc, podemos hacer grep "abc" archivo > resultados En Perl podemos hacer algo similar #!/usr/bin/perl use strict; open(IN,"archivo"); while() { if(/abc/) { print $_; } }
Delimitador de las expresiones El delimitador es la marca de principio y fin de la expresión. El delimitador máscomúnmentee usado es /
Expresiones regulares El operador m// Este operador se utiliza para localizar alguna expression dentro de una cadena de texto o string. Si la expresión es verdadera entonces se regresa un 1. Ej. my $string = "Esto es una frase cualquiera"; if($string =~ m/frase/) { print "Se encontro la palabra: frase\n"; }
Es el operador por default si se utilizan slashes "/expresion/"
Búsqueda de patrones en cadenas de texto Una expresión regular define un patrón que será buscado. Las Expresiones Regulares contestan la pregunta: “Esta cadena contiene este patrón?” En las expresiones regulares, los caracteres alfanuméricos (de la a a la z, de la A a la Z, de 0 a 9 y _ ) tienen una correspondencia unívoca, mientras que otros caracteres tienen características especiales.
Metacaracteres Los Meta-carácteres en el lenguaje de expresiones regulares tienen diferentes significados . \w \W \s \S \d \D \t \n
# Devuelve coincidencia con cualquier caracter # Cualquier carácter alfanúmerico (A-Z a-z 0-9 y _ ) # Cualquier carácter NO alfanúmerico # Cualquier carácter en de espacios blancos # Cualquier carácter que NO es un espacio en blanco # Digitos # NO digitos # Carácter tabulación # Caracter de nueva línea
Cuantificadores * 0 o más veces el caracter anterior + 1 o más veces ? 1 o 0 veces {n} Exactamente n veces {n,} Al menos n veces {n,m} Entre n y m veces
Expresiones regulares La barra vertical indica un OR ($string =~ /this|that/) Se puede usar también el operador [ ] [caracteres] busca alguno de los caracteres que está entre [ ] Anchors ^ (sólo al inicio de la expresión) hace que el texto corresponda al pattern sólo si el pattern está al comienzo del texto. $ (sólo al final de la expresión) hace que el texto corresponda al pattern sólo si el pattern está al final del texto.
Expresiones Regulares Rangos [0123456789] [0-9] [0-9\-] [a-z0-9] [a-zA-Z0-9_]
# Busca cualquier número # Lo mismo # Busca de 0 a 9, o el signo menos # Busca cualquier minúscula o número # Busca cualquier letra, número o guion bajo
Búsqueda de patrones en cadenas de texto
Agrupando Los parentesis () permiten agrupar expresiones $string =~/(GC)+TTT/ $string =~/(GC){5}TTT/
Variables especiales $&= el match $`= la cadena anterior al match $'= la cadena posterior al match my $string = "GGTATCGC"; $string =~/TAT/; # $& # $` # $'
es es es
TAT GG CGC
Variables en memoria $1, $2, $3 ... guardan el string match con cierto grupo my $string = "1SH3_A.pdb"; $string =~/(\w+)_(\w)\.pdb/; $1 contiene "1SH3"; $2 contiene "A";
Expresiones regulares Sustitución El operador s// Es utilizado para sustituir una cadena o expresión por otra. Ej. my $string = "Hoy es lunes"; $string =~ s/lunes/martes/;
Ahora $string es "Hoy es martes";
Modificadores El modificador i hace que el patrón de búsqueda no diferencia minúsculas y mayúsculas (case insensitive) $string =~/[ACGTacgt]/; es lo mismo que $string=~/acgt/i;
El modificador g hace que se busquen todas las ocurrencias del patrón, de forma global. my $string = "Hoy es lunes lunes lunes"; $string =~ s/lunes/martes/; # devuelve "Hoy es martes lunes lunes" $string =~ s/lunes/martes/g; # devuelve "Hoy es martes martes martes"
Expresiones regulares Transliterate - Transliteración El operador tr// Sirve para cambiar caracteres individuales por otros Ej. my $string = "Perl"; $string =~ tr/e/a/;
Ahora $string es "Parl" Si quisiéramos encontrar la cadena complementaria de una secuencia de ADN podríamos usar. Para obtener la reversa usamos la función reverse my $secuencia =~ tr/ACGTacgt/TGCAtgca/;
Para obtener la reversa usamos la función reverse my $reversa_complementaria = reverse $secuencia;
CPAN The Comprehensive Perl Archive Network www.cpan.org
CPAN Perl es un lenguaje extensivamente utilizado por programadores donde uno de los principios más arraigados es compartir. Si tenemos un problema que resolver hay grandes chances de que alguien lo haya hecho y el código esté disponible. Librería de todos los paquetes públicos desarrollados para usar en Perl. Entre ellos se encuentra BioPerl y múltiples librerías compatibles. Para darnos cuenta de las dimensiones, en noviembre de 2011, CPAN poseía 9359 uploaders y 101656 módulos.
Estadistica: Statistics::Descriptive Módulo de estadística descriptiva para perl. 1) Bajamos el tar.gz 2) Compilamos: Configure; make; sudo make install 3) Usarlo.
CPAN Console Además de usar el repositorio via web, CPAN tiene una interfaz que permite descargar los paquetes desde la consola. De esta forma además se instalan por defecto las dependencias necesarias para que el paquete funcione. sudo perl -MCPAN -e shell Ahora instalaremos el paquete XML::Simple >install XML::Simple
CPAN Console
ParsePDB Un parser de PDB en Perl Formato PDB ATOM ATOM ATOM ATOM ATOM ATOM ATOM ATOM ATOM ATOM ATOM
263 264 265 266 267 268 269 270 271 272 273
N CA C O CB CG CD1 CD2 CE1 CE2 CZ
http://www.wwpdb.org/docs.html
PHE PHE PHE PHE PHE PHE PHE PHE PHE PHE PHE
A A A A A A A A A A A
60 60 60 60 60 60 60 60 60 60 60
grep ATOM my.pdb
HETATM 2038 HETATM 2039 HETATM 2040
O4 O O
10.596 11.987 12.768 12.387 12.012 13.310 13.477 14.312 14.659 15.482 15.661
-1.972 -1.589 -1.990 -1.579 -0.075 0.476 0.543 0.933 1.076 1.460 1.535
16.076 15.799 17.060 18.160 15.533 14.953 13.577 15.802 13.061 15.281 13.913
1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
6.64 9.20 8.90 8.27 11.51 14.46 16.23 15.33 17.92 14.92 16.64
N C C O C C C C C C C
---> devuelve sólo las líneas que contienen ATOM
SO4 A 291 HOH A 292 HOH A 293
grep -v "HETATM" my.pdb
10.183 11.394 7.725 -14.390 -0.227 4.026
35.491 28.478 12.800
0.67 23.79 0.77 2.61 0.73 2.32
O O O
---> devuelve las líneas que no contienen ATOM
ParsePDB Un parser de PDB en Perl ATOM ATOM ... ATOM ATOM
1 2
N AALA A CA AALA A
1 1
72.883 73.796
57.697 56.531
56.410 56.644
0.50 83.80 0.50 84.78
N C
1 2
N BALA A CA BALA A
1 1
72.883 73.796
57.697 56.531
56.410 56.644
0.50 83.80 0.50 84.78
N C
- AA alternativos o en posiciones alternativas - Numeraciones no continuas - Cadenas con el mismo ID CPAN > install ParsePDB
Download: http://comp.chem.nottingham.ac.uk/parsepdb/
myscript.pl use ParsePDB; use Data::Dumper;
Alternativa al modulo Bio::Structure
ParsePDB use strict; use ParsePDB; use Data::Dumper; my $File=$ARGV[0]; # crea un file my $PDB = ParsePDB->new (FileName => $File, NoHETATM => 1, Header=> 0, NoANISIG => 1, AtomLocations => "First"); # NoHETATM => 1, # Header=> 0, # NoANISIG => 1,
# Filtra los heteroatomos, 0 para no filtrarlos. # Filtra el Header junto con los REMARKS # Elimina las líneas SIGATM, SIGUIJ y ANISOU.
# Elimina posiciones alternativas de aminoacidos. # "First" para dejar sólo la primer posicion, "A" para dejar solo las posiciones "A" y ninguna otra. Idem "B". # AtomLocations => "First"; $PDB->Parse; print Dumper $PDB;
# Solo a modo de demostracion, no usaremos esto
$PDB->Parse; print Dumper $PDB;
$VAR1 = bless( { 'ANISIG' => 'ANISOU|SIGATM|SIGUIJ', 'AllAtoms' => 'ATOM', 'NoANISIG' => 1, 'ChainLabelAsLetter' => 0, 'Footer' => [ 'MASTER 540 0 0 220 60 0 0 630600 11 0 296 ', 'END ' ], 'Verbose' => 1, 'AltLocIndicator' => 0, 'WarningMsg' => [], 'AtomLocations' => 'FIRST', 'ErrorMsg' => undef, 'NoHETATM' => 1, 'Warning' => { 'UnknownResidue' => 0, 'InvalidAminoAcid' => 0, 'Warning' => 0, 'NoChainLabel' => 0, 'MultipleChainLabel' => 0, 'NoENDMDL' => 0, 'UnknownAtom' => 0, 'UnknownLabel' => 0, 'UnknownAminoAcid' => 0, 'UnknownModel' => 0, 'ChainLabelsInvalid' => 0, 'UnknownChain' => 0 }, 'Models' => { '0' => { '6' => { 'Content' => [ 'ATOM 17527 N MET G 1 -26.343 55.560 11.293 1.00142.46 ', 'ATOM 17528 CA MET G 1 -25.408 55.324 10.159 1.00145.54
N C
ParsePDB
Funciones Internas y Externas Devuelven un ARRAY $PDB->IdentifyModels $PDB->IdentifyChains(Model => 0)
$PDB->IdentifyModelNumbers $PDB->IdentifyChainLabels(Model => 0)
$PDB->IdentifyResidues(Model => 0, Chain => 0) $PDB->IdentifyResidueLabels(Model =>0, ChainLabel =>'A', OneLetterCode => 1)
Más funciones $PDB->IdentifyAtoms (Model => 1, Chain => 0); $PDB->CountModels; $PDB->CountChains (Model => 1); $PDB->CountAtoms (Model => 0, ChainLabel => "C"); $PDB->CountResidues (Model => 0, Chain => 1);
->Get Function # Obtengo todos los modelos y cadenas.. my @All = $PDB->Get; # Obtengo solo los Carbonos alfa de la primer cadena my @Content = $PDB->Get (Chain => 0, AtomType => 'CA'); # Excepto los Calpha @Content = $PDB->Get (Model => 0, ChainLabel => 'A', AtomType => '-CA'); # Obtengo todas las lineas del PDB que comienzan con "REMARK 500" my @Lines = $PDB->GetSection ("REMARK 500");
Más funciones # obtengo el label del residuo 5 my $ResidueLabel = $PDB->GetResidueLabel (Residue => 5); # obtengo la masa del residuo 1 my $Mass = $PDB->GetMass (Model => 0, Chain => 0, Residue => 1); # Obtengo el centro de masa de la cadena 0 my @CenterOfMass = $PDB->GetCenterOfMass (Chain => 0); print Dumper @CenterOfMass; # Obtengo FASTAs para todas las cadenas my @FASTA = $PDB->GetFASTA (Model => 0); print @FASTA; # Escribe en un archivo FASTA la secuencia # $PDB->WriteFASTA (Model => 0); # Para reenumerar/renombrar $PDB->RenumberResidues (ResidueStart => 8); $PDB->RenumberAtoms (AtomStart => 6); $PDB->RenumberChains (ChainStart => 'D');
Funcion AtomIndex my @Content = $PDB->Get (AtomNumber => 5, AtomIndex => 1);
Funcion AtomIndex Ejercicio: Separar en files las diferentes cadenas de un PDB
Funcion AtomIndex Ejercicio: Mover una cadena del PDB 100 Angstroms en la coordenada Y
Función ResidueIndex!!! Igual que AtomIndex, pero por residuo, y a la vez, dentro de cada residuo, esta el AtomIndex de los átomos que lo componen
@Content = $PDB->Get (ResidueNumber => 12, ResidueIndex => 1); $Content[0] = { ’Atoms’ => array reference with the parsed atom lines, ’AtomTypes’ => hash reference with the parsed atom lines, ’InsResidue’ = ’ ’, ’Phi’ = ’-120.23’, ’Psi’ = ’104.12’, ’ResidueLabel’ = ’ALA’, ’ResidueNumber’ = ’12’ }
ResidueIndex
Para un PDB, calcula la distancia entre todos los Carbonos Alfa entre sí
BioPerl
Que es BioPerl? BioPerl es una colección de módulos de Perl que facilitan el desarrollo de scripts en Perl para aplicaciones de bioinformática. Un toolkit bioinformático que posibilita: *Conversión de formatos, de bases de datos y de registros *Procesamiento de reportes (Ej. resultado de blast) *Manipulación de datos y secuencias (Ej. secuencias fasta) *Análisis de secuencias *Conexión a bases de datos de secuencias de ADN y proteínas, locales y remotas *Búsqueda de genes y muchisimas otras cosas más...
Instalación de Bioperl Desde CPAN Abrimos una consola y entramos a cpan >sudo cpan Ya en cpan hacemos >d /bioperl/ para buscar la versión más reciente de BioPerl Nos mostrara algo similar a esto Distribution Distribution Distribution Distribution
B/BI/BIRNEY/bioperl-run-1.4.tar.gz B/BO/BOZO/Fry-Lib-BioPerl-0.15.tar.gz CJFIELDS/BioPerl-1.6.0.tar.gz CJFIELDS/BioPerl-1.6.1.tar.gz
Elegimos la versión que queremos descargar por ejemplo CJFIELDS/BioPerl-1.6.1.tar.gz Luego hacemos >install CJFIELDS/BioPerl-1.6.1.tar.gz
Instalación de Bioperl Descargamos el paquete apropiado desde http://bioperl.org/DIST/ Lo descomprimimos >tar xvfz BioPerl-1.6.1.tar.gz
Vamos a la carpeta >cd BioPerl-1.6.1
Configuramos el paquete >perl Build.PL
Realizamos los test >./Build test
Instalacion >sudo ./Build install
Bioperl Toolkit *Core package (bioperl-live) -El paquete básico, es requerido por todos los demás paquetes *Run package (bioperl-run) -Provee wrappers para ejecutar muchas aplicaciones bioinformáticas *DB package (bioperl-db) -Subproyecto para almacenar datos de secuencia y anotaciones. *Network package (bioperl-network) -Parseo y análisis datos de interaccion proteina-proteina
Módulos de entrada salida: IO SeqIO: FASTA, GenBank, EMBL, ... AlignIO: ClustalW, MSF, Phylip, ... TreeIO: Newick, Nexus, NHX, ... SearchIO: BLAST, FASTA, HMMER, ... MapIO: MapMaker Matrix::IO: Scoring, Phylip Assembly::IO: Ace, Phrap Ontology::IO: InterPro, GO, SO y otros...
Conversión de formatos Los módulos IO pueden ser utilizados para convertir entre formatos
Lectura de datos Los módulos IO leen datos formateados y crean representaciones en memoria de los datos llamados objetos
Trabajando con la secuencia
El módulo SearchIO
http://www.bioperl.org/wiki/HOWTO:SearchIO
Una de las tareas más comunes es parsear (procesar) reportes o resultados de algún programa. Una herramienta popular para comparar secuencias es el paquete BLAST de NCBI. El siguiente ejemplo muestra cómo procesar un reporte de BLAST, se buscan todos los hits donde el HSP es mayor a 50 nucleotidos y el % de identidad es mayor a 75%.
El modulo Bio::SeqUtils Este módulo posee herramientas para trabajar con secuencias. Ej: traducir las secuencias de un archivo fasta a los 6 marcos de lectura
Obtener secuencias de una DB Bio:: DB Una de las fortalezas de BioPerl es que permite descargar secuencias de una gran cantidad de origenes, archivos, bases de datos remotas, bases de datos locales, sin importar su formato. Por ejemplo obtener una entrada de Genbank. Para eso utilizamos el módulo Bio::DB::GenBank. Que es lo que obtenemos? un Objeto Secuencia. Además se pueden consultar otras bases de datos como SwissProt (Bio::DB::SwissProt) GenPept (Bio::DB::GenPept) EMBL (Bio::DB::EMBL) SeqHound (Bio::DB::SeqHound) Entrez Gene (Bio::DB::EntrezGene) RefSeq (Bio::DB::RefSeq) ...
Obtener secuencias de una DB Bio:: DB Por ejemplo para para obtener secuencias de ARNm de EMBL, se puede usar el siguiente script.
Obtener secuencias de una DB Bio:: DB Descargar todas las secuencias de topoisomerasas de GenBank, de Arabidopsis lyrata con una longitud entre 0 y 3000pb
Bio::AlignIO Módulo para la conversión entre formatos de alineamiento.
Formatos bl2seq clustalw emboss* fasta mase mega meme metafasta msf nexus pfam phylip prodom psi selex stockholm
Bio::Graphics Este módulo fue diseñado para resolver los siguientes problemas comunes: * A partir de los resultados de BLAST, queremos generar una imagen que muestre donde mapean los hits y cual es su score. * Tenemos un archivo de GenBank con una tabla de características compleja, y queremos mostrar las posiciones de los genes, repeticiones, promotor y otras características. * A partir de una lista de ESTs que han sido mapeados a un genoma, queremos mostrar su alineamiento. * Creamos un clone fingerprint map, y queremos mostrarlo.
#!/usr/bin/perl use strict; use Bio::Graphics; use Bio::SearchIO; my $file = $ARGV[0]; my $searchio = Bio::SearchIO->new(-file => $file, -format => 'blast'); while(my $result = $searchio->next_result()) { my $panel = Bio::Graphics::Panel->new(-length => $result->query_length, -width => 800, -pad_left => 10, -pad_right => 10, ); my $full_length = Bio::SeqFeature::Generic->new(-start=>1,-end=>$result->query_length, -display_name=>$result->query_name); $panel->add_track($full_length, -glyph => 'arrow', -tick => 2, -fgcolor => 'black', -double => 1, -label => 1, ); my $track = $panel->add_track (-glyph => 'graded_segments', -label => 1, -connector => 'dashed', -bgcolor => 'blue', -font2color => 'red', -sort_order => 'high_score', -description => sub { my $feature = shift; return unless $feature->has_tag('description'); my ($description) = $feature->each_tag_value('description'); my $score = $feature->score; "$description, score=$score"; }); while( my $hit = $result->next_hit ) { my $feature = Bio::SeqFeature::Generic->new(-score => $hit->score, -display_name => $hit->name, -tag => { description => $hit->description }, ); while( my $hsp = $hit->next_hsp ) { $feature->add_sub_SeqFeature($hsp,'EXPAND'); } $track->add_feature($feature); } my $nombre = $result->query_name; open (SALIDA, ">$nombre.png"); print SALIDA $panel->png; } close(SALIDA);
Salida Blast