diff --git a/java/src/net/sf/samtools/BAMFileIndex2.java b/java/src/net/sf/samtools/BAMFileIndex2.java index 5b303da03..1def4e694 100644 --- a/java/src/net/sf/samtools/BAMFileIndex2.java +++ b/java/src/net/sf/samtools/BAMFileIndex2.java @@ -106,7 +106,7 @@ public class BAMFileIndex2 extends BAMFileIndex final int level = getLevelForBinNumber(bin.binNumber); final int levelStart = LEVEL_STARTS[level]; final int levelSize = ((level==getNumIndexLevels()-1) ? MAX_BINS-1 : LEVEL_STARTS[level+1]) - levelStart; - return (bin.binNumber - levelStart)*(BIN_SPAN/levelSize); + return (bin.binNumber - levelStart)*(BIN_SPAN/levelSize)+1; } /** @@ -118,7 +118,7 @@ public class BAMFileIndex2 extends BAMFileIndex final int level = getLevelForBinNumber(bin.binNumber); final int levelStart = LEVEL_STARTS[level]; final int levelSize = ((level==getNumIndexLevels()-1) ? MAX_BINS-1 : LEVEL_STARTS[level+1]) - levelStart; - return (bin.binNumber - levelStart + 1)*(BIN_SPAN/levelSize) - 1; + return (bin.binNumber-levelStart+1)*(BIN_SPAN/levelSize); } /** @@ -213,25 +213,9 @@ public class BAMFileIndex2 extends BAMFileIndex } List chunkList = new ArrayList(); - for(Bin coveringBin: binTree) - chunkList.addAll(binToChunks.get(coveringBin)); - - // Find the nearest adjacent bin. This can act as a minimum offset - Bin closestAdjacentBin = null; - for(Bin adjacentBin: allBins) { - if(getLevelForBinNumber(adjacentBin.binNumber) != binLevel) - continue; - if(adjacentBin.binNumber= 0) { - if(location%2==0) { - trimmedChunkArray = new long[chunkArray.length-location]; - System.arraycopy(chunkArray,location,trimmedChunkArray,0,trimmedChunkArray.length); - } - else { - trimmedChunkArray = new long[chunkArray.length-location-1]; - System.arraycopy(chunkArray,location+1,trimmedChunkArray,0,trimmedChunkArray.length); - } - } - else { - location = -(location+1); - if(location < chunkArray.length) { - if(location%2==0) { - trimmedChunkArray = new long[chunkArray.length-location]; - System.arraycopy(chunkArray,location,trimmedChunkArray,0,trimmedChunkArray.length); - } - else { - trimmedChunkArray = new long[chunkArray.length-location+1]; - trimmedChunkArray[0] = adjacentBinOffset; - System.arraycopy(chunkArray,location,trimmedChunkArray,1,trimmedChunkArray.length-1); - } - } - } - - return trimmedChunkArray; + return convertToArray(chunkList); } /** @@ -296,8 +247,10 @@ public class BAMFileIndex2 extends BAMFileIndex } List chunkList = new ArrayList(); - for(Bin bin: bins) - chunkList.addAll(binToChunks.get(bin)); + for(Bin bin: bins) { + for(Chunk chunk: binToChunks.get(bin)) + chunkList.add(chunk.clone()); + } if (chunkList.isEmpty()) { return null; diff --git a/java/src/net/sf/samtools/Chunk.java b/java/src/net/sf/samtools/Chunk.java index f5109a3eb..ee9ae4a5d 100644 --- a/java/src/net/sf/samtools/Chunk.java +++ b/java/src/net/sf/samtools/Chunk.java @@ -12,7 +12,7 @@ import java.util.ArrayList; * @author mhanna * @version 0.1 */ -public class Chunk implements Comparable { +public class Chunk implements Cloneable,Comparable { private long mChunkStart; private long mChunkEnd; @@ -22,6 +22,10 @@ public class Chunk implements Comparable { mChunkEnd = end; } + protected Chunk clone() { + return new Chunk(mChunkStart,mChunkEnd); + } + public long getChunkStart() { return mChunkStart; } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java index 8a17cbc64..b4dcab9a1 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java @@ -120,13 +120,6 @@ public class IndexDelimitedLocusShardStrategy implements ShardStrategy { */ public IndexDelimitedLocusShard next() { FilePointer nextFilePointer = filePointerIterator.next(); - String contig = null; - long start = Long.MAX_VALUE, stop = 0; - for(GenomeLoc loc: nextFilePointer.locations) { - contig = loc.getContig(); - start = Math.min(loc.getStart(),start); - stop = Math.max(loc.getStop(),stop); - } Map> chunksBounding = blockDrivenDataSource.getFilePointersBounding(nextFilePointer.bin); return new IndexDelimitedLocusShard(nextFilePointer.locations,chunksBounding,Shard.ShardType.LOCUS_INTERVAL); }