final CompressionHeader header = new CompressionHeaderFactory().build(records, substitutionMatrix, coordinateSorted);
Container buildContainer(final List<CramCompressionRecord> records, final SubstitutionMatrix substitutionMatrix) { // sets header APDelta final boolean coordinateSorted = samFileHeader.getSortOrder() == SAMFileHeader.SortOrder.coordinate; final CompressionHeader header = new CompressionHeaderFactory().build(records, substitutionMatrix, coordinateSorted); header.readNamesIncluded = preserveReadNames; final List<Slice> slices = new ArrayList<>(); final Container container = new Container(); container.header = header; container.nofRecords = records.size(); container.globalRecordCounter = globalRecordCounter; container.bases = 0; container.blockCount = 0; long lastGlobalRecordCounter = container.globalRecordCounter; for (int i = 0; i < records.size(); i += recordsPerSlice) { final List<CramCompressionRecord> sliceRecords = records.subList(i, Math.min(records.size(), i + recordsPerSlice)); final Slice slice = Slice.buildSlice(sliceRecords, header); slice.globalRecordCounter = lastGlobalRecordCounter; lastGlobalRecordCounter += slice.nofRecords; container.bases += slice.bases; slices.add(slice); } container.finalizeContainerState(slices.toArray(new Slice[0])); globalRecordCounter += records.size(); return container; }
@Test public void testAP_delta() { boolean sorted = true; CompressionHeader header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), sorted); Assert.assertEquals(header.APDelta, sorted); sorted = false; header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), sorted); Assert.assertEquals(header.APDelta, sorted); }
@Test public void testAllEncodingsPresent() { final CompressionHeader header = new CompressionHeaderFactory().build(new ArrayList<>(), new SubstitutionMatrix(new long[256][256]), true); for (final DataSeries key : DataSeries.values()) { switch (key) { // skip test marks and unused series: case TV_TestMark: case TM_TestMark: case BB_bases: case QQ_scores: Assert.assertFalse(header.encodingMap.containsKey(key), "Unexpected encoding key found: " + key.name()); continue; } Assert.assertTrue(header.encodingMap.containsKey(key), "Encoding key not found: " + key.name()); Assert.assertNotNull(header.encodingMap.get(key)); Assert.assertFalse(header.encodingMap.get(key).id == EncodingID.NULL); } }
CompressionHeader createHeader(final List<CramCompressionRecord> records, final boolean sorted) { return new CompressionHeaderFactory().build(records, new SubstitutionMatrix(new long[256][256]), sorted); }
@Test public void testUnmappedNoRefBuild() { final List<CramCompressionRecord> records = new ArrayList<>(); for (int i = 0; i < 10; i++) { final CramCompressionRecord record = new CramCompressionRecord(); record.readBases = "AAA".getBytes(); record.qualityScores = "!!!".getBytes(); record.readLength = 3; record.readName = "" + i; record.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX; record.alignmentStart = i + 1; record.setLastSegment(true); record.readFeatures = Collections.emptyList(); record.setSegmentUnmapped(true); records.add(record); } final CompressionHeader header = new CompressionHeaderFactory().build(records, null, true); final Slice slice = Slice.buildSlice(records, header); Assert.assertEquals(slice.nofRecords, 10); Assert.assertEquals(slice.sequenceId, SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); Assert.assertEquals(slice.alignmentStart, Slice.NO_ALIGNMENT_START); Assert.assertEquals(slice.alignmentSpan, Slice.NO_ALIGNMENT_SPAN); }
@Test public void testUnmappedNoStartBuild() { final List<CramCompressionRecord> records = new ArrayList<>(); for (int i = 0; i < 10; i++) { final CramCompressionRecord record = new CramCompressionRecord(); record.readBases = "AAA".getBytes(); record.qualityScores = "!!!".getBytes(); record.readLength = 3; record.readName = "" + i; record.sequenceId = i; record.alignmentStart = SAMRecord.NO_ALIGNMENT_START; record.setLastSegment(true); record.readFeatures = Collections.emptyList(); record.setSegmentUnmapped(true); records.add(record); } final CompressionHeader header = new CompressionHeaderFactory().build(records, null, true); final Slice slice = Slice.buildSlice(records, header); Assert.assertEquals(slice.nofRecords, 10); Assert.assertEquals(slice.sequenceId, SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX); Assert.assertEquals(slice.alignmentStart, Slice.NO_ALIGNMENT_START); Assert.assertEquals(slice.alignmentSpan, Slice.NO_ALIGNMENT_SPAN); }
@Test public void testSingleRefBuild() { final List<CramCompressionRecord> records = new ArrayList<>(); for (int i = 0; i < 10; i++) { final CramCompressionRecord record = new CramCompressionRecord(); record.readBases = "AAA".getBytes(); record.qualityScores = "!!!".getBytes(); record.readLength = 3; record.readName = "" + i; record.sequenceId = 0; record.alignmentStart = i + 1; record.setLastSegment(true); record.readFeatures = Collections.emptyList(); if (i % 2 == 0) { record.setSegmentUnmapped(true); } else { record.setSegmentUnmapped(false); } records.add(record); } final CompressionHeader header = new CompressionHeaderFactory().build(records, null, true); final Slice slice = Slice.buildSlice(records, header); Assert.assertEquals(slice.nofRecords, 10); Assert.assertEquals(slice.sequenceId, 0); Assert.assertEquals(slice.alignmentStart, 1); Assert.assertEquals(slice.alignmentSpan, 12); }
@Test public void testMultiRefBuild() { final List<CramCompressionRecord> records = new ArrayList<>(); for (int i = 0; i < 10; i++) { final CramCompressionRecord record = new CramCompressionRecord(); record.readBases = "AAA".getBytes(); record.qualityScores = "!!!".getBytes(); record.readLength = 3; record.readName = "" + i; record.sequenceId = i; record.alignmentStart = i + 1; record.setLastSegment(true); record.readFeatures = Collections.emptyList(); if (i % 2 == 0) { record.setSegmentUnmapped(true); } else { record.setSegmentUnmapped(false); } records.add(record); } final CompressionHeader header = new CompressionHeaderFactory().build(records, null, true); final Slice slice = Slice.buildSlice(records, header); Assert.assertEquals(slice.nofRecords, 10); Assert.assertEquals(slice.sequenceId, Slice.MULTI_REFERENCE); Assert.assertEquals(slice.alignmentStart, Slice.NO_ALIGNMENT_START); Assert.assertEquals(slice.alignmentSpan, Slice.NO_ALIGNMENT_SPAN); }
final CompressionHeader header = new CompressionHeaderFactory().build(records, null, true);
final CompressionHeader header0 = new CompressionHeaderFactory().build(records, null, true); final Slice slice0 = Slice.buildSlice(records, header0); final CompressionHeader header1 = new CompressionHeaderFactory().build(records, null, true); final Slice slice1 = Slice.buildSlice(records, header1); final CompressionHeader header2 = new CompressionHeaderFactory().build(records, null, true); final Slice slice2 = Slice.buildSlice(records, header2);