// @(#)root/proof:$Id$
// Author: Sangsu Ryu 22/06/2010

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TProofBenchRunDataRead                                               //
//                                                                      //
// I/O-intensive PROOF benchmark test reads in event files distributed  //
// on the cluster. Number of events processed per second and size of    //
// events processed per second are plotted against number of active     //
// workers. Performance rate for unit packets and performance rate      //
// for query are plotted.                                               //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "RConfigure.h"

#include "TProofBenchRunDataRead.h"
#include "TProofBenchDataSet.h"
#include "TProofPerfAnalysis.h"
#include "TProofNodes.h"
#include "TFileCollection.h"
#include "TFileInfo.h"
#include "TProof.h"
#include "TString.h"
#include "Riostream.h"
#include "TMap.h"
#include "TTree.h"
#include "TH1.h"
#include "TH2D.h"
#include "TCanvas.h"
#include "TProfile.h"
#include "TKey.h"
#include "TRegexp.h"
#include "TPerfStats.h"
#include "THashList.h"
#include "TSortedList.h"
#include "TPad.h"
#include "TEnv.h"
#include "TLeaf.h"
#include "TQueryResult.h"
#include "TMath.h"
#include "TStyle.h"
#include "TLegend.h"
#include "TROOT.h"

ClassImp(TProofBenchRunDataRead)

//______________________________________________________________________________
TProofBenchRunDataRead::TProofBenchRunDataRead(TProofBenchDataSet *pbds, TPBReadType *readtype,
                                               TDirectory* dirproofbench, TProof* proof,
                                               TProofNodes* nodes, Long64_t nevents, Int_t ntries,
                                               Int_t start, Int_t stop, Int_t step, Int_t debug)
                       : TProofBenchRun(proof, kPROOF_BenchSelDataDef), fProof(proof),
                         fReadType(readtype), fDS(pbds),
                         fNEvents(nevents), fNTries(ntries), fStart(start), fStop(stop), fStep(step),
                         fDebug(debug), fFilesPerWrk(2), fReleaseCache(kTRUE),
                         fDirProofBench(dirproofbench), fNodes(nodes),
                         fListPerfPlots(0), fProfile_perfstat_event(0), fHist_perfstat_event(0),
                         fProfile_perfstat_evtmax(0), fNorm_perfstat_evtmax(0),
                         fProfile_queryresult_event(0), fNorm_queryresult_event(0),
                         fProfile_perfstat_IO(0), fHist_perfstat_IO(0),
                         fProfile_perfstat_IOmax(0), fNorm_perfstat_IOmax(0),
                         fProfile_queryresult_IO(0), fNorm_queryresult_IO(0), fProfile_cpu_eff(0),
                         fProfLegend_evt(0), fNormLegend_evt(0), fProfLegend_mb(0), fNormLegend_mb(0),
                         fCPerfProfiles(0), fName(0)
{

   // Default constructor

   if (!fProof) fProof = gProof;
   if (!fDS) fDS = new TProofBenchDataSet(fProof);

   // Set name
   fName = "DataRead";

   if (!fNodes) fNodes = new TProofNodes(fProof);
   fNodes->GetMapOfActiveNodes()->Print();

   if (stop == -1) fStop = fNodes->GetNWorkersCluster();

   fListPerfPlots = new TList;

   gEnv->SetValue("Proof.StatsTrace",1);
   gStyle->SetOptStat(0);
}

//______________________________________________________________________________
TProofBenchRunDataRead::~TProofBenchRunDataRead()
{
   // Destructor
   fProof=0;
   fDirProofBench=0;
   SafeDelete(fListPerfPlots);
   if (fCPerfProfiles) delete fCPerfProfiles;
   SafeDelete(fProfLegend_evt);
   SafeDelete(fProfLegend_mb);
   SafeDelete(fNormLegend_evt);
   SafeDelete(fNormLegend_mb);
}

