Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

89
Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona

Transcript of Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Page 1: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Programació en Perl: aplicacions bioinformàtiques

Universitat de Girona

Page 2: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Punts a tractarPunts a tractar

• Sistema local de gestió de la informació biològica

• El llenguatge Perl: característiques i instal·lació

• Estratègies de programació

• Variables en Perl

• Seqüències i cadenes

• Control de fluxe

• Expressions regulars

• Subrutines

• Mòduls

• Exemple integrador

• Com seguir avançant?

Page 3: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

SISTEMA LOCAL DE GESTIÓ DE LA INFORMACIÓ BIOLÒGICA

SISTEMA LOCAL DE GESTIÓ DE LA INFORMACIÓ BIOLÒGICA

Page 4: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El problema de la integració de dadesEl problema de la integració de dades

ANÀLISI BIOINFORMÀTIC ESTÀNDARANÀLISI BIOINFORMÀTIC ESTÀNDAR

2. Anàlisis i emmagatzements

successius

1. Extracció via Internet i

emmagatzement local

Bases de dades locals

Ex. arxius o BBDD

Fonts de dades externes: GenBank, EMBL-EBI, SWISSPROT,…

Ex. Gens amb una det. funció, o proteïnes amb una det. estructura, o mutants que

afecten a un fenotip donat, …

Interfícies htmlScripts cgi

Eines d’anàlisiEx. BLAST, predicció

d’estructura, …

Secundàries

Primàries

Terciàries

3. Consulta i visualització

Page 5: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El problema de la integració de dadesEl problema de la integració de dades

Dues maneres d’operar:

1. Manual: efectuar tot el procés manualment

2. Automatitzat: crear aplicacions o scripts amb un llenguatge adeqüat que automatitzin l’extracció d’informació i concatenin el tractament de les dades

La capacitat de crear petits programes que ajudin a fer tasques bioinformàtiques pot ser increïblement útil; pot significar un estalvi molt considerable de temps respecte a fer el mateix manualment!!!

Page 6: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Exemple d’una plataforma de gestió automatitzadaExemple d’una plataforma de gestió automatitzada

Estimar polimorfisme nucleotídic a partir de seqüències de DNA de les bases de dades públiques (GenBank)Input: organismes, gens o identificadors del GenBank

Page 7: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Exemple d’una plataforma de gestió automatitzadaExemple d’una plataforma de gestió automatitzada

Get sequences

& annotations

INPUT: GenBank query, or submitted

sequences

Minimum number ofsequences per category

Clustalparameters

CDS, exon, intron, 5’UTR, 3’UTR, promoter, etc.

Group byspecies & gene

Sequences &annotations

Sequencesorganized incategories

Alignmentvalidation

Su

bg

rou

ps

Read geneannotations

Extract generegions

Sequences,positions and orientations

Polymorphism

Syn & Non-synpolymorphisms

Linkagedisequilibrium

Codon bias

DIVERSITYANALYSIS

Web-basedoutput

Alignments

Jalview

OUTPUT

MySQLdatabase

QUALITYASSESSMENT ALIGNMENT

DATA MINING

AMNIS

Aligns

Sourcedata

GENOMELOCATIONConsensus

BLAT

Minimum

similarity &

Minimum

number of

seqsper category

ClustalW

Muscle

T-Coffee

Page 8: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Exemple d’una plataforma de gestió automatitzadaExemple d’una plataforma de gestió automatitzada

Page 9: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

1. Extracció de dades mitjançant Screen scraping de

pàgines web

2. Execució automatitzada de programes d’anàlisi de

seqüències (CLUSTAL, MUSCLE, T-COFFEE, BLAT)

3. Connexió a base de dades per a l’emmagatzematge i

consulta d’informació

4. Creació d’una interfície HTML per a fer consultes i

mostrar resultats

5. Concatenació automatitzada de tots els passos anteriors

Tot això és possible mitjançant la creació de petits

scripts amb el llenguatge de programació Perl

Exemple d’una plataforma de gestió automatitzadaExemple d’una plataforma de gestió automatitzada

Page 10: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

EL LLENGUATGE PERL: CARACTERÍSTIQUES I INSTAL·LACIÓ

EL LLENGUATGE PERL: CARACTERÍSTIQUES I INSTAL·LACIÓ

Page 11: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El llenguatge Perl: característiquesEl llenguatge Perl: característiques

