ROOT logo
// @(#)root/sessionviewer:$Id: TProofProgressDialog.cxx 29171 2009-06-23 14:13:06Z brun $
// Author: Fons Rademakers   21/03/03

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TProofProgressDialog                                                 //
//                                                                      //
// This class provides a query progress bar.                            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TProofProgressDialog.h"
#include "TProofProgressLog.h"
#include "TProofProgressMemoryPlot.h"
#include "TEnv.h"
#include "TError.h"
#include "TGLabel.h"
#include "TGButton.h"
#include "TGTextBuffer.h"
#include "TGTextEntry.h"
#include "TGProgressBar.h"
#include "TProof.h"
#include "TSlave.h"
#include "TSystem.h"
#include "TTimer.h"
#include "TGraph.h"
#include "TNtuple.h"
#include "TCanvas.h"
#include "TColor.h"
#include "TLine.h"
#include "TAxis.h"
#include "TPaveText.h"
#include "TMath.h"

#ifdef PPD_SRV_NEWER
#undef PPD_SRV_NEWER
#endif
#define PPD_SRV_NEWER(v) (fProof && fProof->GetRemoteProtocol() > v)
#ifdef PPD_SRV_NEWER_REV
#undef PPD_SRV_NEWER_REV
#endif
#define PPD_SRV_NEWER_REV(r) (fSVNRev > r)

Bool_t TProofProgressDialog::fgKeepDefault = kTRUE;
Bool_t TProofProgressDialog::fgLogQueryDefault = kFALSE;
TString TProofProgressDialog::fgTextQueryDefault = "last";

static const Int_t gSVNMemPlot = 25090;

ClassImp(TProofProgressDialog)

