From c0eb5c27eab810da6a0468de818418a379e0828c Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 19 Mar 2010 22:03:47 +0000 Subject: [PATCH] Lower memory support for merged sharding. Merged sharding is still not available. WARNING: If you update frequently, you might have to rm -rf ~/.ant/cache -- this is an unfortunate side effect of the way we distribute picard-private.jar. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3050 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/datasources/BAMFileStat.java | 2 +- .../BlockDelimitedReadShardStrategy.java | 7 +- .../IndexDelimitedLocusShardStrategy.java | 4 +- .../datasources/shards/IntervalSharder.java | 274 +++++++++++++++--- .../BlockDrivenSAMDataSource.java | 94 +----- .../picard-private-parts-1333-sharding.jar | Bin 284842 -> 284835 bytes ...rding.jar => picard-1.16.360-sharding.jar} | Bin 407397 -> 407397 bytes ...rding.xml => picard-1.16.360-sharding.xml} | 2 +- ...sharding.jar => sam-1.16.360-sharding.jar} | Bin 482295 -> 480594 bytes ...sharding.xml => sam-1.16.360-sharding.xml} | 2 +- 10 files changed, 250 insertions(+), 135 deletions(-) rename settings/repository/net.sf/{picard-1.16.359-sharding.jar => picard-1.16.360-sharding.jar} (95%) rename settings/repository/net.sf/{picard-1.16.359-sharding.xml => picard-1.16.360-sharding.xml} (76%) rename settings/repository/net.sf/{sam-1.16.359-sharding.jar => sam-1.16.360-sharding.jar} (88%) rename settings/repository/net.sf/{sam-1.16.359-sharding.xml => sam-1.16.360-sharding.xml} (52%) diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/BAMFileStat.java b/java/src/org/broadinstitute/sting/gatk/datasources/BAMFileStat.java index 8e0b84338..e7e2b65c6 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/BAMFileStat.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/BAMFileStat.java @@ -74,7 +74,7 @@ public class BAMFileStat extends CommandLineProgram { inspector.inspect(System.out,null,null); } - private class BAMFileIndexContentInspector extends BAMFileIndex2 { + private class BAMFileIndexContentInspector extends PreloadedBAMFileIndex { public BAMFileIndexContentInspector(File bamFileIndex) { super(bamFileIndex); } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/shards/BlockDelimitedReadShardStrategy.java b/java/src/org/broadinstitute/sting/gatk/datasources/shards/BlockDelimitedReadShardStrategy.java index 9b9d1d36e..7e92fb7ea 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/BlockDelimitedReadShardStrategy.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/BlockDelimitedReadShardStrategy.java @@ -60,7 +60,7 @@ public class BlockDelimitedReadShardStrategy extends ReadShardStrategy { this.dataSource = (BlockDrivenSAMDataSource)dataSource; this.position = this.dataSource.getCurrentPosition(); if(locations != null) - filePointers.addAll(IntervalSharder.shardIntervals(this.dataSource,locations.toList(),this.dataSource.getNumIndexLevels()-1)); + filePointers.addAll(IntervalSharder.shardIntervals(this.dataSource,locations.toList())); filePointerIterator = filePointers.iterator(); if(filePointerIterator.hasNext()) @@ -91,15 +91,14 @@ public class BlockDelimitedReadShardStrategy extends ReadShardStrategy { } public void advance() { - Map> shardPosition = null; + Map> shardPosition = new HashMap>(); nextShard = null; SamRecordFilter filter = null; if(!filePointers.isEmpty()) { Map> selectedReaders = new HashMap>(); while(selectedReaders.size() == 0 && currentFilePointer != null) { - shardPosition = dataSource.getFilePointersBounding(currentFilePointer.bin); - + shardPosition = currentFilePointer.chunks; for(SAMReaderID id: shardPosition.keySet()) { List chunks = shardPosition.get(id); List selectedChunks = new ArrayList(); 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 4fe69a332..47e95e499 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IndexDelimitedLocusShardStrategy.java @@ -92,7 +92,7 @@ public class IndexDelimitedLocusShardStrategy implements ShardStrategy { this.reads = (BlockDrivenSAMDataSource)reads; - filePointers.addAll(IntervalSharder.shardIntervals(this.reads,intervals,this.reads.getNumIndexLevels()-1)); + filePointers.addAll(IntervalSharder.shardIntervals(this.reads,intervals)); } else { final int maxShardSize = 100000; @@ -130,7 +130,7 @@ public class IndexDelimitedLocusShardStrategy implements ShardStrategy { */ public IndexDelimitedLocusShard next() { FilePointer nextFilePointer = filePointerIterator.next(); - Map> chunksBounding = reads!=null ? reads.getFilePointersBounding(nextFilePointer.bin) : null; + Map> chunksBounding = nextFilePointer.chunks != null ? nextFilePointer.chunks : null; return new IndexDelimitedLocusShard(nextFilePointer.locations,chunksBounding,Shard.ShardType.LOCUS_INTERVAL); } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IntervalSharder.java b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IntervalSharder.java index d152b24ff..91520f842 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/shards/IntervalSharder.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/shards/IntervalSharder.java @@ -2,14 +2,15 @@ package org.broadinstitute.sting.gatk.datasources.shards; import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLocParser; +import org.broadinstitute.sting.utils.StingException; +import org.broadinstitute.sting.utils.GenomeLocSortedSet; import org.broadinstitute.sting.gatk.datasources.simpleDataSources.BlockDrivenSAMDataSource; +import org.broadinstitute.sting.gatk.datasources.simpleDataSources.SAMReaderID; -import java.util.List; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; +import java.util.*; -import net.sf.samtools.Bin; +import net.sf.samtools.*; +import net.sf.picard.util.PeekableIterator; /** * Shard intervals based on position within the BAM file. @@ -18,22 +19,157 @@ import net.sf.samtools.Bin; * @version 0.1 */ public class IntervalSharder { - protected static List shardIntervals(final BlockDrivenSAMDataSource dataSource, final List loci, final int binsDeeperThan) { + protected static List shardIntervals(final BlockDrivenSAMDataSource dataSource, final List loci) { + Map> filePointersByReader = new HashMap>(); + for(SAMReaderID id: dataSource.getReaderIDs()) { + PreloadedBAMFileIndex index = dataSource.getIndex(id); + // Gather bins for the given loci, splitting loci as necessary so that each falls into exactly one lowest-level bin.\ + filePointersByReader.put(id,shardIntervalsOverIndex(dataSource,id,index,loci,index.getNumIndexLevels()-1)); + index.close(); + } + return combineFilePointers(filePointersByReader); + } + + /** + * Combine adjacent file pointers into a structure that can be streamed in. + * @param filePointersByReader File pointers broken down by reader. + * @return A large structure of file pointers. + */ + private static List combineFilePointers(Map> filePointersByReader) { + PeekableIterator mergingIterator = new PeekableIterator(new FilePointerMergingIterator(filePointersByReader)); + + List overlappingFilePointers = new ArrayList(); + List mergedFilePointers = new ArrayList(); + + while(mergingIterator.hasNext()) { + GenomeLoc bounds = null; + + // Load up a segment where file pointers overlap + while(mergingIterator.hasNext() && (overlappingFilePointers.size() == 0 || mergingIterator.peek().getBounds().overlapsP(bounds))) { + FilePointer filePointer = mergingIterator.next(); + if(bounds != null) + bounds = GenomeLocParser.createGenomeLoc(bounds.getContig(), + Math.min(bounds.getStart(),filePointer.getBounds().getStart()), + Math.max(bounds.getStop(),filePointer.getBounds().getStop())); + else + bounds = filePointer.getBounds(); + overlappingFilePointers.add(filePointer); + } + + // determine the complete set of unique locations defining this set. + List overlappingLocations = new ArrayList(); + for(FilePointer filePointer: overlappingFilePointers) + overlappingLocations.addAll(filePointer.locations); + Collections.sort(overlappingLocations); + overlappingLocations = GenomeLocSortedSet.mergeOverlappingLocations(overlappingLocations); + + while(!overlappingLocations.isEmpty()) { + long overlapStart = overlappingLocations.get(0).getStart(); + long overlapStop = overlappingLocations.get(overlappingLocations.size()-1).getStop(); + + for(FilePointer overlappingFilePointer: overlappingFilePointers) { + if(overlappingFilePointer.getBounds().getStop() < overlapStart) + continue; + if(overlappingFilePointer.getBounds().getStart() > overlapStart) overlapStop = Math.min(overlapStop,overlappingFilePointer.getBounds().getStart()-1); + if(overlappingFilePointer.getBounds().getStop() < overlapStop) overlapStop = Math.min(overlapStop,overlappingFilePointer.getBounds().getStop()); + } + + // Find the overlapping genome locs. + List segmentOverlap = new ArrayList(); + for(GenomeLoc overlappingLocation: overlappingLocations) { + if(overlappingLocation.getStop() <= overlapStop) { + // segment is completely before end of overlap. + segmentOverlap.add(overlappingLocation); + } + else if(overlappingLocation.getStart() <= overlapStop) { + // segment is partially before end of overlap. + segmentOverlap.add(GenomeLocParser.setStop(overlappingLocation,overlapStop)); + break; + } + else { + // segment starts after overlap ends. + break; + } + } + + // Trim the overlapping genome locs of the overlapping locations list. + while(!overlappingLocations.isEmpty() && overlappingLocations.get(0).getStart() <= overlapStop) { + GenomeLoc location = overlappingLocations.remove(0); + if(location.getStop() > overlapStop) + overlappingLocations.add(0,GenomeLocParser.setStart(location,overlapStop+1)); + } + + // Merge together all file pointers that overlap with these bounds. + GenomeLoc overlapBounds = GenomeLocParser.createGenomeLoc(segmentOverlap.get(0).getContigIndex(),overlapStart,overlapStop); + FilePointer mergedFilePointer = null; + for(FilePointer overlappingFilePointer: overlappingFilePointers) { + if(overlappingFilePointer.getBounds().overlapsP(overlapBounds)) + mergedFilePointer = overlappingFilePointer.merge(mergedFilePointer,segmentOverlap); + } + + // Add the resulting file pointer and clear state. + mergedFilePointers.add(mergedFilePointer); + } + + // reset + overlappingFilePointers.clear(); + } + + return mergedFilePointers; + } + + private static class FilePointerMergingIterator implements Iterator { + private PriorityQueue> filePointerQueue; + + public FilePointerMergingIterator(Map> filePointers) { + filePointerQueue = new PriorityQueue>(filePointers.size(),new FilePointerMergingComparator()); + for(List filePointersByReader: filePointers.values()) + filePointerQueue.add(new PeekableIterator(filePointersByReader.iterator())); + } + + public boolean hasNext() { + return !filePointerQueue.isEmpty(); + } + + public FilePointer next() { + if(!hasNext()) throw new NoSuchElementException("FilePointerMergingIterator is out of elements"); + PeekableIterator nextIterator = filePointerQueue.remove(); + FilePointer nextFilePointer = nextIterator.next(); + if(nextIterator.hasNext()) + filePointerQueue.add(nextIterator); + return nextFilePointer; + } + + public void remove() { throw new UnsupportedOperationException("Cannot remove from a merging iterator."); } + + private class FilePointerMergingComparator implements Comparator> { + public int compare(PeekableIterator lhs, PeekableIterator rhs) { + if(!lhs.hasNext() && !rhs.hasNext()) return 0; + if(!rhs.hasNext()) return -1; + if(!lhs.hasNext()) return 1; + return lhs.peek().getBounds().compareTo(rhs.peek().getBounds()); + } + } + } + + private static List shardIntervalsOverIndex(final BlockDrivenSAMDataSource dataSource, final SAMReaderID id, final PreloadedBAMFileIndex index, final List loci, final int binsDeeperThan) { // Gather bins for the given loci, splitting loci as necessary so that each falls into exactly one lowest-level bin. List filePointers = new ArrayList(); - FilePointer filePointer = null; + FilePointer lastFilePointer = null; + Bin lastBin = null; for(GenomeLoc location: loci) { // If crossing contigs, be sure to reset the filepointer that's been accumulating shard data. - if(filePointer != null && filePointer.bin.referenceSequence != location.getContigIndex()) { - filePointers.add(filePointer); - filePointer = null; + if(lastFilePointer != null && lastFilePointer.referenceSequence != location.getContigIndex()) { + filePointers.add(lastFilePointer); + lastFilePointer = null; + lastBin = null; } int locationStart = (int)location.getStart(); final int locationStop = (int)location.getStop(); - List bins = findBinsAtLeastAsDeepAs(dataSource,dataSource.getOverlappingBins(location),binsDeeperThan); + List bins = findBinsAtLeastAsDeepAs(index,getOverlappingBins(dataSource,id,index,location),binsDeeperThan); // Recursive stopping condition -- algorithm is at the zero point and no bins have been found. if(binsDeeperThan == 0 && bins.size() == 0) { @@ -43,12 +179,13 @@ public class IntervalSharder { // No bins found; step up a level and search again. if(bins.size() == 0) { - if(filePointer != null && filePointer.locations.size() > 0) { - filePointers.add(filePointer); - filePointer = null; + if(lastFilePointer != null && lastFilePointer.locations.size() > 0) { + filePointers.add(lastFilePointer); + lastFilePointer = null; + lastBin = null; } - filePointers.addAll(shardIntervals(dataSource,Collections.singletonList(location),binsDeeperThan-1)); + filePointers.addAll(shardIntervalsOverIndex(dataSource,id,index,Collections.singletonList(location),binsDeeperThan-1)); continue; } @@ -57,48 +194,51 @@ public class IntervalSharder { Iterator binIterator = bins.iterator(); while(locationStop >= locationStart) { - int binStart = filePointer!=null ? dataSource.getFirstLocusInBin(filePointer.bin) : 0; - int binStop = filePointer!=null ? dataSource.getLastLocusInBin(filePointer.bin) : 0; + int binStart = lastFilePointer!=null ? index.getFirstLocusInBin(lastBin) : 0; + int binStop = lastFilePointer!=null ? index.getLastLocusInBin(lastBin) : 0; while(binStop < locationStart && binIterator.hasNext()) { - if(filePointer != null && filePointer.locations.size() > 0) - filePointers.add(filePointer); + if(lastFilePointer != null && lastFilePointer.locations.size() > 0) + filePointers.add(lastFilePointer); - filePointer = new FilePointer(binIterator.next()); - binStart = dataSource.getFirstLocusInBin(filePointer.bin); - binStop = dataSource.getLastLocusInBin(filePointer.bin); + lastBin = binIterator.next(); + lastFilePointer = new FilePointer(id,lastBin.referenceSequence,getFilePointersBounding(index,lastBin)); + binStart = index.getFirstLocusInBin(lastBin); + binStop = index.getLastLocusInBin(lastBin); } if(locationStart < binStart) { // The region starts before the first bin in the sequence. Add the region occurring before the sequence. - if(filePointer != null && filePointer.locations.size() > 0) { - filePointers.add(filePointer); - filePointer = null; + if(lastFilePointer != null && lastFilePointer.locations.size() > 0) { + filePointers.add(lastFilePointer); + lastFilePointer = null; + lastBin = null; } final int regionStop = Math.min(locationStop,binStart-1); GenomeLoc subset = GenomeLocParser.createGenomeLoc(location.getContig(),locationStart,regionStop); - filePointers.addAll(shardIntervals(dataSource,Collections.singletonList(subset),binsDeeperThan-1)); + filePointers.addAll(shardIntervalsOverIndex(dataSource,id,index,Collections.singletonList(subset),binsDeeperThan-1)); locationStart = regionStop + 1; } else if(locationStart > binStop) { // The region starts after the last bin in the sequence. Add the region occurring after the sequence. - if(filePointer != null && filePointer.locations.size() > 0) { - filePointers.add(filePointer); - filePointer = null; + if(lastFilePointer != null && lastFilePointer.locations.size() > 0) { + filePointers.add(lastFilePointer); + lastFilePointer = null; + lastBin = null; } GenomeLoc subset = GenomeLocParser.createGenomeLoc(location.getContig(),locationStart,locationStop); - filePointers.addAll(shardIntervals(dataSource,Collections.singletonList(subset),binsDeeperThan-1)); + filePointers.addAll(shardIntervalsOverIndex(dataSource,id,index,Collections.singletonList(subset),binsDeeperThan-1)); locationStart = locationStop + 1; } else { // The start of the region overlaps the bin. Add the overlapping subset. final int regionStop = Math.min(locationStop,binStop); - filePointer.addLocation(GenomeLocParser.createGenomeLoc(location.getContig(), + lastFilePointer.addLocation(GenomeLocParser.createGenomeLoc(location.getContig(), locationStart, regionStop)); locationStart = regionStop + 1; @@ -106,43 +246,99 @@ public class IntervalSharder { } } - if(filePointer != null && filePointer.locations.size() > 0) - filePointers.add(filePointer); + if(lastFilePointer != null && lastFilePointer.locations.size() > 0) + filePointers.add(lastFilePointer); return filePointers; } - private static List findBinsAtLeastAsDeepAs(final BlockDrivenSAMDataSource dataSource, final List bins, final int deepestBinLevel) { + private static List findBinsAtLeastAsDeepAs(final PreloadedBAMFileIndex index, final List bins, final int deepestBinLevel) { List deepestBins = new ArrayList(); for(Bin bin: bins) { - if(dataSource.getLevelForBin(bin) >= deepestBinLevel) + if(index.getLevelForBin(bin) >= deepestBinLevel) deepestBins.add(bin); } return deepestBins; } + + /** + * Gets a list of the bins in each BAM file that overlap with the given interval list. + * @param location Location for which to determine the bin. + * @return A map of reader back to bin. + */ + private static List getOverlappingBins(final BlockDrivenSAMDataSource dataSource, final SAMReaderID id, final PreloadedBAMFileIndex index, final GenomeLoc location) { + // All readers will have the same bin structure, so just use the first bin as an example. + final SAMFileHeader fileHeader = dataSource.getHeader(id); + int referenceIndex = fileHeader.getSequenceIndex(location.getContig()); + if (referenceIndex != -1) { + return index.getBinsContaining(referenceIndex,(int)location.getStart(),(int)location.getStop()); + } + return Collections.emptyList(); + } + + /** + * Gets the file pointers bounded by this bin, grouped by the reader of origination. + * @param bin The bin for which to load data. + * @return A map of the file pointers bounding the bin. + */ + private static List getFilePointersBounding(final PreloadedBAMFileIndex index, final Bin bin) { + if(bin != null) { + List chunks = index.getSearchBins(bin); + return chunks != null ? chunks : Collections.emptyList(); + } + else + return Collections.emptyList(); + } + + } /** * Represents a small section of a BAM file, and every associated interval. */ class FilePointer { - protected final Bin bin; + protected final Map> chunks = new HashMap>(); + protected final int referenceSequence; protected final List locations; - public FilePointer(Bin bin) { - this.bin = bin; + public FilePointer(SAMReaderID id, int referenceSequence, List chunks) { + this.referenceSequence = referenceSequence; + this.chunks.put(id,chunks); this.locations = new ArrayList(); } public FilePointer(GenomeLoc location) { - bin = null; + referenceSequence = location.getContigIndex(); locations = Collections.singletonList(location); } + /** + * Private constructor for merge operation. + * @param referenceSequence Sequence to merge. + * @param locations Merged locations. + */ + private FilePointer(final int referenceSequence, final List locations) { + this.referenceSequence = referenceSequence; + this.locations = locations; + } + + public FilePointer merge(FilePointer other, List locations) { + FilePointer merged = new FilePointer(referenceSequence,locations); + merged.chunks.putAll(this.chunks); + if(other != null) + merged.chunks.putAll(other.chunks); + return merged; + } + public void addLocation(GenomeLoc location) { locations.add(location); } + public GenomeLoc getBounds() { + final long boundaryStart = locations.get(0).getStart(); + final long boundaryStop = locations.get(locations.size()-1).getStop(); + return GenomeLocParser.createGenomeLoc(locations.get(0).getContigIndex(),boundaryStart,boundaryStop); + } } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/simpleDataSources/BlockDrivenSAMDataSource.java b/java/src/org/broadinstitute/sting/gatk/datasources/simpleDataSources/BlockDrivenSAMDataSource.java index 7ee595b21..d56e33478 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/simpleDataSources/BlockDrivenSAMDataSource.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/simpleDataSources/BlockDrivenSAMDataSource.java @@ -96,36 +96,13 @@ public class BlockDrivenSAMDataSource extends SAMDataSource { } /** - * Gets a list of the bins in each BAM file that overlap with the given interval list. - * @param location Location for which to determine the bin. - * @return A map of reader back to bin. + * Gets the index for a particular reader. Always preloaded. + * @param id Id of the reader. + * @return The index. Will preload the index if necessary. */ - public List getOverlappingBins(final GenomeLoc location) { + public PreloadedBAMFileIndex getIndex(final SAMReaderID id) { SAMReaders readers = resourcePool.getReadersWithoutLocking(); - if(readers.isEmpty()) - return Collections.emptyList(); - - // All readers will have the same bin structure, so just use the first bin as an example. - SAMFileReader2 reader = (SAMFileReader2)readers.iterator().next(); - return reader.getOverlappingBins(location.getContig(),(int)location.getStart(),(int)location.getStop()); - } - - /** - * Gets the file pointers bounded by this bin, grouped by the reader of origination. - * @param bin The bin for which to load data. - * @return A map of the file pointers bounding the bin. - */ - public Map> getFilePointersBounding(Bin bin) { - SAMReaders readers = resourcePool.getReadersWithoutLocking(); - Map> filePointers = new HashMap>(); - for(SAMReaderID id: getReaderIDs()) { - SAMFileReader2 reader2 = (SAMFileReader2)readers.getReader(id); - if(bin != null) - filePointers.put(id,reader2.getFilePointersBounding(bin)); - else - filePointers.put(id,Collections.emptyList()); - } - return filePointers; + return ((SAMFileReader2)readers.getReader(id)).getIndex(PreloadedBAMFileIndex.class); } /** @@ -136,65 +113,6 @@ public class BlockDrivenSAMDataSource extends SAMDataSource { return readerPositions; } - /** - * Get the number of levels employed by this index. - * @return Number of levels in this index. - */ - public int getNumIndexLevels() { - SAMReaders readers = resourcePool.getReadersWithoutLocking(); - if(readers.isEmpty()) - throw new StingException("Unable to determine number of index levels; no BAMs are present."); - if(!hasIndex()) - throw new SAMException("Unable to determine number of index levels; BAM file index is not present."); - SAMFileReader2 firstReader = (SAMFileReader2)readers.iterator().next(); - return firstReader.getNumIndexLevels(); - } - - /** - * Gets the level associated with the given bin number. - * @param bin The bin for which to determine the level. - * @return the level associated with the given bin number. - */ - public int getLevelForBin(final Bin bin) { - SAMReaders readers = resourcePool.getReadersWithoutLocking(); - if(readers.isEmpty()) - throw new StingException("Unable to determine number of level for bin; no BAMs are present."); - if(!hasIndex()) - throw new SAMException("Unable to determine number of level for bin; BAM file index is not present."); - SAMFileReader2 firstReader = (SAMFileReader2)readers.iterator().next(); - return firstReader.getLevelForBin(bin); - } - - /** - * Gets the first locus that this bin can index into. - * @param bin The bin to test. - * @return The last position that the given bin can represent. - */ - public int getFirstLocusInBin(final Bin bin) { - SAMReaders readers = resourcePool.getReadersWithoutLocking(); - if(readers.isEmpty()) - throw new StingException("Unable to determine number of level for bin; no BAMs are present."); - if(!hasIndex()) - throw new SAMException("Unable to determine number of level for bin; BAM file index is not present."); - SAMFileReader2 firstReader = (SAMFileReader2)readers.iterator().next(); - return firstReader.getFirstLocusInBin(bin); - } - - /** - * Gets the last locus that this bin can index into. - * @param bin The bin to test. - * @return The last position that the given bin can represent. - */ - public int getLastLocusInBin(final Bin bin) { - SAMReaders readers = resourcePool.getReadersWithoutLocking(); - if(readers.isEmpty()) - throw new StingException("Unable to determine number of level for bin; no BAMs are present."); - if(!hasIndex()) - throw new SAMException("Unable to determine number of level for bin; BAM file index is not present."); - SAMFileReader2 firstReader = (SAMFileReader2)readers.iterator().next(); - return firstReader.getLastLocusInBin(bin); - } - /** * Fill the given buffering shard with reads. * @param shard Shard to fill. @@ -264,6 +182,8 @@ public class BlockDrivenSAMDataSource extends SAMDataSource { Map> readerToIteratorMap = new HashMap>(); for(SAMReaderID id: getReaderIDs()) { SAMFileReader2 reader2 = (SAMFileReader2)readers.getReader(id); + if(shard.getChunks().get(id) == null) + continue; CloseableIterator iterator = reader2.iterator(shard.getChunks().get(id)); if(shard.getFilter() != null) iterator = new FilteringIterator(iterator,shard.getFilter()); diff --git a/settings/repository/edu.mit.broad/picard-private-parts-1333-sharding.jar b/settings/repository/edu.mit.broad/picard-private-parts-1333-sharding.jar index 9ce577e803649585758bb26f68142fc1f48e63a0..f82382429d1cd3ff8cc8ab8a392f99186f6d54af 100644 GIT binary patch delta 24142 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 Y;Qv#>DD-y+3UmhgIGi;nda2|72W_O}VgLXD delta 24170 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 RaSBVwwY7v~zF7kE{|ANuH`M?D delta 2845 zcmXw432;KZQ|G)2&s?Cj zO+0rs(cRc!aHnSf{Ab~Vo$fs2TkA9CMdKUm^GN{zx|Csmx?)+#{`S{F*6GCgFt%&*59wW{Ypt)8WS6gV%62^>Be8w zUeca49#_h5d&+2WBX79FNK&@AEygSLXzTgHXmet@rk|6e*9SFieNc9`Sr_T^Va8=+ zF2tI%&Key-WPd+mIAV}}YF)-%b%v(Z8S=eN!Y{|=fnSc~LX=tL;FG8u7eAneD)jP; zO2Onz{-d&a^7wv*-V5_-E?l9vnipaE_WS$KO6&QMPSs3FKKRW?s`+lU!=wp(C$}Ta z!;|<-hR8dGUveP&Z6nI0w~9shdYP;47O&y4k*O_W07n^V5$~&~XyCD5SIp5hZH`XLRa=$DwFqHe zSs<3F^*1jR$CUJ;C1U<4%+S6@C5-U}tPsGW0 z7~EnuY!yr?IwK;wlxXL62%ihnU4KnnReQO-SDc8#y&O3xmZ_~3m|}At+TQ(IwE7Tb z|4$rLS-u(;J5RDc5qum2a}Z>@U@3x57u&K2)t%kukOyWWxZ@URMDX%WaOozfi-mFMS{Dm|SFdM{Dc(vBXahoz(NG^snBYl8o4$VYSHpeDs3=vG&G=V(P#?) zXf(`2PIeje+x>eL(?oa77;GIEIV_T4<8xF!I zNl|Ar>6{j3kt|PV(JK41NV=+QSdLM9vZ-fB4vDZThoU~p zp`HV|)ar^{TKAD$8rhdencMPc(xZ7KcpyZ19tl}dwyH-%P=`g0d`dVo-|EM9y^(LJ zY6Euxt>EDTXh!nM0vabPOwv6XrrD2$DNk}C-IT?JbhM5ak{W>`n(MhDN_f7A=Bg_u z^6p~gij - + diff --git a/settings/repository/net.sf/sam-1.16.359-sharding.jar b/settings/repository/net.sf/sam-1.16.360-sharding.jar similarity index 88% rename from settings/repository/net.sf/sam-1.16.359-sharding.jar rename to settings/repository/net.sf/sam-1.16.360-sharding.jar index cd5dbd0f2c9404cdb89a6667859ea88bc425016f..837e020e0f04355b0f294f3d70a838c120fd3e41 100644 GIT binary patch delta 26383 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 z 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 O=K2wc6txF~(EkC*&Zw~f delta 27957 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 diff --git a/settings/repository/net.sf/sam-1.16.359-sharding.xml b/settings/repository/net.sf/sam-1.16.360-sharding.xml similarity index 52% rename from settings/repository/net.sf/sam-1.16.359-sharding.xml rename to settings/repository/net.sf/sam-1.16.360-sharding.xml index e71427e9c..1a7d7736b 100644 --- a/settings/repository/net.sf/sam-1.16.359-sharding.xml +++ b/settings/repository/net.sf/sam-1.16.360-sharding.xml @@ -1,3 +1,3 @@ - +