[Bioperl-l] How to get Remote BLAST results in a single out

José Luis Lavín joluito at gmail.com
Mon Nov 14 04:21:31 EST 2011


Hello everybody,

I've been using  "Bio::Tools::Run::RemoteBlast" for a time and it has
worked fine for me. Now I need to perform a multiple BLAST search, but this
time I'd just like to get all the BLAST results in a single out file
instead of having each sequence's report written individually. I've read
the documentation of the module, but due to my short
experience/understanding on complex modules as this one seems to be I can't
figure out where to change the script to achieve my previously mentioned
aim.
Here I post the script I've been using (it's basically the one posted on
the module cookbook).

#!/c:/Perl -w
use Bio::Tools::Run::RemoteBlast;
use Bio::SearchIO;
use Data::Dumper;

#Here i set the parameters for blast
print "Enter your BLAST choice (blastn, blastp, blastx, tblastn,
tblastx):\n";
my $blst = <STDIN>;
my $prog = "$blst";
print "Enter a database to search (nr, refseq_protein, swissprot, pat, pdb,
env_nr):\n";
my $dtb = <STDIN>;
$db = "$dtb";
print "Enter your cutt off score (1e-n):\n";
my $cut = <STDIN>;
my $e_val = "$cut";

my @params = ( '-prog' => $prog,
         '-data' => $db,
         '-expect' => $e_val,
         '-readmethod' => 'SearchIO' );

my $remoteBlast = Bio::Tools::Run::RemoteBlast->new(@params);


#Select the file and make the blast.
print "Enter your FASTA file:\n";
chomp(my $infile = <STDIN>);
my $r = $remoteBlast->submit_blast($infile);
  my $v = 1;

    print STDERR "waiting..." if( $v > 0 );  ########  WAIT FOR THE RESULTS
TO RETURN!!!!!
    while ( my @rids = $remoteBlast->each_rid ) {
      foreach my $rid ( @rids ) {
        my $rc = $remoteBlast->retrieve_blast($rid);
        if( !ref($rc) ) {
          if( $rc < 0 ) {
            $remoteBlast->remove_rid($rid);
          }
          print STDERR "." if ( $v > 0 );
          sleep 5;
        } else {
          my $result = $rc->next_result();
          #save the output
          my $filename =
$result->query_name()."\.out";##################open SALIDA,
'>>'."$^T"."Report"."\.out";
          $remoteBlast->save_output($filename);#############
          $remoteBlast->remove_rid($rid);
          print "\nQuery Name: ", $result->query_name(), "\n";
          while ( my $hit = $result->next_hit ) {
            next unless ( $v > 0);
            print "\thit name is ", $hit->name, "\n";
            while( my $hsp = $hit->next_hsp ) {
              print "\t\tscore is ", $hsp->score, "\n";
            }
          }
        }
      }
    }


May any of you please explain me how to solve my question?

Thanks in advence

With best wishes

-- 
-- 
Dr. José Luis Lavín Trueba

Dpto. de Producción Agraria
Grupo de Genética y Microbiología
Universidad Pública de Navarra
31006 Pamplona
Navarra
SPAIN



More information about the Bioperl-l mailing list