public static CRAIEntry updateStart(final CRAIEntry toClone, final int alignmentStart) { return newEntry(toClone.getSequenceId(), alignmentStart, toClone.getAlignmentSpan()); }
@Test public void testFromCraiLine() { int counter = 1; final int sequenceId = counter++; final int alignmentStart = counter++; final int alignmentSpan = counter++; final int containerOffset = Integer.MAX_VALUE + counter++; final int sliceOffset = counter++; final int sliceSize = counter++; final String line = String.format("%d\t%d\t%d\t%d\t%d\t%d", sequenceId, alignmentStart, alignmentSpan, containerOffset, sliceOffset, sliceSize); final CRAIEntry entry = new CRAIEntry(line); Assert.assertNotNull(entry); Assert.assertEquals(entry.getSequenceId(), sequenceId); Assert.assertEquals(entry.getAlignmentStart(), alignmentStart); Assert.assertEquals(entry.getAlignmentSpan(), alignmentSpan); Assert.assertEquals(entry.getContainerStartByteOffset(), containerOffset); Assert.assertEquals(entry.getSliceByteOffset(), sliceOffset); Assert.assertEquals(entry.getSliceByteSize(), sliceSize); }
private boolean allFoundEntriesIntersectQueryInFind(final List<CRAIEntry> index, final int sequenceId, final int start, final int span) { int foundCount = 0; for (final CRAIEntry found : CRAIIndex.find(index, sequenceId, start, span)) { foundCount++; Assert.assertEquals(found.getSequenceId(), sequenceId); boolean intersects = false; for (int pos = Math.min(found.getAlignmentStart(), start); pos <= Math.max(found.getAlignmentStart() + found.getAlignmentSpan(), start + span); pos++) { if (pos >= found.getAlignmentStart() && pos >= start && pos <= found.getAlignmentStart() + found.getAlignmentSpan() && pos <= start + span) { intersects = true; break; } } if (!intersects) { return false; } } return foundCount > 0; }
@Test public void testFromContainer() { final Container container = new Container(); final Slice slice = new Slice(); slice.sequenceId = 1; slice.alignmentStart = 2; slice.alignmentSpan = 3; slice.containerOffset = 4; slice.offset = 5; slice.size = 6; container.landmarks = new int[]{7}; container.slices = new Slice[]{slice}; final List<CRAIEntry> entries = container.getCRAIEntries(); Assert.assertNotNull(entries); Assert.assertEquals(entries.size(), 1); final CRAIEntry entry = entries.get(0); Assert.assertEquals(entry.getSequenceId(), slice.sequenceId); Assert.assertEquals(entry.getAlignmentStart(), slice.alignmentStart); Assert.assertEquals(entry.getAlignmentSpan(), slice.alignmentSpan); Assert.assertEquals(entry.getContainerStartByteOffset(), slice.containerOffset); Assert.assertEquals(entry.getSliceByteOffset(), slice.offset); Assert.assertEquals(entry.getSliceByteSize(), slice.size); }
public static SeekableStream openCraiFileAsBaiStream(final InputStream indexStream, final SAMSequenceDictionary dictionary) { final List<CRAIEntry> full = CRAMCRAIIndexer.readIndex(indexStream).getCRAIEntries(); Collections.sort(full); final SAMFileHeader header = new SAMFileHeader(); header.setSequenceDictionary(dictionary); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); final CRAMBAIIndexer indexer = new CRAMBAIIndexer(baos, header); for (final CRAIEntry entry : full) { final Slice slice = new Slice(); slice.containerOffset = entry.getContainerStartByteOffset(); slice.alignmentStart = entry.getAlignmentStart(); slice.alignmentSpan = entry.getAlignmentSpan(); slice.sequenceId = entry.getSequenceId(); // NOTE: the recordCount and sliceIndex fields can't be derived from the CRAM index // so we can only set them to zero // see https://github.com/samtools/htsjdk/issues/531 slice.nofRecords = 0; slice.index = 0; slice.offset = entry.getSliceByteOffset(); indexer.processSingleReferenceSlice(slice); } indexer.finish(); return new SeekableMemoryStream(baos.toByteArray(), "CRAI to BAI converter"); }
public static CRAIEntry updateStartContOffset(final CRAIEntry toClone, final int alignmentStart, final int containerStartOffset) { return newEntry(toClone.getSequenceId(), alignmentStart, toClone.getAlignmentSpan(), containerStartOffset, toClone.getSliceByteOffset(), toClone.getSliceByteSize()); } }