From 10516f5de44bec1ee798cdf2f43be019f4a2b63b Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 4 Mar 2011 21:26:22 +0000 Subject: [PATCH] Fixed one low-memory sharder performance culprit: regions with no BAM data whatsoever were misusing the Picard MergingIterator, triggering a re-traversal through the entire contig. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5376 348d0f76-0448-11de-a6fe-93d51630548a --- .../datasources/reads/LowMemoryIntervalSharder.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/reads/LowMemoryIntervalSharder.java b/java/src/org/broadinstitute/sting/gatk/datasources/reads/LowMemoryIntervalSharder.java index acde97da5..873cf8b9c 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/reads/LowMemoryIntervalSharder.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/reads/LowMemoryIntervalSharder.java @@ -103,15 +103,16 @@ public class LowMemoryIntervalSharder implements Iterator { for(SAMReaderID reader: dataSource.getReaderIDs()) { GATKBAMIndex index = (GATKBAMIndex)dataSource.getIndex(reader); + BinTree binTree = getNextOverlappingBinTree(reader,(GATKBAMIndex)dataSource.getIndex(reader),currentLocus); if(binTree != null) { coveredRegionStart = Math.max(coveredRegionStart,binTree.getStart()); coveredRegionStop = Math.min(coveredRegionStop,binTree.getStop()); coveredRegion = loci.getGenomeLocParser().createGenomeLoc(currentLocus.getContig(),coveredRegionStart,coveredRegionStop); - - GATKBAMFileSpan fileSpan = generateFileSpan(reader,index,binTree,currentLocus); - nextFilePointer.addFileSpans(reader,fileSpan); } + + GATKBAMFileSpan fileSpan = generateFileSpan(reader,index,binTree,currentLocus); + nextFilePointer.addFileSpans(reader,fileSpan); } // Early exit if no bins were found. @@ -195,6 +196,10 @@ public class LowMemoryIntervalSharder implements Iterator { * @return File span mapping to given region. */ private GATKBAMFileSpan generateFileSpan(final SAMReaderID reader, final GATKBAMIndex index, final BinTree binTree, final GenomeLoc initialRegion) { + // Empty bin trees mean empty file spans. + if(binTree == null) + return new GATKBAMFileSpan(); + List chunks = new ArrayList(binTree.size()); for(GATKBin bin: binTree.getBins()) { if(bin == null)