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.
 
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 ntuple = 
f.Get<
TNtuple>(
"multiCore");
 
      auto &histo = histograms.at(workerID);
      for (
auto index : 
ROOT::TSeqL(ntuple->GetEntriesFast())) {
 
         histo.
Fill(ntuple->GetArgs()[0]);
 
      }
   };
 
   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;
}
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
A chain is a collection of files containing TTree objects.
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
 
1-D histogram with a float per channel (see TH1 documentation)}
 
A simple TTree restricted to a list of float variables only.
 
Int_t Fill() override
Fill a Ntuple with current values in fArgs.
 
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
 
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
 
void EnableThreadSafety()
Enable support for multi-threading within the ROOT code in particular, enables the global mutex to ma...