diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java index f95e5647c..0dfdd4ba1 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantrecalibration/ApplyRecalibration.java @@ -172,7 +172,7 @@ public class ApplyRecalibration extends RodWalker implements T vcfWriter.writeHeader(vcfHeader); } - public static final void addVQSRStandardHeaderLines(final Set hInfo) { + public static void addVQSRStandardHeaderLines(final Set hInfo) { hInfo.add(VCFStandardHeaderLines.getInfoLine(VCFConstants.END_KEY)); hInfo.add(new VCFInfoHeaderLine(VariantRecalibrator.VQS_LOD_KEY, 1, VCFHeaderLineType.Float, "Log odds ratio of being a true variant versus being false under the trained gaussian mixture model")); hInfo.add(new VCFInfoHeaderLine(VariantRecalibrator.CULPRIT_KEY, 1, VCFHeaderLineType.String, "The annotation which was the worst performing in the Gaussian mixture model, likely the reason why the variant was filtered out")); @@ -236,7 +236,9 @@ public class ApplyRecalibration extends RodWalker implements T filterString = tranches.get(0).name+"+"; } - if( !filterString.equals(VCFConstants.PASSES_FILTERS_v4) ) { + if( filterString.equals(VCFConstants.PASSES_FILTERS_v4) ) { + builder.passFilters(); + } else { builder.filters(filterString); } diff --git a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java index d14d0deee..829e75682 100755 --- a/public/java/src/org/broadinstitute/sting/utils/Haplotype.java +++ b/public/java/src/org/broadinstitute/sting/utils/Haplotype.java @@ -44,6 +44,8 @@ public class Haplotype { private boolean isRef = false; private Cigar cigar; private int alignmentStartHapwrtRef; + public int leftBreakPoint = 0; + public int rightBreakPoint = 0; /** * Create a simple consensus sequence with provided bases and a uniform quality over all bases of qual diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java index e25599812..913615a84 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantJEXLContext.java @@ -268,7 +268,12 @@ class JEXLMap implements Map { // treat errors as no match jexl.put(exp, value == null ? false : value); } catch (Exception e) { - throw new UserException.CommandLineException(String.format("Invalid JEXL expression detected for %s with message %s", exp.name, e.getMessage())); + // if exception happens because variable is undefined (i.e. field in expression is not present), evaluate to FALSE + // todo - might be safer if we explicitly checked for an exception type, but Apache's API doesn't seem to have that ability + if (e.getMessage().contains("undefined variable")) + jexl.put(exp,false); + else + throw new UserException.CommandLineException(String.format("Invalid JEXL expression detected for %s with message %s", exp.name, e.getMessage())); } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java index 393905961..2411f9e08 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantrecalibration/VariantRecalibrationWalkersIntegrationTest.java @@ -18,6 +18,11 @@ public class VariantRecalibrationWalkersIntegrationTest extends WalkerTest { this.recalMD5 = recalMD5; this.cutVCFMD5 = cutVCFMD5; } + + @Override + public String toString() { + return "VRTest{inVCF='" + inVCF +"'}"; + } } VRTest lowPass = new VRTest("phase1.projectConsensus.chr20.raw.snps.vcf", @@ -69,14 +74,21 @@ public class VariantRecalibrationWalkersIntegrationTest extends WalkerTest { executeTest("testApplyRecalibration-"+params.inVCF, spec); } - VRTest indel = new VRTest("combined.phase1.chr20.raw.indels.sites.vcf", + VRTest indelUnfiltered = new VRTest( + "combined.phase1.chr20.raw.indels.unfiltered.sites.vcf", // all FILTERs as . "b7589cd098dc153ec64c02dcff2838e4", // tranches "a04a9001f62eff43d363f4d63769f3ee", // recal file - "888eb042dd33b807bcbb8630896fda94"); // cut VCF + "64f576881e21323dd4078262604717a2"); // cut VCF + + VRTest indelFiltered = new VRTest( + "combined.phase1.chr20.raw.indels.filtered.sites.vcf", // all FILTERs as PASS + "b7589cd098dc153ec64c02dcff2838e4", // tranches + "a04a9001f62eff43d363f4d63769f3ee", // recal file + "af22c55d91394c56a222fd40d6d54781"); // cut VCF @DataProvider(name = "VRIndelTest") - public Object[][] createData2() { - return new Object[][]{ {indel} }; + public Object[][] createTestVariantRecalibratorIndel() { + return new Object[][]{ {indelUnfiltered}, {indelFiltered} }; } @Test(dataProvider = "VRIndelTest") diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java index 59eaa177d..e25d65465 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/SelectVariantsIntegrationTest.java @@ -70,6 +70,19 @@ public class SelectVariantsIntegrationTest extends WalkerTest { executeTest("testComplexSelection--" + testfile, spec); } + @Test + public void testNonExistingFieldSelection() { + String testfile = validationDataLocation + "test.filtered.maf_annotated.vcf"; + + WalkerTestSpec spec = new WalkerTestSpec( + baseTestString(" -env -ef -select 'foo!=0||DP>0' --variant " + testfile), + 1, + Arrays.asList("44e77cea624cfff2b8acc3a4b30485cb") // should yield empty vcf because the foo!=0 will yield complete expression false + ); + spec.disableShadowBCF(); + executeTest("testNonExistingSelection--" + testfile, spec); + } + @Test public void testSampleExclusion() { String testfile = validationDataLocation + "test.filtered.maf_annotated.vcf";