diff --git a/.gitmodules b/.gitmodules index 3852e66..78fb749 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,9 +16,6 @@ [submodule "vendor/rampler"] path = vendor/rampler url = https://github.com/rvaser/rampler -[submodule "vendor/logger"] - path = vendor/logger - url = https://github.com/rvaser/logger [submodule "vendor/ClaraGenomicsAnalysis"] path = vendor/ClaraGenomicsAnalysis url = https://github.com/clara-genomics/ClaraGenomicsAnalysis diff --git a/CMakeLists.txt b/CMakeLists.txt index 4759cb4..da6dc03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(racon) -set(racon_version 1.4.9) +set(racon_version 1.4.10) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) @@ -30,6 +30,7 @@ include_directories(${PROJECT_SOURCE_DIR}/src) set(racon_sources src/main.cpp + src/logger.cpp src/polisher.cpp src/overlap.cpp src/sequence.cpp @@ -58,9 +59,6 @@ endif() if (NOT TARGET edlib) add_subdirectory(vendor/edlib EXCLUDE_FROM_ALL) endif() -if (NOT TARGET logger) - add_subdirectory(vendor/logger EXCLUDE_FROM_ALL) -endif() if (racon_enable_cuda) if (DEFINED CLARAGENOMICSANALYSIS_SDK_PATH) list(APPEND CMAKE_PREFIX_PATH "${CLARAGENOMICSANALYSIS_SDK_PATH}/cmake") @@ -90,7 +88,7 @@ if (racon_enable_cuda) endif() endif() -target_link_libraries(racon bioparser spoa thread_pool edlib_static logger) +target_link_libraries(racon bioparser spoa thread_pool edlib_static) if (racon_enable_cuda) target_link_libraries(racon cudapoa cudaaligner) endif() @@ -106,6 +104,7 @@ if (racon_build_tests) set(racon_test_sources test/racon_test.cpp + src/logger.cpp src/polisher.cpp src/overlap.cpp src/sequence.cpp @@ -123,7 +122,7 @@ if (racon_build_tests) add_subdirectory(vendor/googletest/googletest EXCLUDE_FROM_ALL) endif() - target_link_libraries(racon_test bioparser spoa thread_pool edlib_static logger gtest_main) + target_link_libraries(racon_test bioparser spoa thread_pool edlib_static gtest_main) if (racon_enable_cuda) target_link_libraries(racon_test cudapoa cudaaligner) endif() diff --git a/src/cuda/cudapolisher.cpp b/src/cuda/cudapolisher.cpp index 1c3afdd..4a83d74 100644 --- a/src/cuda/cudapolisher.cpp +++ b/src/cuda/cudapolisher.cpp @@ -10,11 +10,11 @@ #include #include "sequence.hpp" +#include "logger.hpp" #include "cudapolisher.hpp" #include #include "bioparser/bioparser.hpp" -#include "logger/logger.hpp" namespace racon { diff --git a/src/logger.cpp b/src/logger.cpp new file mode 100644 index 0000000..b601602 --- /dev/null +++ b/src/logger.cpp @@ -0,0 +1,56 @@ +/*! + * @file logger.cpp + * + * @brief Logger source file + */ + +#include + +#include "logger.hpp" + +namespace racon { + +Logger::Logger() + : time_(0.), bar_(0), time_point_() { +} + +Logger::~Logger() { +} + +void Logger::log() { + auto now = std::chrono::steady_clock::now(); + if (time_point_ != std::chrono::time_point()) { + time_ += std::chrono::duration_cast>(now - time_point_).count(); + } + time_point_ = now; +} + +void Logger::log(const std::string& msg) const { + std::cerr << msg << " " << std::fixed + << std::chrono::duration_cast>(std::chrono::steady_clock::now() - time_point_).count() + << " s" << std::endl; +} + +void Logger::bar(const std::string& msg) { + ++bar_; + std::string progress_bar = "[" + std::string(bar_, '=') + (bar_ == 20 ? "" : ">" + std::string(19 - bar_, ' ')) + "]"; + + std::cerr << msg << " " << progress_bar << " " << std::fixed + << std::chrono::duration_cast>(std::chrono::steady_clock::now() - time_point_).count() + << " s"; + + bar_ %= 20; + if (bar_ == 0) { + std::cerr << std::endl; + } else { + std::cerr << "\r"; + } +} + +void Logger::total(const std::string& msg) const { + std::cerr << msg << " " << std::fixed + << time_ + std::chrono::duration_cast>(std::chrono::steady_clock::now() - time_point_).count() + << " s" << std::endl; +} + +} diff --git a/src/logger.hpp b/src/logger.hpp new file mode 100644 index 0000000..54f08e4 --- /dev/null +++ b/src/logger.hpp @@ -0,0 +1,56 @@ +/*! + * @file logger.hpp + * + * @brief Logger header file + */ + +#pragma once + +#include +#include +#include + +namespace racon { + +static const std::string version = "v1.0.0"; + +class Logger { +public: + Logger(); + + Logger(const Logger&) = default; + Logger& operator=(const Logger&) = default; + + Logger(Logger&&) = default; + Logger& operator=(Logger&&) = default; + + ~Logger(); + + /*! + * @brief Resets the time point + */ + void log(); + + /*! + * @brief Prints the elapsed time from last time point to stderr + */ + void log(const std::string& msg) const; + + /*! + * @brief Prints a progress bar and the elapsed time from last time to + * stderr (the progress bar resets after 20 calls) + */ + void bar(const std::string& msg); + + /*! + * @brief Prints the total elapsed time from the first log() call + */ + void total(const std::string& msg) const; + +private: + double time_; + std::uint32_t bar_; + std::chrono::time_point time_point_; +}; + +} diff --git a/src/polisher.cpp b/src/polisher.cpp index 9a62074..7dff3b4 100644 --- a/src/polisher.cpp +++ b/src/polisher.cpp @@ -11,6 +11,7 @@ #include "overlap.hpp" #include "sequence.hpp" #include "window.hpp" +#include "logger.hpp" #include "polisher.hpp" #ifdef CUDA_ENABLED #include "cuda/cudapolisher.hpp" @@ -19,7 +20,6 @@ #include "bioparser/bioparser.hpp" #include "thread_pool/thread_pool.hpp" #include "spoa/spoa.hpp" -#include "logger/logger.hpp" namespace racon { @@ -170,7 +170,7 @@ Polisher::Polisher(std::unique_ptr> sparser, alignment_engines_(), sequences_(), dummy_quality_(window_length, '!'), window_length_(window_length), windows_(), thread_pool_(thread_pool::createThreadPool(num_threads)), - thread_to_id_(), logger_(new logger::Logger()) { + thread_to_id_(), logger_(new Logger()) { uint32_t id = 0; for (const auto& it: thread_pool_->thread_identifiers()) { diff --git a/src/polisher.hpp b/src/polisher.hpp index 1e96dcd..42e42fa 100644 --- a/src/polisher.hpp +++ b/src/polisher.hpp @@ -25,15 +25,13 @@ namespace spoa { class AlignmentEngine; } -namespace logger { - class Logger; -} namespace racon { class Sequence; class Overlap; class Window; +class Logger; enum class PolisherType { kC, // Contig polishing @@ -95,7 +93,7 @@ class Polisher { std::unique_ptr thread_pool_; std::unordered_map thread_to_id_; - std::unique_ptr logger_; + std::unique_ptr logger_; }; } diff --git a/vendor/logger b/vendor/logger deleted file mode 160000 index b88c8ee..0000000 --- a/vendor/logger +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b88c8ee8ba59fd07b40c022957b7bdce1a5f8502