• Publicidad

Extraer secuencias genómicas de forma ordenada

Perl aplicado a la bioinformática

Extraer secuencias genómicas de forma ordenada

Notapor Alfumao » 2010-10-04 04:13 @217

Buenas ;)

Tengo un problema para ordenar los resultados de este programa. De lo que se trata es de ordenar las claves del hash e imprimirlas en orden. Yo lo he intentado de múltiples formas, pero no consigo el resultado buscado.

El programa es éste (una modificación de un programa que Explorer me ayudó a hacer en su día). Pero no sé dónde ubicar el bucle "foreach" indicado, para ordenar los valores resultantes, ya que si lo hago dentro del bucle "while", me ordena los valores, pero me los imprime ordenados tantas veces como valores entran en bucle "while"...

Lo he sacado del bucle "while" pero aun así sigue sin darme el resultado buscado...

Por favor ayuda ;)

Intenté adjuntar los archivos para testear el funcionamiento pero no se me permite subir el fichero ".fasta" ni el ".txt" :?

LISTA de secuencias a buscar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Pleos27449
Pleos52438
Pleos51948
Pleos94238
Pleos115112
Pleos115108
Pleos112065
Pleos103845
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. # Lectura del fichero de secuencias
  7. my %es_interesante;
  8. print "Enter your list name:\n";
  9. my $entrada = <STDIN>;
  10. open(SEQ,"$entrada") or die ("ERROR: $!\n");
  11. while (my $linea = <SEQ>) {
  12.     chomp $linea;
  13.     $es_interesante{$linea} = 1; # la almacenamos en la memoria asociativa
  14. }
  15. close SEQ;
  16.  
  17. # Lectura del fichero FASTA
  18. my $nombre_secuencia; # Guarda el nombre de cada secuencia
  19. my $secuencia = ''; # Contenido de la secuencia interesante
  20.  
  21. #Abrir salida
  22. open  SALIDA,'>secuencias.txt' or die "ERROR: $!\n";
  23. print "Enter your genome fasta name:\n";
  24. my $genome = <STDIN>;
  25. open(FASTA,"<$genome") or die ("ERROR: $!\n");
  26.  
  27. while (my $linea = <FASTA>) {     # Bucle while
  28.  
  29.     if ($linea =~ /^>(\w+)\|*/) { # Comienzo de una secuencia nueva
  30.  
  31.         if ($secuencia) { # Si tenemos una ya leída...
  32.             procesar_secuencia($nombre_secuencia, $secuencia);  # la procesamos
  33.         }
  34.  
  35.         $nombre_secuencia = $1;  # Nombre de la secuencia extraída desde la exp. reg.
  36.         $secuencia = ''; # Reiniciamos nuestra secuencia a capturar
  37.  
  38.         next; # pasamos a la siguiente línea
  39.     }
  40.  
  41.     if ($es_interesante{$nombre_secuencia}) { # Si estamos en una secuencia interesante
  42.         $secuencia .= $linea; # la guardamos
  43.     }
  44. }
  45.  
  46. foreach my $es_interesante  (sort keys my %es_interesante) {   # <== Bucle foreach
  47.     print SALIDA">$nombre_secuencia\n$secuencia\n\n";
  48. }
  49. close FASTA;
  50. close SALIDA;
  51.  
  52. if ($secuencia) { # Si aún queda alguna $secuencia por sacar
  53.     procesar_secuencia($nombre_secuencia, $secuencia); # la procesamos
  54. }
  55.  
  56. sub procesar_secuencia {
  57.     my ($nombre, $secuencia) = @_;
  58.     print SALIDA ">$nombre\n$secuencia";
  59. }
  60.  
  61. __END__
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Publicidad

Re: Extraer secuencias genómicas de forma ordenada

Notapor explorer » 2010-10-04 04:44 @239

