ROOT logo
////////////////////////////////////////////////////////////////////////////////
// 
// Macro to launch Monitoring program for TPC raw data
// 
// Author: Stefan Kniege, IKF, Frankfurt
//
////////////////////////////////////////////////////////////////////////////////

#include "iostream"

#include "TGFrame.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGLabel.h"
#include "TGFileDialog.h"
#include "TGClient.h"
#include "TGApplication.h"
#include "TSystem.h"
#include "TStyle.h"
#include "TDirectory.h"
#include "TFileMerger.h"
#include "TGComboBox.h"

#include "AliTPCMonitor.h"
#include "AliTPCMonitorMappingHandler.h"
//#include "AliTPCMonitorEditor.h"
#include "AliTPCMonitorDialog.h"

using namespace std;


static    AliTPCMonitor*               fMon               = 0;
static    AliTPCMonitorMappingHandler* fMapHand           = 0;

static    TGMainFrame*                 fFrameMain         = 0;
static    TGCheckButton*               fFrameChDisFit     = 0;
static    TGCheckButton*               fFrameCh10bit      = 0;
static    TGCheckButton*               fFrameCheckVerb    = 0;
static    TGCheckButton*               fFrameCheckProcOne = 0;
static    TGCheckButton*               fFrameCheckPed     = 0;
static    TGCheckButton*               fFrameCalcBSL      = 0;           

static    TGComboBox*                  fTableField        = 0;

static    Int_t                        fVerb              = 0;
static    TGTextEntry*                 fTextEvId          = 0;

void      WriteChannel();
void      WriteHistos();  
void      SetConfig();
void      DisableFit();
//void      ProcessSector(char* fdata,char* ffil, Int_t side, Int_t sector);
void      ProcessSector(Int_t sid, Int_t sector);
//Int_t     DrawFit();
Int_t     DrawRMSMap();
void      ShowSelected();
//void      SetSize() ;
void      ResizeCanv();
void      ReadMe();
void      OpenDir();
void      SetWrite10Bit();
void      SetCheckVerb();
void      SetProcOne();
void      SetPedestalRun(Int_t val);
void      InitDialog(Int_t id);
//void      Resize(Int_t update,Int_t doit , Int_t side);
void      MonitorGui(AliTPCMonitor* fMon);
void      SetStyle();
 

//_________________________________________________________________________
void TPCMonitor()
{
  // Initialize the monitor 
  SetStyle();
  
  TString aliceroot=gSystem->Getenv("ALICE_ROOT");
  TString dateroot=gSystem->Getenv("DATE_ROOT");
  
  cout << " ALICE_ROOT : " << aliceroot.Data() << endl;
  cout << " DATE_ROOT  : " << dateroot.Data()  << endl;
  
  // MappingHandler
  TString fglobalmap=Form("%s/TPC/mapping/MappingGlobal.txt", aliceroot.Data());
  TString frowmap=Form("%s/TPC/mapping/MappingRow.txt",    aliceroot.Data());
  TString ffecmap=Form("%s/TPC/mapping/MappingCards.txt",  aliceroot.Data());
  TString fnameconf=Form("%s/TPC/Monitor/AliTPCMonitorConfig.txt",   aliceroot.Data());
  fMapHand = new AliTPCMonitorMappingHandler("maphand","maphand");
  fMapHand->ReadMapping(fglobalmap.Data());
  fMapHand->ReadRowMappingGlob(frowmap.Data());
  fMapHand->ReadFECMapping(    ffecmap.Data());
  if (gDirectory) { gDirectory->Append(fMapHand); }
  
  // Monitor
  fMon = new AliTPCMonitor("monitor","monitor");
  fMon->ReadConfig(fnameconf.Data());
  fMon->SetMappingHandler(fMapHand);
  MonitorGui(fMon);
}

