From 1dedfdb11bb0268170e8b986c7fd6458ea477348 Mon Sep 17 00:00:00 2001 From: depristo Date: Mon, 28 Feb 2011 03:52:18 +0000 Subject: [PATCH] Fixes for constrained movement Indel Realigner. Now sorts all of the reads in the interval before handing them to ConstrainedMateFixingSAMFileWriter to maintain correct contract between the two pieces of software git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5329 348d0f76-0448-11de-a6fe-93d51630548a --- .../gatk/walkers/indels/IndelRealigner.java | 3 ++- .../ConstrainedMateFixingSAMFileWriter.java | 7 +++--- .../sting/utils/sam/ReadUtils.java | 25 ++++++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) 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(); + } + } }