From 5859948e80f72876ea0d58ea4d800d2126f36508 Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 12 Jun 2009 17:37:33 +0000 Subject: [PATCH] Fixed bugs in CleanedReadInjector arising from integration testing. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@999 348d0f76-0448-11de-a6fe-93d51630548a --- .../walkers/indels/CleanedReadInjector.java | 25 +++++++++++++++++-- .../sting/utils/cmdLine/ParsingEngine.java | 9 +++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/indels/CleanedReadInjector.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/indels/CleanedReadInjector.java index 616619f53..9469f3f13 100644 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/indels/CleanedReadInjector.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/indels/CleanedReadInjector.java @@ -4,16 +4,17 @@ import org.broadinstitute.sting.gatk.walkers.ReadWalker; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.utils.cmdLine.Argument; import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.Utils; import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMFileReader; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.util.CloseableIterator; -import java.io.File; import java.util.Map; import java.util.HashMap; import java.util.Queue; import java.util.LinkedList; +import java.io.File; /** * User: hanna * Date: Jun 10, 2009 @@ -49,7 +50,7 @@ public class CleanedReadInjector extends ReadWalker { * Target file for BAM output. */ @Argument(fullName="output_bam",shortName="ob",doc="Output BAM file",required=true) - SAMFileWriter outputBAM = null; + String outputBAMFileName = null; /** * A stream of processed intervals. The current head of the queue represents the next interval. @@ -66,11 +67,25 @@ public class CleanedReadInjector extends ReadWalker { */ private Map cleanedReads = new HashMap(); + /** + * The writer that handles writing of SAM files. + */ + SAMFileWriter outputBAM = null; + @Override public void initialize() { intervals = new LinkedList( GenomeAnalysisEngine.parseIntervalRegion(intervalsSource,false) ); interval = intervals.remove(); loadCleanedReadsOverlappingInterval( interval ); + + // HACK: The unit tests create their own output files. Make sure this walker doesn't step + // on any toes. + if( outputBAM == null ) { + outputBAM = Utils.createSAMFileWriterWithCompression(getToolkit().getEngine().getSAMHeader(), + false, + outputBAMFileName, + getToolkit().getBAMCompression()); + } } /** @@ -124,6 +139,11 @@ public class CleanedReadInjector extends ReadWalker { return accum + value; } + @Override + public void onTraversalDone( Integer value ) { + outputBAM.close(); + } + /** * Load a list of all the reads overlapping the given interval into memory. * @param interval @@ -135,6 +155,7 @@ public class CleanedReadInjector extends ReadWalker { SAMRecord read = overlappingReads.next(); cleanedReads.put( read.getReadName(), read ); } + overlappingReads.close(); } /** diff --git a/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java b/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java index ac90f5bd1..03db0d175 100755 --- a/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java +++ b/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java @@ -15,6 +15,12 @@ import java.util.List; import java.util.Collection; import java.util.Arrays; import java.util.EnumSet; +import java.io.File; + +import net.sf.samtools.SAMFileReader; +import net.sf.samtools.SAMFileWriter; +import net.sf.samtools.SAMFileWriterFactory; +import net.sf.samtools.SAMFileHeader; /** * Created by IntelliJ IDEA. @@ -418,6 +424,9 @@ public class ParsingEngine { */ private Object constructSingleElement(Field f, Class type, String str) { // lets go through the types we support + if (type == SAMFileReader.class) { + return new SAMFileReader(new File(str),true); + } if (type == Boolean.TYPE) { boolean b = false; if (str.toLowerCase().equals("true")) {