#!/usr/bin/perl -w

# Ejercicio 8. Abre el fichero dna1.txt, lee la cadena de ADN,

# extrae codones y lo convierte en aminoacidos.

 

 

open (CADENA_DNA, "dna1.txt") or die "No se puede abrir el fichero dna1.txt\n";

$cadena_unida= '';

 

# Lee el fichero

@texto = <CADENA_DNA>;

 

$cadena_proteina = '';

close (CADENA_DNA);

 

# Leemos las lineas del fichero a partir de la sexta.

# Dividimos cada linea en palabras y eliminamos la 1ª que contiene sólo números.

# Unimos cada una de estas palabras para formar unacadena con todas las bases.

#

 

for ($i = 5; $i<scalar @texto; $i++) {

      @palabras = split(' ',$texto[$i]);

     

      # El indice $j empieza a contar en 1 porque $palabra[0] contendrá numeros

      # que no nos interesan.

      for ($j = 1; $j < scalar @palabras; $j++) {   

            $cadena_unida = $cadena_unida.$palabras[$j];

            }

      }

 

 

# Cuenta de cada una de las bases

#________________________________

@dna =();

@dna = split ('', $cadena_unida);

$cont_A = 0;

$cont_C = 0;

$cont_T = 0;

$cont_G = 0;

$base ='';

foreach $base (@dna) {

      if ($base eq 'a') {$cont_A++;}

      elsif ($base eq 'c') {$cont_C++;}

      elsif ($base eq 't') {$cont_T++;}

      else {$cont_G++;}

}

print "Hay $cont_A As \n";

print "Hay $cont_C Cs \n";

print "Hay $cont_G Gs \n";

print "Hay $cont_T Ts \n";

#________________________________

 

 

# Conversión  de codones en aminoácidos

#________________________________

# Leemos la cadena $cadena_unida, extrayendo los codones mediante la función substr

# que permite extraer trozos de una cadena, del tamaño que queramos, y a partir de la

# posición que queramos.

 

for ($i=0; $i < (length($cadena_unida)-2); $i += 3) {

      $codon = substr($cadena_unida,$i,3);

      $cadena_proteina = $cadena_proteina.codon2aa($codon);

      }

print "La cadena de proteinas es: \n $cadena_proteina \n";

#________________________________

 

 

# Guardarlo en el fichero amino.txt

#________________________________

 

open(AMINO, ">amino.txt");

print AMINO $cadena_proteina;

close (AMINO);

#________________________________

 

# Cuenta de cada uno de los aminoácidos

#________________________________

# Dividimos la cadena de proteinas en sus letras componentes.

 

@proteina = split ('', $cadena_proteina);

 

# Vamos a crear un array asociativo llamado %prot, que inicialmente estará vacío

# y que iremos llenando usando como clave el nombre del aminoacido y

# como valor el número de veces que aparece.

 

%prot = ();

 

for ($i=0; $i < scalar @proteina; $i++) {

      if (exists($prot{$proteina[$i]})) {

            $prot{$proteina[$i]}++;

            }

      else {

            $prot{$proteina[$i]} = 1;

            }

      }

 

# Vamos a imprimir los resultados

 

foreach $clav (keys %prot)

      {

      print "Hay $prot{$clav} de tipo $clav\n";

      }

 

 

# Solicita al usuario unporcentaje e imprime los nombres de los aminoacidos por encima

# de ese porcentaje.

 

print "\n\n\n Introduce un numero entre 0 y 100:\n";

$porcentaje = <STDIN>;

chomp $porcentaje;

 

# $total guarda el numero total de aminoacidos en la cadena

$total = $#proteina;

 

foreach $clav (keys %prot)

      {

      $porc = (100*$prot{$clav})/$total;

     

      if ($porc > $porcentaje) {

            print "\n La $clav supera el porcentaje del $porcentaje %";

            }

      }

 

 

#________________________________

#

# codon2aa Subrutina tomada del libro "Beginning PERL for bioinformatics", J. Tisdall.

#

# A subroutine to translate a DNA 3-character codon to an amino acid

#   Version 3, using hash lookup

 

sub codon2aa {

    my($codon) = @_;

 

    $codon = uc $codon;

 

    my(%genetic_code) = (

   

    'TCA' => 'S',    # Serine

    'TCC' => 'S',    # Serine

    'TCG' => 'S',    # Serine

    'TCT' => 'S',    # Serine

    'TTC' => 'F',    # Phenylalanine

    'TTT' => 'F',    # Phenylalanine

    '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

    );

 

    if(exists $genetic_code{$codon}) {

        return $genetic_code{$codon};

    }else{

 

            print STDERR "Bad codon \"$codon\"!!\n";

            exit;

    }

}

 

 

 

 

exit;