File Histogram.hpp¶
File List > data > Histogram.hpp
Go to the documentation of this file
//
// SPDX-FileCopyrightText: 2026 Michal Grabarczyk
// SPDX-License-Identifier: GPL-3.0-only WITH Universal-FOSS-exception-1.0
//
// This file is also available under a separate commercial license.
// See COMMERCIAL-LICENSING.md for contact information.
//
#pragma once
#include <QList>
#include <QObject>
#include <QVariantList>
#if __has_include(<QtQmlIntegration/qqmlintegration.h>)
#include <QtQmlIntegration/qqmlintegration.h>
#else
#include <QtQml/qqmlregistration.h>
#endif
#include <cstddef>
#include <vector>
namespace QAccelPlot {
class Histogram {
Q_GADGET
QML_ANONYMOUS
Q_PROPERTY(int binCount READ binCount CONSTANT)
Q_PROPERTY(QList<qreal> edges READ edgeList CONSTANT)
Q_PROPERTY(QList<qreal> values READ valueList CONSTANT)
Q_PROPERTY(qreal total READ total CONSTANT)
Q_PROPERTY(bool uniform READ isUniform CONSTANT)
Q_PROPERTY(qreal binWidth READ binWidth CONSTANT)
public:
static Histogram fromSamples(const double* samples, std::size_t sampleCount, int binCount);
static Histogram fromSamples(const double* samples, std::size_t sampleCount, int binCount, double min, double max);
static Histogram fromSamples(const double* samples, std::size_t sampleCount, std::vector<double> edges);
static Histogram fromSamples(const float* samples, std::size_t sampleCount, int binCount);
static Histogram fromSamples(const float* samples, std::size_t sampleCount, int binCount, double min, double max);
static Histogram fromSamples(const float* samples, std::size_t sampleCount, std::vector<double> edges);
static Histogram fromCounts(std::vector<double> edges, std::vector<double> counts);
static std::vector<double> linearEdges(double min, double max, int binCount);
static std::vector<double> logEdges(double min, double max, int binCount);
static std::vector<double> decadeEdges(double min, double max);
int binCount() const;
const std::vector<double>& edges() const;
const std::vector<double>& values() const;
double total() const;
bool isUniform() const;
double binWidth() const;
Q_INVOKABLE Histogram density() const;
std::vector<double> barData() const;
Q_INVOKABLE QVariantList bars() const;
private:
template <typename Sample> static Histogram spanning(const Sample* samples, std::size_t sampleCount, int binCount);
template <typename Sample> static Histogram binned(const Sample* samples, std::size_t sampleCount, std::vector<double> edges);
QList<qreal> edgeList() const;
QList<qreal> valueList() const;
std::vector<double> edges_;
std::vector<double> values_;
double total_{0.0};
bool uniform_{false};
bool density_{false};
};
} // namespace QAccelPlot