diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergePhasedSegregatingPolymorphismsToMNPvcfWriter.java b/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergePhasedSegregatingPolymorphismsToMNPvcfWriter.java index a10a95e94..3b0a5eb4d 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergePhasedSegregatingPolymorphismsToMNPvcfWriter.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergePhasedSegregatingPolymorphismsToMNPvcfWriter.java @@ -31,7 +31,6 @@ import org.broad.tribble.util.variantcontext.VariantContext; import org.broad.tribble.vcf.VCFHeader; import org.broad.tribble.vcf.VCFWriter; import org.broadinstitute.sting.gatk.contexts.variantcontext.VariantContextUtils; -import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.File; @@ -51,17 +50,10 @@ public class MergePhasedSegregatingPolymorphismsToMNPvcfWriter implements VCFWri private Logger logger; - private static class VCFRecord { - public VariantContext vc; - public byte refBase; + // Should we call innerWriter.close() in close() + private boolean takeOwnershipOfInner; - public VCFRecord(VariantContext vc, byte refBase) { - this.vc = vc; - this.refBase = refBase; - } - } - - public MergePhasedSegregatingPolymorphismsToMNPvcfWriter(VCFWriter innerWriter, File referenceFile, int maxGenomicDistanceForMNP, Logger logger) { + public MergePhasedSegregatingPolymorphismsToMNPvcfWriter(VCFWriter innerWriter, File referenceFile, int maxGenomicDistanceForMNP, Logger logger, boolean takeOwnershipOfInner) { this.innerWriter = innerWriter; this.referenceFileForMNPmerging = new IndexedFastaSequenceFile(referenceFile); this.maxGenomicDistanceForMNP = maxGenomicDistanceForMNP; @@ -69,6 +61,11 @@ public class MergePhasedSegregatingPolymorphismsToMNPvcfWriter implements VCFWri this.filteredVcfrList = new LinkedList(); this.numMergedRecords = 0; this.logger = logger; + this.takeOwnershipOfInner = takeOwnershipOfInner; + } + + public MergePhasedSegregatingPolymorphismsToMNPvcfWriter(VCFWriter innerWriter, File referenceFile, int maxGenomicDistanceForMNP, Logger logger) { + this(innerWriter, referenceFile, maxGenomicDistanceForMNP, logger, false); // by default, don't own inner } public void writeHeader(VCFHeader header) { @@ -76,13 +73,10 @@ public class MergePhasedSegregatingPolymorphismsToMNPvcfWriter implements VCFWri } public void close() { - flush(); - innerWriter.close(); - } - - public void flush() { stopWaitingToMerge(); - innerWriter.flush(); + + if (takeOwnershipOfInner) + innerWriter.close(); } public void add(VariantContext vc, byte refBase) { @@ -161,4 +155,14 @@ public class MergePhasedSegregatingPolymorphismsToMNPvcfWriter implements VCFWri public String toString() { return getClass().getName(); } + + private static class VCFRecord { + public VariantContext vc; + public byte refBase; + + public VCFRecord(VariantContext vc, byte refBase) { + this.vc = vc; + this.refBase = refBase; + } + } } \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingPolymorphismsWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingPolymorphismsWalker.java index 5bce26c80..4e54c3c2c 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingPolymorphismsWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingPolymorphismsWalker.java @@ -66,7 +66,8 @@ public class MergeSegregatingPolymorphismsWalker extends RodWalker don't take control of writer, since didn't create it: + vcMergerWriter = new MergePhasedSegregatingPolymorphismsToMNPvcfWriter(writer, getToolkit().getArguments().referenceFile, maxGenomicDistanceForMNP, logger, false); writer = null; // so it can't be accessed directly [i.e., not through vcMergerWriter] // setup the header fields: @@ -132,7 +133,7 @@ public class MergeSegregatingPolymorphismsWalker extends RodWalker hInfo = new HashSet(); @@ -923,7 +926,7 @@ public class ReadBackedPhasingWalker extends RodWalker finalList = processQueue(result, true); // process all remaining data writeVcList(finalList); - writer.flush(); + writer.close(); if (statsWriter != null) statsWriter.close();