#!/usr/bin/perl
#
# Conversión de secuencias de ADN a proteínas,
# mostrando los seis marcos de lecturas posibles.
#
# Joaquín Ferrero. 20100818.
#
# Entradas
# Ninguna. El programa solicita el nombre del fichero con las secuencias
# genómicas a traducir.
# Salidas
# Se crea un fichero con el mismo nombre que el fichero indicado, con la
# extensión añadida '.c6'.
#
use common::sense; # activamos Perl Moderno
### Definición de las proteínas ###############################################
my %aminoácidos1 = (
UUU => 'F', CUU => 'L', AUU => 'I', GUU => 'V',
UUC => 'F', CUC => 'L', AUC => 'I', GUC => 'V',
UUA => 'L', CUA => 'L', AUA => 'I', GUA => 'V',
UUG => 'L', CUG => 'L', AUG => 'M', GUG => 'V',
UCU => 'S', CCU => 'P', ACU => 'T', GCU => 'A',
UCC => 'S', CCC => 'P', ACC => 'T', GCC => 'A',
UCA => 'S', CCA => 'P', ACA => 'T', GCA => 'A',
UCG => 'S', CCG => 'P', ACG => 'T', GCG => 'A',
UAU => 'Y', CAU => 'H', AAU => 'N', GAU => 'D',
UAC => 'Y', CAC => 'H', AAC => 'N', GAC => 'D',
UAA => '*', CAA => 'Q', AAA => 'K', GAA => 'E',
UAG => '*', CAG => 'Q', AAG => 'K', GAG => 'E',
UGU => 'C', CGU => 'R', AGU => 'S', GGU => 'G',
UGC => 'C', CGC => 'R', AGC => 'S', GGC => 'G',
UGA => '*', CGA => 'R', AGA => 'R', GGA => 'G',
UGG => 'W', CGG => 'R', AGG => 'R', GGG => 'G',
);
my %aminoácidos3 = (
UUU => 'Phe', CUU => 'Leu', AUU => 'Ile', GUU => 'Val',
UUC => 'Phe', CUC => 'Leu', AUC => 'Ile', GUC => 'Val',
UUA => 'Leu', CUA => 'Leu', AUA => 'Ile', GUA => 'Val',
UUG => 'Leu', CUG => 'Leu', AUG => 'Met', GUG => 'Val',
UCU => 'Ser', CCU => 'Pro', ACU => 'Thr', GCU => 'Ala',
UCC => 'Ser', CCC => 'Pro', ACC => 'Thr', GCC => 'Ala',
UCA => 'Ser', CCA => 'Pro', ACA => 'Thr', GCA => 'Ala',
UCG => 'Ser', CCG => 'Pro', ACG => 'Thr', GCG => 'Ala',
UAU => 'Tyr', CAU => 'His', AAU => 'Asn', GAU => 'Asp',
UAC => 'Tyr', CAC => 'His', AAC => 'Asn', GAC => 'Asp',
UAA => '***', CAA => 'Gln', AAA => 'Lys', GAA => 'Glu',
UAG => '***', CAG => 'Gln', AAG => 'Lys', GAG => 'Glu',
UGU => 'Cys', CGU => 'Arg', AGU => 'Ser', GGU => 'Gly',
UGC => 'Cys', CGC => 'Arg', AGC => 'Ser', GGC => 'Gly',
UGA => '***', CGA => 'Arg', AGA => 'Arg', GGA => 'Gly',
UGG => 'Trp', CGG => 'Arg', AGG => 'Arg', GGG => 'Gly',
);
### Introducción del nombre del fichero a traducir ############################
print 'Entre el nombre del fichero a procesar: ';
my $FICHERO_ADN = <STDIN>;
chomp $FICHERO_ADN;
-f $FICHERO_ADN
or die "ERROR: No puedo acceder al fichero $FICHERO_ADN: $!\n";
### Apertura de ficheros ######################################################
open my $ENTRADA, q[<], $FICHERO_ADN
or die "ERROR: No puedo leer el fichero $FICHERO_ADN: $!\n";
open my $SALIDA, q[>], "$FICHERO_ADN.c6"
or die "ERROR: No puedo escribir el fichero $FICHERO_ADN.c6: $!\n";
### Lectura y procesado #######################################################
while (my $secuencia = <$ENTRADA>) {
chomp $secuencia;
# $secuencia = uc $secuencia;
$secuencia =~ tr/T/U/;
proteínas($secuencia);
$secuencia = reverse $secuencia;
proteínas($secuencia);
print $SALIDA "\n";
}
### Cierre de fichero #########################################################
close $ENTRADA;
close $SALIDA;
### Fin #######################################################################
say 'Terminado';
### Subrutinas ################################################################
sub proteínas {
my $secuencia = shift;
say $SALIDA $secuencia;
for my $offset ( 0 .. 2 ) {
my $secuencia_aminoácidos;
my $secuencia_aminoácidos_single;
my $seq = substr $secuencia, $offset;
while ($seq =~ m/(...)/g) { # por cada codón
$secuencia_aminoácidos .= $aminoácidos3{ $1 }; # lo traducimos
$secuencia_aminoácidos_single .= $aminoácidos1{ $1 } . ' ';
}
say $SALIDA q[ ] x $offset . $secuencia_aminoácidos;
say $SALIDA q[ ] x $offset . $secuencia_aminoácidos_single;
}
print $SALIDA "\n";
}
__END__