Pero ese hash solo guarda la información del fichero con las secuencias a analizar. No guarda el contenido de las secuencias encontradas en el segundo fichero.

Si lo que quieres es sacar el contenido de un hash, ordenado por sus claves, debes hacer algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $clave (sort keys %hash) {
    print "$clave => $hash{$clave}\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Fíjate que ordenamos las claves del %hash. Cada una de ellas la metemos en $clave. Y por cada una de ellas, la imprimimos, más, el valor del $hash en esa $clave.

En tu bucle foreach() estás sacando los valores de $nombre_secuencia y $secuencia que se usaban como variables temporales en el bucle while().
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: Extraer secuencias genómicas de forma ordenada

Notapor Alfumao » 2010-10-04 06:38 @318

Hola de nuevo.

El problema con la solución que me has dado, es que el valor de cada una de las claves del hash que obtengo, es el número de veces que se encuentra la secuencia de la lista en el FASTA, pero no me devuelve una secuencia como valor de la clave del hash... no sé si me explico.

Lo que necesito obtener con este programa es una estructura tipo:
>clave
secuencia


Y obtengo con la modificación que me propones:
clave=> valor escalar de la clave (nº veces que aparece esa clave en el FASTA)

Y claro, eso no es lo que necesitaba obtener...

Un saludo
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Extraer secuencias genómicas de forma ordenada

Notapor explorer » 2010-10-04 06:52 @328

Pero eso ya lo hace la función procesar_secuencia(): se encarga de sacar, en ese formato, el nombre de la secuencia y la propia secuencia, al fichero SALIDA.

Si lo que quieres es mantener esa información en memoria, puedes meter una línea más, como esta:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $es_interesante{$nombre} = $secuencia;  # guardando la secuencia encontrada, en el hash
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Luego, en el bucle for ya puedes ver el nuevo contenido del hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $nombre (sort keys %es_interesante) {   # <== Bucle foreach
  2.     print ">$nombre\n$es_interesante{$nombre}\n\n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A propósito... sobraba un 'my' delante de %es_interesante, en esa línea.
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: Extraer secuencias genómicas de forma ordenada

Notapor Alfumao » 2010-10-07 04:37 @234

Hola a todos,

Necesito una expresión regular que me sirva para encontrar cualquiera de estos patrones indistintamente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>NP_25348
>Schco1_230278|fgenesh2_pg.1_#_1
>Schco1|230278|fgenesh2_pg.1_#_1
>jgi|Schco1230278|fgenesh2_pg.1_#_1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Es posible o habría que incluir varios "elsif" en un bucle para poder abarcar los distintos niveles de complejidad?

Para los dos primeros me serviría esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/^>(\w+)\|*/
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


pero para los siguientes no...

Lo intenté con éstas pero tampoco funcionó...
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/^>(w+)\|(\w+)\|(w+)\|*/
/^>[(w+)\|][(\w+)\|][(w+)\|]*/
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Estoy con la cabeza como un bombo y no doy con la solución. ¿Podríais ayudarme?

Gracias por adelantado ;)
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Extraer secuencias genómicas de forma ordenada

Notapor explorer » 2010-10-07 05:07 @254

Pero... ¿cómo serían las cadenas que NO concordarían con la expresión regular? O dicho de otra manera, ¿qué es lo que buscamos de característico en esas cadenas?

El siguiente programa indica que sí las ha reconocido, pero, no sabemos si reconocerá a las que no nos interesan.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my @cadenas = (
  7.     '>NP_25348',
  8.     '>Schco1_230278|fgenesh2_pg.1_#_1',
  9.     '>Schco1|230278|fgenesh2_pg.1_#_1',
  10.     '>jgi|Schco1230278|fgenesh2_pg.1_#_1',
  11. );
  12.  
  13. for (@cadenas) {
  14.     print "$_ => ";
  15.  
  16.     if ( /^ ( [>] \w+ ( [|] [\w.#]+ )* ) /x ) {
  17.         print "Si: [$1]\n";
  18.     }
  19.     else {
  20.         print "No\n";
  21.     }
  22. }
  23.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

O... ¿qué partes, realmente, nos interesa identificar? Veo que el '|' es importante, pero no nos dices si es un separador o qué.
Si sólo queremos identificarlas como cadenas, sin más, nos valdría solo con esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/^ ( [>] [\w.#|]+ ) /x
Coloreado en 0.000 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: Extraer secuencias genómicas de forma ordenada

Notapor Alfumao » 2010-10-07 05:22 @265

Hola, explorer,

Es para incluirlo en la expresión regular del programa sobre el que pregunte en el mensaje de la semana pasada: http://perlenespanol.com/foro/ordenar-un-hash-t5415.html

Esta expresión regular que me has dado, reconoce los patrones, pero pasa como con otras que he probado, que luego en el resultado, en vez de aparecerme como valor de la clave del HASH la secuencia que corresponde al encabezamiento buscado, me aparece como valor el número de veces que ese encabezamiento está en el archivo FASTA... y claro, el resultado no es el que se busca obtener...

Ej:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>jgi|Schco1|102220
1
>jgi|Schco1|230323
1
>jgi|Schco1|254840
1
...
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Cuando se buscaría algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>jgi|Schco1|102220
CAPGRSTASRGFKRGDYNIGFSISVSTRSYIAGDGVECSKSSLRIIGGFMSVRGGPKDARDLPGATAVYR
VARRPPTTGIAVALSLSRGTGRRYHVSHIQHIACVELPMAEHGNVLTCTVRAETCPFGDLAPVSHANMPA
VLRYGQDSISGSRRMSSEPPAAYHQGARAYPGGDLPCDQGFAGLSTWCEKDPDLKIGFTGLNGRMTDGGS
PPRSYTRRSLALVSPSPHSLPPTMSTANVSNASNQNDDGAEVQAILDDAFKKRAAAEAERDDLKQWLDLT
KARLDSSESFVSSLQQSIEEHSGTARLRRQEVREVKKEFRSIFVEVRTALDDNYGRPIPDTILLNISTYA
DGDTRLVVSSVNHALRTRLVPLMFKTIVVDQDDERSIKALGRGLLATARELVLHDTRLARELIPHATRSA
PLRLQSLTFSPDSDDALYRETMAISCLLPFLRASPHLERLDCVLVLRRQRDLFALMSEVTGIKKLVIQHI
EGPQREPLSGETAPWVRLEELIVGNGVTDAWFELVLPPHWHPPLTALDISKGADVTWTTLRACLGSVRSS
IERLHISSSMLLENDDTEGAGLHFEGHLPALRELHVRMLTRRGDRLQEMDGVKNLIRVLSNDALAPITEL
HLEFFIMSVFYSDMGRGGGYRGGNNADVTGICGDRLTLSWWQSFALPRRCSMIILIIYDAEDEASDSEST
DSSATDSDLDDGHRASQARYPSGLLRRPYGENEGLKWKPHARSLLLHLAQSIGVTARVSFAPGECPSSGW
PEEWIEQFEEDPDKAMDENETALFYNWREWEV

>jgi|Schco1|230323
MPNPSGSNGHRNGDLPENISAILHDFARRGLKNEARTAELRSMHGYNISITKLKRLNNTYSVPSKRKLPP
IEEVTTRVLEKMDQDIAQRNGPQAIADQLRTDPYDVPLLIGRDVVRGIMRIYSPEGSAARQPGFRRPTLE
RGSIVSAGLLAELHLDGHEKISFASLQMGEDIGVPIYGGREQLSGRPAMYVVPNDRDRNVVAHCYLDIIE
EFGLVAPLQITIDKGTETAELIRIQEVLRDTLTPDLDPLEFPPFLQLRSVQNIVIESMWSWLRKTYGVGV
REEILRGKTDGIFSAAIKLHCFLFRWIWPQIVQRCLNQFIAYWNLHTTRYQANKANPSGKAPMEIWNNHD
TLGYECIGMQVPPELLAELRASVPVSRDDAYRWVPEEFAELAEHVYAIIGSPQLDVRSGWRIFEEMSLKF
IELYPTFTSA
...
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


No sé si me he explicado bien; de todas formas aquí te dejo el código que he usado para que veas la expresión regular en su contexto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. # Lectura del fichero de secuencias
  7. my %es_interesante;
  8. print "Enter your list name:\n";
  9. my $entrada = <STDIN>;
  10. open(SEQ,"$entrada") or die ("ERROR: $!\n");
  11. while (my $linea = <SEQ>) {
  12.     chomp $linea;
  13.     $es_interesante{$linea} = 1; # la almacenamos en la memoria asociativa
  14. }
  15. close SEQ;
  16.  
  17. # Lectura del fichero FASTA
  18. my $nombre_secuencia; # Guarda el nombre de cada secuencia
  19. my $secuencia = ''; # Contenido de la secuencia interesante
  20.  
  21. #Abrir salida
  22. open  SALIDA,'>secuencias.txt' or die "ERROR: $!\n";
  23. print "Enter your genome fasta name:\n";
  24. my $genome = <STDIN>;
  25. open(FASTA,"<$genome") or die ("ERROR: $!\n");
  26.  
  27.  
  28. while (my $linea = <FASTA>) {
  29.  
  30.     if ($linea =~ /^ ( [>] [\w.#|]+ ) /x ) { # Comienzo de una secuencia nueva
  31.  
  32.         if ($secuencia) { # Si tenemos una ya leída...
  33.             procesar_secuencia($nombre_secuencia, $secuencia);  # la procesamos
  34.         }
  35.  
  36.         $nombre_secuencia = $1;  # Nombre de la secuencia extraída desde la exp. reg.
  37.         $secuencia = ''; # Reiniciamos nuestra secuencia a capturar
  38.  
  39.         next; # pasamos a la siguiente línea
  40.     }
  41.  
  42.     if ($es_interesante{$nombre_secuencia}) { # Si estamos en una secuencia interesante
  43.         $secuencia .= $linea; # la guardamos
  44.     }
  45. }
  46.  
  47. for my $nombre(sort keys %es_interesante) {
  48.     print SALIDA ">$nombre\n$es_interesante{$nombre}\n";
  49. }
  50.  
  51. close FASTA;
  52. close SALIDA;
  53.  
  54. if ($secuencia) { # Si aún queda alguna $secuencia por sacar
  55.     procesar_secuencia($nombre_secuencia, $secuencia); # la procesamos
  56. }
  57.  
  58.  
  59. sub procesar_secuencia {
  60.     my ($nombre, $secuencia) = @_;
  61.     $es_interesante{$nombre} = $secuencia;
  62. }
  63.  
  64. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Muchas gracias y un saludo ;)
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Extraer secuencias genómicas de forma ordenada

Notapor explorer » 2010-10-07 06:05 @295

Bueno, si se trata de leer un fichero FASTA, valdría (creo yo), con saber que la línea comienza con '>' y lo que sigue es el nombre de la secuencia que luego queremos buscar, así que la expresión regular se puede simplificar bastante.

En cuanto al procesamiento, vale con leer la lista de secuencias a buscar e imprimir, que guardaremos en el hash %es_interesante. La asignación del 1 puede despistar, pero realmente, solo queremos crear un hash que nos sirva para recordar los nombres de las secuencias que nos interesan.

Luego, a la hora de leer el fichero de secuencias, nos vale con ir guardando las secuencias interesantes que vamos encontrando. En la siguiente solución, en el hash %secuencias.

Y, finalmente, las sacamos por SALIDA, de forma ordenada (solo las que hemos encontrado).

El problema que había era que el bucle for() recorría todo el hash %es_interesante, y siempre sacaba un listado de todos sus valores, sean la secuencia o el '1' que habíamos metido antes.

Es mejor tener las cosas por separado, y así, ahora tenemos un hash para indicar qué queremos buscar y otro para guardar qué hemos encontrado.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. # Lectura del fichero de secuencias a extraer ###############################
  7. print "Enter your list name:\n";
  8. my $entrada = <STDIN>;
  9.  
  10. my %es_interesante;                     # indica cuáles queremos imprimir
  11.  
  12. open(SEQ, $entrada) or die ("ERROR: $!\n");
  13. while (my $nombre = <SEQ>) {
  14.     chomp $nombre;
  15.     $es_interesante{$nombre} = 1;       # lo almacenamos en la memoria asociativa
  16. }
  17. close SEQ;
  18.  
  19.  
  20. # Lectura del fichero FASTA y escritura del resultado ########################
  21. print "Enter your genome fasta name:\n";
  22. my $genome = <STDIN>;
  23. chomp $genome;
  24.  
  25. open(FASTA, $genome)            or die ("ERROR: $!\n");
  26.  
  27. my $nombre_secuencia;   # Guarda el nombre de la secuencia que estamos leyendo
  28. my %secuencias;         # Guarda las que hemos encontrado
  29.  
  30. while (my $linea = <FASTA>) {
  31.     chomp $linea;
  32.  
  33.     if ($linea =~ /^>(.+)/ ) {          # Comienzo de una secuencia nueva
  34.         $nombre_secuencia = $1;         # Nombre de la secuencia
  35.         next;                           # pasamos a la siguiente línea
  36.     }
  37.  
  38.     # Si estamos en una secuencia interesante
  39.     if ($nombre_secuencia  and  $es_interesante{$nombre_secuencia}) {
  40.         $secuencias{$nombre_secuencia} .= $linea;       # la guardamos
  41.     }
  42. }
  43.  
  44. close FASTA;
  45.  
  46. # Salida del resultado ######################################################
  47. open(SALIDA,'>secuencias.txt')  or die ("ERROR: $!\n");
  48. for my $nombre (sort keys %secuencias) {
  49.     print SALIDA ">$nombre\n$secuencias{$nombre}\n";
  50. }
  51. close SALIDA;
  52.  
  53. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Lo he ejecutado y ya salen las secuencias que queremos (y no todas, con el '1').
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: Extraer secuencias genómicas de forma ordenada

Notapor Alfumao » 2010-10-07 07:02 @335

Pues a mí ahora el fichero de salida "secuencias.txt" me sale vacío...
¿Será que el patrón de búsqueda ha sido demasiado sencillo? ¿O tendrá algo que ver el que hayas suprimido la subrutina "procesar_secuencia"?

He copiado tu programa literal (lo he descargado directamente del post), no sé por qué no funcionará... :shock:
Alfumao
Perlero nuevo
Perlero nuevo
 
Mensajes: 178
Registrado: 2009-12-10 11:20 @514

Re: Extraer secuencias genómicas de forma ordenada

Notapor explorer » 2010-10-07 08:34 @398

Este programa busca correspondencias literales entre las entradas del listado primero y el contenido del fichero de secuencias.

Por ejemplo, si en el primer fichero hay una entrada como esta:

jgi|Schco1

no reconocerá que existe en el fichero de secuencias, si aparecen cosas como estas:

jgi_Schco1
jgi Schco1
jgi_Schco1|otrefd
jgi|Schco1|otrefd.#_1_#


Aunque podrían referirse a la misma secuencia, el ordenador ve cadenas de caracteres distintas.

Los ficheros de entrada que he usado son:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
jgi|Schco1|102220
jgi|Schco1|230323
jgi|Schco1|254840
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>jgi|Schco1|102220
CAPGRSTASRGFKRGDYNIGFSISVSTRSYIAGDGVECSKSSLRIIGGFMSVRGGPKDARDLPGATAVYR
VARRPPTTGIAVALSLSRGTGRRYHVSHIQHIACVELPMAEHGNVLTCTVRAETCPFGDLAPVSHANMPA
VLRYGQDSISGSRRMSSEPPAAYHQGARAYPGGDLPCDQGFAGLSTWCEKDPDLKIGFTGLNGRMTDGGS
PPRSYTRRSLALVSPSPHSLPPTMSTANVSNASNQNDDGAEVQAILDDAFKKRAAAEAERDDLKQWLDLT
KARLDSSESFVSSLQQSIEEHSGTARLRRQEVREVKKEFRSIFVEVRTALDDNYGRPIPDTILLNISTYA
DGDTRLVVSSVNHALRTRLVPLMFKTIVVDQDDERSIKALGRGLLATARELVLHDTRLARELIPHATRSA
PLRLQSLTFSPDSDDALYRETMAISCLLPFLRASPHLERLDCVLVLRRQRDLFALMSEVTGIKKLVIQHI
EGPQREPLSGETAPWVRLEELIVGNGVTDAWFELVLPPHWHPPLTALDISKGADVTWTTLRACLGSVRSS
IERLHISSSMLLENDDTEGAGLHFEGHLPALRELHVRMLTRRGDRLQEMDGVKNLIRVLSNDALAPITEL
HLEFFIMSVFYSDMGRGGGYRGGNNADVTGICGDRLTLSWWQSFALPRRCSMIILIIYDAEDEASDSEST
DSSATDSDLDDGHRASQARYPSGLLRRPYGENEGLKWKPHARSLLLHLAQSIGVTARVSFAPGECPSSGW
PEEWIEQFEEDPDKAMDENETALFYNWREWEV

>jgi|Schco1|230323
MPNPSGSNGHRNGDLPENISAILHDFARRGLKNEARTAELRSMHGYNISITKLKRLNNTYSVPSKRKLPP
IEEVTTRVLEKMDQDIAQRNGPQAIADQLRTDPYDVPLLIGRDVVRGIMRIYSPEGSAARQPGFRRPTLE
RGSIVSAGLLAELHLDGHEKISFASLQMGEDIGVPIYGGREQLSGRPAMYVVPNDRDRNVVAHCYLDIIE
EFGLVAPLQITIDKGTETAELIRIQEVLRDTLTPDLDPLEFPPFLQLRSVQNIVIESMWSWLRKTYGVGV
REEILRGKTDGIFSAAIKLHCFLFRWIWPQIVQRCLNQFIAYWNLHTTRYQANKANPSGKAPMEIWNNHD
TLGYECIGMQVPPELLAELRASVPVSRDDAYRWVPEEFAELAEHVYAIIGSPQLDVRSGWRIFEEMSLKF
IELYPTFTSA
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y la salida es casi idéntica a este último (los finales de línea han desaparecido).

Observa que, efectivamente, coinciden el nombre de las secuencias que estoy buscando.

El tema está en la línea 39: si $es_interesante{$nombre_secuencia} no existe, entonces no identificamos la secuencia como interesante y no la guardamos. Y eso puede ocurrir porque $nombre_secuencia no coincida con ninguna de las que hemos leído antes, del primer fichero. Con que sea una letra o carácter distintos, son cadenas distintas.

Haz la prueba con los ficheros que te paso y verás que funciona con mi programa. La función de procesar... la he quitado porque, realmente, solo hacía lo que realmente hace la línea 40.

Otro tema es si realmente quieres contemplar el caso de que quieres buscar nombres de secuencias que "se parecen" a las que estás buscando. Entonces, debes definirnos qué significa "parecerse".
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

Siguiente

Volver a Bioinformática

¿Quién está conectado?

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

cron