//______________________________________________________________________________
TProofProgressDialog::TProofProgressDialog(TProof *proof,
                                           const char *selector,
                                           Int_t files,
                                           Long64_t first,
                                           Long64_t entries)
{
   // Create PROOF processing progress dialog.

   fProof         = proof;
   fFiles         = files;
   fFirst         = first;
   fEntries       = entries;
   fPrevProcessed = 0;
   fPrevTotal     = 0;
   fLogWindow     = 0;
   fMemWindow     = 0;
   fStatus        = kRunning;
   fKeep          = fgKeepDefault;
   fLogQuery      = fgLogQueryDefault;
   fRatePoints    = 0;
   fRateGraph     = 0;
   fProcTime      = 0.;
   fAvgRate       = 0.;
   fAvgMBRate     = 0.;
   fSVNRev        = -1;

   // Make sure we are attached to a good instance
   if (!proof || !(proof->IsValid())) {
      Error("TProofProgressDialog", "proof instance is invalid (%p, %s): protocol error?",
                                    proof, (proof && !(proof->IsValid())) ? "invalid" : "undef");
      return;
   }

   // Have to save this information here, in case gProof is dead when
   // the logs are requested
   fSessionUrl = (proof && proof->GetManager()) ? proof->GetManager()->GetUrl() : "";

   // SVN version run by the master
   TSlave *mst = (TSlave *) proof->GetListOfActiveSlaves()->First();
   if (mst) {
      TString vrs = mst->GetROOTVersion();
      Ssiz_t ib = vrs.Index("|"), from = ib + 2;
      if (ib != kNPOS) {
         TString svnr;
         // Strip of also the 'r' in front of the number
         vrs.Tokenize(svnr, from, "|");
         if (svnr.IsDigit()) {
            if (gDebug)
               Info("TProofProgressDialog", "svn revision run by the master: %s", svnr.Data());
            fSVNRev = svnr.Atoi();
         } else {
            Info("TProofProgressDialog", "could not find svn revision run by the master");
         }
      } else if (gDebug) {
         Info("TProofProgressDialog", "non-standard master version string:'%s'", vrs.Data());
      }
   } else {
      Warning("TProofProgressDialog", "list of active workers is empty!");
   }

   if (PPD_SRV_NEWER(11))
      fRatePoints = new TNtuple("RateNtuple","Rate progress info","tm:evr:mbr");

   fDialog = new TGTransientFrame(0, 0, 10, 10);
   fDialog->Connect("CloseWindow()", "TProofProgressDialog", this, "DoClose()");
   fDialog->DontCallClose();

   // Title label
   TString buf;
   buf = TString::Format("Executing on PROOF cluster \"%s\" with %d parallel workers:",
           fProof ? fProof->GetMaster() : "<dummy>",
           fProof ? fProof->GetParallel() : 0);
   fTitleLab = new TGLabel(fDialog, buf),
   fDialog->AddFrame(fTitleLab,
                     new TGLayoutHints(kLHintsNormal, 10, 10, 20, 0));
   buf = TString::Format("Selector: %s", selector);
   fSelector = new TGLabel(fDialog, buf);
   fDialog->AddFrame(fSelector,
                     new TGLayoutHints(kLHintsNormal, 10, 10, 5, 0));
   buf = TString::Format("%d files, number of events %lld, starting event %lld",
           fFiles, fEntries, fFirst);
   fFilesEvents = new TGLabel(fDialog, buf);
   fDialog->AddFrame(fFilesEvents, new TGLayoutHints(kLHintsNormal, 10, 10, 5, 0));

   // Progress bar
   fBar = new TGHProgressBar(fDialog, TGProgressBar::kFancy, 450);
   fBar->SetBarColor("green");
   fBar->UsePercent();
   fBar->ShowPos(kTRUE);
   fDialog->AddFrame(fBar, new TGLayoutHints(kLHintsTop | kLHintsLeft |
                     kLHintsExpandX, 10, 10, 20, 20));

   // Status labels
   if (PPD_SRV_NEWER(11)) {
      TGHorizontalFrame *hf0 = new TGHorizontalFrame(fDialog, 0, 0);
      TGCompositeFrame *cf0 = new TGCompositeFrame(hf0, 110, 0, kFixedWidth);
      cf0->AddFrame(new TGLabel(cf0, "Initialization time:"));
      hf0->AddFrame(cf0);
      fInit = new TGLabel(hf0, "- secs");
      hf0->AddFrame(fInit, new TGLayoutHints(kLHintsNormal, 10, 10, 0, 0));
      fDialog->AddFrame(hf0, new TGLayoutHints(kLHintsNormal, 10, 10, 5, 0));
   }

   TGHorizontalFrame *hf1 = new TGHorizontalFrame(fDialog, 0, 0);
   TGCompositeFrame *cf1 = new TGCompositeFrame(hf1, 110, 0, kFixedWidth);
   fProcessed = new TGLabel(cf1, "Estimated time left:");
   cf1->AddFrame(fProcessed);
   hf1->AddFrame(cf1);
   fTotal= new TGLabel(hf1, "- sec (- events of - processed)");
   hf1->AddFrame(fTotal, new TGLayoutHints(kLHintsNormal, 10, 10, 0, 0));
   fDialog->AddFrame(hf1, new TGLayoutHints(kLHintsNormal, 10, 10, 5, 0));

   TGHorizontalFrame *hf2 = new TGHorizontalFrame(fDialog, 0, 0);
   TGCompositeFrame *cf2 = new TGCompositeFrame(hf2, 110, 0, kFixedWidth);
   cf2->AddFrame(new TGLabel(cf2, "Processing rate:"));
   hf2->AddFrame(cf2);
   fRate = new TGLabel(hf2, "- events/sec");
   hf2->AddFrame(fRate, new TGLayoutHints(kLHintsNormal, 10, 10, 0, 0));
   fDialog->AddFrame(hf2, new TGLayoutHints(kLHintsNormal, 10, 10, 5, 0));

   // Keep toggle button
   fKeepToggle = new TGCheckButton(fDialog,
                    new TGHotString("Close dialog when processing is complete"));
   if (!fKeep) fKeepToggle->SetState(kButtonDown);
   fKeepToggle->Connect("Toggled(Bool_t)",
                        "TProofProgressDialog", this, "DoKeep(Bool_t)");
   fDialog->AddFrame(fKeepToggle, new TGLayoutHints(kLHintsNormal, 10, 10, 20, 0));

   // Stop, cancel and close buttons
   TGHorizontalFrame *hf3 = new TGHorizontalFrame(fDialog, 60, 20, kFixedWidth);

   UInt_t  nb1 = 0, width1 = 0, height1 = 0;

   fAsyn = new TGTextButton(hf3, "&Run in background");
   if (fProof->GetRemoteProtocol() >= 22 && fProof->IsSync()) {
      fAsyn->SetToolTipText("Continue running in the background (asynchronous mode), releasing the ROOT prompt");
   } else {
      fAsyn->SetToolTipText("Switch to asynchronous mode disabled: functionality not supported by the server");
      fAsyn->SetState(kButtonDisabled);
   }
   fAsyn->Connect("Clicked()", "TProofProgressDialog", this, "DoAsyn()");
   hf3->AddFrame(fAsyn, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
   height1 = TMath::Max(height1, fAsyn->GetDefaultHeight());
   width1  = TMath::Max(width1, fAsyn->GetDefaultWidth()); ++nb1;

   fStop = new TGTextButton(hf3, "&Stop");
   fStop->SetToolTipText("Stop processing, Terminate() will be executed");
   fStop->Connect("Clicked()", "TProofProgressDialog", this, "DoStop()");
   hf3->AddFrame(fStop, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
   height1 = TMath::Max(height1, fStop->GetDefaultHeight());
   width1  = TMath::Max(width1, fStop->GetDefaultWidth()); ++nb1;

   fAbort = new TGTextButton(hf3, "&Cancel");
   fAbort->SetToolTipText("Cancel processing, Terminate() will NOT be executed");
   fAbort->Connect("Clicked()", "TProofProgressDialog", this, "DoAbort()");
   hf3->AddFrame(fAbort, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
   height1 = TMath::Max(height1, fAbort->GetDefaultHeight());
   width1  = TMath::Max(width1, fAbort->GetDefaultWidth()); ++nb1;

   fClose = new TGTextButton(hf3, "&Close");
   fClose->SetToolTipText("Close this dialog");
   fClose->SetState(kButtonDisabled);
   fClose->Connect("Clicked()", "TProofProgressDialog", this, "DoClose()");
   hf3->AddFrame(fClose, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
   height1 = TMath::Max(height1, fClose->GetDefaultHeight());
   width1  = TMath::Max(width1, fClose->GetDefaultWidth()); ++nb1;

   fDialog->AddFrame(hf3, new TGLayoutHints(kLHintsBottom | kLHintsCenterX | kLHintsExpandX, 5, 5, 10, 5));

   UInt_t  nb2 = 0, width2 = 0, height2 = 0;
   TGHorizontalFrame *hf5 = new TGHorizontalFrame(fDialog, 60, 20, kFixedWidth);

   fLog = new TGTextButton(hf5, "&Show Logs");
   fLog->SetToolTipText("Show query log messages");
   fLog->Connect("Clicked()", "TProofProgressDialog", this, "DoLog()");
   hf5->AddFrame(fLog, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
   height2 = TMath::Max(height2, fLog->GetDefaultHeight());
   width2  = TMath::Max(width2, fLog->GetDefaultWidth()); ++nb2;

   if (PPD_SRV_NEWER(11)) {
      fRatePlot = new TGTextButton(hf5, "&Rate plot");
      fRatePlot->SetToolTipText("Show processing rate vs time");
      fRatePlot->SetState(kButtonDisabled);
      fRatePlot->Connect("Clicked()", "TProofProgressDialog", this, "DoPlotRateGraph()");
      hf5->AddFrame(fRatePlot, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 7, 7, 0, 0));
      height2 = TMath::Max(height2, fRatePlot->GetDefaultHeight());
      width2  = TMath::Max(width2, fRatePlot->GetDefaultWidth()); ++nb2;
   }

   fMemPlot = new TGTextButton(hf5, "Memory Plot");
   fMemPlot->Connect("Clicked()", "TProofProgressDialog", this, "DoMemoryPlot()");
   fMemPlot->SetToolTipText("Show memory consumption vs entry / merging phase");
   hf5->AddFrame(fMemPlot, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 10, 10, 0, 0));
   height2 = TMath::Max(height2, fMemPlot->GetDefaultHeight());
   width2  = TMath::Max(width2, fMemPlot->GetDefaultWidth()); ++nb2;

   fDialog->AddFrame(hf5, new TGLayoutHints(kLHintsBottom | kLHintsCenterX | kLHintsExpandX, 5, 5, 10, 5));

   // Only enable if master supports it
   if (!PPD_SRV_NEWER(18)) {
      fMemPlot->SetState(kButtonDisabled);
      TString tip = TString::Format("Not supported by the master: required protocol 19 > %d",
                                    (fProof ? fProof->GetRemoteProtocol() : -1));
      fMemPlot->SetToolTipText(tip.Data());
   } else {
      fMemPlot->SetToolTipText("Show memory consumption");
   }

   // Keep buttons centered and with the same width
   UInt_t width, height, nb;
   width = TMath::Max(width1, width2);
   height = TMath::Max(height1, height2);
   nb = TMath::Max(nb1, nb2);

   // Connect slot to proof progress signal
   if (fProof) {
      fProof->Connect("Progress(Long64_t,Long64_t)", "TProofProgressDialog",
                      this, "Progress(Long64_t,Long64_t)");
      fProof->Connect("Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
                      "TProofProgressDialog", this,
                      "Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)");
      fProof->Connect("StopProcess(Bool_t)", "TProofProgressDialog", this,
                      "IndicateStop(Bool_t)");
      fProof->Connect("ResetProgressDialog(const char*,Int_t,Long64_t,Long64_t)",
                      "TProofProgressDialog", this,
                      "ResetProgressDialog(const char*,Int_t,Long64_t,Long64_t)");
      fProof->Connect("CloseProgressDialog()", "TProofProgressDialog", this, "DoClose()");
      fProof->Connect("DisableGoAsyn()", "TProofProgressDialog", this, "DisableAsyn()");
   }

   // Set dialog title
   if (fProof) {
      if (strlen(fProof->GetUser()) > 0) 
         fDialog->SetWindowName(Form("PROOF Query Progress: %s@%s",
                                     fProof->GetUser(), fProof->GetMaster()));
      else
         fDialog->SetWindowName(Form("PROOF Query Progress: %s", fProof->GetMaster()));
   } else
      fDialog->SetWindowName("PROOF Query Progress: <dummy>");

   // Map all widgets and calculate size of dialog
   fDialog->MapSubwindows();

   width  = fDialog->GetDefaultWidth();
   height = fDialog->GetDefaultHeight();

   // To allow for lengthening of lines when the number are displayed
   width += 100;
   fDialog->Resize(width, height);

   const TGWindow *main = gClient->GetRoot();
   // Position relative to the parent window (which is the root window)
   Window_t wdum;
   int      ax, ay;
   Int_t    mw = ((TGFrame *) main)->GetWidth();
   Int_t    mh = ((TGFrame *) main)->GetHeight();

   gVirtualX->TranslateCoordinates(main->GetId(), main->GetId(),
                          (mw - width), (mh - height) >> 1, ax, ay, wdum);

   // Make the message box non-resizable
   fDialog->SetWMSize(width, height);
   fDialog->SetWMSizeHints(width, height, width, height, 0, 0);

   fDialog->SetMWMHints(kMWMDecorAll | kMWMDecorResizeH  | kMWMDecorMaximize |
                                       kMWMDecorMinimize | kMWMDecorMenu,
                        kMWMFuncAll  | kMWMFuncResize    | kMWMFuncMaximize |
                                       kMWMFuncMinimize,
                        kMWMInputModeless);

   fDialog->Move(ax-10, ay - mh/4);
   fDialog->SetWMPosition(ax-10, ay - mh/4);
   // Popup dialog and wait till user replies
   fDialog->MapWindow();

   fStartTime = gSystem->Now();
}

//______________________________________________________________________________
void TProofProgressDialog::ResetProgressDialog(const char *selec,
                                               Int_t files, Long64_t first,
                                               Long64_t entries)
{
   // Reset dialog box preparing for new query
   TString buf;

   // Update title
   buf = TString::Format("Executing on PROOF cluster \"%s\" with %d parallel workers:",
           fProof ? fProof->GetMaster() : "<dummy>",
           fProof ? fProof->GetParallel() : 0);
   fTitleLab->SetText(buf);

   // Reset members
   fFiles         = files;
   fFirst         = first;
   fEntries       = entries;
   fPrevProcessed = 0;
   fPrevTotal     = 0;
   fStatus        = kRunning;

   // Update selector name
   buf = TString::Format("Selector: %s", selec);
   fSelector->SetText(buf);

   // Reset 'processed' text
   fProcessed->SetText("Estimated time left:");

   // Update numbers
   buf = TString::Format("%d files, number of events %lld, starting event %lld",
           fFiles, fEntries, fFirst);
   fFilesEvents->SetText(buf);

   // Reset progress bar
   fBar->SetBarColor("green");
   fBar->Reset();

   // Reset buttons
   fStop->SetState(kButtonUp);
   fAbort->SetState(kButtonUp);
   fClose->SetState(kButtonDisabled);
   if (fProof->IsSync() && fProof->GetRemoteProtocol() >= 22) {
      fAsyn->SetState(kButtonUp);
   } else {
      fAsyn->SetState(kButtonDisabled);
   }

   // Reconnect the slots
   if (fProof) {
      fProof->Connect("Progress(Long64_t,Long64_t)", "TProofProgressDialog",
                      this, "Progress(Long64_t,Long64_t)");
      fProof->Connect("Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
                      "TProofProgressDialog", this,
                      "Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)");
      fProof->Connect("StopProcess(Bool_t)", "TProofProgressDialog", this,
                      "IndicateStop(Bool_t)");
      fProof->Connect("DisableGoAsyn()", "TProofProgressDialog", this, "DisableAsyn()");
   }

   // Reset start time
   fStartTime = gSystem->Now();

   // Clear the list of performances points
   if (PPD_SRV_NEWER(11))
      fRatePoints->Reset();
   SafeDelete(fRateGraph);
   fAvgRate = 0.;
   fAvgMBRate = 0.;
}

//______________________________________________________________________________
void TProofProgressDialog::Progress(Long64_t total, Long64_t processed)
{
   // Update progress bar and status labels.
   // Use "processed == total" or "processed < 0" to indicate end of processing.

   Long_t tt;
   UInt_t hh=0, mm=0, ss=0;
   TString buf;
   char stm[256];
   static const char *cproc[] = { "running", "done",
                                  "STOPPED", "ABORTED", "***EVENTS SKIPPED***"};

   // Update title
   buf = TString::Format("Executing on PROOF cluster \"%s\" with %d parallel workers:",
           fProof ? fProof->GetMaster() : "<dummy>",
           fProof ? fProof->GetParallel() : 0);
   fTitleLab->SetText(buf);

   if (total < 0)
      total = fPrevTotal;
   else
      fPrevTotal = total;

   // Nothing to update
   if (fPrevProcessed == processed)
      return;

   // Number of processed events
   Long64_t evproc = (processed >= 0) ? processed : fPrevProcessed;

   if (fEntries != total) {
      fEntries = total;
      buf = TString::Format("%d files, number of events %lld, starting event %lld",
              fFiles, fEntries, fFirst);
      fFilesEvents->SetText(buf);
   }

   // Update position
   Float_t pos = Float_t(Double_t(evproc * 100)/Double_t(total));
   fBar->SetPosition(pos);

   // get current time
   fEndTime = gSystem->Now();
   TTime tdiff = fEndTime - fStartTime;
   Float_t eta = 0;
   if (evproc > 0)
      eta = ((Float_t)((Long_t)tdiff)*total/Float_t(evproc) - Long_t(tdiff))/1000.;

   if (processed >= 0 && processed >= total) {
      tt = (Long_t(tdiff)/1000);
      if (tt > 0) {
         hh = (UInt_t)(tt / 3600);
         mm = (UInt_t)((tt % 3600) / 60);
         ss = (UInt_t)((tt % 3600) % 60);
      }
      if (hh)
         sprintf(stm, "%d h %d min %d sec", hh, mm, ss);
      else if (mm)
         sprintf(stm, "%d min %d sec", mm, ss);
      else
         sprintf(stm, "%d sec", ss);
      fProcessed->SetText("Processed:");
      buf = TString::Format("%lld events in %s", total, stm);
      fTotal->SetText(buf);

      if (fProof) {
         fProof->Disconnect("Progress(Long64_t,Long64_t)", this,
                            "Progress(Long64_t,Long64_t)");
         fProof->Disconnect("StopProcess(Bool_t)", this,
                            "IndicateStop(Bool_t)");
         fProof->Disconnect("DisableGoAsyn()", this, "DisableAsyn()");
      }

      // Set button state
      fAsyn->SetState(kButtonDisabled);
      fStop->SetState(kButtonDisabled);
      fAbort->SetState(kButtonDisabled);
      fClose->SetState(kButtonUp);
      if (!fKeep) DoClose();

      // Set the status to done
      fStatus = kDone;

   } else {
      // A negative value for process indicates that we are finished,
      // no matter whether the processing was complete
      Bool_t incomplete = (processed < 0 &&
                          (fPrevProcessed < total || fPrevProcessed == 0))
                        ? kTRUE : kFALSE;
      if (incomplete) {
         fStatus = kIncomplete;
         // We use a different color to highlight incompletion
         fBar->SetBarColor("magenta");
      }
      tt = (Long_t)eta;
      if (tt > 0) {
         hh = (UInt_t)(tt / 3600);
         mm = (UInt_t)((tt % 3600) / 60);
         ss = (UInt_t)((tt % 3600) % 60);
      }
      if (hh)
         sprintf(stm, "%d h %d min %d sec", hh, mm, ss);
      else if (mm)
         sprintf(stm, "%d min %d sec", mm, ss);
      else
         sprintf(stm, "%d sec", ss);
      if (fStatus > kDone) {
         buf = TString::Format("%s (%lld events of %lld processed) - %s",
                      stm, evproc, total, cproc[fStatus]);
      } else {
         buf = TString::Format("%s (%lld events of %lld processed)",
                      stm, evproc, total);
      }
      fTotal->SetText(buf);
      buf = TString::Format("%.1f events/sec", Float_t(evproc)/Long_t(tdiff)*1000.);
      fRate->SetText(buf);

      if (processed < 0) {
         // And we disable the buttons
         fAsyn->SetState(kButtonDisabled);
         fStop->SetState(kButtonDisabled);
         fAbort->SetState(kButtonDisabled);
         fClose->SetState(kButtonUp);

         // Set the status to done
         fStatus = kDone;
      }
   }
   fPrevProcessed = evproc;

   fDialog->Layout();
}

//______________________________________________________________________________
void TProofProgressDialog::Progress(Long64_t total, Long64_t processed,
                                    Long64_t bytesread,
                                    Float_t initTime, Float_t procTime,
                                    Float_t evtrti, Float_t mbrti)
{
   // Update progress bar and status labels.
   // Use "processed == total" or "processed < 0" to indicate end of processing.

   Long_t tt;
   UInt_t hh=0, mm=0, ss=0;
   TString buf;
   char stm[256];
   static const char *cproc[] = { "running", "done",
                                  "STOPPED", "ABORTED", "***EVENTS SKIPPED***"};

   // Update title
   buf = TString::Format("Executing on PROOF cluster \"%s\" with %d parallel workers:",
           fProof ? fProof->GetMaster() : "<dummy>",
           fProof ? fProof->GetParallel() : 0);
   fTitleLab->SetText(buf);

   if (initTime >= 0.) {
      // Set init time
      buf = TString::Format("%.1f secs", initTime);
      fInit->SetText(buf);
      fDialog->Layout();
   }

   Bool_t over = kFALSE;
   if (total < 0) {
      total = fPrevTotal;
      over = kTRUE;
   } else {
      fPrevTotal = total;
   }

   // Nothing to update
   if (fPrevProcessed == processed)
      return;

   // Number of processed events
   Long64_t evproc = (processed >= 0) ? processed : fPrevProcessed;
   Float_t mbsproc = bytesread / TMath::Power(2.,20.);

   if (fEntries != total) {
      fEntries = total;
      buf = TString::Format("%d files, number of events %lld, starting event %lld",
              fFiles, fEntries, fFirst);
      fFilesEvents->SetText(buf);
   }

   // Update position
   Float_t pos = Float_t(Double_t(evproc * 100)/Double_t(total));
   fBar->SetPosition(pos);

   Float_t eta = 0;
   if (evproc > 0 && procTime > 0.)
      eta = (Float_t) (total - evproc) / (Double_t)evproc * procTime;

   // Update average rates
   if (procTime > 0.) {
      fProcTime = procTime;
      fAvgRate = Float_t(evproc) / procTime;
      fAvgMBRate = mbsproc / procTime;
   }

   if (over || (processed >= 0 && processed >= total)) {

      // A negative value for process indicates that we are finished,
      // no matter whether the processing was complete
      Bool_t incomplete = (processed < 0 &&
                          (fPrevProcessed < total || fPrevProcessed == 0))
                        ? kTRUE : kFALSE;
      TString st = "";
      if (incomplete) {
         fStatus = kIncomplete;
         // We use a different color to highlight incompletion
         fBar->SetBarColor("magenta");
         st = TString::Format(" %s", cproc[fStatus]);
      }

      tt = (Long_t)fProcTime;
      if (tt > 0) {
         hh = (UInt_t)(tt / 3600);
         mm = (UInt_t)((tt % 3600) / 60);
         ss = (UInt_t)((tt % 3600) % 60);
      }
      if (hh)
         sprintf(stm, "%d h %d min %d sec", hh, mm, ss);
      else if (mm)
         sprintf(stm, "%d min %d sec", mm, ss);
      else
         sprintf(stm, "%d sec", ss);
      fProcessed->SetText("Processed:");
      buf = TString::Format("%lld events (%.2f MBs) in %s %s",
              std::max(fPrevProcessed, processed), fAvgMBRate*fProcTime, stm, st.Data());
      fTotal->SetText(buf);
      buf = TString::Format("%.1f evts/sec (%.1f MBs/sec)", fAvgRate, fAvgMBRate);
      fRate->SetText(buf);
      // Fill rate graph
      Bool_t useAvg = gEnv->GetValue("Proof.RatePlotUseAvg", 0);
      if (useAvg) {
         if (fAvgRate > 0.) {
            fRatePoints->Fill(procTime, fAvgRate, fAvgMBRate);
            fRatePlot->SetState(kButtonUp);
         }
      } else {
         if (evtrti > 0.) {
            fRatePoints->Fill(procTime, evtrti, mbrti);
            fRatePlot->SetState(kButtonUp);
         }
      }

      if (fProof) {
         fProof->Disconnect("Progress(Long64_t,Long64_t)", this,
                            "Progress(Long64_t,Long64_t)");
         fProof->Disconnect("Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
                            this,
                            "Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)");
         fProof->Disconnect("StopProcess(Bool_t)", this, "IndicateStop(Bool_t)");
         fProof->Disconnect("DisableGoAsyn()", this, "DisableAsyn()");
      }

      // Set button state
      fAsyn->SetState(kButtonDisabled);
      fStop->SetState(kButtonDisabled);
      fAbort->SetState(kButtonDisabled);
      fClose->SetState(kButtonUp);
      if (!fKeep) DoClose();

      // Set the status to done
      fStatus = kDone;

   } else {
      // A negative value for process indicates that we are finished,
      // no matter whether the processing was complete
      Bool_t incomplete = (processed < 0 &&
                          (fPrevProcessed < total || fPrevProcessed == 0))
                        ? kTRUE : kFALSE;
      if (incomplete) {
         fStatus = kIncomplete;
         // We use a different color to highlight incompletion
         fBar->SetBarColor("magenta");
      }
      tt = (Long_t)eta;
      if (tt > 0) {
         hh = (UInt_t)(tt / 3600);
         mm = (UInt_t)((tt % 3600) / 60);
         ss = (UInt_t)((tt % 3600) % 60);
      }
      if (hh)
         sprintf(stm, "%d h %d min %d sec", hh, mm, ss);
      else if (mm)
         sprintf(stm, "%d min %d sec", mm, ss);
      else
         sprintf(stm, "%d sec", ss);
      if (fStatus > kDone) {
         buf = TString::Format("%s (processed %lld events out of %lld - %.2f MBs of data) - %s",
                      stm, evproc, total, mbsproc, cproc[fStatus]);
      } else {
         buf = TString::Format("%s (processed %lld events out of %lld - %.2f MBs of data)",
                      stm, evproc, total, mbsproc);
      }
      fTotal->SetText(buf);

      // Post
      if (evtrti > 0.) {
         buf = TString::Format("%.1f evts/sec (%.1f MBs/sec) - avg: %.1f evts/sec (%.1f MBs/sec)",
                      evtrti, mbrti, fAvgRate, fAvgMBRate);
         fRatePoints->Fill(procTime, evtrti, mbrti);
         fRatePlot->SetState(kButtonUp);
      } else {
         buf = TString::Format("avg: %.1f evts/sec (%.1f MBs/sec)", fAvgRate, fAvgMBRate);
      }
      fRate->SetText(buf);

      if (processed < 0) {
         // And we disable the buttons
         fAsyn->SetState(kButtonDisabled);
         fStop->SetState(kButtonDisabled);
         fAbort->SetState(kButtonDisabled);
         fClose->SetState(kButtonUp);

         // Set the status to done
         fStatus = kDone;
      }
   }
   fPrevProcessed = evproc;

   fDialog->Layout();
}

//______________________________________________________________________________
TProofProgressDialog::~TProofProgressDialog()
{
   // Cleanup dialog.

   if (fProof) {
      fProof->Disconnect("Progress(Long64_t,Long64_t)", this,
                         "Progress(Long64_t,Long64_t)");
      fProof->Disconnect("Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
                         this,
                         "Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)");
      fProof->Disconnect("StopProcess(Bool_t)", this, "IndicateStop(Bool_t)");
      fProof->Disconnect("DisableGoAsyn()", this, "DisableAsyn()");
      fProof->Disconnect("ResetProgressDialog(const char*,Int_t,Long64_t,Long64_t)",
                         this,
                         "ResetProgressDialog(const char*,Int_t,Long64_t,Long64_t)");
      fProof->Disconnect("CloseProgressDialog()", this, "CloseProgressDialog()");
      fProof->ResetProgressDialogStatus();
      // We are called after a TProofDetach: we delete the instance
      if (!fProof->IsValid())
         SafeDelete(fProof);
   }
   if (fLogWindow)
      delete fLogWindow;
   if (fMemWindow)
      delete fMemWindow;
   fDialog->Cleanup();
   delete fDialog;
}

//______________________________________________________________________________
void TProofProgressDialog::CloseWindow()
{
   // Called when dialog is closed.

   delete this;
}

//______________________________________________________________________________
void TProofProgressDialog::DisableAsyn()
{
   // Disable the asyn switch when an external request for going asynchronous is issued

   fProof->Disconnect("DisableGoAsyn()", this, "DisableAsyn()");
   fAsyn->SetState(kButtonDisabled);
}

//______________________________________________________________________________
void TProofProgressDialog::IndicateStop(Bool_t aborted)
{
   // Indicate that Cancel or Stop was clicked.

   if (aborted == kTRUE)
      fBar->SetBarColor("red");
   else
      fBar->SetBarColor("yellow");

   if (fProof) {
      fProof->Disconnect("Progress(Long64_t,Long64_t)", this,
                         "Progress(Long64_t,Long64_t)");
      fProof->Disconnect("Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)",
                         this,
                         "Progress(Long64_t,Long64_t,Long64_t,Float_t,Float_t,Float_t,Float_t)");
      fProof->Disconnect("StopProcess(Bool_t)", this, "IndicateStop(Bool_t)");
      fProof->Disconnect("DisableGoAsyn()", this, "DisableAsyn()");
      // These buttons are meaningless at this point
      fAsyn->SetState(kButtonDisabled);
      fStop->SetState(kButtonDisabled);
      fAbort->SetState(kButtonDisabled);
   }

   fClose->SetState(kButtonUp);
   if (!fKeep)
      DoClose();
}

//______________________________________________________________________________
void TProofProgressDialog::LogMessage(const char *msg, Bool_t all)
{
   // Load/append a log msg in the log frame, if open

   if (fLogWindow) {
      if (all) {
         // load buffer
         fLogWindow->LoadBuffer(msg);
      } else {
         // append
         fLogWindow->AddBuffer(msg);
      }
   }
}

//______________________________________________________________________________
void TProofProgressDialog::DoClose()
{
   // Close dialog.

   fClose->SetState(kButtonDisabled);
   TTimer::SingleShot(50, "TProofProgressDialog", this, "CloseWindow()");
}

//______________________________________________________________________________
void TProofProgressDialog::DoLog()
{
   // Ask proof session for logs

   if (fProof) {
      if (!fLogWindow) {
         fLogWindow = new TProofProgressLog(this);
         if (!fLogWindow->TestBit(TObject::kInvalidObject))
            fLogWindow->DoLog();
      } else {
         // Clear window
         if (!fLogWindow->TestBit(TObject::kInvalidObject)) {
            fLogWindow->Clear();
            fLogWindow->DoLog();
         }
      }
   }
}

//______________________________________________________________________________
void TProofProgressDialog::DoKeep(Bool_t)
{
   // Handle keep toggle button.

   fKeep = !fKeep;

   // Last choice will be the default for the future
   fgKeepDefault = fKeep;
}

//______________________________________________________________________________
void TProofProgressDialog::DoSetLogQuery(Bool_t)
{
   // Handle log-current-query-only toggle button.

   fLogQuery = !fLogQuery;
   fEntry->SetEnabled(fLogQuery);
   if (fLogQuery)
      fEntry->SetToolTipText("Enter the query number ('last' for the last query)",50);
   else
      fEntry->SetToolTipText(0);

   // Last choice will be the default for the future
   fgLogQueryDefault = fLogQuery;
}

//______________________________________________________________________________
void TProofProgressDialog::DoStop()
{
   // Handle Stop button.

   // Do not wait for ever, but al least 10 seconds
   Long_t timeout = gEnv->GetValue("Proof.ShutdownTimeout", 60) / 2;
   timeout = (timeout > 10) ? timeout : 10;
   fProof->StopProcess(kFALSE, timeout);
   fStatus = kStopped;

   // Set buttons states
   fAsyn->SetState(kButtonDisabled);
   fStop->SetState(kButtonDisabled);
   fAbort->SetState(kButtonDisabled);
   fClose->SetState(kButtonUp);
}

//______________________________________________________________________________
void TProofProgressDialog::DoAbort()
{
   // Handle Cancel button.

   fProof->StopProcess(kTRUE);
   fStatus = kAborted;

   // Set buttons states
   fAsyn->SetState(kButtonDisabled);
   fStop->SetState(kButtonDisabled);
   fAbort->SetState(kButtonDisabled);
   fClose->SetState(kButtonUp);
}

//______________________________________________________________________________
void TProofProgressDialog::DoAsyn()
{
   // Handle Asyn button.

   fProof->GoAsynchronous();

   // Set buttons states
   fAsyn->SetState(kButtonDisabled);
}

//______________________________________________________________________________
void TProofProgressDialog::DoPlotRateGraph()
{
   // Handle Plot Rate Graph.

   // We must have some point to plot
   if (!fRatePoints || fRatePoints->GetEntries() <= 0) {
      Info("DoPlotRateGraph","list is empty!");
      return;
   }

   // Create a canvas
   TCanvas *c1 = new TCanvas("c1","Rate vs Time",200,10,700,500);
   c1->SetFillColor(0);
   c1->SetGrid();
   c1->SetBorderMode(0);
   c1->SetFrameBorderMode(0);

   // Fill TGraph
   Int_t np = (Int_t)fRatePoints->GetEntries();
   Double_t ymx = -1.;
   SafeDelete(fRateGraph);
   fRateGraph = new TGraph(np);
   Float_t *nar = fRatePoints->GetArgs();
   Int_t ii = 0;
   for ( ; ii < np; ++ii) {
      fRatePoints->GetEntry(ii);
      fRateGraph->SetPoint(ii, (Double_t) nar[0], (Double_t) nar[1]);
      ymx = (nar[1] > ymx) ? nar[1] : ymx;
   }

   fRateGraph->SetMinimum(0.);
   fRateGraph->SetMaximum(ymx*1.1);
   fRateGraph->SetLineColor(2);
   fRateGraph->SetLineWidth(4);
   fRateGraph->SetMarkerColor(4);
   fRateGraph->SetMarkerStyle(21);
   fRateGraph->SetTitle("Processing rate (evts/sec)");
   fRateGraph->GetXaxis()->SetTitle("elapsed time (sec)");
   fRateGraph->Draw("ALP");

   // Line with average
   TLine *line = new TLine(fRateGraph->GetXaxis()->GetXmin(),fAvgRate,
                           fRateGraph->GetXaxis()->GetXmax(),fAvgRate);
   Int_t ci;   // for color index setting
   ci = TColor::GetColor("#008200");
   line->SetLineColor(ci);
   line->SetLineWidth(2);
   line->Draw("P");

   // Label
   Double_t xax0 = fRateGraph->GetXaxis()->GetXmin();
   Double_t xax1 = fRateGraph->GetXaxis()->GetXmax();
   Double_t yax0 = 0.;
   Double_t yax1 = ymx*1.1;
   Double_t x0 = xax0 + 0.05 * (xax1 - xax0);
   Double_t x1 = xax0 + 0.60 * (xax1 - xax0);
   Double_t y0 = yax0 + 0.10 * (yax1 - yax0);
   Double_t y1 = yax0 + 0.20 * (yax1 - yax0);
   TPaveText *pt = new TPaveText(x0, y0, x1, y1, "br");
   pt->SetFillColor(0);
   pt->AddText(Form("Global average: %.2f evts/sec", fAvgRate));
   pt->Draw();

   c1->Modified();
}

//______________________________________________________________________________
void TProofProgressDialog::DoMemoryPlot()
{
   // Do a memory plot

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