• Publicidad

Contador de cisteínas en una secuencia Fasta de aminoácidos

Perl aplicado a la bioinformática

Re: Contador de cisteínas en una secuencia Fasta de aminoáci

Notapor explorer » 2012-05-08 12:23 @557

cocodrila escribiste:Yo tengo un problema similar, pero en vez de buscar la "C" me gustaría que recorriera un array en el que están los 20 residuos (ej. @aminoacidos), de manera que contara cuántas veces aparece cada residuo en el total de secuencias (no necesito reiniciar el contador) pero no tengo claro cómo decirle que para cada $letra mire si equivalen a los elementos de @aminoacidos.

for $letra (@seq)
for ($i = 0; $i < @aminoacidos; $1++) # esto no cogerá el valor (A, R, ...), solo correrá 20 veces...

en cambio:
for $aa (@aminoacios)
# aquí no sé como indicar los distintos contadores, que tienen que ser contadores asociados a $aa[0] .. $aa[19]
if $aa eq $letra...

¿Alguna sugerencia de hacia dónde tirar?

Teniendo $i, con $aminoaciodos[$i] accedes al aminoácido en la posición $i. Así que haces un if ($aa eq aminoacidos[$i]) y así sabes si son iguales.

Para los contadores, puedes usar otro hash: $contador{$letra}++

cocodrila escribiste:Si en vez de guardar las secuencias como elementos del array, lo leemos de la siguiente manera:

while ($line=<MSA>) {
chomp $line;
if ($line=~/^>/) {
@line=split(/\|/, $line);
$refseqid=$line[3]; # nombre proteína
} else {
$msa{$refseqid}.=$line; # secuencia proteína
}
}

¿Cómo puedo buscar el patrón en los values del hash? ¿Tengo que meter todos los values en un mismo array para luego recorrer elemento por elemento o con algo tipo "for (values %hash)", tendría que splitarlo y guardarlo en array?

Hay que guardar la información en aquella estructura que, o bien refleje su condición o concepto, o nos permita extraer mejor la información más tarde. Si vas a usar un array es porque vas a guardar elementos que guardan algún tipo de orden entre ellos o su posición es más importante que el valor o quieres procesarlos siempre en ese orden. Y usarás un hash si tienes que relacionar un clave con un valor, ya sea para agregar información que llega dispersa o para recordar información que ya has visto.

O, visto también de otra manera: si vamos a usar índices numéricos o correlativos, usaremos un array, pero si la información que vamos a tratar relaciona cadenas de texto con otras cadenas de texto, usaremos un hash.

Si nos pones ejemplos de la entrada y de lo que quieres hacer con ellos, y cómo tiene que ser la salida, tendremos más pistas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Contador de cisteínas en una secuencia Fasta de aminoáci

Notapor cocodrila » 2012-05-08 16:41 @737

Gracias por responder tan rápido. Efectivamente, usando if($aa eq aminoacidos[$i]) y $contador{$letra}++ ha funcionado :D

Quizá antes he sido poco clara. Creo que para contar la frecuencia de cada residuo con un array es suficiente, porque sólo es para almacenar la secuencia "temporalmente" y quedarse con los contadores. Pero lo preguntaba porque esta duda que he planteado era para modificar un script que ya tenía, en el que guardaba las secuencias en un hash tipo $hash{$idprot}=$sequencia para trabajar sobre ellas, y bueno, era por si con esa misma estructura hecha:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($line=<MSA>) {
  2.     chomp $line;
  3.     if ($line=~/^>/) {
  4.        @line=split(/\|/, $line);
  5.        $refseqid=$line[3]; # nombre proteína
  6.     } else {
  7.        $msa{$refseqid}.=$line; # secuencia proteína
  8.     }
  9. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

podía usar los values de %msa directamente.

Ahora lo que he hecho (es un poco cutre quizá) es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($line=<MSA>){
  2.    chomp $line;
  3.    if ($line=~/^>/){
  4.         @line=split(/\|/, $line);
  5.         $refseqid=$line[3];
  6.    } else {
  7.         $msa{$refseqid}.=$line;
  8.                        
  9.         @costa = split(//,$line);
  10.         for $letra (@costa){
  11.             for (my $i=0; $i<@aminoacids; $i++) {
  12.                 if ($letra eq $aminoacids[$i]) {
  13.                    $contador{$letra}++;
  14.                 }
  15.              }         
  16.         }
  17.    }
  18. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y bueno, el script sigue, sólo que ahora tenía que calcular un parámetro de conservación que utiliza la frecuencia de aparición de un residuo, pero dividiendo por cuán frecuente es el residuo en el alineamiento en total, por eso.

Es decir, ahora ya funciona bien. Pero 1) igual no hace falta crear un array y un hash el mismo input, y 2) igual hay otra forma de expresarlo que no es for...for (líneas 10 y 11), no parece lo más optimizado, ¡je,je,je!

Gracias de nuevo.
cocodrila
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-11-04 04:48 @242

Re: Contador de cisteínas en una secuencia Fasta de aminoáci

Notapor explorer » 2012-05-08 17:13 @759

Puedes hacer lo siguiente: sustituyes todo el bucle 10 a 16 por la línea $contador{$letra}++;. De esa manera, haces la cuenta de todas las bases.

Luego, cuando termine el bucle while() de la línea 1, haces un bucle por los aminoácidos, sacando la estadística del %contador:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $amino (@aminoacidos) {
  2.     print "Veces que aparece $amino: $contador{$amino}\n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y las líneas 9 y 10 pueden quedar en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.       for $letra (split //, $line) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y el hash de la línea 7 lo puedes quitar si luego no lo vas a usar para nada, naturalmente...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contador de cisteínas en una secuencia Fasta de aminoáci

Notapor cocodrila » 2012-05-09 04:56 @247

¡Qué gusto verlo así de simplificado, muchas gracias!
cocodrila
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-11-04 04:48 @242

Anterior

Volver a Bioinformática

¿Quién está conectado?

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

cron