PERL, Practical Extraction and Report Language (Larry Wall 1986) http://www.perl.com/

• Un llenguatge interpretat orientat a la cerca, extracció i formatejat d’arxius de text

• Característiques:

– Corba d’aprenentatge baixa i llarga– Manipula i processa seqüències llargues fàcilment– Molt utilitzat a laboratoris de biologia molecular per a la

creació de pàgines web dinàmiques– Els programes es poden fer en pocs minuts (rapid

prototyping), ideal per a resoldre les necessitats del dia a dia dels laboratoris de recerca

– Portable– Velocitat bona, tot i que no òptima

Page 12: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Eines per a programarEines per a programar

• Editor de text– Bloc de notes (Notepad)– Notepad++, EditPlus, …– IDE Perl: Komodo, PerlE

• Intèrpret de Perl + Consola DOS– http://www.activestate.com/store/download_file.aspx?binGUID=e5c71329-b7a6-

4563-8199-e1483f751c4f

• Directori de treball al disc– Exemple: C:\scripts\

Page 13: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El llenguatge Perl: instal·lacióEl llenguatge Perl: instal·lació

Page 14: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El llenguatge Perl: instal·lacióEl llenguatge Perl: instal·lació

http://www.activestate.com/store/download_file.aspx?binGUID=e5c71329-b7a6-4563-8199-e1483f751c4f

Page 15: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ESTRATÈGIES DE PROGRAMACIÓESTRATÈGIES DE PROGRAMACIÓ

Page 16: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

L’art de programarL’art de programar

• Programar és una manera de solucionar problemes resolubles de manera iterativa i gradual

• El procés de programar inclou:

– Plantejar– Escriure / Codificar / Editar– Executar– Revisar errors (debugging)– Guardar i Backups

Page 17: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

El procés de programarEl procés de programar

Exemple: Un programa que cerca dianes de restricció en el DNA

• Imaginar un disseny general per al programa• Escriure el “pseudo-codi” amb comentaris

– Identificar els inputs requerits (les dades o informació que ha de subministrar l’usuari)

– Fer un esboç del procés– Preveure les fases intermitges– Decidir com es donarà l’output (arxiu, pantalla, taula,

gràfic, BBDD,…)

• Escriure el programa en codi Perl • Refinar el model previ en els seus detalls no

anticipats

Page 18: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Un programa que sumaUn programa que suma

Pseudo-codi (plantejament):1. Sol·licitar els números a sumar2. Fer la suma3. Mostrar el resultat

En Perl (només els comentaris):#Sol·licitar els números a sumar

#Fer la suma

#Mostrar el resultat

Page 19: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Programació bàsicaProgramació bàsica

• Intèrpret i programa (script) nom.pl#!/usr/bin/perl

print “mi primer script de perl”;

• Executar programes: anem a DOS (línia de comandes) i escribim

C:>perl primer.pl– o bé (en Windows)C:>primer.pl

– Resultat: C:>mi primer script de perl

#!/usr/bin/perl#primer.plprint "El meu primer script en Perl!";

C:\>perl primer.pl

C:\>primer.pl

El meu primer script en Perl!C:\>_

Page 20: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Com funciona un scriptCom funciona un script

• Les instruccions s’executen una rera l’altre, des del principi:

#!/usr/bin/perl# preámbulo...print “Puedo calcular!\n”;#hacer cálculos$suma = 3 + 4;#mostrar el resultadoprint ”La suma de 3 + 4 es “,$suma,”.\n”;

El símbol # serveix per introduir comentaris; tot el que hi hagi darrera de # en una línia, no s’interpreta

• Exercici: editar i executar

#!/usr/bin/perl#suma.plprint "Puc calcular!\n";#fer els càlculs$suma = 3 + 4;#mostrar el resultatprint "La suma de 3 + 4 es $suma";

Page 21: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

VARIABLES EN PERLVARIABLES EN PERL

Page 22: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Tipus de dadesTipus de dades

• Text (o cadena de caracters, string)“cadena numero 1”, ‘cadena numero 2’

• Números1, 49, 28.2, -109, 6.04E23

• Caracters especialsprint “Nueva linea\n<aqui y un tab\t<aqui.\n”;

• Exercici (última instrucció): C:>perl programa.pl

print "Nova linia\n<aqui i un tab\t<aqui.\n";

C:\>perl programa.plNova linia<aqui i un tab <aqui.

C:\>_

