diff --git a/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java b/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java index 730cb32dde..9ec50681b4 100644 --- a/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java +++ b/src/main/java/htsjdk/variant/vcf/VCFContigHeaderLine.java @@ -78,13 +78,21 @@ public Integer getContigIndex() { /** * Get the SAMSequenceRecord that corresponds to this VCF header line. + * If the VCF header line does not have a length tag, the SAMSequenceRecord returned will be set to have a length of + * SAMSequenceRecord.UNKNOWN_SEQUENCE_LENGTH. Records with unknown length will match any record with the same name + * when evaluated by SAMSequenceRecord.isSameSequence. * @return The SAMSequenceRecord containing the ID, length, assembly, and index of this contig. Returns null if the * contig header line does not have a length. */ public SAMSequenceRecord getSAMSequenceRecord() { final String lengthString = this.getGenericFieldValue("length"); - if (lengthString == null) return null; - final SAMSequenceRecord record = new SAMSequenceRecord(this.getID(), Integer.parseInt(lengthString)); + final int length; + if (lengthString == null) { + length = SAMSequenceRecord.UNKNOWN_SEQUENCE_LENGTH; + } else { + length = Integer.parseInt(lengthString); + } + final SAMSequenceRecord record = new SAMSequenceRecord(this.getID(), length); record.setAssembly(this.getGenericFieldValue("assembly")); record.setSequenceIndex(this.contigIndex); return record; diff --git a/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java b/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java index 5b96f6c23f..e4d5099eda 100644 --- a/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java +++ b/src/test/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java @@ -25,6 +25,8 @@ package htsjdk.variant.vcf; +import htsjdk.samtools.SAMSequenceDictionary; +import htsjdk.samtools.SAMSequenceRecord; import htsjdk.samtools.util.CloseableIterator; import htsjdk.samtools.util.FileExtensions; import htsjdk.samtools.util.IOUtil; @@ -247,7 +249,10 @@ public void testVCFHeaderContigLineMissingLength() { Assert.assertTrue(header.getContigLines().contains(contigLine), "Test contig line not found in contig header lines"); Assert.assertTrue(header.getMetaDataInInputOrder().contains(contigLine), "Test contig line not found in set of all header lines"); - Assert.assertNull(header.getSequenceDictionary()); + final SAMSequenceDictionary sequenceDictionary = header.getSequenceDictionary(); + Assert.assertNotNull(sequenceDictionary); + Assert.assertEquals(sequenceDictionary.getSequence("chr1").getSequenceLength(), SAMSequenceRecord.UNKNOWN_SEQUENCE_LENGTH); + } @Test