Files @ eba8261885e8
Branch filter:

Location: AENC/switchchain/cpp/histogram.hpp - annotation

Tom Bannink
Change trimeevol plot for thesis
#pragma once
#include "exports.hpp"
#include <algorithm>
#include <vector>

// Histogram over integers with binsize 1
class Histogram {
  public:
    Histogram() : xmin(0) {}
    ~Histogram() {}

    void reset() {
        frequencies.clear();
        xmin = 0;
    }

    void add(int sample) {
        if (frequencies.empty()) {
            xmin = sample;
            frequencies.push_back(1);
            return;
        }
        if (sample < xmin) {
            int extra = xmin - sample;
            frequencies.insert(frequencies.begin(), extra, 0);
            xmin = sample;
            frequencies.front()++;
            return;
        }
        if (sample - xmin >= (int)frequencies.size()) {
            int extra = sample - xmin - frequencies.size() + 1;
            frequencies.insert(frequencies.end(), extra, 0);
            frequencies.back()++;
            return;
        }
        frequencies[sample - xmin]++;
    }

    // For exports
    std::vector<std::pair<int, int>> getHistogram() const {
        std::vector<std::pair<int, int>> histogram;
        int i = xmin;
        for (auto f : frequencies)
            histogram.push_back({i++, f});
        return histogram;
    }

    std::vector<int> frequencies;
    int xmin;
};