• Publicidad

Agrupar los codones de cada aminoácido

Perl aplicado a la bioinformática

Agrupar los codones de cada aminoácido

Notapor Godrick » 2012-01-28 19:43 @863

Hola, buenas noches. Estoy haciendo un programa con Perl pero hay algo que me impide avanzar. Necesito hallar las frecuencias de cada aminoácido con una fórmula pero para ello he de utilizar los codones que codifican dicho aminoácido y no sé cómo seleccionar sólo esos y no todos. Tengo hecho un código pero creo que está mal porque no me da la cifra que quiero. Estaría sumamente agradecido si me ayudan.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $a;
  2. my $b;
  3. my $c;
  4. my $d;
  5. my $e;
  6. my %ff  = ();
  7. my $abc = 0;
  8. foreach $a (@codones) {
  9.     $b = $codigogenetico{$a};
  10.     if ( $abc =~ tr/"$b"// ) {
  11.         next;
  12.     }
  13.     else {
  14.         foreach $a (@codones) {
  15.             if ( $b = $codigogentico{$a} ) {
  16.                 $d += $frecuencia{$a};
  17.             }
  18.         }
  19.         $e = ( $d * $hash{$b} - 1 ) / ( $hash{$b} - 1 );
  20.         unless ( exists $f1{$b} ) {
  21.             $ff{$b} = $e;
  22.         }
  23.         $abc .= $b;
  24.     }
  25. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Muchas gracias de antemano.
PD: la fórmula no es importante, sé manejarla bien.
¡Gracias de nuevo!
Última edición por explorer el 2012-01-28 19:46 @865, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
Godrick
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-01-28 19:31 @855

Publicidad

Re: Agrupar los codones de cada aminoácido

Notapor explorer » 2012-01-28 20:13 @884

Bienvenido a los foros de Perl en español, Godrick.

Hay algunos problemas que hay que resolver antes...

  • No sabemos qué son y qué contienen las variables %codigogenetico, %frecuencia, %hash, %f1.
  • La variable $abc la inicializas con un valor numérico en la línea 7, pero luego haces una concatenación de cadenas de caracteres en la línea 23... así que sospecho que la línea 7 debería escribirse como my $abc = ''; .
  • Declaras las variables con my(), pero no veo que uses el modo use strict;. Si lo hicieses, Perl te avisaría de que no sabe de dónde viene la variable %codigogentico de la línea 15. Seguramente, le falta una 'e'.
  • La línea 10 es terrible... ¿que quieres hacer ahí?


Sospecho que %codigogenetico mantiene la correspondencia entre codones y sus aminoácidos correspondientes, como aparece en la línea 121 de este programa.

Entonces... por cada $codon que hay en los @codones que hemos leído, obtenemos su aminoácido correspondiente con $codigogenetico{$codon}. Y podemos llevar la cuenta de las apariciones de cada aminoácido con $contador{$codigogenetico{$codon}}++. Solo queda hacer un bucle por todos los aminoácidos encontrados (for $amino (keys %contador) {}) y, por cada uno, sacar la media con respecto al total ($frec{$amino} = $contador{$amino} / @codones).

Ya tienes en %frec las frecuencias de aparición por aminoácido.

No sé si era eso lo que querías hacer.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Agrupar los codones de cada aminoácido

Notapor Godrick » 2012-01-29 05:02 @251

¡Buenos días!

Ante todo muchísimas gracias por responder aunque no creo haberme explicado bien sobre el cometido de mi código.

He de recorrer los codones del código genético que se encuentran en un hash ($a), y por lo tanto asignar a $b el aminoácido('aa') que codifica el primer codón que leemos con foreach(). Entonces entramos en la condición; si ese aa ya se encuentra en $abc, hacemos next, pero como la primera vez que aparezca ese codón no estará, funcionará el else, donde se sumarán las frecuencias de los codones que codifican en aa $b y llevará a cabo la fórmula. Por último se concatenará ese aa a $abc para que no se repita su búsqueda. Lo que quiero y es lo que no sé hacer ES SUMAR LAS FRECUENCIAS DE LOS CODONES QUE CODIFIQUEN EL MISMO AA, es decir, el resultado que quiero es poder tener un hash con los aa como keys, y como values la suma de las frecuencias de los codones que codifican dicho aa. Sé que es complicado, y que mi código quizás esté mal. Si lo estoy haciendo mal, díganme qué está mal y si pueden, ofrezcan una solución porque no sé cómo llevar a cabo ese paso. Muchas gracias, de veras.
Godrick
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-01-28 19:31 @855

Re: Agrupar los codones de cada aminoácido

Notapor explorer » 2012-01-29 09:14 @426

Según el código publicado, $a no es un hash. Es una variable escalar normal, que va tomando cada uno (foreach) de los @codones.

Efectivamente, en $b tienes el aminoácido que codifica el codón.

Ahora bien... todo el proceso que comentas de "si el if() es verdadero, es que ya hemos procesado ese aminoácido, y si se activa el else, es que hay que hacer la estadística para ese aminoácido", es una versión mucho más larga del procedimiento que te he contado antes (fíjate que estás haciendo un doble bucle de @codones, cuando solo es necesario uno).

Yo creo entonces que el problema está en la línea 15. Tienes puesto un '='. ¿No será un 'eq' lo que querías poner?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Agrupar los codones de cada aminoácido

Notapor Godrick » 2012-01-29 13:16 @594

La verdad que con todos los consejos que me está dando, he llegado a la conclusión de que de este modo no se puede hacer, probaré de otro modo.

Pero avanzando se me ha planteado una nueva duda, que me impide seguir. Es muy sencilla. ¿cómo hago para contar las veces que aparece una variable en un array?

He probado con

$contador =~ tr/"$a"//

$a es una variable que recorre un array, pero me han dicho que tr/// no se puede utilizar con variables. ¿Es eso cierto?

¡Muchas gracias de antemano por toda su ayuda!
Godrick
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-01-28 19:31 @855

Re: Agrupar los codones de cada aminoácido

Notapor explorer » 2012-01-29 14:07 @630

tr/// hace transliteraciones de cadenas de caracteres (traducciones). Más información de tr en tu ordenador, con perldoc perlop (sección Quote and Quote-like Operators) (traducido).

La mejor forma de contar los elementos repetidos de un array es con otro hash:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Contar
  2. my %hash;
  3. foreach my $a (@array) {
  4.     $hash{$a}++;          # Cuenta una aparición más de $a
  5. }
  6.  
  7. # Salida de resultado
  8. foreach my $a (keys %hash) {
  9.     print "$a aparece $hash{$a} veces\n";
  10. }
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Agrupar los codones de cada aminoácido

Notapor Godrick » 2012-01-29 14:44 @655

Muchísimas gracias por todo. Creo que todo va viento en popa. Gracias de veras. =)
Godrick
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-01-28 19:31 @855


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados