mirror of
https://github.com/boostorg/histogram.git
synced 2025-05-10 15:24:05 +00:00
48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
// Copyright 2019 Hans Dembinski
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// (See accompanying file LICENSE_1_0.txt
|
|
// or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
//[ guide_custom_accumulators_with_metadata
|
|
|
|
#include <boost/histogram.hpp>
|
|
#include <cmath>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
int main() {
|
|
using namespace boost::histogram;
|
|
|
|
// derive custom accumulator from one of the builtins
|
|
struct accumulator_with_metadata : accumulators::count<> {
|
|
std::string meta; // custom meta data
|
|
|
|
// arbitrary additional data and interface could be added here
|
|
};
|
|
|
|
// make 1D histogram with custom accmulator
|
|
auto h = make_histogram_with(dense_storage<accumulator_with_metadata>(),
|
|
axis::integer<>(1, 4));
|
|
|
|
// fill some weighted entries
|
|
auto x = {1, 0, 2, 1};
|
|
h.fill(x);
|
|
|
|
// assigning meta data to two bins
|
|
h[0].meta = "Foo";
|
|
h[2].meta = "Bar";
|
|
|
|
std::ostringstream os;
|
|
for (auto&& x : indexed(h))
|
|
os << x.bin() << " value " << x->value() << " meta " << x->meta << "\n";
|
|
|
|
std::cout << os.str() << std::flush;
|
|
assert(os.str() == "1 value 2 meta Foo\n"
|
|
"2 value 1 meta \n"
|
|
"3 value 0 meta Bar\n");
|
|
}
|
|
|
|
//]
|