[Bioperl-l] significant bug with Bio::LocatableSeq

Chris Fields cjfields at illinois.edu
Fri Oct 17 01:28:57 UTC 2008


Michael,

You can easily remove the -end call as the end will be calculated from  
the start position and the number of residues (non-gap positions),  
though it may be a good idea to initially test passing it in to make  
sure the gaps are being called correctly.

The LocatableSeq bug in question wasn't explicitly checking for a  
miscalculated end even though it appeared to, so it was particularly  
nasty as several modules were either passing in the wrong -end or the  
gap symbols were not correctly set (so LocatableSeq incorrectly  
checked the ends).  There are still a few issues to work out.   
Primarily, we need a workaround for LocatableSeqs derived from HSPs  
where the sequences are translated, so we need to either bypass the  
end point check or work in a tuple when calculating the end.

chris

On Oct 15, 2008, at 12:55 PM, Michael Kiwala wrote:

> I'd like to add Bio::Assembly::IO::ace to the list of affected
> parsers.  I've been off the list for a while, so I know I'm just
> jumping right in the middle of something, and it's probably bigger
> than I know.  But I'd like to help out anyway. :)
>
> I need some background on LocatableSeq in order to understand the
> problem.  Is it not redundant to pass -start, -end, and -seq?  Seems
> like normally you would only need -start or -end plus the -seq, right?
> Does anyone see a problem with just removing the -end argument to
> Bio::LocatableSeq->new() calls in B:A:IO:ace since the -start and -seq
> are already being provided?
>
> Thanks,
> Michael
>
>
>> On Mon Sep 15 00:13:57 EDT 2008 Chris Fields wrote:
>>
>> While debugging some tests in bioperl, I noticed a fairly significant
>> issue with Bio::LocatableSeq which is probably due to some
>> inconsistencies with start/end coordinates.  For some reason this
>> started popping up with error messages recently when running AlignIO
>> tests on bioperl-live (i.e. something changed which exposed the bug,
>> maybe the verbosity level):
>>
>> 1..295
>> ok 1 - use Bio::AlignIO;
>> ok 2 - The object isa Bio::AlignIO
>> ok 3 - The object isa Bio::Align::AlignI
>> ok 4
>> ok 5
>> ok 6 - The object isa Bio::AlignIO
>>
>> --------------------- WARNING ---------------------
>> MSG: In sequence 02 residue count gives end value 399.
>> Overriding value [355] with value 399 for Bio::LocatableSeq::end().
>> STACK Bio::LocatableSeq::end /Users/cjfields/bioperl/bioperl-live/ 
>> blib/
>> lib/Bio/LocatableSeq.pm:150
>> STACK Bio::LocatableSeq::new /Users/cjfields/bioperl/bioperl-live/ 
>> blib/
>> lib/Bio/LocatableSeq.pm:103
>> STACK Bio::AlignIO::arp::next_aln /Users/cjfields/bioperl/bioperl- 
>> live/
>> blib/lib/Bio/AlignIO/arp.pm:106
>> STACK toplevel t/AlignIO.t:34
>> ---------------------------------------------------
>> .... followed by tons of similar errors.
>>
>> The problem is, no change is ever made.  This is demonstrated by the
>> following:
>>
>> -----------------------------
>> #!/usr/bin/perl -w
>>
>> use strict;
>> use warnings;
>> use Bio::LocatableSeq;
>>
>> my $seq = Bio::LocatableSeq->new(
>>     -id => 'foo',
>>     -seq => 'A----TGCGCTTCCTCGCTTCCG',
>>     -start => 10,
>>     -end => 100, # intentially bad
>>     -strand => -1);
>>
>> print $seq->end."\n";
>>
>> -----------------------------
>>
>> Results:
>>
>> --------------------- WARNING ---------------------
>> MSG: In sequence foo residue count gives end value 28.
>> Overriding value [100] with value 28 for Bio::LocatableSeq::end().
>> STACK Bio::LocatableSeq::end /Users/cjfields/bioperl/bioperl-live/ 
>> Bio/
>> LocatableSeq.pm:150
>> STACK Bio::LocatableSeq::new /Users/cjfields/bioperl/bioperl-live/ 
>> Bio/
>> LocatableSeq.pm:103
>> STACK toplevel seq.pl:7
>> ---------------------------------------------------
>> 100
>>
>> The warning pops up when -end is passed to LocatableSeq::new and
>> indicates that the passed coordinate doesn't match up with the one
>> calculated from the sequence (minus gaps).  I've isolated the bug  
>> down
>> to the end() method and am working on fixing it.  Note that this
>> affects LocatableSeq::length as well.  This appears to affect arp,
>> nexus, stockholm, and a few other AlignIO parsers as well.
>>
>> chris
>
>
> --
> I saved latin.  What did you ever do?
>   -Max Fischer
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l

Christopher Fields
Postdoctoral Researcher
Lab of Dr. Marie-Claude Hofmann
College of Veterinary Medicine
University of Illinois Urbana-Champaign







More information about the Bioperl-l mailing list