private BAMIndexer(final SAMFileHeader fileHeader, Function<Integer, BinaryBAMIndexWriter> createWriter) { if (fileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) { if (fileHeader.getSortOrder() == SAMFileHeader.SortOrder.unsorted) { log.warn("For indexing, the BAM file is required to be coordinate sorted. Attempting to index \"unsorted\" BAM file."); } else { throw new SAMException("Indexing requires a coordinate-sorted input BAM."); } } numReferences = fileHeader.getSequenceDictionary().size(); indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary()); outputWriter = createWriter.apply(numReferences); }
/** * Record any index information for a given BAM record. * If this alignment starts a new reference, write out the old reference. * Requires a non-null value for rec.getFileSource(). * * @param rec The BAM record */ public void processAlignment(final SAMRecord rec) { try { final int reference = rec.getReferenceIndex(); if (reference != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && reference != currentReference) { // process any completed references advanceToReference(reference); } indexBuilder.processAlignment(rec); } catch (final Exception e) { throw new SAMException("Exception creating BAM index for record " + rec, e); } }
/** * Record any index information for a given BAM record. * If this alignment starts a new reference, write out the old reference. * Requires a non-null value for rec.getFileSource(). * * @param rec The BAM record */ public void processAlignment(final SAMRecord rec) { try { final int reference = rec.getReferenceIndex(); if (reference != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && reference != currentReference) { // process any completed references advanceToReference(reference); } indexBuilder.processAlignment(rec); } catch (final Exception e) { throw new SAMException("Exception creating BAM index for record " + rec, e); } }
/** * Record any index information for a given BAM record. * If this alignment starts a new reference, write out the old reference. * Requires a non-null value for rec.getFileSource(). * * @param rec The BAM record */ public void processAlignment(final SAMRecord rec) { try { final int reference = rec.getReferenceIndex(); if (reference != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && reference != currentReference) { // process any completed references advanceToReference(reference); } indexBuilder.processAlignment(rec); } catch (final Exception e) { throw new SAMException("Exception creating BAM index for record " + rec, e); } }
BAMIndexBuilder(final SAMSequenceDictionary sequenceDictionary) { this.sequenceDictionary = sequenceDictionary; if (!sequenceDictionary.isEmpty()) startNewReference(); }
BAMIndexBuilder(final SAMSequenceDictionary sequenceDictionary) { this.sequenceDictionary = sequenceDictionary; if (!sequenceDictionary.isEmpty()) startNewReference(); }
private BAMIndexer(final SAMFileHeader fileHeader, Function<Integer, BinaryBAMIndexWriter> createWriter) { if (fileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) { if (fileHeader.getSortOrder() == SAMFileHeader.SortOrder.unsorted) { log.warn("For indexing, the BAM file is required to be coordinate sorted. Attempting to index \"unsorted\" BAM file."); } else { throw new SAMException("Indexing requires a coordinate-sorted input BAM."); } } numReferences = fileHeader.getSequenceDictionary().size(); indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary()); outputWriter = createWriter.apply(numReferences); }
/** write out any references between the currentReference and the nextReference */ private void advanceToReference(final int nextReference) { while (currentReference < nextReference) { final BAMIndexContent content = indexBuilder.processReference(currentReference); outputWriter.writeReference(content); currentReference++; if (currentReference < numReferences) { indexBuilder.startNewReference(); } } }
/** write out any references between the currentReference and the nextReference */ private void advanceToReference(final int nextReference) { while (currentReference < nextReference) { final BAMIndexContent content = indexBuilder.processReference(currentReference); outputWriter.writeReference(content); currentReference++; if (currentReference < numReferences) { indexBuilder.startNewReference(); } } }
/** write out any references between the currentReference and the nextReference */ private void advanceToReference(final int nextReference) { while (currentReference < nextReference) { final BAMIndexContent content = indexBuilder.processReference(currentReference); outputWriter.writeReference(content); currentReference++; if (currentReference < numReferences) { indexBuilder.startNewReference(); } } }
BAMIndexBuilder(final SAMSequenceDictionary sequenceDictionary) { this.sequenceDictionary = sequenceDictionary; if (!sequenceDictionary.isEmpty()) startNewReference(); }
/** * After all the alignment records have been processed, finish is called. * Writes any final information and closes the output file. */ public void finish() { // process any remaining references advanceToReference(numReferences); outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount()); outputWriter.close(); }
/** * After all the alignment records have been processed, finish is called. * Writes any final information and closes the output file. */ public void finish() { // process any remaining references advanceToReference(numReferences); outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount()); outputWriter.close(); }
/** * Prepare to index a BAM. * @param output Index will be written here. output will be closed when finish() method is called. * @param fileHeader header for the corresponding bam file. */ public BAMIndexer(final OutputStream output, final SAMFileHeader fileHeader) { numReferences = fileHeader.getSequenceDictionary().size(); indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary()); outputWriter = new BinaryBAMIndexWriter(numReferences, output); }
/** * After all the alignment records have been processed, finish is called. * Writes any final information and closes the output file. */ public void finish() { // process any remaining references advanceToReference(numReferences); outputWriter.writeNoCoordinateRecordCount(indexBuilder.getNoCoordinateRecordCount()); outputWriter.close(); }
/** * @param output binary BAM Index (.bai) file * @param fileHeader header for the corresponding bam file */ public BAMIndexer(final File output, final SAMFileHeader fileHeader) { numReferences = fileHeader.getSequenceDictionary().size(); indexBuilder = new BAMIndexBuilder(fileHeader.getSequenceDictionary()); outputWriter = new BinaryBAMIndexWriter(numReferences, output); }