Problema con los frames y los ORF
Publicado: 2012-04-14 01:14 @093
Hola a todos
¡Espero que estén bien!
Resulta que estoy programando un script para anotar un genoma. Para eso busco los ORF en cada marco, los traduzco y los guardo en un archivo FASTA.
El problema es que el marco 1 y 2 me dan las mismas proteínas, y no entiendo por qué, ya que el marco 0 me funciona sin problemas. Lo mismo me pasa con los reversos complementarios.
Aquí está mi código:
¡Espero que estén bien!
Resulta que estoy programando un script para anotar un genoma. Para eso busco los ORF en cada marco, los traduzco y los guardo en un archivo FASTA.
El problema es que el marco 1 y 2 me dan las mismas proteínas, y no entiendo por qué, ya que el marco 0 me funciona sin problemas. Lo mismo me pasa con los reversos complementarios.
Aquí está mi código:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- use Bio::Seq;
- use Bio::SeqIO;
- my $obj_fasta = Bio::SeqIO->new(-file => "NC_008512.ffa",
- -format => 'fasta');
- my $ob = $obj_fasta->next_seq;
- my $seq_obj= Bio::Seq->new(-display_id => $ob->id,
- -seq => $ob->seq,
- -alphabet => 'dna'
- );
- my $j=0;
- my $frame;
- for(my $i=0; $i<6;$i++){ # Busca proteínas en los 6 marcos de lectura
- if($i==3){
- $j=0;
- }
- if($i<=2){ # obtiene los tres primeros marcos directos
- $frame = substr($seq_obj->seq, $j,$seq_obj->length);
- open(MIFICH,">frame_$j.txt"); # se crea un archivo para cada frame
- }
- else{ # obtiene los tres marcos reversos complementarios
- $frame = substr($seq_obj->revcom->seq, $j,$seq_obj->length);
- open(MIFICH,">frame_-$j.txt"); # se crea un archivo para cada frame
- }
- $j++;
- my @orfs = $frame =~ /(ATG(?:.{3})*?(?:TAA|TAG|TGA|.{1,3}$))/g; # hace match con todos los ORF que encuentre
- foreach my $orf (@orfs) {
- if((length($orf))>=240){ # proteínas con largo >= a 80 aminoácidos
- my $prot_ob= Bio::Seq->new( # se crea un objeto secuencia con el ORF
- -seq => $orf,
- -alphabet => 'dna'
- );
- if($i<=2){ # posición dentro del genoma del ORF directo
- my $start = index($seq_obj->seq, $prot_ob->seq);
- my $end = $start + length($prot_ob->seq);
- print MIFICH "$start $end \n";
- }
- else{ # posición dentro del genoma del ORF reverso
- my $start = index($seq_obj->seq, $prot_ob->revcom->seq);
- my $end = $start + length($prot_ob->seq);
- print MIFICH "$end $start \n";
- }
- print MIFICH $prot_ob->seq->translate(-condotable=>11)->seq."\n\n"; # imprime la proteína en el archivo fasta generado para su respectivo frame
- }
- }
- }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4