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 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 Slice slice = Slice.buildSlice(records, header);
final Slice slice0 = Slice.buildSlice(records, header0); final Slice slice1 = Slice.buildSlice(records, header1); final Slice slice2 = Slice.buildSlice(records, header2);