/* * ============================================================================ * * Authors: Prashant Pandey * Rob Johnson * Rob Patro (rob.patro@cs.stonybrook.edu) * * ============================================================================ */ #include "util.h" /* Count distinct items in a sorted list */ uint64_t count_distinct_kmers(std::multiset<__int128_t> kmers) { uint64_t cnt = 0; __int128_t curr_kmer = 0; for(__int128_t kmer: kmers) { if (kmer != curr_kmer) { curr_kmer = kmer; cnt++; } } return cnt; } /* Print elapsed time using the start and end timeval */ void print_time_elapsed(std::string desc, struct timeval* start, struct timeval* end, spdlog::logger* console) { struct timeval elapsed; if (start->tv_usec > end->tv_usec) { end->tv_usec += 1000000; end->tv_sec--; } elapsed.tv_usec = end->tv_usec - start->tv_usec; elapsed.tv_sec = end->tv_sec - start->tv_sec; float time_elapsed = (elapsed.tv_sec * 1000000 + elapsed.tv_usec)/1000000.f; console->info("{} Total Time Elapsed: {} seconds", desc, std::to_string(time_elapsed)); } std::string last_part(std::string str, char c) { uint64_t found = str.find_last_of(c); return str.substr(found + 1); } // A=1, C=0, T=2, G=3 void getRandomKmers(int n, uint64_t range, std::vector& kmers, uint32_t K) { uint64_t kmer; for (int j = 0; j < n; j++) { kmer = 0; for (uint i = 0; i < K; i++) { uint8_t c = rand()%4; kmer = kmer | c; kmer = kmer << 2; } kmer = kmer >> 2; kmers.push_back(kmer%range); } }