[Bioperl-l] results problem with StandAloneBlast

Jason Stajich jason.stajich at duke.edu
Sat Jun 3 11:29:31 EDT 2006


you can get all the Hits or hsps with the following method:
my @hits = $result->hits;
my @hsps = $hit->hsps;


You can also reset the counter since these implementations are in- 
memory and already parsed (and not a stream processor per se).   
next_XX just iterates through the list stored in the parent object.

$result->rewind;

   and

$hit->rewind;


For example, the rewind needs to be called if you want to use a  
ResultWriter object and filter some of the values for the final  
writing after first inspecting them.

-jason


On May 30, 2006, at 12:57 PM, Genevieve DeClerck wrote:

> Thanks for your comment Sendu, it was very helpful. I think this  
> must be
> what's going on.. I am using $blast_report->next_result in both
> subroutines. It appears that analyzing the blast results first w/ my
> sort subroutine empties (?) the $blast_result object so that when I  
> try
> to print, there is nothing left to print. (and visa-versa when I print
> first then try to sort).
> So, from the looks of things, using next_result has the effect of
> popping the Bio::Search::Result::ResultI objects off of the SearchIO
> blast report object??
>
> It seems I could get around this by making a copy of the blast  
> report by
> setting it to another new variable...(not the most elegant  
> solution) but
> I'm having trouble with this...
>
> If I do:
>
> 	my $blast_report_copy = $blast_report;
>
> I'm just copying the reference to the SearchIO blast result, so it
> doesn't help me. How can I make another physical copy of this blast
> result object? Seems like a simple thing but how to do it is  
> escaping me.
>
> But better yet, the way to go is to 'reset the counter,' or to find a
> way to look at/print/sort the results without removing data from the
> blast result object. How is this done though??
>
> Sendu and Brian, I didn't post the sort_results subroutine because  
> it is
> sprawling, as is a lot of my code. The code I provided was more  
> like an
> aid for my explanation of the problem.. it doesn't actually run -  
> sorry
> for the confusion, I should have more clear on that.  The important
> thing to know perhaps is that both sort_results and  
> print_blast_results
> contain a foreach loop where I am using the 'next_results' method to
> view blast results. (And to clarify for Torsten, the blastall() is
> working just fine - the analysis/viewing of the results object is  
> where
> I am encountering the problem.)
>
>
> Any other ideas would be greatly appreciated...
>
> Thank you,
> Genevieve
>
>
>
>
> Sendu Bala wrote:
>
>> Genevieve DeClerck wrote:
>>
>>> Hi,
>>
>> [snip]
>>
>>> 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.
>>
>> [snip]
>>
>>> Here's an abbreviated version of my code:
>>
>> [snip]
>>
>>> #######
>>> ### 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()){
>>
>> [snip]
>>
>> You didn't give us your sort_results subroutine, but is it as  
>> simple as
>> they both use $report->next_result (and/or $result->next_hit), but  
>> you
>> don't reset the internal counter back to the start, so the second
>> subroutine tries to get the next_result and finds the first  
>> subroutine
>> has already looked at the last result and so next_result returns  
>> false?
>>
>>  From a quick look it wasn't obvious how to reset the counter.  
>> Hopefully
>> this can be done and someone else knows how.
>>
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l

--
Jason Stajich
Duke University
http://www.duke.edu/~jes12




More information about the Bioperl-l mailing list