private void readCramRecord() { final CramCompressionRecord cramRecord = new CramCompressionRecord(); super.read(cramRecord); if (APDelta) { currentAlignmentStart += cramRecord.alignmentDelta; } else { currentAlignmentStart = cramRecord.alignmentStart; } if (!spans.containsKey(cramRecord.sequenceId)) { spans.put(cramRecord.sequenceId, new AlignmentSpan(currentAlignmentStart, cramRecord.readLength)); } else { spans.get(cramRecord.sequenceId).addSingle(currentAlignmentStart, cramRecord.readLength); } } }
private void readCramRecord() { final CramCompressionRecord cramRecord = new CramCompressionRecord(); super.read(cramRecord); if (APDelta) { currentAlignmentStart += cramRecord.alignmentDelta; } else { currentAlignmentStart = cramRecord.alignmentStart; } if (!spans.containsKey(cramRecord.sequenceId)) { spans.put(cramRecord.sequenceId, new AlignmentSpan(currentAlignmentStart, cramRecord.readLength)); } else { spans.get(cramRecord.sequenceId).addSingle(currentAlignmentStart, cramRecord.readLength); } } }
private static CramCompressionRecord createMappedRecord(int 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.setSegmentUnmapped(false); record.readFeatures = Collections.emptyList(); return record; }
private static CramCompressionRecord createRecord(int recordIndex, int seqId, int start) { byte[] bases = "AAAAA".getBytes(); int readLength = bases.length; final CramCompressionRecord record = new CramCompressionRecord(); record.setSegmentUnmapped(false); record.setMultiFragment(false); record.sequenceId = seqId; record.alignmentStart =start; record.readBases = record.qualityScores = bases; record.readName = Integer.toString(recordIndex); record.readLength = readLength; record.readFeatures = Collections.emptyList(); return record; } @Test
final CramCompressionRecord record = new CramCompressionRecord(); record.sliceIndex = slice.index; record.index = i;
CramCompressionRecord record = new CramCompressionRecord(); reader.read(record); if (record.isSegmentUnmapped() || record.readFeatures == null || record.readFeatures.isEmpty())
@Test public void testGetDataForTag() { final CompressionHeaderFactory factory = new CompressionHeaderFactory(); final List<CramCompressionRecord> records = new ArrayList<>(); final CramCompressionRecord record = new CramCompressionRecord(); final int tagID = ReadTag.name3BytesToInt("ACi".getBytes()); final byte[] data = new byte[]{1, 2, 3, 4}; final ReadTag tag = new ReadTag(tagID, data, ValidationStringency.STRICT); record.tags = new ReadTag[]{tag}; records.add(record); final byte[] dataForTag = factory.getDataForTag(records, tagID); Assert.assertEquals(dataForTag, data); }
@Test public void test_geByteSizeRangeOfTagValues() { final List<CramCompressionRecord> records = new ArrayList<>(); final int tagID = ReadTag.name3BytesToInt("ACi".getBytes()); // test empty list: CompressionHeaderFactory.ByteSizeRange range = CompressionHeaderFactory.getByteSizeRangeOfTagValues(records, tagID); Assert.assertNotNull(range); Assert.assertEquals(range.min, Integer.MAX_VALUE); Assert.assertEquals(range.max, Integer.MIN_VALUE); // test single record with a single tag: final CramCompressionRecord record = new CramCompressionRecord(); final byte[] data = new byte[]{1, 2, 3, 4}; final ReadTag tag = new ReadTag(tagID, data, ValidationStringency.STRICT); record.tags = new ReadTag[]{tag}; records.add(record); range = CompressionHeaderFactory.getByteSizeRangeOfTagValues(records, tagID); Assert.assertNotNull(range); Assert.assertEquals(range.min, 4); Assert.assertEquals(range.max, 4); }
private CramCompressionRecord read(final byte[] dataBytes, final CompressionHeader header, final int refId, final Map<Integer, ByteArrayInputStream> inputMap) throws IOException { try (final ByteArrayInputStream is = new ByteArrayInputStream(dataBytes); final BitInputStream bis = new DefaultBitInputStream(is)) { final CramRecordReader reader = new CramRecordReader(bis, inputMap, header, refId, ValidationStringency.DEFAULT_STRINGENCY); final CramCompressionRecord recordToRead = new CramCompressionRecord(); reader.read(recordToRead); return recordToRead; } }
private List<ReadFeature> buildMatchOrMismatchReadFeatures(final String refBases, final String readBases, final String scores) { final SAMFileHeader header = new SAMFileHeader(); final CramCompressionRecord record = new CramCompressionRecord(); record.alignmentStart = 1; final List<ReadFeature> readFeatures = new ArrayList<>(); final int fromPosInRead = 0; final int alignmentStartOffset = 0; final int nofReadBases = 1; final Sam2CramRecordFactory sam2CramRecordFactory = new Sam2CramRecordFactory(refBases.getBytes(), header, CramVersions.CRAM_v3); sam2CramRecordFactory.addMismatchReadFeatures(record.alignmentStart, readFeatures, fromPosInRead, alignmentStartOffset, nofReadBases, readBases.getBytes(), SAMUtils.fastqToPhred(scores)); return readFeatures; } }
@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 test_isPlaced() { final CramCompressionRecord r = new CramCompressionRecord(); // it's only Placed if both of these are valid r.sequenceId = 5; r.alignmentStart = 10; Assert.assertTrue(r.isPlaced()); r.sequenceId = SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX; Assert.assertFalse(r.isPlaced()); r.alignmentStart = SAMRecord.NO_ALIGNMENT_START; Assert.assertFalse(r.isPlaced()); r.sequenceId = 3; Assert.assertFalse(r.isPlaced()); r.alignmentStart = 15; Assert.assertTrue(r.isPlaced()); } }
final CramCompressionRecord record = new CramCompressionRecord(); record.sliceIndex = slice.index; record.index = i;
final CramCompressionRecord record = new CramCompressionRecord(); record.sliceIndex = slice.index; record.index = i;
final List<CramCompressionRecord> records = new ArrayList<>(); final CramCompressionRecord single = new CramCompressionRecord(); single.readBases = "AAA".getBytes(); single.qualityScores = "!!!".getBytes(); final CramCompressionRecord unmapped = new CramCompressionRecord(); unmapped.readBases = "AAA".getBytes(); unmapped.qualityScores = "!!!".getBytes();
@Test public void test_buildFrequencies() { final CramCompressionRecord record = new CramCompressionRecord(); final Substitution s = new Substitution(); s.setPosition(1); final byte refBase = 'A'; final byte readBase = 'C'; s.setBase(readBase); s.setReferenceBase(refBase); s.setCode((byte) 1); record.readFeatures = new ArrayList<>(); record.readFeatures.add(s); record.readLength = 2; final List<CramCompressionRecord> records = new ArrayList<>(); records.add(record); final long[][] frequencies = CompressionHeaderFactory.buildFrequencies(records); for (int i = 0; i < frequencies.length; i++) { for (int j = 0; j < frequencies[i].length; j++) { if (i != refBase && j != readBase) { Assert.assertEquals(frequencies[i][j], 0); } } } Assert.assertEquals(frequencies[refBase][readBase], 1); }
@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); }
@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 test_updateSubstitutionCodes() { final CramCompressionRecord record = new CramCompressionRecord(); final Substitution s = new Substitution(); s.setPosition(1); final byte refBase = 'A'; final byte readBase = 'C'; s.setBase(readBase); s.setReferenceBase(refBase); record.readFeatures = new ArrayList<>(); record.readFeatures.add(s); record.readLength = 2; final List<CramCompressionRecord> records = new ArrayList<>(); records.add(record); final long[][] frequencies = new long[256][256]; frequencies[refBase][readBase] = 1; SubstitutionMatrix matrix = new SubstitutionMatrix(frequencies); Assert.assertTrue(s.getCode() == -1); CompressionHeaderFactory.updateSubstitutionCodes(records, matrix); Assert.assertFalse(s.getCode() == -1); Assert.assertEquals(s.getCode(), matrix.code(refBase, readBase)); }