ARA ROOT Test BEd Software

AraDisplay/AraDisplay.cxx

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00041 //System includes
00042 #include <fstream>
00043 #include <iostream>
00044 
00045 //Magic Display Includes
00046 #include "AraDisplay.h"
00047 #include "AraWaveformGraph.h"
00048 #include "AraCanvasMaker.h"
00049 #include "AraControlPanel.h"
00050 
00051 //Event Reader Includes
00052 #include "UsefulAraEvent.h"
00053 #include "RawAraEvent.h"
00054 
00055 //ROOT Includes
00056 #include "TROOT.h"
00057 #include "TCanvas.h"
00058 #include "TTree.h"
00059 #include "TFile.h"
00060 #include "TTree.h"
00061 #include "TTreeIndex.h"
00062 #include "TButton.h"
00063 #include "TGroupButton.h"
00064 #include "TThread.h"
00065 #include "TEventList.h"
00066 #include <TGClient.h>
00067 
00068 using namespace std;
00069 
00070 AraDisplay*  AraDisplay::fgInstance = 0;
00071 //Leave these as global variables for now
00072 
00073 
00074 
00075 void AraDisplay::zeroPointers() 
00076 {
00077   fEventCanMaker=0;
00078   fCurrentRun=0;
00079   fApplyEventCut=0;
00080   fEventCutListEntry=-1;
00081   fEventTreeIndexEntry=-1;
00082   fEventEntry=0;
00083   fEventFile=0;
00084   fUsefulEventPtr=0;
00085   fRawEventPtr=0;
00086 
00087 
00088   fAraCanvas=0;
00089   fAraEventInfoPad=0;
00090   fAraMainPad=0;
00091   
00092 
00093   fgInstance=this;
00094   fEventTree=0;
00095   fEventPlaySleepMs=0;
00096   
00097   fCanvasLayout=AraDisplayCanvasLayoutOption::kAntennaView;
00098   fWaveformFormat=AraDisplayFormatOption::kWaveform;
00099 
00100 }
00101 
00102 AraDisplay::AraDisplay()
00103 {
00104   //Default constructor
00105   zeroPointers();
00106 }
00107 
00108 AraDisplay::~AraDisplay()
00109 {
00110    //Default destructor
00111 }
00112 
00113 
00114 AraDisplay::AraDisplay(char *baseDir, unsigned int time, AraCalType::AraCalType_t calType)
00115 {
00116   //Offline constructor
00117   zeroPointers();
00118   cout << "AraDisplay::AraDisplay(" << baseDir << " , " << time
00119        << ")" << endl;
00120   fCurrentFileTime=time;
00121   strncpy(fCurrentBaseDir,baseDir,179);
00122   fCalType=calType;
00123   
00124 }
00125 
00126 AraDisplay::AraDisplay(char *eventFile, AraCalType::AraCalType_t calType)
00127 {
00128   //Offline constructor
00129   zeroPointers();
00130   cout << "AraDisplay::AraDisplay(" << eventFile
00131        << ")" << endl;
00132   fCurrentFileTime=-1;
00133   //  strncpy(fCurrentBaseDir,gSystem->DirName(eventFile),FILENAME_MAX);
00134   fCalType=calType;
00135   loadEventTree(eventFile);
00136   
00137 }
00138 
00139 
00140 //______________________________________________________________________________
00141 AraDisplay*  AraDisplay::Instance()
00142 {
00143    //static function
00144    return (fgInstance) ? (AraDisplay*) fgInstance : new AraDisplay();
00145 }
00146 
00147 void AraDisplay::startControlPanel() 
00148 {
00149   fControlPanel=AraControlPanel::Instance();
00150   //  
00151   //  fControlPanel=new AraControlPanel(gClient->GetRoot(), 400, 200);
00152   //  fControlPanel->DrawControlPanel();
00153   //  fControlPanel->Draw();
00154 }
00155 
00156 
00157 void AraDisplay::startEventDisplay()
00158 {
00159  
00160   fEventCanMaker=new AraCanvasMaker(this->fCalType);
00161   int retVal=this->getEventEntry();
00162   if(retVal==0)
00163       this->refreshEventDisplay();   
00164 }
00165 
00166 int AraDisplay::getEventEntry()
00167 {
00168   if(!fEventTree) {
00169     if(loadEventTree()<0) {
00170       std::cout << "Couldn't open event file\n";
00171       return -1;
00172     }
00173   }
00174   if(fEventEntry<fEventTree->GetEntries())
00175     fEventTree->GetEntry(fEventEntry);
00176   else {
00177     std::cout << "No more entries in event tree " << fEventEntry << "\t" << fEventTree->GetEntries() << endl;
00178     return -1;
00179   }
00180 
00181   if(fUsefulEventPtr)
00182     delete fUsefulEventPtr;
00183   fUsefulEventPtr = new UsefulAraEvent(fRawEventPtr,fCalType);
00184   
00185   //Need to make configurable at some point
00186   //This will also need to be modifed to make realEvent accessible outside here
00187    return 0;
00188 }
00189 
00190 
00191 void AraDisplay::closeCurrentFile()
00192 {
00193   
00194   if(fEventFile)
00195     fEventFile->Close();
00196 
00197   fEventFile=0;
00198   fEventTree=0;
00199 }
00200 
00201 
00202 int AraDisplay::loadEventTree(char *eventFile)
00203 {     
00204   //Try and open file or chain
00205   if(!fEventTree) 
00206     fEventTree = new TChain("eventTree");
00207   char eventName[FILENAME_MAX];
00208   if(!eventFile) {
00209     //Step one try calEventFile
00210     sprintf(eventName,"%s/event_%d.root",fCurrentBaseDir,fCurrentFileTime);   
00211     std::cout << eventName << "\n";
00212     fEventTree->Add(eventName);
00213     //    std::cout << fEventTree->GetEntries() << "\n";
00214     if(fEventTree->GetEntries()>0) {
00215       for(int extra=1;extra<100;extra++) {
00216         sprintf(eventName,"%s/event_%d_%d.root",fCurrentBaseDir,fCurrentFileTime,extra); 
00217         TFile *fpTest = TFile::Open(eventName);
00218         if(!fpTest) 
00219           break;
00220         else {
00221           delete fpTest;
00222           fEventTree->Add(eventName);
00223         }
00224       }
00225     }
00226   }
00227   else {
00228     fEventTree->Add(eventFile);
00229     strncpy(eventName,eventFile,FILENAME_MAX);
00230   }
00231   
00232   if(fEventTree->GetEntries()<1) {
00233     cout << "Couldn't open: " << eventName << "\n";
00234     return -1;
00235   }
00236   //  std::cout << "Here\n";
00237   fEventTree->SetBranchAddress("event",&fRawEventPtr);  
00238   fEventTree->SetBranchAddress("run",&fCurrentRun);  
00239   fEventEntry=0;
00240   return 0;
00241 }
00242 
00243 void AraDisplay::refreshEventDisplay()
00244 {
00245    if(!fAraCanvas) {
00246       fAraCanvas = new TCanvas("canAra","canAra",1200,800);
00247       fAraCanvas->cd();
00248       drawEventButtons();
00249    }
00250    if(!fAraMainPad) {
00251       fAraCanvas->cd();
00252       fAraMainPad= new TPad("canAraMain","canAraMain",0,0,1,0.9);
00253       fAraMainPad->Draw();
00254       fAraCanvas->Update();
00255    }
00256    if(!fAraEventInfoPad) {
00257       fAraCanvas->cd();
00258       fAraEventInfoPad= new TPad("canAraEventInfo","canAraEventInfo",0.2,0.91,0.8,0.99);
00259       fAraEventInfoPad->Draw();
00260       fAraCanvas->Update();
00261    }  
00262    //   fAraMainPad->Clear();
00263 
00264            
00265    //This will need to change  
00266    fEventCanMaker->getEventInfoCanvas(fUsefulEventPtr,fAraEventInfoPad,fCurrentRun);   
00267    fEventCanMaker->setWaveformFormat(fWaveformFormat);
00268    fEventCanMaker->setCanvasLayout(fCanvasLayout);
00269    fEventCanMaker->getEventViewerCanvas(fUsefulEventPtr,fAraMainPad);      
00270    fAraCanvas->Update();
00271 }
00272 
00273 void AraDisplay::applyCut(char *cutString)
00274 {
00275   if(cutString==0)
00276     fApplyEventCut=0;
00277   
00278   if(!fEventTree) {
00279     if(loadEventTree()<0) {
00280       std::cout << "Couldn't open event file\n";
00281       return;
00282     }
00283   }
00284 
00285   TCanvas tempCan;
00286   tempCan.cd();
00287   fEventTree->Draw(">>elist1",cutString);
00288   fCutEventList = (TEventList*)gDirectory->Get("elist1");
00289   fApplyEventCut=1;
00290   fCutEventList->Print();
00291  
00292 
00293 }
00294 
00295 int AraDisplay::displayNextEvent()
00296 {
00297   //  static Int_t fEventTreeIndexEntry=-1;
00298   //  static Int_t listNumber=-1;
00299   if(fApplyEventCut==1) {
00300     fEventCutListEntry++;
00301     if(fEventCutListEntry<fCutEventList->GetN()) {
00302       fEventEntry=fCutEventList->GetEntry(fEventCutListEntry);  
00303       int retVal=getEventEntry();
00304       fEventCanMaker->fNewEvent=1;
00305       if(retVal==0) {
00306         refreshEventDisplay(); 
00307       }
00308       return retVal;
00309     }
00310     else {
00311       fEventCutListEntry=fCutEventList->GetN()-1;
00312       return -1;
00313     }      
00314   }
00315   else {
00316     fEventEntry++;
00317     int retVal=getEventEntry();
00318     fEventCanMaker->fNewEvent=1;
00319     if(retVal==0) {
00320       refreshEventDisplay(); 
00321     }
00322     else {
00323       fEventEntry--;
00324     }
00325     return retVal;  
00326   }
00327 }
00328 
00329 
00330 int AraDisplay::displayFirstEvent()
00331 {
00332 
00333   if(fApplyEventCut==1) {    
00334     fEventCutListEntry=0;
00335     if(fEventCutListEntry<fCutEventList->GetN()) {
00336       fEventEntry=fCutEventList->GetEntry(fEventCutListEntry);  
00337       int retVal=getEventEntry();
00338       fEventCanMaker->fNewEvent=1;
00339       if(retVal==0) {
00340         refreshEventDisplay(); 
00341       }
00342       return retVal;
00343     }
00344     else {
00345       fEventCutListEntry=0;
00346       return -1;
00347     }      
00348   }
00349   else  {    
00350     fEventEntry=0;
00351     int retVal=getEventEntry();
00352     fEventCanMaker->fNewEvent=1;
00353     if(retVal==0) {
00354       refreshEventDisplay(); 
00355     }
00356     else fEventEntry--;
00357     return retVal;  
00358   }
00359   return -1;
00360 }
00361 
00362 
00363 int AraDisplay::displayLastEvent()
00364 {
00365   //  fEventTree->Refresh();
00366   
00367   Long64_t eventEnts=fEventTree->GetEntries();
00368 
00369   if(fApplyEventCut==1) {    
00370     fEventCutListEntry=fCutEventList->GetN()-1;
00371     if(fEventCutListEntry<fCutEventList->GetN() && fEventCutListEntry>=0) {
00372       fEventEntry=fCutEventList->GetEntry(fEventCutListEntry);  
00373       int retVal=getEventEntry();
00374       fEventCanMaker->fNewEvent=1;
00375       if(retVal==0) {
00376         refreshEventDisplay(); 
00377       }
00378       return retVal;
00379     }
00380     else {
00381       fEventCutListEntry=0;
00382       return -1;
00383     }      
00384   }
00385   else  {    
00386     fEventEntry=eventEnts-1;
00387     int retVal=getEventEntry();
00388     fEventCanMaker->fNewEvent=1;
00389     if(retVal==0) {
00390       refreshEventDisplay(); 
00391     }
00392     else fEventEntry--;
00393     return retVal;  
00394   }
00395   return -1;
00396 }
00397 
00398 
00399 int AraDisplay::displayPreviousEvent()
00400 {
00401   //  static Int_t fEventTreeIndexEntry=-1;
00402   //  static Int_t fEventCutListEntry=-1;
00403 
00404   if(fApplyEventCut==1) {
00405     //    std::cout << fApplyEventCut << "\t" << fEventCutListEntry << "\t" << fCutEventList->GetN() << "\n";
00406     fEventCutListEntry--;
00407     if(fEventCutListEntry>=0 && fEventCutListEntry<fCutEventList->GetN()) {
00408       fEventEntry=fCutEventList->GetEntry(fEventCutListEntry);  
00409       int retVal=getEventEntry();
00410       fEventCanMaker->fNewEvent=1;
00411       if(retVal==0) {
00412         refreshEventDisplay(); 
00413       }
00414       else {
00415         fEventCutListEntry++;
00416       }
00417       return retVal;
00418     }
00419     else {
00420       fEventCutListEntry++;
00421       return -1;
00422     }      
00423   }
00424   else  {
00425     if(fEventEntry>0)
00426       fEventEntry--;
00427     else 
00428       return -1;
00429    int retVal=getEventEntry();
00430    fEventCanMaker->fNewEvent=1;
00431    if(retVal==0) {
00432      refreshEventDisplay(); 
00433    }  
00434    return retVal;  
00435   }
00436 }
00437 
00438 
00439 int AraDisplay::displayThisEvent(UInt_t eventNumber)
00440 {
00441   cout << "displayThisEvent: " << eventNumber  <<endl;  
00442   
00443   if(!fEventCanMaker) startEventDisplay();
00444   
00445 
00446   if(eventNumber==0) {
00447     fEventEntry=0;
00448   }
00449   else {
00450     fEventEntry=fEventTree->GetEntryNumberWithIndex(eventNumber);
00451     if(fEventEntry<0) 
00452       return -1;      
00453   }
00454   cout << "fEventEntry: " << fEventEntry << endl;
00455   int retVal=getEventEntry();
00456   if(retVal==0) 
00457     refreshEventDisplay(); 
00458   else {
00459     cout << "retVal: " << retVal << endl;
00460   }
00461   return retVal;  
00462 }
00463 
00464 void AraDisplay::drawEventButtons() {
00465    TButton *butNext = new TButton("Next ","AraDisplay::Instance()->displayNextEvent();",0.95,0.975,1,1);
00466    butNext->SetTextSize(0.5);
00467    butNext->SetFillColor(kGreen-10);
00468    butNext->Draw();
00469    TButton *butPrev = new TButton("Prev.","AraDisplay::Instance()->displayPreviousEvent();",0.95,0.95,1,0.975);
00470    butPrev->SetTextSize(0.5);
00471    butPrev->SetFillColor(kBlue-10);
00472    butPrev->Draw();
00473    TButton *butFirst = new TButton("First ","AraDisplay::Instance()->displayFirstEvent();",0.95,0.925,1,0.95);
00474    butFirst->SetTextSize(0.5);
00475    butFirst->SetFillColor(kOrange+10);
00476    butFirst->Draw();
00477    TButton *butLast = new TButton("Last.","AraDisplay::Instance()->displayLastEvent();",0.95,0.90,1,0.925);
00478    butLast->SetTextSize(0.5);
00479    butLast->SetFillColor(kViolet-10);
00480    butLast->Draw();
00481    
00482 
00483    TButton *butPlay = new TButton("Play","AraDisplay::Instance()->startEventPlaying();",0.9,0.97,0.95,1);
00484    butPlay->SetTextSize(0.5);
00485    butPlay->SetFillColor(kGreen-10);
00486    butPlay->Draw();
00487    TButton *butPlayRev = new TButton("Rev ","AraDisplay::Instance()->startEventPlayingReverse();",0.9,0.94,0.95,0.97);
00488    butPlayRev->SetTextSize(0.5);
00489    butPlayRev->SetFillColor(kBlue-10);
00490    butPlayRev->Draw();
00491    TButton *butStop = new TButton("Stop","AraDisplay::Instance()->stopEventPlaying();",0.90,0.90,0.95,0.94);
00492    butStop->SetTextSize(0.5);
00493    butStop->SetFillColor(kRed-10);
00494    butStop->Draw();
00495    TButton *butReset = new TButton("Reset Avg","AraCanvasMaker::Instance()->resetAverage();",0.85,0.975,0.90,1);
00496    butReset->SetTextSize(0.5);
00497    butReset->SetFillColor(kViolet-10);
00498    butReset->Draw();;
00499    TButton *butGoto = new TButton("Go to Event","AraDisplay::Instance()->startControlPanel();",0.85,0.95,0.9,0.975);
00500    butGoto->SetTextSize(0.5);
00501    butGoto->SetFillColor(kOrange);
00502    butGoto->Draw();
00503    //   fTimeEntryButton= new TButton("Event#","AraDisplay::Instance()->toggleTimeEventOrdering();",0.85,0.925,0.9,0.95);
00504    //   fTimeEntryButton->SetTextSize(0.5);
00505    //   fTimeEntryButton->SetFillColor(kGray);
00506    //   fTimeEntryButton->Draw();
00507 
00508 
00509    fElecViewButton = new TButton("Elec. View","AraDisplay::Instance()->setCanvasLayout(AraDisplayCanvasLayoutOption::kElectronicsView); AraDisplay::Instance()->refreshEventDisplay();",0,0.975,0.1,1);
00510    fElecViewButton->SetTextSize(0.5);
00511    fElecViewButton->SetFillColor(kGray);
00512    fElecViewButton->Draw();
00513    fRFViewButton = new TButton("RF Chan#","AraDisplay::Instance()->setCanvasLayout(AraDisplayCanvasLayoutOption::kRFChanView); AraDisplay::Instance()->refreshEventDisplay();",0,0.95,0.1,0.975);
00514    fRFViewButton->SetTextSize(0.5);
00515    fRFViewButton->SetFillColor(kGray);
00516    fRFViewButton->Draw();
00517    fAntViewButton = new TButton("Antenna","AraDisplay::Instance()->setCanvasLayout(AraDisplayCanvasLayoutOption::kAntennaView); AraDisplay::Instance()->refreshEventDisplay();",0,0.925,0.1,0.95);
00518    fAntViewButton->SetTextSize(0.5);
00519    fAntViewButton->SetFillColor(kGray+3);
00520    fAntViewButton->Draw();
00521    fMapViewButton = new TButton("Int. Map","AraDisplay::Instance()->setCanvasLayout(AraDisplayCanvasLayoutOption::kIntMapView); AraDisplay::Instance()->refreshEventDisplay();",0,0.90,0.1,0.925);
00522    fMapViewButton->SetTextSize(0.5);
00523    fMapViewButton->SetFillColor(kGray);
00524    fMapViewButton->Draw();
00525 
00526    //NEW BUTTONS
00527    fWaveformButton = new TButton("Waveform","AraDisplay::Instance()->setWaveformFormat(AraDisplayFormatOption::kWaveform); AraDisplay::Instance()->refreshEventDisplay();",0.1,0.975,0.2,1);
00528    fWaveformButton->SetTextSize(0.4);
00529    fWaveformButton->SetFillColor(kGray+3);
00530    fWaveformButton->Draw();
00531    fPowerButton = new TButton("FFT","AraDisplay::Instance()->setWaveformFormat(AraDisplayFormatOption::kFFT); AraDisplay::Instance()->refreshEventDisplay();",0.1,0.95,0.2,0.975);
00532    fPowerButton->SetTextSize(0.4);
00533    fPowerButton->SetFillColor(kGray);
00534    fPowerButton->Draw();
00535    fHilbertButton = new TButton("Hilbert","AraDisplay::Instance()->setWaveformFormat(AraDisplayFormatOption::kHilbertEnvelope); AraDisplay::Instance()->refreshEventDisplay();",0.1,0.925,0.2,0.95);
00536    fHilbertButton->SetTextSize(0.4);
00537    fHilbertButton->SetFillColor(kGray);
00538    fHilbertButton->Draw();
00539    fAverageFFTButton = new TButton("Average FFT","AraDisplay::Instance()->setWaveformFormat(AraDisplayFormatOption::kAveragedFFT); AraDisplay::Instance()->refreshEventDisplay();",0.1,0.9,0.2,0.925);
00540    fAverageFFTButton->SetTextSize(0.4);
00541    fAverageFFTButton->SetFillColor(kGray);
00542    fAverageFFTButton->Draw();
00543 
00544    
00545 }
00546 
00547 void AraDisplay::setCanvasLayout(AraDisplayCanvasLayoutOption::AraDisplayCanvasLayoutOption_t option)
00548 {
00549    fCanvasLayout=option;
00550    switch(option) {
00551    case AraDisplayCanvasLayoutOption::kElectronicsView:
00552       fElecViewButton->SetFillColor(kGray+3);
00553       fRFViewButton->SetFillColor(kGray);
00554       fAntViewButton->SetFillColor(kGray);
00555       fMapViewButton->SetFillColor(kGray);
00556       break;
00557    case AraDisplayCanvasLayoutOption::kAntennaView:
00558       fElecViewButton->SetFillColor(kGray);
00559       fRFViewButton->SetFillColor(kGray);
00560       fAntViewButton->SetFillColor(kGray+3);
00561       fMapViewButton->SetFillColor(kGray);
00562       break;
00563    case AraDisplayCanvasLayoutOption::kRFChanView:
00564       fRFViewButton->SetFillColor(kGray+3);
00565       fElecViewButton->SetFillColor(kGray);
00566       fAntViewButton->SetFillColor(kGray);
00567       fMapViewButton->SetFillColor(kGray);
00568       break;
00569    case AraDisplayCanvasLayoutOption::kIntMapView:
00570       fRFViewButton->SetFillColor(kGray);
00571       fElecViewButton->SetFillColor(kGray);
00572       fAntViewButton->SetFillColor(kGray);
00573       fMapViewButton->SetFillColor(kGray+3);
00574       break;
00575    default:
00576       break;
00577    }   
00578    fElecViewButton->Modified();
00579    fRFViewButton->Modified();  
00580    fAntViewButton->Modified(); 
00581    fMapViewButton->Modified(); 
00582 }
00583 
00584 
00585 
00586 void AraDisplay::setWaveformFormat(AraDisplayFormatOption::AraDisplayFormatOption_t waveformOption)
00587 {
00588   fWaveformFormat=waveformOption;
00589   if(waveformOption==AraDisplayFormatOption::kWaveform) {
00590       //Turn on fft view off     
00591       fWaveformButton->SetFillColor(kGray+3);
00592       fPowerButton->SetFillColor(kGray);
00593       fHilbertButton->SetFillColor(kGray);
00594       fAverageFFTButton->SetFillColor(kGray);
00595       fWaveformButton->Modified();
00596       fPowerButton->Modified();
00597       fHilbertButton->Modified();
00598       fAverageFFTButton->Modified();
00599   }
00600   else if(waveformOption==AraDisplayFormatOption::kFFT) {
00601       //Turn fft view on
00602       fWaveformButton->SetFillColor(kGray);
00603       fPowerButton->SetFillColor(kGray+3);
00604       fHilbertButton->SetFillColor(kGray);
00605       fAverageFFTButton->SetFillColor(kGray);
00606       fWaveformButton->Modified();
00607       fPowerButton->Modified();
00608       fHilbertButton->Modified();
00609       fAverageFFTButton->Modified();
00610    }
00611   else if(waveformOption==AraDisplayFormatOption::kHilbertEnvelope) {
00612       //Turn fft view on
00613       fWaveformButton->SetFillColor(kGray);
00614       fPowerButton->SetFillColor(kGray);
00615       fHilbertButton->SetFillColor(kGray+3);
00616       fAverageFFTButton->SetFillColor(kGray);
00617       fWaveformButton->Modified();
00618       fPowerButton->Modified();
00619       fHilbertButton->Modified();
00620       fAverageFFTButton->Modified();
00621    }
00622   else if(waveformOption==AraDisplayFormatOption::kAveragedFFT) {
00623       //Turn fft view on
00624       fWaveformButton->SetFillColor(kGray);
00625       fPowerButton->SetFillColor(kGray);
00626       fHilbertButton->SetFillColor(kGray);
00627       fAverageFFTButton->SetFillColor(kGray+3);
00628       fWaveformButton->Modified();
00629       fPowerButton->Modified();
00630       fHilbertButton->Modified();
00631       fAverageFFTButton->Modified();
00632    }
00633       
00634 }
00635 
00636 
00637 UInt_t AraDisplay::getCurrentEvent()
00638 {
00639   if(fUsefulEventPtr) return fUsefulEventPtr->head.eventNumber; 
00640   return 0;
00641 }
00642 
00643 
00644 void AraDisplay::startEventPlaying()
00645 {
00646 
00647   fInEventPlayMode=1;
00648   do {
00649     gSystem->ProcessEvents();
00650     if(!fInEventPlayMode) break;
00651     if(fEventPlaySleepMs>0)
00652       gSystem->Sleep(fEventPlaySleepMs);
00653   }
00654   while(this->displayNextEvent()==0);
00655   if(fInEventPlayMode) {
00656     Long64_t Entries=fEventTree->GetEntries();
00657     if(fEventTree->GetEntries()!=Entries) {
00658       std::cout << Entries <<  "\n";
00659       startEventPlaying();
00660     }
00661   }    
00662 }
00663 
00664 
00665 
00666 void AraDisplay::startEventPlayingReverse()
00667 {
00668   fInEventPlayMode=1;
00669   do {
00670     gSystem->ProcessEvents();
00671     if(!fInEventPlayMode) break;
00672     if(fEventPlaySleepMs>0)
00673       gSystem->Sleep(fEventPlaySleepMs);
00674   }
00675   while(this->displayPreviousEvent()==0);
00676 }
00677 
00678 void AraDisplay::stopEventPlaying() 
00679 {
00680   fInEventPlayMode=0;
00681 }
00682 

Generated on Wed Aug 8 16:18:55 2012 for ARA ROOT Test Bed Software by doxygen 1.4.7