From a5dee8a42eea8760c4499807091e219bf7174ec9 Mon Sep 17 00:00:00 2001 From: Phillip Dexheimer Date: Thu, 4 Dec 2014 23:15:09 -0500 Subject: [PATCH] Fix NPE in SplitSamFile * PT 82892316 * Added integration test * Fixed similar error in debug output of HC --- .../haplotypecaller/HaplotypeCaller.java | 2 + .../tools/walkers/readutils/SplitSamFile.java | 4 ++ .../SplitSamFileIntegrationTest.java | 60 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 public/gatk-tools-public/src/test/java/org/broadinstitute/gatk/tools/walkers/readutils/SplitSamFileIntegrationTest.java diff --git a/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCaller.java b/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCaller.java index 2f1b4ba3b..5922defb1 100644 --- a/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCaller.java +++ b/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCaller.java @@ -59,6 +59,7 @@ import htsjdk.variant.vcf.*; import org.broadinstitute.gatk.engine.CommandLineGATK; import org.broadinstitute.gatk.engine.GenomeAnalysisEngine; import org.broadinstitute.gatk.engine.arguments.DbsnpArgumentCollection; +import org.broadinstitute.gatk.engine.io.DirectOutputTracker; import org.broadinstitute.gatk.engine.io.stubs.SAMFileWriterStub; import org.broadinstitute.gatk.utils.contexts.AlignmentContext; import org.broadinstitute.gatk.utils.contexts.AlignmentContextUtils; @@ -1201,6 +1202,7 @@ public class HaplotypeCaller extends ActiveRegionWalker, In // Capture any exception that might be thrown, and write out the assembly failure BAM if requested if ( captureAssemblyFailureBAM ) { final SAMFileWriter writer = SAMFileWriterStub.createSAMFileWriter("assemblyFailure.bam", getToolkit()); + new DirectOutputTracker().addOutput((SAMFileWriterStub) writer); for ( final GATKSAMRecord read : activeRegion.getReads() ) { writer.addAlignment(read); } diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/readutils/SplitSamFile.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/readutils/SplitSamFile.java index 3ef03c3d6..500ce20d2 100644 --- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/readutils/SplitSamFile.java +++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/readutils/SplitSamFile.java @@ -30,6 +30,8 @@ import htsjdk.samtools.SAMFileWriter; import htsjdk.samtools.SAMReadGroupRecord; import htsjdk.samtools.SAMRecord; import org.apache.log4j.Logger; +import org.broadinstitute.gatk.engine.io.DirectOutputTracker; +import org.broadinstitute.gatk.engine.io.OutputTracker; import org.broadinstitute.gatk.engine.io.stubs.SAMFileWriterStub; import org.broadinstitute.gatk.utils.commandline.Argument; import org.broadinstitute.gatk.engine.CommandLineGATK; @@ -104,6 +106,7 @@ public class SplitSamFile extends ReadWalker outputs = new HashMap<>(); + final OutputTracker outputTracker = new DirectOutputTracker(); for ( Map.Entry elt : headers.entrySet() ) { final String sample = elt.getKey(); final String filename = outputRoot + sample + ".bam"; @@ -111,6 +114,7 @@ public class SplitSamFile extends ReadWalkeremptyList() + ); + addSplitOutput(spec, prefix, "NA12878", "b1a57327a3f0bdbe167dbc7d547f1247"); + addSplitOutput(spec, prefix, "NA12891", "3bb331fd468fc91c548f38857473f399"); + addSplitOutput(spec, prefix, "NA12892", "ac61ae9cd168ac15e3a03fe7ab51fb22"); + executeTest("testSplitSamFile", spec); + } + + private void addSplitOutput(final WalkerTestSpec spec, final String outputPrefix, final String sample, final String md5) { + final File outputFile = new File(outputPrefix + sample + ".bam"); + spec.addAuxFile(md5, outputFile); + + //The AuxFile mechanism will ensure the bam is deleted, but it doesn't know about indices + new File(outputFile.getAbsolutePath() + ".bai").deleteOnExit(); + new File(outputFile.getAbsolutePath().replaceAll("bam$", ".bai")).deleteOnExit(); + } +}