/// \file
/// \ingroup tutorial_net
///
/// \macro_code
///
/// \author

#include "TMessage.h"
#include "TBenchmark.h"
#include "TSocket.h"
#include "TH2.h"
#include "TTree.h"
#include "TFile.h"
#include "TRandom.h"
#include "TError.h"

void parallelMergeTest(UInt_t nhist, UInt_t ndims = 1, UInt_t nbins = 100)
{

   gBenchmark->Start("parallelMergeTest");

   TFile *file = TFile::Open("mergedClient.root?pmerge=localhost:1095","RECREATE");

   Float_t px, py;
   TTree *tree = nullptr;
   switch (ndims) {
      case 1: {
         for(UInt_t h = 0 ; h < nhist; ++h) {
            new TH1F(TString::Format("hpx%d",h),"This is the px distribution",nbins,-4,4);
         }
         break;
      }
      case 2: {
         for(UInt_t h = 0 ; h < nhist; ++h) {
            new TH2F(TString::Format("hpxy%d",h),"py vs px",nbins,-4,4,nbins,-4,-4);
         }
         break;
      }
      case 99: {
         tree = new TTree("tree","tree");
         tree->SetAutoFlush(4000000);
         tree->Branch("px",&px);
         tree->Branch("py",&py);
      }
   }

   // Fill histogram randomly
   gRandom->SetSeed();
   const int kUPDATE = 1000000;
   for (int i = 0; i < 25000000; ) {
//      gRandom->Rannor(px,py);
//      if (idx%2 == 0)
//         hpx->Fill(px);
//      else
//         hpx->Fill(px,py);
      if(tree) tree->Fill();
      ++i;
      if (i && (i%kUPDATE) == 0) {
         file->Write();
      }
   }
   file->Write();
   delete file;

   gBenchmark->Show("parallelMergeTest");
}
