From 5b0ade67c8b56b1c879f1a67344d880105da7854 Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Sun, 8 Jul 2012 15:43:03 -0700 Subject: [PATCH] Updates to VCF processing for better BCF processing -- getMetaData now split into getMetaDataInSortedOrder() [old functionality] and getMetaDataInOriginalOrder() [according to the header order]. Important as BCF uses the order of elements in the header in the offsets to keys, and we were automatically sorting the BCF2 header which is out of order in samtools and the whole system was going crazy -- Updating GATK code to use the appropriate header function (this is why so many files have changed) -- BCF2 code was busted in not differentiating PASS from . from FILTER in VC (tests coming that will actually stress this) -- Bugfix for adding contig lines to BCF2 header dictionary -- VCFHeader metaData no longer sorted internally. The system now maintains the data in header order, and only sorts output as requested in API -- VCFWriter and BCF2Writer now explictly sort their header lines -- Don't allow filters to be added that are PASS in the contract --- .../walkers/diffengine/VCFDiffableReader.java | 5 +---- ...eSegregatingAlternateAllelesVCFWriter.java | 2 +- .../variantutils/FilterLiftedVariants.java | 2 +- .../variantutils/LeftAlignVariants.java | 2 +- .../variantutils/LiftoverVariants.java | 2 +- .../sting/utils/codecs/bcf2/BCF2Codec.java | 10 +++++++--- .../sting/utils/codecs/bcf2/BCF2Utils.java | 9 +++------ .../utils/codecs/vcf/AbstractVCFCodec.java | 2 +- .../sting/utils/codecs/vcf/VCFHeader.java | 20 +++++++++++++------ .../codecs/vcf/VCFStandardHeaderLines.java | 5 ++--- .../sting/utils/codecs/vcf/VCFUtils.java | 9 +++------ .../variantcontext/VariantContextBuilder.java | 1 + .../variantcontext/writer/BCF2Writer.java | 5 ++++- .../variantcontext/writer/VCFWriter.java | 4 ++-- .../utils/codecs/vcf/VCFHeaderUnitTest.java | 5 ++--- .../utils/codecs/vcf/VCFIntegrationTest.java | 2 +- .../VariantContextTestProvider.java | 10 +++++----- .../writer/VCFWriterUnitTest.java | 5 +---- 18 files changed, 51 insertions(+), 49 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java index e3f9b8ee3..5726eeed9 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/diffengine/VCFDiffableReader.java @@ -27,15 +27,12 @@ package org.broadinstitute.sting.gatk.walkers.diffengine; import org.apache.log4j.Logger; import org.broad.tribble.AbstractFeatureReader; import org.broad.tribble.FeatureReader; -import org.broad.tribble.readers.AsciiLineReader; -import org.broad.tribble.readers.LineReader; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.*; -import java.util.Arrays; import java.util.Iterator; import java.util.Map; @@ -69,7 +66,7 @@ public class VCFDiffableReader implements DiffableReader { FeatureReader reader = AbstractFeatureReader.getFeatureReader(file.getAbsolutePath(), vcfCodec, false); VCFHeader header = (VCFHeader)reader.getHeader(); - for ( VCFHeaderLine headerLine : header.getMetaData() ) { + for ( VCFHeaderLine headerLine : header.getMetaDataInInputOrder() ) { String key = headerLine.getKey(); if ( headerLine instanceof VCFIDHeaderLine) key += "_" + ((VCFIDHeaderLine) headerLine).getID(); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java index 9a22e8cf6..5bbc6dacc 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/phasing/MergeSegregatingAlternateAllelesVCFWriter.java @@ -102,7 +102,7 @@ class MergeSegregatingAlternateAllelesVCFWriter implements VariantContextWriter if (useSingleSample != null) { // only want to output context for one sample Set singSampSet = new TreeSet(); singSampSet.add(useSingleSample); - header = new VCFHeader(header.getMetaData(), singSampSet); + header = new VCFHeader(header.getMetaDataInSortedOrder(), singSampSet); } innerWriter.writeHeader(header); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java index 485f3394b..43816b0fa 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/FilterLiftedVariants.java @@ -63,7 +63,7 @@ public class FilterLiftedVariants extends RodWalker { Set samples = SampleUtils.getSampleListWithVCFHeader(getToolkit(), Arrays.asList(trackName)); Map vcfHeaders = VCFUtils.getVCFHeadersFromRods(getToolkit(), Arrays.asList(trackName)); - final VCFHeader vcfHeader = new VCFHeader(vcfHeaders.containsKey(trackName) ? vcfHeaders.get(trackName).getMetaData() : null, samples); + final VCFHeader vcfHeader = new VCFHeader(vcfHeaders.containsKey(trackName) ? vcfHeaders.get(trackName).getMetaDataInSortedOrder() : null, samples); writer.writeHeader(vcfHeader); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java index 484400025..c1755aa00 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LeftAlignVariants.java @@ -92,7 +92,7 @@ public class LeftAlignVariants extends RodWalker { Set samples = SampleUtils.getSampleListWithVCFHeader(getToolkit(), Arrays.asList(trackName)); Map vcfHeaders = VCFUtils.getVCFHeadersFromRods(getToolkit(), Arrays.asList(trackName)); - Set headerLines = vcfHeaders.get(trackName).getMetaData(); + Set headerLines = vcfHeaders.get(trackName).getMetaDataInSortedOrder(); baseWriter.writeHeader(new VCFHeader(headerLines, samples)); writer = VariantContextWriterFactory.sortOnTheFly(baseWriter, 200); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java index 21965afcd..60d41abd5 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/variantutils/LiftoverVariants.java @@ -95,7 +95,7 @@ public class LiftoverVariants extends RodWalker { Set metaData = new HashSet(); if ( vcfHeaders.containsKey(trackName) ) - metaData.addAll(vcfHeaders.get(trackName).getMetaData()); + metaData.addAll(vcfHeaders.get(trackName).getMetaDataInSortedOrder()); if ( RECORD_ORIGINAL_LOCATION ) { metaData.add(new VCFInfoHeaderLine("OriginalChr", 1, VCFHeaderLineType.String, "Original contig name for the record")); metaData.add(new VCFInfoHeaderLine("OriginalStart", 1, VCFHeaderLineType.Integer, "Original start position for the record")); diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Codec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Codec.java index 0503e417a..18b4d0b6c 100644 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Codec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Codec.java @@ -385,10 +385,14 @@ public final class BCF2Codec implements FeatureCodec, ReferenceD if ( value == null ) builder.unfiltered(); else { - if ( value instanceof Integer ) + if ( value instanceof Integer ) { // fast path for single integer result - builder.filter(getDictionaryString((Integer)value)); - else { + final String filterString = getDictionaryString((Integer)value); + if ( VCFConstants.PASSES_FILTERS_v4.equals(filterString)) + builder.passFilters(); + else + builder.filter(filterString); + } else { for ( final int offset : (List)value ) builder.filter(getDictionaryString(offset)); } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Utils.java b/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Utils.java index 21deb4158..143ab52df 100644 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Utils.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/bcf2/BCF2Utils.java @@ -26,10 +26,7 @@ package org.broadinstitute.sting.utils.codecs.bcf2; import com.google.java.contract.Ensures; import com.google.java.contract.Requires; -import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeader; -import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLine; -import org.broadinstitute.sting.utils.codecs.vcf.VCFIDHeaderLine; +import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import java.io.*; @@ -84,8 +81,8 @@ public final class BCF2Utils { boolean sawPASS = false; // set up the strings dictionary - for ( VCFHeaderLine line : header.getMetaData() ) { - if ( line instanceof VCFIDHeaderLine) { + for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) { + if ( line instanceof VCFIDHeaderLine && ! (line instanceof VCFContigHeaderLine) ) { final VCFIDHeaderLine idLine = (VCFIDHeaderLine)line; if ( ! seen.contains(idLine.getID())) { sawPASS = sawPASS || idLine.getID().equals(VCFConstants.PASSES_FILTERS_v4); diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java index 5ad939e76..b3420514b 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/AbstractVCFCodec.java @@ -115,7 +115,7 @@ public abstract class AbstractVCFCodec extends AsciiFeatureCodec protected VCFHeader parseHeaderFromLines( final List headerStrings, final VCFHeaderVersion version ) { this.version = version; - Set metaData = new TreeSet(); + Set metaData = new LinkedHashSet(); Set sampleNames = new LinkedHashSet(); int contigCounter = 0; // iterate over all the passed in strings diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeader.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeader.java index 296be7873..7a9329583 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeader.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFHeader.java @@ -52,7 +52,7 @@ public class VCFHeader { } // the associated meta data - private final Set mMetaData = new TreeSet(); + private final Set mMetaData = new LinkedHashSet(); private final Map mInfoMetaData = new HashMap(); private final Map mFormatMetaData = new HashMap(); private final Map mFilterMetaData = new HashMap(); @@ -230,14 +230,22 @@ public class VCFHeader { } /** - * get the meta data, associated with this header + * get the meta data, associated with this header, in sorted order * * @return a set of the meta data */ - public Set getMetaData() { - Set lines = new LinkedHashSet(); + public Set getMetaDataInInputOrder() { + return makeGetMetaDataSet(mMetaData); + } + + public Set getMetaDataInSortedOrder() { + return makeGetMetaDataSet(new TreeSet(mMetaData)); + } + + private static Set makeGetMetaDataSet(final Set headerLinesInSomeOrder) { + final Set lines = new LinkedHashSet(); lines.add(new VCFHeaderLine(VCFHeaderVersion.VCF4_1.getFormatString(), VCFHeaderVersion.VCF4_1.getVersionString())); - lines.addAll(mMetaData); + lines.addAll(headerLinesInSomeOrder); return Collections.unmodifiableSet(lines); } @@ -247,7 +255,7 @@ public class VCFHeader { * @return */ public VCFHeaderLine getMetaDataLine(final String key) { - for (final VCFHeaderLine line: getMetaData()) { + for (final VCFHeaderLine line: mMetaData) { if ( line.getKey().equals(key) ) return line; } diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFStandardHeaderLines.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFStandardHeaderLines.java index 40d22f46f..b2e8cc100 100644 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFStandardHeaderLines.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFStandardHeaderLines.java @@ -25,7 +25,6 @@ package org.broadinstitute.sting.utils.codecs.vcf; import com.google.java.contract.Ensures; -import com.google.java.contract.Invariant; import com.google.java.contract.Requires; import org.apache.log4j.Logger; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; @@ -60,8 +59,8 @@ public class VCFStandardHeaderLines { @Requires("header != null") @Ensures("result != null") public static VCFHeader repairStandardHeaderLines(final VCFHeader header) { - final Set newLines = new LinkedHashSet(header.getMetaData().size()); - for ( VCFHeaderLine line : header.getMetaData() ) { + final Set newLines = new LinkedHashSet(header.getMetaDataInInputOrder().size()); + for ( VCFHeaderLine line : header.getMetaDataInInputOrder() ) { if ( line instanceof VCFFormatHeaderLine ) { line = formatStandards.repair((VCFFormatHeaderLine) line); } else if ( line instanceof VCFInfoHeaderLine) { diff --git a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java index dc7bcd926..f80b0eae4 100755 --- a/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/codecs/vcf/VCFUtils.java @@ -25,8 +25,6 @@ package org.broadinstitute.sting.utils.codecs.vcf; -import com.google.java.contract.Ensures; -import com.google.java.contract.Requires; import net.sf.samtools.SAMSequenceDictionary; import net.sf.samtools.SAMSequenceRecord; import org.apache.log4j.Logger; @@ -34,7 +32,6 @@ import org.broad.tribble.Feature; import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; -import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; @@ -129,7 +126,7 @@ public class VCFUtils { if ( source.getRecordType().equals(VariantContext.class)) { VCFHeader header = (VCFHeader)source.getHeader(); if ( header != null ) - fields.addAll(header.getMetaData()); + fields.addAll(header.getMetaDataInSortedOrder()); } } @@ -160,7 +157,7 @@ public class VCFUtils { // todo -- needs to remove all version headers from sources and add its own VCF version line for ( VCFHeader source : headers ) { //System.out.printf("Merging in header %s%n", source); - for ( VCFHeaderLine line : source.getMetaData()) { + for ( VCFHeaderLine line : source.getMetaDataInSortedOrder()) { String key = line.getKey(); if ( line instanceof VCFIDHeaderLine ) @@ -250,7 +247,7 @@ public class VCFUtils { * @param refDict the SAM formatted reference sequence dictionary */ public final static VCFHeader withUpdatedContigs(final VCFHeader oldHeader, final File referenceFile, final SAMSequenceDictionary refDict) { - return new VCFHeader(withUpdatedContigsAsLines(oldHeader.getMetaData(), referenceFile, refDict), oldHeader.getGenotypeSamples()); + return new VCFHeader(withUpdatedContigsAsLines(oldHeader.getMetaDataInInputOrder(), referenceFile, refDict), oldHeader.getGenotypeSamples()); } public final static Set withUpdatedContigsAsLines(final Set oldLines, final File referenceFile, final SAMSequenceDictionary refDict) { diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextBuilder.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextBuilder.java index 0590329c4..f2375f6f9 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextBuilder.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/VariantContextBuilder.java @@ -260,6 +260,7 @@ public class VariantContextBuilder { return this; } + @Requires({"filter != null", "!filter.equals(\"PASS\")"}) public VariantContextBuilder filter(final String filter) { if ( this.filters == null ) this.filters = new LinkedHashSet(1); this.filters.add(filter); diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java index 7d9a18d14..45610bbf9 100644 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/BCF2Writer.java @@ -109,7 +109,10 @@ class BCF2Writer extends IndexingVariantContextWriter { // -------------------------------------------------------------------------------- @Override - public void writeHeader(final VCFHeader header) { + public void writeHeader(VCFHeader header) { + // make sure the header is sorted correctly + header = new VCFHeader(header.getMetaDataInSortedOrder(), header.getGenotypeSamples()); + // create the config offsets map if ( header.getContigLines().isEmpty() ) { if ( ALLOW_MISSING_CONTIG_LINES ) { diff --git a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java index 8ccb79744..4548e026e 100755 --- a/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriter.java @@ -87,13 +87,13 @@ class VCFWriter extends IndexingVariantContextWriter { final boolean doNotWriteGenotypes, final String versionLine, final String streamNameForError) { - header = doNotWriteGenotypes ? new VCFHeader(header.getMetaData()) : header; + header = doNotWriteGenotypes ? new VCFHeader(header.getMetaDataInSortedOrder()) : header; try { // the file format field needs to be written first writer.write(versionLine + "\n"); - for ( VCFHeaderLine line : header.getMetaData() ) { + for ( VCFHeaderLine line : header.getMetaDataInSortedOrder() ) { if ( VCFHeaderVersion.isFormatString(line.getKey()) ) continue; diff --git a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderUnitTest.java index b8d6f2d1d..62d584ef6 100644 --- a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFHeaderUnitTest.java @@ -2,7 +2,6 @@ package org.broadinstitute.sting.utils.codecs.vcf; import org.broad.tribble.readers.AsciiLineReader; import org.broad.tribble.readers.PositionalBufferedStream; -import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.testng.Assert; import org.broadinstitute.sting.BaseTest; @@ -26,7 +25,7 @@ public class VCFHeaderUnitTest extends BaseTest { private VCFHeader createHeader(String headerStr) { VCFCodec codec = new VCFCodec(); VCFHeader header = (VCFHeader)codec.readHeader(new AsciiLineReader(new PositionalBufferedStream(new StringBufferInputStream(headerStr)))); - Assert.assertEquals(header.getMetaData().size(), VCF4headerStringCount); + Assert.assertEquals(header.getMetaDataInInputOrder().size(), VCF4headerStringCount); return header; } @@ -98,7 +97,7 @@ public class VCFHeaderUnitTest extends BaseTest { } catch (IOException e) { Assert.fail("Unable to make a temp file!"); } - for (VCFHeaderLine line : header.getMetaData()) + for (VCFHeaderLine line : header.getMetaDataInSortedOrder()) pw.println(line); pw.close(); Assert.assertEquals(md5SumFile(myTempFile), md5sum); diff --git a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java index 1e3c799fe..b271d8c84 100644 --- a/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/codecs/vcf/VCFIntegrationTest.java @@ -59,7 +59,7 @@ public class VCFIntegrationTest extends WalkerTest { executeTest("Test writing samtools WEx BCF example", spec1); } - @Test(enabled = false) // TODO disabled because current BCF2 is 1 based + @Test(enabled = false) public void testReadingSamtoolsWExBCFExample() { String testVCF = privateTestDir + "ex2.bcf"; String baseCommand = "-R " + b36KGReference + " --no_cmdline_in_header -o %s "; diff --git a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextTestProvider.java b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextTestProvider.java index 94ed2ce5f..ca4cdf306 100644 --- a/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextTestProvider.java +++ b/public/java/test/org/broadinstitute/sting/utils/variantcontext/VariantContextTestProvider.java @@ -106,7 +106,7 @@ public class VariantContextTestProvider { for ( final VariantContext vc : vcs ) if ( vc.hasGenotypes() ) samples.addAll(vc.getSampleNames()); - this.header = samples.isEmpty() ? header : new VCFHeader(header.getMetaData(), samples); + this.header = samples.isEmpty() ? header : new VCFHeader(header.getMetaDataInSortedOrder(), samples); this.vcs = vcs; } @@ -885,12 +885,12 @@ public class VariantContextTestProvider { } public static void assertEquals(final VCFHeader actual, final VCFHeader expected) { - Assert.assertEquals(actual.getMetaData().size(), expected.getMetaData().size(), "No VCF header lines"); + Assert.assertEquals(actual.getMetaDataInSortedOrder().size(), expected.getMetaDataInSortedOrder().size(), "No VCF header lines"); // for some reason set.equals() is returning false but all paired elements are .equals(). Perhaps compare to is busted? - //Assert.assertEquals(actual.getMetaData(), expected.getMetaData()); - final List actualLines = new ArrayList(actual.getMetaData()); - final List expectedLines = new ArrayList(expected.getMetaData()); + //Assert.assertEquals(actual.getMetaDataInInputOrder(), expected.getMetaDataInInputOrder()); + final List actualLines = new ArrayList(actual.getMetaDataInSortedOrder()); + final List expectedLines = new ArrayList(expected.getMetaDataInSortedOrder()); for ( int i = 0; i < actualLines.size(); i++ ) { Assert.assertEquals(actualLines.get(i), expectedLines.get(i), "VCF header lines"); } diff --git a/public/java/test/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriterUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriterUnitTest.java index d4e489420..a7fff4559 100644 --- a/public/java/test/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriterUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/variantcontext/writer/VCFWriterUnitTest.java @@ -39,9 +39,6 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.fasta.CachingIndexedFastaSequenceFile; import org.broadinstitute.sting.utils.variantcontext.*; -import org.broadinstitute.sting.utils.variantcontext.writer.VCFWriter; -import org.broadinstitute.sting.utils.variantcontext.writer.VariantContextWriter; -import org.broadinstitute.sting.utils.variantcontext.writer.VariantContextWriterFactory; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; @@ -166,7 +163,7 @@ public class VCFWriterUnitTest extends BaseTest { Assert.assertEquals(VCFHeader.HEADER_FIELDS.values()[index], field); index++; } - Assert.assertEquals(header.getMetaData().size(), metaData.size()); + Assert.assertEquals(header.getMetaDataInSortedOrder().size(), metaData.size()); index = 0; for (String key : header.getGenotypeSamples()) { Assert.assertTrue(additionalColumns.contains(key));