Page 23: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Variables escalarsVariables escalars

$a; # sensibles a majúscules i minúscules$A; # $a és diferent de $A

# nom: números, lletres o línies de subratllat$nomDeVariable_Llarg;

$x=42; # assignem el valor de 42 a $xprint 'el valor de $x es ' . $x . "\n";$x='DNA de cadena sencilla'; # canviem valor de $xprint 'pero ara el valor de $x es ' . $x . "\n";

• Proporcionen un lloc on guardar dades temporalment $nom

C:\>perl programa2.plel valor de $x es 42pero ara el valor de $x es DNA de cadena sencilla

Page 24: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 1A– Exercici 1B

Page 25: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

#!/usr/bin/perl# programa3.pl# Programa que almacena una secuencia de DNA

# almacenamos una secuencia de DNA en una variable $DNA = "ACGGGGAGGACGGGAAATTACTACGGGCATTAGC";

# Imprimimos la secuencia en la pantallaprint $DNA;

#salimos del programaexit;

C:\>perl programa3.plACGGGGAGGACGGGAAATTACTACGGGCATTAGCC:\>_

Page 26: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

#!/usr/bin/perl# variables.pl# Programa que concatena fragmentos de DNA

# Primero almacenamos dos secuencias de DNA en dos variables$DNA1 = "ACGGGGAGGACGGGAAATTACTACGGGCATTAGC"; $DNA2 = "ATAGTGCCGTGCATGCGACGATTCTGGCATACATC";

# Imprimimos en pantalla las dos secuencias separadamenteprint $DNA1 . "\n";print $DNA2 . "\n\n";

# concatenamos ambas en una tercera variable que se imprime$DNA3 = $DNA1 . $DNA2 ;print "Concatenación de los dos fragmentos de DNA: \n\n";print "$DNA3\n\n";exit;

Page 27: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Operadors aritmèticsOperadors aritmètics

• Aritmètics:

+ suma

- resta

* multiplicació

/ divisió

** exponencial

() agrupació

Page 28: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Procedència d’operadorsProcedència d’operadors

• Procedència d’operadors com en una calculadora científica:

• Substituir les dues últimes línies per:

#!/usr/bin/perl# operadores.pl$x = 4;$y = 2;$z = 3 + $x * $y;print "$z \n";

print 3 + $x * $y . "\n";print (3 + 4) * 2 . "\n";

Page 29: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Abreviatures d’OperadorsAbreviatures d’Operadors

+= Sumar un número a una variable

–= Restar un número d’una variable

*= Multiplicar un número per una variable

/= Dividir una variable per un número

++ Sumar-li 1 a una variable

–– Restar-li 1 a una variable

.= Afegir una cadena a una variable

Per exemple, si $a=2:

$a+=3; $a val 5 $a++ $a val 3$a-=1; $a val 1 $a.=4; $a val 24

Page 30: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Arrays (matrius)Arrays (matrius)

#!/usr/bin/perl# matrices1.pl$base1=‘A’; # Esta es una mala solución$base2=‘C’;$base3=‘G’;

# Declarar una matriz@bases = (‘A’,‘C’,‘G’); # Esta es la solución

# por que puedo hacer este tipo de operaciones@old_bases = @bases; # Copia la matriz enteraprint “array de bases:\n”; # Muestra la matriz seguidaprint @bases . “\n”; # Muestra la matriz seguidaprint “@bases”; # Muestra la matriz con separaciones

array de bases:ACGA C G

• Es defineixen amb @nom

Page 31: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Operacions amb matriusOperacions amb matrius

#!/usr/bin/perl# matrices2.pl - operaciones con arrays@bases = (‘A’,‘C’,‘G’);

$tercera_base = $bases[2]; # OJO! Empieza por 0 (cero)

# añade T al final = $bases[3]

push @bases,‘T’;

# Elimina, y retorna, el último elemento

$ultima_base = pop @bases;

# Elimina, y retorna, el primer elemento

$primera = shift @bases;

# añade un elemento al principio = $bases[0]

unshift @bases,$primera;

Page 32: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Operacions amb matriusOperacions amb matrius

• Entorn (@ARGV)

• Bucles propis

#!/usr/bin/perl# entorno.pl – Llamada entorno.pl Holaprint $ARGV[0] . “\n”; # este el primer argumentoprint $0; # Corresponde al path y nombre del script

