[Biojava-l] RichLocation.Tools.merge(Collection members) method
Mark Schreiber
markjschreiber at gmail.com
Sat Mar 1 02:30:42 UTC 2008
Hi -
This could be a corner case. Can you provide the code that actually
generates this error?
- Mark
On Sat, Mar 1, 2008 at 12:58 AM, Arnaud Kerhornou <arnaud at ebi.ac.uk> wrote:
> Hi everyone,
>
> I don't think the RichLocation.Tools.merge(Collection members) method is
> doing it right.
>
> e.g. Input:
> biojavax:join:[1157624..1158025,1158025..1158420,1158420..1158893]
> Expected output:1157624..1158895
>
> But I get: join:[1157624..1158420,1158420..1158894]
>
> I think the code should have the extra line: parent = union;
> just after c=p; statement line 18 (See source code below),
> otherwise it doesn't take into account the newly generated location.
>
> Is that right ?
>
> Thanks
> Arnaud
>
> Source code:
>
> 1 public static Collection merge(Collection members) {
> 2 // flatten them out first so we don't end up recursing
> 3 List membersList = new ArrayList(flatten(members));
> 4 // all members are now singles so we can use single vs
> single union operations
> 5 if (membersList.size()>1) {
> 6 for (int p = 0; p < (membersList.size()-1); p++) {
> 7 RichLocation parent = (RichLocation)membersList.get(p);
> 8 for (int c = p+1; c < membersList.size(); c++) {
> 9 RichLocation child =
> (RichLocation)membersList.get(c);
> 10 RichLocation union =
> (RichLocation)parent.union(child);
> 11 // if parent can merge with child
> 12 if (union.isContiguous()) {
> 13 // replace parent with union
> 14 membersList.set(p,union);
> 15 // remove child
> 16 membersList.remove(c);
> 17 // check all children again
> 18 c=p;
> 19 }
> 20 }
> 21 }
> 22 }
> 23 return membersList;
> 24 }
>
> _______________________________________________
> Biojava-l mailing list - Biojava-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/biojava-l
>
More information about the Biojava-l
mailing list