//_________________________________________________________________________
void MonitorGui(AliTPCMonitor */*fMon*/)
{
  // Display the main Window 

  Float_t xsize   = fMon->GetButtonXSize();
  Float_t ysize   = fMon->GetButtonYSize();
  Float_t xfirst1 = fMon->GetButtonXFirst1();
  Float_t xfirst2 = fMon->GetButtonXFirst2();
  Float_t yfirst  = fMon->GetButtonYFirst();
  Float_t mainx   = fMon->GetMainXSize();
  Float_t mainy   = fMon->GetMainYSize();
  
  // main frame
  fFrameMain = new TGMainFrame(gClient->GetRoot(),10,10,kMainFrame | kVerticalFrame);
  fFrameMain->SetLayoutBroken(kTRUE);

//  TGTextButton*  fFrameSelForm    = new TGTextButton(fFrameMain,  "Sel. Format "         );
  TGTextButton*  fFrameSelFil     = new TGTextButton(fFrameMain,  "Sel. File/Stream"     );
                 fTableField      = new TGComboBox(fFrameMain                            );
  TGTextButton*  fFrameFFT        = new TGTextButton(fFrameMain,  "FFT"                  );
  TGTextButton*  fFrameWRITE      = new TGTextButton(fFrameMain,  "Write Channel"        );
  fFrameChDisFit                  = new TGCheckButton(fFrameMain, "Disable G4-fit"       );
  TGTextButton*  fFrameRMS        = new TGTextButton(fFrameMain,  "Show RMS map"         );
  TGTextButton*  fFrameSetConf    = new TGTextButton(fFrameMain,  "Conf. Ranges"         );
  fFrameCh10bit                   = new TGCheckButton(fFrameMain, "Write 10bit      "    );
  fFrameCheckVerb                 = new TGCheckButton(fFrameMain, "Set Verbose      "    );
  fFrameCheckProcOne              = new TGCheckButton(fFrameMain, "Proc one Sector  "    );
  fFrameCalcBSL                   = new TGCheckButton(fFrameMain, "Calc BSL (onl)   "    );
  fFrameCheckPed                  = new TGCheckButton(fFrameMain, "No BSL sub.      "    );
  TGTextButton*  fFrameSideA      = new TGTextButton(fFrameMain,  "Side A"               );
  TGTextButton*  fFrameSideB      = new TGTextButton(fFrameMain,  "Side C"               );
  TGTextButton*  fFrameNextEvent  = new TGTextButton(fFrameMain,  "Next Event"           );
  TGTextButton*  fFramesel        = new TGTextButton(fFrameMain,  "Show Component"       );
  TGTextButton*  fFrameres        = new TGTextButton(fFrameMain,  "Resize Canvases"      );
  TGTextButton*  fFramewrite      = new TGTextButton(fFrameMain,  "Write Histos"         );
  TGTextButton*  fFrameQuit       = new TGTextButton(fFrameMain,  "Quit"                 );
 
//  fFrameSelForm->SetCommand(   "InitDialog(1)"     );
  fFrameSelFil->SetCommand(    "OpenDir()"        );
  fFrameFFT->SetCommand(       "FFT()"             );
  fFrameWRITE->SetCommand(     "WriteChannel()"    );
  fFrameCheckPed->SetCommand(  "SetPedestalRun(0)" );
  fFrameCh10bit->SetCommand(   "SetWrite10Bit()"   );
  fFrameCalcBSL->SetCommand(   "SetPedestalRun(1)" );
  fFrameChDisFit->SetCommand(  "DisableFit()"      );
  fFrameRMS->SetCommand(       "DrawRMSMap()"      );
  fFrameSetConf->SetCommand(   "SetConfig()"       );
  fFrameCheckVerb->SetCommand( "SetCheckVerb()"    );
  fFrameCheckProcOne->SetCommand("SetProcOne()"      );
  fFrameNextEvent->SetCommand( "NextEvent()"       );  fFrameNextEvent->SetTextColor(200);
  fFramesel->SetCommand(       "ShowSelected()"    );
  fFrameres->SetCommand(       "ResizeCanv()"      );
  fFramewrite->SetCommand(     "WriteHistos()"     );
  fFrameQuit->SetCommand(      "Quit()"            );

  
  fTableField->EnableTextInput(kTRUE);
  Int_t id=0;
  fTableField->RemoveAll();
  fTableField->AddEntry("PHY,Y,73,*",id++);
  fTableField->AddEntry("PHY,Y,*,*",id++);
  TString fields=gSystem->GetFromPipe("cat ~/TPCMonTable");
  TObjArray *arr=fields.Tokenize("\n");
  for (Int_t ifield=0; ifield<arr->GetEntries(); ++ifield) fTableField->AddEntry(arr->At(ifield)->GetName(),id++);
  fTableField->Select(0,kFALSE);
//   fTableField->Connect("ReturnPressed()", "", this, "DoCustomDraw()");
//   fTableField->Connect("Selected(Int_t)", "", this, "DoCustomDraw()");

  fFrameCalcBSL->SetDown(  1);
  fFrameCheckPed->SetDown( 1);
  fFrameChDisFit->SetDown( 1);
  fFrameCh10bit->SetDown(  0);
  fFrameCheckVerb->SetDown(0);
  fFrameCheckProcOne->SetDown(0);
  SetPedestalRun(0); // !!
  
  TGLayoutHints* fLayout = new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5);
  fFrameMain->AddFrame(fFrameSideA     , fLayout);
  fFrameMain->AddFrame(fFrameSideB     , fLayout);
  fFrameMain->AddFrame(fFrameQuit      , fLayout);
  fFrameMain->AddFrame(fFrameCh10bit   , fLayout);
  fFrameMain->AddFrame(fFrameRMS       , fLayout);
  fFrameMain->AddFrame(fFrameSetConf   , fLayout);
  fFrameMain->AddFrame(fFrameSelFil    , fLayout);
  fFrameMain->AddFrame(fTableField     , fLayout);
