Selector to fill a set of histograms and merging via file. 
#define ProofSimpleFile_cxx
#include <TFormula.h>
ProofSimpleFile::ProofSimpleFile()
{
   
   fNhist = 16;
   fHistTop = 0;
   fHistDir = 0;
   fRandom = 0;
   fFile = 0;
   fProofFile = 0;
   fFileDir = 0;
}
ProofSimpleFile::~ProofSimpleFile()
{
   
   if (fRandom) delete fRandom;
}
Int_t ProofSimpleFile::CreateHistoArrays()
 {
   
   if (fNhist <= 0) {
      Error(
"CreateHistoArrays", 
"fNhist must be positive!");
       return -1;
   }
   
   fHistTop = 
new TH1F*[fNhist];
   fHistDir = 
new TH1F*[fNhist];
   
   return 0;
}
{
   
   
   
   
   if (fInput->FindObject("ProofSimpleFile_NHist")) {
   } 
else if ((iopt = option.
Index(
"nhist=")) != 
kNPOS) {
      Ssiz_t from = iopt + strlen(
"nhist=");
    }
}
void ProofSimpleFile::SlaveBegin(
TTree * )
 {
   
   
   
   
   if (fInput->FindObject("ProofSimpleFile_NHist")) {
   } 
else if ((iopt = option.
Index(
"nhist=")) != 
kNPOS) {
      Ssiz_t from = iopt + strlen(
"nhist=");
    }
   
   if (out) fProofFile->SetOutputFileName(out->
GetTitle());
    fFile = fProofFile->OpenFile("RECREATE");
   if (fFile && fFile->IsZombie()) 
SafeDelete(fFile);
    
   if (!fFile) {
                                     " instance is invalid!", fProofFile->GetName());
      Abort(amsg, kAbortProcess);
      return;
   }
   
   if (CreateHistoArrays() != 0) {
      Abort("ProofSimpleFile::SlaveBegin: could not create histograms", kAbortProcess);
      return;
   }
   
   if (!(fFileDir = fFile->mkdir("blue"))) {
      Abort("ProofSimpleFile::SlaveBegin: could not create directory 'blue' in file!",
            kAbortProcess);
      return;
   }
   
   for (
Int_t i=0; i < fNhist; i++) {
       fHistTop[i] = 
new TH1F(
Form(
"ht%d",i), 
Form(
"ht%d",i), 100, -3., 3.);
      fHistTop[i]->SetFillColor(kRed);
      fHistTop[i]->SetDirectory(fFile);
      fHistDir[i] = 
new TH1F(
Form(
"hd%d",i), 
Form(
"hd%d",i), 100, -3., 3.);
      fHistDir[i]->SetFillColor(kBlue);
      fHistDir[i]->SetDirectory(fFileDir);
   }
   
}
{
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   for (
Int_t i=0; i < fNhist; i++) {
       if (fRandom && fHistTop[i] && fHistDir[i]) {
         fHistTop[i]->Fill(fRandom->Gaus(0.,1.));
         fHistDir[i]->Fill(fRandom->Gaus(0.,1.));
      }
   }
}
void ProofSimpleFile::SlaveTerminate()
{
   
   
   
   
   if (fFile) {
      fFile->cd();
      for (
Int_t i=0; i < fNhist; i++) {
          if (fHistTop[i] && fHistTop[i]->GetEntries() > 0) {
            fHistTop[i]->Write();
            fHistTop[i]->SetDirectory(0);
         }
      }
      
      fFileDir->cd();
      for (
Int_t i=0; i < fNhist; i++) {
          if (fHistDir[i] && fHistDir[i]->GetEntries() > 0) {
            fHistDir[i]->Write();
            fHistDir[i]->SetDirectory(0);
         }
      }
      
      if (cleanup) {
         Info(
"SlaveTerminate", 
"nothing to save: just cleanup everything ...");
          TUrl uf(*(fFile->GetEndpointUrl()));
       } else {
         Info(
"SlaveTerminate", 
"objects saved into '%s%s': sending related TProofOutputFile ...",
                                 fProofFile->GetFileName(), fProofFile->GetOptionsAnchor());
         fProofFile->Print();
         fOutput->Add(fProofFile);
      }
   }
}
void ProofSimpleFile::Terminate()
{
   
   
   
   
   if ((fProofFile =
           dynamic_cast<TProofOutputFile*>(fOutput->FindObject("SimpleFile.root")))) {
      TString outputFile(fProofFile->GetOutputFileName());
       TString outputName(fProofFile->GetName());
       outputName += ".root";
      Printf(
"outputFile: %s", outputFile.Data());
       
         Error(
"Terminate", 
"could not open file: %s", outputFile.Data());
          return;
      }
   } else {
      Error(
"Terminate", 
"TProofOutputFile not found");
       return;
   }
   
   if (CreateHistoArrays() != 0) {
      Error(
"Terminate", 
"could not create histograms");
       return;
   }
   
   PlotHistos(0);
   
   PlotHistos(1);
}
void ProofSimpleFile::PlotHistos(
Int_t opt)
 {
   
   
   if (opt == 0) {
      TCanvas *c1 = 
new TCanvas(
"c1",
"ProofSimpleFile top dir canvas",200,10,700,700);
       nside = (nside*nside < fNhist) ? nside+1 : nside;
      for (
Int_t i=0; i < fNhist; i++) {
          if (fHistTop[i])
      }
      
   } else if (opt == 1) {
      TCanvas *c2 = 
new TCanvas(
"c2",
"ProofSimpleFile 'blue' sub-dir canvas",400,60,700,700);
       nside = (nside*nside < fNhist) ? nside+1 : nside;
      if ((fFileDir = (
TDirectory *) fFile->Get(
"blue"))) {
          for (
Int_t i=0; i < fNhist; i++) {
             if (fHistDir[i])
         }
      } else {
         Error(
"PlotHistos", 
"directory 'blue' not found in output file");
       }
      
   } else {
      Error(
"PlotHistos", 
"unknown option: %d", opt);
    }
}