Remove variant contig order check

This commit is contained in:
Ron Levine 2016-01-15 21:10:10 -05:00
parent c57c32b915
commit ed933013fe
6 changed files with 19 additions and 14 deletions

View File

@ -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")

View File

@ -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)

View File

@ -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<String> 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;

View File

@ -108,7 +108,7 @@ public class IndexDictionaryUtils {
Set<String> trackSequences = new TreeSet<String>();
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);
}
}
}

View File

@ -182,7 +182,7 @@ public class RMDTrackBuilder { // extends PluginManager<FeatureCodec> {
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);
}
}
}

View File

@ -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",