Showcase registration of callback functions that act on partial results while the event-loop is running using OnPartialResult
and OnPartialResultSlot
. This tutorial is not meant to run in batch mode.
void df013_InspectAnalysis()
{
const auto nSlots = 0 == poolSize ? 1 : poolSize;
const auto nEvents = nSlots * 10000ull;
auto heavyWork = [&
r]() {
for (volatile int i = 0; i < 1000000; ++i)
;
};
auto df =
d.Define(
"x", heavyWork);
auto h = df.Histo1D<
double>({
"browserHisto",
"", 100, -2., 2.},
"x");
auto dfDirectory =
new TMemFile(
"RDFResults",
"RECREATE");
auto browser =
new TBrowser(
"b", dfDirectory);
h.OnPartialResult(
h.kOnce, [dfDirectory](
TH1D &h_) { dfDirectory->Add(&h_); });
h.OnPartialResult(50, [&browserPad](
TH1D &hist) {
if (!browserPad)
return;
browserPad->cd();
browserPad->Update();
});
std::string progressBar;
std::mutex barMutex;
const auto everyN = nSlots == 8 ? 1000 : 100ull * nSlots;
const auto barWidth = nEvents / everyN;
h.OnPartialResultSlot(everyN, [&barWidth, &progressBar, &barMutex](
unsigned int ,
TH1D & ) {
std::lock_guard<std::mutex>
l(barMutex);
progressBar.push_back('#');
std::cout << "\r[" << std::left << std::setw(barWidth) << progressBar << ']' << std::flush;
});
std::cout << "Analysis running..." << std::endl;
std::cout << "\nDone!" << std::endl;
dfDirectory->Clear();
auto clone =
static_cast<TH1D *
>(
h->Clone());
dfDirectory->Add(clone);
if (!browserPad)
return;
browserPad->cd();
clone->Draw();
browserPad->Update();
}
R__EXTERN TSystem * gSystem
ROOT's RDataFrame offers a high level interface for analyses of data stored in TTree,...
Using a TBrowser one can browse all ROOT objects.
1-D histogram with a double per channel (see TH1 documentation)}
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
virtual void Draw(Option_t *option="")
Draw this histogram with options.
A TMemFile is like a normal TFile except that it reads and writes only from memory.
This is the base class for the ROOT Random number generators.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
UInt_t GetThreadPoolSize()
Returns the size of ROOT's thread pool.