diff --git a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/variantutils/ValidateVariantsIntegrationTest.java b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/variantutils/ValidateVariantsIntegrationTest.java index 7d2f2d0c6..c185e123e 100644 --- a/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/variantutils/ValidateVariantsIntegrationTest.java +++ b/protected/gatk-tools-protected/src/test/java/org/broadinstitute/gatk/tools/walkers/variantutils/ValidateVariantsIntegrationTest.java @@ -198,12 +198,12 @@ public class ValidateVariantsIntegrationTest extends WalkerTest { } @Test(description = "Checks out of order header contigs") - public void testOutOfOrderHeaderContigsError() { - + public void testOutOfOrderHeaderContigs() { WalkerTestSpec spec = new WalkerTestSpec( baseTestString("complexEvents-outOfOrder.vcf", "ALL", DEFAULT_REGION, b37KGReference), - 0, UserException.LexicographicallySortedSequenceDictionary.class); - executeTest("test out of order header contigs error", spec); + 0, + Arrays.asList(EMPTY_MD5)); + executeTest("test out of order header contigs", spec); } @Test(description = "Fixes '''bug''' reported in story https://www.pivotaltracker.com/story/show/68725164") diff --git a/public/gatk-engine/src/main/java/org/broadinstitute/gatk/engine/GenomeAnalysisEngine.java b/public/gatk-engine/src/main/java/org/broadinstitute/gatk/engine/GenomeAnalysisEngine.java index be2bf610a..ab204ff5d 100644 --- a/public/gatk-engine/src/main/java/org/broadinstitute/gatk/engine/GenomeAnalysisEngine.java +++ b/public/gatk-engine/src/main/java/org/broadinstitute/gatk/engine/GenomeAnalysisEngine.java @@ -893,7 +893,7 @@ public class GenomeAnalysisEngine { // compare the reads to the reference SequenceDictionaryUtils.validateDictionaries(logger, getArguments().unsafe, "reads", readsDictionary, - "reference", referenceDictionary, true, intervals); + "reference", referenceDictionary, true, intervals, true); } for (ReferenceOrderedDataSource rod : rods) diff --git a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtils.java b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtils.java index 71d87409f..4d46e17fe 100644 --- a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtils.java +++ b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtils.java @@ -111,6 +111,7 @@ public class SequenceDictionaryUtils { * @param dict2 the sequence dictionary dict2 * @param isReadsToReferenceComparison true if one of the dictionaries comes from a reads data source (eg., a BAM), * and the other from a reference data source + * @param enableContigOrderCheck enable checking the dictionary contig order * @param intervals the user-specified genomic intervals: only required when isReadsToReferenceComparison is true, * otherwise can be null */ @@ -121,9 +122,10 @@ public class SequenceDictionaryUtils { final String name2, final SAMSequenceDictionary dict2, final boolean isReadsToReferenceComparison, - final GenomeLocSortedSet intervals ) { + final GenomeLocSortedSet intervals, + final boolean enableContigOrderCheck ) { - final SequenceDictionaryCompatibility type = compareDictionaries(dict1, dict2); + final SequenceDictionaryCompatibility type = compareDictionaries(dict1, dict2, enableContigOrderCheck); switch ( type ) { case IDENTICAL: @@ -227,10 +229,12 @@ public class SequenceDictionaryUtils { * * @param dict1 first sequence dictionary * @param dict2 second sequence dictionary + * @param enableContigOrderCheck enable checking the dictionary contig order * @return A SequenceDictionaryCompatibility enum value describing the compatibility of the two dictionaries */ - public static SequenceDictionaryCompatibility compareDictionaries( final SAMSequenceDictionary dict1, final SAMSequenceDictionary dict2) { - if ( nonCanonicalHumanContigOrder(dict1) || nonCanonicalHumanContigOrder(dict2) ) + public static SequenceDictionaryCompatibility compareDictionaries( final SAMSequenceDictionary dict1, final SAMSequenceDictionary dict2, final boolean enableContigOrderCheck) { + + if ( enableContigOrderCheck && (nonCanonicalHumanContigOrder(dict1) || nonCanonicalHumanContigOrder(dict2)) ) return SequenceDictionaryCompatibility.NON_CANONICAL_HUMAN_ORDER; final Set commonContigs = getCommonContigsByName(dict1, dict2); @@ -239,7 +243,7 @@ public class SequenceDictionaryUtils { return SequenceDictionaryCompatibility.NO_COMMON_CONTIGS; else if ( ! commonContigsHaveSameLengths(commonContigs, dict1, dict2) ) return SequenceDictionaryCompatibility.UNEQUAL_COMMON_CONTIGS; - else if ( ! commonContigsAreInSameRelativeOrder(commonContigs, dict1, dict2) ) + else if ( enableContigOrderCheck && ! commonContigsAreInSameRelativeOrder(commonContigs, dict1, dict2) ) return SequenceDictionaryCompatibility.OUT_OF_ORDER; else if ( commonContigs.size() == dict1.size() && commonContigs.size() == dict2.size() ) return SequenceDictionaryCompatibility.IDENTICAL; diff --git a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/IndexDictionaryUtils.java b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/IndexDictionaryUtils.java index 30bd8ec6f..216be74f6 100644 --- a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/IndexDictionaryUtils.java +++ b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/IndexDictionaryUtils.java @@ -108,7 +108,7 @@ public class IndexDictionaryUtils { Set trackSequences = new TreeSet(); for (SAMSequenceRecord dictionaryEntry : trackDict.getSequences()) trackSequences.add(dictionaryEntry.getSequenceName()); - SequenceDictionaryUtils.validateDictionaries(logger, validationExclusionType, trackName, trackDict, "reference", referenceDict, false, null); + SequenceDictionaryUtils.validateDictionaries(logger, validationExclusionType, trackName, trackDict, "reference", referenceDict, false, null, true); } } } diff --git a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/RMDTrackBuilder.java b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/RMDTrackBuilder.java index 0b84c05a2..93be5a8ef 100644 --- a/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/RMDTrackBuilder.java +++ b/public/gatk-utils/src/main/java/org/broadinstitute/gatk/utils/refdata/tracks/RMDTrackBuilder.java @@ -182,7 +182,7 @@ public class RMDTrackBuilder { // extends PluginManager { final SAMSequenceDictionary vcfDictionary = new SAMSequenceDictionary(vcfContigRecords); final SAMSequenceDictionary sequenceDictionary = new SAMSequenceDictionary(dict.getSequences()); - SequenceDictionaryUtils.validateDictionaries(logger, validationExclusionType, name, vcfDictionary, "sequence", sequenceDictionary, false, null); + SequenceDictionaryUtils.validateDictionaries(logger, validationExclusionType, name, vcfDictionary, "sequence", sequenceDictionary, false, null, false); } } } diff --git a/public/gatk-utils/src/test/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtilsUnitTest.java b/public/gatk-utils/src/test/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtilsUnitTest.java index bbbcb94e7..3d0a7b0a0 100644 --- a/public/gatk-utils/src/test/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtilsUnitTest.java +++ b/public/gatk-utils/src/test/java/org/broadinstitute/gatk/utils/SequenceDictionaryUtilsUnitTest.java @@ -181,7 +181,8 @@ public class SequenceDictionaryUtilsUnitTest extends BaseTest { "secondDictionary", secondDictionary, isReadsToReferenceComparison, - intervals); + intervals, + true); } catch ( Exception e ) { exceptionThrown = e; @@ -218,7 +219,7 @@ public class SequenceDictionaryUtilsUnitTest extends BaseTest { SequenceDictionaryUtils.getDictionaryAsString(secondDictionary)); final SequenceDictionaryUtils.SequenceDictionaryCompatibility reportedCompatibility = - SequenceDictionaryUtils.compareDictionaries(firstDictionary, secondDictionary); + SequenceDictionaryUtils.compareDictionaries(firstDictionary, secondDictionary, true); Assert.assertTrue(reportedCompatibility == dictionaryCompatibility, String.format("Dictionary comparison should have returned %s but instead returned %s. %s",