• Publicidad

Número mínimo de apariciones

Perl aplicado a la bioinformática

Número mínimo de apariciones

Notapor angelluigi » 2016-12-28 17:24 @766

Buenas a todos.

Tengo una duda y es que me ha comentado mi profesor que en la subrutina del aminoacido_minoritario() él cree que puede conllevar a una confusión que para calcularlo usa el valor de num_max_apariciones que obtengo en la subrutina anterior, y me ha dicho que lo modifique para que en el caso de que aparezca más de un aminoácido mayoritario imprima por pantalla el primero y el último y no lo entiendo muy bien.

Muchas gracias y siento ser tan pesado.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Codones; #subrutina que he creado en otro archivo
  2.  
  3. print "Escriba el nombre del fichero que contiene la  secuencia ADN:";
  4. $DNA_filename= <STDIN>;
  5. chomp $DNA_filename;
  6. unless ( open(DNAFILE, $DNA_filename) ) {print "No se puede abrir el fichero\"$DNA_filename\"\n\n";
  7. exit;}
  8. @DNA = <DNAFILE>;  #guardamos el archivo como un array
  9. close DNAFILE;
  10. $DNA = join('', @DNA);  
  11. $DNA =~ s/\s//g; #sustituimos los espacios en blanco por nada
  12. $RNA =$DNA; # Generamos una nueva varible RNA en la que guardamos el contenido del DNA
  13. $RNA =~ s/T/U/g;
  14. print $DNA;
  15.  
  16.  
  17. $protein=''; # Generamos una cadena vacía donde vamos añadiendo los aminoácidos generados
  18.  
  19.  
  20. for($i=0; $i < (length($RNA) -2) ; $i += 3) {
  21.         $codon = substr($RNA,$i,3);   #Extrae un aminoácido cada vez que recorra
  22.         $protein .= Aminoacido_CodonADN($codon);
  23. }
  24.  
  25. @protein = split('', $protein);
  26. $protein = join(',',@protein);
  27.  
  28. print "Traducción de la secuencia de DNA a proteína:\n",$protein,,"\n";
  29. print "El signo (-) significa codón stop \n\n";
  30. #######Aminoacido mayoritario###########
  31.  
  32. $protein = join('',@protein);
  33.  
  34. sub aminoacido_mayoritario{($protein)=@_;
  35.         %tabla =();
  36.         $num_max_apariciones =0;
  37.         @resultado =();
  38.        
  39.        
  40.         for(my $i=0;$i<(length $protein);$i++){
  41.                 $aminoacido = substr ($protein,$i,1);
  42.                 if (exists $tabla{$aminoacido}) {
  43.                         $tabla{$aminoacido} = $tabla{$aminoacido} +1;
  44.                 }
  45.                 else {$tabla{$aminoacido} =1
  46.                 }
  47.         }
  48.         foreach $contador(values%tabla){
  49.                 if($contador > $num_max_apariciones){$num_max_apariciones =$contador;}
  50.                
  51.         }
  52.         foreach $aminoacido(keys%tabla){
  53.                 if ( $tabla{$aminoacido}== $num_max_apariciones){push@resultado,$aminoacido;}
  54.         }
  55.        
  56.  
  57.         return join(",",@resultado),$num_max_apariciones;
  58. }
  59.        
  60.  
  61. @mayoritario = aminoacido_mayoritario($protein);
  62. print "Áminoacido/s mayoritario/s y número de apariciones:\n",join(" ",@mayoritario),"\n\n";
  63.  
  64. ###### calcular el aminoacido minoritario######
  65. sub aminoacido_minoritario{($protein)=@_;
  66.         %tabla=();
  67.         @resultado =();
  68.        
  69.        
  70.         for (my $i=0;$i<(length $protein);$i++){
  71.                 $aminoacido = substr ($protein,$i,1); #Extrae un aminoácido cada vez que recorra
  72.                 if (exists $tabla{$aminoacido}) {
  73.                         $tabla{$aminoacido} = $tabla{$aminoacido} +1;
  74.                 }
  75.                 else {$tabla{$aminoacido} =1
  76.                 }
  77.         }
  78.        
  79.         foreach $contador(values%tabla){
  80.                 if($contador < $num_max_apariciones){$num_max_apariciones =$contador;}
  81.                 $num_min_apariciones=$num_max_apariciones
  82.         }
  83.        
  84.         foreach $aminoacido(keys%tabla){
  85.                 if ( $tabla{$aminoacido}== $num_min_apariciones){push@resultado,$aminoacido;}
  86.         }
  87.  
  88.         return join(",",@resultado),$num_min_apariciones;
  89. }
  90.        
  91. @minoritario = aminoacido_minoritario($protein);
  92. print"Aminoácido/s minoritario/s y número de apariciones:\n",join(" ",@minoritario),"\n\n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
angelluigi
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2016-11-16 08:52 @411

Publicidad

Re: Número mínimo de apariciones

Notapor explorer » 2016-12-28 18:03 @793

Pues... yo tampoco sé a qué se refiere con lo de primero y último.

Yo lo que veo es que usas una variable global, $num_max_apariciones para llevar la cuenta de las apariciones del aminoácido mayoritario, y luego sacas un listado con todos los aminoácidos que coinciden con ese valor. Pero no sé por qué dice que solo le interesa el primero y el último.

Lo que sí podrías hacer es que en la segunda subrutina, no uses esa variable. Simplemente, inicializa $num_min_apariciones a un valor máximo (por ejemplo, al número de aminoácidos de la secuencia), y modifica el código de la línea 80 para que la use en lugar de la $num_max_...

Es más... las dos subrutinas podrían quedar fundidas en una sola, ya que la búsqueda del máximo es independiente de la búsqueda del mínimo.

Pregúntale a qué se refiere con lo de primero y último. Si es exactamente lo que quiere (sacar solo dos aminoácidos en lugar de todos), debes agregar código para a) sacar solo el primero y último valor de @resultado, y b) contemplar el caso de que solo exista un máximo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Número mínimo de apariciones

Notapor angelluigi » 2016-12-28 19:07 @838

Yo creo que se refiere a que si por ejemplo al hacer la subrutina de aminoácido_mayoritario devolviera 5 aminoácidos que se repiten 10 veces, y esa es la cantidad mayor, que solo muestre el primero y el último. Me imagino que será algo así...
angelluigi
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2016-11-16 08:52 @411

Re: Número mínimo de apariciones

Notapor explorer » 2016-12-29 04:15 @219

Sí, eso es lo que hemos deducido, pero, ¿con qué criterio decimos que un aminoácido es el primero o el último?

Según el razonamiento de que son entonces el primero y el último que metemos en @resultado, entonces lo tenemos resuelto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Primero: $resultado[0]\n";
  2. print "Último : $resultado[-1]\n";
  3.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado