diff --git a/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java b/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java index 11d2f3ce9..604e78670 100644 --- a/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java +++ b/src/test/java/htsjdk/samtools/CRAMCRAIIndexerTest.java @@ -22,7 +22,7 @@ @Test public void testCRAIIndexerFromContainer() throws IOException { final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/test2.cram"); - final File refFile = new File("src/test/resources/htsjdk/samtools/cram/test2.fa"); + final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.fa"); ReferenceSource refSource = new ReferenceSource(refFile); CRAMFileReader reader = new CRAMFileReader( CRAMFile, @@ -55,7 +55,7 @@ public void testCRAIIndexerFromContainer() throws IOException { @Test public void testCRAIIndexerFromStream() throws IOException { final File CRAMFile = new File("src/test/resources/htsjdk/samtools/cram/test2.cram"); - final File refFile = new File("src/test/resources/htsjdk/samtools/cram/test2.fa"); + final File refFile = new File("src/test/resources/htsjdk/samtools/cram/auxf.fa"); ReferenceSource refSource = new ReferenceSource(refFile); // get the header to use diff --git a/src/test/java/htsjdk/samtools/CRAMComplianceTest.java b/src/test/java/htsjdk/samtools/CRAMComplianceTest.java index 81cd2f916..635fa6791 100644 --- a/src/test/java/htsjdk/samtools/CRAMComplianceTest.java +++ b/src/test/java/htsjdk/samtools/CRAMComplianceTest.java @@ -1,19 +1,21 @@ package htsjdk.samtools; +import htsjdk.samtools.cram.build.CramIO; import htsjdk.samtools.cram.common.CramVersions; import htsjdk.samtools.cram.ref.ReferenceSource; import htsjdk.samtools.seekablestream.SeekableStream; import htsjdk.samtools.util.Log; + import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.*; +import java.security.DigestInputStream; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; @@ -22,39 +24,66 @@ */ public class CRAMComplianceTest { - @DataProvider(name = "test1") - public Object[][] createData1() { - return new Object[][]{ - {"auxf#values"}, + @FunctionalInterface + public interface TriConsumer { + abstract void accept(T1 arg1, T2 arg2, T3 arg3); + } + + // The files in this provider expose a defect in CRAM conversion of one kind or another + // so the tests are executed using partial verification + @DataProvider(name = "partialVerification") + public Object[][] getPartialVerificationData() { + return new Object[][] { + {"auxf#values"}, // unsigned attributes: https://github.com/samtools/htsjdk/issues/499 + {"c1#noseq"}, // unsigned attributes: https://github.com/samtools/htsjdk/issues/499 + {"c1#unknown"}, // unsigned attributes: https://github.com/samtools/htsjdk/issues/499 + {"ce#5b"}, // reads with no read bases: https://github.com/samtools/htsjdk/issues/509 + {"ce#tag_depadded"},// reads with no read bases: https://github.com/samtools/htsjdk/issues/509 + {"ce#tag_padded"}, // reads with no read bases: https://github.com/samtools/htsjdk/issues/509 + {"ce#unmap"}, // unmapped reads with non-zero MAPQ value that is not restored + // https://github.com/samtools/htsjdk/issues/714 + {"xx#triplet"}, // the version 2.1 variant of this file has a bad insertSize, which is + // probably residual detritus from https://github.com/samtools/htsjdk/issues/364 + {"xx#minimal"}, // cigar string "5H0M5H" is restored as "10H" + // https://github.com/samtools/htsjdk/issues/713 + }; + } + + @Test(dataProvider = "partialVerification") + public void partialVerificationTest(String name) throws IOException { + // do compliance test with partial validation to work around known limitations + doComplianceTest(name, this::assertSameRecordsPartial); + } + + // Files that can be subjected to full SAMRecord equality after conversion + @DataProvider(name = "fullVerification") + public Object[][] getFullVerificationData() { + return new Object[][] { {"c1#bounds"}, {"c1#clip"}, - {"c1#noseq"}, {"c1#pad1"}, {"c1#pad2"}, {"c1#pad3"}, - {"c1#unknown"}, {"ce#1"}, {"ce#2"}, - {"ce#5b"}, {"ce#5"}, {"ce#large_seq"}, {"ce#supp"}, - {"ce#tag_depadded"}, - {"ce#tag_padded"}, {"ce#unmap1"}, {"ce#unmap2"}, - {"ce#unmap"}, {"xx#blank"}, {"xx#large_aux2"}, {"xx#large_aux"}, - {"xx#minimal"}, {"xx#pair"}, {"xx#rg"}, - {"xx#triplet"}, {"xx#unsorted"}, }; } + @Test(dataProvider = "fullVerification") + public void fullVerificationTest(String name) throws IOException { + doComplianceTest(name, (version, expected, actual) -> Assert.assertEquals(expected, actual)); + } @BeforeTest public void beforeTest() { @@ -75,62 +104,60 @@ public TestCase(File root, String name) { } } - @Test(dataProvider = "test1") - public void test(String name) throws IOException { + private void doComplianceTest( + final String name, + final TriConsumer assertFunction) throws IOException { TestCase t = new TestCase(new File("src/test/resources/htsjdk/samtools/cram/"), name); - ReferenceSource source = new ReferenceSource(t.refFile); - SamReader reader = SamReaderFactory.make().validationStringency(ValidationStringency.SILENT).open(t.bamFile); - - final SAMRecordIterator samRecordIterator = reader.iterator(); - List samRecords = new ArrayList(); - while (samRecordIterator.hasNext()) - samRecords.add(samRecordIterator.next()); - SAMFileHeader samFileHeader = reader.getFileHeader(); - reader.close(); + // retrieve all records from the original file + List samRecords = getSAMRecordsFromFile(t.bamFile, t.refFile); + SAMFileHeader samFileHeader = getFileHeader(t.bamFile, t.refFile); + // write them to cram stream ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ReferenceSource source = new ReferenceSource(t.refFile); CRAMFileWriter cramFileWriter = new CRAMFileWriter(baos, source, samFileHeader, name); for (SAMRecord samRecord : samRecords) { cramFileWriter.addAlignment(samRecord); } cramFileWriter.close(); - - CRAMFileReader cramFileReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (SeekableStream)null, source, ValidationStringency.SILENT); + // read them back from the stream and compare to original sam via assertSameRecords + CRAMFileReader cramFileReader = new CRAMFileReader(new ByteArrayInputStream(baos.toByteArray()), (SeekableStream) null, source, ValidationStringency.SILENT); SAMRecordIterator cramFileReaderIterator = cramFileReader.getIterator(); for (SAMRecord samRecord : samRecords) { Assert.assertTrue(cramFileReaderIterator.hasNext()); SAMRecord restored = cramFileReaderIterator.next(); Assert.assertNotNull(restored); - assertSameRecords(CramVersions.DEFAULT_CRAM_VERSION.major, samRecord, restored); + assertFunction.accept(CramVersions.DEFAULT_CRAM_VERSION.major, samRecord, restored); } Assert.assertFalse(cramFileReaderIterator.hasNext()); //v2.1 test - cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_21), (SeekableStream)null, source, ValidationStringency.SILENT); + cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_21), (SeekableStream) null, source, ValidationStringency.SILENT); cramFileReaderIterator = cramFileReader.getIterator(); for (SAMRecord samRecord : samRecords) { Assert.assertTrue(cramFileReaderIterator.hasNext()); SAMRecord restored = cramFileReaderIterator.next(); Assert.assertNotNull(restored); - assertSameRecords(CramVersions.CRAM_v2_1.major, samRecord, restored); + assertFunction.accept(CramVersions.CRAM_v2_1.major, samRecord, restored); } Assert.assertFalse(cramFileReaderIterator.hasNext()); //v3.0 test - cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_30), (SeekableStream)null, source, ValidationStringency.SILENT); + cramFileReader = new CRAMFileReader(new FileInputStream(t.cramFile_30), (SeekableStream) null, source, ValidationStringency.SILENT); cramFileReaderIterator = cramFileReader.getIterator(); for (SAMRecord samRecord : samRecords) { Assert.assertTrue(cramFileReaderIterator.hasNext()); SAMRecord restored = cramFileReaderIterator.next(); Assert.assertNotNull(restored); - assertSameRecords(CramVersions.CRAM_v3.major, samRecord, restored); + assertFunction.accept(CramVersions.CRAM_v3.major, samRecord, restored); } Assert.assertFalse(cramFileReaderIterator.hasNext()); } - private void assertSameRecords(int majorVersion, SAMRecord record1, SAMRecord record2) { + private void assertSameRecordsPartial(Integer majorVersion, SAMRecord record1, SAMRecord record2) { + // test a partial set of fields for equality, avoiding known CRAM conversion issues Assert.assertEquals(record2.getFlags(), record1.getFlags()); Assert.assertEquals(record2.getReadName(), record1.getReadName()); Assert.assertEquals(record2.getReferenceName(), record1.getReferenceName()); @@ -139,6 +166,7 @@ private void assertSameRecords(int majorVersion, SAMRecord record1, SAMRecord re /** * Known issue: CRAM v2.1 doesn't handle reads with missing bases correctly. This * causes '*' bases to arise when reading CRAM. Skipping the base comparison asserts. + * https://github.com/samtools/htsjdk/issues/509 */ if (record1.getReadBases() != SAMRecord.NULL_SEQUENCE || majorVersion >= CramVersions.CRAM_v3.major) { Assert.assertEquals(record2.getReadBases(), record1.getReadBases()); @@ -147,4 +175,128 @@ private void assertSameRecords(int majorVersion, SAMRecord record1, SAMRecord re Assert.assertEquals(record2.getBaseQualities(), record1.getBaseQualities()); } + @DataProvider(name = "CRAMSourceFiles") + public Object[][] getCRAMSources() { + final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/cram"); + + return new Object[][] { + {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.0-unMapped.cram"), + new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta")}, + {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.1-unMapped.cram"), + new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta")}, + {new File(TEST_DATA_DIR, "NA12878.20.21.1-100.100-SeqsPerSlice.500-unMapped.cram"), + new File(TEST_DATA_DIR, "human_g1k_v37.20.21.1-100.fasta")}, + {new File(TEST_DATA_DIR, "test.cram"), new File(TEST_DATA_DIR, "auxf.fa")}, + {new File(TEST_DATA_DIR, "test2.cram"), new File(TEST_DATA_DIR, "auxf.fa")}, + }; + } + + @Test(dataProvider = "CRAMSourceFiles") + public void testCRAMThroughBAMRoundTrip(final File originalCRAMFile, final File referenceFile) throws IOException { + + // retrieve all records from the cram and make defensive deep copies + List originalCRAMRecords = getSAMRecordsFromFile(originalCRAMFile, referenceFile); + List copiedCRAMRecords = new ArrayList<>(); + originalCRAMRecords.forEach(origRec -> copiedCRAMRecords.add(origRec.deepCopy())); + + // write copies of the CRAM records to a BAM, and then read them back in + final File tempBamFile = File.createTempFile("testCRAMToBAMToCRAM", BamFileIoUtils.BAM_FILE_EXTENSION); + tempBamFile.deleteOnExit(); + SAMFileHeader samHeader = getFileHeader(originalCRAMFile, referenceFile); + writeRecordsToFile(copiedCRAMRecords, tempBamFile, referenceFile, samHeader); + List bamRecords = getSAMRecordsFromFile(tempBamFile, referenceFile); + + // compare to originals + int i = 0; + for (SAMRecord rec : bamRecords) { + rec.setIndexingBin(null); + Assert.assertTrue(rec.equals(originalCRAMRecords.get(i++))); + } + Assert.assertEquals(i, originalCRAMRecords.size()); + + // write the BAM records to a CRAM and read them back in + final File tempCRAMFile = File.createTempFile("testCRAMToBAMToCRAM", CramIO.CRAM_FILE_EXTENSION); + tempCRAMFile.deleteOnExit(); + writeRecordsToFile(bamRecords, tempCRAMFile, referenceFile, samHeader); + List roundTripCRAMRecords = getSAMRecordsFromFile(tempCRAMFile, referenceFile); + + // compare to originals + i = 0; + for (SAMRecord rec : roundTripCRAMRecords) { + Assert.assertTrue(rec.equals(originalCRAMRecords.get(i++))); + } + Assert.assertEquals(i, originalCRAMRecords.size()); + } + + @Test + public void testBAMThroughCRAMRoundTrip() throws IOException, NoSuchAlgorithmException { + final File TEST_DATA_DIR = new File("src/test/resources/htsjdk/samtools/cram"); + + // These files are reduced versions of the CEUTrio.HiSeq.WGS.b37.NA12878.20.21.bam and human_g1k_v37.20.21.fasta + // files used in GATK4 tests. The first 8000 records from chr20 were extracted; from those around 80 placed but + // unmapped reads that contained cigar elements were removed, along with one read who's mate was on chr21. + // Finally all read positions were remapped to the subsetted reference file, which contains only the ~9000 bases + // used by the reduced read set. + final File originalBAMInputFile = new File(TEST_DATA_DIR, "CEUTrio.HiSeq.WGS.b37.NA12878.20.first.8000.bam"); + final File referenceFile = new File(TEST_DATA_DIR, "human_g1k_v37.20.subset.fasta"); + + // retrieve all records from the bam and reset the indexing bins to keep comparisons with + // cram records from failing + List originalBAMRecords = getSAMRecordsFromFile(originalBAMInputFile, referenceFile); + for (int i = 0; i < originalBAMRecords.size(); i++) { + originalBAMRecords.get(i).setIndexingBin(null); + } + + // write the BAM records to a temporary CRAM + final File tempCRAMFile = File.createTempFile("testBAMThroughCRAMRoundTrip", CramIO.CRAM_FILE_EXTENSION); + tempCRAMFile.deleteOnExit(); + SAMFileHeader samHeader = getFileHeader(originalBAMInputFile, referenceFile); + writeRecordsToFile(originalBAMRecords, tempCRAMFile, referenceFile, samHeader); + + // read the CRAM records back in and compare to the original BAM records + List cramRecords = getSAMRecordsFromFile(tempCRAMFile, referenceFile); + Assert.assertEquals(cramRecords.size(), originalBAMRecords.size()); + for (int i = 0; i < originalBAMRecords.size(); i++) { + Assert.assertEquals(originalBAMRecords.get(i), cramRecords.get(i)); + } + } + + private SAMFileHeader getFileHeader(final File sourceFile, final File referenceFile) throws IOException { + try (final SamReader reader = SamReaderFactory.make() + .validationStringency(ValidationStringency.SILENT) + .referenceSequence(referenceFile).open(sourceFile)) { + return reader.getFileHeader(); + } + } + + private List getSAMRecordsFromFile(final File sourceFile, final File referenceFile) throws IOException { + List recs = new ArrayList<>(); + try (SamReader reader = SamReaderFactory.make() + .validationStringency(ValidationStringency.SILENT) + .referenceSequence(referenceFile).open(sourceFile)) + { + for (SAMRecord rec : reader) { + recs.add(rec); + } + } + return recs; + } + + private void writeRecordsToFile ( + final List recs, + final File targetFile, + final File referenceFile, + final SAMFileHeader samHeader) { + + // NOTE: even when the input is coord-sorted, using assumePresorted=false will cause some + // tests to fail since it can change the order of some unmapped reads - AFAICT this is allowed + // by the spec since the order is arbitrary for unmapped + try (final SAMFileWriter writer = new SAMFileWriterFactory() + .makeWriter(samHeader, true, targetFile, referenceFile)) { + for (SAMRecord rec : recs) { + writer.addAlignment(rec); + } + } + } + } diff --git a/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java b/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java index c49552838..312bf5404 100644 --- a/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java +++ b/src/test/java/htsjdk/samtools/CRAMFileWriterTest.java @@ -248,6 +248,7 @@ public void test_roundtrip_tlen_preserved() throws IOException { SAMRecord record1 = iterator.next(); SAMRecord record2 = records.get(i++); Assert.assertEquals(record1.getInferredInsertSize(), record2.getInferredInsertSize(), record1.getReadName()); + Assert.assertEquals(record1, record2, record1.getReadName()); } Assert.assertEquals(records.size(), i); } diff --git a/src/test/resources/htsjdk/samtools/cram/CEUTrio.HiSeq.WGS.b37.NA12878.20.first.8000.bam b/src/test/resources/htsjdk/samtools/cram/CEUTrio.HiSeq.WGS.b37.NA12878.20.first.8000.bam new file mode 100644 index 000000000..9df4f69dd Binary files /dev/null and b/src/test/resources/htsjdk/samtools/cram/CEUTrio.HiSeq.WGS.b37.NA12878.20.first.8000.bam differ diff --git a/src/test/resources/htsjdk/samtools/cram/fieldarith.sam b/src/test/resources/htsjdk/samtools/cram/fieldarith.sam deleted file mode 100644 index 180d1e8ff..000000000 --- a/src/test/resources/htsjdk/samtools/cram/fieldarith.sam +++ /dev/null @@ -1,15 +0,0 @@ -@SQ SN:one LN:1000 -@SQ SN:two LN:500 -@CO For each SAM record that has each listed aux field, performs these tests: -@CO XQ is the expected result for bam_cigar2qlen() -@CO XR is the expected result for bam_cigar2rlen() -@CO XE is the expected result for bam_endpos() -@CO (Note that these are all zero-based, while POS is one-based in SAM) -r1 0 one 50 20 8M * 0 0 ATGCATGC qqqqqqqq XQ:i:8 XR:i:8 XE:i:57 -r2 0 one 100 20 50M * 0 0 ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq XQ:i:50 XR:i:50 XE:i:149 -unmapped 5 two 200 0 * two 200 0 ATGCATGC qqqqqqqq XQ:i:0 XR:i:0 XE:i:200 -hascigar 5 two 200 0 6M2S two 200 0 ATGCATGC qqqqqqqq XQ:i:8 XR:i:6 XE:i:200 -s1 0 one 300 20 2M * 0 0 AT qq XQ:i:2 XR:i:2 XE:i:301 -su1 4 * 0 0 * * 0 0 AT qq XQ:i:0 XR:i:0 XE:i:0 -su2 5 two 400 0 * two 400 0 AT qq XQ:i:0 XR:i:0 XE:i:400 -su3 4 one 500 0 2M * 0 0 AT qq XQ:i:2 XR:i:2 XE:i:500 diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.dict b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.dict new file mode 100644 index 000000000..cfab32082 --- /dev/null +++ b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.dict @@ -0,0 +1,2 @@ +@HD VN:1.0 SO:unsorted +@SQ SN:20 LN:9000 M5:46ad963a88a95089707c4639ad196126 UR:file:///Users/cmn/projects/cram/final/hum.20.fasta diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta new file mode 100644 index 000000000..27ed99408 --- /dev/null +++ b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta @@ -0,0 +1,151 @@ +>20 +TTGTCCCTGTATCATTTACTGAAAAGACTCTTCTTTTCCCCATTAGATGGTCTTGAAACG +TTGTTAAAATTCAACTGACCATAGGTGTATTGGTTTATTTCTGTACTCTTAGTAGATTCC +ATTGACCTATATCTCTATCCTTATGCCAGTACCACAGTTTTGTTTACTACAGCTTTGTAG +TAAATTTTGAACTCTAAAGTGTTAGTTCTCTAACTTTGTTTGTTTTTCAAGAGTGTTTTG +ACTCTTCTTACTGCATCCCTTGCATTTCCATATGGACTTTATAATCAGCCATGTCAACTT +CTGCAAGAAAGACAGCTAGGATTTTGATAAGGATTGTGTTGAATCTGTAGTCCAATTTTG +GGAATACTACCATGTTAACATCGTCTTCCCATCCATGCACGTGCAATAGCTTACCATTTA +TTTGGTCTTCCTCAATTTCTGTCAACAATGATTTGTAGTTTTCAGTTGCAAGTCTTGCAC +TTCTTTTGTTAAACTTTTTCCAAATATTTATTCTTCTTAATTACATAATTCTCATAATTA +ATAAAATTCTGAAATTTTCTTAATTTCATTTTTGTGGCCATGCACTTTAAAACTTGCCTT +TTAACAAGACTTCCAGATGATTCTTGTGAACATTAAGTTTGTGAAGTGCTTCTCTATTGA +CAAACTGAACTCACGTGACATTCCACACAGCACTGGCAAATTCTGTCCCGTAACTCCGCT +AGCTCTCCAACAAGAAGTGACTTGACGCAGCCCAAGGTTACTACTTAACACAATGAATTA +AATGTTTTTAAATAAGAGGAAGCAATAAGATTCTAAAGGCTTTTCTGTTTTAATTTTCAT +GCAATGGAAAACTGGTATTAAATATCTATTTAATTAGGAGGAAACTACAATGCTGACTTT +TGTCTGAATTATGTAGATAAGTGATTCATTTGAAACAATTATTTTGATAATTGTCAATTA +TCCATTTCATTTTAATGCATTTTTTATTCTTTTTTCAAAAATAGCAACAATTACAACAGT +TAAACCTTATAATGAATATGTTTCCTAAACCCTGTTCTACTTTCTGGTTCCAGATCTGAC +ACCAATTACCTTTCTGATTTTGGACAAACCACTTAATATTTGTAACTTACAATTACTTCA +ACTGAATAATAAAAGAATTGGACTAGATTTCTCCAACATCTCTCTCTTTTGGCTTTATGT +TAGATAATGCTAAATTTTCATCATATCCAAACATGCTATATAATTTTATGAACTGTTACA +GAGTCAGACATAAGCAATATAAAGTATGATTCTGAATAAAGGCTGTGAAGTCTCGTTTTT +CATACATAATTACAGGAACCGATCAAATTCAATAAAGCATTTATAGTCATGACAATATAT +TCTCTTAACTTGCAATGTGGTTTTAGGAAACAATGAAACAAATTAAACAAATGCATGATT +CCTTAAATTTTGTTGACTCGGGATTTAGTTACATATAAGACTCTTTTCCCCCAGCCAGAT +TAACCCTGCTCTGTATATGTAATACGCATCTTCCCCCCAAATTTCACAATAATAATTTTA +TGAAAATCAGTATGTAAGTTGCTGCATTGGCATGAAAGGCTACTAATGTGATATCTTTCA +AAGATAAAGTGAACGTTTTTGTAAAAAGCCACCACACTGGAGGCATTTAACAATATTCAT +CTTCCTATGGCATTACTACCCTAGATGTACTTTGCAATATTAATCAAGCCTTGTCTTACT +TCAGGCTTCCTAGAAATAGAGCACAAGGCAGGGATTCTTTCTTGCTCGGTGATTTATTGA +GGAAGTGCTCTCAGAAGAAATTGGTAAGATGCTAAGGAGAACAGCAAAGGACAGGAGAAG +GGGGCTGAGCAGAGATGGGGATCTAACTGGAATCTGGCCTTTGCTGATTACCAGAGCAGC +TCTGGGTGCGAATGGTGAAGTGCTGTTCTATTGACAAACTCCACTCAAGTGACATTCCAT +GCAGCACTGCCAAATTCTGTCCCATAACTCTGCTAGCTCTTCAACAAGAAGTAACTTGAG +GCAGCACAGTTACAGAAAACAGCACAAGAACCAAGGATACTAAACAGTGACTTAAATGTT +TTTAGATAAGAGGAAGCAATGAGATACTATAGGGTTTTAATTTCTGTGCAATGGAAAACT +AGTATTAAATATTTATTAATTAGGAGGAAACGACAATGCTGACTTCTGTCTGCATTATAG +ACAAAATTGAGTTCTCCAACCATGAGGCAAGGTGCTGGCTTTTTGTACCCCTGCACTATT +CATTTGATGGGTGAGTGCACTGTAACTTCCAGACGTCTCTTGGTAGGTGGGCCCCACTGG +CCAAGGGCATTTCCCGGGAGAGTGAACGGCTGTGAGCTACTAGCAGTAGCAGTCACAGCA +GCTGGGAGGAAACACACTGGTCAGGTAAAGGGCCAGCATCTACCAAGGTCCAGTTCCACA +ATTAGTGGAGAAATATTTAATAACATTATTTTTGAAAATAATTAGGCCATATGACTTTGA +CACTTTTTCTCTAGCAAAGTGACTAAAGAGAAGCAGGTTTTTAACTGGGTTTTTATTTCT +GTTGTGTCTCTAGCCAAAGCCATGCTGATGTTTGATAGTTTTTTTTTTTCTTTTTTTAAG +AGATGGGGTTTCACCATGTTGGCCATGCTGGTCGTGAACTCCTGACCTCAATGGCCTCCC +AAACTGTTGGGATTACAGACGTGAGCCACCACGCCCAGCCAGAATTTTTTTTCCTAAAGA +ATAGAACAACATTATAAAATTTTAGGCATTAAGGACAAATTTTATTTTATGATTTTCATT +TCGGTGAGTCACAAGATATTCAACACAAAATGAAACTTCACAAAATTTCACAAAATGAAA +AATTCATTTCAGATTCAATATCCACCTCCATCATCCATATTCATTCTTCCAATGTCTCAG +GCCAGAAATTTGGAGTATGTGGCTTCTCCACCTCACACAATTTGCCCTAACTTTAATATA +TACTCAGAAATTACTGGCTTTTCACTGTTTCTATGATTCCCATGTGTAATATACAATACT +CACCATGCATACAATAATACAATAATTCTGTGTCACAACCACACCTAAATTGGTAAGTTT +ATAAGGTTATAAGCTGAGAGGTTTTGCTGATCTTGGCTGAGCTCAGCTGGGCAGGTCTTC +CGGTCTTGGCTGGGGTTCACTGACACACAAGCAGCTGACAGTTGGCTGATCTAGGATGGC +CTCAGCTGGGATGACAGGCTGTTTCCTCACCTTCCAGCAGGCAAGCCAGTCCCAAGAAAG +AGAAGGGTGAAACATGGAGGCCATTAATTGAGCCCATCGCATGAAACGCATCTGTGACAC +CATCACCGTCTGATATCAACTCTCACCTGGATGTTTGCAATCGCCTAACTTTTCTCCTTT +CATTCACTATGCTGCCTTACAAACCTATTCTCCACAAATCAGCTAGAGCAAACCTTTTAA +ATCCTAAGTAGAATGCTACCATTCCTCTGCTCAAACTACTGGAGAGGAGATGCCACAGTC +TTTACTATGGTCTTCAAGACCCTATGGGAGGTAGCCCTGTCTTACAACCATAGCCTCCTA +CCACTGCCCCAACATGCACACTGAGTTCCGGCCACAGCATCTGCTTCCTCTTTATTGATC +TGCCAAGGACATGAATGACTCAGAATCTCAAACTTATTCTTCCCTCAGAATCCACTGAGC +CTACTCCCTCTTTTTCTCAAATGGCAACTTCTCAGAGATGCCTTCTCTGGCTAACGTATA +TGTACTAAAACCTCCATCCAGCACTCTATGTCATCCTTACTATGGTTTATTTTTCTTCAT +AGCACCTATCAATTGGTGAAGTATTAAATATGCATTTTTGTTTGTATGCATCTCTCTCCC +CGCACCAGTATGTGAACTCCACCAGACTGGAGAGCGTGTTTATTTTGTTCACTGCTGTAA +CTCCAGTGTCTAGAACAGTGCCTGGCACACAGTAGGTGTTTAATAATGATTTGTTAAGCT +AAGCCAATGAATAAATATTCTTTTGCCCATGAGATGATGTTAAAAATTTTTCAATTATTC +ATAACTGCCTGTAAGGAATGAATGTTAGTGAATTACTGTGATACCAATGAAAGTTAAATG +ATGCAATGAAGATTGGGTGGATCACAAGGTCAGGAGTTTGAGACCATCCTGGCCAATATG +GTGAAACCCCGTCTCTACTAAAAATACCAAAATTAGCTGGGCATCGTGGCAGGACCCTGT +AGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATCGCTTGAACCCAGGAGGCGGAGGTT +GCAGTGAGCCGAGATCACGCCACTGCACTCCAGCCTGGCCGACAGAGTGAGATTCTGTCT +CCAAAAAAAAAAAAAAAAAAGATGTAAATATTATTATTGTTTGCCATCACCCTTATGTGC +TGTCTTGGCTTTATGTCGTGCTTAGATCTTTTCCAGGTGCAATTTGAATTGATGCAACTA +ATGGAAACTACAACAGAAGTTCATATTGCCCTATTGTATTACACTATTTGACTCATCTTT +CAGTATCACCAGGTGCATAAGGAAAATTTCAAAAGTAAATCAAGAGAAAGAAATATGATC +GCAGCTTAACACAATGTAAATTTATTATTTGTACTTTTTGTCTAAATGGTTTGCCTAAAA +GACTGAAAGACATTTTATATTAGTTAGAATACTTGAGGATAATAACATAAAAACTTTCCT +TTCCAACTTGTTTATAAAAGGAAATCTTCACTGTTTTGAACATCAGTTATTTTAAACTTT +TAAGTTGTTAGCACAGCAAAAGCAACAAAATTCTAAGTGCAGTAATCACTTTACTGCGTG +GTCATATGAAATCAAGGCAATGTTATGAGTATTACTGGAAAGCTGGACAGAGTAACGGGA +AAAGTGACTAAAACTATGCAAAACTATGCAAAACTAAGCAGATTGTGTCTCTAGAGTATT +TCCCATCTCAAGTTTAGTTATTTACTAATTTGGCAACATCTGACCTATCTTTAATTGTGA +GAAAATAAACAAACACATAAGCCAACTCTCAGAATATGGTTATACATAGGTGTAGCCTAT +GACTTTGAATGTATTTGTTTGAATAGCGTAAAACAAAATAAAAATAAAATCTTGTTACAG +TGCAAGAAACGGCAGTCATCAAACTAAGATGAGGCAAGTGTCATGAAGTATGAAAATATG +GTACCTGAATTCTATTTATTAGAAAGTCTTCACTGAGCTGAGCATGTTTTTTTTAACAAA +TTCAATTACTGATTTGAATATTTATTATACTTAATTATTGCAGCCATGAAAAGAGGTGCT +GGCTGAGGCTGCATTTAATAAAAACATTTAATCAGCTTGAGGTTAGTAAACCATTTAATT +TGTTTTTTCATGAAGATTTAACTTCTAGAATAATTTCATTTATGTATTTTTAGGTATAGC +CCTAGATTCTGGTCTACATAGTATACAAATCATTTTAGAATGACACTAGGTTATTTCAAC +TGCTTTTCTACAGAAGTGTTAAATAAGGGAGTAAAGTGTTGGCTTTTTCCATAATTGAAA +TAAATGCACAATGAGCAGTAACATCCTGATTTCACTGCTATTTTGTTTAATCAACATAAT +GATGTAGATTTACTCTGTATATATATGGAAGAGTGAAAGAAGGTTGGGAAGGAATAACTA +TCAATTAATATAGGTGATATAGTAGTTATTTTTGCAAATCAACTATAATTTCTGAATGGA +TATTCAGACCATATTTACATTACATAGAAGAGGCACACACCAAAAGATTTAACAAATGTG +CCAAATATTGGTGAATATTTAGTTAGGTACCAAAAGGATGTTGTATAAATTAGGATGCTT +TCAACCATAAGAGACTCATCTCAAAAATGGCTTGAAAATGTGGGGAATTTTTATCTCAGT +GTGAAGTTAAAGGTAGGGCAAGTCCAAATCAATTCAAGTTAATTAAAGCCCCAAGTTCTT +GGAATTTGCTCTGCTAGTCTTAGCTGGTTAGCCTTTGTCCTGAAGTTTGTAACTTCATGA +CCAGAAGATGATCGCAATATTTTCTAAGTATAAAGCCTGAAGGTGTAAACCAGGTAGTCT +CAGCAAAACCAATGATGCATGGTCACCTTTCCCTTAGTTGACAAATACTTGCCTTCCAGA +TACTTTGAATCAGAATGGGCATTTTAACTAAGATCCAGTGCAACTAAAGGAATAATCAAA +CAAATGATAAAATAATTATTCTGAGCTGAAAACACAAGTCTGAATATTGGAAGAGGTTCC +TGATTTCCAGGCAGAATAGATAAGCAAAGATATCAACCTAAACACATCCTGGTTATAGTC +TAAAATTTAGAGAATAAATGGGAAAAGATTATGAACTTTAAGGAAGAAATAACAACTTAC +ACATAAAACAAAAAGGAAAAACTATCTGTTGACAGATTTATCACCTGCTAGATAAGAGCA +GAATAACCATTCACTAGGAGAAAATGGGAGAAGCTAGAAGATACTGGAGTAATATTTATA +GAGTACTGAAGAAAAAACAAAAAACAGAAATTCAATACACAGCTAAGATATCATTTACCT +GTAAATGATACATGGTAAAATAAAGGGTAAAATAAGGATATTTGCAGATTCACAAGGAGA +AGTTAGCCTTCACATACTCAGCTGAGGAAAATCCTAGAGACAAAACTCTAACAAAAACAA +ACTAGCCGGGTGCAGTGGTGCAGGCCTGTAGTTCCAGCTACTCAAGAGGCTGAAGTAAGA +GGATCACTGGAGCCCAGGGGTTCTGGGCTGTACTGTGCTATGCTGATCAGGTGTCCACAC +TTAGCTCGCCATCAATATGATGACCTCCCAGGTGGGAAATGGAGCAGGTGAAAACTCCCA +TGCTGATCAGTAGTGGGATCATGTCTGTGAATAATCACTGCACTCCAACTGGGAAACATA +GCAAGACCCCATCTCTAAAAAACAAACAAACAAACAAACAAACAAACAAAAATGTTTCAG +ACAAATGTCAAGATAGAGTAAAAGAAGAAAGTACTGAAGGCCCTTCAACATAAATTGGAT +CAGATAATAAAAATAATAGCAAAGTTCTTTTCATGCTGTATCCTTAATTCTTCACCATAA +TCTTAGGAAGTGAATGTATTAATTATCTTTTGCTATATAACAAATTACTCCCAAAACTTG +GCGGCTTAAAACAACAAATATTATTTCACAATTTCTGTGGGTCAAGAATTTGGAAGTAGT +GACTCTGGCTCAGGGTCTCATTTAAGGTGGTAGTTCAGGATGCCAGTCAGGGCTGCAGGC +ACTGAGGCTGCTTCCTCAATGGCCCACTCACATGGCTGTTGGCTGGAGGCCTCTCTTTCT +CACCACACGGGCCTCTTCATAGGACTGCCCGAGTGTCCTTACAGCGTGGCAGCTGGCTTC +CCCCAGAGTGAACATTCTGAGAGAGAGAGAAAGAGAGAGTTAGAAGGCATGCTGTCACTT +CCACTGTATCCCATTCACCAGAAGTGAGAGACTAAATTCACCAAACAGAAAAGTGAAGGA +GAATGAGGCTCCAGTTTTTTGGGTGAGAGTTGAAGAATGTATGGATATTTTGAACAACCA +CAATATAATTCTTCTTTTCACAGAAGCACAAAAAAATTTATTTAACTTGTCCAAGTTTAC +ACAGTTAGCAAGCAACACCTTTGAGAAAAAAATCCATGTAGTCTGATACAAGCACCCAAA +CTCATAACCACAATGTGAATCTAACTGCTTTTCAATTAAAAAAGAAAGAAAGATTCCCTT +CAAATCTGGCATATGCATTCACATGGAGCATTCATACTGCCAGTGACAGTACCATAGTTA +TATGGAATTAGAAGTTCTAACTTATCTTGGCCAAACTAAAGACTTAGGGCTGGGTAGAAG +GTTGGAGGGATGTAAGGTCATTCTCAAGATCTCATCTAGGAGAAGAAAACAAAATGGGGA +AGTAGAAGACAAAATGCTTTTTTAGGTTGGGAAAGGACTGGGAGAATCAAGCATCTAGAA +ATGGGCACAAAGAGTTACCTTATTTTATTTAAAAGAAAATAAATGTTTGACTATTAATGC +CTGAGAACGGAAGGTGATTATTAATGAGATGAAAAAGTTAATCAGATTCTCCAAGTTAGG +AGGGACTTGAAGACCAAATTGATAAAAATAAAAAAAAAGATGTCATAGTAGAATAATCTA +GATAATAAGCAATCAATGAGACTGAAAAAATAAAATCAAGTATATCATTTGTTACACTAA +ATATTAATATACCAGATTCTCTCATTAAAAAAACAGAGAAAGTCAAATTGGATTAAATAA +GAACAAAAAGTTAGCTATATAGTATTTATCAGAAACATTCTTATAAACAAATTGATAATG +AAAGATTAAAAATAAGAGATTTGAGGCAAGGCAAGCAAAAAGAAATAAATGTTAAACAAG +GAGAAATTAAAGGCTACGGACATTACCTAAGGAAAAGGATGACATAGAGTTACAGTGGCA +AAAGTTAGGAAGCAGATGACATAAATCTATATGCACAAACAGTATGGCCACAAAATACAT +TAATTAAAAATTACTAGAAATATAAGATGACTTTGATTAAAATACACTGATTACAAGGGA +TTTAACATATAAAAATTAGGCTGATGTGGTAAATTTAAATATAATCAAATATTTAGGAAA +ATAGAACAACACAACAAAGTTGATTACATATATTCATTTTCCAGATAGTATACTTTATGC +CTATGAAATAGTTCTTAAAATCAATTATATATGGCCGGGTGCAGTGGCCCACGCCTGTAA +TCCCAGCACTTTGGGAGGCCAAGGCAGGTGGATCACGAGGTCAGGAGATCGAGACCATCC +TGGCTAACACAGTGAAACCCCGTCTCTACTAAAAATACAAAAAAAAAAAAAATTAGCTGG +GCGTGGTGGCTGGAACCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGCGT diff --git a/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta.fai b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta.fai new file mode 100644 index 000000000..77ced1f80 --- /dev/null +++ b/src/test/resources/htsjdk/samtools/cram/human_g1k_v37.20.subset.fasta.fai @@ -0,0 +1 @@ +20 9000 4 60 61 diff --git a/src/test/resources/htsjdk/samtools/cram/test.dict b/src/test/resources/htsjdk/samtools/cram/test.dict deleted file mode 100644 index dfb98d63a..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test.dict +++ /dev/null @@ -1,2 +0,0 @@ -@HD VN:1.4 SO:unsorted -@SQ SN:Sheila LN:20 M5:7ddd8a4b4f2c1dec43476a738b1a9b72 UR:file:/Users/edwardk/Documents/htsjdk/testdata/htsjdk/samtools/cram/auxf.fa diff --git a/src/test/resources/htsjdk/samtools/cram/test.fa b/src/test/resources/htsjdk/samtools/cram/test.fa deleted file mode 100644 index 11d25dda6..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test.fa +++ /dev/null @@ -1,2 +0,0 @@ ->Sheila -GCTAGCTCAGAAAAAAAAAA diff --git a/src/test/resources/htsjdk/samtools/cram/test.fa.fai b/src/test/resources/htsjdk/samtools/cram/test.fa.fai deleted file mode 100644 index f3cdedb55..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test.fa.fai +++ /dev/null @@ -1 +0,0 @@ -Sheila 20 8 20 21 diff --git a/src/test/resources/htsjdk/samtools/cram/test2.dict b/src/test/resources/htsjdk/samtools/cram/test2.dict deleted file mode 100644 index dfb98d63a..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test2.dict +++ /dev/null @@ -1,2 +0,0 @@ -@HD VN:1.4 SO:unsorted -@SQ SN:Sheila LN:20 M5:7ddd8a4b4f2c1dec43476a738b1a9b72 UR:file:/Users/edwardk/Documents/htsjdk/testdata/htsjdk/samtools/cram/auxf.fa diff --git a/src/test/resources/htsjdk/samtools/cram/test2.fa b/src/test/resources/htsjdk/samtools/cram/test2.fa deleted file mode 100644 index 11d25dda6..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test2.fa +++ /dev/null @@ -1,2 +0,0 @@ ->Sheila -GCTAGCTCAGAAAAAAAAAA diff --git a/src/test/resources/htsjdk/samtools/cram/test2.fa.fai b/src/test/resources/htsjdk/samtools/cram/test2.fa.fai deleted file mode 100644 index f3cdedb55..000000000 --- a/src/test/resources/htsjdk/samtools/cram/test2.fa.fai +++ /dev/null @@ -1 +0,0 @@ -Sheila 20 8 20 21