@Test public static void testGetNReferences() { Assert.assertEquals(csi.getNumberOfReferences(), 45); }
@Override protected final void initParameters() { readMinShiftAndBinDepth(); readAuxDataAndNRef(); setSequenceIndexes(getNumberOfReferences()); }
/** * Returns count of records unassociated with any reference. Call before the index file is closed * * @return meta data at the end of the bam index that indicates count of records holding no coordinates * or null if no meta data (old index format) */ @Override public Long getNoCoordinateCount() { if (metaDataPos > 0 && position() != metaDataPos) { seek(metaDataPos); } skipToSequence(getNumberOfReferences()); try { // in case of old index file without meta data return readLong(); } catch (final Exception e) { return null; } }
private void skipToSequence(final int sequenceIndex) { if(sequenceIndex > getNumberOfReferences()) { throw new SAMException("Sequence index (" + sequenceIndex + ") is greater than maximum (" + getNumberOfReferences() + ")."); } //Use sequence position cache if available if(sequenceIndexes[sequenceIndex] != -1){ seek(sequenceIndexes[sequenceIndex]); return; } if (metaDataPos > 0 && position() != metaDataPos) { seek(metaDataPos); } for (int i = 0; i < sequenceIndex; i++) { final int nBins = readInteger(); // n_bin for (int j = 0; j < nBins; j++) { readInteger(); // bin readLong(); // loffset final int nChunks = readInteger(); // n_chunk skipBytes(BAMFileConstants.CSI_CHUNK_SIZE * nChunks); } } //Update sequence position cache sequenceIndexes[sequenceIndex] = position(); } }
@Override public long getStartOfLastLinearBin() { if (metaDataPos > 0 && position() != metaDataPos) { seek(metaDataPos); } final int sequenceIndex = getNumberOfReferences(); long loffset = -1L; for (int i = 0; i < sequenceIndex; i++) { final int nBins = readInteger(); // n_bin for (int j = 0; j < nBins; j++) { readInteger(); // bin loffset = readLong(); // loffset final int nChunks = readInteger(); // n_chunk skipBytes(BAMFileConstants.CSI_CHUNK_SIZE * nChunks); } } return loffset; }
/** * Return meta data for the given reference including information about number of aligned, unaligned, and noCoordinate records * * @param reference the reference of interest * @return meta data for the reference */ @Override public BAMIndexMetaData getMetaData(final int reference) { if (metaDataPos > 0 && position() != metaDataPos) { seek(metaDataPos); } final List<Chunk> metaDataChunks = new ArrayList<Chunk>(); final int sequenceCount = getNumberOfReferences(); if (reference >= sequenceCount) { return null; } skipToSequence(reference); final int binCount = readInteger(); // n_bin for (int binNumber = 0; binNumber < binCount; binNumber++) { final int indexBin = readInteger(); // bin final long lOffset = readLong(); // loffset final int nChunks = readInteger(); // n_chunk if (indexBin == getMaxBins() + 1) { readChunks(nChunks, metaDataChunks); } else { skipBytes(BAMFileConstants.CSI_CHUNK_SIZE * nChunks); } } return new BAMIndexMetaData(metaDataChunks); }
final int sequenceCount = getNumberOfReferences();
final int numRefs = existingIndex.getNumberOfReferences();
final int numRefs = existingIndex.getNumberOfReferences();