From 016d70e03d038561f9f8b19162f533f0b5f1fab9 Mon Sep 17 00:00:00 2001 From: Megan Shand Date: Tue, 6 Aug 2024 16:18:11 -0400 Subject: [PATCH] updates changes for gq0 comparison more changes some vcfs have no gqs clean up change for NPE clean up whitespace --- .../walkers/variantutils/VCFComparator.java | 158 +++++++++++++----- .../VCFComparatorIntegrationTest.java | 33 ++-- .../VCFComparator/actual.NA12878.rb.g.vcf | 1 + .../VCFComparator/actual.NA12878.rb.g.vcf.idx | Bin 114178 -> 224 bytes .../VCFComparator/expected.NA12878.rb.g.vcf | 1 + .../expected.NA12878.rb.g.vcf.idx | Bin 114180 -> 226 bytes .../VCFComparator/expected/depth_warning.txt | 1 + 7 files changed, 138 insertions(+), 56 deletions(-) create mode 100644 src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected/depth_warning.txt diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparator.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparator.java index 494f9a42857..6c8da6b3765 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparator.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparator.java @@ -5,8 +5,10 @@ import org.apache.commons.collections4.CollectionUtils; import org.broadinstitute.barclay.argparser.*; import org.broadinstitute.hellbender.engine.*; +import org.broadinstitute.hellbender.exceptions.GATKException; import org.broadinstitute.hellbender.exceptions.UserException; import org.broadinstitute.hellbender.tools.walkers.annotator.*; +import org.broadinstitute.hellbender.tools.walkers.annotator.allelespecific.AS_QualByDepth; import org.broadinstitute.hellbender.tools.walkers.annotator.allelespecific.AS_StandardAnnotation; import org.broadinstitute.hellbender.tools.walkers.genotyper.AlleleSubsettingUtils; import org.broadinstitute.hellbender.tools.walkers.genotyper.GenotypeAssignmentMethod; @@ -136,6 +138,12 @@ public class VCFComparator extends MultiVariantWalkerGroupedByOverlap { @Argument(fullName = "ignore-dbsnp-ids", optional = true) private boolean ignoreDbsnp = false; + @Argument(fullName = "ignore-gq0", optional = true) + private boolean ignoreGq0 = false; + + @Argument(fullName = "ignore-multi-allelics", optional = true, doc="Ignore sites where the AC length in the actual matches the actual number of alleles, but doesn't match the expected VC.") + private boolean ignoreSomeMultiAllelics = false; + @Advanced @Argument(fullName=ReblockGVCF.ANNOTATIONS_TO_KEEP_LONG_NAME, doc="Annotations that are not recognized by GATK that should be checked, otherwise they are removed if ignore-non-ref-data is set.", optional = true) private List annotationsToKeep = new ArrayList<>(); @@ -188,10 +196,18 @@ public void apply(final List variantContexts, final ReferenceCon final VariantContext vc = variantContexts.get(0); //TODO: if there's a variant that overlaps the requested interval the start may not be in the requested intervals if (!muteDiffs) { - throwOrWarn(new UserException("Unmatched variant in " + vc.getSource() + " at position " + vc.getContig() + ":" + vc.getStart())); + if (!ignoreGq0 && vc.getGenotypes().stream().anyMatch(g -> g.hasGQ() && g.getGQ() == 0)) { + throwOrWarn(new UserException("Unmatched variant in " + vc.getSource() + " at position " + vc.getContig() + ":" + vc.getStart())); + } else { + return; + } //low coverage sites will have QUAL for singleton hom-vars boosted because of GQ0 hom-refs } else if (hasGoodEvidence(vc)) { - throwOrWarn(new UserException("Unmatched variant in " + vc.getSource() + " at position " + vc.getContig() + ":" + vc.getStart())); + if (!ignoreGq0 && vc.getGenotypes().stream().anyMatch(g -> g.hasGQ() && g.getGQ() == 0)) { + throwOrWarn(new UserException("Unmatched variant in " + vc.getSource() + " at position " + vc.getContig() + ":" + vc.getStart())); + } else { + return; + } } } @@ -211,7 +227,7 @@ public void apply(final List variantContexts, final ReferenceCon // if there's only one match, then it's the expected matching itself, so actual is missing the same vc start // if it's a high quality site, throw an error/warning otherwise it's low quality so skip it if (isHighQuality(vc) && hasGoodEvidence(vc) - && !vc.getGenotype(0).getAlleles().contains(Allele.SPAN_DEL)){ + && vc.getGenotypes().stream().noneMatch(g -> g.getAlleles().contains(Allele.SPAN_DEL))){ throwOrWarn(new UserException("Apparent unmatched high quality variant in " + vc.getSource() + " at " + vc.getContig() + ":" + vc.getStart())); } else { return; @@ -235,10 +251,13 @@ public void apply(final List variantContexts, final ReferenceCon final VariantContext expectedTrimmed = trimAlleles(vc, overlappingDels); final VariantContext actualTrimmed = trimAlleles(match, overlappingDels); + final boolean vcShouldBeSkippedDueToNoCalls = variantContexts.stream().anyMatch(v -> v.getGenotypes().stream().anyMatch(g -> g.isNoCall() || (g.hasGQ() && g.getGQ() == 0))); //do single-sample GVCF checks, including deletion trimming and dropping if (isSingleSample) { try { - validateSingleSampleDeletions(vc, match, expectedTrimmed, actualTrimmed, overlappingDels); + if (!(ignoreGq0 && vcShouldBeSkippedDueToNoCalls)) { + validateSingleSampleDeletions(vc, match, expectedTrimmed, actualTrimmed, overlappingDels, vcShouldBeSkippedDueToNoCalls); + } } catch (UserException e) { throwOrWarn(e); } @@ -250,7 +269,7 @@ public void apply(final List variantContexts, final ReferenceCon //more rigorous checks on annotations and genotypes try { - checkVariantContextsAreMatching(actualTrimmed, expectedTrimmed, overlappingDels); + checkVariantContextsAreMatching(actualTrimmed, expectedTrimmed, overlappingDels, vcShouldBeSkippedDueToNoCalls); } catch (UserException e) { final boolean hasLowQualityGenotype = expectedTrimmed.getGenotypes().stream().anyMatch(g -> g.getGQ() < 20); if (!muteDiffs || !(alleleNumberIsDifferent || inbreedingCoeffIsDifferent || hasLowQualityGenotype)) { @@ -270,7 +289,7 @@ public void apply(final List variantContexts, final ReferenceCon private void validateSingleSampleDeletions(final VariantContext vc, final VariantContext match, final VariantContext expectedTrimmed, final VariantContext actualTrimmed, - final List overlappingDels) { + final List overlappingDels, final boolean nearbyGq0) { final Genotype expectedGenotype = expectedTrimmed.getGenotype(0); final List expectedGenotypeAlleles = expectedGenotype.getAlleles(); final Genotype actualGenotype = actualTrimmed.getGenotype(0); @@ -299,12 +318,12 @@ private void validateSingleSampleDeletions(final VariantContext vc, final Varian //could be dropped hom ref if (overlappingDels.stream().anyMatch(v -> v.getGenotype(0).isHomRef())) { try { - checkAttributes(vc.getAttributes(), match.getAttributes(), vc.getAlleles(), match.getAlleles(), vc.getPhredScaledQual()); + checkAttributes(vc.getAttributes(), match.getAttributes(), vc.getAlleles(), match.getAlleles(), vc.getPhredScaledQual(), getDpForQual(vc), getAsAdSum(vc)); } catch (UserException e) { throw wrapWithPosition(vc.getContig(), vc.getStart(), new UserException("INFO attributes do not match at " + vc.getContig() + ":" + vc.getStart())); } try { - checkGenotypes(expectedGenotype, actualGenotype); + checkGenotypes(expectedGenotype, actualGenotype, nearbyGq0); } catch (final UserException e) { throw wrapWithPosition(vc.getContig(), vc.getStart(), e); } @@ -330,6 +349,15 @@ private void validateSingleSampleDeletions(final VariantContext vc, final Varian } } + private static int getAsAdSum(VariantContext vc) { + List AS_ADs = AS_QualByDepth.getAlleleDepths(vc.getGenotypes()); + return AS_ADs == null ? 0 : AS_ADs.stream().mapToInt(Integer::intValue).sum(); + } + + private static int getDpForQual(VariantContext vc) { + return QualByDepth.getDepth(vc.getGenotypes(), null); + } + private boolean hasGoodEvidence(final VariantContext vc) { return (vc.getPhredScaledQual() > goodQualThreshold) && (vc.getAttributeAsInt(VCFConstants.DEPTH_KEY,0)/(double)vc.getAttributeAsInt(VCFConstants.ALLELE_NUMBER_KEY,0)) > 5 @@ -337,7 +365,7 @@ private boolean hasGoodEvidence(final VariantContext vc) { } private void checkVariantContextsAreMatching(final VariantContext actual, final VariantContext expected, - final List overlappingDels) { + final List overlappingDels, boolean nearbyGq0) { if (!actual.getContig().equals(expected.getContig())) { throw wrapWithPosition(expected.getContig(), expected.getStart(), new UserException("contigs differ for VCs")); } @@ -349,16 +377,21 @@ private void checkVariantContextsAreMatching(final VariantContext actual, final //don't check end in case we're being lenient about alleles //check alleles - if (actualHasNewAlleles(expected, actual)) { - try { - checkAlleles(actual, expected, overlappingDels); - } catch (final UserException e) { - throw wrapWithPosition(expected.getContig(), expected.getStart(), e); + if (!(ignoreGq0 && nearbyGq0)) { + if (actualHasNewAlleles(expected, actual)) { + try { + checkAlleles(actual, expected, overlappingDels); + } catch (final UserException e) { + throw wrapWithPosition(expected.getContig(), expected.getStart(), e); + } } } if (!ignoreDbsnp && !actual.getID().equals(expected.getID())) { //more alleles might mean more dbSNP matches - throw wrapWithPosition(expected.getContig(), expected.getStart(), new UserException("dbsnp IDs differ for VCs")); + //alleles are checked elsewhere, so if that check was ignored the dbsnp ID check should be ignored too + if (actual.getAlleles().size() == expected.getAlleles().size()) { + throw wrapWithPosition(expected.getContig(), expected.getStart(), new UserException("dbsnp IDs differ for VCs")); + } } if (ignoreAnnotations) { @@ -366,16 +399,21 @@ private void checkVariantContextsAreMatching(final VariantContext actual, final } if (!ignoreQuals) { - final double diff = Math.abs(actual.getPhredScaledQual() - expected.getPhredScaledQual()); - if (diff > qualTolerance) { - throw wrapWithPosition(expected.getContig(), expected.getStart(), new UserException("qual scores differ by " + diff + ", which is more than " + qualTolerance)); + if (!(ignoreGq0 && nearbyGq0)) { + final double diff = Math.abs(actual.getPhredScaledQual() - expected.getPhredScaledQual()); + if (diff > qualTolerance) { + throw wrapWithPosition(expected.getContig(), expected.getStart(), new UserException("qual scores differ by " + diff + ", which is more than " + qualTolerance)); + } } } - try { - checkAttributes(actual.getAttributes(), expected.getAttributes(), actual.getAlternateAlleles(), expected.getAlternateAlleles(), expected.getPhredScaledQual()); - } catch (final UserException e) { - throw wrapWithPosition(expected.getContig() ,expected.getStart() , e); + if (!(ignoreGq0 && nearbyGq0)) { + try { + checkAttributes(actual.getAttributes(), expected.getAttributes(), actual.getAlternateAlleles(), expected.getAlternateAlleles(), expected.getPhredScaledQual(), + getDpForQual(expected), getAsAdSum(expected)); + } catch (final UserException e) { + throw wrapWithPosition(expected.getContig(), expected.getStart(), e); + } } if (!alleleNumberIsDifferent) { @@ -391,7 +429,7 @@ private void checkVariantContextsAreMatching(final VariantContext actual, final for (int i = 0; i < actual.getGenotypes().size(); i++) { try { - checkGenotypes(actual.getGenotype(0), expected.getGenotype(0)); + checkGenotypes(actual.getGenotype(0), expected.getGenotype(0), nearbyGq0); } catch (final UserException e) { throw wrapWithPosition(expected.getContig(), expected.getStart(), e); } @@ -453,18 +491,33 @@ private UserException wrapWithPosition(final String contig, final int start, fin @SuppressWarnings("unchecked") private void checkAttributes(final Map actual, final Map expected, final List actualAlts, final List expectedAlts, - final double expectedQual) { + final double expectedQual, final int expectedDP, final int expectedAS_AD) { final Set expectedKeys = new LinkedHashSet<>(expected.keySet()); //do a precheck on AN because then we can't expect the rest of the annotations to match alleleNumberIsDifferent = actual.containsKey(VCFConstants.ALLELE_NUMBER_KEY) && !isAttributeValueEqual(VCFConstants.ALLELE_NUMBER_KEY, actual.get(VCFConstants.ALLELE_NUMBER_KEY), expected.get(VCFConstants.ALLELE_NUMBER_KEY)); + if (ignoreSomeMultiAllelics && actual.containsKey(VCFConstants.ALLELE_COUNT_KEY)) { + final Object actualAcValue = actual.get(VCFConstants.ALLELE_COUNT_KEY); + final Object expectedAcValue = expected.get(VCFConstants.ALLELE_COUNT_KEY); + final List actualAC = actualAcValue instanceof List ? (List) actualAcValue : Collections.singletonList(actualAcValue); + final List expectedAC = expectedAcValue instanceof List ? (List) expected.get(VCFConstants.ALLELE_COUNT_KEY) : Collections.singletonList(expectedAcValue); + if (actualAC.size() != expectedAC.size() && actualAC.size() == actualAlts.size()) { + //skip this site because it's a multiallelic site and the allele count size is now fixed (the correct size in actual rather than expected) + return; + } + } + if (actual.containsKey(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY)) { try { - inbreedingCoeffIsDifferent = !isAttributeEqualDoubleSmart(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY, - Double.parseDouble(actual.get(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY).toString()), - Double.parseDouble(expected.get(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY).toString()), 0.001); + if (expected.containsKey(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY)) { + inbreedingCoeffIsDifferent = !isAttributeEqualDoubleSmart(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY, + Double.parseDouble(actual.get(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY).toString()), + Double.parseDouble(expected.get(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY).toString()), 0.001); + } else { + throw makeVariantExceptionFromDifference(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY, actual.get(GATKVCFConstants.INBREEDING_COEFFICIENT_KEY).toString(), "missing"); + } } catch (UserException e) { inbreedingCoeffIsDifferent = true; throw e; @@ -497,7 +550,7 @@ private void checkAttributes(final Map actual, final Map expectedList, actualList; - if (key.contains("AS_") || key.equals(GATKVCFConstants.AS_SB_TABLE_KEY)) { + if (key.contains("AS_") && key.contains("RAW") || key.equals(GATKVCFConstants.AS_SB_TABLE_KEY)) { expectedList = AnnotationUtils.decodeAnyASListWithRawDelim(expectedValue.toString()); actualList = AnnotationUtils.decodeAnyASListWithRawDelim(actualValue.toString()); } else { @@ -515,7 +568,14 @@ private void checkAttributes(final Map actual, final Map= actualList.size() || i >= expectedList.size()) { //TODO: the toStrings here don't do a great job @@ -530,7 +590,7 @@ private void checkAttributes(final Map actual, final Map actual, final Map actual, final Map actual, final Map dpChange) { @@ -872,19 +947,20 @@ private boolean isACEqualEnough(final String key, final List a return true; } - private boolean qualByDepthWillHaveJitter(final double expectedQual, final int expectedDepth) { + private boolean qualByDepthWillHaveJitter(final double expectedQual, final int expectedDepth, final int expectedAS_AD) { final double qdEstimate = expectedQual / (double) expectedDepth; - if (QualByDepth.fixTooHighQD(qdEstimate) != qdEstimate || qdEstimate > 34.9) { //I don't know why we get different values at 34.9 -- there must be rounding somewhere? + if (QualByDepth.fixTooHighQD(qdEstimate) != qdEstimate || qdEstimate > 34.9 || //I don't know why we get different values at 34.9 -- there must be rounding somewhere? + expectedAS_AD == 0) { //if alelle specific AD is 0 (which happens in dragen) then we'll have jitter since Infinity is larger than the cutoff return true; } return false; } - private boolean qualByDepthDifferenceIsAcceptable(final double actual, final double expected, final double expectedQual, final int expectedDP) { + private boolean qualByDepthDifferenceIsAcceptable(final double actual, final double expected, final double expectedQual, final int expectedDP, final int expectedAS_AD) { final double diff = Math.abs(expected - actual); final double relativeDiff = diff / (expected); return expected > 25.0 || relativeDiff < 0.01 || diff < 0.5 ////25 is in the "jitter" zone - || qualByDepthWillHaveJitter(expectedQual, expectedDP); + || qualByDepthWillHaveJitter(expectedQual, expectedDP, expectedAS_AD); } public Object onTraversalSuccess() { diff --git a/src/test/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparatorIntegrationTest.java b/src/test/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparatorIntegrationTest.java index e60bf275a8d..5fa5d1a7391 100644 --- a/src/test/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparatorIntegrationTest.java +++ b/src/test/java/org/broadinstitute/hellbender/tools/walkers/variantutils/VCFComparatorIntegrationTest.java @@ -20,21 +20,21 @@ public class VCFComparatorIntegrationTest extends CommandLineProgramTest { @DataProvider(name = "getTestVcfs") public Object[][] getTestVcfs() { - return new Object[][] { - { " -L chr1:186475", "expected_warning_as_vqslod.txt" }, - { " -L chr1:186475 --ignore-attribute AS_VQSLOD", "empty_file.txt" }, - { " -L chr1:187471 --ignore-attribute AS_VQSLOD", "expected_warning_filter.txt" }, - { " -L chr1:186475-945669 " + DEFAULT_WARP_SETTINGS, "empty_file.txt" }, - { " -L chr1:945670 " + DEFAULT_WARP_SETTINGS, "qual_diff_warning.txt"}, // different QUAL values - { " -L chr1:945670 --qual-change-allowed 0.1 --ignore-attribute AS_VQSLOD", "empty_file.txt"}, - { " -L chr1:186475 --mute-acceptable-diffs", "empty_file.txt" } // low quality site is muted even though the AS_VQSLOD is different + return new Object[][]{ + {" -L chr1:186475", "expected_warning_as_vqslod.txt"}, + {" -L chr1:186475 --ignore-attribute AS_VQSLOD", "empty_file.txt"}, + {" -L chr1:187471 --ignore-attribute AS_VQSLOD", "expected_warning_filter.txt"}, + {" -L chr1:186475-945669 " + DEFAULT_WARP_SETTINGS, "empty_file.txt"}, + {" -L chr1:945670 " + DEFAULT_WARP_SETTINGS, "qual_diff_warning.txt"}, // different QUAL values + {" -L chr1:945670 --qual-change-allowed 0.1 --ignore-attribute AS_VQSLOD", "empty_file.txt"}, + {" -L chr1:186475 --mute-acceptable-diffs", "empty_file.txt"} // low quality site is muted even though the AS_VQSLOD is different }; } @Test(dataProvider = "getTestVcfs") public void testAnnotationDifferences(String args, String expectedWarnings) throws IOException { final IntegrationTestSpec testSpec = new IntegrationTestSpec( - " -R " + hg38Reference + + " -R " + hg38Reference + " -V:actual " + TEST_DATA_DIRECTORY + "actual.vcf" + " -V:expected " + TEST_DATA_DIRECTORY + "expected.vcf" + " --output-warnings %s" + @@ -66,13 +66,16 @@ public void testExpectedFailure() { @DataProvider(name = "getTestGvcfs") public Object[][] getTestGvcfs() { - return new Object[][] { - { " -L chr1:864084-864610", "empty_file.txt" }, //matching ref blocks - { " -L chr1:54682-347969", "ref_block_warning.txt"}, // non-matching ref block - { " -L chr1:792417", "tree_score_warning.txt"}, // variant site - { " -L chr1:792417 --ignore-non-ref-data --" + + return new Object[][]{ + {" -L chr1:864084-864610", "empty_file.txt"}, //matching ref blocks + {" -L chr1:54682-347969", "ref_block_warning.txt"}, // non-matching ref block + {" -L chr1:792417", "tree_score_warning.txt"}, // variant site + {" -L chr1:792417 --ignore-non-ref-data --" + ReblockGVCF.ANNOTATIONS_TO_KEEP_LONG_NAME + " TREE_SCORE", "tree_score_warning.txt"}, // when non-ref data is dropped non-GATK annotations can be dropped - { " -L chr1:792417 --ignore-attribute TREE_SCORE", "empty_file.txt"} + {" -L chr1:792417 --ignore-attribute TREE_SCORE --ignore-non-ref-data", "empty_file.txt"}, // check that RAW_MQandDP matches with and without --ignore-non-ref-data + {" -L chr1:792417 --ignore-attribute TREE_SCORE", "empty_file.txt"}, + {" -L chr1:950542", "depth_warning.txt"}, + {" -L chr1:950542 --ignore-gq0", "empty_file.txt"} }; } diff --git a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf index 6c6c67d48fb..48de930e2d9 100644 --- a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf +++ b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf @@ -3507,3 +3507,4 @@ chr1 922687 . C . . END=922690 GT:DP:GQ 0/0:7:20 chr1 922691 . C . . END=922701 GT:DP:GQ 0/0:7:0 chr1 922702 . C . . END=922711 GT:DP:GQ 0/0:7:20 chr1 922712 . T . . END=950541 GT:DP:GQ 0/0:4:0 +chr1 950542 . G . . END=950543 GT:DP:GQ 0/0:4:0 diff --git a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf.idx b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/actual.NA12878.rb.g.vcf.idx index ea94cd86b684bfbbb60bd9f8aaa2dec8242a2375..702552e23392d0cce3dba549adbf8d13f6f527c5 100644 GIT binary patch delta 66 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 N|M&d==?~Ac{|Cx--va;u diff --git a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf index 790563325a7..24510b3aca4 100644 --- a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf +++ b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf @@ -3506,3 +3506,4 @@ chr1 922687 . C . . END=922690 GT:DP:GQ 0/0:7:20 chr1 922691 . C . . END=922701 GT:DP:GQ 0/0:7:0 chr1 922702 . C . . END=922711 GT:DP:GQ 0/0:7:20 chr1 922712 . T . . END=950541 GT:DP:GQ 0/0:4:0 +chr1 950542 . G . . END=950543 GT:DP:GQ 0/0:5:0 \ No newline at end of file diff --git a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf.idx b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected.NA12878.rb.g.vcf.idx index cf9d16e7f1d1c5dd4a2d4972bdbfb01b0af88321..21a6a36933853553d691a64809da0a90339b8d7a 100644 GIT binary patch delta 54 rcmZqq!}f@A!W0QJK4u0G5aZL=oX7}ff{E$p_A;soc;8_H^I)m~FiHr- literal 114180 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 Q@$ujP@A?1hADm_X50gvaFaQ7m diff --git a/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected/depth_warning.txt b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected/depth_warning.txt new file mode 100644 index 00000000000..0f04aab9483 --- /dev/null +++ b/src/test/resources/org/broadinstitute/hellbender/tools/walkers/VCFComparator/expected/depth_warning.txt @@ -0,0 +1 @@ +At position chr1:950542 Genotypes have different DP value: actual has 4 expected has 5 \ No newline at end of file