//______________________________________________________________________________
void TProofBenchRunDataRead::Run(const char *dset, Int_t start, Int_t stop,
                                 Int_t step, Int_t ntries, Int_t debug, Int_t)
{
   // Run benchmark
   // Input parameters
   //    dset:    Dataset on which to run
   //    start: Start scan with 'start' workers.
   //    stop: Stop scan at 'stop workers.
   //    step: Scan every 'step' workers.
   //    ntries: Number of tries. When it is -1, data member fNTries is used.
   //    debug: debug switch.
   //    Int_t: Ignored
   // Returns
   //    Nothing

   if (!fProof){
      Error("Run", "Proof not set");
      return;
   }
   if (!dset || (dset && strlen(dset) <= 0)){
      Error("Run", "dataset name not set");
      return;
   }
   // Check if the dataset exists
   if (!fProof->ExistsDataSet(dset)) {
      Error("Run", "no such data set found; %s", dset);
      return;
   }

   start = (start == -1) ? fStart : start;
   stop = (stop == -1) ? fStop : stop;
   step = (step == -1) ? fStep : step;
   ntries = (ntries == -1) ? fNTries : ntries;
   debug = (debug == -1) ? fDebug : debug;

   Int_t fDebug_sav = fDebug;
   fDebug = debug;

   Bool_t nx = kFALSE;
   if (step == -2){
      nx = kTRUE;
      step = 1;
   }

   if (nx){
      Int_t minnworkersanode = fNodes->GetMinWrksPerNode();
      if (stop > minnworkersanode) stop = minnworkersanode;
   }

   // Load the selector, if needed
   if (!TClass::GetClass(fSelName) || !fDS->IsProof(fProof)) {
      // Is it the default selector?
      if (fSelName == kPROOF_BenchSelDataDef) {
         // Load the parfile
#ifdef R__HAVE_CONFIG
         TString par = TString::Format("%s/%s%s.par", ROOTETCDIR, kPROOF_BenchParDir, kPROOF_BenchDataSelPar);
#else
         TString par = TString::Format("$ROOTSYS/etc/%s%s.par", kPROOF_BenchParDir, kPROOF_BenchDataSelPar);
#endif
         Info("Run", "Uploading '%s' ...", par.Data());
         if (fProof->UploadPackage(par) != 0) {
            Error("Run", "problems uploading '%s' - cannot continue", par.Data());
            return;
         }
         Info("Run", "Enabling '%s' ...", kPROOF_BenchDataSelPar);
         if (fProof->EnablePackage(kPROOF_BenchDataSelPar) != 0) {
            Error("Run", "problems enabling '%s' - cannot continue", kPROOF_BenchDataSelPar);
            return;
         }
      } else {
         if (fParList.IsNull()) {
            Error("Run", "you should load the class '%s' before running the benchmark", fSelName.Data());
            return;
         } else {
            TString par;
            Int_t from = 0;
            while (fParList.Tokenize(par, from, ",")) {
               Info("Run", "Uploading '%s' ...", par.Data());
               if (fProof->UploadPackage(par) != 0) {
                  Error("Run", "problems uploading '%s' - cannot continue", par.Data());
                  return;
               }
               Info("Run", "Enabling '%s' ...", par.Data());
               if (fProof->EnablePackage(par) != 0) {
                  Error("Run", "problems enabling '%s' - cannot continue", par.Data());
                  return;
               }
            }
         }
      }
      // Check
      if (!TClass::GetClass(fSelName)) {
         Error("Run", "failed to load '%s'", fSelName.Data());
         return;
      }
   }

   // Build histograms, profiles and graphs needed for this run
   BuildHistos(start, stop, step, nx);

   TString dsname(dset);
   TString dsbasename = gSystem->BaseName(dset);

   // Get pad
   if (!fCPerfProfiles){
      TString canvasname = TString::Format("Performance Profiles %s", GetName());
      fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
   }

   // Cleanup up the canvas
   fCPerfProfiles->Clear();

   fCPerfProfiles->Divide(2,2);

   Info("Run", "Running IO-bound tests on dataset '%s'; %d ~ %d active worker(s),"
               " every %d worker(s).", dset, start, stop, step);

   Int_t npad = 1; //pad number

   Int_t nnodes = fNodes->GetNNodes(); // Number of machines
   Int_t ncores = fNodes->GetNCores(); // Number of cores

   Bool_t drawpf = kFALSE;
   Double_t ymi = -1., ymx = -1., emx =- 1, ymiio = -1., ymxio = -1., mbmx = -1.;
   for (Int_t nactive = start; nactive <= stop; nactive += step) {

      // For CPU effectiveness (ok for lite; should do it properly for standard clusters)
      Int_t ncoren = (nactive < ncores) ? nactive : ncores;

      // Actvate the wanted workers
      Int_t nw = -1;
      if (nx) {
         TString workers;
         workers.Form("%dx", nactive);
         nw = fNodes->ActivateWorkers(workers);
      } else {
         nw = fNodes->ActivateWorkers(nactive);
      }
      if (nw < 0){
         Error("Run", "could not activate the requested number of"
                      " workers/node on the cluster; skipping the test point"
                      " (%d workers/node)", nactive);
         continue;
      }

      // Prepare the dataset for this run. possibly a subsample of
      // the total one
      TFileCollection *fc = GetDataSet(dsname, nactive, nx);
      if (!fc) {
         Error("Run", "could not retrieve dataset '%s'", dsname.Data());
         continue;
      }
      fc->Print("F");
      TString dsn = TString::Format("%s_%d_%d", dsbasename.Data(), nactive, (Int_t)nx);
      fProof->RegisterDataSet(dsn, fc, "OT");
      fProof->ShowDataSet(dsn, "F");

      for (Int_t j=0; j<ntries; j++) {

         if (nx){
            Info("Run", "Running IO-bound tests with %d active worker(s)/node;"
                        " trial %d/%d", nactive, j + 1, ntries);
         } else {
            Info("Run", "Running IO-bound tests with %d active worker(s);"
                        " trial %d/%d", nactive, j + 1, ntries);
         }

         // Cleanup run
         const char *dsnr = (fDS->IsProof(fProof)) ? dsn.Data() : dsname.Data();
         if (fReleaseCache) fDS->ReleaseCache(dsnr);

         DeleteParameters();
         SetParameters();

         Info("Run", "Processing data set %s with"
                     " %d active worker(s).", dsn.Data(), nactive);

         TTime starttime = gSystem->Now();
         fProof->Process(dsn, fSelName, fSelOption);

         DeleteParameters();

         TTime endtime = gSystem->Now();

         TList *l = fProof->GetOutputList();

         //save perfstats
         TString perfstats_name = "PROOF_PerfStats";
         TTree *t = 0;
         if (l) t = dynamic_cast<TTree*>(l->FindObject(perfstats_name.Data()));
         if (t) {
            drawpf = kTRUE;
            TTree* tnew=(TTree*)t->Clone("tnew");

            FillPerfStatProfiles(tnew, nactive);

            TProofPerfAnalysis pfa(tnew);
            Double_t pf_eventrate = pfa.GetEvtRateAvgMax();
            Double_t pf_IOrate = pfa.GetMBRateAvgMax();
            fProfile_perfstat_evtmax->Fill(nactive, pf_eventrate);
            fCPerfProfiles->cd(npad);
            fProfile_perfstat_evtmax->SetMaximum(1.6*emx);
            fProfile_perfstat_evtmax->SetMinimum(0.);
            fProfile_perfstat_evtmax->Draw();
            fProfLegend_evt->Draw();
            gPad->Update();
            fProfile_perfstat_IOmax->Fill(nactive, pf_IOrate);
            fCPerfProfiles->cd(npad + 2);
            fProfile_perfstat_IOmax->SetMaximum(1.6*mbmx);
            fProfile_perfstat_IOmax->SetMinimum(0.);
            fProfile_perfstat_IOmax->Draw();
            fProfLegend_mb->Draw();
            gPad->Update();
            // The normalised histos
            // Use the first bin to set the Y range for the histo
            Double_t nert = nx ? pf_eventrate/nactive/nnodes : pf_eventrate/nactive;
            fNorm_perfstat_evtmax->Fill(nactive, nert);
            Double_t y1 = fNorm_perfstat_evtmax->GetBinContent(1);
            Double_t e1 = fNorm_perfstat_evtmax->GetBinError(1);
            Double_t dy = 5 * e1;
            if (dy / y1 < 0.2) dy = y1 * 0.2;
            if (dy > y1) dy = y1*.999999;
            if (ymi < 0.) ymi = y1 - dy;
            if (fNorm_perfstat_evtmax->GetBinContent(nactive) < ymi)
               ymi = fNorm_perfstat_evtmax->GetBinContent(nactive) / 2.;
            if (ymx < 0.) ymx = y1 + dy;
            if (fNorm_perfstat_evtmax->GetBinContent(nactive) > ymx)
               ymx = fNorm_perfstat_evtmax->GetBinContent(nactive) * 1.5;
            fNorm_perfstat_evtmax->SetMaximum(ymx);
            fNorm_perfstat_evtmax->SetMinimum(ymi);
            fCPerfProfiles->cd(npad + 1);
            fNorm_perfstat_evtmax->Draw();
            gPad->Update();
            //
            Double_t niort = nx ? pf_IOrate/nactive/nnodes : pf_IOrate/nactive;
            fNorm_perfstat_IOmax->Fill(nactive, niort);
            y1 = fNorm_perfstat_IOmax->GetBinContent(1);
            e1 = fNorm_perfstat_IOmax->GetBinError(1);
            dy = 5 * e1;
            if (dy / y1 < 0.2) dy = y1 * 0.2;
            if (dy > y1) dy = y1*.999999;
            if (ymiio < 0.) ymiio = y1 - dy;
            if (fNorm_perfstat_IOmax->GetBinContent(nactive) < ymiio)
               ymiio = fNorm_perfstat_IOmax->GetBinContent(nactive) / 2.;
            if (ymxio < 0.) ymxio = y1 + dy;
            if (fNorm_perfstat_IOmax->GetBinContent(nactive) > ymxio)
               ymxio = fNorm_perfstat_IOmax->GetBinContent(nactive) * 1.5;
            fNorm_perfstat_IOmax->SetMaximum(ymxio);
            fNorm_perfstat_IOmax->SetMinimum(ymiio);
            fCPerfProfiles->cd(npad + 3);
            fNorm_perfstat_IOmax->Draw();
            gPad->Update();

            //change the name
            TString newname = TString::Format("%s_%s_%dwrks%dthtry", t->GetName(), GetName(), nactive, j);
            tnew->SetName(newname);

            if (debug && fDirProofBench->IsWritable()){
               TDirectory *curdir = gDirectory;
               TString dirn = nx ? "RunDataReadx" : "RunDataRead";
               if (!fDirProofBench->GetDirectory(dirn))
                  fDirProofBench->mkdir(dirn, "RunDataRead results");
               if (fDirProofBench->cd(dirn)) {
                  tnew->SetDirectory(fDirProofBench);
                  tnew->Write();
                  l->Remove(tnew);
               } else {
                  Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
               }
               curdir->cd();
            }
         } else {
            if (l)
               Warning("Run", "%s: tree not found", perfstats_name.Data());
            else
               Error("Run", "PROOF output list is empty!");
         }

         //
         const char *drawopt = t ? "SAME" : "";
         // Performance measures from TQueryResult
         TQueryResult *queryresult = fProof->GetQueryResult();
         if (queryresult) {
            TDatime qr_start = queryresult->GetStartTime();
            TDatime qr_end = queryresult->GetEndTime();
            Float_t qr_proc = queryresult->GetProcTime();
            Long64_t qr_bytes = queryresult->GetBytes();

            Long64_t qr_entries = queryresult->GetEntries();

            // Calculate and fill CPU efficiency
            Float_t qr_cpu_eff = -1.;
            if (qr_proc > 0.) {
               qr_cpu_eff = queryresult->GetUsedCPU() / ncoren / qr_proc ;
               fProfile_cpu_eff->Fill(nactive, qr_cpu_eff);
               Printf("cpu_eff: %f", qr_cpu_eff);
            }

            // Calculate event rate, fill and draw
            Double_t qr_eventrate=0;

            qr_eventrate = qr_entries / Double_t(qr_proc);
            if (qr_eventrate > emx) emx = qr_eventrate;

            fProfile_queryresult_event->Fill(nactive, qr_eventrate);
            fCPerfProfiles->cd(npad);
            fProfile_queryresult_event->SetMinimum(0.);
            fProfile_queryresult_event->Draw(drawopt);
            fProfLegend_evt->Draw();
            gPad->Update();

            // Calculate IO rate, fill and draw
            Double_t qr_IOrate = 0;

            const Double_t Dmegabytes = 1024*1024;

            qr_IOrate = qr_bytes / Dmegabytes / Double_t(qr_proc);
            if (qr_IOrate > mbmx) mbmx = qr_IOrate;

            fProfile_queryresult_IO->Fill(nactive, qr_IOrate);
            fCPerfProfiles->cd(npad + 2);
            fProfile_queryresult_IO->SetMinimum(0.);
            fProfile_queryresult_IO->Draw(drawopt);
            fProfLegend_mb->Draw();
            gPad->Update();

            // The normalised histos
            // Use the first bin to set the Y range for the histo
            Double_t nert = nx ? qr_eventrate/nactive/nnodes : qr_eventrate/nactive;
            fNorm_queryresult_event->Fill(nactive, nert);
            Double_t y1 = fNorm_queryresult_event->GetBinContent(1);
            Double_t e1 = fNorm_queryresult_event->GetBinError(1);
            Double_t dy = 5 * e1;
            if (dy / y1 < 0.2) dy = y1 * 0.2;
            if (dy > y1) dy = y1*.999999;
            if (ymi < 0.) ymi = y1 - dy;
            if (fNorm_queryresult_event->GetBinContent(nactive) < ymi)
               ymi = fNorm_queryresult_event->GetBinContent(nactive) / 2.;
            if (ymx < 0.) ymx = y1 + dy;
            if (fNorm_queryresult_event->GetBinContent(nactive) > ymx)
               ymx = fNorm_queryresult_event->GetBinContent(nactive) * 1.5;
//            fNorm_queryresult_event->SetMaximum(ymx);
            fNorm_queryresult_event->SetMinimum(ymi);
            fCPerfProfiles->cd(npad + 1);
            fNorm_queryresult_event->Draw(drawopt);
            fNormLegend_evt->Draw();
            gPad->Update();
            //
            Double_t niort = nx ? qr_IOrate/nactive/nnodes : qr_IOrate/nactive;
            fNorm_queryresult_IO->Fill(nactive, niort);
            y1 = fNorm_queryresult_IO->GetBinContent(1);
            e1 = fNorm_queryresult_IO->GetBinError(1);
            dy = 5 * e1;
            if (dy / y1 < 0.2) dy = y1 * 0.2;
            if (dy > y1) dy = y1*.999999;
            if (ymiio < 0.) ymiio = y1 - dy;
            if (fNorm_queryresult_IO->GetBinContent(nactive) < ymiio)
               ymiio = fNorm_queryresult_IO->GetBinContent(nactive) / 2.;
            if (ymxio < 0.) ymxio = y1 + dy;
            if (fNorm_queryresult_IO->GetBinContent(nactive) > ymxio)
               ymxio = fNorm_queryresult_IO->GetBinContent(nactive) * 1.5;
//            fNorm_queryresult_IO->SetMaximum(ymxio);
            fNorm_queryresult_IO->SetMinimum(ymiio);
            fCPerfProfiles->cd(npad + 3);
            fNorm_queryresult_IO->Draw(drawopt);
            fNormLegend_mb->Draw();
            gPad->Update();
         }
         fCPerfProfiles->cd(0);
      }
      // Remove temporary dataset
      fProof->RemoveDataSet(dsn);
      SafeDelete(fc);
   }

   // Make the result persistent
   fCPerfProfiles->cd(npad);
   fProfile_queryresult_event->SetMaximum(1.6*emx);
   fProfile_queryresult_event->DrawCopy();
   if (drawpf) fProfile_perfstat_evtmax->DrawCopy("SAME");
   fProfLegend_evt->Draw();
   fCPerfProfiles->cd(npad + 2);
   fProfile_queryresult_IO->SetMaximum(1.6*mbmx);
   fProfile_queryresult_IO->DrawCopy();
   if (drawpf) fProfile_perfstat_IOmax->DrawCopy("SAME");
   fProfLegend_mb->Draw();
   fCPerfProfiles->cd(npad + 1);
   fNorm_queryresult_event->DrawCopy();
   if (drawpf) fNorm_perfstat_evtmax->DrawCopy("SAME");
   fNormLegend_evt->Draw();
   fCPerfProfiles->cd(npad + 3);
   fNorm_queryresult_IO->DrawCopy();
   if (drawpf) fNorm_perfstat_IOmax->DrawCopy("SAME");
   fProfLegend_mb->Draw();
   gPad->Update();

   //save performance profiles to file
   if (fDirProofBench->IsWritable()){
      TDirectory *curdir = gDirectory;
      TString dirn = nx ? "RunDataReadx" : "RunDataRead";
      if (!fDirProofBench->GetDirectory(dirn))
         fDirProofBench->mkdir(dirn, "RunDataRead results");
      if (fDirProofBench->cd(dirn)) {
         fListPerfPlots->Write(0, kOverwrite);
         fListPerfPlots->SetOwner(kFALSE);
         fListPerfPlots->Clear();
      } else {
         Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
      }
      curdir->cd();
   }
   // Restore member data
   fDebug = fDebug_sav;
}

//______________________________________________________________________________
TFileCollection *TProofBenchRunDataRead::GetDataSet(const char *dset,
                                                    Int_t nact, Bool_t nx)
{
   // Get a subsample of dsname suited to run with 'nact' and option 'nx'.

   TFileCollection *fcsub = 0;

   // Dataset must exists
   if (!fProof || (fProof && !fProof->ExistsDataSet(dset))) {
      Error("GetDataSet", "dataset '%s' does not exist", dset);
      return fcsub;
   }

   // Get the full collection
   TFileCollection *fcref = fProof->GetDataSet(dset);
   if (!fcref) {
      Error("GetDataSet", "dataset '%s' could not be retrieved", dset);
      return fcsub;
   }
   // Is it remote ?
   Bool_t remote = (fcref->TestBit(TFileCollection::kRemoteCollection)) ? kTRUE : kFALSE;

   // Separate info per server
#if ROOT_VERSION_CODE >= ROOT_VERSION(5,30,0)
   TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster(), kTRUE);
