• Publicidad

Más problemas con los ORF

Perl aplicado a la bioinformática

Atasco... no avanzo al variar la posición

Notapor beafm » 2011-01-09 10:02 @460

Hola de nuevo:

Estoy atascadísima en el mismo sitio. A ver, tengo lo siguiente en mi programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #PRIMER MARCO DE LECTURA
  2.  
  3.      my (@posinicio);
  4.      my (@posfinal);
  5.      my ($posicion) = 0;
  6.  
  7.      my (@genes) = seleccionar_secuencias( $posicion, $DNA, \@posinicio, \@posfinal, $longitudmin );
  8.  
  9. print "@genes\n";
  10.  
  11.  
  12. #SEGUNDO MARCO DE LECTURA.
  13.  
  14.      my (@posinicio1);
  15.      my (@posfinal1);
  16.      $posicion = 1;
  17.    
  18.      my (@genes1) = seleccionar_secuencias( $posicion, $DNA, \@posinicio1, \@posfinal1, $longitudmin );
  19.  
  20. print "@genes1 \n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La subrutina es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub seleccionar_secuencias {
  2.  
  3.   my($posicion, $secuencia, $posinicio, $posfinal, $longitudmin) = @_;
  4.  
  5.   my($codoninicio);
  6.   my($codon);
  7.   my($i);
  8.   my(@genes);
  9.  
  10. for ($posicion; $posicion < length ($secuencia) - 2 ; $posicion = $posicion + 3) {
  11.  
  12.           $codoninicio = substr ( $secuencia, $posicion, 3 );
  13.  
  14.                         my($pos2) = $posicion;
  15.                         my($pos3) = $posicion;
  16.                         my($gen);
  17.  
  18.  
  19.               if ($codoninicio =~ /ATG/i) {
  20.                        
  21.  
  22.                         do{
  23.                             $codon = substr ( $secuencia, $pos2, 3 );
  24.                    
  25.                             $gen .= $codon;
  26.  
  27.                             $final = $pos2 + 1;
  28.  
  29.                             $pos2 = $pos2 + 3;
  30.  
  31.                           }until ( $codon =~ /TA[AG]/i or $codon =~ /TGA/i);
  32.  
  33.  
  34.                           if ( $longitudmin < length ($gen) ) {
  35.  
  36.                                     $genes[$i] = $gen;
  37.        
  38.                                     $$posinicio[$i] = $pos3 + 1;
  39.        
  40.                                     $$posfinal[$i] = $final;
  41.  
  42.                                     $i = $i + 1;
  43.                
  44.                           }
  45.                                                  
  46.                 }
  47.           }
  48.              
  49.  
  50.   return @genes;
  51.  
  52. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Una parte de $DNA sería lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
