Seminari 10
Perl III
-Vectors i processament de múltiples línies en Perl-

Bioinformàtica - 1er trimestre curs 2012/2013 - UPF

Vectors

un vector és en Perl una variable plural que ens permet emmagatzemar un o mes valors. Aquests valors els podrem manipular indicant la posició que ocupen al vector. Ens referirem a un variable vector com a pluralitat escrivint el símbol de l'arroba @ al davant del nom de la variable vector, per exemple quan la declarem:

my @v;
o quan mostrem tots els seus valors:

print "@v\n";
mentre que escriurem el símbol del dòlar $ al davant de la variable vector quan ens referim a un dels seus elements, com ara, quan hi assignem un valor:

$v[0] = 10;
$v[1] = "hola";
o quan mostrem un valor d'una posició determinada:

print "$v[0]\n";

Com assignar valors a un vector. Es poden assignar valors als elements d'un vector mitjançant assignacions com les anteriors, o be una assignació amb tots els valors al mateix temps:

@v = ('A','G','G','T','C','A');
o be desagregant els símbols d'un texte emmagatzemat en una variable singular de la següent forma:

$x = <STDIN>;
chomp($x);
@v = split(//,$x);

Com calcular la longitut d'un vector. Per esbrinar el nombre d'elements d'un vector farem anar una funció anomenada scalar de la següent forma:

$l = scalar(@v);

feu un programa en Perl que llegeix una paraula que li escrivim pel teclat i ens mostra una a una les lletres de la paraula indicant la seva posició, com ara, si escrivim la paraula tronc, ens hauria de dir:

la 1a lletra es la t
la 2a lletra es la r
la 3a lletra es la o
la 4a lletra es la n
la 5a lletra es la c


recordeu que els operadors de comparació de símbols (comparació alfabètica) són diferents dels operadors de comparació aritmètics.


Comparació Numèrica Alfabètica
Igual $==$ eq
No igual $!=$ ne
Més petit que $<$ lt
Més gran que $>$ gt
Més petit o igual que $<=$ le
Més gran o igual que $>=$ ge


Calcular el complementari d'una cadena d'ADN

feu un programa que donada una seqüència d'ADN ens mostri per pantalla la seva seqüència complementària (A-T,G-C). Recordeu que les cadenes d'ADN s'escriuen de 5' a 3'. Per exemple, per la cadena d'ADN ACGTACGT el programa ens ha de mostrar com a resultat la mateixa cadena, i per la cadena d'ADN AAAATTTTCCCCGGGG, el programa ens ha de mostrar com a resultat CCCCGGGGAAAATTTT.

Llegir varies linies mitjançant una composició iterativa

Enregistreu el següent programa en Perl sota el nom linies.pl:

#!/usr/bin/perl -w

use strict;

my $i=0;

while (<STDIN>) {

  $i = $i + 1;

}

print "hi ha $i linies\n";

i un cop li heu donat permissos d'execució, executeu-lo, escriviu varies linies, i quan vulgueu parar d'escriure premeu la tecla de control i la lletra 'd'. Seguidament, crideu-lo de la següent forma:

./linies.pl < linies.pl

l'operador de redireccionament del shell '<' envia el contingut del fitxer a la dreta de l'operador com a entrada pel teclat del fitxer de l'esquerra de l'operador. Finalment, afegiu la següent línia dins la composició iterativa, i torneu a executar-lo com heu fet abans:

  print $_;

quin és el contingut a cada moment de la variable $_ ?

Calcular el contingut G+C d'una sequencia en un fitxer FASTA

enregistreu el fitxer del seguent enllaç i feu un programa en Perl que, mitjançant una composició iterativa que llegeix linies, calculi la proporció de contingut G+C a cada linia del fitxer de la sequencia. Cal evitar fer el càlcul i mostrar aquesta proporció quan no hi ha cap nucleòtid G ó C a la línia. El resultat hauria de ser aquest:

1
0.5
0.58
0.44
0.4
0.46
0.34
0.32
0.3
0.36
0.3
0.54
0.3
0.52
0.46
0.42
0.3
0.62
0.48
0.48
0.5
0.38
0.46
0.44
0.32
0.34
0.42

on fixeu-vos que la primera linia del resultat es el valor 1 (proporcio del 100%) a causa de la primera línia del fitxer FASTA. En qualsevol cas, ara mateix aquest petit error no ens és important.

Un cop aquest programa us funciona correctament, feu aquest mateix càlcul per als cromosomes 22 i 2L d'humà i mosca (Drosophila Melanogaster), respectivament, els fitxers dels quals els indiquem al seu costat:

Organisme        Cromosoma    Fitxer
===============================================================================================
H.sapiens        22           /cursos/BI/genomes/H.sapiens/golden_path_200405hg17/chromFa/chr22.fa
D.melanogaster   2L           /cursos/BI/genomes/D.melanogaster/golden_path_200404dm2/chromFa/chr2L.fa

cal que enregistreu tots dos resultats en fitxers differents que es diguin hsap.gc.chr22.dat (humà) i dmel.gc.chr2L.dat (mosca), donat que els farem anar a continuació.


un cop heu enregistrat aquests dos fitxers, ara es tracta de comparar els continguts en G+C dels dos organismes. Per tal de poder-ho fer fàcilment, farem anar un paquet estadístic que es diu R. Per poder utilitzar el R, primer haureu de copiar i enganxar la següent comanda en el shell del Unix:

$ export PATH=/cursos/BI/soft/R/release/bin:$PATH

A continuació podeu executar R cridant-lo des del shell de la següent forma (feu-ho des del mateix directori on teniu els fitxers que heu fet abans *.dat):

$ R

us apareixerà un missatge informatiu sobre el R, i una mena de shell ambel símbol '>'. Ara feu els següents passos:

finalment, ara ja podeu sortir del R ficant la següent ordre:

> q()

i a la seguent pregunta:

Save workspace image? [y/n/c]:

li responeu 'n' (no). Ara ja podem comparar les differents distribucions de G+C mostrant les imatges a la pantalla amb el programa eog, cridant-lo de la següent forma des del shell:

$ eog hsap.gc.chr22.jpg dmel.gc.chr2L.jpg &
podeu apreciar diferències en el contingut G+C entre humà i mosca?



compareu el resultat obtingut respecte al G+C humà amb el que trobeu sobre aquest tema a l'article del genoma huma (busqueu la Figura 12 i el seu texte relacionat):

International Human Genome Sequencing Consortium
Initial sequencing and analysis of the human genome
Nature 409, 860-921 (15 February 2001)