Map<Integer, AlignmentSpan> getReferences(final Slice slice, final CompressionHeader header, final ValidationStringency validationStringency) throws IOException { final Map<Integer, AlignmentSpan> spanMap = new HashMap<>(); switch (slice.sequenceId) { case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX: spanMap.put(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, AlignmentSpan.UNMAPPED_SPAN); break; case Slice.MULTI_REFERENCE: final Map<Integer, AlignmentSpan> spans = slice.getMultiRefAlignmentSpans(header, validationStringency); addAllSpans(spanMap, spans); break; default: addSpan(slice.sequenceId, slice.alignmentStart, slice.alignmentSpan, slice.nofRecords, spanMap); break; } return spanMap; }
private Map<Integer, AlignmentSpan> getReferences(final Slice slice, final CompressionHeader header, final ValidationStringency validationStringency) { final Map<Integer, AlignmentSpan> spanMap = new HashMap<>(); switch (slice.sequenceId) { case SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX: spanMap.put(SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, AlignmentSpan.UNMAPPED_SPAN); break; case Slice.MULTI_REFERENCE: final Map<Integer, AlignmentSpan> spans = slice.getMultiRefAlignmentSpans(header, validationStringency); addAllSpans(spanMap, spans); break; default: addSpan(slice.sequenceId, slice.alignmentStart, slice.alignmentSpan, slice.nofRecords, spanMap); break; } return spanMap; }
/** * Return a list of CRAI Entries; one for each reference in the multireference slice. * TODO: this should be refactored and delegate to container/slice */ private static Collection<CRAIEntry> getCRAIEntriesForMultiRefSlice( final Slice slice, final CompressionHeader header, final long containerOffset, final int[] landmarks) { final Map<Integer, AlignmentSpan> spans = slice.getMultiRefAlignmentSpans(header, ValidationStringency.DEFAULT_STRINGENCY); List<CRAIEntry> entries = new ArrayList<>(spans.size()); for (int seqId : spans.keySet()) { CRAIEntry e = new CRAIEntry(); e.sequenceId = seqId; AlignmentSpan span = spans.get(seqId); e.alignmentStart = span.getStart(); e.alignmentSpan = span.getSpan(); e.sliceSize = slice.size; e.sliceIndex = slice.index; e.containerStartOffset = containerOffset; e.sliceOffset = landmarks[slice.index]; entries.add(e); } return entries; }
/** * Create index entries for a single container. * @param container the container to index */ public void processContainer(final Container container) { // TODO: this should be refactored and delegate to container/slice if (!container.isEOF()) { for (final Slice s: container.slices) { if (s.sequenceId == Slice.MULTI_REFERENCE) { final Map<Integer, AlignmentSpan> spans = s.getMultiRefAlignmentSpans(container.header, ValidationStringency.DEFAULT_STRINGENCY); this.entries.addAll(spans.entrySet().stream() .map(e -> new CRAIEntry(e.getKey(), e.getValue().getStart(), e.getValue().getSpan(), container.offset, container.landmarks[s.index], s.size)) .collect(Collectors.toList())); } else { entries.add(s.getCRAIEntry(container.offset)); } } } }