GATCTCGCAACTCTTAATAAAGCTAATTCCTGCTAATTCGCTATACACTAAATCTTAATAAACTTGCTTC
ATTATTTTCTCGATAAATATTTTATTTATAACAGTTTGTTAAATTGACAGGGTCCTTGCTAAGTTTCTAT
ATACAACATAAACATACTATACGAAATAACATTTTTCTCAAGGTATGTAGAGTATAAATGCTCCAACGTG
GCACAATTTCATTTCGTTTAGTTTACTAAAAACCCATATTCGCGTCGCACTCACACAGAATCTAGAGTTT
AGTACATTTTACCGGCTCAACAATTAACCATTCAAATTGTATTTCAAGTATGAGTAACAATCGAATAAAA
TATTGTATTCTTGCTTTCCTATAAAAGTATTTTGATAATCGTAAAGCTGGGAATACCATTTGCCTGTACT
TTGGCAGTTATGGTGCTGCCATGTTGCTCCTTTTATAGTTATATCCTGTATGTTAAAAACTTTTATGGAA
CTATCGTACTTCTGTTTAACAGCATCATAAGCCTTAAATGCTAAATTTCGATTATTAACTGGTATTCCTG
AACAATCACGTATACCGTTTTTGAAGTCTTGGACCATGAAATCGTCGCCTGAGCGTCTATCAAACGCACC
TAATTGCATCAGCTGAGTCATGTTCATATTATGTCTTGAACTGTCATCGAATTCAATACTCATAGTAGTC
AACGCAAAGAGAGATACTGAACATATTGGCACATCATCTAAATTGCCATTTCATAATGAAAAGCAACCCT
TCTGACATTCGTTTATTTAAAGAAACACTCGTCAATCAAACGTGTGTAATCACCATCATTAACTTCGACT
GTATTAAATAATACAAGTCTACCCAAACTCAGTTATCGTTCCGTTAGTCACATTACTATATGCATTAAAA
CAATCAACTACTGCCTATCTGAACTCAGACGAATTGGTATTATAAGCATCAATAGTTAGGACACACATTA
TGAGTAATAAAACTAGAGTAATCATTGCTATATCGAAGAGTATAACTTATTTGGGTTGAAAACTATCACT
AGACGTAAAATCTAATATACTAAACGAGTTACGAGGTTCAGTTGTAGTTCTTTATTTATCATCTTTTCTA
ATGATTGCTATCATCGGGTATTCTATGTAAGTAGACAAATTTGTAATACATTTACGTTATTCATTTCCTT
TCCTTGAAGGTGTTGTAATATTCAATAGATCCCTTGAAAATTACATCAGCTCTATAAAGGTTGGCTCATT
GCTAAAACTCAAGTGTTGCTCAAATGGTTTAATAATGTCAGCTACGCAGTTTTGGTATCTGTTTAACGAT
ACGTATAAGTACGATGTGTTTTCCTTCTGACCTAGTATATTACAGTACACAGGTAATATAAGTAGCACCT
TCTATAGATATTTATTAAACTGTTACCTATCACTGTAATAGCTTATTACAGAACTGAGGAACGAGGTTAG
TTCTTCTCAATTTATGGCATTTAGAATTATTTTTATTATTACGTTTGATTAGTTTTGTTCACAACTAGCA
ATATGTCTAAATAACTTATCGTGTAAAGTTGATAGAGCAAATAGAACACGTAGCTCAGAAAACACAATTC
CTCTAATTTAATCCTCCCAAGTCCACGACATACCCACTACAGGTTGGTCTCTCGACTGATGGATAGAGAG
TCTATCAATCTTGTATTCTTAGCGGTGAACCACCACCATCCAAAAAACTAGTGAACTACTTATATCTTAG
TAATGAGTCGAGTAACAAACTTTTTACGATAATGATACTATGAAGAAGCATCTACCAGTTGTGCATATGT
CAAAATAGCGTTATAATTTTATAACATCACACAAATATATTAATCGAATAGTCCTAAGTCACACCGTAGT
TGACAAAGCGGCGTTGCTAGTTCCATAAGTAATATTTGTACGAGCATATACGATTAATTGATTCGTAAAA
TATGATCTTTTTATGCTAATACTATTATTCATTACTGTCTACCATATTTTGTAGTTCATCATTATTTTAT
TTATACAATTACTAGCTTTGATTTTTGAATTGTTATTTGGTTATTGATAGCAATTGATATTAAACGCTTA
TTCTTTAATATTATTGCACATACATCGTATTTACTGAATATGCCGGATAAAAACAACAGACTTGTGTCCC
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Cuando hago print @genes me sale todo bien, pero luego para print @genes1 no me sale nada. Me sale esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
tuxdistro@linux-swp1:~/programa_de_informatica> perl migetorf.pl ficheroFASTA ficheroSALIDA 300
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


y no me sale nada más... Creo que el resto del programa lo tengo bien hecho, pero si esa subrutina no me funciona, no me va nada y no puedo avanzar en nada más. Y es que si pongo $posicion = 2; que también lo tengo que hacer, sí me da, pero con el 1 no. He probado con el depurador, y para $posicion = 1; no me imprime nada en $codon, y en $gen siempre tiene el mismo gen, pero en @genes no hay nada de nada.

Agradecería mucho si alguien me puede decir qué hago mal, porque he probado a cambiarlo de mil maneras, y nada.
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

Publicidad

Re: Más problemas con los ORF

Notapor explorer » 2011-01-09 10:45 @489

El fallo está en la línea 31 de la subrutina. Si se da el caso especial de que no exista un codón de terminación antes del final de la secuencia, el programa entra en un bucle sin fin. Debes poner un control de parada. Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.             } until ( $codon =~ /TA[AG]/i or $codon =~ /TGA/i or $pos2 > length($secuencia)-2);
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: Más problemas con los ORF

Notapor beafm » 2011-01-09 11:28 @519

Señor, ¡¡¡no sé cómo darle las gracias!!!

¡Por fin!, ya podré avanzar... ¡Qué alegría!
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

Re: Más problemas con los ORF

Notapor beafm » 2011-01-11 20:38 @901

Hola de nuevo:

Ahora mismo no tengo dudas sobre el programa que estoy haciendo, pero si le doy a que me imprima algo por pantalla, me dice "out of memory". Tengo todos los pasos por referencia que he podido, y también he intentado recoger lo máximo posible en subrutinas. Tengo solo una subrutina más complicada, que es la de extracción de los ORF.

¿Si le doy a que imprima en un fichero también se queda sin memoria? ¿Hay alguna forma de hacer que funcione?


Otra cosa. He visto que he recibido un mensaje privado, pero no puedo verlo. ¿Por qué?

Gracias
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

Re: Más problemas con los ORF

Notapor explorer » 2011-01-12 07:53 @370

