// // Created by Fatemeh Almodaresi on 8/28/18. // #ifndef PUFFERFISH_CHAINFINDER_H #define PUFFERFISH_CHAINFINDER_H #include "PufferfishIndex.hpp" #include "PufferfishSparseIndex.hpp" #include "PufferfishLossyIndex.hpp" #include "CommonTypes.hpp" #include "Util.hpp" #include #include "parallel_hashmap/phmap.h" #include "metro/metrohash64.h" class MemClusterer { private: uint32_t maxAllowedRefsPerHit_ = 1000; double consensusFraction_ = 0.65; double pre_merge_chain_sub_thresh_{0.9}; double inv_pre_merge_chain_sub_thresh_{1.0/0.9}; using RefMemMap = pufferfish::util::CachedVectorMap, std::vector, pufferfish::util::pair_hash>; public: void set_chain_sub_opt_thresh_(double pre_merge_chain_sub_thresh, double inv_pre_merge_chain_sub_thresh); double chainSubOptThresh() const; void setConsensusFraction(double cf); double getConsensusFraction() const; void setMaxAllowedRefsPerHit(uint32_t max); uint32_t getMaxAllowedRefsPerHit(); void setHitFilterPolicy(pufferfish::util::HitFilterPolicy hfp); pufferfish::util::HitFilterPolicy getHitFilterPolicy() const; size_t fillMemCollection(std::vector> &hits, //pufferfish::common_types::RefMemMapT& trMemMap, RefMemMap& trMemMap, std::vector &memCollection, uint64_t firstDecoyIndex, phmap::flat_hash_map& other_end_refs); bool findOptChain(std::vector> &hits, pufferfish::util::CachedVectorMap, std::hash>& memClusters, //phmap::flat_hash_map> &memClusters, uint32_t maxSpliceGap, std::vector &memCollection, uint32_t readLen, phmap::flat_hash_map& other_end_refs, bool hChain, RefMemMap& trMemMap, uint64_t firstDecoyIndex, //pufferfish::common_types::RefMemMapT& trMemMap, bool verbose = false); private: itlib::small_vector f; itlib::small_vector p; itlib::small_vector keepMem; itlib::small_vector memIndicesInReverse; itlib::small_vector bestChainEndList; itlib::small_vector chainQuerySig; pufferfish::util::HitFilterPolicy hitFilterPolicy_{pufferfish::util::HitFilterPolicy::FILTER_AFTER_CHAINING}; }; #endif //PUFFERFISH_CHAINFINDER_H