diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java index 21ce79e01..08781bd7c 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java @@ -498,15 +498,23 @@ public class IndelRealigner extends ReadWalker { //logger.debug(consensus.str + " vs. " + toTest.getRead().getReadString() + " => " + myScore + " - " + altAlignment.first); if ( !toTest.getRead().getDuplicateReadFlag() ) consensus.mismatchSum += myScore; + + // optimization: once the mismatch sum is higher than the best consensus, quit since this one can't win + // THIS MUST BE DISABLED IF WE DECIDE TO ALLOW MORE THAN ONE ALTERNATE CONSENSUS! + if ( bestConsensus != null && consensus.mismatchSum > bestConsensus.mismatchSum ) + break; } //logger.debug(consensus.str + " " + consensus.mismatchSum); if ( bestConsensus == null || bestConsensus.mismatchSum > consensus.mismatchSum) { - if ( bestConsensus != null ) bestConsensus.readIndexes.clear(); + // we do not need this alt consensus, release memory right away!! + if ( bestConsensus != null ) + bestConsensus.readIndexes.clear(); bestConsensus = consensus; //logger.debug(consensus.str + " " + consensus.mismatchSum); } else { - consensus.readIndexes.clear(); // we do not need this alt consensus, release memory right away!! + // we do not need this alt consensus, release memory right away!! + consensus.readIndexes.clear(); } } diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IntervalCleanerWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IntervalCleanerWalker.java index 390a80c21..c1552bf73 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IntervalCleanerWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IntervalCleanerWalker.java @@ -361,6 +361,11 @@ public class IntervalCleanerWalker extends LocusWindowWalker //logger.debug(consensus.str + " vs. " + toTest.getRead().getReadString() + " => " + myScore + " - " + altAlignment.first); if ( !toTest.getRead().getDuplicateReadFlag() ) consensus.mismatchSum += myScore; + + // optimization: once the mismatch sum is higher than the best consensus, quit since this one can't win + // THIS MUST BE DISABLED IF WE DECIDE TO ALLOW MORE THAN ONE ALTERNATE CONSENSUS! + if ( bestConsensus != null && consensus.mismatchSum > bestConsensus.mismatchSum ) + break; } //logger.debug(consensus.str + " " + consensus.mismatchSum);