Read n-tuples in distinct workers, fill histograms, merge them and fit.
Knowing that other facilities like TProcessExecutor might be more adequate for this operation, this tutorial complements mc101, reading and merging. We convey another message with this tutorial: the synergy of ROOT and STL algorithms is possible.
Processing /mnt/build/workspace/root-makedoc-v608/rootspi/rdoc/src/v6-08-00-patches/tutorials/multicore/mt102_readNtuplesFillHistosAndFit.C...
(Int_t) 0
Int_t mt102_readNtuplesFillHistosAndFit()
{
TChain inputChain(
"multiCore");
inputChain.Add("mt101_multiCore_*.root");
TH1F outHisto(
"outHisto",
"Random Numbers", 128, -4, 4);
inputChain.Draw("r >> outHisto");
outHisto.Fit("gaus");
const auto nFiles = inputChain.GetListOfFiles()->GetEntries();
std::vector<TH1F> histograms;
histograms.reserve(nFiles);
for (auto workerID : workerIDs){
histograms.emplace_back(
TH1F(
Form(
"outHisto_%u", workerID),
"Random Numbers", 128, -4, 4));
}
auto workItem = [&histograms](
UInt_t workerID) {
TFile f(
Form(
"mt101_multiCore_%u.root", workerID));
auto &histo = histograms.at(workerID);
}
};
TH1F sumHistogram(
"SumHisto",
"Random Numbers", 128, -4, 4);
std::vector<std::thread> workers;
for (auto workerID : workerIDs) {
workers.emplace_back(workItem, workerID);
}
for (auto&& worker : workers) worker.join();
std::for_each(std::begin(histograms), std::end(histograms),
[&sumHistogram](
const TH1F & h) {
sumHistogram.Add(&h);
});
sumHistogram.Fit("gaus",0);
return 0;
}
- Author
- Danilo Piparo
Definition in file mt102_readNtuplesFillHistosAndFit.C.