foreach $elemento (@bases){ print $elemento.”\n”;}

Page 33: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 2A– Exercici 2B– Exercici 2C– Exercici 2D– Exercici 2F

Page 34: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Hashes (matrius associatives)Hashes (matrius associatives)

• Són similars als arrays però:– Els elements tenen ‘nom’ (claus o keys)– Es defineix amb %nom

#!/usr/bin/perl# hash.pl - Declarar un hash%purinas = (‘A’=>‘Adenina’, ‘G’=>‘Guanina’);

# afegir elements després d’haber definit el hash%pirimidinas = ();$pirimidinas{‘C’}=‘Citosina’; $pirimidinas{‘T’}=‘Timina’;

# puedo hacer este tipo de operacionesprint “G es $purinas{‘G’}\n”; print %purinas.“\n”; # Valores e índices concatenados$queBase = 'T';print "$queBase es $pirimidinas{$queBase}\n";

Page 35: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Hashes (keys i values)Hashes (keys i values)

# (…) hashes-keys.pl# Recuperar las claves o los valores en una

matriz@claves = keys %bases;@Datos = values %bases;

print @claves."\n". "@Datos"."\n";

foreach $codigo (@claves) {print "$codigo es $bases{$codigo}\n";

}

C:\>perl hashes_keys.plATCGAdeninaTiminaCitosinaGuaninaA es AdeninaT es TiminaC es CitosinaG es GuaninaC:\>_

Page 36: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 2G

Page 37: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

SEQÜÈNCIES I CADENESSEQÜÈNCIES I CADENES

Page 38: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entradadades

Càlcul / Operacions

Sortida dades

Estructura bàsicaEstructura bàsica

Page 39: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entrada/Sortida des del teclatEntrada/Sortida des del teclat

• Entrada des de teclat:

• Exercici 1: editar i executar el programa anterior

• Exercici 2: editar i executar un programa que demani el nom d’usuari i llavors l’imprimeixi

#/usr/bin/perl# ES.pl

print "entra tu edad: ";

$edad = <STDIN>;

print "tu edad en años de perro es " . $edad/7 . "\n";

Page 40: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entrada/Sortida des del teclatEntrada/Sortida des del teclat

• Funcions que ens ajuden a realitzar tasques senzilles:

#/usr/bin/perl

print “Entra tu nombre: ”;

chomp ($name = <>);

print “Hola, $name, encantado de conocerte\n”;

#/usr/bin/perl# chomp.plprint “Entra tu nombre: ”;chomp ($nombre = <>); # <> equivale a <STDIN>print “Hola $nombre!, encantado de conocerte.\n”;

Page 41: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entrada/Sortida a arxiusEntrada/Sortida a arxius

• Per a llegir o escriure dades a arxius de text, és necessari l’ús de filehandles

open(FICHERO,'datos.txt');

– FICHERO : filehandle– ‘datos.txt’ : nombre del fichero

open(FICH_DATOS, 'c:\scripts\myfile.txt')open(FICH_DATOS, 'c:\scripts\myfile.txt');

Page 42: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Lectura d’arxiusLectura d’arxius

open MIFICHERO,’datos.txt’; @linea = <MIFICHERO>;

close MIFICHERO;

• Exercici: Llegir la següent seqüència proteica des d’un arxiu i imprimir-la en pantalla

#/usr/bin/perl# FileInArray.plopen(MIFICHERO, “datos.txt”); @array = <MIFICHERO>; # Cargamos fichero en matrizclose MIFICHERO;

  1 MNIDDKLEGL FLKCGGIDEM QSSRTMVVMG 30 31 GVSGQSTVSG ELQDSVLQDR SMPHQEILAA 60 61 DEVLQESEMR QQDMISHDEL MVHEETVKND 90 91 EEQMETHERL PQGLQYALNV PISVKQEITF 120121 TDVSEQLMRD KKQIR                 135

Page 43: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Escriptura a arxiusEscriptura a arxius

#/usr/bin/perl# EscrituraFicheros.pl

open FICHERO, ‘>data.txt’; # Crear para escribiropen FICHERO, ‘>>data.txt’; # ó añadir al final

print FICHERO $proteinSeq;

close FICHERO;

• Exercici: Modifica el programa anterior per escriure la seqüència proteica a un nou arxiu

Page 44: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

La instrucció “die”La instrucció “die”

• Si l’arxiu no existeix, mostra el missatge d’error i atura el programa

