diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerArgumentCollection.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerArgumentCollection.java index aece2f33e70..974816d2661 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerArgumentCollection.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerArgumentCollection.java @@ -29,8 +29,11 @@ public abstract class AssemblyBasedCallerArgumentCollection extends StandardCall @ArgumentCollection public AssemblyRegionTrimmerArgumentCollection assemblyRegionTrimmerArgs = new AssemblyRegionTrimmerArgumentCollection(); + protected boolean useMutectAssemblerArgumentCollection() { return false; } + @ArgumentCollection - public ReadThreadingAssemblerArgumentCollection assemblerArgs = new ReadThreadingAssemblerArgumentCollection(); + public ReadThreadingAssemblerArgumentCollection assemblerArgs = useMutectAssemblerArgumentCollection() ? + new MutectReadThreadingAssemblerArgumentCollection() : new HaplotypeCallerReadThreadingAssemblerArgumentCollection(); @ArgumentCollection public LikelihoodEngineArgumentCollection likelihoodArgs = new LikelihoodEngineArgumentCollection(); diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerUtils.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerUtils.java index af6bd5f6239..248e32dbadc 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerUtils.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/AssemblyBasedCallerUtils.java @@ -189,20 +189,10 @@ public static ReadLikelihoodCalculationEngine createLikelihoodCalculationEngine( public static ReadThreadingAssembler createReadThreadingAssembler(final AssemblyBasedCallerArgumentCollection args) { final ReadThreadingAssemblerArgumentCollection rtaac = args.assemblerArgs; - final ReadThreadingAssembler assemblyEngine = new ReadThreadingAssembler(rtaac.maxNumHaplotypesInPopulation, rtaac.kmerSizes, - rtaac.dontIncreaseKmerSizesForCycles, rtaac.allowNonUniqueKmersInRef, rtaac.numPruningSamples, rtaac.minPruneFactor, - rtaac.useAdaptivePruning, rtaac.initialErrorRateForPruning, rtaac.pruningLog10OddsThreshold, rtaac.maxUnprunedVariants); - assemblyEngine.setErrorCorrectKmers(rtaac.errorCorrectKmers); + final ReadThreadingAssembler assemblyEngine = rtaac.makeReadThreadingAssembler(); assemblyEngine.setDebug(args.debug); - assemblyEngine.setDebugGraphTransformations(rtaac.debugGraphTransformations); - assemblyEngine.setRecoverDanglingBranches(!rtaac.doNotRecoverDanglingBranches); - assemblyEngine.setMinDanglingBranchLength(rtaac.minDanglingBranchLength); assemblyEngine.setMinBaseQualityToUseInAssembly(args.minBaseQualityScore); - if ( rtaac.graphOutput != null ) { - assemblyEngine.setGraphWriter(new File(rtaac.graphOutput)); - } - return assemblyEngine; } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerEngine.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerEngine.java index 5b114e03daf..d17e91e2d46 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerEngine.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerEngine.java @@ -263,7 +263,7 @@ private void validateAndInitializeArgs() { hcArgs.setSampleContamination(AlleleBiasedDownsamplingUtils.loadContaminationFile(hcArgs.CONTAMINATION_FRACTION_FILE, hcArgs.CONTAMINATION_FRACTION, sampleSet, logger)); } - if ( hcArgs.genotypingOutputMode == GenotypingOutputMode.GENOTYPE_GIVEN_ALLELES && hcArgs.assemblerArgs.consensusMode ) { + if ( hcArgs.genotypingOutputMode == GenotypingOutputMode.GENOTYPE_GIVEN_ALLELES && hcArgs.assemblerArgs.consensusMode() ) { throw new UserException("HaplotypeCaller cannot be run in both GENOTYPE_GIVEN_ALLELES mode and in consensus mode at the same time. Please choose one or the other."); } @@ -604,7 +604,7 @@ public List callRegion(final AssemblyRegion region, final Featur assemblyResult.getPaddedReferenceLoc(), regionForGenotyping.getSpan(), features, - (hcArgs.assemblerArgs.consensusMode ? Collections.emptyList() : givenAlleles), + (hcArgs.assemblerArgs.consensusMode() ? Collections.emptyList() : givenAlleles), emitReferenceConfidence(), hcArgs.maxMnpDistance, readsHeader, diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerReadThreadingAssemblerArgumentCollection.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerReadThreadingAssemblerArgumentCollection.java new file mode 100644 index 00000000000..1555faf5e5b --- /dev/null +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/HaplotypeCallerReadThreadingAssemblerArgumentCollection.java @@ -0,0 +1,60 @@ +package org.broadinstitute.hellbender.tools.walkers.haplotypecaller; + +import org.broadinstitute.barclay.argparser.Advanced; +import org.broadinstitute.barclay.argparser.Argument; +import org.broadinstitute.barclay.argparser.Hidden; +import org.broadinstitute.hellbender.tools.walkers.haplotypecaller.readthreading.ReadThreadingAssembler; + +import java.io.File; + +public class HaplotypeCallerReadThreadingAssemblerArgumentCollection extends ReadThreadingAssemblerArgumentCollection { + /** + * A single edge multiplicity cutoff for pruning doesn't work in samples with variable depths, for example exomes + * and RNA. This parameter enables the probabilistic algorithm for pruning the assembly graph that considers the + * likelihood that each chain in the graph comes from real variation. + */ + @Advanced + @Argument(fullName="adaptive-pruning", doc = "Use Mutect2's adaptive graph pruning algorithm", optional = true) + public boolean useAdaptivePruning = false; + + /** + * By default, the read threading assembler will attempt to recover dangling heads and tails. See the `minDanglingBranchLength` argument documentation for more details. + */ + @Hidden + @Argument(fullName="do-not-recover-dangling-branches", doc="Disable dangling head and tail recovery", optional = true) + public boolean doNotRecoverDanglingBranches = false; + + /** + * As of version 3.3, this argument is no longer needed because dangling end recovery is now the default behavior. See GATK 3.3 release notes for more details. + */ + @Deprecated + @Argument(fullName="recover-dangling-heads", doc="This argument is deprecated since version 3.3", optional = true) + public boolean DEPRECATED_RecoverDanglingHeads = false; + + /** + * This argument is specifically intended for 1000G consensus analysis mode. Setting this flag will inject all + * provided alleles to the assembly graph but will not forcibly genotype all of them. + */ + @Advanced + @Argument(fullName="consensus", doc="1000G consensus mode", optional = true) + public boolean consensusMode = false; + + @Override + public ReadThreadingAssembler makeReadThreadingAssembler() { + final ReadThreadingAssembler assemblyEngine = new ReadThreadingAssembler(maxNumHaplotypesInPopulation, kmerSizes, + dontIncreaseKmerSizesForCycles, allowNonUniqueKmersInRef, numPruningSamples, useAdaptivePruning ? 0 : minPruneFactor, + useAdaptivePruning, initialErrorRateForPruning, pruningLog10OddsThreshold, maxUnprunedVariants); + assemblyEngine.setDebugGraphTransformations(debugGraphTransformations); + assemblyEngine.setRecoverDanglingBranches(!doNotRecoverDanglingBranches); + assemblyEngine.setMinDanglingBranchLength(minDanglingBranchLength); + + if ( graphOutput != null ) { + assemblyEngine.setGraphWriter(new File(graphOutput)); + } + + return assemblyEngine; + } + + @Override + public boolean consensusMode() { return consensusMode; } +} diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/MutectReadThreadingAssemblerArgumentCollection.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/MutectReadThreadingAssemblerArgumentCollection.java new file mode 100644 index 00000000000..ecf97c4654b --- /dev/null +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/MutectReadThreadingAssemblerArgumentCollection.java @@ -0,0 +1,35 @@ +package org.broadinstitute.hellbender.tools.walkers.haplotypecaller; + +import org.broadinstitute.barclay.argparser.Advanced; +import org.broadinstitute.barclay.argparser.Argument; +import org.broadinstitute.hellbender.tools.walkers.haplotypecaller.readthreading.ReadThreadingAssembler; + +import java.io.File; + +public class MutectReadThreadingAssemblerArgumentCollection extends ReadThreadingAssemblerArgumentCollection { + + /** + * A single edge multiplicity cutoff for pruning doesn't work in samples with variable depths, for example exomes + * and RNA. This parameter disables the probabilistic algorithm for pruning the assembly graph that considers the + * likelihood that each chain in the graph comes from real variation, and instead uses a simple multiplicity cutoff. + */ + @Advanced + @Argument(fullName="disable-adaptive-pruning", doc = "Disable the adaptive algorithm for pruning paths in the graph", optional = true) + public boolean disableAdaptivePruning = false; + + @Override + public ReadThreadingAssembler makeReadThreadingAssembler() { + final ReadThreadingAssembler assemblyEngine = new ReadThreadingAssembler(maxNumHaplotypesInPopulation, kmerSizes, + dontIncreaseKmerSizesForCycles, allowNonUniqueKmersInRef, numPruningSamples, disableAdaptivePruning ? minPruneFactor : 0, + !disableAdaptivePruning, initialErrorRateForPruning, pruningLog10OddsThreshold, maxUnprunedVariants); + assemblyEngine.setDebugGraphTransformations(debugGraphTransformations); + assemblyEngine.setRecoverDanglingBranches(true); + assemblyEngine.setMinDanglingBranchLength(minDanglingBranchLength); + + if ( graphOutput != null ) { + assemblyEngine.setGraphWriter(new File(graphOutput)); + } + + return assemblyEngine; + } +} diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/ReadThreadingAssemblerArgumentCollection.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/ReadThreadingAssemblerArgumentCollection.java index 3b19380e277..d73a7238c2b 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/ReadThreadingAssemblerArgumentCollection.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/ReadThreadingAssemblerArgumentCollection.java @@ -4,6 +4,7 @@ import org.broadinstitute.barclay.argparser.Advanced; import org.broadinstitute.barclay.argparser.Argument; import org.broadinstitute.barclay.argparser.Hidden; +import org.broadinstitute.hellbender.tools.walkers.haplotypecaller.readthreading.ReadThreadingAssembler; import java.io.Serializable; import java.util.List; @@ -11,7 +12,7 @@ /** * Set of arguments related to the {@link org.broadinstitute.hellbender.tools.walkers.haplotypecaller.readthreading.ReadThreadingAssembler} */ -public final class ReadThreadingAssemblerArgumentCollection implements Serializable { +public abstract class ReadThreadingAssemblerArgumentCollection implements Serializable { private static final long serialVersionUID = 1L; // ----------------------------------------------------------------------------------------------- @@ -48,20 +49,6 @@ public final class ReadThreadingAssemblerArgumentCollection implements Serializa @Argument(fullName="num-pruning-samples", doc="Number of samples that must pass the minPruning threshold", optional = true) public int numPruningSamples = 1; - /** - * As of version 3.3, this argument is no longer needed because dangling end recovery is now the default behavior. See GATK 3.3 release notes for more details. - */ - @Deprecated - @Argument(fullName="recover-dangling-heads", doc="This argument is deprecated since version 3.3", optional = true) - public boolean DEPRECATED_RecoverDanglingHeads = false; - - /** - * By default, the read threading assembler will attempt to recover dangling heads and tails. See the `minDanglingBranchLength` argument documentation for more details. - */ - @Hidden - @Argument(fullName="do-not-recover-dangling-branches", doc="Disable dangling head and tail recovery", optional = true) - public boolean doNotRecoverDanglingBranches = false; - /** * When constructing the assembly graph we are often left with "dangling" branches. The assembly engine attempts to rescue these branches * by merging them back into the main graph. This argument describes the minimum length of a dangling branch needed for the engine to @@ -71,13 +58,7 @@ public final class ReadThreadingAssemblerArgumentCollection implements Serializa @Argument(fullName="min-dangling-branch-length", doc="Minimum length of a dangling branch to attempt recovery", optional = true) public int minDanglingBranchLength = 4; - /** - * This argument is specifically intended for 1000G consensus analysis mode. Setting this flag will inject all - * provided alleles to the assembly graph but will not forcibly genotype all of them. - */ - @Advanced - @Argument(fullName="consensus", doc="1000G consensus mode", optional = true) - public boolean consensusMode = false; + /** * The assembly graph can be quite complex, and could imply a very large number of possible haplotypes. Each haplotype @@ -91,13 +72,6 @@ public final class ReadThreadingAssemblerArgumentCollection implements Serializa @Argument(fullName="max-num-haplotypes-in-population", doc="Maximum number of haplotypes to consider for your population", optional = true) public int maxNumHaplotypesInPopulation = 128; - /** - * Enabling this argument may cause fundamental problems with the assembly graph itself. - */ - @Hidden - @Argument(fullName="error-correct-kmers", doc = "Use an exploratory algorithm to error correct the kmers used during assembly", optional = true) - public boolean errorCorrectKmers = false; - /** * Paths with fewer supporting kmers than the specified threshold will be pruned from the graph. * @@ -111,15 +85,6 @@ public final class ReadThreadingAssemblerArgumentCollection implements Serializa @Argument(fullName="min-pruning", doc = "Minimum support to not prune paths in the graph", optional = true) public int minPruneFactor = 2; - /** - * A single edge multiplicity cutoff for pruning doesn't work in samples with variable depths, for example exomes - * and RNA. This parameter activates a probabilistic algorithm for pruning the assembly graph that considers the - * likelihood that each chain in the graph comes from real variation. - */ - @Advanced - @Argument(fullName="adaptive-pruning", doc = "Use an adaptive algorithm for pruning paths in the graph", optional = true) - public boolean useAdaptivePruning = false; - /** * Initial base error rate guess for the probabilistic adaptive pruning model. Results are not very sensitive to this * parameter because it is only a starting point from which the algorithm discovers the true error rate. @@ -168,4 +133,8 @@ public final class ReadThreadingAssemblerArgumentCollection implements Serializa @Hidden @Argument(fullName="min-observations-for-kmer-to-be-solid", doc = "A k-mer must be seen at least these times for it considered to be solid", optional = true) public int minObservationsForKmerToBeSolid = 20; + + public abstract ReadThreadingAssembler makeReadThreadingAssembler(); + + public boolean consensusMode() { return false; } } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/readthreading/ReadThreadingAssembler.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/readthreading/ReadThreadingAssembler.java index 1c72b30b091..75cf07a954a 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/readthreading/ReadThreadingAssembler.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/haplotypecaller/readthreading/ReadThreadingAssembler.java @@ -62,8 +62,6 @@ public final class ReadThreadingAssembler { private int pruneFactor; private final ChainPruner chainPruner; - protected boolean errorCorrectKmers = false; - private File debugGraphOutputPath = null; //Where to write debug graphs, if unset it defaults to the current working dir private File graphOutputPath = null; @@ -572,18 +570,6 @@ private void printGraphs(final List graphs) { // // ----------------------------------------------------------------------------------------------- - public int getPruneFactor() { - return pruneFactor; - } - - public boolean shouldErrorCorrectKmers() { - return errorCorrectKmers; - } - - public void setErrorCorrectKmers(boolean errorCorrectKmers) { - this.errorCorrectKmers = errorCorrectKmers; - } - public void setGraphWriter(File graphOutputPath) { this.graphOutputPath = graphOutputPath; } @@ -610,10 +596,6 @@ public boolean isDebugGraphTransformations() { public boolean isRecoverDanglingBranches() { return recoverDanglingBranches; } - public void setPruneFactor(final int pruneFactor) { - this.pruneFactor = pruneFactor; - } - public void setDebugGraphTransformations(final boolean debugGraphTransformations) { this.debugGraphTransformations = debugGraphTransformations; } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/mutect/M2ArgumentCollection.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/mutect/M2ArgumentCollection.java index b71aba71b1e..7d29a1b89bc 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/mutect/M2ArgumentCollection.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/mutect/M2ArgumentCollection.java @@ -49,6 +49,9 @@ public class M2ArgumentCollection extends AssemblyBasedCallerArgumentCollection public static final double DEFAULT_INITIAL_LOD = 2.0; public static final double DEFAULT_MITO_INITIAL_LOD = 0; + @Override + protected boolean useMutectAssemblerArgumentCollection() { return true; } + //TODO: HACK ALERT HACK ALERT HACK ALERT //TODO: GATK4 does not yet have a way to tag inputs, eg -I:tumor tumor.bam -I:normal normal.bam, //TODO: so for now we require the user to specify bams *both* as inputs, with -I tumor.bam -I normal.bam diff --git a/src/test/java/org/broadinstitute/hellbender/tools/walkers/mutect/Mutect2IntegrationTest.java b/src/test/java/org/broadinstitute/hellbender/tools/walkers/mutect/Mutect2IntegrationTest.java index d55428b96c5..03d0b3c5d53 100644 --- a/src/test/java/org/broadinstitute/hellbender/tools/walkers/mutect/Mutect2IntegrationTest.java +++ b/src/test/java/org/broadinstitute/hellbender/tools/walkers/mutect/Mutect2IntegrationTest.java @@ -79,8 +79,7 @@ public class Mutect2IntegrationTest extends CommandLineProgramTest { */ @Test(dataProvider = "dreamSyntheticData") public void testDreamTumorNormal(final File tumorBam, final String tumorSample, final File normalBam, final String normalSample, - final File truthVcf, final File mask, final double requiredSensitivity, final boolean tumorOnly, - final boolean adaptivePruning) throws Exception { + final File truthVcf, final File mask, final double requiredSensitivity, final boolean tumorOnly) throws Exception { Utils.resetRandomGenerator(); final File unfilteredVcf = createTempFile("unfiltered", ".vcf"); final File filteredVcf = createTempFile("filtered", ".vcf"); @@ -111,10 +110,6 @@ public void testDreamTumorNormal(final File tumorBam, final String tumorSample, args.addAll(Arrays.asList("-I", normalBam.getAbsolutePath(), "-" + M2ArgumentCollection.NORMAL_SAMPLE_SHORT_NAME, normal)); }; - if (adaptivePruning) { - args.add("--adaptive-pruning"); - } - runCommandLine(args); // run FilterMutectCalls @@ -864,18 +859,16 @@ private void doMutect2Test( } } - // tumor bam, tumor sample name, normal bam, normal sample name, truth vcf, required sensitivity, tumor only, adaptive pruning + // tumor bam, tumor sample name, normal bam, normal sample name, truth vcf, required sensitivity, tumor only @DataProvider(name = "dreamSyntheticData") public Object[][] dreamSyntheticData() { return new Object[][]{ - {new File(DREAM_BAMS_DIR, "tumor_1.bam"), "tumor sample", new File(DREAM_BAMS_DIR, "normal_1.bam"), "synthetic.challenge.set1.normal", new File(DREAM_VCFS_DIR, "sample_1.vcf"), new File(DREAM_MASKS_DIR, "mask1.list"), 0.97, false, false}, - {new File(DREAM_BAMS_DIR, "tumor_2.bam"), "background.synth.challenge2.snvs.svs.tumorbackground", new File(DREAM_BAMS_DIR, "normal_2.bam"), "synthetic.challenge.set2.normal", new File(DREAM_VCFS_DIR, "sample_2.vcf"), new File(DREAM_MASKS_DIR, "mask2.list"), 0.95, false, false}, - {new File(DREAM_BAMS_DIR, "tumor_2.bam"), "background.synth.challenge2.snvs.svs.tumorbackground", new File(DREAM_BAMS_DIR, "normal_2.bam"), "synthetic.challenge.set2.normal", new File(DREAM_VCFS_DIR, "sample_2.vcf"), new File(DREAM_MASKS_DIR, "mask2.list"), 0.95, true, false}, - {new File(DREAM_BAMS_DIR, "tumor_3.bam"), "IS3.snv.indel.sv", new File(DREAM_BAMS_DIR, "normal_3.bam"), "G15512.prenormal.sorted", new File(DREAM_VCFS_DIR, "sample_3.vcf"), new File(DREAM_MASKS_DIR, "mask3.list"), 0.90, false, false}, - {new File(DREAM_BAMS_DIR, "tumor_3.bam"), "IS3.snv.indel.sv", new File(DREAM_BAMS_DIR, "normal_3.bam"), "G15512.prenormal.sorted", new File(DREAM_VCFS_DIR, "sample_3.vcf"), new File(DREAM_MASKS_DIR, "mask3.list"), 0.90, false, true}, - {new File(DREAM_BAMS_DIR, "tumor_4.bam"), "synthetic.challenge.set4.tumour", new File(DREAM_BAMS_DIR, "normal_4.bam"), "synthetic.challenge.set4.normal", new File(DREAM_VCFS_DIR, "sample_4.vcf"), new File(DREAM_MASKS_DIR, "mask4.list"), 0.65, false, false}, - {new File(DREAM_BAMS_DIR, "tumor_4.bam"), "synthetic.challenge.set4.tumour", new File(DREAM_BAMS_DIR, "normal_4.bam"), "synthetic.challenge.set4.normal", new File(DREAM_VCFS_DIR, "sample_4.vcf"), new File(DREAM_MASKS_DIR, "mask4.list"), 0.65, false, true}, - {new File(DREAM_BAMS_DIR, "tumor_4.bam"), "synthetic.challenge.set4.tumour", new File(DREAM_BAMS_DIR, "normal_4.bam"), "synthetic.challenge.set4.normal", new File(DREAM_VCFS_DIR, "sample_4.vcf"), new File(DREAM_MASKS_DIR, "mask4.list"), 0.65, true, false}, + {new File(DREAM_BAMS_DIR, "tumor_1.bam"), "tumor sample", new File(DREAM_BAMS_DIR, "normal_1.bam"), "synthetic.challenge.set1.normal", new File(DREAM_VCFS_DIR, "sample_1.vcf"), new File(DREAM_MASKS_DIR, "mask1.list"), 0.97, false}, + {new File(DREAM_BAMS_DIR, "tumor_2.bam"), "background.synth.challenge2.snvs.svs.tumorbackground", new File(DREAM_BAMS_DIR, "normal_2.bam"), "synthetic.challenge.set2.normal", new File(DREAM_VCFS_DIR, "sample_2.vcf"), new File(DREAM_MASKS_DIR, "mask2.list"), 0.95, false}, + {new File(DREAM_BAMS_DIR, "tumor_2.bam"), "background.synth.challenge2.snvs.svs.tumorbackground", new File(DREAM_BAMS_DIR, "normal_2.bam"), "synthetic.challenge.set2.normal", new File(DREAM_VCFS_DIR, "sample_2.vcf"), new File(DREAM_MASKS_DIR, "mask2.list"), 0.95, true}, + {new File(DREAM_BAMS_DIR, "tumor_3.bam"), "IS3.snv.indel.sv", new File(DREAM_BAMS_DIR, "normal_3.bam"), "G15512.prenormal.sorted", new File(DREAM_VCFS_DIR, "sample_3.vcf"), new File(DREAM_MASKS_DIR, "mask3.list"), 0.90, false}, + {new File(DREAM_BAMS_DIR, "tumor_4.bam"), "synthetic.challenge.set4.tumour", new File(DREAM_BAMS_DIR, "normal_4.bam"), "synthetic.challenge.set4.normal", new File(DREAM_VCFS_DIR, "sample_4.vcf"), new File(DREAM_MASKS_DIR, "mask4.list"), 0.65, false}, + {new File(DREAM_BAMS_DIR, "tumor_4.bam"), "synthetic.challenge.set4.tumour", new File(DREAM_BAMS_DIR, "normal_4.bam"), "synthetic.challenge.set4.normal", new File(DREAM_VCFS_DIR, "sample_4.vcf"), new File(DREAM_MASKS_DIR, "mask4.list"), 0.65, true}, }; }