• Publicidad

Unir péptidos solapantes

Perl aplicado a la bioinformática

Unir péptidos solapantes

Notapor millen » 2012-06-18 08:25 @392

Hola a todos, tengo un problemilla:

Digamos que tengo esto en un array @array:

1. ACD => 0
2. CDE => 0
3. DEF => 1
4. EFG => 1
5. FGH => 1
6. GHI => 0
7. GHJ => 0
8. HJK => 1
9. JKL => 1
10. KLM => 1
11. LMN => 0

Yo lo que quiero es juntar los péptidos solapantes que lleven el 1.

Por ejemplo, el primer péptido sería DEFGH y el segundo: HJKLM.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $line (@array) {
  2.     if ($line =~ /\d+\s([A-Z]+)\s(\d)/ {
  3.             $peptido  = $1;
  4.                 $pred = $2;
  5.         }
  6.         if ( $pred eq "1" ) {
  7.             $peptidos_unos = $peptido;
  8.         }
  9.     }
  10.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Llevo bastante rato intentándolo, pero no se me ocurre cómo hacerlo. Si alguien me puede echar una mano...

Muchas gracias.
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Publicidad

Re: Unir péptidos solapantes

Notapor explorer » 2012-06-18 09:35 @441

El problema se reduce a "unir" los péptidos que tienen un valor de '1', así que podemos sacarles antes a otro array.

Pero, ¿DEFGH es el resultado de la unión de 3, 4 y 5, o sólo de 3 y 5?

La solución no es sencilla...

En CPAN hay algunas implementaciones del Problema de la mayor subcadena comú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: Unir péptidos solapantes

Notapor millen » 2012-06-18 09:45 @448

3,4 y 5
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Unir péptidos solapantes

Notapor explorer » 2012-06-18 17:19 @763

¿Puedes poner un ejemplo real, aunque sea corto, de lo que quieres hacer?

Me temo que no es nada obvio resolver esto... ¿No estará solucionado en algún módulo de BioPerl?
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: Unir péptidos solapantes

Notapor millen » 2012-06-19 03:16 @178

A ver, un ejemplo seria el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1. DIVLTQS => 0
2. IVLTQSP => 0
3. VLTQSPA => 0
4. LTQSPAS => 0
5. TQSPASL => 0
6. QSPASLS => 0
7. SPASLSA => 0
8. PASLSAS => 0
9. ASLSASV => 0
10. SLSASVG => 0
11. LSASVGE => 0
12. SASVGET => 0
13. ASVGETV => 0
14. SVGETVT => 0
15. VGETVTI => 0
16. GETVTIT => 0
17. ETVTITC => 0
18. TVTITCR => 0
19. VTITCRA => 0
20. TITCRAS => 0
21. ITCRASG => 0
22. TCRASGN => 0
23. CRASGNI => 0
24. RASGNIH => 0
25. ASGNIHN => 0
26. SGNIHNY => 0
27. GNIHNYL => 0
28. NIHNYLA => 0
29. IHNYLAW => 0
30. HNYLAWY => 0
31. NYLAWYQ => 0
32. YLAWYQQ => 0
33. LAWYQQK => 0
34. AWYQQKQ => 0
35. WYQQKQG => 1
36. YQQKQGK => 1
37. QQKQGKS => 1
38. QKQGKSP => 1
39. KQGKSPQ => 1
40. QGKSPQL => 1
41. GKSPQLL => 1
42. KSPQLLV => 1
43. SPQLLVY => 0
44. PQLLVYY => 0
45. QLLVYYT => 0
46. LLVYYTT => 0
47. LVYYTTT => 0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sería unir los péptidos del 35 al 42. Por lo tanto, sería sacar un epítopo como este: WYQQKQGKSPQLLV
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Unir péptidos solapantes

Notapor explorer » 2012-06-19 05:26 @268

Bueno, parece entonces que el problema es muy sencillo, ya que de un péptido a otro solo varía una letra en una posición consecutiva...

Una cosa: la lista que estás sacando no coincide con la expresión regular que pusiste al principio.
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: Unir péptidos solapantes

Notapor millen » 2012-06-19 05:56 @289

¡Ah, no no! No coincide, es que no tenía el archivo a mano, y lo hice de memoria.
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Unir péptidos solapantes

Notapor millen » 2012-06-19 11:06 @504

Hola de nuevo:

Esto debería estar bien, por lo menos para extraer el primer péptido de cada grupo de unos. Pero no me sale, ¿qué estoy haciendo mal?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub extend_gap {
  2.  
  3.     my @prediction = @_;
  4.     my ( $peptido, $pred );
  5.  
  6.     foreach my $i (@prediction) {
  7.         if ( $i =~ /\d+\.\s([A-Z]+)\s=>\s(\d)/ ) {
  8.             $peptido = $1;
  9.             $pred    = $2;
  10.         }
  11.         if ( $pred eq "0" ) {
  12.             next;
  13.             if ( $pred eq "0" ) {
  14.                 next;
  15.             }
  16.             elsif ( $pred eq "1" ) {
  17.                 print $peptido;
  18.             }
  19.         }
  20.     }
  21. }
  22.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
millen
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2011-11-19 06:30 @313

Re: Unir péptidos solapantes

Notapor explorer » 2012-06-19 15:18 @679

El siguiente programa resuelve el problema... aunque habría que ver si funciona en todos los casos...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;
  3.  
  4. my @peptidos;
  5.  
  6. while (<DATA>) {                                        # Leemos los péptidos que tienen valor 1
  7.     chomp;
  8.     my($peptido, $valor) = split;
  9.     next if $valor != 1;
  10.     push @peptidos, $peptido;
  11. }
  12.  
  13. my $hay_cambios = 1;                                    # Recorremos el array mientras consigamos hacer cambios
  14.  
  15. while ($hay_cambios) {                                  # mientras haya cambios...
  16.  
  17.     $hay_cambios = 0;                                   # suponemos que no los habrá
  18.  
  19.     for my $i (0 .. $#peptidos) {                       # recorremos los @peptidos
  20.  
  21.         my $peptido_a_probar = $peptidos[$i];           # probamos cada uno
  22.         next if not $peptido_a_probar;
  23.  
  24.         for my $j (0 .. $#peptidos) {                   # que comparamos con todos los demás
  25.             next if $j == $i;                           # (salvo consigo mismo)
  26.  
  27.                                                         # del posible péptido le quitamos el último carácter
  28.             my $posible_peptido_a_agregar = substr $peptidos[$j], 0, -1;
  29.             next if not $posible_peptido_a_agregar;
  30.  
  31.                                                         # si el posible péptido está dentro del de prueba
  32.             if ($peptido_a_probar =~ m/$posible_peptido_a_agregar$/) {
  33.  
  34.                                                         # metemos el posible dentro del de prueba
  35.                 substr  $peptido_a_probar,
  36.                         pos($peptido_a_probar) - length($posible_peptido_a_agregar),
  37.                         length($peptidos[$j]),
  38.                         $peptidos[$j];
  39.  
  40.                 delete $peptidos[$j];                   # ya no necesitamos este péptido (está agregado)
  41.  
  42.                 $hay_cambios++;                         # contamos un cambio más
  43.             }
  44.         }
  45.  
  46.         if ($hay_cambios) {                             # si hubo cambios en la última pasada
  47.             $peptidos[$i] = $peptido_a_probar;          # guardamos el nuevo péptido
  48.             last;                                       # y reiniciamos la búsqueda
  49.         }
  50.     }
  51. }
  52.  
  53. @peptidos = grep { defined } @peptidos;                 # nos quedamos con las celdas que contengan algo
  54.  
  55. if (@peptidos) {                                        # pintamos el resultado
  56.     say "Péptidos encontrados:";
  57.     say "\t$_" for @peptidos;
  58. }
  59.  
  60. __DATA__
  61. DIVLTQS 0
  62. IVLTQSP 0
  63. VLTQSPA 0
  64. LTQSPAS 0
  65. TQSPASL 0
  66. QSPASLS 0
  67. SPASLSA 0
  68. PASLSAS 0
  69. ASLSASV 0
  70. SLSASVG 0
  71. LSASVGE 0
  72. SASVGET 0
  73. ASVGETV 0
  74. SVGETVT 0
  75. VGETVTI 0
  76. GETVTIT 0
  77. ETVTITC 0
  78. TVTITCR 0
  79. VTITCRA 0
  80. TITCRAS 0
  81. ITCRASG 0
  82. TCRASGN 1
  83. CRASGNI 1
  84. RASGNIH 1
  85. ASGNIHN 0
  86. SGNIHNY 0
  87. GNIHNYL 0
  88. NIHNYLA 0
  89. IHNYLAW 0
  90. HNYLAWY 0
  91. NYLAWYQ 0
  92. YLAWYQQ 0
  93. LAWYQQK 0
  94. AWYQQKQ 0
  95. WYQQKQG 1
  96. YQQKQGK 1
  97. QQKQGKS 1
  98. QKQGKSP 1
  99. KQGKSPQ 1
  100. QGKSPQL 1
  101. GKSPQLL 1
  102. KSPQLLV 1
  103. SPQLLVY 0
  104. PQLLVYY 0
  105. QLLVYYT 0
  106. LLVYYTT 0
  107. LVYYTTT 0
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Péptidos encontrados:
        TCRASGNIH
        WYQQKQGKSPQLLV
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


Volver a Bioinformática

¿Quién está conectado?

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