#/usr/bin/perl# FileOrDie.pl open (FICHERO, “EsteFicheroNoExiste.xxx") or

die "No encuentro el fichero";@lineas = <FICHERO>;close FICHERO;

Page 45: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

CONTROL DE FLUXECONTROL DE FLUXE

Page 46: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entradadades

Entradadades

Operació BOperació BOperació AOperació A

Condició?Condició?

CondicionsCondicions

no OKno OK

OKOK

CondicionsCondicions

Page 47: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Decisiones condicionales: ifDecisiones condicionales: if

#!/usr/bin/perl

print “dime tu edad: “;

$edad = <>;

if (($edad <=0) or ($edad >= 100))

{

print “error al leer la edad. \n”;

die “edad ridícula”;

}

print “tu edad en años de perro es” ,$edad/7,”\n”;

• Exercici: editar i executar el programa amb els valors –20, 30, hola

#!/usr/bin/perl# if1.plprint “dime tu edad: “;$edad = <STDIN>;if ($edad <=0){

print “error al leer la edad. \n”; die “edad ridícula”;}print “tu edad en años de perro es ” ,$edad/7,”\n”;

Page 48: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

OperadoresOperadores

• Comparadors numèrics:== igualtat $a == $b != desigualtat< menor > major<= menor o igual>= major o igual! not lògic

Page 49: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

OperadoresOperadores

• Comparadors per cadeneseq igualtat $a eq $b ne desigualtatlt menor (less than)

gt major (greather than)

le menor o igual (less or equal to)

ge major o igual (greather or equal to)

=~ pattern matching $a =~ /gattc/

El símbolo ~ se consigue pulsando AltGr+4

Page 50: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Atenció

a l’ordre al comparar cadenes:

0, 1, 2, 3, ..., 9, A, ..., Z, a, ..., z

if (“TGCA” lt “acgt”) tornarà VERTADER!!

Page 51: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

   

If – elseIf – else

#!/usr/bin/perl# if-else.plprint “entra tu edad: “;$edad = <>;if ( ($edad <= 0) or ($edad > 100) ){ print “error en la edad introducida.\n”;}else { print “tu edad en años de perro “,$edad/7,”\n”;}

printf “tu edad en años de perro es %0.2f \n”, $edad/7;

Per a mostrar valors amb format (ex. 2 decimals), utilitzem printf:

Page 52: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

   

If – elsif – elseIf – elsif – else

#!/usr/bin/perl# if-elsif.plprint “Entra tu edad: “;$edad = <>;if ( $edad <= 0 ) { print “eres muy joven para usar un

teclado”;} elsif ( $edad >= 100 ) { print “un perro no puede vivir tanto”;} else { print “tu edad es: “, $edad/7, “\n”;}

Page 53: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Entradadades

Entradadades

Operació BOperació BOperació AOperació A

Condició?Condició?

BuclesBucles

fals (no segueixo)fals (no segueixo)

vertadervertader(segueixo)(segueixo)

BuclesBucles

Page 54: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

• Exercici alternativa: until ($cont > 5)

Instrucció WhileInstrucció While

#!/usr/bin/perl# while.pl$cont = 1;while ($cont <= 5){ print “contador $cont\n”; $cont = $cont + 1;}

Page 55: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Instrucció While + arxiusInstrucció While + arxius

#!/usr/bin/perl# Whilefile.plopen(ARCHIVO, “llistat.txt”);while ($linea = <ARCHIVO>){

print $linea;} close(ARCHIVO);

(...)while (<ARCHIVO>){

print $_;} (...)

Page 56: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

EXPRESSIONS REGULARSEXPRESSIONS REGULARS

Page 57: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

#!/usr/bin/perl# patterns1.pl#...if ($dna =~/GATTC/) { print “EcoRI encontrado!”;}

$dna =~/GGG[GATC]CCC/; # GGG (luego G ó A ó T ó C) y CCC

$dna =~/GATTC|AAGCTT/; # EcoRI ó Hind III

Cerca de patrons (Pattern Matching)Cerca de patrons (Pattern Matching)

Page 58: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

MetacaràctersMetacaràcters

. Qualsevol caràcter excepte newline^ Principi de línia$ Final de línia\w Qualsevol caràcter alfanumèric\W Qualsevol caràcter no alfanumèric \s Qualsevol caràcter espaiador\S Qualsevol caràcter no espaiador\d Qualsevol dígit\D Qualsevol caràcter no dígit[…] Qualsevol dels caràcters de dins dels

