[Bioperl-l] remoteblast

Chris Fields cjfields at illinois.edu
Sun Mar 7 09:57:43 EST 2010


Roopa,

I committed a fix for this a few days ago; if you update from SVN it should work.  The problem stemmed from server-side changes at NCBI.

chris

On Mar 7, 2010, at 7:11 AM, Roopa Raghuveer wrote:

> Hello Mark and everybody,
> 
> I have been trying to connect to remote blast to retrieve similar sequences
> to a given sequence. But my program is unable to retrieve the sequences from
> BLAST, i.e., it is getting executed till the remote blast ids, but it is not
> entering the else loop after collecting the rid. Please check this problem
> and help me in this regard. I think the problem is in getting the sequence
> and going to the 'else' part. i.e.,
> 
> else {
> 
>              open(OUTFILE,'>',$blastdebugfile);   # I think the problem is
> in else part, i.e., it is not taking the next result.#
>              print OUTFILE "else entered";
>              close(OUTFILE);
> 
>          my $result = $rc->next_result();
> 
>            #save the output
> 
> Please give me your reply.
> 
> Thanks and regards,
> Roopa.
> 
> My code is as follows.
> 
> #!/usr/bin/perl
> 
> #path for extra camel module
> use lib "/srv/www/htdocs/rain/RNAi/";
> use rnai_blast;
> 
> 
> use Bio::SearchIO;
> use Bio::Search::Result::BlastResult;
> use Bio::Perl;
> use Bio::Tools::Run::RemoteBlast;
> use Bio::Seq;
> use Bio::SeqIO;
> use Bio::DB::GenBank;
> 
> $serverpath = "/srv/www/htdocs/rain/RNAi";
> $serverurl = "http://141.84.66.66/rain/RNAi";
> $outfile = $serverpath."/rnairesult_".time().".html";
> $nuc = $serverpath."/nuc".time().".txt";
> $debugfile = $serverpath."/debug_".time().".txt";
> $blastdebugfile = $serverpath."/blastdebug_".time().".txt";
> 
> my $outstring ="";
> 
> &parse_form;
> 
> print "Content-type: text/html\n\n";
> print "<HTML>\n";
> print "<head><title>RNAi Result</title>";
> print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"30;
> URL=$serverurl/rnairesult_".time().".html\"> \n";
> print "</head>\n";
> print "<body>\n";
> print " Your results will appear <a
> href=$serverurl/rnairesult_".time().".html>here</a><br>";
> print " Please be patient, runtime can be up to 5 minutes<br>";
> print " This page will automatically reload in 30 seconds.";
> print "</BODY>\n";
> print "</HTML>\n";
> 
> defined(my $pid = fork) or die "Can't fork: $!";
> exit if $pid;
> open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
> open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
> open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
> 
> 
> 
> open(OUTFILE, '>',$outfile);
> 
> print OUTFILE "<HTML>\n
> <head><title>RNAi Result</title>
> <META HTTP-EQUIV=\"Refresh\" CONTENT=\"30;
> URL=$serverurl//rnairesult_".time().".html\"> \n
> <meta http-equiv=\"expires\" content=\"0\">
> </head>\n
> <body>\n
>  Your results will appear <a
> href=$serverurl/rnairesult_".time().".html>here</a><br>
>  Please be patient, runtime can be up to 5 minutes <br>
> This page will automatically reload in 30 seconds  <br>
> </BODY>\n
> </HTML>\n";
> 
> close(OUTFILE);
> 
> @compseqs = blastcode($in{'Inputseq'},$in{'Organism'});
> 
> $in{'Inputseq'} =~ s/>.*$//m;
> $in{'Inputseq'} =~ s/[^TAGC]//gim;
> $in{'Inputseq'} =~ tr/actg/ACTG/;
> 
> @out = similar($in{'Inputseq'}, \@compseqs, $in{'Windowsize'},
> $in{'Threshold'});
> 
> 
> sub blastcode
> {
> 
> $inpu1= $_[0];
> 
> $organ= $_[1];
> 
> open(NUC,'>',$nuc);
> print NUC $inpu1,"\n";
> close(NUC);
> 
> my $prog = 'blastn';
> my $db   = 'refseq_rna';
> my $e_val= '1e-10';
> my $organism= $organ;
> 
> $gb = new Bio::DB::GenBank;
> 
> my @params = ( '-prog' => $prog,
>         '-data' => $db,
>         '-expect' => $e_val,
>         '-readmethod' => 'SearchIO',
>         '-Organism'   => $organism );
> 
>             open(OUTFILE,'>',$blastdebugfile);
>               print OUTFILE @params;
>              close(OUTFILE);
> 
> 
> my $factory = Bio::Tools::Run::RemoteBlast->new(@params, -ENTREZ_QUERY =>
> "$organ\[ORGN]");
> 
> #my $factory = Bio::Tools::Run::RemoteBlast->new(@params);
> 
>  #change a paramter
> 
> #$Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = 'Trypanosoma
> Brucei[ORGN]';
> 
> #change a paramter
> # $Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = '$input2[ORGN]';
> 
>  my $v = 1;
>  #$v is just to turn on and off the messages
> 
> my $str = Bio::SeqIO->new('-file' => $nuc , '-format' => 'fasta' ,
> '-organism' => "$organ\[ORGN]");
> 
> while (my $input = $str->next_seq())
> {
>   #Blast a sequence against a database:
>    #Alternatively, you could  pass in a file with many
>    #sequences rather than loop through sequence one at a time
>    #Remove the loop starting 'while (my $input = $str->next_seq())'
>    #and swap the two lines below for an example of that.
>             open(OUTFILE,'>',$debugfile);
>             print OUTFILE $input;
>              close(OUTFILE);
> 
> #submits the input data to BLAST#
> 
>   my $r = $factory->submit_blast($input);
> 
>                open(OUTFILE,'>',$debugfile);
>                print OUTFILE $r;
>                close(OUTFILE);
> 
> 
>   print STDERR "waiting...." if($v>0);
> 
>  while ( my @rids = $factory->each_rid ) {
>      open(OUTFILE,'>',$debugfile);
>          #    print OUTFILE "while entered";
>              close(OUTFILE);
>     foreach my $rid ( @rids ) {
> 
>               open(OUTFILE,'>',$debugfile);
>           #    print OUTFILE "foreach entered";
>              close(OUTFILE);
> #Retrieving the result ids#
> 
>        my $rc = $factory->retrieve_blast($rid);
> 
>        if( !ref($rc) )
>        {
>        if( $rc < 0 )
>        {
>        $factory->remove_rid($rid);
>        }
>         open(OUTFILE,'>',$debugfile);
>             #  print OUTFILE "if entered";
>              close(OUTFILE);
>         print STDERR "." if ( $v > 0 );
>         sleep 5;
>        }
> 
>       else {
> 
>              open(OUTFILE,'>',$blastdebugfile);   # I think the problem is
> in else part, i.e., it is not taking the next result.#
>              print OUTFILE "else entered";
>              close(OUTFILE);
> 
>          my $result = $rc->next_result();
> 
>            #save the output
>          $blastdebugfile = $serverpath."/blastdebug_".time().".txt";
> 
>          open(BLASTDEBUGFILE,'>',$blastdebugfile);
>          print BLASTDEBUGFILE $result->next_hit();
>          close(BLASTDEBUGFILE);
> #saving the output in blastdata.time.out file#
> 
>      # $random=rand();
> 
>        my $filename = $serverpath."/blastdata_".time()."\.out";
>   # open(DEBUGFILE,'>',$debugfile);
>         # open(new,'>',$filename);
>         # @arra=<new>;
>         # print DEBUGFILE @arra;
>         # close(DEBUGFILE);
>         # close(new);
> 
>         $factory->save_output($filename);
> 
>       # open(BLASTDEBUGFILE,'>',$debugfile);
>       # print BLASTDEBUGFILE  "Hello $rid";
>       # close(BLASTDEBUGFILE);
> 
>       $factory->remove_rid($rid);
> 
>       open(BLASTDEBUGFILE,'>',$blastdebugfile);
>     #  print BLASTDEBUGFILE  $organism;
>        close(BLASTDEBUGFILE);
> 
>    # open(OUTFILE,'>',$outfile);
>    # print OUTFILE "Test2 $result->database_name()";
>    # close(OUTFILE);
> 
> #$hit = $result->next_hit;
> #open(new,'>',$debugfile);
> #print $hit;
> #close(new);
> $dummy=0;
>   while ( my $hit = $result->next_hit ) {
> 
>            next unless ( $v >= 0);
> 
>          #     open(OUTFILE,'>',$debugfile);
>           #    print OUTFILE "$hit in while hits";
>            #  close(OUTFILE);
> 
>       my $sequ = $gb->get_Seq_by_version($hit->name);
>           my $dna = $sequ->seq(); # get the sequence as a string
>        $dummy++;
>             open(OUTFILE,'>',$debugfile);
>          #     print OUTFILE $dna;
>              close(OUTFILE);
>          push(@seqs,$dna);
>         }
>        }
>      }
>    }
>  }
> 
> $warum=@seqs;
>              open(OUTFILE,'>',$debugfile);
>             #  print OUTFILE $warum;
>               print OUTFILE @seqs;
>              close(OUTFILE);
> 
> 
> return(@seqs);   #returning the sequences obtained on BLAST#
> }
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l




More information about the Bioperl-l mailing list