#ifndef _PUFFERFISH_INDEX_HPP_ #define _PUFFERFISH_INDEX_HPP_ #include #include "cereal/archives/json.hpp" #include "core/range.hpp" #include "BooPHF.hpp" #include "CanonicalKmer.hpp" #include "CanonicalKmerIterator.hpp" #include "Util.hpp" #include "PufferfishBaseIndex.hpp" #include "compact_vector/compact_vector.hpp" #include "rank9sel.hpp" class PufferfishIndex : public PufferfishBaseIndex { friend PufferfishBaseIndex; using hasher_t = pufferfish::types::hasher_t; using boophf_t = pufferfish::types::boophf_t; using pos_vector_t = PufferfishBaseIndex::pos_vector_t; using seq_vector_t = PufferfishBaseIndex::seq_vector_t; using edge_vector_t = PufferfishBaseIndex::edge_vector_t; using bit_vector_t = PufferfishBaseIndex::bit_vector_t; private: uint32_t k_{0}; uint32_t twok_{0}; uint64_t numKmers_{0}; bool haveEdges_{false}; bool haveRefSeq_{false}; bool haveEqClasses_{true}; std::vector eqClassIDs_; std::vector> eqLabels_; std::vector refNames_; std::vector refLengths_; std::vector completeRefLengths_; std::vector refExt_; std::vector contigTable_; compact::vector contigOffsets_{16}; uint64_t numContigs_{0}; bit_vector_t contigBoundary_; rank9sel rankSelDict; //std::unique_ptr rankSelDict{nullptr}; seq_vector_t seq_; edge_vector_t edge_; pos_vector_t pos_{16}; std::unique_ptr hash_{nullptr}; boophf_t* hash_raw_{nullptr}; size_t lastSeqPos_{std::numeric_limits::max()}; uint64_t numDecoys_{0}; uint64_t firstDecoyIndex_{0}; uint64_t firstDecoyEncodedIndex_{0}; public: PufferfishIndex(); PufferfishIndex(const std::string& indexPath, pufferfish::util::IndexLoadingOpts opts = pufferfish::util::IndexLoadingOpts()); ~PufferfishIndex(); compact::vector refseq_; std::vector refAccumLengths_; // Returns a ProjectedHits object that contains all of the // projected reference hits for the given kmer. auto getRefPos(CanonicalKmer& mer) -> pufferfish::util::ProjectedHits; // Returns a ProjectedHits object that contains all of the // projected reference hits for the given kmer. Uses the results // of the previous contig info (start, end) from qc if the same // contig contains the match. For correlated searches (e.g., from a read) // this can considerably speed up querying. auto getRefPos(CanonicalKmer& mer, pufferfish::util::QueryCache& qc) -> pufferfish::util::ProjectedHits; }; #endif // _PUFFERFISH_INDEX_HPP_