claudàtors (també: [A-Z], [a-z], [0-9], [A-Za-z], [A-Z0-9], ...)

[^…] Qualsevol caràcter excepte els dels claudàtors

Page 59: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

QuantificadorsQuantificadors

? 0 o 1 coincidència+ 1 o més coincidències* 0 o més coincidències{N} N coincidències{N,M} Entre N i M coincidències{N, }N o més coincidències{ , M} M o menys coincidències

Page 60: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Exemples de patronsExemples de patrons

• Codi postal– $cp =~ /\d\d\d\d\d/;– $cp =~ /\d{5}/;– $cp_us =~ /\d{5}

(-\d{4})?/;

• Identificadors de seqüències com “M58200.2”– $idSecuencia =~

/\w+\.\d+/;

? 0 ó 1 elementos+ 1 ó más elementos* 0 ó más elementos{N,M} Entre N y M elementos{N, } N o más elementos{ , M} M o menos elementos

. Cualquier carácter excepto newline^ Principio de línea$ Final de línea\w Cualquier carácter alfanumérico\W Cualquier carácter no-alfanum. \s Cualquier carácter espaciador\S Cualquier carácter no-espaciador\d Cualquier dígito\D Carácter no dígito

Caràcters que cal “escapar”:\$ \[\| \]\* \\\^ \/

Page 61: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Extracció de patronsExtracció de patrons

•Seqüències en FASTA:

>M18580 Clone 305A4, complete sequence

acgtagctactgacatcgacatcatctacatcatatca

gactacgtcagtcagcagctacgactacgacactagca

tgagcagctagcatctacgactactagccagcagacgt

Extraiem l’id (M18580) i la descripció:

/^>(\S+)\s*(.*)$/

$id = $1;

$descripcion = $2;

? 0 ó 1 elementos+ 1 ó más elementos* 0 ó más elementos{N,M} Entre N y M elementos{N, } N o más elementos{ , M} M o menos elementos

. Cualquier carácter excepto newline^ Principio de línea$ Final de línea\w Cualquier carácter alfanumérico\W Cualquier carácter no-alfanum. \s Cualquier carácter espaciador\S Cualquier carácter no-espaciador\d Cualquier dígito\D Carácter no dígito

Caràcters que cal “escapar”:\$ \[\| \]\* \\\^ \/

Page 62: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

• Llegir una seqüència de DNA d’un arxiu• Imprimir la seqüència per pantalla

Ajuda: utilitza . per concatenar les diferents línies

• Comptar la freqüència d’aparició de cada base (A, G, C, T) Ajuda: utilitza un bucle while() per cada base:

while ($seq =~ /a/g) { $a++; }

Seqüència de DNA:

ExerciciExercici

agtactactcatgcacagctactcagtagctagctacgactacgtgactagcctacgtccagactgactagcacgtagacgactacgtagactagcacagcatgtaagatctactgacaaaaaaaaatgacatgactacgtgcgtgctgctgctga

Page 63: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExerciciExercici

#!/usr/bin/perl# countBases.pl

$sequencia=''; $a=0; $c=0; $g=0; $t=0;open(ARXIU, "sequencia.txt");while ($linia = <ARXIU>){

chomp $linia;$sequencia .= $linia;

} close(ARXIU);print $sequencia,"\n\n";

while ($sequencia =~ /a/g){

$a++;}while ($sequencia =~ /c/g){

$c++;}while ($sequencia =~ /g/g){

$g++;}while ($sequencia =~ /t/g){

$t++;}print $a , " adenines\n";print $c , " citosines\n";print $g , " guanines\n";print $t , " timines\n";

Page 64: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Substituir cadenesSubstituir cadenes

• Operador “s”:$RNA =~ s/T/U/g;

s: operador substituirT: patró a substituirU: text que reemplaçarà el patróg: modificador global

Page 65: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Traduir cadenesTraduir cadenes

• Operador “tr”:$RNA =~ tr/GATC/CTAG/;

tr: operador traduirCanviarà cada caràcter de l’esquerra pels de la dreta, per ordre:

G C T AA T C G

Page 66: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

4 funcions útils4 funcions útils

• length: contar la longitud d’una cadena$cadena = ‘ACTTGGAG’;$longCadena = length $cadena;$longCadena és 8 !!!

