[Bioperl-l] results problem with StandAloneBlast

Genevieve DeClerck gad14 at cornell.edu
Fri May 26 16:02:33 EDT 2006


Hi,

I'm running local blast with Bio::Tools::Run::StandAloneBlast. 
Everything seems to work ok up to the point of accessing the results. I 
am able to print the results but when I try to do more than one thing 
with the result, nothing is returned for the second activity..

I'd like to first sort the results into groups of results that hit the 
db seq once, twice, three times, etc - where the results are stored as 
SeqFeature objects in temporary arrays whose contents are printed 
sequentially to stdout when the whole sort is complete.

Secondly, I need to print the results in Hit Table (i.e. -m 8) format to 
stdout.

If I've sorted the results the sorted-results will print to screen, 
however when I try to print the Hit Table results nothing is returned, 
as if the blast results have evaporated.... and visa versa, if i comment 
out the part where i point my sorting subroutine to the blast results 
reference,  my hit table results suddenly prints to screen. It's almost 
like the reference to the SearchIO obj that holds the StandAloneBlast 
results is lost after one use?? (I'm beginning to think there is 
something naive about the way I'm using references?..)


Here's an abbreviated version of my code:


my $ref_seq_objs; # ref to array of Sequence obj's
my $genome_seq; # fasta containing 1 genomic sequence

my @params = ('program' => 'blastn',
	       'database' => $genome_seq,
                 );
my $factory = Bio::Tools::Run::StandAloneBlast->new(@params);

my $blast_report = $factory->blastall($ref_seq_objs); #OK

#######
### the following 2 actions seem to be mutually exclusive.
# 1) sort results into 1-hitter, 2-hitter, etc. groups of
# SeqFeature objs stored in arrays. arrays are then printed
# to stdout
&sort_results($blast_report);

# 2) print blast results
&print_blast_results($blast_report);
#######


sub print_blast_results{
   my $report = shift;
   while(my $result = $report->next_result()){
     while(my $hit = $result->next_hit()){
       while(my $hsp = $hit->next_hsp()){
	my $q_name = $hsp_q_seq_obj->display_id;
         print join(", ",$q_name,$hit->name,$hsp->bits)."\n";
       }
     }
   }
}


I'm about to lose my mind on this... any assistance appreciated!

Thanks,
Genevieve



More information about the Bioperl-l mailing list