[Bioperl-l] Regarding Organism based search in Remote blast

Roopa Raghuveer rtbio.2009 at gmail.com
Fri Dec 4 13:57:21 UTC 2009


Hello all,

I am working on Remote blast.Here,I am trying to get 2 parameters into the
remote blast code.They are

1.The input sequence that has to be sent to blast

2.Organism (The organism which has to be searched for ex:-Trypanasoma brucei
etc.,)

When I tried to take the organism parameter as an input from the
user,through a web page,the Remote blast was not giving any results i.e., it
says that there are no alignments found.

But,when I hard coded the organism in the code,it gives me the results i.e.,
3hits.

I could not understand this problem.Could any body please help me in this
regard?

My code is

sub blastcode
{

$input1= $_[0];

$organ= $_[1];

open(NUC,'>',$nuc);
print NUC $input1;
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,'>',$debugfile);
               print OUTFILE @params;
              close(OUTFILE);


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

  #change a paramter
 $Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = '$organism[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' => $organism );

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.

   my $r = $factory->submit_blast($input);

   # my $r = $factory->submit_blast('amino.fa');

   print STDERR "waiting...." if($v>0);

  while ( my @rids = $factory->each_rid ) {

     foreach my $rid ( @rids ) {

        my $rc = $factory->retrieve_blast($rid);

        if( !ref($rc) )
        {
        if( $rc < 0 )
        {
        $factory->remove_rid($rid);
        }
         print STDERR "." if ( $v > 0 );
         sleep 5;
        }
       else {
          my $result = $rc->next_result();
         #save the output
        $blastdebugfile = $serverpath."/blastdebug_".time().".txt";

      #    open(BLASTDEBUGFILE,'>',$debugfile);
       #   print BLASTDEBUGFILE $result->next_hit();
        #  close(BLASTDEBUGFILE);

        my $filename =
$serverpath."/blastdata_".time().$result->query_name()."\.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);

   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
                  push(@seqs,$dna);
          }
        }
      }
    }
  }

  #open(OUTFILE,'>',$debugfile);
  #print OUTFILE $seqs[0];
  #close(OUTFILE);

return(@seqs);
}

Regards,
Roopa.



More information about the Bioperl-l mailing list