Read n-tuples in distinct workers, fill histograms, merge them and fit.
We express parallelism with multiprocessing as it is done with multithreading in mt102_readNtuplesFillHistosAndFit.
class TimerRAII {
std::string fMeta;
public:
TimerRAII(const char *meta): fMeta(meta) {
fTimer.Start();
}
~TimerRAII() {
fTimer.Stop();
std::cout << fMeta << " - real time elapsed " << fTimer.RealTime() << "s" << std::endl;
}
};
Int_t mp102_readNtuplesFillHistosAndFit()
{
TChain inputChain(
"multiCore");
inputChain.Add("mp101_multiCore_*.root");
TH1F outHisto(
"outHisto",
"Random Numbers", 128, -4, 4);
{
TimerRAII
t(
"Sequential read and fit");
inputChain.Draw("r >> outHisto");
outHisto.Fit("gaus");
}
const auto nFiles = inputChain.GetListOfFiles()->GetEntries();
auto partialHisto =
new TH1F(
"outHistoMP",
"Random Numbers", 128, -4, 4);
while (reader.Next()) {
partialHisto->Fill(*randomRV);
}
return partialHisto;
};
{
TimerRAII
t(
"Parallel execution");
TH1F *sumHistogram = workers.ProcTree(inputChain, workItem,
"multiCore");
sumHistogram->
Fit(
"gaus", 0);
}
return 0;
}
- Author
- Danilo Piparo
Definition in file mp102_readNtuplesFillHistosAndFit.C.