• reverse: invertir l’ordre d’un cadena o matriu$cadena = ‘ACTTGGAG’;$invertida = reverse $cadena;$invertida és GAGGTTCA !!!

• split: transformar cadenes en matrius$cadena = ‘joan,pere,miquel,roger’;@noms = split /,/, $cadena; # // conté el patró per on tallar # separarà cada caràcter si // està buit@noms és (‘joan’, ‘pere’, ‘miquel’, ‘roger’) !!!

• join: transformar matrius en cadenes@noms = (‘joan’, ‘pere’, ‘miquel’, ‘roger’);$cadena = join /--/, @noms;$cadena és joan--pere--miquel--roger !!!

Page 67: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 1C– Exercici 1D– Exercici 2H– Exercici 3A– Exercici 4A– Exercici 4B

Page 68: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

SUBRUTINESSUBRUTINES

Page 69: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

SubrutinesSubrutines

• Eviten repetir codi a diferents parts del programa o a diferents programes– Es poden guardar en arxius

independents

– Aquests arxius independents tenen l’extensió .pm (perl module)

– L’última línia de l’arxiu ha de ser:

1;

Page 70: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

#!/usr/bin/perl# subrutinas.plprint "\nresultado: ", suma(2,6), "\n";

sub suma{$valor1 = $_[0];$valor2 = $_[1];return $valor1 + $valor2;

}

#!/usr/bin/perl# minilib.pmsub suma{

$valor1 = $_[0];$valor2 = $_[1];return $valor1 + $valor2;

}1;

#!/usr/bin/perl# principal.pl

use minilib;

print "\nresultado: ”;print suma(2,6);print "\n";

En un sol arxiu .pl

En dos arxius (.pl i .pm)

Page 71: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

PackagesPackages

#!/usr/bin/perl# miniAN_cliente.pluse ADN; use ARN;

$cadena = “AGC”;$comp = complementa($cadena); # equival

main::complementaprint ADN::complementa($cadena); # :: o bé ->print ARN::complementa($cadena); # :: o bé ->

#!/usr/bin/perlPackage ARN;sub complementa{#(...)}1;

#!/usr/bin/perlPackage ADN;sub complementa{#(...)}1;

Page 72: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 5C

Page 73: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

MÒDULSMÒDULS

Page 74: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Mòduls PerlMòduls Perl

• Scripts o programes que fan operacions útils i que poden incorporar-se fàcilment al nostre codi

• La funció PPM (Perl Package Manager) d’Active Perl permet la instal·lació automàtica de mòduls

• Exemples:

– LWP: Mòdul d’accés a pàgines web; permet copiar el contingut de pàgines web (codi font) a partir de la URL

– DBI: Mòdul d’accés a bases de dades (ex. MS Access, MySQL, …); permet consultar informació, afegir-la, modificar-la, …

– CGI: Recollida de variables des de formularis web

– BioPerl: Mòduls útils per a la bioinformàtica

Page 75: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Instal·lació de mòdulsInstal·lació de mòduls

Page 76: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

LWPLWP

#!/usr/bin/perl –w# modulo-LWP.pl

use LWP::Simple;

# Formular la URL apropiada $url = "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?

txt=on&list_uids=2779343&db=nucleotide&view=fasta";

# Obtener los contenidos desde la web $content = get $url;print $content;

WEBPAGE

(codi font) Perl Script

= SCREEN SCRAPING

Page 77: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Altres mòduls bàsics de PerlAltres mòduls bàsics de Perl

Database (MS Access,

MySQL, Oracle, …)Perl Script

Altres coneixements

necessaris: llenguatge SQL

DBI

Formulari WEB

Perl Script

Cal tenir instal·lat un servidor (IIS,

Apache, …)

CGI

Generar gràfics en diferents

formatsPerl Script

GD

Page 78: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Altres mòduls de PerlAltres mòduls de Perl

Perl Script

Mail::Sendmail

Tk

Interfícies gràfiques per als teus

programes Perl

Perl Script

Page 79: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

BioPerlBioPerl

• Col·lecció de mòduls Perl:

– Manipular seqüències

– Accés a algunes bases de dades moleculars (GenBank, PDB)

– Executar programes habituals (Blast, ClustalW) i recuperar-ne els resultats

• Orientat a Objectes:

– Objectes bàsics: seqüències, estructures, …

Page 80: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Un exempleUn exemple

