• Publicidad

Contar repeticiones secuencias de bases

Perl aplicado a la bioinformática

Re: Contar repeticiones secuencias de bases

Notapor asegurac » 2010-05-01 00:01 @042

Por ejemplo,

la secuencia de entrada sería la misma de los ejemplos anteriores

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ATGGAGTCTTTTAGAGAGTTTATCCAACAATTCAAAAAAAATAAGGCAGCGGTCGTTGGGGCTTGGATTGTGCT
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y supongamos que el fichero de las repeticiones contiene solamente "AA" y "GG"

La salida deseada del programa sería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AA = 7 apariciones totales; 4 en tándem, localizadas entre las posiciones 33 y 41.

GG = 6 apariciones totales; 2 en tándem, localizadas entre las posiciones 57 y 61.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2010-05-01 05:07 @255, editado 1 vez en total
Razón: Ortografía
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Publicidad

Re: Contar repeticiones secuencias de bases

Notapor explorer » 2010-05-01 06:53 @328

A ver ahora, si acertamos... :)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use File::Read;
  3.  
  4. use open 'locale';
  5.  
  6. my @repeticiones = read_file({ aggregate => 0 }, '2y4ntdb.txt');
  7. my $secuencia    = read_file('seq_pba.fasta');
  8.  
  9. chomp @repeticiones;    # no nos interesan
  10. $secuencia =~ s/\n//g;  #   los finales de línea
  11.  
  12. for my $repetición (@repeticiones) {
  13.  
  14.     my $apariciones = 0;
  15.     my $contiguas   = 0;
  16.     my @posiciones_contiguas;   # basadas en 1
  17.  
  18.     while ($secuencia =~ /($repetición)\1*/pg) {        # buscamos conjuntos de secuencias repetidas
  19.         my $veces = length(${^MATCH})                   # número de veces que se repiten
  20.                   / length $repetición                  # de forma contigua
  21.                   ;
  22.  
  23.         $apariciones += $veces;                         # sumamos las apariciones totales
  24.  
  25.         if ($veces > 1) {                               # si han aparecido más de una vez juntas
  26.             $contiguas += $veces;                       # sumamos como apariciones contiguas
  27.  
  28.             push @posiciones_contiguas, [               # guardamos las posiciones
  29.                 pos($secuencia) - length ${^MATCH},     # inicial y
  30.                 pos $secuencia                          # final
  31.             ];                                          # de esas secuencias contiguas
  32.         }
  33.     }
  34.  
  35.     print "$repetición = $apariciones apariciones totales";
  36.  
  37.     if ($contiguas) {
  38.         print "; $contiguas contiguas, localizadas entre las posiciones ";
  39.         print join q[, ], map { "$_->[0] y $_->[1]"  } @posiciones_contiguas;
  40.     }
  41.  
  42.     print ".\n";
  43. }
  44.  
  45. __END__
  46. AA = 7 apariciones totales; 4 contiguas, localizadas entre las posiciones 33 y 41.
  47. AT = 5 apariciones totales.
  48. AG = 6 apariciones totales; 3 contiguas, localizadas entre las posiciones 12 y 18.
  49. AC = 1 apariciones totales.
  50. TA = 3 apariciones totales.
  51. TT = 7 apariciones totales; 2 contiguas, localizadas entre las posiciones 8 y 12.
  52. TC = 4 apariciones totales.
  53. TG = 5 apariciones totales; 2 contiguas, localizadas entre las posiciones 68 y 72.
  54. GA = 4 apariciones totales; 2 contiguas, localizadas entre las posiciones 13 y 17.
  55. GT = 5 apariciones totales.
  56. GG = 6 apariciones totales; 2 contiguas, localizadas entre las posiciones 57 y 61.
  57. GC = 4 apariciones totales.
  58. CA = 4 apariciones totales.
  59. CT = 3 apariciones totales.
  60. CG = 2 apariciones totales.
  61. CC = 1 apariciones totales.
  62. AAAA = 2 apariciones totales; 2 contiguas, localizadas entre las posiciones 33 y 41.
  63. AAAT = 1 apariciones totales.
  64. AAAC = 0 apariciones totales.
  65. AAAG = 0 apariciones totales.
  66. TTTA = 2 apariciones totales.
  67. TTTT = 1 apariciones totales.
  68. TTTC = 0 apariciones totales.
  69. TTTG = 0 apariciones totales.
Coloreado en 0.006 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contar repeticiones secuencias de bases

Notapor asegurac » 2010-05-01 12:05 @545

Muy bien, muchas gracias, ¡¡funciona!!

Ahora solo haré una pequeña modificación para tome un fichero con miles de secuencias. Supongo tendré que introducir un bucle. Ya te contaré cómo me fue.

Saludos
Última edición por explorer el 2010-05-01 12:10 @548, editado 1 vez en total
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Re: Contar repeticiones secuencias de bases

Notapor asegurac » 2010-05-03 14:13 @634

Hola,

Ya he introduje el bucle para realizar la búsqueda en un fichero con miles de secuencias, y funcionó.

Gracias,

Saludos
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Anterior

Volver a Bioinformática

¿Quién está conectado?

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

cron