@Override
public BAMIndex getIndex() {
if(!hasIndex())
throw new SAMException("No index is available for this BAM file.");
if(mIndex == null) {
SamIndexes samIndex = getIndexType();
if (samIndex == null) {
mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary())
: new DiskBasedBAMFileIndex(mIndexStream, getFileHeader().getSequenceDictionary());
} else if (samIndex.equals(SamIndexes.BAI)) {
mIndex = mEnableIndexCaching ? new CachingBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping)
: new DiskBasedBAMFileIndex(mIndexFile, getFileHeader().getSequenceDictionary(), mEnableIndexMemoryMapping);
} else if (samIndex.equals(SamIndexes.CSI)) {
mIndex = new CSIIndex(mIndexFile, mEnableIndexMemoryMapping, getFileHeader().getSequenceDictionary());
} else {
throw new SAMFormatException("Unsupported BAM index file: " + mIndexFile.getName());
}
}
return mIndex;
}