//  fFrameMain->AddFrame(fFrameSelForm   , fLayout);
  fFrameMain->AddFrame(fFrameFFT       , fLayout);
//  Int_t step = (Int_t)(ysize/2.);
  Int_t start = 5; 
  
//  fFrameSelForm->MoveResize(     10, (Int_t)(start+ 1.0*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fFrameSelFil->MoveResize(      10, (Int_t)(start+ 1.0*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
 
  fFrameSetConf->MoveResize(     10, (Int_t)(start+ 2.0*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fTableField->MoveResize(       10, (Int_t)(start+ 3.0*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize+5);
 
  fFrameCalcBSL->MoveResize(     10, (Int_t)(start+   5*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fFrameCheckPed->MoveResize(    10, (Int_t)(start+   6*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fFrameChDisFit->MoveResize(    10, (Int_t)(start+   7*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fFrameCh10bit->MoveResize(     10, (Int_t)(start+   8*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  fFrameCheckVerb->MoveResize(   10, (Int_t)(start+   9*ysize)        ,(UInt_t)(mainx-20)  ,(UInt_t)ysize);
  
  
  yfirst = start+ 14*ysize;
  fFrameSideA->MoveResize(  (Int_t)xfirst1, (Int_t)yfirst-30               ,(UInt_t)xsize     ,(UInt_t)ysize);
  fFrameSideB->MoveResize(  (Int_t)xfirst2, (Int_t)yfirst-30               ,(UInt_t)xsize     ,(UInt_t)ysize);
  
  // sector buttons 
  TObjArray     * fFrameArr   = new TObjArray();
  TGTextButton  * fTextButton = 0;
  Int_t side   = 0;  
  Int_t sector = 0;
  for(Int_t i = 0; i<36; i++)
    {
      char nameb[256] ; 
      if(i<18)sprintf(nameb,"Sector %i",i);
      else    sprintf(nameb,"Sector %i",i-18);
      fTextButton = new TGTextButton(fFrameMain,nameb);
      fFrameMain->AddFrame(fTextButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5));
      if(i<18)fTextButton->MoveResize((Int_t)xfirst1,(Int_t)(yfirst     +i*ysize),(UInt_t)xsize,(UInt_t)ysize);
      else    fTextButton->MoveResize((Int_t)xfirst2,(Int_t)(yfirst+(i-18)*ysize),(UInt_t)xsize,(UInt_t)ysize);
      if(i<18){ side = 0; sector = i;   }
      else    { side = 1; sector = i-18;}
      char bef[50]; sprintf(bef,"ProcessSector(%i,%i)",side,sector);
      fTextButton->SetCommand(bef);
      fFrameArr->Add(fTextButton);
    }
  
  TGLabel*      flab  = new TGLabel(fFrameMain, new TGHotString("Next Ev.ID"));
  TGTextBuffer* ftbuf = new TGTextBuffer(10); ftbuf->AddText(0, "1");
  fTextEvId = new TGTextEntry(fFrameMain, ftbuf);
  fTextEvId->SetTextColor(200);
  
  fFramesel->MoveResize(         10         , (Int_t)(mainy- 15.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
  fFrameRMS->MoveResize(         10         , (Int_t)(mainy- 14.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);

  fFrameFFT->MoveResize(         10         , (Int_t)(mainy- 12.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
  fFramewrite->MoveResize(       10         , (Int_t)(mainy- 11.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
 
  fFrameWRITE->MoveResize(       10         , (Int_t)(mainy-  9.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
  fFrameres->MoveResize(         10         , (Int_t)(mainy-  8.0*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
  

  fFrameCheckProcOne->MoveResize(10         , (Int_t)(mainy-  6.5*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);
  
  flab->MoveResize(             10          , (Int_t)(mainy-  5.0*ysize)   ,(UInt_t)xsize+5   ,(UInt_t)ysize);
  fTextEvId->MoveResize(      (Int_t)(mainx/2 +10)   , (Int_t)(mainy-  5.0*ysize)   ,(UInt_t)xsize-10  ,(UInt_t)ysize);
  
  fFrameNextEvent->MoveResize(   10         , (Int_t)(mainy-  3.5*ysize)   ,(UInt_t)mainx-20  ,(UInt_t)ysize);

  fFrameQuit->MoveResize(        30         , (Int_t)(mainy-  1.5*ysize)   ,(UInt_t)mainx-60  ,(UInt_t)ysize);
  
  fFrameMain->MapSubwindows();
  fFrameMain->MapWindow();
  fFrameMain->SetWindowName("OM");
  fFrameMain->MoveResize(0,0,(UInt_t)mainx,(UInt_t)mainy);
}  

//_________________________________________________________________________
void WriteHistos()  
{ 
  // Write Monitor Histos to file 
  fMon->WriteHistos() ;
} 

//_________________________________________________________________________
void WriteChannel()
{
  // Write 10 bit words to file for current channel
  fMon->Write10bitChannel();
}

//_________________________________________________________________________
void FFT()
{
  // Make Fourier Transformation for current channel
  fMon->ExecTransform();
}

//_________________________________________________________________________
void NextEvent()
{
  // Process next event
  fMon->SetProcNextEvent(1);
  fMon->SetupMonitoringTable(fTableField->GetTextEntry()->GetText());
  Int_t eventid =0;
  TString s1 =  fTextEvId->GetDisplayText();
  if(!s1.IsDigit()) { cout << " Invalid EventID  " << endl; return ;}
  else eventid = s1.Atoi();
  fMon->SetEventID(eventid);
  fMon->ResizeCanv();
  fMon->ProcessEvent();
  fMon->SetProcNextEvent(0);
  char tenttext[20] ; sprintf(tenttext,"%i",fMon->GetEventID()+1);
  fTextEvId->SetText(tenttext);
}

//_________________________________________________________________________
void SetCheckVerb()
{
  // Change verbose mode
  if(fFrameCheckVerb->IsDown())     {     fVerb = 1; fMon->SetVerbose(1); }
  else                              {     fVerb = 0; fMon->SetVerbose(0); }
}
//_________________________________________________________________________
void SetPedestalRun(Int_t val)
{
  // Set Pedestal calculation mode 
  if(val==0)
    {
      // check pedestal run button
      if(fFrameCheckPed->IsDown())  {	  fMon->SetPedestals(0);	  fFrameCalcBSL->SetDown(0);	}
      else	                    { 	  fMon->SetPedestals(1);	  fFrameCalcBSL->SetDown(1);	}
    }
  else  
    {
      // check online calc button
      if(fFrameCalcBSL->IsDown())   { 	  fMon->SetPedestals(1);	  fFrameCheckPed->SetDown(0);	}
      else	                    { 	  fMon->SetPedestals(2);	  fFrameCheckPed->SetDown(0);	}
    } 
}

//_________________________________________________________________________
void SetWrite10Bit()
{
  // Set Write 10Bit mode
  // 10 bit words will be written in AliTPCMonitorAltro for each equipment
  if(fMon->GetWrite10Bit()==1) fMon->SetWrite10Bit(0);
  else                         fMon->SetWrite10Bit(1);
}

//_________________________________________________________________________
void DisableFit()
{
  // Disable Gamma4 fit to maximum peak
  if(fMon->GetFitPulse())      fMon->SetFitPulse(0);
  else                         fMon->SetFitPulse(1);
}

//_________________________________________________________________________
Int_t DrawRMSMap()
{
  // Draw RMS map for IROC and OROC
  if(fMon->GetLastSector()==-1) cout << " no sector written yet " << endl;
  else fMon->DrawRMSMap();
  return 0;
}

//_________________________________________________________________________
void ProcessSector(Int_t sid, Int_t sec)
{
  // Process specific sector. Initiated by button
  if(fMon->GetSectorFilled(sec,sid))
    {
      fMon->SetLastSector(sec +sid*18);
      fMon->SetProcNextEvent(0);
      fMon->ProcessEvent();
    }
  else 
    {
      cout << " Sector not filled " << endl;
    }
}

//_________________________________________________________________________
void OpenDir()
{
  TString dir ;
  TString lastfile(fMon->GetLastProcFile());
  if ( lastfile == "" ) dir=gSystem->pwd();
  else dir=gSystem->DirName(lastfile);
  dir="/";
  TGFileInfo* fi = new TGFileInfo();
  fi->fIniDir    = StrDup(dir);
  fi->fFilename  = StrDup(lastfile);
  if(fVerb) printf("fIniDir = %s\n", fi->fIniDir);
  
  new TGFileDialog(gClient->GetRoot(), fFrameMain, kFDOpen, fi);
  if(!fi->fFilename)            return;
  if(!strcmp(fi->fFilename,"")) return;
  string fname(fi->fFilename);
  Int_t    ffirst   = fname.find_first_not_of("/",0);
  Int_t    fstart   = 0;  
  string   firsts   = fname.substr(ffirst,1);
  Int_t    firstsl  = strcmp(firsts.data(),":");
  Int_t    firstcol = strcmp(firsts.data(),"@");
  if ( (fname.find("mem:")!=string::npos) || (fname.find("rfio")!=string::npos) || (fname.find("http")!=string::npos)
       || !firstsl || !firstcol  )  fstart= ffirst  ;
  else                              fstart= ffirst-1; 
  
  if(fstart <0){ cout << " return : missing slash at beginning of file " << endl ; return ;}
  
  string fsubname =  fname.substr(fstart,fname.length()-fstart);
  fMon->SetFile((Char_t *)fsubname.data());

  if(fVerb) 
    {
      cout << "Monitor.C OpenDir:: dir    : " << fi->fIniDir       << endl; 
      cout << "Monitor.C OpenDir:: file   : " << fsubname.data()   << endl;
      cout << "Monitor.C OpenDir:: format : " << fMon->GetFormat() << endl;
    }
}

//_________________________________________________________________________
void InitDialog(Int_t id)
{
  if(id>0&&id<4)  new AliTPCMonitorDialog((TGWindow*)gClient->GetRoot(), fFrameMain, 400, 400,0,id,fMon);
  else cout << "Error : Invalid Id " << endl;
  return;
}

//_________________________________________________________________________
void ShowSelected()
{
  InitDialog(2);
  return;
}

//_________________________________________________________________________
void SetConfig()
{
  InitDialog(3);
}

//_________________________________________________________________________
void ResizeCanv()
{
  fMon->ResizeCanv();
  return;
}

//_________________________________________________________________________
void SetStyle() 
{
  gStyle->SetScreenFactor(1);
  gStyle->SetPadTopMargin(0.17);
  gStyle->SetPadBottomMargin(0.17);
  gStyle->SetPadLeftMargin(0.17);
  gStyle->SetPadRightMargin(0.19);
  gStyle->SetStatColor(kWhite);
  gStyle->SetPadColor(kWhite);
  gStyle->SetCanvasColor(kWhite);
  gStyle->SetPadBorderMode(0);
  gStyle->SetPadBorderSize(0);
  gStyle->SetCanvasBorderMode(0);
  gStyle->SetCanvasBorderSize(0);
  gStyle->SetFrameBorderMode(0);
  gStyle->SetFrameBorderSize(1);
  gStyle->SetOptStat(0);
  gStyle->SetPalette(1);
  gStyle->SetTitleFillColor(0);
  gStyle->SetTitleOffset(1.3,"X");
  gStyle->SetTitleOffset(1.9,"Y");
  gStyle->SetTitleOffset(1.7,"Z");
  gStyle->SetPalette(1);

}

//_________________________________________________________________________
void ReadMe()
{
//  AliTPCMonitorEditor *ed = new AliTPCMonitorEditor(fFrameMain, 700, 400);
//  char nameread[256]; sprintf(nameread,"%s/TPC/Monitor/TPCMonitorReadMe.txt",gSystem->Getenv("ALICE_ROOT"));
//  ed->LoadFile(nameread);
//  ed->Popup();
}

//_________________________________________________________________________
void SetProcOne()
{
  if(fFrameCheckProcOne->IsDown())  { fMon->SetProcOneSector(1); }
  else                              { fMon->SetProcOneSector(0); }
  
}
//_________________________________________________________________________
void Quit() 
{
  gApplication->Terminate(0);
}

 TPCMonitor.C:1
 TPCMonitor.C:2
 TPCMonitor.C:3
 TPCMonitor.C:4
 TPCMonitor.C:5
 TPCMonitor.C:6
 TPCMonitor.C:7
 TPCMonitor.C:8
 TPCMonitor.C:9
 TPCMonitor.C:10
 TPCMonitor.C:11
 TPCMonitor.C:12
 TPCMonitor.C:13
 TPCMonitor.C:14
 TPCMonitor.C:15
 TPCMonitor.C:16
 TPCMonitor.C:17
 TPCMonitor.C:18
 TPCMonitor.C:19
 TPCMonitor.C:20
 TPCMonitor.C:21
 TPCMonitor.C:22
 TPCMonitor.C:23
 TPCMonitor.C:24
 TPCMonitor.C:25
 TPCMonitor.C:26
 TPCMonitor.C:27
 TPCMonitor.C:28
 TPCMonitor.C:29
 TPCMonitor.C:30
 TPCMonitor.C:31
 TPCMonitor.C:32
 TPCMonitor.C:33
 TPCMonitor.C:34
 TPCMonitor.C:35
 TPCMonitor.C:36
 TPCMonitor.C:37
 TPCMonitor.C:38
 TPCMonitor.C:39
 TPCMonitor.C:40
 TPCMonitor.C:41
 TPCMonitor.C:42
 TPCMonitor.C:43
 TPCMonitor.C:44
 TPCMonitor.C:45
 TPCMonitor.C:46
 TPCMonitor.C:47
 TPCMonitor.C:48
 TPCMonitor.C:49
 TPCMonitor.C:50
 TPCMonitor.C:51
 TPCMonitor.C:52
 TPCMonitor.C:53
 TPCMonitor.C:54
 TPCMonitor.C:55
 TPCMonitor.C:56
 TPCMonitor.C:57
 TPCMonitor.C:58
 TPCMonitor.C:59
 TPCMonitor.C:60
 TPCMonitor.C:61
 TPCMonitor.C:62
 TPCMonitor.C:63
 TPCMonitor.C:64
 TPCMonitor.C:65
 TPCMonitor.C:66
 TPCMonitor.C:67
 TPCMonitor.C:68
 TPCMonitor.C:69
 TPCMonitor.C:70
 TPCMonitor.C:71
 TPCMonitor.C:72
 TPCMonitor.C:73
 TPCMonitor.C:74
 TPCMonitor.C:75
 TPCMonitor.C:76
 TPCMonitor.C:77
 TPCMonitor.C:78
 TPCMonitor.C:79
 TPCMonitor.C:80
 TPCMonitor.C:81
 TPCMonitor.C:82
 TPCMonitor.C:83
 TPCMonitor.C:84
 TPCMonitor.C:85
 TPCMonitor.C:86
 TPCMonitor.C:87
 TPCMonitor.C:88
 TPCMonitor.C:89
 TPCMonitor.C:90
 TPCMonitor.C:91
 TPCMonitor.C:92
 TPCMonitor.C:93
 TPCMonitor.C:94
 TPCMonitor.C:95
 TPCMonitor.C:96
 TPCMonitor.C:97
 TPCMonitor.C:98
 TPCMonitor.C:99
 TPCMonitor.C:100
 TPCMonitor.C:101
 TPCMonitor.C:102
 TPCMonitor.C:103
 TPCMonitor.C:104
 TPCMonitor.C:105
 TPCMonitor.C:106
 TPCMonitor.C:107
 TPCMonitor.C:108
 TPCMonitor.C:109
 TPCMonitor.C:110
 TPCMonitor.C:111
 TPCMonitor.C:112
 TPCMonitor.C:113
 TPCMonitor.C:114
 TPCMonitor.C:115
 TPCMonitor.C:116
 TPCMonitor.C:117
 TPCMonitor.C:118
 TPCMonitor.C:119
 TPCMonitor.C:120
 TPCMonitor.C:121
 TPCMonitor.C:122
 TPCMonitor.C:123
 TPCMonitor.C:124
 TPCMonitor.C:125
 TPCMonitor.C:126
 TPCMonitor.C:127
 TPCMonitor.C:128
 TPCMonitor.C:129
 TPCMonitor.C:130
 TPCMonitor.C:131
 TPCMonitor.C:132
 TPCMonitor.C:133
 TPCMonitor.C:134
 TPCMonitor.C:135
 TPCMonitor.C:136
 TPCMonitor.C:137
 TPCMonitor.C:138
 TPCMonitor.C:139
 TPCMonitor.C:140
 TPCMonitor.C:141
 TPCMonitor.C:142
 TPCMonitor.C:143
 TPCMonitor.C:144
 TPCMonitor.C:145
 TPCMonitor.C:146
 TPCMonitor.C:147
 TPCMonitor.C:148
 TPCMonitor.C:149
 TPCMonitor.C:150
 TPCMonitor.C:151
 TPCMonitor.C:152
 TPCMonitor.C:153
 TPCMonitor.C:154
 TPCMonitor.C:155
 TPCMonitor.C:156
 TPCMonitor.C:157
 TPCMonitor.C:158
 TPCMonitor.C:159
 TPCMonitor.C:160
 TPCMonitor.C:161
 TPCMonitor.C:162
 TPCMonitor.C:163
 TPCMonitor.C:164
 TPCMonitor.C:165
 TPCMonitor.C:166
 TPCMonitor.C:167
 TPCMonitor.C:168
 TPCMonitor.C:169
 TPCMonitor.C:170
 TPCMonitor.C:171
 TPCMonitor.C:172
 TPCMonitor.C:173
 TPCMonitor.C:174
 TPCMonitor.C:175
 TPCMonitor.C:176
 TPCMonitor.C:177
 TPCMonitor.C:178
 TPCMonitor.C:179
 TPCMonitor.C:180
 TPCMonitor.C:181
 TPCMonitor.C:182
 TPCMonitor.C:183
 TPCMonitor.C:184
 TPCMonitor.C:185
 TPCMonitor.C:186
 TPCMonitor.C:187
 TPCMonitor.C:188
 TPCMonitor.C:189
 TPCMonitor.C:190
 TPCMonitor.C:191
 TPCMonitor.C:192
 TPCMonitor.C:193
 TPCMonitor.C:194
 TPCMonitor.C:195
 TPCMonitor.C:196
 TPCMonitor.C:197
 TPCMonitor.C:198
 TPCMonitor.C:199
 TPCMonitor.C:200
 TPCMonitor.C:201
 TPCMonitor.C:202
 TPCMonitor.C:203
 TPCMonitor.C:204
 TPCMonitor.C:205
 TPCMonitor.C:206
 TPCMonitor.C:207
 TPCMonitor.C:208
 TPCMonitor.C:209
 TPCMonitor.C:210
 TPCMonitor.C:211
 TPCMonitor.C:212
 TPCMonitor.C:213
 TPCMonitor.C:214
 TPCMonitor.C:215
 TPCMonitor.C:216
 TPCMonitor.C:217
 TPCMonitor.C:218
 TPCMonitor.C:219
 TPCMonitor.C:220
 TPCMonitor.C:221
 TPCMonitor.C:222
 TPCMonitor.C:223
 TPCMonitor.C:224
 TPCMonitor.C:225
 TPCMonitor.C:226
 TPCMonitor.C:227
 TPCMonitor.C:228
 TPCMonitor.C:229
 TPCMonitor.C:230
 TPCMonitor.C:231
 TPCMonitor.C:232
 TPCMonitor.C:233
 TPCMonitor.C:234
 TPCMonitor.C:235
 TPCMonitor.C:236
 TPCMonitor.C:237
 TPCMonitor.C:238
 TPCMonitor.C:239
 TPCMonitor.C:240
 TPCMonitor.C:241
 TPCMonitor.C:242
 TPCMonitor.C:243
 TPCMonitor.C:244
 TPCMonitor.C:245
 TPCMonitor.C:246
 TPCMonitor.C:247
 TPCMonitor.C:248
 TPCMonitor.C:249
 TPCMonitor.C:250
 TPCMonitor.C:251
 TPCMonitor.C:252
 TPCMonitor.C:253
 TPCMonitor.C:254
 TPCMonitor.C:255
 TPCMonitor.C:256
 TPCMonitor.C:257
 TPCMonitor.C:258
 TPCMonitor.C:259
 TPCMonitor.C:260
 TPCMonitor.C:261
 TPCMonitor.C:262
 TPCMonitor.C:263
 TPCMonitor.C:264
 TPCMonitor.C:265
 TPCMonitor.C:266
 TPCMonitor.C:267
 TPCMonitor.C:268
 TPCMonitor.C:269
 TPCMonitor.C:270
 TPCMonitor.C:271
 TPCMonitor.C:272
 TPCMonitor.C:273
 TPCMonitor.C:274
 TPCMonitor.C:275
 TPCMonitor.C:276
 TPCMonitor.C:277
 TPCMonitor.C:278
 TPCMonitor.C:279
 TPCMonitor.C:280
 TPCMonitor.C:281
 TPCMonitor.C:282
 TPCMonitor.C:283
 TPCMonitor.C:284
 TPCMonitor.C:285
 TPCMonitor.C:286
 TPCMonitor.C:287
 TPCMonitor.C:288
 TPCMonitor.C:289
 TPCMonitor.C:290
 TPCMonitor.C:291
 TPCMonitor.C:292
 TPCMonitor.C:293
 TPCMonitor.C:294
 TPCMonitor.C:295
 TPCMonitor.C:296
 TPCMonitor.C:297
 TPCMonitor.C:298
 TPCMonitor.C:299
 TPCMonitor.C:300
 TPCMonitor.C:301
 TPCMonitor.C:302
 TPCMonitor.C:303
 TPCMonitor.C:304
 TPCMonitor.C:305
 TPCMonitor.C:306
 TPCMonitor.C:307
 TPCMonitor.C:308
 TPCMonitor.C:309
 TPCMonitor.C:310
 TPCMonitor.C:311
 TPCMonitor.C:312
 TPCMonitor.C:313
 TPCMonitor.C:314
 TPCMonitor.C:315
 TPCMonitor.C:316
 TPCMonitor.C:317
 TPCMonitor.C:318
 TPCMonitor.C:319
 TPCMonitor.C:320
 TPCMonitor.C:321
 TPCMonitor.C:322
 TPCMonitor.C:323
 TPCMonitor.C:324
 TPCMonitor.C:325
 TPCMonitor.C:326
 TPCMonitor.C:327
 TPCMonitor.C:328
 TPCMonitor.C:329
 TPCMonitor.C:330
 TPCMonitor.C:331
 TPCMonitor.C:332
 TPCMonitor.C:333
 TPCMonitor.C:334
 TPCMonitor.C:335
 TPCMonitor.C:336
 TPCMonitor.C:337
 TPCMonitor.C:338
 TPCMonitor.C:339
 TPCMonitor.C:340
 TPCMonitor.C:341
 TPCMonitor.C:342
 TPCMonitor.C:343
 TPCMonitor.C:344
 TPCMonitor.C:345
 TPCMonitor.C:346
 TPCMonitor.C:347
 TPCMonitor.C:348
 TPCMonitor.C:349
 TPCMonitor.C:350
 TPCMonitor.C:351
 TPCMonitor.C:352
 TPCMonitor.C:353
 TPCMonitor.C:354
 TPCMonitor.C:355
 TPCMonitor.C:356
 TPCMonitor.C:357
 TPCMonitor.C:358
 TPCMonitor.C:359
 TPCMonitor.C:360
 TPCMonitor.C:361
 TPCMonitor.C:362
 TPCMonitor.C:363
 TPCMonitor.C:364
 TPCMonitor.C:365
 TPCMonitor.C:366
 TPCMonitor.C:367
 TPCMonitor.C:368
 TPCMonitor.C:369
 TPCMonitor.C:370
 TPCMonitor.C:371
 TPCMonitor.C:372
 TPCMonitor.C:373
 TPCMonitor.C:374
 TPCMonitor.C:375
 TPCMonitor.C:376
 TPCMonitor.C:377
 TPCMonitor.C:378
 TPCMonitor.C:379
 TPCMonitor.C:380
 TPCMonitor.C:381
 TPCMonitor.C:382
 TPCMonitor.C:383
 TPCMonitor.C:384
 TPCMonitor.C:385
 TPCMonitor.C:386
 TPCMonitor.C:387
 TPCMonitor.C:388
 TPCMonitor.C:389
 TPCMonitor.C:390
 TPCMonitor.C:391
 TPCMonitor.C:392
 TPCMonitor.C:393
 TPCMonitor.C:394
 TPCMonitor.C:395
 TPCMonitor.C:396
 TPCMonitor.C:397
 TPCMonitor.C:398
 TPCMonitor.C:399
 TPCMonitor.C:400
 TPCMonitor.C:401
 TPCMonitor.C:402
 TPCMonitor.C:403
 TPCMonitor.C:404
 TPCMonitor.C:405
 TPCMonitor.C:406
 TPCMonitor.C:407
 TPCMonitor.C:408
 TPCMonitor.C:409
 TPCMonitor.C:410
 TPCMonitor.C:411
 TPCMonitor.C:412
 TPCMonitor.C:413
 TPCMonitor.C:414
 TPCMonitor.C:415
 TPCMonitor.C:416
 TPCMonitor.C:417
 TPCMonitor.C:418
 TPCMonitor.C:419
 TPCMonitor.C:420
 TPCMonitor.C:421
 TPCMonitor.C:422
 TPCMonitor.C:423
 TPCMonitor.C:424
 TPCMonitor.C:425
 TPCMonitor.C:426
 TPCMonitor.C:427
 TPCMonitor.C:428
 TPCMonitor.C:429
 TPCMonitor.C:430
 TPCMonitor.C:431
 TPCMonitor.C:432
 TPCMonitor.C:433
 TPCMonitor.C:434
 TPCMonitor.C:435
 TPCMonitor.C:436
 TPCMonitor.C:437
 TPCMonitor.C:438
 TPCMonitor.C:439
 TPCMonitor.C:440
 TPCMonitor.C:441
 TPCMonitor.C:442
 TPCMonitor.C:443
 TPCMonitor.C:444
 TPCMonitor.C:445
 TPCMonitor.C:446
 TPCMonitor.C:447
 TPCMonitor.C:448
 TPCMonitor.C:449
 TPCMonitor.C:450
 TPCMonitor.C:451
 TPCMonitor.C:452
 TPCMonitor.C:453
 TPCMonitor.C:454
 TPCMonitor.C:455
 TPCMonitor.C:456
 TPCMonitor.C:457
 TPCMonitor.C:458
 TPCMonitor.C:459
 TPCMonitor.C:460
 TPCMonitor.C:461
 TPCMonitor.C:462
 TPCMonitor.C:463
 TPCMonitor.C:464
 TPCMonitor.C:465
 TPCMonitor.C:466
 TPCMonitor.C:467
 TPCMonitor.C:468
 TPCMonitor.C:469
 TPCMonitor.C:470
 TPCMonitor.C:471
 TPCMonitor.C:472
 TPCMonitor.C:473
 TPCMonitor.C:474
 TPCMonitor.C:475
 TPCMonitor.C:476
 TPCMonitor.C:477
 TPCMonitor.C:478
 TPCMonitor.C:479
 TPCMonitor.C:480
 TPCMonitor.C:481
 TPCMonitor.C:482