43 class TProofPerfAnalysis::TWrkInfo : 
public TNamed {
    45    TWrkInfo(
const char *ord, 
const char *
name) :
    46       TNamed(ord, name), 
fPackets(0), fRemotePackets(0), fEventsProcessed(0),
    47       fBytesRead(0), fLatency(0), fProcTime(0), fCpuTime(0), fStart(0), fStop(-1),
    48       fRateT(0), fRateRemoteT(0), fMBRateT(0), fMBRateRemoteT(0), fLatencyT(0) { }
    70    Double_t  AvgRate() { 
if (fProcTime > 0) 
return (fEventsProcessed/fProcTime); 
return -1.; }
    71    Double_t  AvgIO() { 
if (fProcTime > 0) 
return (fBytesRead/fProcTime); 
return -1.; }
    74       Printf(
" +++ TWrkInfo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
    76       Printf(
" +++ Activity interval:  %f -> %f", fStart, fStop);
    77       Printf(
" +++ Amounts processed:  %d packets (%d remote), %lld evts, %lld bytes",
    78                                        fPackets, fRemotePackets, fEventsProcessed, fBytesRead);
    80          Printf(
" +++ Processing time:    %f s (CPU: %f s)", fProcTime, fCpuTime);
    81          Printf(
" +++ Averages:           %f evts/s, %f MB/s", (
Double_t)fEventsProcessed / fProcTime, (
Double_t)fBytesRead /1024./1024./fProcTime);
    83       Printf(
" +++ Total latency:      %f", fLatency);
    84       Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
    89                                              if (fStop < wi->fStop) {
    91                                              } 
else if (fStop == wi->fStop) {
    99 class TProofPerfAnalysis::TPackInfo : 
public TNamed {
   101    TPackInfo(
const char *ord, 
const char *host) :  
TNamed(ord, host), fStart(0), fStop(-1), fSize(0), 
fMBRate(0.) { }
   103             :  
TNamed(ord, host), fStart(start), fStop(stop), fSize(sz), 
fMBRate(mbr) { }
   109       if (!strcmp(opt, 
"S")) {
   110          Printf(
"       \t%10lld evts, \t%12.2f MB/s, \t%12.3f -> %12.3f s", fSize, fMBRate, fStart, fStop);
   112          Printf(
"   %s:\t%s  \t%10lld evts, \t%12.2f MB/s, \t%12.3f -> %12.3f s", 
GetTitle(), 
GetName(), fSize, fMBRate, fStart, fStop);
   117 class TProofPerfAnalysis::TWrkInfoFile : 
public TNamed {
   119    TWrkInfoFile(
const char *ord, 
const char *
name) :  
TNamed(ord, name) { }
   120    ~TWrkInfoFile() {fPackets.SetOwner(
kFALSE); fPackets.
Clear(
"nodelete");}
   123       if (!strcmp(opt, 
"R")) {
   128       TIter nxp(&fPackets);
   130       while ((o = nxp())) { o->
Print(
"S"); }
   134 class TProofPerfAnalysis::TWrkEntry : 
public TObject {
   141    void Print(
Option_t * = 
"")
 const { 
Printf(
"%.4f \t%.3f evt/s \t%.3f MB/s \t%.3f s ", fXx, fEvtRate, fMBRate, fProcTime); }
   146 class TProofPerfAnalysis::TFileInfo : 
public TNamed {
   149       TNamed(name, srv), fPackets(0), fRPackets(0), fStart(0), fStop(-1),
   150       fSizeAvg(0), fSizeMax(-1.), fSizeMin(-1.),
   152       fRateP(0), fRatePRemote(0), fMBRateP(0), fMBRatePRemote(0) { }
   156                          fPackList.SetOwner(
kTRUE); fPackList.Clear();
   157                          fWrkList.SetOwner(
kTRUE); fWrkList.Clear();
   158                          fRWrkList.SetOwner(
kTRUE); fRWrkList.Clear();}
   185       Printf(
" +++ TFileInfo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
   188       Printf(
" +++ Processing interval:  %f -> %f", fStart, fStop);
   189       Printf(
" +++ Packets:         %d (%d remote)", fPackets, fRPackets);
   191       if (!strcmp(opt, 
"P")) fPackList.
Print();
   192       if (!strcmp(opt, 
"WP")) fWrkList.
Print(
"R");
   194          Printf(
" +++ MB rates:       %f MB/s (avg), %f MB/s (min), %f MB/s (max)",
   195                 fMBRateAvg / fPackets, fMBRateMin, fMBRateMax);
   196          Printf(
" +++ Sizes:          %lld  (avg), %lld (min), %lld (max)",
   197                 fSizeAvg / fPackets, fSizeMin, fSizeMax);
   199       Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
   204                                              if (fStop < wi->fStop) {
   206                                              } 
else if (fStop == wi->fStop) {
   218                                const char *title, 
const char *treename)
   230    if (!title) 
SetTitle(
"PROOF Performance Analysis");
   236       Error(
"TProofPerfAnalysis", 
"problems opening file '%s'",
   237                               perffile ? perffile : 
"<undef>");
   256          Error(
"TProofPerfAnalysis", 
"directory '%s' not found or not loadable", 
fDirName.
Data());
   306    if (!title) 
SetTitle(
"PROOF Performance Analysis");
   348    if (t && strlen(t) > 0) {
   375    while ((k = (
TKey *) nxk())) {
   376       if (!strcmp(k->GetClassName(), 
"TDirectoryFile")) {
   380       } 
else if (!strcmp(k->GetClassName(), 
"TTree")) {
   382          if (tn.Index(re) != 
kNPOS) {
   383             if ((
fTree = dynamic_cast<TTree *>(dir->
Get(tn)))) {
   385                if (
fgDebug) 
Printf(
" +++ Found and loaded TTree '%s'", tn.Data());
   403       Error(
"FileDist",
"not a valid instance - do nothing");
   411    Info(
"FileDist", 
"%d workers were active during this query", wrkList->
GetSize());
   412    Info(
"FileDist", 
"%d servers were active during this query", srvList->
GetSize());
   418    while ((sn = (
TNamed *)nxs())) {
   420       while ((wn = (
TNamed *) nxw())) {
   431    while ((wn = (
TNamed *) nxw())) {
   434       while ((nwn = (
TNamed *) nnxw())) {
   440       if (!nwn) nwl->
Add(wn);
   443       while ((sn = (
TNamed *)nxs())) {
   444          if (!strcmp(sn->
GetTitle(), wn->GetName())) {
   447             while ((nsn = (
TNamed *) nnxs())) {
   453             if (!nsn) nsl->
Add(sn);
   457       if (sn) srvList->
Remove(sn);
   461    while ((sn = (
TNamed *)nxs())) {
   479       Printf(
"\n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
   480       Printf(
" + Only one data server found: full analysis meaningful  + ");
   481       Printf(
" + only when there are more file servers                 + ");
   482       Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
   486       TH1F *hxpak = 
new TH1F(
"hxpak", 
"MBytes / Worker",
   495       while ((wn = (
TNamed *)nxsw())) {
   512       TH1F *hfdis = 
new TH1F(
"hfdis", 
"Packet dist",
   517       TH1F *hbdis = 
new TH1F(
"hbdis", 
"MBytes dist",
   523       TH2F *hxpak = 
new TH2F(
"hxpak", 
"MBytes / {Worker,Server}",
   535       while ((wn = (
TNamed *)nxsw())) {
   540       while ((sn = (
TNamed *)nxss())) {
   551       while ((sn = (
TNamed *)nxss())) {
   554          if (strcmp(sn->
GetTitle(), 
"remote") && lab.Index(
".") != 
kNPOS) lab.Remove(lab.Index(
"."));
   587    if (!wl || !sl) 
return;
   595    for (
Long64_t k=0; k<entries; k++) {
   610       if (ifn != 
kNPOS) srv.Remove(ifn);
   613          sn = 
new TNamed(srv.Data(), 
"remote");
   629    Int_t o1d = 0, o2d = 0;
   630    if ((o1d = o1.CountChar(
'.')) > (o2d = o2.CountChar(
'.'))) {
   632    } 
else if (o1d < o2d) {
   635       o1.ReplaceAll(
".", 
" ");
   636       o2.ReplaceAll(
".", 
" ");
   637       Bool_t b1 = o1.Tokenize(p1, o1d, 
" ");
   638       Bool_t b2 = o2.Tokenize(p2, o2d, 
" ");
   645             b1 = o1.Tokenize(p1, o1d, 
" ");
   646             b2 = o2.Tokenize(p2, o2d, 
" ");
   651       } 
else if (b2 && !b1) {
   664    if (!hf || !hb || !hx) 
return;
   670       if (!(fout = fopen(fnout.
Data(), 
"w"))) {
   671          Warning(
"FillFileDist", 
"asked to save details in '%s' but file could"   672                                  " not be open (errno: %d)", fnout.
Data(), (int)errno);
   674          Info(
"FillFileDist", 
"saving details to '%s'", fnout.
Data());
   682    for (
Long64_t k=0; k<entries; k++) {
   688       TUrl uf(pe.fFileName);
   691       if (ifn != 
kNPOS) srv.Remove(ifn);
   698          fprintf(fout, 
"%s,%s -> %f,%f (%f)\n",
   699                        srv.Data(), wrk.Data(), xhx, yhx, pe.fBytesRead / 1024.);
   702       hb->
Fill(xhf, pe.fBytesRead / 1024. / 1024.);
   703       hx->
Fill(xhx, yhx, pe.fBytesRead / 1024. / 1024.);
   705    if (fout) fclose(fout);
   721       if (!(fout = fopen(fnout.
Data(), 
"w"))) {
   722          Warning(
"FillFileDistOneSrv", 
"asked to save details in '%s' but file could"   723                                        " not be open (errno: %d)", fnout.
Data(), (int)errno);
   725          Info(
"FillFileDistOneSrv", 
"saving details to '%s'", fnout.
Data());
   733    for (
Long64_t k=0; k<entries; k++) {
   739       TUrl uf(pe.fFileName);
   742       if (ifn != 
kNPOS) srv.Remove(ifn);
   747          fprintf(fout, 
"%s,%s -> %f (%f)\n",
   748                        srv.Data(), wrk.Data(), xhx, pe.fBytesRead / 1024.);
   750       hx->
Fill(xhx, pe.fBytesRead / 1024. / 1024.);
   752    if (fout) fclose(fout);
   763       Error(
"WorkerActivity",
"not a valid instance - do nothing");
   770       Error(
"WorkerActivity", 
"workers information not available - do nothing");
   776    if ((o = 
gDirectory->FindObject(
"act10"))) 
delete o;
   779    if (t1 > t0) t1 = t0;
   780    TH1F *hact10 = 
new TH1F(
"act10", 
"Worker activity start (seconds)", 50, 0., t1);
   782    if ((o = 
gDirectory->FindObject(
"act11"))) 
delete o;
   783    TH1F *hact11 = 
new TH1F(
"act11", 
"Worker activity stop (seconds)", 50, t0, 
fMaxTime);
   785    if ((o = 
gDirectory->FindObject(
"act2"))) 
delete o;
   786    TH1F *hact2 = 
new TH1F(
"act2", 
"End of activity (seconds)", 50, t0, 
fMaxTime);
   796    while ((wi = (TWrkInfo *)nxw())) {
   798       for (j = 1; j < hact10->
GetNbinsX()+1 ; j++) {
   802       for (j = 1; j < hact11->
GetNbinsX()+1 ; j++) {
   806       hact2->
Fill(wi->fStop);
   843    while ((wi = (TWrkInfo *)nxw())) {
   846       if (showlast < 0 || k < showlast) wi->
Print();
   857    if (!wn || (wn && strlen(wn) <= 0)) {
   858       Error(
"PrintWrkInfo", 
"worker name or host must be defined!");
   870       while ((wi = (TWrkInfo *)nxw())) {
   871          TString n(wi->GetName()), t(wi->GetTitle());
   873          while (ww.Tokenize(w, from, 
"[, ]")) {
   875             if (
n.Index(re) != 
kNPOS || t.Index(re) != 
kNPOS) wi->Print();
   894    while ((fi = (TFileInfo *)nxf())) {
   897       if (showlast < 0 || k < showlast) fi->Print(opt);
   910    if (!fn || (fn && strlen(fn) <= 0)) {
   911       Error(
"PrintFileInfo", 
"file path must be defined!");
   926       while ((fi = (TFileInfo *)nxf())) {
   927          TString n(fi->GetName()), s(fi->GetTitle());
   929          while (fw.Tokenize(f, from, 
"[, ]")) {
   931             if (
n.Index(re) != 
kNPOS || s.Index(re) != 
kNPOS) fi->Print(opt);
   965    Int_t nraw = entries * 2, jj = 0, kk = 0;
   967    for (
Long64_t k=0; k<entries; k++) {
   980    memset(jidx, 0, nbins * 
sizeof(
Int_t));
   984    for (kk = 0; kk < 
nbins; kk++) {
   986       if (jj == 0 || xtmp > xbins[jj - 1] + .5) {
   996    Int_t nbin = nbins - 1;
   998    if ((o = 
gDirectory->FindObject(
"gEvtRate"))) 
delete o;
   999    fEvtRate = 
new TH1F(
"gEvtRate", 
"Total event processing rate (evt/s)", nbin, xbins);
  1004    if ((o = 
gDirectory->FindObject(
"gEvtRateAvg"))) 
delete o;
  1005    fEvtRateRun = 
new TH1F(
"gEvtRateAvg", 
"Event processing rate running average (evt/s)", nbin, xbins);
  1010    if ((o = 
gDirectory->FindObject(
"gMBRate"))) 
delete o;
  1011    fMBRate = 
new TH1F(
"gMBRate", 
"Total processing rate (MB/s)", nbin, xbins);
  1012    fMBRate->SetMinimum(0.);
  1013    fMBRate->SetStats(
kFALSE);
  1014    fMBRate->SetFillColor(
kCyan-8);
  1015    fMBRate->GetXaxis()->SetTitle(
"Query Processing Time (s)");
  1016    if ((o = 
gDirectory->FindObject(
"gMBRateAvg"))) 
delete o;
  1017    fMBRateRun = 
new TH1F(
"gMBRateAvg", 
"Processing rate running average (MB/s)", nbin, xbins);
  1030    for (
Long64_t k=0; k<entries; k++) {
  1038             wi->fRateT = 
new TGraph(100);
  1039             wi->fRateRemoteT = 
new TGraph(100);
  1040             wi->fMBRateT = 
new TGraph(100);
  1041             wi->fMBRateRemoteT = 
new TGraph(100);
  1042             wi->fLatencyT = 
new TGraph(100);
  1047          if (wi->fPackets <= 0) {
  1063          wi->fRateT->SetPoint(wi->fPackets, tt, ert);
  1064          if (brt > 0.) wi->fMBRateT->SetPoint(wi->fPackets, tt, brt);
  1065          wi->fLatencyT->SetPoint(wi->fPackets, tt, pe.
fLatency);
  1067             wi->fRateRemoteT->SetPoint(wi->fRemotePackets, tt, ert);
  1068             wi->fMBRateRemoteT->SetPoint(wi->fRemotePackets, tt, brt);
  1069             wi->fRemotePackets++;
  1073          if (brt > fMBRateMax) fMBRateMax = brt;
  1077          for (kk = 1; kk <= 
nbins; kk++) {
  1079             if (mi > stop) 
break;
  1085             if (start > mi) olap = mx - start;
  1105                Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs evts:%lld bytes:%lld (rates:%f evt/s, %f MB/s)",
  1110                Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs rate:-- evt/s (-- bytes/s)",
  1130       while ((gwl = (
TList *) nxw())) {
  1134          while ((we = (TWrkEntry *) nxp())) {
  1135             if (we->fProcTime > 0) {
  1136                er += we->fEvtRate * we->fProcTime;
  1137                br += we->fMBRate * we->fProcTime;
  1138                pt += we->fProcTime;
  1146             if (br > 0.) fMBRate->Fill(xx, br);
  1153    for (kk = 1; kk < 
nbins; kk++) {
  1157       Double_t wbr = fMBRate->GetBinContent(kk);
  1184    while ((wi = (TWrkInfo *) nxw())) {
  1188       wi->fRateT->Set(wi->fPackets);
  1189       wi->fRateRemoteT->Set(wi->fRemotePackets);
  1190       wi->fLatencyT->Set(wi->fPackets);
  1191       wi->fMBRateT->Set(wi->fPackets);
  1192       wi->fMBRateRemoteT->Set(wi->fRemotePackets);
  1201    while ((wi = (TWrkInfo *) nxsw())) {
  1202       if (wi->fStop > 0.) ksw++;
  1203       if (ksw == rsw) 
break;
  1213    fPackets->SetDirectory(0);
  1216    while ((wi = (TWrkInfo *)nxwi())) {
  1219       fPackets->GetXaxis()->SetBinLabel(j+1, wi->GetName());
  1220       fPackets->Fill(j++, wi->fPackets);
  1223    fPackets->SetMinimum(0.);
  1225    fPackets->SetFillColor(38);
  1228    fPackets->GetYaxis()->SetTitle(
"Packets");
  1229    fPackets->GetXaxis()->SetTitle(
"Worker");
  1250    if (!strcmp(opt, 
"S")) {
  1252       Printf(
"%d %f %f %f %f %f %f %f",
  1258       Printf(
" +++ Total query time: %f secs (init: %f secs, merge: %f secs)",
  1260       Printf(
" +++ Avg processing rates: %.4f evts/s, %.4f MB/s", 
fEvtRateAvg, fMBRateAvg);
  1286    for (
Long64_t k=0; k<entries; k++) {
  1293          if (ifn != 
kNPOS) srv.Remove(ifn);
  1297             fi = 
new TFileInfo(uf.
GetFile(), srv.Data());
  1299             fi->fSizeP = 
new TGraph(10);
  1300             fi->fRateP = 
new TGraph(10);
  1301             fi->fRatePRemote = 
new TGraph(10);
  1302             fi->fMBRateP = 
new TGraph(10);
  1303             fi->fMBRatePRemote = 
new TGraph(10);
  1308          if (fi->fPackets <= 0) {
  1325          fi->fRateP->SetPoint(fi->fPackets, tt, ert);
  1326          if (brt > 0.) fi->fMBRateP->SetPoint(fi->fPackets, tt, brt);
  1329             fi->fRatePRemote->SetPoint(fi->fRPackets, tt, ert);
  1330             fi->fMBRatePRemote->SetPoint(fi->fRPackets, tt, brt);
  1335             fi->fMBRateAvg += brt;
  1336             if (brt > fi->fMBRateMax || fi->fMBRateMax < 0.) fi->fMBRateMax = brt;
  1337             if (brt < fi->fMBRateMin || fi->fMBRateMin < 0.) fi->fMBRateMin = brt;
  1342          fi->fPackList.Add(pi);
  1343          TWrkInfoFile *wif = 0;
  1344          if (!(wif = (TWrkInfoFile *) fi->fWrkList.FindObject(pe.
fSlave))) {
  1346             fi->fWrkList.Add(wif);
  1348          wif->fPackets.Add(pi);
  1353                Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs evts:%lld bytes:%lld (rates:%f evt/s, %f MB/s)",
  1358                Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs rate:-- evt/s (-- bytes/s)",
  1374    while ((fi = (TFileInfo *) nxf())) {
  1377       fi->fRateP->Set(fi->fPackets);
  1378       fi->fRatePRemote->Set(fi->fRPackets);
  1379       fi->fMBRateP->Set(fi->fPackets);
  1380       fi->fMBRatePRemote->Set(fi->fRPackets);
  1413          const char *
n = (name && strlen(name) > 0) ? name : 0;
  1435       Printf(
"Drawn objects saving disabled");
  1453       Error(
"SetSaveResult", 
"could not open file '%s' in mode '%s'",
  1454                              file ? file : 
"(undefined)", mode);
  1465    Printf(
"Drawn objects will be saved in file '%s'", file);
  1482       Error(
"EventDist", 
"distributions not initialized - do nothing");
  1494    fPackets->SetStats(
kFALSE);
  1508    TH1F *hrt1 = 0, *hrt2 = 0;
  1515       if ((o = 
gDirectory->FindObject(
"rt1"))) 
delete o;
  1516       hrt1 = 
new TH1F(
"rt1", 
"Evt processing rate (evt/s)", 100, 0., 
fMaxTime);
  1521       if ((o = 
gDirectory->FindObject(
"rt2"))) 
delete o;
  1522       hrt2 = 
new TH1F(
"rt2", 
"MB processing rate (MB/s)", 100, 0., 
fMaxTime);
  1523       hrt2->SetMinimum(0.);
  1524       hrt2->SetMaximum(1.05*fMBRateMax);
  1526       hrt2->GetXaxis()->SetTitle(
"Query Processing Time (s)");
  1549    if (!ww.
IsNull() && ww != 
"*" && ww != 
"all") {
  1552       while ((ww.
Tokenize(w, from, 
","))) {
  1559    Int_t ci = 40, cir = 30, ic = 0;
  1562    while ((wi = (TWrkInfo *) nxw())) {
  1563       if (wl && !wl->
FindObject(wi->GetName())) 
continue;
  1564       if (wi->fRateT && wi->fRateT->GetN() > 0) {
  1565          wi->fRateT->
SetNameTitle(wi->GetName(), wi->GetTitle());
  1570       if (wi->fRateRemoteT && wi->fRateRemoteT->GetN() > 0) {
  1571          wi->fRateRemoteT->SetNameTitle(wi->GetName(), wi->GetTitle());
  1576       if (wi->fMBRateT && wi->fMBRateT->GetN() > 0) {
  1577          wi->fMBRateT->SetNameTitle(wi->GetName(), wi->GetTitle());
  1582       if (wi->fMBRateRemoteT && wi->fMBRateRemoteT->GetN() > 0) {
  1583          wi->fMBRateRemoteT->SetNameTitle(wi->GetName(), wi->GetTitle());
  1586          DoDraw(wi->fMBRateRemoteT, 
"L", 
TString::Format(
"MBRateRemoteT-%s", wi->fMBRateRemoteT->GetName()));
  1609    if ((o = 
gDirectory->FindObject(
"lt1"))) 
delete o;
  1610    TH1F *hlt1 = 
new TH1F(
"lt1", 
"Packet retrieval latency", 100, 0., 
fMaxTime);
  1626    if (!ww.
IsNull() && ww != 
"*" && ww != 
"all") {
  1629       while ((ww.
Tokenize(w, from, 
","))) {
  1636    Int_t ci = 40, ic = 0;
  1639    while ((wi = (TWrkInfo *) nxw())) {
  1640       if (wl && !wl->
FindObject(wi->GetName())) 
continue;
  1641       if (wi->fLatencyT) {
  1642          wi->fLatencyT->
SetNameTitle(wi->GetName(), wi->GetTitle());
  1643          wi->fLatencyT->SetLineColor(ci);
  1664    if (!fn || strlen(fn) <= 0) {
  1665       Error(
"FileRatePlot", 
"file name is mandatory!");
  1671       Error(
"FileRatePlot", 
"TFileInfo object for '%s' not found!", fn);
  1677    if (out && strlen(out) > 0) {
  1678       if (!(fo = fopen(out, 
"w"))) {
  1679          Warning(
"FileRatePlot", 
"problems creating '%s': logging to stdout", out);
  1682          Printf(
" Details logged to %s", out);
  1691    TIter nxp(&(fi->fPackList));
  1692    while ((pi = (TPackInfo *) nxp())) {
  1694       xraw[jj++] = pi->fStart;
  1695       xraw[jj++] = pi->fStop;
  1698    memset(jidx, 0, nbins * 
sizeof(
Int_t));
  1702    for (kk = 0; kk < 
nbins; kk++) {
  1703       xbins[kk] = xraw[jidx[kk]];
  1709    Int_t nbin = nbins - 1;
  1711    if ((o = 
gDirectory->FindObject(
"rt1"))) 
delete o;
  1712    TH1F *hrt1 = 
new TH1F(
"rt1", 
"Total processing rate (MB/s)", nbins - 1, xbins);
  1716    if ((o = 
gDirectory->FindObject(
"rt2"))) 
delete o;
  1717    TH1F *hrt2 = 
new TH1F(
"rt2", 
"Number of processing workers", nbins - 1, xbins);
  1722    if ((o = 
gDirectory->FindObject(
"rt3"))) 
delete o;
  1723    TH1F *hrt3 = 
new TH1F(
"rt3", 
"Total processing events", nbins - 1, xbins);
  1727    if ((o = 
gDirectory->FindObject(
"rt4"))) 
delete o;
  1728    TH1F *hrt4 = 
new TH1F(
"rt4", 
"Weighted processing rate (MB/s)", nbins - 1, xbins);
  1737    for (ii = 1; ii <= nbin; ii++) {
  1742       fprintf(fo, 
" Bin: %d/%d [%f, %f]\n", ii, nbin, mi, mx);
  1746       while ((pi = (TPackInfo *) nxp())) {
  1749          if (pi->fStart > mi) olap = mx - pi->fStart;
  1751             hrt1->
Fill(xx, pi->fMBRate);
  1753             hrt3->
Fill(xx, pi->fSize);
  1754             hrt4->
Fill(xx, pi->fMBRate * pi->fSize);
  1755             fprintf(fo, 
"    %d: %s \t%lld \tevts \t%f \tMB/s\n", kk++, pi->GetName(), pi->fSize, pi->fMBRate);
  1759    if (fo != stdout) fclose(fo);
  1785    if ((o = 
gDirectory->FindObject(
"rt1"))) 
delete o;
  1786    TH1F *hrt1 = 
new TH1F(
"rt1", 
"Event processing rate per packet (evt/s)", 100, 0., 
fMaxTime);
  1791    if ((o = 
gDirectory->FindObject(
"rt2"))) 
delete o;
  1792    TH1F *hrt2 = 
new TH1F(
"rt2", 
"I/O processing rate per packet (MB/s)", 100, 0., 
fMaxTime);
  1813    if (!fw.
IsNull() && fw != 
"*" && fw != 
"all") {
  1816       while ((fw.
Tokenize(w, from, 
","))) {
  1823    Int_t ci = 40, cir = 30, ic = 0;
  1826    while ((fi = (TFileInfo *) nxf())) {
  1827       if (fl && !fl->
FindObject(fi->GetName())) 
continue;
  1828       if (fi->fRateP && fi->fRateP->GetN() > 0) {
  1829          fi->fRateP->SetNameTitle(fi->GetName(), fi->GetTitle());
  1834       if (fi->fRatePRemote && fi->fRatePRemote->GetN() > 0) {
  1835          fi->fRatePRemote->SetNameTitle(fi->GetName(), fi->GetTitle());
  1840       if (fi->fMBRateP && fi->fMBRateP->GetN() > 0) {
  1841          fi->fMBRateP->SetNameTitle(fi->GetName(), fi->GetTitle());
  1846       if (fi->fMBRatePRemote && fi->fMBRatePRemote->GetN() > 0) {
  1847          fi->fMBRatePRemote->SetNameTitle(fi->GetName(), fi->GetTitle());
 
void SetDebug(Int_t d=0)
Static setter for the verbosity level. 
 
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title Offset is a correction factor with respect to the "s...
 
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root. 
 
virtual const char * GetName() const
Returns name of object. 
 
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory. 
 
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1. 
 
TVirtualPerfStats::EEventType fType
 
virtual TList * GetListOfKeys() const
 
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram. 
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message. 
 
virtual ~TProofPerfAnalysis()
Destructor: detach the tree and close the file. 
 
virtual void SetMaximum(Double_t maximum=-1111)
 
virtual TVirtualPad * GetPad(Int_t subpadnumber) const
Get a pointer to subpadnumber of this pad. 
 
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle. 
 
virtual void Draw(Option_t *option="")=0
Default Draw method for all objects. 
 
Collectable string class. 
 
virtual Int_t Compare(const TObject *obj) const
Compare two TNamed objects. 
 
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
 
TString GetCanvasTitle(const char *t)
If defined, add '- <this title>="">' to the canvas title 't'. 
 
void PrintFileInfo(Int_t showlast=10, const char *opt="", const char *out=0)
Print information for all or the slowest showlast workers. 
 
void Print(Option_t *options="") const
Print information about this object. 
 
This class represents a WWW compatible URL. 
 
R__EXTERN TStyle * gStyle
 
virtual void SetName(const char *name)
Set the name of the TNamed. 
 
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content. 
 
THist< 1, float, THistStatContent, THistStatUncertainty > TH1F
 
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin. 
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
 
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad. 
 
Regular expression class. 
 
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle. 
 
virtual void SetMinimum(Double_t minimum=-1111)
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read. 
 
tomato 1-D histogram with a float per channel (see TH1 documentation)} 
 
struct staticInitHelper gbl
 
virtual const char * DirName(const char *pathname)
Return the directory name in pathname. 
 
virtual void Draw(Option_t *option="")
Default Draw method for all objects. 
 
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself. 
 
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram. 
 
TObject * FindObject(const char *name) const
Find object using its name. 
 
void LoadTree(TDirectory *dir)
Load tree fTreeName from directory 'dir'. 
 
virtual void SetNameTitle(const char *name, const char *title)
Set all the TNamed parameters (name and title). 
 
const char * GetHostFQDN() const
Return fully qualified domain name of url host. 
 
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f. 
 
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL. 
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name. 
 
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
 
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file. 
 
void FileDist(Bool_t writedet=kFALSE)
Analyse the file distribution. 
 
const char * GetFile() const
 
void FileProcPlot(const char *fn, const char *out=0)
Show event processing or MB processing rate plot vs time. 
 
virtual void Clear(Option_t *option="")
Set name and title to empty strings (""). 
 
Int_t CompareOrd(const char *ord1, const char *ord2)
Return -1 if ord1 comes before ord2, 0 i they are equal, 1 if ord1 comes after ord2. 
 
TVirtualPad * cd(Int_t subpadnumber=0)
Set Current pad. 
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
 
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
 
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly. 
 
The TNamed class is the base class for all named ROOT classes. 
 
void EventDist()
Display event and packet distribution. 
 
static double p2(double t, double a, double b, double c)
 
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin. 
 
void FileRatePlot(const char *fns=0)
Show MB processing rate plot per file vs time. 
 
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
 
void RatePlot(const char *wrks=0)
Show event processing or MB processing rate plot vs time. 
 
Book space in a file, create I/O buffers, to fill them, (un)compress them. 
 
virtual void Print(Option_t *option="") const
Print TNamed name and title. 
 
TProofPerfAnalysis(const char *perffile, const char *title="", const char *treename="PROOF_PerfStats")
Constructor: open the file and attach to the tree. 
 
virtual Bool_t Divide(TF1 *f1, Double_t c1=1)
Performs the operation: this = this/(c1*f1) if errors are defined (see TH1::Sumw2), errors are also recalculated. 
 
virtual void SetLineColor(Color_t lcolor)
Set the line color. 
 
Int_t SetSaveResult(const char *file="results.root", Option_t *mode="RECREATE")
Set save result mode and validate 'file' according to 'mode'. 
 
R__EXTERN TSystem * gSystem
 
virtual void Draw(Option_t *option="")
Draw this histogram with options. 
 
if object ctor succeeded but object should not be used 
 
virtual void SetFillColor(Color_t fcolor)
Set the fill area color. 
 
Long64_t fEventsProcessed
 
tomato 2-D histogram with a float per channel (see TH1 documentation)} 
 
virtual TObject * Remove(TObject *obj)
Remove object from the list. 
 
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor. 
 
The most important graphics class in the ROOT system. 
 
static void SetgDebug(Bool_t on=kTRUE)
Static setter for the verbosity level. 
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message. 
 
static double p1(double t, double a, double b)
 
void SetName(const char *name)
 
void WorkerActivity()
Measure the worker activity. 
 
virtual void AddBefore(const TObject *before, TObject *obj)
Insert object before object before in the list. 
 
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x. 
 
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file. 
 
TString & Remove(Ssiz_t pos)
 
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString. 
 
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram. 
 
void GetWrkFileList(TList *wl, TList *sl)
Fill file info. 
 
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection. 
 
Describe directory structure in memory. 
 
void DoDraw(TObject *o, Option_t *opt="", const char *name=0)
Draw object 'o' with options 'opt' Save it with 'name' if in saving mode (see SetSaveResult) ...
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
 
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin. 
 
virtual void Clear(Option_t *option="")
Remove all objects from the list. 
 
void FillFileDistOneSrv(TH1F *hx, Bool_t wdet=kFALSE)
Fill file info when there is only one file server. 
 
virtual Long64_t GetEntries() const
 
Mother of all ROOT objects. 
 
void FillFileDist(TH1F *hf, TH1F *hb, TH2F *hx, Bool_t wdet=kFALSE)
Fill file info. 
 
virtual const char * GetTitle() const
Returns title of object. 
 
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. 
 
virtual void Add(TObject *obj)
 
A Graph is a graphics object made of two arrays X and Y with npoints each. 
 
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
 
Int_t Atoi() const
Return integer value of string. 
 
A TTree object has a header with a name and a title. 
 
Class describing a generic file including meta information. 
 
void Add(TObject *obj)
Add object in sorted list. 
 
virtual Int_t GetNbinsX() const
 
void LatencyPlot(const char *wrks=0)
Show event processing or MB processing rate plot vs time Create the histograms. 
 
virtual void Update()
Update canvas pad buffers. 
 
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1). 
 
void FillFileInfo(Bool_t force=kFALSE)
Fill basic worker info; if 'force' rescan the TTree even already done. 
 
virtual Int_t GetSize() const
 
Int_t Fill(Double_t)
Invalid Fill method. 
 
virtual void SetTitle(const char *title="")
Set the title of the TNamed. 
 
THist< 2, float, THistStatContent, THistStatUncertainty > TH2F
 
void FillWrkInfo(Bool_t force=kFALSE)
Fill basic worker info; if 'force' rescan the TTree even already done. 
 
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off. 
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message. 
 
void Summary(Option_t *opt="", const char *out="")
Print summary of query. 
 
virtual const char * GetTitle() const
Returns title of object. 
 
virtual void Close(Option_t *option="")
Close a file. 
 
const char * Data() const
 
void PrintWrkInfo(Int_t showlast=10)
Print information for all or the slowest showlast workers.