Fix misc issues in new protosharder regarding proper iterator termination when

an unexpectedly small amount of data is present.


git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5338 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2011-02-28 21:14:18 +00:00
parent abab23350f
commit c869d1c9cf
2 changed files with 16 additions and 2 deletions

View File

@ -160,14 +160,16 @@ class BinTreeIterator implements Iterator<BinTree> {
final int firstBinInLowestLevel = GATKBAMIndex.getFirstBinInLevel(lowestLevel);
final int binsInLowestLevel = index.getLevelSize(lowestLevel);
currentBinInLowestLevel++;
GATKBin[] bins = new GATKBin[GATKBAMIndex.getNumIndexLevels()];
nextBinTree = null;
while(nextBinTree == null) {
currentBinInLowestLevel++;
boolean levelIteratorsExhausted = true;
for(int level = lowestLevel; level >= 0; level--) {
if(!levelIterators[level].hasNext())
continue;
levelIteratorsExhausted = false;
final int firstBinInThisLevel = GATKBAMIndex.getFirstBinInLevel(level);
final int binsInThisLevel = index.getLevelSize(level);
@ -180,6 +182,11 @@ class BinTreeIterator implements Iterator<BinTree> {
bins[level] = levelIterators[level].peek();
}
// No more bins available for this reference sequence? Break out of the loop.
if(levelIteratorsExhausted)
break;
// Found a compelling bin tree? Break out of the loop.
for(int level = 0; level <= lowestLevel; level++) {
if(bins[level] != null) {
nextBinTree = new BinTree(index,bins);

View File

@ -104,6 +104,13 @@ public class LowMemoryIntervalSharder implements Iterator<FilePointer> {
}
}
// Early exit if no bins were found.
if(coveredRegion == null) {
nextFilePointer.addLocation(currentLocus);
currentLocus = locusIterator.next();
continue;
}
// Define the initial range of the file pointer, aka the region where the locus currently being processed intersects the BAM list.
GenomeLoc initialLocation = currentLocus.intersect(coveredRegion);
nextFilePointer.addLocation(initialLocation);