16#include <ROOT/RHist.hxx>
17#include <ROOT/RHistConcurrentFiller.hxx>
18#include <ROOT/RHistFillContext.hxx>
21#include <oneapi/tbb/enumerable_thread_specific.h>
28template <
typename Hit>
32 std::string hist_title)
34 hist_name_{std::move(hist_name)},
35 hist_title_{std::move(hist_title)},
36 h_multiplicity_{
make_hist(1000, -0.5, 999.5)},
37 f_multiplicity_{h_multiplicity_} {}
39 void observe(std::vector<Hit>
const& hits) {
40 ensure_context().Fill(
static_cast<double>(hits.size()));
44 fill_contexts_.clear();
45 file_service_->put(hist_name_.c_str(), hist_title_.c_str(), *h_multiplicity_);
51 std::shared_ptr<HistoFileService>
const&
file_service()
const {
return file_service_; }
54 using HistD = ROOT::Experimental::RHist<double>;
55 using FillerD = ROOT::Experimental::RHistConcurrentFiller<double>;
56 using ContextD = ROOT::Experimental::RHistFillContext<double>;
58 ContextD& ensure_context() {
59 auto& ctx = fill_contexts_.local();
61 ctx = f_multiplicity_.CreateFillContext();
66 std::shared_ptr<HistoFileService> file_service_;
67 std::string hist_name_;
68 std::string hist_title_;
69 std::shared_ptr<HistD> h_multiplicity_;
70 FillerD f_multiplicity_;
71 tbb::enumerable_thread_specific<std::shared_ptr<ContextD>> fill_contexts_;
~MultiplicityHistogrammer()
Definition multiplicity_histogrammer.hpp:43
void observe(std::vector< Hit > const &hits)
Definition multiplicity_histogrammer.hpp:39
MultiplicityHistogrammer(std::shared_ptr< HistoFileService > file_service, std::string hist_name, std::string hist_title)
Definition multiplicity_histogrammer.hpp:31
std::shared_ptr< HistoFileService > const & file_service() const
Definition multiplicity_histogrammer.hpp:51
Definition fit_seed.cpp:16
std::shared_ptr< ROOT::Experimental::RHist< double > > make_hist(std::uint64_t nbins, double low, double high)
Definition HistoFileService.hpp:56