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 fcfbead92..3b81dbb68 100755 --- a/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/indels/IndelRealigner.java @@ -406,8 +406,9 @@ public class IndelRealigner extends ReadWalker { private void emitReadLists() { // pre-merge lists with priority queue for constrained SAMFileWriter + logger.warn("EMIT currentInterval " + currentInterval); readsNotToClean.addAll(readsToClean.getReads()); - emit(readsNotToClean); + emit(ReadUtils.coordinateSortReads(readsNotToClean)); readsToClean.clear(); readsNotToClean.clear(); } diff --git a/java/src/org/broadinstitute/sting/utils/sam/ConstrainedMateFixingSAMFileWriter.java b/java/src/org/broadinstitute/sting/utils/sam/ConstrainedMateFixingSAMFileWriter.java index 131229fa4..1069752ff 100644 --- a/java/src/org/broadinstitute/sting/utils/sam/ConstrainedMateFixingSAMFileWriter.java +++ b/java/src/org/broadinstitute/sting/utils/sam/ConstrainedMateFixingSAMFileWriter.java @@ -156,7 +156,7 @@ public class ConstrainedMateFixingSAMFileWriter implements SAMFileWriter { * @{inheritDoc} */ public void addAlignment( SAMRecord newRead ) { - if ( DEBUG ) logger.info("New read pos " + newRead.getAlignmentStart()); + if ( DEBUG ) logger.info("New read pos " + newRead.getAlignmentStart() + " OP = " + newRead.getAttribute("OP")); //final long curTime = timer.currentTime(); //if ( curTime - lastProgressPrintTime > PROGRESS_PRINT_FREQUENCY ) { @@ -217,8 +217,9 @@ public class ConstrainedMateFixingSAMFileWriter implements SAMFileWriter { forMateMatching.remove(read.getReadName()); if ( DEBUG ) - logger.warn(String.format("EMIT! At %d: read %s at %d with isize %d, mate start %d", - newRead.getAlignmentStart(), read.getReadName(), read.getAlignmentStart(), read.getInferredInsertSize(), read.getMateAlignmentStart())); + logger.warn(String.format("EMIT! At %d: read %s at %d with isize %d, mate start %d, op = %s", + newRead.getAlignmentStart(), read.getReadName(), read.getAlignmentStart(), + read.getInferredInsertSize(), read.getMateAlignmentStart(), read.getAttribute("OP"))); // emit to disk finalDestination.addAlignment(waitingReads.remove()); } else { diff --git a/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java b/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java index d689af645..50da4890d 100644 --- a/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java +++ b/java/src/org/broadinstitute/sting/utils/sam/ReadUtils.java @@ -27,8 +27,7 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.*; -import java.util.Map; -import java.util.HashMap; +import java.util.*; import java.io.File; /** @@ -208,5 +207,25 @@ public class ReadUtils { } } return flags; - } + } + + /** + * Returns the collections of reads sorted in coordinate order, according to the order defined + * in the reads themselves + * + * @param reads + * @return + */ + public final static List coordinateSortReads(Collection reads) { + final int n = reads.size(); + + if ( n > 0 ) { + final SAMRecordComparator comparer = new SAMRecordCoordinateComparator(); + final Queue sorted = new PriorityQueue(reads.size(), comparer); + sorted.addAll(reads); + return new ArrayList(sorted); + } else { + return Collections.emptyList(); + } + } }