#!/usr/bin/perl# bioperl-ejemplo.pl# Realizar distintas operaciones en una secuenciause Bio::Seq; # indicamos el módulo a utilizar

my $seq = Bio::Seq->new( -seq => 'ATGGGGGTGGTGGTACCCT', -id => 'human_id', -accession_number => 'AL000012', ); # creamos un objeto con datos

print $seq->seq() . “\n”; # muestra la secuenciaprint $seq->revcom->seq() . “\n”;# inversa complementariaprint $seq->alphabet() . “\n”; # ‘dna’,‘rna’,‘protein’print $seq->translate->seq() . “\n”; # trad. a proteina

ATGGGGGTGGTGGTACCCTAGGGTACCACCACCCCCATdnaMGVVVP

Page 81: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Ejemplo SeqStatsEjemplo SeqStats

# (...)

use Bio::Tools::SeqStats;

$seq_stats = Bio::Tools::SeqStats->new(-seq=>$seq);

$hash_ref = $seq_stats->count_monomers();

foreach $base (sort keys %$hash_ref) { print "Numero de bases ", $base, "= ",

%$hash_ref->{$base},"\n";}

Numero de Bases A= 2Numero de Bases C= 3Numero de Bases G= 9Numero de Bases T= 5

Page 82: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Acceso a bases de datos remotasAcceso a bases de datos remotas

• El package DB permet recuperar seqüències de diferents bases de dades (genbank, genpept, RefSeq, swissprot, EMBL, AceDB, GDB)

use Bio::DB::GenBank;

$gb = new Bio::DB::GenBank();

$seq1 = $gb->get_Seq_by_acc('AF303112');

print ">AF303112\n" , $seq1->seq() , "\n\n";

Page 83: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Alguns mòduls de BioPerlAlguns mòduls de BioPerl

Bio :: Seq Sequence object, with features

Bio :: SimpleAlign Multiple alignments held as a set of sequences

Bio :: DB :: GenBank Database object interface to GenBank

Bio :: DB :: NCBIHelper A collection of routines for queries to NCBI DDBB

Bio :: DB :: SwissProt Database object interface to SWISS-PROT retrieval

Bio :: Tools :: Blast Bioperl BLAST sequence analysis object

Bio :: Tools :: BPlite Lightweight BLAST parser

Bio :: Tools :: SeqPattern Bioperl object for a sequence pattern or motif

Bio :: Tools :: SeqStats Object holding statistics for one particular sequence

Bio :: Tools :: Blast :: Run :: StandAloneBlast Bioperl module for running BLAST analyses locally

Bio :: Tools :: Blast :: Run :: RemoteBlast Bioperl module for running BLAST through HTTP

Bio::Tools::Run::Alignment::Clustalw Bioperl module for running ClustalW analyses locally

Bio :: Tools :: Prediction :: Exon Predicted exon feature

Bio :: Tools :: Prediction :: Gene Predicted gene structure feature

Bio :: SeqIO Format conversion of sequences

Bio :: AlignIO Format conversion of alignments

Bio :: Structure :: IO Structure objects of PDB

Browse all modules at http://www.bioperl.org/wiki/Category:Modules

Page 84: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 10A– Exercici 10B– Exercici 10C (però utilitzant RemoteBlast)

– Exercici 10D

Page 85: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

EXEMPLE INTEGRADOREXEMPLE INTEGRADOR

Page 86: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

ExercicisExercicis

Curso de Perl (10 ejercicios) http://bioinformatica.uab.cat/bioinfouab/Resources/CursoPerl/CursoPerl.asp

– Exercici 7A– Exercici 7B– Exercici 7C– Exercici 8A

Page 87: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

COM SEGUIR AVANÇANT?COM SEGUIR AVANÇANT?

Page 88: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

Perl web site

http://www.perl.com

Bioperl

http://www.bioperl.org

CPAN: Comprehensive Perl Archive Network

http://www.cpan.org/

FAQs Frequently Asked Questions

http://www.perl.com/pub/q/faqs

Beginners

http://learn.perl.org

Manuales Online

http://www.perl.com/pub/v/documentation

Recursos de PerlRecursos de Perl

Page 89: Perl 17 i 18/des/2007 Programació en Perl: aplicacions bioinformàtiques Universitat de Girona.

Perl 17 i 18/des/2007

O'Reilly

Llibres de PerlLlibres de Perl