• Publicidad

Encontrar secuencia y contar de tres en tres

Perl aplicado a la bioinformática

Encontrar secuencia y contar de tres en tres

Notapor perl biología » 2015-06-15 07:16 @344

Buenas tardes. He conseguido que mi programa lea de tres en tres una secuencia y otro programa que me encuentre la secuencia ATG y me diga dónde está.

Ahora estoy tratando de que dada una secuencia, me encuentre la secuencia ATG y cuente de tres en tres a partir de ATG.

#!/usr/bin/perl
$secuencia = 'AAAATGCGGTTATGCCCATGGGTAAGTG';
$indica_orf = 0; #Indicada cuando encuentra un orf
$orf = "";
my @var = (); #La usamos para guardar los orfn
my $count = 0; #Contador de orf
my $posi = 0; #Posición inicial
my $posf = 0; #Posición final
for (my $i = 0; $i < length $secuencia; $i=$i+3) {
my $str ="";
$a = substr ($secuencia, $i, 3); #Para que me vaya leyendo las letras de 3 en 3.
if (($a eq 'ATG') and ($indica_orf == 0)) { #Si $a es igual a ATG y el indicador esta a 0
$indica_orf = 1;
$posi = $i+1;
}
if ($indica_orf == 1) { #Si estamos dentro de un orf
$str = ($a);
$orf = $orf.$str; #Sustituye las 3 letras de a por su valor y va concatenando
}
if ( $a =~ /TA[AG]|TGA/i ) { #Cuando a sea igual a TAA TAG o TGA
if ($indica_orf == 1) {
$indica_orf = 0; #Sal del orf
}
}

$orf = "";

Llegado aquí me he liado un poco y me da error. ¿Me podríais ayudar?
¡¡¡Gracias!!!
perl biología
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2015-06-03 09:53 @453

Publicidad

Re: Encontrar secuencia y contar de tres en tres

Notapor explorer » 2015-06-15 09:12 @425

En el código pones que la captura debe pararse por la detección del final de un ORF. Pero eso no coincide con lo que dices en el comienzo de tu comentario, que pides buscar desde el primer ATG hasta el final.
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: Encontrar secuencia y contar de tres en tres

Notapor perl biología » 2015-06-15 10:11 @466

No sé a qué te refieres, yo quiero que me lea la secuencia a partir de ATG para ver si está en fase hasta que encuentre la secuencia de parada.

Es que dada la secuencia, intento que me cuente de tres en tres a partir de ATG hasta la secuencia de parada.

Pero me da error, y ya no sé qué más cambiarle ya que lo estoy intentando de varias formas.

Lo que quiero es que me muestre si está en fase o no.

Disculpe por las molestias y ante todo muchas gracias.
perl biología
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2015-06-03 09:53 @453

ORF

Notapor perl biología » 2015-06-15 14:41 @653

He diseñado un programa que dada un secuencia, encuentra el triplete de inicio ATG y el de parada.

#!/usr/bin/perl
use strict;
use warnings;

# Leer el fichero

my $sequence = 'AAATTTTTTATGCCCTTTATGGGGTTTTAGTGACCCGGGTG';
my $i = 0;
my @orfs = $sequence =~ /(ATG(?:.{3})*?)(TAA|TAG|TGA|.{1,3}$)/g ;

foreach my $orf (@orfs) {

{
my @tripletes = ( $orf =~ m/\w{3}/g );
my $nueva_secuencia = join "-", @tripletes;
print $orf. "\n\n";
$i++;
}
}
print $i. "\n";

En este caso me sale por el terminal:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
i@usuario ~
$ ./prueba.pl
ATGCCCTTTATGGGGTTT

TAG

2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

que sería la secuencia empezando por ATG hasta llegar al codón de parada TAG. Me muestra también el codón de parada TAG.

Pero tengo un problema que no entiendo: ¿Qué significa el 2 que sale por el terminal?

Cuando cambio la secuencia y pongo 'AAATTTTTTATGCGCCTTTATGGGGTTTTAGTGACCCGGGTG y no está en fase me saldría esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
i@usuario ~
$ ./prueba.pl
ATGCGCCTTTATGGGGTTTTAGTGACCCGG

GTG

2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


por lo que ahora me sale GTG que no es el codón de parada, y me muestra la secuencia desde ATG hasta el codón final.

Yo quería que sólo me muestre la secuencia de tres en tres a partir de ATG hasta el codón de parada. ¿Qué me está fallando?

Muchas gracias.
perl biología
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2015-06-03 09:53 @453

Re: Encontrar secuencia y contar de tres en tres

Notapor explorer » 2015-06-15 17:11 @758

A ver... dices que has diseñado un programa, pero que no sabes de dónde sale el último '2'... ¿no es extraño? Más bien suena a que has cogido retales de programas y los estás intentando casar :)

El '2' sale del último print(), indicando que son dos ORF los encontrados.

Por otra parte, la secuencia de tripletas (codones) está almacenada en la variable $nueva_secuencia, que ni siquiera llegas a mostrar en pantalla.

Yo creo que lo que quieres es esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4.  
  5. #my $sequence = 'AAATTTTTTATGCCCTTTATGGGGTTTTAGTGACCCGGGTG';
  6. my $sequence = 'AAATTTTTTATGCGCCTTTATGGGGTTTTAGTGACCCGGGTG';
  7.  
  8. my @orfs = $sequence =~ /\G(?:.{3})*?(ATG(?:.{3})*?(?:TAA|TAG|TGA|.{1,3}$))/g;
  9.  
  10. foreach my $orf (@orfs) {
  11.  
  12.     my @tripletes = $orf =~ m/(\w{3})/g;
  13.  
  14.     my $nueva_secuencia = join "-", @tripletes;
  15.  
  16.     print "$nueva_secuencia\n\n";
  17. }
  18.  
  19. print "Encontradas ", scalar(@orfs), " secuencias\n";
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4
Ahí estoy utilizando la expresión regular de este otro comentario, que sirve para localizar secuencias siempre en múltiplo de 3 posiciones. Si no fuera por el ancla '\G', podríamos encontrar secuencias fuera de ese orden.

Y el segundo caso, en el que no se encuentra codón de parada, pues por defecto se devuelve desde ATG hasta el final. Si no es lo que quieres, pues entonces habrá que tener un caso especial y modificar el programa.
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: Encontrar secuencia y contar de tres en tres

Notapor perl biología » 2015-06-16 06:38 @318

El dos sé que sale del último print, solo que lo que yo quería que me mostrase no me lo mostraba y no entendía bien por qué me salía el dos, y cuando no, me daba 0 al modificar la secuencia.

Pero ante la duda lo quité ya que no llegaba a mi fin.

Gracias por la corrección.
perl biología
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2015-06-03 09:53 @453


Volver a Bioinformática

¿Quién está conectado?

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

cron