diff --git a/java/src/org/broadinstitute/sting/utils/RefHanger.java b/java/src/org/broadinstitute/sting/utils/RefHanger.java index 41c5f8439..fe5278d02 100755 --- a/java/src/org/broadinstitute/sting/utils/RefHanger.java +++ b/java/src/org/broadinstitute/sting/utils/RefHanger.java @@ -85,7 +85,8 @@ public class RefHanger { } protected int getRightOffset() { - return hangers.size() - 1; + //return hangers.size() - 1; + return isEmpty() ? 0 : hangers.size() - 1; } protected int getOffset(GenomeLoc loc) { @@ -101,6 +102,10 @@ public class RefHanger { return hangers.get(getRightOffset()).loc; } + public GenomeLoc getLoc(int i) { + return hangers.get(i).loc; + } + public boolean hasLocation(GenomeLoc loc) { return !isEmpty() && loc.isBetween(getLeftLoc(), getRightLoc()); } @@ -160,6 +165,14 @@ public class RefHanger { return hangers.size(); } + public String toString() { + StringBuilder s = new StringBuilder(); + for ( int i = 0; i < size(); i++) { + s.append(String.format("%s => %s%n", getLoc(i), Utils.join(",", getHanger(i).data))); + } + return s.toString(); + } + // ----------------------------------------------------------------------------------------------------------------- // // Adding data to the left and right @@ -178,6 +191,10 @@ public class RefHanger { hangers.add(0, new Hanger(pos, data)); } + public void pushLeft(GenomeLoc pos, List data) { + hangers.add(0, new Hanger(pos, new ArrayList(data))); + } + public void pushRight(GenomeLoc pos) { pushRight(pos, new ArrayList()); } @@ -213,6 +230,17 @@ public class RefHanger { } } + public void addDataList(List positions, List> dataByPos) { + assert (positions.size() == dataByPos.size()); + + for (int i = 0; i < positions.size(); i++) { + GenomeLoc pos = positions.get(i); + for ( T datum : dataByPos.get(i) ) { + expandingPut1(pos, datum); + } + } + } + public void expandingPut1(final GenomeLoc loc, T datum) { ensurePos(loc); extendData(loc, datum);