#else
   TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster());
#endif
   if (!mpref) {
      SafeDelete(fcref);
      Error("GetDataSet", "problems classifying info on per-server base");
      return fcsub;
   }
   mpref->Print();

   // Get Active node information
   TMap *mpnodes = fNodes->GetMapOfActiveNodes();
   if (!mpnodes) {
      SafeDelete(fcref);
      SafeDelete(mpref);
      Error("GetDataSet", "problems getting map of active nodes");
      return fcsub;
   }
   mpnodes->Print();

   // Number of files: fFilesPerWrk per active worker
   Int_t nf = fNodes->GetNActives() * fFilesPerWrk;
   Printf(" number of files needed (ideally): %d (%d per worker)", nf, fFilesPerWrk);

   // The output dataset
   fcsub = new TFileCollection(TString::Format("%s_%d_%d", fcref->GetName(), nact, nx),
                                                           fcref->GetTitle());

   // Order reference sub-collections
   TIter nxnd(mpnodes);
   TObject *key = 0;
   TFileInfo *fi = 0;
   TFileCollection *xfc = 0;
   TList *lswrks = 0;
   while ((key = nxnd())) {
      TIter nxsrv(mpref);
      TObject *ksrv = 0;
      while ((ksrv = nxsrv())) {
         TUrl urlsrv(ksrv->GetName());
         if (TString(urlsrv.GetHostFQDN()).IsNull())
            urlsrv.SetHost(TUrl(gProof->GetMaster()).GetHostFQDN());
         if (remote ||
             !strcmp(urlsrv.GetHostFQDN(), TUrl(key->GetName()).GetHostFQDN())) {
            if ((xfc = dynamic_cast<TFileCollection *>(mpref->GetValue(ksrv)))) {
               if ((lswrks = dynamic_cast<TList *>(mpnodes->GetValue(key)))) {
                  Int_t nfnd = fFilesPerWrk * lswrks->GetSize();
                  while (nfnd-- && xfc->GetList()->GetSize() > 0) {
                     if ((fi = (TFileInfo *) xfc->GetList()->First())) {
                        xfc->GetList()->Remove(fi);
                        fcsub->Add(fi);
                     }
                  }
               } else {
                  Warning("GetDataSet", "could not attach to worker list for node '%s'",
                                        key->GetName());
               }
            } else {
               Warning("GetDataSet", "could not attach to file collection for server '%s'",
                                     ksrv->GetName());
            }
         }
      }
   }

   // Update counters
   fcsub->Update();
   fcsub->Print();

   // Make sure that the tree name is the one of the original dataset
   if (fcref) {
      TString dflt(fcref->GetDefaultTreeName());
      if (!dflt.IsNull()) fcsub->SetDefaultTreeName(dflt);
   }

   // Cleanup
   SafeDelete(fcref);
   SafeDelete(mpref);
   // Done
   return fcsub;
}

//______________________________________________________________________________
void TProofBenchRunDataRead::FillPerfStatProfiles(TTree *t, Int_t nactive)
{

   // Fill performance profiles using tree 't'(PROOF_PerfStats).
   // Input parameters
   //    t: Proof output tree (PROOF_PerfStat) containing performance
   //       statistics.
   //    nactive: Number of active workers processed the query.
   // Return
   //    Nothing

   // extract timing information
   TPerfEvent pe;
   TPerfEvent* pep = &pe;
   t->SetBranchAddress("PerfEvents",&pep);
   Long64_t entries = t->GetEntries();

   const Double_t Dmegabytes = 1024.*1024.;
   Double_t event_rate_packet = 0;
   Double_t IO_rate_packet = 0;

   for (Long64_t k=0; k<entries; k++) {
      t->GetEntry(k);

      // Skip information from workers
      if (pe.fEvtNode.Contains(".")) continue;

      if (pe.fType==TVirtualPerfStats::kPacket){
         if (pe.fProcTime != 0.0) {
            event_rate_packet = pe.fEventsProcessed / pe.fProcTime;
            fHist_perfstat_event->Fill(Double_t(nactive), event_rate_packet);
            IO_rate_packet = pe.fBytesRead / Dmegabytes / pe.fProcTime;
            fHist_perfstat_IO->Fill(Double_t(nactive), IO_rate_packet);
         }
      }
   }

   return;
}

//______________________________________________________________________________
void TProofBenchRunDataRead::Print(Option_t* option) const
{
   // Print the content of this object

   Printf("Name         = %s", fName.Data());
   if (fProof) fProof->Print(option);
   Printf("fReadType    = %s%s", "k", GetNameStem().Data());
   Printf("fNEvents     = %lld", fNEvents);
   Printf("fNTries      = %d", fNTries);
   Printf("fStart       = %d", fStart);
   Printf("fStop        = %d", fStop);
   Printf("fStep        = %d", fStep);
   Printf("fDebug       = %d", fDebug);
   if (fDirProofBench)
      Printf("fDirProofBench = %s", fDirProofBench->GetPath());
   if (fNodes) fNodes->Print(option);
   if (fListPerfPlots) fListPerfPlots->Print(option);

   if (fCPerfProfiles)
      Printf("Performance Profiles Canvas: Name = %s Title = %s",
              fCPerfProfiles->GetName(), fCPerfProfiles->GetTitle());
}

//______________________________________________________________________________
void TProofBenchRunDataRead::DrawPerfProfiles()
{
   // Get canvas
   if (!fCPerfProfiles){
      TString canvasname = TString::Format("Performance Profiles %s", GetName());
      fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
   }

   fCPerfProfiles->Clear();

   // Divide the canvas as many as the number of profiles in the list
   Int_t nprofiles = fListPerfPlots->GetSize();
   if (nprofiles <= 2){
      fCPerfProfiles->Divide(nprofiles);
   } else {
      Int_t nside = (Int_t)TMath::Sqrt((Float_t)nprofiles);
      nside = (nside*nside < nprofiles) ? nside + 1 : nside;
      fCPerfProfiles->Divide(nside,nside);
   }

   Int_t npad=1;
   TIter nxt(fListPerfPlots);
   TProfile* profile=0;
   while ((profile=(TProfile*)(nxt()))){
      fCPerfProfiles->cd(npad++);
      profile->Draw();
      gPad->Update();
   }
   return;
}

//______________________________________________________________________________
TString TProofBenchRunDataRead::GetNameStem()const
{
   // Get name for this run

   TString namestem("+++undef+++");
   if (fReadType) {
      switch (fReadType->GetType()) {
         case TPBReadType::kReadFull:
            namestem="Full";
            break;
         case TPBReadType::kReadOpt:
            namestem="Opt";
            break;
         case TPBReadType::kReadNo:
            namestem="No";
            break;
         default:
            break;
      }
   }
   return namestem;
}

//______________________________________________________________________________
Int_t TProofBenchRunDataRead::SetParameters()
{
   // Set parameters

   if (!fProof){
      Error("SetParameters", "Proof not set; Doing nothing");
      return 1;
   }
   if (!fReadType) fReadType = new TPBReadType(TPBReadType::kReadOpt);
   fProof->AddInput(fReadType);
   fProof->SetParameter("PROOF_BenchmarkDebug", Int_t(fDebug));
   // For Mac Os X only: do not OS cache the files read
   fProof->SetParameter("PROOF_DontCacheFiles", Int_t(1));
   return 0;
}

//______________________________________________________________________________
Int_t TProofBenchRunDataRead::DeleteParameters()
{
   // Delete parameters set for this run
   if (!fProof){
      Error("DeleteParameters", "Proof not set; Doing nothing");
      return 1;
   }
   if (fProof->GetInputList()) {
      TObject *type = fProof->GetInputList()->FindObject("PROOF_Benchmark_ReadType");
      if (type) fProof->GetInputList()->Remove(type);
   }
   fProof->DeleteParameters("PROOF_BenchmarkDebug");
   return 0;
}