¿Cuánta memoria tiene el sistema en donde estás? Si estás en Linux, ejecuta el comando free.

Es muy raro de que un programa de este tipo agote la memoria... podría tratarse de un bucle infinito, o, efectivamente, que estés duplicando la información.

Si estás llamando a las subrutinas con un argumento que sea la secuencia de ADN, y esa secuencia tiene cien mil bases, pues toda esa cantidad de memoria es la que se reserva en cada paso (aunque luego la debería de soltar, desde luego).

Para leer los mensajes privados tienes que entrar en la sección "Bandeja de Entrada".
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: Más problemas con los ORF

Notapor beafm » 2011-01-13 01:57 @122

Ok, ya me funciona el programa, creo que tenía una función que no se me ejecutaba bien.

Al final he hecho lo que me dijo usted de hacer un array de array y luego aplicarles el sort() para ordenarlos. ¿Existe alguna manera de ordenar los elementos de mayor a menor? Es que el sort() lo hace de menor a mayor, pero una de las veces que lo uso tiene que ser en el orden contrario.

Gracias.
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

Re: Más problemas con los ORF

Notapor explorer » 2011-01-13 05:57 @290

Si, por ejemplo, tenemos

sort { $a <=> $b } @array

para ordenar numéricamente el @array, de menor a mayor, con

sort { $b <=> $a } @array

lo ordena de mayor a menor.

Más información en perldoc -f sort.
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: Más problemas con los ORF

Notapor beafm » 2011-01-13 15:32 @688

Ok. Ya lo último que pregunto, porque ya lo tengo hecho.

Tengo que imprimir una cabecera y la proteína que sea dividida en tramos de 60 aminoácidos. Yo lo hago, pero me mete un espacio que no debe salir. No sé por qué me mete ese espacio.

El código es éste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. imprimir_secuencia ($posicionesordenadas1[$uu]->[2], 60);
  2.  
  3. sub imprimir_secuencia {
  4.  
  5.     my($cadena, $longitud) = @_;
  6.  
  7.     for ( my($pos); $pos < length($cadena) ; $pos = $pos + $longitud ) {
  8.         print SALIDA substr($cadena, $pos, $longitud), "\n";
  9.     }
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que me sale a mí es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>1-300000_1  [5451 - 5954] Schizosaccharomyces pombe 972h- chromosome II, complete sequence
 MSNPESLKKQVEPPGYNELFMVEDVCNVDLEQGLDLCKPEKVNKQSQRSRQSRQSLFTNT
IKPQKDKMNIKTNKIKEFLNDLFTEFSKFHNSYYPDGRISTRSNFRWPLLIIWSIIIVFA
VDKKFEVQKFLSIWINENRFYSEIWVPIAIYVCLLVLMLLSLICMFPL
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y lo que me tiene que dar es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>1-300000_1 [5451 - 5954] Schizosaccharomyces pombe 972h- chromosome II, complete sequence
MSNPESLKKQVEPPGYNELFMVEDVCNVDLEQGLDLCKPEKVNKQSQRSRQSRQSLFTNT
IKPQKDKMNIKTNKIKEFLNDLFTEFSKFHNSYYPDGRISTRSNFRWPLLIIWSIIIVFA
VDKKFEVQKFLSIWINENRFYSEIWVPIAIYVCLLVLMLLSLICMFPL
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Es idéntico, menos en el primer espacio de la proteína.
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

Re: Más problemas con los ORF

Notapor explorer » 2011-01-13 16:07 @713

Yo no veo problemas en el código, así que sospecho que el espacio en blanco está en la secuencia leída.

Haz la prueba de poner un

print "[", substr($posicionesordenadas1[$uu]->[2], 0, 1), "]\n";

Y así sabrás si hay o no, realmente, un espacio en blanco en la primera posición.
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: Más problemas con los ORF

Notapor beafm » 2011-01-15 09:59 @458

He hecho lo que me ha dicho, y me sale [M] lo que quiere decir que no hay espacios... además, al comenzar el programa, cuando saqué la secuencia ya me aseguré de quitarle todo lo que tuviera extraño, incluidos los espacios...

Así que el espacio a lo mejor es cosa de la pantalla, no lo sé...

Previamente a hacer ese print() tengo este otro, no sé si el problema podría estar ahí:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print SALIDA ">$cabecera[0]_$numero1  [$posicionesordenadas1[$uu]->[0] - $posicionesordenadas1[$uu]->[1]] (REVERSE SENSE) $cabecera[1]\n ";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Yo diría que no hay problema, porque \n me salta de línea, no me mete espacios...

No sé qué puede ser, la verdad.
beafm
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2010-12-31 06:26 @309

AnteriorSiguiente

Volver a Bioinformática

¿Quién está conectado?

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

cron