From c74a78450886fda02286b63b79e29f7bce87f1fd Mon Sep 17 00:00:00 2001 From: theazgra <theazgra@gmail.com> Date: Mon, 18 Mar 2019 14:07:41 +0100 Subject: [PATCH] Histogram code. --- .../czi-parser/compression/benchmark.cpp | 13 +++++++++++ czi-format/czi-parser/main.cpp | 4 ++++ .../czi-parser/utilities/vector_utilities.h | 22 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/czi-format/czi-parser/compression/benchmark.cpp b/czi-format/czi-parser/compression/benchmark.cpp index 2ac45f2..cd9529e 100644 --- a/czi-format/czi-parser/compression/benchmark.cpp +++ b/czi-format/czi-parser/compression/benchmark.cpp @@ -1,5 +1,18 @@ #include "benchmark.h" +template <typename T> +void save_histogram(const std::map<T, size_t> &histogram, const char *fileName) +{ + std::ofstream oStream = std::ofstream(fileName, std::ios::out); + + for (const std::pair<T, size_t> &pair : histogram) + { + oStream << pair.first << ";" << pair.second << std::endl; + } + oStream.flush(); + oStream.close(); +} + static void write_compression_report(const std::vector<BaseBenchmarkRecord> &results, const std::string &reportFile) { std::ofstream csvFile = std::ofstream(reportFile, std::ios::out); diff --git a/czi-format/czi-parser/main.cpp b/czi-format/czi-parser/main.cpp index b73ea25..b1c2075 100644 --- a/czi-format/czi-parser/main.cpp +++ b/czi-format/czi-parser/main.cpp @@ -29,6 +29,10 @@ void show_version() int main(int argc, char **argv) { + ByteArray ba = {10, 10, 10, 25, 65, 23, 59, 100, 23, 100, 25, 10}; + auto histo = vecUtil::create_histogram(ba); + save_histogram(histo, "histogram.csv"); + args::ArgumentParser argParser("CZI file tools", "Optional arguments are in `[]` necessary in `<>`."); // Groups args::Group cziFileGroup(argParser, "CZI file input - necessary.", args::Group::Validators::All); diff --git a/czi-format/czi-parser/utilities/vector_utilities.h b/czi-format/czi-parser/utilities/vector_utilities.h index 81edd9e..7e9a507 100644 --- a/czi-format/czi-parser/utilities/vector_utilities.h +++ b/czi-format/czi-parser/utilities/vector_utilities.h @@ -2,6 +2,7 @@ #include <vector> #include <algorithm> #include <limits> +#include <map> template <typename T> struct MinMax @@ -117,4 +118,25 @@ MinMax<T> find_min_max(const std::vector<T> &data) } return result; } + +template <typename T> +std::map<T, size_t> create_histogram(const std::vector<T> &data) +{ + std::map<T, size_t> histogram; + + T value; + for (size_t i = 0; i < data.size(); i++) + { + value = data[i]; + + if (histogram.count(value) == 0) + { + histogram[value] = 0; + } + + ++histogram[value]; + } + return histogram; +} + }; // namespace vecUtil -- GitLab