15 void df013_InspectAnalysis()
17 ROOT::EnableImplicitMT();
18 const auto poolSize = ROOT::GetImplicitMTPoolSize();
19 const auto nSlots = 0 == poolSize ? 1 : poolSize;
23 const auto nEvents = nSlots * 10000ull;
24 RDataFrame d(nEvents);
28 auto heavyWork = [&r]() {
29 for (
volatile int i = 0; i < 1000000; ++i)
36 auto tdf = d.Define(
"x", heavyWork);
41 auto h = tdf.Histo1D<
double>({
"browserHisto",
"", 100, -2., 2.},
"x");
52 auto tdfDirectory =
new TMemFile(
"RDFResults",
"RECREATE");
53 auto browser =
new TBrowser(
"b", tdfDirectory);
55 auto browserPad = gPad;
64 h.OnPartialResult(h.kOnce, [tdfDirectory](TH1D &h_) { tdfDirectory->Add(&h_); });
71 h.OnPartialResult(50, [&browserPad](TH1D &hist) {
79 gSystem->ProcessEvents();
90 std::string progressBar;
93 const auto everyN = nSlots == 8 ? 1000 : 100ull * nSlots;
94 const auto barWidth = nEvents / everyN;
95 h.OnPartialResultSlot(everyN, [&barWidth, &progressBar, &barMutex](
unsigned int , TH1D & ) {
96 std::lock_guard<std::mutex> l(barMutex);
97 progressBar.push_back(
'#');
99 std::cout <<
"\r[" << std::left << std::setw(barWidth) << progressBar <<
']' << std::flush;
108 std::cout <<
"Analysis running..." << std::endl;
110 std::cout <<
"\nDone!" << std::endl;
114 tdfDirectory->Clear();
115 auto clone =
static_cast<TH1D *
>(h->Clone());
116 clone->SetDirectory(
nullptr);
117 tdfDirectory->Add(clone);