Logo IIB spacio
nombre
spacio

spacio

TECNOLOGIAS DE LA INFORMACION

 

 

 

 

 

espacio

 

 

 

Práctica 2

spacer

spacer

En la segunda semana de prácticas vamos a realizar las funcionalidades que se hicieron para la primera práctica, pero utilizando expresiones regulares, hashes (listas indexadas por literales) y una sintaxis más propia de Perl.

Además, en lugar de hacer las funciones en modo interactivo, se van a hacer como distintos filtros.

Los filtros a realizar son los siguientes:

  • dna2cdna.pl - La secuencia que le damos a la entrada la pasa a su dna complementario a la salida.
  • dna2rna.pl - Pasa la secuencia a rna.
  • dna2prot.pl - Pasa la secuencia de bases a secuencia de aminoacidos.
  • basecont.pl - Cuenta las bases del dna.
Todos parten de la siguiente filtro que no hace nada (un echo):

echo.pl
#!/usr/bin/perl

while (<>) {
   print;
}

El resto los tienen que hacer los alumnos en función de las modificaciones que se les pasó para las funciones de la práctica anterior utilizando expresiones regulares y demás herramientas propias del Perl.

dna2rna.pl
#!/usr/bin/perl

while (<>) {
   tr/ATCGatcg/TAGCtagc/;
   print;
}

dna2cdna.pl
#!/usr/bin/perl

while (<>) {
   tr/Tt/Uu/;
   print;
}

basecont.pl
#!/usr/bin/perl

my $dna;

while (<>) {
  chomp;
  $dna.=$_;
}

my %nbases=cont_dna($dna);

print <<"EOTXT";
Numero de A: $nbases{A}
Numero de T: $nbases{T}
Numero de G: $nbases{G}
Numero de C: $nbases{C}
EOTXT

sub cont_dna {
  my ($dna) = @_;
  my %nb;

  %nb{A}=($dna=~tr/Aa//);
  %nb{T}=($dna=~tr/Tt//);
  %nb{G}=($dna=~tr/Gg//);
  %nb{C}=($dna=~tr/Cc//);

  return %nb;
}

dna2prot.pl
#!/usr/bin/perl

my %codon2a = (
   'TCA' => 'S',     # Serine 
   'TCC' => 'S',     # Serine 
   'TCG' => 'S',     # Serine 
   'TCT' => 'S',     # Serine 
   'TTC' => 'F',     # Phenilalanine
   'TTT' => 'F',     # Phenilalanine
   'TTA' => 'L',     # Leucine
   'TTG' => 'L',     # Leucine
   'TAC' => 'Y',     # Tyrosine
   'TAT' => 'Y',     # Tyrosine
   'TAA' => '_',     # STOP
   'TAG' => '_',     # STOP
   'TGC' => 'C',     # Cysteine
   'TGT' => 'C',     # Cysteine
   'TGA' => '_',     # STOP
   'TGG' => 'W',     # Tryptophan
   'CTA' => 'L',     # Leucine
   'CTC' => 'L',     # Leucine
   'CTG' => 'L',     # Leucine
   'CTT' => 'L',     # Leucine
   'CCA' => 'P',     # Proline
   'CCC' => 'P',     # Proline
   'CCG' => 'P',     # Proline
   'CCT' => 'P',     # Proline
   'CAC' => 'H',     # Histidine
   'CAT' => 'H',     # Histidine
   'CAA' => 'Q',     # Glutamine
   'CAG' => 'Q',     # Glutamine
   'CGA' => 'R',     # Arginine
   'CGC' => 'R',     # Arginine
   'CGG' => 'R',     # Arginine
   'CGT' => 'R',     # Arginine
   'ATA' => 'I',     # Isoleucine
   'ATC' => 'I',     # Isoleucine
   'ATT' => 'I',     # Isoleucine
   'ATG' => 'M',     # Methionine
   'ACA' => 'T',     # Threonine
   'ACC' => 'T',     # Threonine
   'ACG' => 'T',     # Threonine
   'ACT' => 'T',     # Threonine
   'AAC' => 'N',     # Asparagine
   'AAT' => 'N',     # Asparagine
   'AAA' => 'K',     # Lysine
   'AAG' => 'K',     # Lysine
   'AGC' => 'S',     # Serine
   'AGT' => 'S',     # Serine
   'AGA' => 'R',     # Arginine
   'AGG' => 'R',     # Arginine
   'GTA' => 'V',     # Valine
   'GTC' => 'V',     # Valine
   'GTG' => 'V',     # Valine
   'GTT' => 'V',     # Valine
   'GCA' => 'A',     # Alanine
   'GCC' => 'A',     # Alanine
   'GCG' => 'A',     # Alanine
   'GCT' => 'A',     # Alanine
   'GAC' => 'D',     # Aspartic Acid
   'GAT' => 'D',     # Aspartic Acid
   'GAA' => 'E',     # Glutamic Acid
   'GAG' => 'E',     # Glutamic Acid
   'GGA' => 'G',     # Glycine
   'GGC' => 'G',     # Glycine
   'GGG' => 'G',     # Glycine
   'GGT' => 'G'      # Glycine
);

my $dna;

while (<>) {
  chomp;         # Quita retorno de carro final
  s/ //;         # Elimina posibles espacios
  $_=uc;         # Pasa a mayusculas
  $dna.=$_;
}

my $prot;

while ($dna=~s/([ATCG]{3})//) {
  $prot.=$codon2a{$1}?$codon2a{$1}:'*';
}

## otra forma más intuitiva de hacerlo sería:
# for (my $cont=0; substr($dna,$cont,3); $cont+=3) {
#   $prot.=$codon2a{substr($dna,$cont,3)};
# }

print $prot;

Notar que estos 'filtros' suponen que las secuencias se les pasan 'puras'. Quiero decir, que son cadenas de bases A, T, G y C sin más.

El módulo que se proporciona en la tercera práctica si contempla que se le puedan meter secuencias con formatos (por ejemplo con un número que indique la posición de la base). De este modo se ven expresiones regulares más complejas.

 

 

 

 

spacio
spacio
spacio

 

Ultima modificación: 30 de Enero de 2003
Instituto de Investigaciones Biomédicas "Alberto Sols"
C/Arturo Duperier 4. 28029 Madrid. (Spain)
Tel +(34) 91 585 4400 // Fax +(34) 91 585 4401
sobre Email:Servicio de BioInformatica