[Bioperl-l] Problems with Bio::SearchIO
cjfields at illinois.edu
Tue Nov 11 09:47:15 EST 2008
On Nov 11, 2008, at 1:59 AM, Sendu Bala wrote:
> Chris Fields wrote:
>> On Nov 10, 2008, at 4:29 PM, Dan Bolser wrote:
>>> 2008/11/7 Chris Fields <cjfields at illinois.edu>:
>>>> On Nov 7, 2008, at 8:27 AM, Dan Bolser wrote:
>>>>> Looking closer I found that $parser->result_count() only gets set
>>>>> after calling $parser->next_result. Any way to force this? In some
>>>>> Perl objects I've seen a 'parse' method that kicks the object into
>>>>> (silently) calling all its get methods. Is there an equivalent
>>>>> apparently undocumented) method? Actually, I think it should kick
>>>>> itself when called... or not? Certainly the docs do not suggest
>>>>> is won't return a the number of results ("Function: Gets the
>>>>> number of
>>>>> Blast results that have been parsed.") So I think this is a bug.
>>>> We could make it so that the result_count() is eager (parses the
>>>> results and
>>>> reports the total back). Not sure, but we could optionally cache
>>>> already-parsed Result objects (that could run into memory issues
>>>> if one is
>>>> parsing a ton of reports, so it needs to be off by default).
>>> I see (I think). Anyone first calling result_count() and *then*
>>> iterating over the results is getting a performance hit by
>>> parsing the results twice? I would suggest that you make this
>>> eager, but document the potential performance issue so that people
>>> choose not to call it first. However, I don't think I can have
>>> understood correctly. How can its value be set correctly after
>>> next() only once?
>> It's highly possible that result_count() is meant to indicate total
>> ResultI iteration parsed up to the point of being called (as
>> opposed to the total number of ResultI), but that isn't made
>> exactly clear.
> Yes, this is the case. I always thought that was pretty unambiguous
> from the function description. "the number of Blast results that
> have been parsed". Not "the number of Blast results".
We'll leave as is then and try implementing it blastxml.
More information about the Bioperl-l