ROOT  6.06/09
Reference Guide
TProofBenchRunDataRead.cxx
Go to the documentation of this file.
1 // @(#)root/proof:$Id$
2 // Author: Sangsu Ryu 22/06/2010
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // TProofBenchRunDataRead //
15 // //
16 // I/O-intensive PROOF benchmark test reads in event files distributed //
17 // on the cluster. Number of events processed per second and size of //
18 // events processed per second are plotted against number of active //
19 // workers. Performance rate for unit packets and performance rate //
20 // for query are plotted. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #include "RConfigure.h"
25 
26 #include "TProofBenchRunDataRead.h"
27 #include "TProofBenchDataSet.h"
28 #include "TProofPerfAnalysis.h"
29 #include "TProofNodes.h"
30 #include "TFileCollection.h"
31 #include "TFileInfo.h"
32 #include "TProof.h"
33 #include "TString.h"
34 #include "Riostream.h"
35 #include "TMap.h"
36 #include "TTree.h"
37 #include "TH1.h"
38 #include "TH2D.h"
39 #include "TCanvas.h"
40 #include "TProfile.h"
41 #include "TKey.h"
42 #include "TRegexp.h"
43 #include "TPerfStats.h"
44 #include "THashList.h"
45 #include "TSortedList.h"
46 #include "TPad.h"
47 #include "TEnv.h"
48 #include "TLeaf.h"
49 #include "TQueryResult.h"
50 #include "TMath.h"
51 #include "TStyle.h"
52 #include "TLegend.h"
53 #include "TROOT.h"
54 
56 
57 ////////////////////////////////////////////////////////////////////////////////
58 
60  TDirectory* dirproofbench, TProof* proof,
61  TProofNodes* nodes, Long64_t nevents, Int_t ntries,
62  Int_t start, Int_t stop, Int_t step, Int_t debug)
63  : TProofBenchRun(proof, kPROOF_BenchSelDataDef), fProof(proof),
64  fReadType(readtype), fDS(pbds),
65  fNEvents(nevents), fNTries(ntries), fStart(start), fStop(stop), fStep(step),
66  fDebug(debug), fFilesPerWrk(2), fReleaseCache(kTRUE),
67  fDirProofBench(dirproofbench), fNodes(nodes),
68  fListPerfPlots(0), fProfile_perfstat_event(0), fHist_perfstat_event(0),
69  fProfile_perfstat_evtmax(0), fNorm_perfstat_evtmax(0),
70  fProfile_queryresult_event(0), fNorm_queryresult_event(0),
71  fProfile_perfstat_IO(0), fHist_perfstat_IO(0),
72  fProfile_perfstat_IOmax(0), fNorm_perfstat_IOmax(0),
73  fProfile_queryresult_IO(0), fNorm_queryresult_IO(0), fProfile_cpu_eff(0),
74  fProfLegend_evt(0), fNormLegend_evt(0), fProfLegend_mb(0), fNormLegend_mb(0),
75  fCPerfProfiles(0), fName(0)
76 {
77  // Default constructor
78 
79  if (!fProof) fProof = gProof;
80  if (!fDS) fDS = new TProofBenchDataSet(fProof);
81 
82  // Set name
83  fName = "DataRead";
84 
85  if (!fNodes) fNodes = new TProofNodes(fProof);
86  fNodes->GetMapOfActiveNodes()->Print();
87 
88  if (stop == -1) fStop = fNodes->GetNWorkersCluster();
89 
90  fListPerfPlots = new TList;
91 
92  gEnv->SetValue("Proof.StatsTrace",1);
93  gStyle->SetOptStat(0);
94 }
95 
96 ////////////////////////////////////////////////////////////////////////////////
97 /// Destructor
98 
100 {
101  fProof=0;
102  fDirProofBench=0;
104  if (fCPerfProfiles) delete fCPerfProfiles;
109 }
110 
111 ////////////////////////////////////////////////////////////////////////////////
112 /// Run benchmark
113 /// Input parameters
114 /// dset: Dataset on which to run
115 /// start: Start scan with 'start' workers.
116 /// stop: Stop scan at 'stop workers.
117 /// step: Scan every 'step' workers.
118 /// ntries: Number of tries. When it is -1, data member fNTries is used.
119 /// debug: debug switch.
120 /// Int_t: Ignored
121 /// Returns
122 /// Nothing
123 
124 void TProofBenchRunDataRead::Run(const char *dset, Int_t start, Int_t stop,
125  Int_t step, Int_t ntries, Int_t debug, Int_t)
126 {
127  if (!fProof){
128  Error("Run", "Proof not set");
129  return;
130  }
131  if (!dset || (dset && strlen(dset) <= 0)){
132  Error("Run", "dataset name not set");
133  return;
134  }
135  // Check if the dataset exists
136  if (!fProof->ExistsDataSet(dset)) {
137  Error("Run", "no such data set found; %s", dset);
138  return;
139  }
140 
141  start = (start == -1) ? fStart : start;
142  stop = (stop == -1) ? fStop : stop;
143  step = (step == -1) ? fStep : step;
144  ntries = (ntries == -1) ? fNTries : ntries;
145  debug = (debug == -1) ? fDebug : debug;
146 
147  Int_t fDebug_sav = fDebug;
148  fDebug = debug;
149 
150  Bool_t nx = kFALSE;
151  if (step == -2){
152  nx = kTRUE;
153  step = 1;
154  }
155 
156  if (nx){
157  Int_t minnworkersanode = fNodes->GetMinWrksPerNode();
158  if (stop > minnworkersanode) stop = minnworkersanode;
159  }
160 
161  // Load the selector, if needed
163  // Is it the default selector?
165  // Load the parfile
166 #ifdef R__HAVE_CONFIG
168 #else
169  TString par = TString::Format("$ROOTSYS/etc/%s%s.par", kPROOF_BenchParDir, kPROOF_BenchDataSelPar);
170 #endif
171  Info("Run", "Uploading '%s' ...", par.Data());
172  if (fProof->UploadPackage(par) != 0) {
173  Error("Run", "problems uploading '%s' - cannot continue", par.Data());
174  return;
175  }
176  Info("Run", "Enabling '%s' ...", kPROOF_BenchDataSelPar);
178  Error("Run", "problems enabling '%s' - cannot continue", kPROOF_BenchDataSelPar);
179  return;
180  }
181  } else {
182  if (fParList.IsNull()) {
183  Error("Run", "you should load the class '%s' before running the benchmark", fSelName.Data());
184  return;
185  } else {
186  TString par;
187  Int_t from = 0;
188  while (fParList.Tokenize(par, from, ",")) {
189  Info("Run", "Uploading '%s' ...", par.Data());
190  if (fProof->UploadPackage(par) != 0) {
191  Error("Run", "problems uploading '%s' - cannot continue", par.Data());
192  return;
193  }
194  Info("Run", "Enabling '%s' ...", par.Data());
195  if (fProof->EnablePackage(par) != 0) {
196  Error("Run", "problems enabling '%s' - cannot continue", par.Data());
197  return;
198  }
199  }
200  }
201  }
202  // Check
203  if (!TClass::GetClass(fSelName)) {
204  Error("Run", "failed to load '%s'", fSelName.Data());
205  return;
206  }
207  }
208 
209  // Build histograms, profiles and graphs needed for this run
210  BuildHistos(start, stop, step, nx);
211 
212  TString dsname(dset);
213  TString dsbasename = gSystem->BaseName(dset);
214 
215  // Get pad
216  if (!fCPerfProfiles){
217  TString canvasname = TString::Format("Performance Profiles %s", GetName());
218  fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
219  }
220 
221  // Cleanup up the canvas
223 
224  fCPerfProfiles->Divide(2,2);
225 
226  Info("Run", "Running IO-bound tests on dataset '%s'; %d ~ %d active worker(s),"
227  " every %d worker(s).", dset, start, stop, step);
228 
229  Int_t npad = 1; //pad number
230 
231  Int_t nnodes = fNodes->GetNNodes(); // Number of machines
232  Int_t ncores = fNodes->GetNCores(); // Number of cores
233 
234  Bool_t drawpf = kFALSE;
235  Double_t ymi = -1., ymx = -1., emx =- 1, ymiio = -1., ymxio = -1., mbmx = -1.;
236  for (Int_t nactive = start; nactive <= stop; nactive += step) {
237 
238  // For CPU effectiveness (ok for lite; should do it properly for standard clusters)
239  Int_t ncoren = (nactive < ncores) ? nactive : ncores;
240 
241  // Actvate the wanted workers
242  Int_t nw = -1;
243  if (nx) {
244  TString workers;
245  workers.Form("%dx", nactive);
246  nw = fNodes->ActivateWorkers(workers);
247  } else {
248  nw = fNodes->ActivateWorkers(nactive);
249  }
250  if (nw < 0){
251  Error("Run", "could not activate the requested number of"
252  " workers/node on the cluster; skipping the test point"
253  " (%d workers/node)", nactive);
254  continue;
255  }
256 
257  // Prepare the dataset for this run. possibly a subsample of
258  // the total one
259  TFileCollection *fc = GetDataSet(dsname, nactive, nx);
260  if (!fc) {
261  Error("Run", "could not retrieve dataset '%s'", dsname.Data());
262  continue;
263  }
264  fc->Print("F");
265  TString dsn = TString::Format("%s_%d_%d", dsbasename.Data(), nactive, (Int_t)nx);
266  fProof->RegisterDataSet(dsn, fc, "OT");
267  fProof->ShowDataSet(dsn, "F");
268 
269  for (Int_t j=0; j<ntries; j++) {
270 
271  if (nx){
272  Info("Run", "Running IO-bound tests with %d active worker(s)/node;"
273  " trial %d/%d", nactive, j + 1, ntries);
274  } else {
275  Info("Run", "Running IO-bound tests with %d active worker(s);"
276  " trial %d/%d", nactive, j + 1, ntries);
277  }
278 
279  // Cleanup run
280  const char *dsnr = (fDS->IsProof(fProof)) ? dsn.Data() : dsname.Data();
281  if (fReleaseCache) fDS->ReleaseCache(dsnr);
282 
284  SetParameters();
285 
286  Info("Run", "Processing data set %s with"
287  " %d active worker(s).", dsn.Data(), nactive);
288 
289  TTime starttime = gSystem->Now();
291 
293 
294  TTime endtime = gSystem->Now();
295 
296  TList *l = fProof->GetOutputList();
297 
298  //save perfstats
299  TString perfstats_name = "PROOF_PerfStats";
300  TTree *t = 0;
301  if (l) t = dynamic_cast<TTree*>(l->FindObject(perfstats_name.Data()));
302  if (t) {
303  drawpf = kTRUE;
304  TTree* tnew=(TTree*)t->Clone("tnew");
305 
306  FillPerfStatProfiles(tnew, nactive);
307 
308  TProofPerfAnalysis pfa(tnew);
309  Double_t pf_eventrate = pfa.GetEvtRateAvgMax();
310  Double_t pf_IOrate = pfa.GetMBRateAvgMax();
311  fProfile_perfstat_evtmax->Fill(nactive, pf_eventrate);
312  fCPerfProfiles->cd(npad);
317  gPad->Update();
318  fProfile_perfstat_IOmax->Fill(nactive, pf_IOrate);
319  fCPerfProfiles->cd(npad + 2);
323  fProfLegend_mb->Draw();
324  gPad->Update();
325  // The normalised histos
326  // Use the first bin to set the Y range for the histo
327  Double_t nert = nx ? pf_eventrate/nactive/nnodes : pf_eventrate/nactive;
328  fNorm_perfstat_evtmax->Fill(nactive, nert);
331  Double_t dy = 5 * e1;
332  if (dy / y1 < 0.2) dy = y1 * 0.2;
333  if (dy > y1) dy = y1*.999999;
334  if (ymi < 0.) ymi = y1 - dy;
335  if (fNorm_perfstat_evtmax->GetBinContent(nactive) < ymi)
336  ymi = fNorm_perfstat_evtmax->GetBinContent(nactive) / 2.;
337  if (ymx < 0.) ymx = y1 + dy;
338  if (fNorm_perfstat_evtmax->GetBinContent(nactive) > ymx)
339  ymx = fNorm_perfstat_evtmax->GetBinContent(nactive) * 1.5;
342  fCPerfProfiles->cd(npad + 1);
344  gPad->Update();
345  //
346  Double_t niort = nx ? pf_IOrate/nactive/nnodes : pf_IOrate/nactive;
347  fNorm_perfstat_IOmax->Fill(nactive, niort);
350  dy = 5 * e1;
351  if (dy / y1 < 0.2) dy = y1 * 0.2;
352  if (dy > y1) dy = y1*.999999;
353  if (ymiio < 0.) ymiio = y1 - dy;
354  if (fNorm_perfstat_IOmax->GetBinContent(nactive) < ymiio)
355  ymiio = fNorm_perfstat_IOmax->GetBinContent(nactive) / 2.;
356  if (ymxio < 0.) ymxio = y1 + dy;
357  if (fNorm_perfstat_IOmax->GetBinContent(nactive) > ymxio)
358  ymxio = fNorm_perfstat_IOmax->GetBinContent(nactive) * 1.5;
361  fCPerfProfiles->cd(npad + 3);
363  gPad->Update();
364 
365  //change the name
366  TString newname = TString::Format("%s_%s_%dwrks%dthtry", t->GetName(), GetName(), nactive, j);
367  tnew->SetName(newname);
368 
369  if (debug && fDirProofBench->IsWritable()){
370  TDirectory *curdir = gDirectory;
371  TString dirn = nx ? "RunDataReadx" : "RunDataRead";
372  if (!fDirProofBench->GetDirectory(dirn))
373  fDirProofBench->mkdir(dirn, "RunDataRead results");
374  if (fDirProofBench->cd(dirn)) {
376  tnew->Write();
377  l->Remove(tnew);
378  } else {
379  Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
380  }
381  curdir->cd();
382  }
383  } else {
384  if (l)
385  Warning("Run", "%s: tree not found", perfstats_name.Data());
386  else
387  Error("Run", "PROOF output list is empty!");
388  }
389 
390  //
391  const char *drawopt = t ? "SAME" : "";
392  // Performance measures from TQueryResult
393  TQueryResult *queryresult = fProof->GetQueryResult();
394  if (queryresult) {
395  TDatime qr_start = queryresult->GetStartTime();
396  TDatime qr_end = queryresult->GetEndTime();
397  Float_t qr_proc = queryresult->GetProcTime();
398  Long64_t qr_bytes = queryresult->GetBytes();
399 
400  Long64_t qr_entries = queryresult->GetEntries();
401 
402  // Calculate and fill CPU efficiency
403  Float_t qr_cpu_eff = -1.;
404  if (qr_proc > 0.) {
405  qr_cpu_eff = queryresult->GetUsedCPU() / ncoren / qr_proc ;
406  fProfile_cpu_eff->Fill(nactive, qr_cpu_eff);
407  Printf("cpu_eff: %f", qr_cpu_eff);
408  }
409 
410  // Calculate event rate, fill and draw
411  Double_t qr_eventrate=0;
412 
413  qr_eventrate = qr_entries / Double_t(qr_proc);
414  if (qr_eventrate > emx) emx = qr_eventrate;
415 
416  fProfile_queryresult_event->Fill(nactive, qr_eventrate);
417  fCPerfProfiles->cd(npad);
421  gPad->Update();
422 
423  // Calculate IO rate, fill and draw
424  Double_t qr_IOrate = 0;
425 
426  const Double_t Dmegabytes = 1024*1024;
427 
428  qr_IOrate = qr_bytes / Dmegabytes / Double_t(qr_proc);
429  if (qr_IOrate > mbmx) mbmx = qr_IOrate;
430 
431  fProfile_queryresult_IO->Fill(nactive, qr_IOrate);
432  fCPerfProfiles->cd(npad + 2);
434  fProfile_queryresult_IO->Draw(drawopt);
435  fProfLegend_mb->Draw();
436  gPad->Update();
437 
438  // The normalised histos
439  // Use the first bin to set the Y range for the histo
440  Double_t nert = nx ? qr_eventrate/nactive/nnodes : qr_eventrate/nactive;
441  fNorm_queryresult_event->Fill(nactive, nert);
444  Double_t dy = 5 * e1;
445  if (dy / y1 < 0.2) dy = y1 * 0.2;
446  if (dy > y1) dy = y1*.999999;
447  if (ymi < 0.) ymi = y1 - dy;
448  if (fNorm_queryresult_event->GetBinContent(nactive) < ymi)
449  ymi = fNorm_queryresult_event->GetBinContent(nactive) / 2.;
450  if (ymx < 0.) ymx = y1 + dy;
451  if (fNorm_queryresult_event->GetBinContent(nactive) > ymx)
452  ymx = fNorm_queryresult_event->GetBinContent(nactive) * 1.5;
453 // fNorm_queryresult_event->SetMaximum(ymx);
455  fCPerfProfiles->cd(npad + 1);
456  fNorm_queryresult_event->Draw(drawopt);
458  gPad->Update();
459  //
460  Double_t niort = nx ? qr_IOrate/nactive/nnodes : qr_IOrate/nactive;
461  fNorm_queryresult_IO->Fill(nactive, niort);
464  dy = 5 * e1;
465  if (dy / y1 < 0.2) dy = y1 * 0.2;
466  if (dy > y1) dy = y1*.999999;
467  if (ymiio < 0.) ymiio = y1 - dy;
468  if (fNorm_queryresult_IO->GetBinContent(nactive) < ymiio)
469  ymiio = fNorm_queryresult_IO->GetBinContent(nactive) / 2.;
470  if (ymxio < 0.) ymxio = y1 + dy;
471  if (fNorm_queryresult_IO->GetBinContent(nactive) > ymxio)
472  ymxio = fNorm_queryresult_IO->GetBinContent(nactive) * 1.5;
473 // fNorm_queryresult_IO->SetMaximum(ymxio);
475  fCPerfProfiles->cd(npad + 3);
476  fNorm_queryresult_IO->Draw(drawopt);
477  fNormLegend_mb->Draw();
478  gPad->Update();
479  }
480  fCPerfProfiles->cd(0);
481  }
482  // Remove temporary dataset
483  fProof->RemoveDataSet(dsn);
484  SafeDelete(fc);
485  }
486 
487  // Make the result persistent
488  fCPerfProfiles->cd(npad);
491  if (drawpf) fProfile_perfstat_evtmax->DrawCopy("SAME");
493  fCPerfProfiles->cd(npad + 2);
496  if (drawpf) fProfile_perfstat_IOmax->DrawCopy("SAME");
497  fProfLegend_mb->Draw();
498  fCPerfProfiles->cd(npad + 1);
500  if (drawpf) fNorm_perfstat_evtmax->DrawCopy("SAME");
502  fCPerfProfiles->cd(npad + 3);
504  if (drawpf) fNorm_perfstat_IOmax->DrawCopy("SAME");
505  fProfLegend_mb->Draw();
506  gPad->Update();
507 
508  //save performance profiles to file
509  if (fDirProofBench->IsWritable()){
510  TDirectory *curdir = gDirectory;
511  TString dirn = nx ? "RunDataReadx" : "RunDataRead";
512  if (!fDirProofBench->GetDirectory(dirn))
513  fDirProofBench->mkdir(dirn, "RunDataRead results");
514  if (fDirProofBench->cd(dirn)) {
518  } else {
519  Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
520  }
521  curdir->cd();
522  }
523  // Restore member data
524  fDebug = fDebug_sav;
525 }
526 
527 ////////////////////////////////////////////////////////////////////////////////
528 /// Get a subsample of dsname suited to run with 'nact' and option 'nx'.
529 
531  Int_t nact, Bool_t nx)
532 {
533  TFileCollection *fcsub = 0;
534 
535  // Dataset must exists
536  if (!fProof || (fProof && !fProof->ExistsDataSet(dset))) {
537  Error("GetDataSet", "dataset '%s' does not exist", dset);
538  return fcsub;
539  }
540 
541  // Get the full collection
542  TFileCollection *fcref = fProof->GetDataSet(dset);
543  if (!fcref) {
544  Error("GetDataSet", "dataset '%s' could not be retrieved", dset);
545  return fcsub;
546  }
547  // Is it remote ?
549 
550  // Separate info per server
551 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,30,0)
552  TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster(), kTRUE);
553 #else
554  TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster());
555 #endif
556  if (!mpref) {
557  SafeDelete(fcref);
558  Error("GetDataSet", "problems classifying info on per-server base");
559  return fcsub;
560  }
561  mpref->Print();
562 
563  // Get Active node information
564  TMap *mpnodes = fNodes->GetMapOfActiveNodes();
565  if (!mpnodes) {
566  SafeDelete(fcref);
567  SafeDelete(mpref);
568  Error("GetDataSet", "problems getting map of active nodes");
569  return fcsub;
570  }
571  mpnodes->Print();
572 
573  // Number of files: fFilesPerWrk per active worker
575  Printf(" number of files needed (ideally): %d (%d per worker)", nf, fFilesPerWrk);
576 
577  // The output dataset
578  fcsub = new TFileCollection(TString::Format("%s_%d_%d", fcref->GetName(), nact, nx),
579  fcref->GetTitle());
580 
581  // Order reference sub-collections
582  TIter nxnd(mpnodes);
583  TObject *key = 0;
584  TFileInfo *fi = 0;
585  TFileCollection *xfc = 0;
586  TList *lswrks = 0;
587  while ((key = nxnd())) {
588  TIter nxsrv(mpref);
589  TObject *ksrv = 0;
590  while ((ksrv = nxsrv())) {
591  TUrl urlsrv(ksrv->GetName());
592  if (TString(urlsrv.GetHostFQDN()).IsNull())
593  urlsrv.SetHost(TUrl(gProof->GetMaster()).GetHostFQDN());
594  if (remote ||
595  !strcmp(urlsrv.GetHostFQDN(), TUrl(key->GetName()).GetHostFQDN())) {
596  if ((xfc = dynamic_cast<TFileCollection *>(mpref->GetValue(ksrv)))) {
597  if ((lswrks = dynamic_cast<TList *>(mpnodes->GetValue(key)))) {
598  Int_t nfnd = fFilesPerWrk * lswrks->GetSize();
599  while (nfnd-- && xfc->GetList()->GetSize() > 0) {
600  if ((fi = (TFileInfo *) xfc->GetList()->First())) {
601  xfc->GetList()->Remove(fi);
602  fcsub->Add(fi);
603  }
604  }
605  } else {
606  Warning("GetDataSet", "could not attach to worker list for node '%s'",
607  key->GetName());
608  }
609  } else {
610  Warning("GetDataSet", "could not attach to file collection for server '%s'",
611  ksrv->GetName());
612  }
613  }
614  }
615  }
616 
617  // Update counters
618  fcsub->Update();
619  fcsub->Print();
620 
621  // Make sure that the tree name is the one of the original dataset
622  if (fcref) {
623  TString dflt(fcref->GetDefaultTreeName());
624  if (!dflt.IsNull()) fcsub->SetDefaultTreeName(dflt);
625  }
626 
627  // Cleanup
628  SafeDelete(fcref);
629  SafeDelete(mpref);
630  // Done
631  return fcsub;
632 }
633 
634 ////////////////////////////////////////////////////////////////////////////////
635 
637 {
638  // Fill performance profiles using tree 't'(PROOF_PerfStats).
639  // Input parameters
640  // t: Proof output tree (PROOF_PerfStat) containing performance
641  // statistics.
642  // nactive: Number of active workers processed the query.
643  // Return
644  // Nothing
645 
646  // extract timing information
647  TPerfEvent pe;
648  TPerfEvent* pep = &pe;
649  t->SetBranchAddress("PerfEvents",&pep);
650  Long64_t entries = t->GetEntries();
651 
652  const Double_t Dmegabytes = 1024.*1024.;
653  Double_t event_rate_packet = 0;
654  Double_t IO_rate_packet = 0;
655 
656  for (Long64_t k=0; k<entries; k++) {
657  t->GetEntry(k);
658 
659  // Skip information from workers
660  if (pe.fEvtNode.Contains(".")) continue;
661 
663  if (pe.fProcTime != 0.0) {
664  event_rate_packet = pe.fEventsProcessed / pe.fProcTime;
665  fHist_perfstat_event->Fill(Double_t(nactive), event_rate_packet);
666  IO_rate_packet = pe.fBytesRead / Dmegabytes / pe.fProcTime;
667  fHist_perfstat_IO->Fill(Double_t(nactive), IO_rate_packet);
668  }
669  }
670  }
671 
672  return;
673 }
674 
675 ////////////////////////////////////////////////////////////////////////////////
676 /// Print the content of this object
677 
679 {
680  Printf("Name = %s", fName.Data());
681  if (fProof) fProof->Print(option);
682  Printf("fReadType = %s%s", "k", GetNameStem().Data());
683  Printf("fNEvents = %lld", fNEvents);
684  Printf("fNTries = %d", fNTries);
685  Printf("fStart = %d", fStart);
686  Printf("fStop = %d", fStop);
687  Printf("fStep = %d", fStep);
688  Printf("fDebug = %d", fDebug);
689  if (fDirProofBench)
690  Printf("fDirProofBench = %s", fDirProofBench->GetPath());
691  if (fNodes) fNodes->Print(option);
692  if (fListPerfPlots) fListPerfPlots->Print(option);
693 
694  if (fCPerfProfiles)
695  Printf("Performance Profiles Canvas: Name = %s Title = %s",
697 }
698 
699 ////////////////////////////////////////////////////////////////////////////////
700 /// Get canvas
701 
703 {
704  if (!fCPerfProfiles){
705  TString canvasname = TString::Format("Performance Profiles %s", GetName());
706  fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
707  }
708 
710 
711  // Divide the canvas as many as the number of profiles in the list
712  Int_t nprofiles = fListPerfPlots->GetSize();
713  if (nprofiles <= 2){
714  fCPerfProfiles->Divide(nprofiles);
715  } else {
716  Int_t nside = (Int_t)TMath::Sqrt((Float_t)nprofiles);
717  nside = (nside*nside < nprofiles) ? nside + 1 : nside;
718  fCPerfProfiles->Divide(nside,nside);
719  }
720 
721  Int_t npad=1;
722  TIter nxt(fListPerfPlots);
723  TProfile* profile=0;
724  while ((profile=(TProfile*)(nxt()))){
725  fCPerfProfiles->cd(npad++);
726  profile->Draw();
727  gPad->Update();
728  }
729  return;
730 }
731 
732 ////////////////////////////////////////////////////////////////////////////////
733 /// Get name for this run
734 
736 {
737  TString namestem("+++undef+++");
738  if (fReadType) {
739  switch (fReadType->GetType()) {
741  namestem="Full";
742  break;
744  namestem="Opt";
745  break;
747  namestem="No";
748  break;
749  default:
750  break;
751  }
752  }
753  return namestem;
754 }
755 
756 ////////////////////////////////////////////////////////////////////////////////
757 /// Set parameters
758 
760 {
761  if (!fProof){
762  Error("SetParameters", "Proof not set; Doing nothing");
763  return 1;
764  }
767  fProof->SetParameter("PROOF_BenchmarkDebug", Int_t(fDebug));
768  // For Mac Os X only: do not OS cache the files read
769  fProof->SetParameter("PROOF_DontCacheFiles", Int_t(1));
770  return 0;
771 }
772 
773 ////////////////////////////////////////////////////////////////////////////////
774 /// Delete parameters set for this run
775 
777 {
778  if (!fProof){
779  Error("DeleteParameters", "Proof not set; Doing nothing");
780  return 1;
781  }
782  if (fProof->GetInputList()) {
783  TObject *type = fProof->GetInputList()->FindObject("PROOF_Benchmark_ReadType");
784  if (type) fProof->GetInputList()->Remove(type);
785  }
786  fProof->DeleteParameters("PROOF_BenchmarkDebug");
787  return 0;
788 }
789 
790 ////////////////////////////////////////////////////////////////////////////////
791 /// Build histograms, profiles and graphs needed for this run
792 
794 {
795  TObject *o = 0;
796  Int_t quotient = (stop - start) / step;
797  Int_t ndiv = quotient + 1;
798  Double_t ns_min = start - step/2.;
799  Double_t ns_max = quotient*step + start + step/2.;
800 
801  fProfLegend_evt = new TLegend(0.1, 0.8, 0.3, 0.9);
802  fNormLegend_evt = new TLegend(0.7, 0.8, 0.9, 0.9);
803  fProfLegend_mb = new TLegend(0.1, 0.8, 0.3, 0.9);
804  fNormLegend_mb = new TLegend(0.7, 0.8, 0.9, 0.9);
805 
806  TString axtitle("Active Workers"), namelab(GetName()), sellab(GetSelName());
807  if (nx) {
808  axtitle = "Active Workers/Node";
809  namelab.Form("x_%s", GetName());
810  }
812  sellab.Form("%s_%s", GetSelName(), GetNameStem().Data());
813 
814  TString name, title;
815 
816  // Book perfstat profile (max evts)
817  name.Form("Prof_%s_PS_MaxEvts_%s", namelab.Data(), sellab.Data());
818  title.Form("Profile %s PerfStat Event- %s", namelab.Data(), sellab.Data());
819  fProfile_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
821  fProfile_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
825  if ((o = fListPerfPlots->FindObject(name))) {
827  delete o;
828  }
831 
832  // Book perfstat profile (evts)
833  name.Form("Prof_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
834  title.Form("Profile %s PerfStat Event - %s", namelab.Data(), sellab.Data());
835  fProfile_perfstat_event = new TProfile(name, title, ndiv, ns_min, ns_max);
837  fProfile_perfstat_event->GetYaxis()->SetTitle("Events/sec");
840  if ((o = fListPerfPlots->FindObject(name))) {
842  delete o;
843  }
845 
846  // Book perfstat histogram (evts)
847  name.Form("Hist_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
848  title.Form("Histogram %s PerfStat Event - %s", namelab.Data(), sellab.Data());
849  fHist_perfstat_event = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
851  fHist_perfstat_event->GetYaxis()->SetTitle("Events/sec");
854  if ((o = fListPerfPlots->FindObject(name))) {
856  delete o;
857  }
859 
860  // Book normalized perfstat profile (max evts)
861  name.Form("Norm_%s_PF_MaxEvts_%s", namelab.Data(), sellab.Data());
862  title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
863  fNorm_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
865  fNorm_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
869  if ((o = fListPerfPlots->FindObject(name))) {
871  delete o;
872  }
875 
876  // Book queryresult profile (evts)
877  name.Form("Prof_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
878  title.Form("Profile %s QueryResult Event - %s", namelab.Data(), sellab.Data());
879  fProfile_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
881  fProfile_queryresult_event->GetYaxis()->SetTitle("Events/sec");
884  if ((o = fListPerfPlots->FindObject(name))) {
886  delete o;
887  }
890 
891  // Book normalized queryresult profile (evts)
892  name.Form("Norm_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
893  title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
894  fNorm_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
896  fNorm_queryresult_event->GetYaxis()->SetTitle("Events/sec");
899  if ((o = fListPerfPlots->FindObject(name))) {
901  delete o;
902  }
905 
906  // Book perfstat profile (mbs)
907  name.Form("Prof_%s_PS_IO_%s", namelab.Data(), sellab.Data());
908  title.Form("Profile %s PerfStat I/O %s", namelab.Data(), sellab.Data());
909  fProfile_perfstat_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
911  fProfile_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
914  if ((o = fListPerfPlots->FindObject(name))) {
916  delete o;
917  }
919 
920  // Book perfstat histogram (mbs)
921  name.Form("Hist_%s_PS_IO_%s", namelab.Data(), sellab.Data());
922  title.Form("Histogram %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
923  fHist_perfstat_IO = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
925  fHist_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
926  fHist_perfstat_IO->GetXaxis()->SetTitle(axtitle);
928  if ((o = fListPerfPlots->FindObject(name))) {
930  delete o;
931  }
933 
934  // Book perfstat profile (max mbs)
935  name.Form("Prof_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
936  title.Form("Profile %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
937  fProfile_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
943  if ((o = fListPerfPlots->FindObject(name))) {
945  delete o;
946  }
949 
950  // Book normalized perfstat profile (max mbs)
951  name.Form("Norm_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
952  title.Form("Profile %s Normalized PerfStat I/O - %s", namelab.Data(), sellab.Data());
953  fNorm_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
955  fNorm_perfstat_IOmax->GetYaxis()->SetTitle("MB/sec");
959  if ((o = fListPerfPlots->FindObject(name))) {
961  delete o;
962  }
965 
966  // Book queryresult profile (mbs)
967  name.Form("Prof_%s_QR_IO_%s", namelab.Data(), sellab.Data());
968  title.Form("Profile %s QueryResult I/O - %s", namelab.Data(), sellab.Data());
969  fProfile_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
974  if ((o = fListPerfPlots->FindObject(name))) {
976  delete o;
977  }
980 
981  // Book normalized queryresult profile (mbs)
982  name.Form("Norm_%s_QR_IO_%s", namelab.Data(), sellab.Data());
983  title.Form("Profile %s Normalized QueryResult I/O - %s", namelab.Data(), sellab.Data());
984  fNorm_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
986  fNorm_queryresult_IO->GetYaxis()->SetTitle("MB/sec");
989  if ((o = fListPerfPlots->FindObject(name))) {
991  delete o;
992  }
995 
996  // Book CPU efficiency profile
997  name.Form("Prof_%s_CPU_eff_%s", namelab.Data(), sellab.Data());
998  title.Form("Profile %s CPU efficiency - %s", namelab.Data(), sellab.Data());
999  fProfile_cpu_eff = new TProfile(name, title, ndiv, ns_min, ns_max);
1001  fProfile_cpu_eff->GetYaxis()->SetTitle("Efficiency");
1002  fProfile_cpu_eff->GetXaxis()->SetTitle(axtitle);
1004  if ((o = fListPerfPlots->FindObject(name))) {
1005  fListPerfPlots->Remove(o);
1006  delete o;
1007  }
1009 }
const int nx
Definition: kalman.C:16
const char * GetDefaultTreeName() const
Returns the tree set with SetDefaultTreeName if set Returns the name of the first tree in the meta da...
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
Definition: TSystem.cxx:928
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:52
double par[1]
Definition: unuranDistr.cxx:38
Int_t SetParameters()
Set parameters.
TVirtualPerfStats::EEventType fType
Definition: TPerfStats.h:54
THist< 2, double > TH2D
Definition: THist.h:320
long long Long64_t
Definition: RtypesCore.h:69
virtual void SetMaximum(Double_t maximum=-1111)
Definition: TH1.h:394
This class displays a legend box (TPaveText) containing several legend entries.
Definition: TLegend.h:35
virtual Bool_t ExistsDataSet(const char *dataset)
Returns kTRUE if 'dataset' exists, kFALSE otherwise.
Definition: TProof.cxx:11435
TString GetNameStem() const
Get name for this run.
Int_t EnablePackage(const char *package, Bool_t notOnClient=kFALSE, TList *workers=0)
Enable specified package.
Definition: TProof.cxx:8632
virtual Bool_t RegisterDataSet(const char *name, TFileCollection *dataset, const char *optStr="")
Register the 'dataSet' on the cluster under the current user, group and the given 'dataSetName'...
Definition: TProof.cxx:11274
float Float_t
Definition: RtypesCore.h:53
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
Definition: TH1.cxx:8266
const char Option_t
Definition: RtypesCore.h:62
virtual void Print(Option_t *option="") const
Print status of PROOF cluster.
Definition: TProof.cxx:4793
This class represents a WWW compatible URL.
Definition: TUrl.h:41
R__EXTERN TStyle * gStyle
Definition: TStyle.h:423
#define gDirectory
Definition: TDirectory.h:218
Bool_t IsProof(TProof *p)
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual void Draw(Option_t *option="")
Draw this legend with its current attributes.
Definition: TLegend.cxx:373
void SetParameter(const char *par, const char *value)
Set input list parameter.
Definition: TProof.cxx:10389
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition: TObject.cxx:892
void FillPerfStatProfiles(TTree *t, Int_t nactive)
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
Definition: TCanvas.cxx:659
virtual TFileCollection * GetDataSet(const char *dataset, const char *optStr="")
Get a list of TFileInfo objects describing the files of the specified dataset.
Definition: TProof.cxx:11504
TList * GetOutputList()
Get list with all object created during processing (see Process()).
Definition: TProof.cxx:10375
Int_t GetMinWrksPerNode() const
Definition: TProofNodes.h:53
virtual void SetMinimum(Double_t minimum=-1111)
Definition: TH1.h:395
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Definition: TTree.cxx:5163
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory and return a pointer to the created directory.
Definition: TDirectory.cxx:955
bool Bool_t
Definition: RtypesCore.h:59
const char *const kPROOF_BenchParDir
const Bool_t kFALSE
Definition: Rtypes.h:92
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
Definition: TList.cxx:496
Basic time type with millisecond precision.
Definition: TTime.h:29
Profile Historam.
Definition: TProfile.h:34
virtual const char * GetPath() const
Returns the full path of the directory.
Definition: TDirectory.cxx:909
void Print(Option_t *option="") const
Print the content of this object.
void Run(Long64_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
Definition: TEnv.cxx:749
Int_t GetNActives() const
Definition: TProofNodes.h:54
TMap * GetMapOfActiveNodes() const
Definition: TProofNodes.h:56
const char * Data() const
Definition: TString.h:349
static struct mg_connection * fc(struct mg_context *ctx)
Definition: civetweb.c:839
Int_t Update(Long64_t avgsize=-1)
Update accumulated information about the elements of the collection (e.g.
#define SafeDelete(p)
Definition: RConfig.h:436
void Print(Option_t *option="") const
Description: Print node information.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Definition: TString.cxx:2334
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
Definition: TTree.cxx:7529
virtual const char * GetSelName()
Int_t DeleteParameters()
Delete parameters set for this run.
void ShowDataSet(const char *dataset="", const char *opt="filter:SsCc")
display meta-info for given dataset usi
Definition: TProof.cxx:11544
const char * GetMaster() const
Definition: TProof.h:936
virtual void SetMarkerColor(Color_t mcolor=1)
Definition: TAttMarker.h:51
TString fEvtNode
Definition: TPerfStats.h:52
void Clear(Option_t *option="")
Remove all primitives from the canvas.
Definition: TCanvas.cxx:678
std::vector< std::vector< double > > Data
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Definition: TMap.cxx:234
Double_t GetEvtRateAvgMax() const
TQueryResult * GetQueryResult(const char *ref=0)
Return pointer to the full TQueryResult instance owned by the player and referenced by 'ref'...
Definition: TProof.cxx:2143
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
Definition: TNamed.cxx:63
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:918
Int_t ReleaseCache(const char *dset)
Release memory cache for dataset 'dset' Return 0 on success, -1 on error.
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad.
Definition: TH1.cxx:2925
A container class for query results.
Definition: TQueryResult.h:44
Long64_t GetEntries() const
Definition: TQueryResult.h:130
const char * GetName() const
Returns name of object.
Definition: TPad.h:255
A doubly linked list.
Definition: TList.h:47
Int_t GetNNodes() const
Definition: TProofNodes.h:51
const char *const kPROOF_BenchSelDataDef
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file).
Definition: TProof.cxx:8898
virtual TTime Now()
Get current time in milliseconds since 0:00 Jan 1 1995.
Definition: TSystem.cxx:467
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition: TTree.cxx:8811
const char *const kPROOF_BenchDataSelPar
R__EXTERN TSystem * gSystem
Definition: TSystem.h:549
virtual void Draw(Option_t *option="")
Draw this histogram with options.
Definition: TH1.cxx:2878
Float_t GetUsedCPU() const
Definition: TQueryResult.h:133
Long64_t fEventsProcessed
Definition: TPerfStats.h:60
Double_t fProcTime
Definition: TPerfStats.h:64
THashList * GetList()
Int_t Add(TFileInfo *info)
Add TFileInfo to the collection.
Long64_t GetBytes() const
Definition: TQueryResult.h:132
TFileCollection * GetDataSet(const char *dset, Int_t nact, Bool_t nx)
Get a subsample of dsname suited to run with 'nact' and option 'nx'.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
Definition: TList.cxx:674
TProofBenchDataSet * fDS
Int_t GetNCores() const
Definition: TProofNodes.h:52
TString fSelOption
TObject * Remove(TObject *obj)
Remove object from the list.
Definition: THashList.cxx:284
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2321
Bool_t TestBit(UInt_t f) const
Definition: TObject.h:173
EReadType GetType() const
Int_t Fill(const Double_t *v)
Definition: TProfile.h:56
TLine * l
Definition: textangle.C:4
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
virtual void SetMarkerStyle(Style_t mstyle=1)
Definition: TAttMarker.h:53
TAxis * GetYaxis()
Definition: TH1.h:320
virtual Long64_t Process(TDSet *dset, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Process a data set (TDSet) using the specified selector (.C) file or Tselector object Entry- or event...
Definition: TProof.cxx:5293
Bool_t IsNull() const
Definition: TString.h:387
void AddInput(TObject *obj)
Add objects that might be needed during the processing of the selector (see Process()).
Definition: TProof.cxx:10301
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Definition: TString.cxx:2240
#define Printf
Definition: TGeoToOCC.h:18
virtual Double_t GetBinError(Int_t bin) const
Return bin error of a Profile histogram.
Definition: TProfile.cxx:860
TDatime GetStartTime() const
Definition: TQueryResult.h:125
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
ClassImp(TProofBenchRunDataRead) TProofBenchRunDataRead
const char * GetTitle() const
Returns title of object.
Definition: TPad.h:256
virtual Double_t GetBinContent(Int_t bin) const
Return bin content of a Profile histogram.
Definition: TProfile.cxx:795
void SetHost(const char *host)
Definition: TUrl.h:93
The Canvas class.
Definition: TCanvas.h:48
TList * GetInputList()
Get input list.
Definition: TProof.cxx:10320
R__EXTERN TProof * gProof
Definition: TProof.h:1110
void DrawPerfProfiles()
Get canvas.
virtual Int_t GetSize() const
Definition: TCollection.h:95
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
Definition: TTree.cxx:8095
void SetDefaultTreeName(const char *treeName)
void DeleteParameters(const char *wildcard)
Delete the input list parameters specified by a wildcard (e.g.
Definition: TProof.cxx:10500
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:415
const char * GetName() const
Returns name of object.
double Double_t
Definition: RtypesCore.h:55
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
Definition: TLegend.cxx:280
Int_t ActivateWorkers(Int_t nwrks)
Description: Activate 'nwrks' workers; calls TProof::SetParallel and rebuild the internal lists Input...
Describe directory structure in memory.
Definition: TDirectory.h:41
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:44
int type
Definition: TGX11.cxx:120
R__EXTERN TEnv * gEnv
Definition: TEnv.h:174
Definition: TProof.h:339
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition: TClass.cxx:2881
virtual void Clear(Option_t *option="")
Remove all objects from the list.
Definition: TList.cxx:348
#define name(a, b)
Definition: linkTestLib0.cpp:5
Mother of all ROOT objects.
Definition: TObject.h:58
void Print(Option_t *option="") const
Prints the contents of the TFileCollection.
const char Int_t const char TProof * proof
Definition: TXSlave.cxx:46
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
Definition: TList.cxx:556
Long64_t fBytesRead
Definition: TPerfStats.h:61
void BuildHistos(Int_t start, Int_t stop, Int_t step, Bool_t nx)
Build histograms, profiles and graphs needed for this run.
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
Definition: TDirectory.cxx:433
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division.
Definition: TPad.cxx:1077
virtual void Add(TObject *obj)
Definition: TList.h:81
Class that contains a list of TFileInfo's and accumulated meta data information about its entries...
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:567
virtual Bool_t IsWritable() const
Definition: TDirectory.h:168
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
Definition: TDirectory.cxx:336
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
Definition: TStyle.cxx:1252
#define gPad
Definition: TVirtualPad.h:288
bool debug
virtual Long64_t GetEntries() const
Definition: TTree.h:382
A TTree object has a header with a name and a title.
Definition: TTree.h:94
Class describing a generic file including meta information.
Definition: TFileInfo.h:50
Double_t Sqrt(Double_t x)
Definition: TMath.h:464
virtual Int_t RemoveDataSet(const char *dataset, const char *optStr="")
Remove the specified dataset from the PROOF cluster.
Definition: TProof.cxx:11558
const Bool_t kTRUE
Definition: Rtypes.h:91
Float_t GetProcTime() const
Definition: TQueryResult.h:143
Int_t Fill(Double_t)
Invalid Fill method.
Definition: TH2.cxx:285
virtual void SetTitle(const char *title="")
Change (i.e. set) the title of the TNamed.
Definition: TNamed.cxx:152
TMap * GetFilesPerServer(const char *exclude=0, Bool_t curronly=kFALSE)
Return a map of TFileCollections with the files on each data server, excluding servers in the comma-s...
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write all objects in this collection.
Double_t GetMBRateAvgMax() const
TAxis * GetXaxis()
Definition: TH1.h:319
TDatime GetEndTime() const
Definition: TQueryResult.h:126
virtual void SetName(const char *name)
Change the name of this tree.
Definition: TTree.cxx:8300
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition: TDatime.h:39
virtual ~TProofBenchRunDataRead()
Destructor.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition: TObject.cxx:904