/** * Alternative to other one with similar name * * @param directory directory containing SDF * @param indexFile index file * @param loadNames should we load names * @param loadFullNames should we load full names * @param region region to restrict to * @throws IOException IO exception occurs */ CompressedMemorySequencesReader2( File directory, IndexFile indexFile, boolean loadNames, boolean loadFullNames, LongRange region) throws IOException { mIndexFile = indexFile; mRegion = SequencesReaderFactory.resolveRange(indexFile, region); mStart = mRegion.getStart(); mEnd = mRegion.getEnd(); mNumberSequences = mEnd - mStart; mData = DataInMemory.loadDelayQuality( directory, indexFile, DataFileIndex.loadSequenceDataFileIndex(indexFile.dataIndexVersion(), directory), mStart, mEnd); if (mNumberSequences > Integer.MAX_VALUE) { throw new IllegalArgumentException( "Too many sequences in region: " + region + ", maximum is: " + Integer.MAX_VALUE); } mDirectory = directory; if (loadNames && mIndexFile.hasNames()) { loadNames(); loadNameSuffixes(loadFullNames, mIndexFile.hasSequenceNameSuffixes()); } final StringBuilder sb = new StringBuilder("CMSR2 statistics"); sb.append(LS); this.infoString(sb); Diagnostic.userLog(sb.toString()); }
/** * Load the names if they haven't already been loaded. * * @throws IOException if an I/O related error occurs */ private void loadNames() throws IOException { mNames = new PrereadNames(mDirectory, mRegion, false); if (mIndexFile.getVersion() >= IndexFile.SEPARATE_CHECKSUM_VERSION && mRegion.getStart() == 0 && mRegion.getEnd() == mIndexFile.getNumberSequences()) { if (mNames.calcChecksum() != mIndexFile.getNameChecksum()) { throw new CorruptSdfException( "Sequence names failed checksum - SDF may be corrupt: \"" + mDirectory + "\""); } else { Diagnostic.developerLog("Sequence names passed checksum"); } } }
private void loadNameSuffixes(boolean attemptLoad, boolean suffixExists) throws IOException { mNameSuffixes = attemptLoad && suffixExists ? new PrereadNames(mDirectory, mRegion, true) : new EmptyStringPrereadNames(mEnd - mStart); if (attemptLoad && suffixExists) { if (mRegion.getStart() == 0 && mRegion.getEnd() == mIndexFile.getNumberSequences()) { if (mNameSuffixes.calcChecksum() != mIndexFile.getNameSuffixChecksum()) { throw new CorruptSdfException( "Sequence name suffixes failed checksum - SDF may be corrupt: \"" + mDirectory + "\""); } else { Diagnostic.developerLog("Sequence name suffixes passed checksum"); } } } }