//______________________________________________________________________________
void TProofBenchRunDataRead::BuildHistos(Int_t start, Int_t stop, Int_t step, Bool_t nx)
{
   // Build histograms, profiles and graphs needed for this run

   TObject *o = 0;
   Int_t quotient = (stop - start) / step;
   Int_t ndiv = quotient + 1;
   Double_t ns_min = start - step/2.;
   Double_t ns_max = quotient*step + start + step/2.;

   fProfLegend_evt = new TLegend(0.1, 0.8, 0.3, 0.9);
   fNormLegend_evt = new TLegend(0.7, 0.8, 0.9, 0.9);
   fProfLegend_mb = new TLegend(0.1, 0.8, 0.3, 0.9);
   fNormLegend_mb = new TLegend(0.7, 0.8, 0.9, 0.9);

   TString axtitle("Active Workers"), namelab(GetName()), sellab(GetSelName());
   if (nx) {
      axtitle = "Active Workers/Node";
      namelab.Form("x_%s", GetName());
   }
   if (fSelName == kPROOF_BenchSelDataDef)
      sellab.Form("%s_%s", GetSelName(), GetNameStem().Data());

   TString name, title;

   // Book perfstat profile (max evts)
   name.Form("Prof_%s_PS_MaxEvts_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s PerfStat Event- %s", namelab.Data(), sellab.Data());
   fProfile_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_perfstat_evtmax->SetDirectory(fDirProofBench);
   fProfile_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
   fProfile_perfstat_evtmax->GetXaxis()->SetTitle(axtitle);
   fProfile_perfstat_evtmax->SetMarkerStyle(23);
   fProfile_perfstat_evtmax->SetMarkerStyle(2);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_perfstat_evtmax);
   fProfLegend_evt->AddEntry(fProfile_perfstat_evtmax, "Maximum");

   // Book perfstat profile (evts)
   name.Form("Prof_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s PerfStat Event - %s", namelab.Data(), sellab.Data());
   fProfile_perfstat_event = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_perfstat_event->SetDirectory(fDirProofBench);
   fProfile_perfstat_event->GetYaxis()->SetTitle("Events/sec");
   fProfile_perfstat_event->GetXaxis()->SetTitle(axtitle);
   fProfile_perfstat_event->SetMarkerStyle(21);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_perfstat_event);

   // Book perfstat histogram (evts)
   name.Form("Hist_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
   title.Form("Histogram %s PerfStat Event - %s", namelab.Data(), sellab.Data());
   fHist_perfstat_event = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
   fHist_perfstat_event->SetDirectory(fDirProofBench);
   fHist_perfstat_event->GetYaxis()->SetTitle("Events/sec");
   fHist_perfstat_event->GetXaxis()->SetTitle(axtitle);
   fHist_perfstat_event->SetMarkerStyle(7);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fHist_perfstat_event);

   // Book normalized perfstat profile (max evts)
   name.Form("Norm_%s_PF_MaxEvts_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
   fNorm_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
   fNorm_perfstat_evtmax->SetDirectory(fDirProofBench);
   fNorm_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
   fNorm_perfstat_evtmax->GetXaxis()->SetTitle(axtitle);
   fNorm_perfstat_evtmax->SetMarkerStyle(23);
   fNorm_perfstat_evtmax->SetMarkerColor(2);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fNorm_perfstat_evtmax);
   fNormLegend_evt->AddEntry(fNorm_perfstat_evtmax, "Maximum");

   // Book queryresult profile (evts)
   name.Form("Prof_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s QueryResult Event - %s", namelab.Data(), sellab.Data());
   fProfile_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_queryresult_event->SetDirectory(fDirProofBench);
   fProfile_queryresult_event->GetYaxis()->SetTitle("Events/sec");
   fProfile_queryresult_event->GetXaxis()->SetTitle(axtitle);
   fProfile_queryresult_event->SetMarkerStyle(22);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_queryresult_event);
   fProfLegend_evt->AddEntry(fProfile_queryresult_event, "Average");

   // Book normalized queryresult profile (evts)
   name.Form("Norm_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
   fNorm_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
   fNorm_queryresult_event->SetDirectory(fDirProofBench);
   fNorm_queryresult_event->GetYaxis()->SetTitle("Events/sec");
   fNorm_queryresult_event->GetXaxis()->SetTitle(axtitle);
   fNorm_queryresult_event->SetMarkerStyle(22);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fNorm_queryresult_event);
   fNormLegend_evt->AddEntry(fNorm_queryresult_event, "Average");

   // Book perfstat profile (mbs)
   name.Form("Prof_%s_PS_IO_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s PerfStat I/O %s", namelab.Data(), sellab.Data());
   fProfile_perfstat_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_perfstat_IO->SetDirectory(fDirProofBench);
   fProfile_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
   fProfile_perfstat_IO->GetXaxis()->SetTitle(axtitle);
   fProfile_perfstat_IO->SetMarkerStyle(21);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_perfstat_IO);

   // Book perfstat histogram (mbs)
   name.Form("Hist_%s_PS_IO_%s", namelab.Data(), sellab.Data());
   title.Form("Histogram %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
   fHist_perfstat_IO = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
   fHist_perfstat_IO->SetDirectory(fDirProofBench);
   fHist_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
   fHist_perfstat_IO->GetXaxis()->SetTitle(axtitle);
   fHist_perfstat_IO->SetMarkerStyle(7);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fHist_perfstat_IO);

   // Book perfstat profile (max mbs)
   name.Form("Prof_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
   fProfile_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_perfstat_IOmax->SetDirectory(fDirProofBench);
   fProfile_perfstat_IOmax->GetYaxis()->SetTitle("MB/sec");
   fProfile_perfstat_IOmax->GetXaxis()->SetTitle(axtitle);
   fProfile_perfstat_IOmax->SetMarkerStyle(21);
   fProfile_perfstat_IOmax->SetMarkerColor(2);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_perfstat_IOmax);
   fProfLegend_mb->AddEntry(fProfile_perfstat_IOmax, "Maximum");

   // Book normalized perfstat profile (max mbs)
   name.Form("Norm_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s Normalized PerfStat I/O - %s", namelab.Data(), sellab.Data());
   fNorm_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
   fNorm_perfstat_IOmax->SetDirectory(fDirProofBench);
   fNorm_perfstat_IOmax->GetYaxis()->SetTitle("MB/sec");
   fNorm_perfstat_IOmax->GetXaxis()->SetTitle(axtitle);
   fNorm_perfstat_IOmax->SetMarkerStyle(23);
   fNorm_perfstat_IOmax->SetMarkerColor(2);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fNorm_perfstat_IOmax);
   fNormLegend_mb->AddEntry(fNorm_perfstat_IOmax, "Maximum");

   // Book queryresult profile (mbs)
   name.Form("Prof_%s_QR_IO_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s QueryResult I/O - %s", namelab.Data(), sellab.Data());
   fProfile_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_queryresult_IO->SetDirectory(fDirProofBench);
   fProfile_queryresult_IO->GetYaxis()->SetTitle("MB/sec");
   fProfile_queryresult_IO->GetXaxis()->SetTitle(axtitle);
   fProfile_queryresult_IO->SetMarkerStyle(22);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_queryresult_IO);
   fProfLegend_mb->AddEntry(fProfile_queryresult_IO, "Average");

   // Book normalized queryresult profile (mbs)
   name.Form("Norm_%s_QR_IO_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s Normalized QueryResult I/O - %s", namelab.Data(), sellab.Data());
   fNorm_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
   fNorm_queryresult_IO->SetDirectory(fDirProofBench);
   fNorm_queryresult_IO->GetYaxis()->SetTitle("MB/sec");
   fNorm_queryresult_IO->GetXaxis()->SetTitle(axtitle);
   fNorm_queryresult_IO->SetMarkerStyle(22);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fNorm_queryresult_IO);
   fNormLegend_mb->AddEntry(fNorm_queryresult_IO, "Average");

   // Book CPU efficiency profile
   name.Form("Prof_%s_CPU_eff_%s", namelab.Data(), sellab.Data());
   title.Form("Profile %s CPU efficiency - %s", namelab.Data(), sellab.Data());
   fProfile_cpu_eff = new TProfile(name, title, ndiv, ns_min, ns_max);
   fProfile_cpu_eff->SetDirectory(fDirProofBench);
   fProfile_cpu_eff->GetYaxis()->SetTitle("Efficiency");
   fProfile_cpu_eff->GetXaxis()->SetTitle(axtitle);
   fProfile_cpu_eff->SetMarkerStyle(22);
   if ((o = fListPerfPlots->FindObject(name))) {
      fListPerfPlots->Remove(o);
      delete o;
   }
   fListPerfPlots->Add(fProfile_cpu_eff);
}
 TProofBenchRunDataRead.cxx:1
 TProofBenchRunDataRead.cxx:2
 TProofBenchRunDataRead.cxx:3
 TProofBenchRunDataRead.cxx:4
 TProofBenchRunDataRead.cxx:5
 TProofBenchRunDataRead.cxx:6
 TProofBenchRunDataRead.cxx:7
 TProofBenchRunDataRead.cxx:8
 TProofBenchRunDataRead.cxx:9
 TProofBenchRunDataRead.cxx:10
 TProofBenchRunDataRead.cxx:11
 TProofBenchRunDataRead.cxx:12
 TProofBenchRunDataRead.cxx:13
 TProofBenchRunDataRead.cxx:14
 TProofBenchRunDataRead.cxx:15
 TProofBenchRunDataRead.cxx:16
 TProofBenchRunDataRead.cxx:17
 TProofBenchRunDataRead.cxx:18
 TProofBenchRunDataRead.cxx:19
 TProofBenchRunDataRead.cxx:20
 TProofBenchRunDataRead.cxx:21
 TProofBenchRunDataRead.cxx:22
 TProofBenchRunDataRead.cxx:23
 TProofBenchRunDataRead.cxx:24
 TProofBenchRunDataRead.cxx:25
 TProofBenchRunDataRead.cxx:26
 TProofBenchRunDataRead.cxx:27
 TProofBenchRunDataRead.cxx:28
 TProofBenchRunDataRead.cxx:29
 TProofBenchRunDataRead.cxx:30
 TProofBenchRunDataRead.cxx:31
 TProofBenchRunDataRead.cxx:32
 TProofBenchRunDataRead.cxx:33
 TProofBenchRunDataRead.cxx:34
 TProofBenchRunDataRead.cxx:35
 TProofBenchRunDataRead.cxx:36
 TProofBenchRunDataRead.cxx:37
 TProofBenchRunDataRead.cxx:38
 TProofBenchRunDataRead.cxx:39
 TProofBenchRunDataRead.cxx:40
 TProofBenchRunDataRead.cxx:41
 TProofBenchRunDataRead.cxx:42
 TProofBenchRunDataRead.cxx:43
 TProofBenchRunDataRead.cxx:44
 TProofBenchRunDataRead.cxx:45
 TProofBenchRunDataRead.cxx:46
 TProofBenchRunDataRead.cxx:47
 TProofBenchRunDataRead.cxx:48
 TProofBenchRunDataRead.cxx:49
 TProofBenchRunDataRead.cxx:50
 TProofBenchRunDataRead.cxx:51
 TProofBenchRunDataRead.cxx:52
 TProofBenchRunDataRead.cxx:53
 TProofBenchRunDataRead.cxx:54
 TProofBenchRunDataRead.cxx:55
 TProofBenchRunDataRead.cxx:56
 TProofBenchRunDataRead.cxx:57
 TProofBenchRunDataRead.cxx:58
 TProofBenchRunDataRead.cxx:59
 TProofBenchRunDataRead.cxx:60
 TProofBenchRunDataRead.cxx:61
 TProofBenchRunDataRead.cxx:62
 TProofBenchRunDataRead.cxx:63
 TProofBenchRunDataRead.cxx:64
 TProofBenchRunDataRead.cxx:65
 TProofBenchRunDataRead.cxx:66
 TProofBenchRunDataRead.cxx:67
 TProofBenchRunDataRead.cxx:68
 TProofBenchRunDataRead.cxx:69
 TProofBenchRunDataRead.cxx:70
 TProofBenchRunDataRead.cxx:71
 TProofBenchRunDataRead.cxx:72
 TProofBenchRunDataRead.cxx:73
 TProofBenchRunDataRead.cxx:74
 TProofBenchRunDataRead.cxx:75
 TProofBenchRunDataRead.cxx:76
 TProofBenchRunDataRead.cxx:77
 TProofBenchRunDataRead.cxx:78
 TProofBenchRunDataRead.cxx:79
 TProofBenchRunDataRead.cxx:80
 TProofBenchRunDataRead.cxx:81
 TProofBenchRunDataRead.cxx:82
 TProofBenchRunDataRead.cxx:83
 TProofBenchRunDataRead.cxx:84
 TProofBenchRunDataRead.cxx:85
 TProofBenchRunDataRead.cxx:86
 TProofBenchRunDataRead.cxx:87
 TProofBenchRunDataRead.cxx:88
 TProofBenchRunDataRead.cxx:89
 TProofBenchRunDataRead.cxx:90
 TProofBenchRunDataRead.cxx:91
 TProofBenchRunDataRead.cxx:92
 TProofBenchRunDataRead.cxx:93
 TProofBenchRunDataRead.cxx:94
 TProofBenchRunDataRead.cxx:95
 TProofBenchRunDataRead.cxx:96
 TProofBenchRunDataRead.cxx:97
 TProofBenchRunDataRead.cxx:98
 TProofBenchRunDataRead.cxx:99
 TProofBenchRunDataRead.cxx:100
 TProofBenchRunDataRead.cxx:101
 TProofBenchRunDataRead.cxx:102
 TProofBenchRunDataRead.cxx:103
 TProofBenchRunDataRead.cxx:104
 TProofBenchRunDataRead.cxx:105
 TProofBenchRunDataRead.cxx:106
 TProofBenchRunDataRead.cxx:107
 TProofBenchRunDataRead.cxx:108
 TProofBenchRunDataRead.cxx:109
 TProofBenchRunDataRead.cxx:110
 TProofBenchRunDataRead.cxx:111
 TProofBenchRunDataRead.cxx:112
 TProofBenchRunDataRead.cxx:113
 TProofBenchRunDataRead.cxx:114
 TProofBenchRunDataRead.cxx:115
 TProofBenchRunDataRead.cxx:116
 TProofBenchRunDataRead.cxx:117
 TProofBenchRunDataRead.cxx:118
 TProofBenchRunDataRead.cxx:119
 TProofBenchRunDataRead.cxx:120
 TProofBenchRunDataRead.cxx:121
 TProofBenchRunDataRead.cxx:122
 TProofBenchRunDataRead.cxx:123
 TProofBenchRunDataRead.cxx:124
 TProofBenchRunDataRead.cxx:125
 TProofBenchRunDataRead.cxx:126
 TProofBenchRunDataRead.cxx:127
 TProofBenchRunDataRead.cxx:128
 TProofBenchRunDataRead.cxx:129
 TProofBenchRunDataRead.cxx:130
 TProofBenchRunDataRead.cxx:131
 TProofBenchRunDataRead.cxx:132
 TProofBenchRunDataRead.cxx:133
 TProofBenchRunDataRead.cxx:134
 TProofBenchRunDataRead.cxx:135
 TProofBenchRunDataRead.cxx:136
 TProofBenchRunDataRead.cxx:137
 TProofBenchRunDataRead.cxx:138
 TProofBenchRunDataRead.cxx:139
 TProofBenchRunDataRead.cxx:140
 TProofBenchRunDataRead.cxx:141
 TProofBenchRunDataRead.cxx:142
 TProofBenchRunDataRead.cxx:143
 TProofBenchRunDataRead.cxx:144
 TProofBenchRunDataRead.cxx:145
 TProofBenchRunDataRead.cxx:146
 TProofBenchRunDataRead.cxx:147
 TProofBenchRunDataRead.cxx:148
 TProofBenchRunDataRead.cxx:149
 TProofBenchRunDataRead.cxx:150
 TProofBenchRunDataRead.cxx:151
 TProofBenchRunDataRead.cxx:152
 TProofBenchRunDataRead.cxx:153
 TProofBenchRunDataRead.cxx:154
 TProofBenchRunDataRead.cxx:155
 TProofBenchRunDataRead.cxx:156
 TProofBenchRunDataRead.cxx:157
 TProofBenchRunDataRead.cxx:158
 TProofBenchRunDataRead.cxx:159
 TProofBenchRunDataRead.cxx:160
 TProofBenchRunDataRead.cxx:161
 TProofBenchRunDataRead.cxx:162
 TProofBenchRunDataRead.cxx:163
 TProofBenchRunDataRead.cxx:164
 TProofBenchRunDataRead.cxx:165
 TProofBenchRunDataRead.cxx:166
 TProofBenchRunDataRead.cxx:167
 TProofBenchRunDataRead.cxx:168
 TProofBenchRunDataRead.cxx:169
 TProofBenchRunDataRead.cxx:170
 TProofBenchRunDataRead.cxx:171
 TProofBenchRunDataRead.cxx:172
 TProofBenchRunDataRead.cxx:173
 TProofBenchRunDataRead.cxx:174
 TProofBenchRunDataRead.cxx:175
 TProofBenchRunDataRead.cxx:176
 TProofBenchRunDataRead.cxx:177
 TProofBenchRunDataRead.cxx:178
 TProofBenchRunDataRead.cxx:179
 TProofBenchRunDataRead.cxx:180
 TProofBenchRunDataRead.cxx:181
 TProofBenchRunDataRead.cxx:182
 TProofBenchRunDataRead.cxx:183
 TProofBenchRunDataRead.cxx:184
 TProofBenchRunDataRead.cxx:185
 TProofBenchRunDataRead.cxx:186
 TProofBenchRunDataRead.cxx:187
 TProofBenchRunDataRead.cxx:188
 TProofBenchRunDataRead.cxx:189
 TProofBenchRunDataRead.cxx:190
 TProofBenchRunDataRead.cxx:191
 TProofBenchRunDataRead.cxx:192
 TProofBenchRunDataRead.cxx:193
 TProofBenchRunDataRead.cxx:194
 TProofBenchRunDataRead.cxx:195
 TProofBenchRunDataRead.cxx:196
 TProofBenchRunDataRead.cxx:197
 TProofBenchRunDataRead.cxx:198
 TProofBenchRunDataRead.cxx:199
 TProofBenchRunDataRead.cxx:200
 TProofBenchRunDataRead.cxx:201
 TProofBenchRunDataRead.cxx:202
 TProofBenchRunDataRead.cxx:203
 TProofBenchRunDataRead.cxx:204
 TProofBenchRunDataRead.cxx:205
 TProofBenchRunDataRead.cxx:206
 TProofBenchRunDataRead.cxx:207
 TProofBenchRunDataRead.cxx:208
 TProofBenchRunDataRead.cxx:209
 TProofBenchRunDataRead.cxx:210
 TProofBenchRunDataRead.cxx:211
 TProofBenchRunDataRead.cxx:212
 TProofBenchRunDataRead.cxx:213
 TProofBenchRunDataRead.cxx:214
 TProofBenchRunDataRead.cxx:215
 TProofBenchRunDataRead.cxx:216
 TProofBenchRunDataRead.cxx:217
 TProofBenchRunDataRead.cxx:218
 TProofBenchRunDataRead.cxx:219
 TProofBenchRunDataRead.cxx:220
 TProofBenchRunDataRead.cxx:221
 TProofBenchRunDataRead.cxx:222
 TProofBenchRunDataRead.cxx:223
 TProofBenchRunDataRead.cxx:224
 TProofBenchRunDataRead.cxx:225
 TProofBenchRunDataRead.cxx:226
 TProofBenchRunDataRead.cxx:227
 TProofBenchRunDataRead.cxx:228
 TProofBenchRunDataRead.cxx:229
 TProofBenchRunDataRead.cxx:230
 TProofBenchRunDataRead.cxx:231
 TProofBenchRunDataRead.cxx:232
 TProofBenchRunDataRead.cxx:233
 TProofBenchRunDataRead.cxx:234
 TProofBenchRunDataRead.cxx:235
 TProofBenchRunDataRead.cxx:236
 TProofBenchRunDataRead.cxx:237
 TProofBenchRunDataRead.cxx:238
 TProofBenchRunDataRead.cxx:239
 TProofBenchRunDataRead.cxx:240
 TProofBenchRunDataRead.cxx:241
 TProofBenchRunDataRead.cxx:242
 TProofBenchRunDataRead.cxx:243
 TProofBenchRunDataRead.cxx:244
 TProofBenchRunDataRead.cxx:245
 TProofBenchRunDataRead.cxx:246
 TProofBenchRunDataRead.cxx:247
 TProofBenchRunDataRead.cxx:248
 TProofBenchRunDataRead.cxx:249
 TProofBenchRunDataRead.cxx:250
 TProofBenchRunDataRead.cxx:251
 TProofBenchRunDataRead.cxx:252
 TProofBenchRunDataRead.cxx:253
 TProofBenchRunDataRead.cxx:254
 TProofBenchRunDataRead.cxx:255
 TProofBenchRunDataRead.cxx:256
 TProofBenchRunDataRead.cxx:257
 TProofBenchRunDataRead.cxx:258
 TProofBenchRunDataRead.cxx:259
 TProofBenchRunDataRead.cxx:260
 TProofBenchRunDataRead.cxx:261
 TProofBenchRunDataRead.cxx:262
 TProofBenchRunDataRead.cxx:263
 TProofBenchRunDataRead.cxx:264
 TProofBenchRunDataRead.cxx:265
 TProofBenchRunDataRead.cxx:266
 TProofBenchRunDataRead.cxx:267
 TProofBenchRunDataRead.cxx:268
 TProofBenchRunDataRead.cxx:269
 TProofBenchRunDataRead.cxx:270
 TProofBenchRunDataRead.cxx:271
 TProofBenchRunDataRead.cxx:272
 TProofBenchRunDataRead.cxx:273
 TProofBenchRunDataRead.cxx:274
 TProofBenchRunDataRead.cxx:275
 TProofBenchRunDataRead.cxx:276
 TProofBenchRunDataRead.cxx:277
 TProofBenchRunDataRead.cxx:278
 TProofBenchRunDataRead.cxx:279
 TProofBenchRunDataRead.cxx:280
 TProofBenchRunDataRead.cxx:281
 TProofBenchRunDataRead.cxx:282
 TProofBenchRunDataRead.cxx:283
 TProofBenchRunDataRead.cxx:284
 TProofBenchRunDataRead.cxx:285
 TProofBenchRunDataRead.cxx:286
 TProofBenchRunDataRead.cxx:287
 TProofBenchRunDataRead.cxx:288
 TProofBenchRunDataRead.cxx:289
 TProofBenchRunDataRead.cxx:290
 TProofBenchRunDataRead.cxx:291
 TProofBenchRunDataRead.cxx:292
 TProofBenchRunDataRead.cxx:293
 TProofBenchRunDataRead.cxx:294
 TProofBenchRunDataRead.cxx:295
 TProofBenchRunDataRead.cxx:296
 TProofBenchRunDataRead.cxx:297
 TProofBenchRunDataRead.cxx:298
 TProofBenchRunDataRead.cxx:299
 TProofBenchRunDataRead.cxx:300
 TProofBenchRunDataRead.cxx:301
 TProofBenchRunDataRead.cxx:302
 TProofBenchRunDataRead.cxx:303
 TProofBenchRunDataRead.cxx:304
 TProofBenchRunDataRead.cxx:305
 TProofBenchRunDataRead.cxx:306
 TProofBenchRunDataRead.cxx:307
 TProofBenchRunDataRead.cxx:308
 TProofBenchRunDataRead.cxx:309
 TProofBenchRunDataRead.cxx:310
 TProofBenchRunDataRead.cxx:311
 TProofBenchRunDataRead.cxx:312
 TProofBenchRunDataRead.cxx:313
 TProofBenchRunDataRead.cxx:314
 TProofBenchRunDataRead.cxx:315
 TProofBenchRunDataRead.cxx:316
 TProofBenchRunDataRead.cxx:317
 TProofBenchRunDataRead.cxx:318
 TProofBenchRunDataRead.cxx:319
 TProofBenchRunDataRead.cxx:320
 TProofBenchRunDataRead.cxx:321
 TProofBenchRunDataRead.cxx:322
 TProofBenchRunDataRead.cxx:323
 TProofBenchRunDataRead.cxx:324
 TProofBenchRunDataRead.cxx:325
 TProofBenchRunDataRead.cxx:326
 TProofBenchRunDataRead.cxx:327
 TProofBenchRunDataRead.cxx:328
 TProofBenchRunDataRead.cxx:329
 TProofBenchRunDataRead.cxx:330
 TProofBenchRunDataRead.cxx:331
 TProofBenchRunDataRead.cxx:332
 TProofBenchRunDataRead.cxx:333
 TProofBenchRunDataRead.cxx:334
 TProofBenchRunDataRead.cxx:335
 TProofBenchRunDataRead.cxx:336
 TProofBenchRunDataRead.cxx:337
 TProofBenchRunDataRead.cxx:338
 TProofBenchRunDataRead.cxx:339
 TProofBenchRunDataRead.cxx:340
 TProofBenchRunDataRead.cxx:341
 TProofBenchRunDataRead.cxx:342
 TProofBenchRunDataRead.cxx:343
 TProofBenchRunDataRead.cxx:344
 TProofBenchRunDataRead.cxx:345
 TProofBenchRunDataRead.cxx:346
 TProofBenchRunDataRead.cxx:347
 TProofBenchRunDataRead.cxx:348
 TProofBenchRunDataRead.cxx:349
 TProofBenchRunDataRead.cxx:350
 TProofBenchRunDataRead.cxx:351
 TProofBenchRunDataRead.cxx:352
 TProofBenchRunDataRead.cxx:353
 TProofBenchRunDataRead.cxx:354
 TProofBenchRunDataRead.cxx:355
 TProofBenchRunDataRead.cxx:356
 TProofBenchRunDataRead.cxx:357
 TProofBenchRunDataRead.cxx:358
 TProofBenchRunDataRead.cxx:359
 TProofBenchRunDataRead.cxx:360
 TProofBenchRunDataRead.cxx:361
 TProofBenchRunDataRead.cxx:362
 TProofBenchRunDataRead.cxx:363
 TProofBenchRunDataRead.cxx:364
 TProofBenchRunDataRead.cxx:365
 TProofBenchRunDataRead.cxx:366
 TProofBenchRunDataRead.cxx:367
 TProofBenchRunDataRead.cxx:368
 TProofBenchRunDataRead.cxx:369
 TProofBenchRunDataRead.cxx:370
 TProofBenchRunDataRead.cxx:371
 TProofBenchRunDataRead.cxx:372
 TProofBenchRunDataRead.cxx:373
 TProofBenchRunDataRead.cxx:374
 TProofBenchRunDataRead.cxx:375
 TProofBenchRunDataRead.cxx:376
 TProofBenchRunDataRead.cxx:377
 TProofBenchRunDataRead.cxx:378
 TProofBenchRunDataRead.cxx:379
 TProofBenchRunDataRead.cxx:380
 TProofBenchRunDataRead.cxx:381
 TProofBenchRunDataRead.cxx:382
 TProofBenchRunDataRead.cxx:383
 TProofBenchRunDataRead.cxx:384
 TProofBenchRunDataRead.cxx:385
 TProofBenchRunDataRead.cxx:386
 TProofBenchRunDataRead.cxx:387
 TProofBenchRunDataRead.cxx:388
 TProofBenchRunDataRead.cxx:389
 TProofBenchRunDataRead.cxx:390
 TProofBenchRunDataRead.cxx:391
 TProofBenchRunDataRead.cxx:392
 TProofBenchRunDataRead.cxx:393
 TProofBenchRunDataRead.cxx:394
 TProofBenchRunDataRead.cxx:395
 TProofBenchRunDataRead.cxx:396
 TProofBenchRunDataRead.cxx:397
 TProofBenchRunDataRead.cxx:398
 TProofBenchRunDataRead.cxx:399
 TProofBenchRunDataRead.cxx:400
 TProofBenchRunDataRead.cxx:401
 TProofBenchRunDataRead.cxx:402
 TProofBenchRunDataRead.cxx:403
 TProofBenchRunDataRead.cxx:404
 TProofBenchRunDataRead.cxx:405
 TProofBenchRunDataRead.cxx:406
 TProofBenchRunDataRead.cxx:407
 TProofBenchRunDataRead.cxx:408
 TProofBenchRunDataRead.cxx:409
 TProofBenchRunDataRead.cxx:410
 TProofBenchRunDataRead.cxx:411
 TProofBenchRunDataRead.cxx:412
 TProofBenchRunDataRead.cxx:413
 TProofBenchRunDataRead.cxx:414
 TProofBenchRunDataRead.cxx:415
 TProofBenchRunDataRead.cxx:416
 TProofBenchRunDataRead.cxx:417
 TProofBenchRunDataRead.cxx:418
 TProofBenchRunDataRead.cxx:419
 TProofBenchRunDataRead.cxx:420
 TProofBenchRunDataRead.cxx:421
 TProofBenchRunDataRead.cxx:422
 TProofBenchRunDataRead.cxx:423
 TProofBenchRunDataRead.cxx:424
 TProofBenchRunDataRead.cxx:425
 TProofBenchRunDataRead.cxx:426
 TProofBenchRunDataRead.cxx:427
 TProofBenchRunDataRead.cxx:428
 TProofBenchRunDataRead.cxx:429
 TProofBenchRunDataRead.cxx:430
 TProofBenchRunDataRead.cxx:431
 TProofBenchRunDataRead.cxx:432
 TProofBenchRunDataRead.cxx:433
 TProofBenchRunDataRead.cxx:434
 TProofBenchRunDataRead.cxx:435
 TProofBenchRunDataRead.cxx:436
 TProofBenchRunDataRead.cxx:437
 TProofBenchRunDataRead.cxx:438
 TProofBenchRunDataRead.cxx:439
 TProofBenchRunDataRead.cxx:440
 TProofBenchRunDataRead.cxx:441
 TProofBenchRunDataRead.cxx:442
 TProofBenchRunDataRead.cxx:443
 TProofBenchRunDataRead.cxx:444
 TProofBenchRunDataRead.cxx:445
 TProofBenchRunDataRead.cxx:446
 TProofBenchRunDataRead.cxx:447
 TProofBenchRunDataRead.cxx:448
 TProofBenchRunDataRead.cxx:449
 TProofBenchRunDataRead.cxx:450
 TProofBenchRunDataRead.cxx:451
 TProofBenchRunDataRead.cxx:452
 TProofBenchRunDataRead.cxx:453
 TProofBenchRunDataRead.cxx:454
 TProofBenchRunDataRead.cxx:455
 TProofBenchRunDataRead.cxx:456
 TProofBenchRunDataRead.cxx:457
 TProofBenchRunDataRead.cxx:458
 TProofBenchRunDataRead.cxx:459
 TProofBenchRunDataRead.cxx:460
 TProofBenchRunDataRead.cxx:461
 TProofBenchRunDataRead.cxx:462
 TProofBenchRunDataRead.cxx:463
 TProofBenchRunDataRead.cxx:464
 TProofBenchRunDataRead.cxx:465
 TProofBenchRunDataRead.cxx:466
 TProofBenchRunDataRead.cxx:467
 TProofBenchRunDataRead.cxx:468
 TProofBenchRunDataRead.cxx:469
 TProofBenchRunDataRead.cxx:470
 TProofBenchRunDataRead.cxx:471
 TProofBenchRunDataRead.cxx:472
 TProofBenchRunDataRead.cxx:473
 TProofBenchRunDataRead.cxx:474
 TProofBenchRunDataRead.cxx:475
 TProofBenchRunDataRead.cxx:476
 TProofBenchRunDataRead.cxx:477
 TProofBenchRunDataRead.cxx:478
 TProofBenchRunDataRead.cxx:479
 TProofBenchRunDataRead.cxx:480
 TProofBenchRunDataRead.cxx:481
 TProofBenchRunDataRead.cxx:482
 TProofBenchRunDataRead.cxx:483
 TProofBenchRunDataRead.cxx:484
 TProofBenchRunDataRead.cxx:485
 TProofBenchRunDataRead.cxx:486
 TProofBenchRunDataRead.cxx:487
 TProofBenchRunDataRead.cxx:488
 TProofBenchRunDataRead.cxx:489
 TProofBenchRunDataRead.cxx:490
 TProofBenchRunDataRead.cxx:491
 TProofBenchRunDataRead.cxx:492
 TProofBenchRunDataRead.cxx:493
 TProofBenchRunDataRead.cxx:494
 TProofBenchRunDataRead.cxx:495
 TProofBenchRunDataRead.cxx:496
 TProofBenchRunDataRead.cxx:497
 TProofBenchRunDataRead.cxx:498
 TProofBenchRunDataRead.cxx:499
 TProofBenchRunDataRead.cxx:500
 TProofBenchRunDataRead.cxx:501
 TProofBenchRunDataRead.cxx:502
 TProofBenchRunDataRead.cxx:503
 TProofBenchRunDataRead.cxx:504
 TProofBenchRunDataRead.cxx:505
 TProofBenchRunDataRead.cxx:506
 TProofBenchRunDataRead.cxx:507
 TProofBenchRunDataRead.cxx:508
 TProofBenchRunDataRead.cxx:509
 TProofBenchRunDataRead.cxx:510
 TProofBenchRunDataRead.cxx:511
 TProofBenchRunDataRead.cxx:512
 TProofBenchRunDataRead.cxx:513
 TProofBenchRunDataRead.cxx:514
 TProofBenchRunDataRead.cxx:515
 TProofBenchRunDataRead.cxx:516
 TProofBenchRunDataRead.cxx:517
 TProofBenchRunDataRead.cxx:518
 TProofBenchRunDataRead.cxx:519
 TProofBenchRunDataRead.cxx:520
 TProofBenchRunDataRead.cxx:521
 TProofBenchRunDataRead.cxx:522
 TProofBenchRunDataRead.cxx:523
 TProofBenchRunDataRead.cxx:524
 TProofBenchRunDataRead.cxx:525
 TProofBenchRunDataRead.cxx:526
 TProofBenchRunDataRead.cxx:527
 TProofBenchRunDataRead.cxx:528
 TProofBenchRunDataRead.cxx:529
 TProofBenchRunDataRead.cxx:530
 TProofBenchRunDataRead.cxx:531
 TProofBenchRunDataRead.cxx:532
 TProofBenchRunDataRead.cxx:533
 TProofBenchRunDataRead.cxx:534
 TProofBenchRunDataRead.cxx:535
 TProofBenchRunDataRead.cxx:536
 TProofBenchRunDataRead.cxx:537
 TProofBenchRunDataRead.cxx:538
 TProofBenchRunDataRead.cxx:539
 TProofBenchRunDataRead.cxx:540
 TProofBenchRunDataRead.cxx:541
 TProofBenchRunDataRead.cxx:542
 TProofBenchRunDataRead.cxx:543
 TProofBenchRunDataRead.cxx:544
 TProofBenchRunDataRead.cxx:545
 TProofBenchRunDataRead.cxx:546
 TProofBenchRunDataRead.cxx:547
 TProofBenchRunDataRead.cxx:548
 TProofBenchRunDataRead.cxx:549
 TProofBenchRunDataRead.cxx:550
 TProofBenchRunDataRead.cxx:551
 TProofBenchRunDataRead.cxx:552
 TProofBenchRunDataRead.cxx:553
 TProofBenchRunDataRead.cxx:554
 TProofBenchRunDataRead.cxx:555
 TProofBenchRunDataRead.cxx:556
 TProofBenchRunDataRead.cxx:557
 TProofBenchRunDataRead.cxx:558
 TProofBenchRunDataRead.cxx:559
 TProofBenchRunDataRead.cxx:560
 TProofBenchRunDataRead.cxx:561
 TProofBenchRunDataRead.cxx:562
 TProofBenchRunDataRead.cxx:563
 TProofBenchRunDataRead.cxx:564
 TProofBenchRunDataRead.cxx:565
 TProofBenchRunDataRead.cxx:566
 TProofBenchRunDataRead.cxx:567
 TProofBenchRunDataRead.cxx:568
 TProofBenchRunDataRead.cxx:569
 TProofBenchRunDataRead.cxx:570
 TProofBenchRunDataRead.cxx:571
 TProofBenchRunDataRead.cxx:572
 TProofBenchRunDataRead.cxx:573
 TProofBenchRunDataRead.cxx:574
 TProofBenchRunDataRead.cxx:575
 TProofBenchRunDataRead.cxx:576
 TProofBenchRunDataRead.cxx:577
 TProofBenchRunDataRead.cxx:578
 TProofBenchRunDataRead.cxx:579
 TProofBenchRunDataRead.cxx:580
 TProofBenchRunDataRead.cxx:581
 TProofBenchRunDataRead.cxx:582
 TProofBenchRunDataRead.cxx:583
 TProofBenchRunDataRead.cxx:584
 TProofBenchRunDataRead.cxx:585
 TProofBenchRunDataRead.cxx:586
 TProofBenchRunDataRead.cxx:587
 TProofBenchRunDataRead.cxx:588
 TProofBenchRunDataRead.cxx:589
 TProofBenchRunDataRead.cxx:590
 TProofBenchRunDataRead.cxx:591
 TProofBenchRunDataRead.cxx:592
 TProofBenchRunDataRead.cxx:593
 TProofBenchRunDataRead.cxx:594
 TProofBenchRunDataRead.cxx:595
 TProofBenchRunDataRead.cxx:596
 TProofBenchRunDataRead.cxx:597
 TProofBenchRunDataRead.cxx:598
 TProofBenchRunDataRead.cxx:599
 TProofBenchRunDataRead.cxx:600
 TProofBenchRunDataRead.cxx:601
 TProofBenchRunDataRead.cxx:602
 TProofBenchRunDataRead.cxx:603
 TProofBenchRunDataRead.cxx:604
 TProofBenchRunDataRead.cxx:605
 TProofBenchRunDataRead.cxx:606
 TProofBenchRunDataRead.cxx:607
 TProofBenchRunDataRead.cxx:608
 TProofBenchRunDataRead.cxx:609
 TProofBenchRunDataRead.cxx:610
 TProofBenchRunDataRead.cxx:611
 TProofBenchRunDataRead.cxx:612
 TProofBenchRunDataRead.cxx:613
 TProofBenchRunDataRead.cxx:614
 TProofBenchRunDataRead.cxx:615
 TProofBenchRunDataRead.cxx:616
 TProofBenchRunDataRead.cxx:617
 TProofBenchRunDataRead.cxx:618
 TProofBenchRunDataRead.cxx:619
 TProofBenchRunDataRead.cxx:620
 TProofBenchRunDataRead.cxx:621
 TProofBenchRunDataRead.cxx:622
 TProofBenchRunDataRead.cxx:623
 TProofBenchRunDataRead.cxx:624
 TProofBenchRunDataRead.cxx:625
 TProofBenchRunDataRead.cxx:626
 TProofBenchRunDataRead.cxx:627
 TProofBenchRunDataRead.cxx:628
 TProofBenchRunDataRead.cxx:629
 TProofBenchRunDataRead.cxx:630
 TProofBenchRunDataRead.cxx:631
 TProofBenchRunDataRead.cxx:632
 TProofBenchRunDataRead.cxx:633
 TProofBenchRunDataRead.cxx:634
 TProofBenchRunDataRead.cxx:635
 TProofBenchRunDataRead.cxx:636
 TProofBenchRunDataRead.cxx:637
 TProofBenchRunDataRead.cxx:638
 TProofBenchRunDataRead.cxx:639
 TProofBenchRunDataRead.cxx:640
 TProofBenchRunDataRead.cxx:641
 TProofBenchRunDataRead.cxx:642
 TProofBenchRunDataRead.cxx:643
 TProofBenchRunDataRead.cxx:644
 TProofBenchRunDataRead.cxx:645
 TProofBenchRunDataRead.cxx:646
 TProofBenchRunDataRead.cxx:647
 TProofBenchRunDataRead.cxx:648
 TProofBenchRunDataRead.cxx:649
 TProofBenchRunDataRead.cxx:650
 TProofBenchRunDataRead.cxx:651
 TProofBenchRunDataRead.cxx:652
 TProofBenchRunDataRead.cxx:653
 TProofBenchRunDataRead.cxx:654
 TProofBenchRunDataRead.cxx:655
 TProofBenchRunDataRead.cxx:656
 TProofBenchRunDataRead.cxx:657
 TProofBenchRunDataRead.cxx:658
 TProofBenchRunDataRead.cxx:659
 TProofBenchRunDataRead.cxx:660
 TProofBenchRunDataRead.cxx:661
 TProofBenchRunDataRead.cxx:662
 TProofBenchRunDataRead.cxx:663
 TProofBenchRunDataRead.cxx:664
 TProofBenchRunDataRead.cxx:665
 TProofBenchRunDataRead.cxx:666
 TProofBenchRunDataRead.cxx:667
 TProofBenchRunDataRead.cxx:668
 TProofBenchRunDataRead.cxx:669
 TProofBenchRunDataRead.cxx:670
 TProofBenchRunDataRead.cxx:671
 TProofBenchRunDataRead.cxx:672
 TProofBenchRunDataRead.cxx:673
 TProofBenchRunDataRead.cxx:674
 TProofBenchRunDataRead.cxx:675
 TProofBenchRunDataRead.cxx:676
 TProofBenchRunDataRead.cxx:677
 TProofBenchRunDataRead.cxx:678
 TProofBenchRunDataRead.cxx:679
 TProofBenchRunDataRead.cxx:680
 TProofBenchRunDataRead.cxx:681
 TProofBenchRunDataRead.cxx:682
 TProofBenchRunDataRead.cxx:683
 TProofBenchRunDataRead.cxx:684
 TProofBenchRunDataRead.cxx:685
 TProofBenchRunDataRead.cxx:686
 TProofBenchRunDataRead.cxx:687
 TProofBenchRunDataRead.cxx:688
 TProofBenchRunDataRead.cxx:689
 TProofBenchRunDataRead.cxx:690
 TProofBenchRunDataRead.cxx:691
 TProofBenchRunDataRead.cxx:692
 TProofBenchRunDataRead.cxx:693
 TProofBenchRunDataRead.cxx:694
 TProofBenchRunDataRead.cxx:695
 TProofBenchRunDataRead.cxx:696
 TProofBenchRunDataRead.cxx:697
 TProofBenchRunDataRead.cxx:698
 TProofBenchRunDataRead.cxx:699
 TProofBenchRunDataRead.cxx:700
 TProofBenchRunDataRead.cxx:701
 TProofBenchRunDataRead.cxx:702
 TProofBenchRunDataRead.cxx:703
 TProofBenchRunDataRead.cxx:704
 TProofBenchRunDataRead.cxx:705
 TProofBenchRunDataRead.cxx:706
 TProofBenchRunDataRead.cxx:707
 TProofBenchRunDataRead.cxx:708
 TProofBenchRunDataRead.cxx:709
 TProofBenchRunDataRead.cxx:710
 TProofBenchRunDataRead.cxx:711
 TProofBenchRunDataRead.cxx:712
 TProofBenchRunDataRead.cxx:713
 TProofBenchRunDataRead.cxx:714
 TProofBenchRunDataRead.cxx:715
 TProofBenchRunDataRead.cxx:716
 TProofBenchRunDataRead.cxx:717
 TProofBenchRunDataRead.cxx:718
 TProofBenchRunDataRead.cxx:719
 TProofBenchRunDataRead.cxx:720
 TProofBenchRunDataRead.cxx:721
 TProofBenchRunDataRead.cxx:722
 TProofBenchRunDataRead.cxx:723
 TProofBenchRunDataRead.cxx:724
 TProofBenchRunDataRead.cxx:725
 TProofBenchRunDataRead.cxx:726
 TProofBenchRunDataRead.cxx:727
 TProofBenchRunDataRead.cxx:728
 TProofBenchRunDataRead.cxx:729
 TProofBenchRunDataRead.cxx:730
 TProofBenchRunDataRead.cxx:731
 TProofBenchRunDataRead.cxx:732
 TProofBenchRunDataRead.cxx:733
 TProofBenchRunDataRead.cxx:734
 TProofBenchRunDataRead.cxx:735
 TProofBenchRunDataRead.cxx:736
 TProofBenchRunDataRead.cxx:737
 TProofBenchRunDataRead.cxx:738
 TProofBenchRunDataRead.cxx:739
 TProofBenchRunDataRead.cxx:740
 TProofBenchRunDataRead.cxx:741
 TProofBenchRunDataRead.cxx:742
 TProofBenchRunDataRead.cxx:743
 TProofBenchRunDataRead.cxx:744
 TProofBenchRunDataRead.cxx:745
 TProofBenchRunDataRead.cxx:746
 TProofBenchRunDataRead.cxx:747
 TProofBenchRunDataRead.cxx:748
 TProofBenchRunDataRead.cxx:749
 TProofBenchRunDataRead.cxx:750
 TProofBenchRunDataRead.cxx:751
 TProofBenchRunDataRead.cxx:752
 TProofBenchRunDataRead.cxx:753
 TProofBenchRunDataRead.cxx:754
 TProofBenchRunDataRead.cxx:755
 TProofBenchRunDataRead.cxx:756
 TProofBenchRunDataRead.cxx:757
 TProofBenchRunDataRead.cxx:758
 TProofBenchRunDataRead.cxx:759
 TProofBenchRunDataRead.cxx:760
 TProofBenchRunDataRead.cxx:761
 TProofBenchRunDataRead.cxx:762
 TProofBenchRunDataRead.cxx:763
 TProofBenchRunDataRead.cxx:764
 TProofBenchRunDataRead.cxx:765
 TProofBenchRunDataRead.cxx:766
 TProofBenchRunDataRead.cxx:767
 TProofBenchRunDataRead.cxx:768
 TProofBenchRunDataRead.cxx:769
 TProofBenchRunDataRead.cxx:770
 TProofBenchRunDataRead.cxx:771
 TProofBenchRunDataRead.cxx:772
 TProofBenchRunDataRead.cxx:773
 TProofBenchRunDataRead.cxx:774
 TProofBenchRunDataRead.cxx:775
 TProofBenchRunDataRead.cxx:776
 TProofBenchRunDataRead.cxx:777
 TProofBenchRunDataRead.cxx:778
 TProofBenchRunDataRead.cxx:779
 TProofBenchRunDataRead.cxx:780
 TProofBenchRunDataRead.cxx:781
 TProofBenchRunDataRead.cxx:782
 TProofBenchRunDataRead.cxx:783
 TProofBenchRunDataRead.cxx:784
 TProofBenchRunDataRead.cxx:785
 TProofBenchRunDataRead.cxx:786
 TProofBenchRunDataRead.cxx:787
 TProofBenchRunDataRead.cxx:788
 TProofBenchRunDataRead.cxx:789
 TProofBenchRunDataRead.cxx:790
 TProofBenchRunDataRead.cxx:791
 TProofBenchRunDataRead.cxx:792
 TProofBenchRunDataRead.cxx:793
 TProofBenchRunDataRead.cxx:794
 TProofBenchRunDataRead.cxx:795
 TProofBenchRunDataRead.cxx:796
 TProofBenchRunDataRead.cxx:797
 TProofBenchRunDataRead.cxx:798
 TProofBenchRunDataRead.cxx:799
 TProofBenchRunDataRead.cxx:800
 TProofBenchRunDataRead.cxx:801
 TProofBenchRunDataRead.cxx:802
 TProofBenchRunDataRead.cxx:803
 TProofBenchRunDataRead.cxx:804
 TProofBenchRunDataRead.cxx:805
 TProofBenchRunDataRead.cxx:806
 TProofBenchRunDataRead.cxx:807
 TProofBenchRunDataRead.cxx:808
 TProofBenchRunDataRead.cxx:809
 TProofBenchRunDataRead.cxx:810
 TProofBenchRunDataRead.cxx:811
 TProofBenchRunDataRead.cxx:812
 TProofBenchRunDataRead.cxx:813
 TProofBenchRunDataRead.cxx:814
 TProofBenchRunDataRead.cxx:815
 TProofBenchRunDataRead.cxx:816
 TProofBenchRunDataRead.cxx:817
 TProofBenchRunDataRead.cxx:818
 TProofBenchRunDataRead.cxx:819
 TProofBenchRunDataRead.cxx:820
 TProofBenchRunDataRead.cxx:821
 TProofBenchRunDataRead.cxx:822
 TProofBenchRunDataRead.cxx:823
 TProofBenchRunDataRead.cxx:824
 TProofBenchRunDataRead.cxx:825
 TProofBenchRunDataRead.cxx:826
 TProofBenchRunDataRead.cxx:827
 TProofBenchRunDataRead.cxx:828
 TProofBenchRunDataRead.cxx:829
 TProofBenchRunDataRead.cxx:830
 TProofBenchRunDataRead.cxx:831
 TProofBenchRunDataRead.cxx:832
 TProofBenchRunDataRead.cxx:833
 TProofBenchRunDataRead.cxx:834
 TProofBenchRunDataRead.cxx:835
 TProofBenchRunDataRead.cxx:836
 TProofBenchRunDataRead.cxx:837
 TProofBenchRunDataRead.cxx:838
 TProofBenchRunDataRead.cxx:839
 TProofBenchRunDataRead.cxx:840
 TProofBenchRunDataRead.cxx:841
 TProofBenchRunDataRead.cxx:842
 TProofBenchRunDataRead.cxx:843
 TProofBenchRunDataRead.cxx:844
 TProofBenchRunDataRead.cxx:845
 TProofBenchRunDataRead.cxx:846
 TProofBenchRunDataRead.cxx:847
 TProofBenchRunDataRead.cxx:848
 TProofBenchRunDataRead.cxx:849
 TProofBenchRunDataRead.cxx:850
 TProofBenchRunDataRead.cxx:851
 TProofBenchRunDataRead.cxx:852
 TProofBenchRunDataRead.cxx:853
 TProofBenchRunDataRead.cxx:854
 TProofBenchRunDataRead.cxx:855
 TProofBenchRunDataRead.cxx:856
 TProofBenchRunDataRead.cxx:857
 TProofBenchRunDataRead.cxx:858
 TProofBenchRunDataRead.cxx:859
 TProofBenchRunDataRead.cxx:860
 TProofBenchRunDataRead.cxx:861
 TProofBenchRunDataRead.cxx:862
 TProofBenchRunDataRead.cxx:863
 TProofBenchRunDataRead.cxx:864
 TProofBenchRunDataRead.cxx:865
 TProofBenchRunDataRead.cxx:866
 TProofBenchRunDataRead.cxx:867
 TProofBenchRunDataRead.cxx:868
 TProofBenchRunDataRead.cxx:869
 TProofBenchRunDataRead.cxx:870
 TProofBenchRunDataRead.cxx:871
 TProofBenchRunDataRead.cxx:872
 TProofBenchRunDataRead.cxx:873
 TProofBenchRunDataRead.cxx:874
 TProofBenchRunDataRead.cxx:875
 TProofBenchRunDataRead.cxx:876
 TProofBenchRunDataRead.cxx:877
 TProofBenchRunDataRead.cxx:878
 TProofBenchRunDataRead.cxx:879
 TProofBenchRunDataRead.cxx:880
 TProofBenchRunDataRead.cxx:881
 TProofBenchRunDataRead.cxx:882
 TProofBenchRunDataRead.cxx:883
 TProofBenchRunDataRead.cxx:884
 TProofBenchRunDataRead.cxx:885
 TProofBenchRunDataRead.cxx:886
 TProofBenchRunDataRead.cxx:887
 TProofBenchRunDataRead.cxx:888
 TProofBenchRunDataRead.cxx:889
 TProofBenchRunDataRead.cxx:890
 TProofBenchRunDataRead.cxx:891
 TProofBenchRunDataRead.cxx:892
 TProofBenchRunDataRead.cxx:893
 TProofBenchRunDataRead.cxx:894
 TProofBenchRunDataRead.cxx:895
 TProofBenchRunDataRead.cxx:896
 TProofBenchRunDataRead.cxx:897
 TProofBenchRunDataRead.cxx:898
 TProofBenchRunDataRead.cxx:899
 TProofBenchRunDataRead.cxx:900
 TProofBenchRunDataRead.cxx:901
 TProofBenchRunDataRead.cxx:902
 TProofBenchRunDataRead.cxx:903
 TProofBenchRunDataRead.cxx:904
 TProofBenchRunDataRead.cxx:905
 TProofBenchRunDataRead.cxx:906
 TProofBenchRunDataRead.cxx:907
 TProofBenchRunDataRead.cxx:908
 TProofBenchRunDataRead.cxx:909
 TProofBenchRunDataRead.cxx:910
 TProofBenchRunDataRead.cxx:911
 TProofBenchRunDataRead.cxx:912
 TProofBenchRunDataRead.cxx:913
 TProofBenchRunDataRead.cxx:914
 TProofBenchRunDataRead.cxx:915
 TProofBenchRunDataRead.cxx:916
 TProofBenchRunDataRead.cxx:917
 TProofBenchRunDataRead.cxx:918
 TProofBenchRunDataRead.cxx:919
 TProofBenchRunDataRead.cxx:920
 TProofBenchRunDataRead.cxx:921
 TProofBenchRunDataRead.cxx:922
 TProofBenchRunDataRead.cxx:923
 TProofBenchRunDataRead.cxx:924
 TProofBenchRunDataRead.cxx:925
 TProofBenchRunDataRead.cxx:926
 TProofBenchRunDataRead.cxx:927
 TProofBenchRunDataRead.cxx:928
 TProofBenchRunDataRead.cxx:929
 TProofBenchRunDataRead.cxx:930
 TProofBenchRunDataRead.cxx:931
 TProofBenchRunDataRead.cxx:932
 TProofBenchRunDataRead.cxx:933
 TProofBenchRunDataRead.cxx:934
 TProofBenchRunDataRead.cxx:935
 TProofBenchRunDataRead.cxx:936
 TProofBenchRunDataRead.cxx:937
 TProofBenchRunDataRead.cxx:938
 TProofBenchRunDataRead.cxx:939
 TProofBenchRunDataRead.cxx:940
 TProofBenchRunDataRead.cxx:941
 TProofBenchRunDataRead.cxx:942
 TProofBenchRunDataRead.cxx:943
 TProofBenchRunDataRead.cxx:944
 TProofBenchRunDataRead.cxx:945
 TProofBenchRunDataRead.cxx:946
 TProofBenchRunDataRead.cxx:947
 TProofBenchRunDataRead.cxx:948
 TProofBenchRunDataRead.cxx:949
 TProofBenchRunDataRead.cxx:950
 TProofBenchRunDataRead.cxx:951
 TProofBenchRunDataRead.cxx:952
 TProofBenchRunDataRead.cxx:953
 TProofBenchRunDataRead.cxx:954
 TProofBenchRunDataRead.cxx:955
 TProofBenchRunDataRead.cxx:956
 TProofBenchRunDataRead.cxx:957
 TProofBenchRunDataRead.cxx:958
 TProofBenchRunDataRead.cxx:959
 TProofBenchRunDataRead.cxx:960
 TProofBenchRunDataRead.cxx:961
 TProofBenchRunDataRead.cxx:962
 TProofBenchRunDataRead.cxx:963
 TProofBenchRunDataRead.cxx:964
 TProofBenchRunDataRead.cxx:965
 TProofBenchRunDataRead.cxx:966
 TProofBenchRunDataRead.cxx:967
 TProofBenchRunDataRead.cxx:968
 TProofBenchRunDataRead.cxx:969
 TProofBenchRunDataRead.cxx:970
 TProofBenchRunDataRead.cxx:971
 TProofBenchRunDataRead.cxx:972
 TProofBenchRunDataRead.cxx:973
 TProofBenchRunDataRead.cxx:974
 TProofBenchRunDataRead.cxx:975
 TProofBenchRunDataRead.cxx:976
 TProofBenchRunDataRead.cxx:977
 TProofBenchRunDataRead.cxx:978
 TProofBenchRunDataRead.cxx:979
 TProofBenchRunDataRead.cxx:980
 TProofBenchRunDataRead.cxx:981
 TProofBenchRunDataRead.cxx:982
 TProofBenchRunDataRead.cxx:983
 TProofBenchRunDataRead.cxx:984
 TProofBenchRunDataRead.cxx:985
 TProofBenchRunDataRead.cxx:986
 TProofBenchRunDataRead.cxx:987
 TProofBenchRunDataRead.cxx:988
 TProofBenchRunDataRead.cxx:989
 TProofBenchRunDataRead.cxx:990
 TProofBenchRunDataRead.cxx:991
 TProofBenchRunDataRead.cxx:992
 TProofBenchRunDataRead.cxx:993
 TProofBenchRunDataRead.cxx:994
 TProofBenchRunDataRead.cxx:995
 TProofBenchRunDataRead.cxx:996
 TProofBenchRunDataRead.cxx:997
 TProofBenchRunDataRead.cxx:998
 TProofBenchRunDataRead.cxx:999
 TProofBenchRunDataRead.cxx:1000
 TProofBenchRunDataRead.cxx:1001
 TProofBenchRunDataRead.cxx:1002
 TProofBenchRunDataRead.cxx:1003
 TProofBenchRunDataRead.cxx:1004
 TProofBenchRunDataRead.cxx:1005
 TProofBenchRunDataRead.cxx:1006