ARA ROOT v3.9 Software

AraWebPlotter/AraEventPlotter.cxx

00001 #include "AraEventPlotter.h"
00002 #include "TCanvas.h"
00003 #include "TGraph.h"
00004 #include "TAxis.h"
00005 #include "TMultiGraph.h"
00006 #include "TTimeStamp.h"
00007 #include "TSystem.h"
00008 #include "TPaveText.h"
00009 
00010 #include "FFTtools.h"
00011 #include "AraIcrrCanvasMaker.h"
00012 #include "AraGeomTool.h"
00013 
00014 AraIcrrCanvasMaker *gEventCanvasMaker=0;
00015 
00016 AraEventPlotter::AraEventPlotter(char *plotDir, char *dataDir)
00017 {
00018    fCurrentRun=0;
00019    histTrigPat=0;
00020    fftHist=0;
00021    histUnixTimeUs=0;
00022    fHistoFile=0;
00023    AraPlotUtils::setDefaultStyle();
00024    strncpy(fPlotDir,plotDir,180);
00025    strncpy(fDataDir,dataDir,180);
00026    sprintf(fTouchFile,"%s/lastEvent",fPlotDir);
00027    //  initialiseCurrentRunTimeHists();
00028 
00029 }
00030 
00031 AraEventPlotter::~AraEventPlotter()
00032 {
00033    std::cerr << "AraEventPlotter::~AraEventPlotter()\n";
00034    //  saveFiles();
00035    //  for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00036    //    if(fAverageFFTHisto[ant]) {
00037    //      delete fAverageFFTHisto[ant];
00038    //    }
00039    //  }
00040    //  fHistoFile->Close();
00041 }
00042 
00043 void AraEventPlotter::saveFiles()
00044 {
00045    if(fHistoFile) {
00046       fHistoFile->cd();  
00047       if(fEventNumberHisto) fEventNumberHisto->Write(0,TObject::kWriteDelete);
00048       if(fEventRateHisto) fEventRateHisto->Write(0,TObject::kWriteDelete);
00049       if(fPriorityHisto) fPriorityHisto->Write(0,TObject::kWriteDelete);
00050       if(fPpsNumHisto) fPpsNumHisto->Write(0,TObject::kWriteDelete);
00051       for(int i=0;i<16;i++) {
00052          if(fTrigPatternHisto[i]) fTrigPatternHisto[i]->Write(0,TObject::kWriteDelete);
00053       }
00054       for(int i=0;i<8;i++) {
00055          if(fCalibStatusBitHistos[i]) fCalibStatusBitHistos[i]->Write(0,TObject::kWriteDelete);
00056          if(fErrorFlagBitHistos[i]) fErrorFlagBitHistos[i]->Write(0,TObject::kWriteDelete);
00057          //The trig time histo handlers
00058          if(fTrigTypeBitHistos[i]) fTrigTypeBitHistos[i]->Write(0,TObject::kWriteDelete);
00059       }
00060       if(fDeadTimeHisto) fDeadTimeHisto->Write(0,TObject::kWriteDelete);
00061       for(int i=0;i<3;i++) {
00062          if(fRoVddHisto[i]) fRoVddHisto[i]->Write(0,TObject::kWriteDelete);
00063          if(fRcoCountHisto[i]) fRcoCountHisto[i]->Write(0,TObject::kWriteDelete);
00064       }
00065 
00066       for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00067          if(fWaveformRMSHisto[ant]) fWaveformRMSHisto[ant]->Write(0,TObject::kWriteDelete);
00068          if(fWaveformSNRHisto[ant]) fWaveformSNRHisto[ant]->Write(0,TObject::kWriteDelete);
00069       }
00070 
00071       for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00072          if(fAverageFFTHisto[ant]) fAverageFFTHisto[ant]->Write();
00073 
00074       }
00075       if(fAverageTriggerPattern) fAverageTriggerPattern->Write();
00076       if(fAverageUnixTimeUs) fAverageUnixTimeUs->Write();
00077    }
00078 }
00079 
00080 void AraEventPlotter::initialiseCurrentRunTimeHists()
00081 {  
00082    char filename[180];
00083    sprintf(filename,"%s/eventTimeHists%d.root",fDataDir,fCurrentRun);
00084    fHistoFile = new TFile(filename,"RECREATE"); //Might switch this to RECREATE at some point
00085    initialiseTimeHists();
00086 }
00087 
00088 void AraEventPlotter::initialiseTimeHists(Int_t binWidth)
00089 {
00090    char name[180];
00091    char title[180];
00092    sprintf(name,"eventNumberHisto");
00093    sprintf(title,"Event Number");
00094    fEventNumberHisto = (AraTimeHistoHandler*) fHistoFile->Get(name);
00095    if(!fEventNumberHisto)
00096       fEventNumberHisto = new AraTimeHistoHandler(name,title,binWidth);
00097    sprintf(name,"eventRateHisto");
00098    sprintf(title,"Event Rate");
00099    fEventRateHisto = (AraTimeHistoHandler*) fHistoFile->Get(name);
00100    if(!fEventRateHisto)
00101       fEventRateHisto = new AraTimeHistoHandler(name,title,binWidth);
00102    sprintf(name,"priorityHisto");
00103    sprintf(title,"Priority");
00104    fPriorityHisto = (AraTimeHistoHandler*) fHistoFile->Get(name);
00105    if(!fPriorityHisto)
00106       fPriorityHisto = new AraTimeHistoHandler(name,title,binWidth);
00107    sprintf(name,"ppsNumHisto");
00108    sprintf(title,"Pulse Pers Second Number");
00109    fPpsNumHisto = (AraTimeHistoHandler*) fHistoFile->Get(name);
00110    if(!fPpsNumHisto)
00111       fPpsNumHisto = new AraTimeHistoHandler(name,title,binWidth);
00112    for(int bit=0;bit<16;bit++) {
00113       sprintf(name,"trigPatternHisto%d",bit);
00114       sprintf(title,"Trigger Pattern (Bit %d)",bit);  
00115       fTrigPatternHisto[bit] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00116       if(!fTrigPatternHisto[bit])
00117          fTrigPatternHisto[bit] = new AraTimeHistoHandler(name,title,binWidth);
00118    }
00119   
00120    for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00121       sprintf(name,"waveformRMSHisto%d",ant);
00122       sprintf(title,"Waveform RMS (Ant %d)",ant);  
00123       fWaveformRMSHisto[ant] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00124       if(!fWaveformRMSHisto[ant])
00125          fWaveformRMSHisto[ant] = new AraTimeHistoHandler(name,title,binWidth);
00126       sprintf(name,"waveformSNRHisto%d",ant);
00127       sprintf(title,"Waveform SNR (Ant %d)",ant);  
00128       fWaveformSNRHisto[ant] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00129       if(!fWaveformSNRHisto[ant])
00130          fWaveformSNRHisto[ant] = new AraTimeHistoHandler(name,title,binWidth);
00131    }
00132   
00133 
00134    for(int i=0;i<8;i++) {
00135       sprintf(name,"calibStatusBitHisto%d",i);
00136       sprintf(title,"Calib Status Bit %d",i);
00137       fCalibStatusBitHistos[i] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00138       if(!fCalibStatusBitHistos[i])
00139          fCalibStatusBitHistos[i] = new AraTimeHistoHandler(name,title,binWidth);
00140       sprintf(name,"errorFlagBitHisto%d",i);
00141       sprintf(title,"Error Flag Bit %d",i);
00142       fErrorFlagBitHistos[i] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00143       if(!fErrorFlagBitHistos[i])
00144          fErrorFlagBitHistos[i] = new AraTimeHistoHandler(name,title,binWidth);
00145       sprintf(name,"trigTypeBitHisto%d",i);
00146       sprintf(title,"Trig Type Bit %d",i);
00147       fTrigTypeBitHistos[i] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00148       if(!fTrigTypeBitHistos[i])
00149          fTrigTypeBitHistos[i] = new AraTimeHistoHandler(name,title,binWidth);
00150    }
00151 
00152    for(int i=0;i<3;i++) {
00153       sprintf(name,"roVddBitHisto%d",i);
00154       sprintf(title,"RO VDD %d",i);
00155       fRoVddHisto[i] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00156       if(!fRoVddHisto[i])
00157          fRoVddHisto[i] = new AraTimeHistoHandler(name,title,binWidth);
00158 
00159       sprintf(name,"rcoCountHisto%d",i);
00160       sprintf(title,"RCO Count %d",i);
00161       fRcoCountHisto[i] = (AraTimeHistoHandler*) fHistoFile->Get(name);
00162       if(!fRcoCountHisto[i])
00163          fRcoCountHisto[i] = new AraTimeHistoHandler(name,title,binWidth);
00164    }
00165 
00166    sprintf(name,"deadTimeHisto");
00167    sprintf(title,"Dead Time");
00168    fDeadTimeHisto = (AraTimeHistoHandler*) fHistoFile->Get(name);
00169    if(!fDeadTimeHisto)
00170       fDeadTimeHisto = new AraTimeHistoHandler(name,title,binWidth);
00171   
00172 
00173    for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00174       sprintf(name,"averageFFTHisto%d",ant);
00175       sprintf(title,"Average FFT Chan %d",ant+1);
00176       fAverageFFTHisto[ant] = new AraHistoHandler(fHistoFile,name,title);
00177    }
00178 
00179    sprintf(name,"averageTrigPattern");
00180    sprintf(title,"Average Trigger Pattern");
00181    fAverageTriggerPattern = new AraHistoHandler(fHistoFile,name,title);
00182 
00183    sprintf(name,"averageUnixTimeUs");
00184    sprintf(title,"Unix Time Us");
00185    fAverageUnixTimeUs = new AraHistoHandler(fHistoFile,name,title);
00186 
00187 }
00188      
00189 
00190 void AraEventPlotter::loadAllTimeHists()
00191 {  
00192    char filename[180];
00193    sprintf(filename,"%s/allEventTimeHists.root",fDataDir);
00194    fHistoFile = new TFile(filename,"RECREATE"); //Might switch this to RECREATE at some point
00195    initialiseTimeHists(600);
00196    int countFiles=0;
00197    //Now need to loop over all eventTimeHists run files in the directory
00198    void* dirp = gSystem->OpenDirectory(fDataDir);
00199    const char *entry = gSystem->GetDirEntry(dirp);
00200    while(entry != 0)
00201       {
00202          int len = strlen(entry);
00203          if(len >= 5 && strcmp(&entry[len - 5], ".root") == 0)
00204             {
00205                if(len >= 20 && strstr(entry,"eventTimeHists")) {
00206               
00207                   TString fileName;
00208                   fileName+=fDataDir;
00209                   if( !fileName.EndsWith("/") ) fileName += "/";
00210                   fileName+=entry;
00211                   TFile *fpRun=TFile::Open(fileName.Data(),"OLD");
00212 
00213                   {
00214                      std::cerr << "*";
00215                      char name[180];
00216                      char title[180];
00217                      sprintf(name,"eventNumberHisto");
00218                      sprintf(title,"Event Number");
00219                      AraTimeHistoHandler *tempEventNumberHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00220                      if(fEventNumberHisto && tempEventNumberHisto)
00221                         fEventNumberHisto->addAraTimeHistoHandler(tempEventNumberHisto);
00222 
00223                      sprintf(name,"eventRateHisto");
00224                      sprintf(title,"Event Rate");
00225                      AraTimeHistoHandler *tempEventRateHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00226                      if(fEventRateHisto && tempEventRateHisto)
00227                         fEventRateHisto->addAraTimeHistoHandler(tempEventRateHisto);
00228 
00229                      sprintf(name,"priorityHisto");
00230                      sprintf(title,"Priority");
00231                      AraTimeHistoHandler *tempPriorityHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00232                      if(fPriorityHisto && tempPriorityHisto)
00233                         fPriorityHisto->addAraTimeHistoHandler(tempPriorityHisto);
00234     
00235                      sprintf(name,"ppsNumHisto");
00236                      sprintf(title,"Pulse Pers Second Number");
00237                      AraTimeHistoHandler *tempPpsNumHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00238                      if(fPpsNumHisto && tempPpsNumHisto)
00239                         fPpsNumHisto->addAraTimeHistoHandler(tempPpsNumHisto);
00240     
00241                      for(int bit=0;bit<16;bit++) {
00242                         sprintf(name,"trigPatternHisto%d",bit);
00243                         sprintf(title,"Trigger Pattern (Bit %d)",bit);  
00244                         AraTimeHistoHandler *tempTrigPatternHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00245                         if(fTrigPatternHisto[bit] && tempTrigPatternHisto)
00246                            fTrigPatternHisto[bit]->addAraTimeHistoHandler(tempTrigPatternHisto);
00247                      }
00248   
00249                      for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00250                         sprintf(name,"waveformRMSHisto%d",ant);
00251                         sprintf(title,"Waveform RMS (Ant %d)",ant);  
00252                         AraTimeHistoHandler *tempWaveformRMSHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00253                         if(fWaveformRMSHisto[ant] && tempWaveformRMSHisto)
00254                            fWaveformRMSHisto[ant]->addAraTimeHistoHandler(tempWaveformRMSHisto);
00255       
00256                         sprintf(name,"waveformSNRHisto%d",ant);
00257                         sprintf(title,"Waveform SNR (Ant %d)",ant);  
00258                         AraTimeHistoHandler *tempWaveformSNRHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00259                         if(fWaveformSNRHisto[ant] && tempWaveformSNRHisto)
00260                            fWaveformSNRHisto[ant]->addAraTimeHistoHandler(tempWaveformSNRHisto);
00261                      }
00262     
00263 
00264                      for(int i=0;i<8;i++) {
00265                         sprintf(name,"calibStatusBitHisto%d",i);
00266                         sprintf(title,"Calib Status Bit %d",i);
00267                         AraTimeHistoHandler *tempCalibStatusBitHistos = (AraTimeHistoHandler*) fpRun->Get(name);
00268                         if(fCalibStatusBitHistos[i] && tempCalibStatusBitHistos)
00269                            fCalibStatusBitHistos[i]->addAraTimeHistoHandler(tempCalibStatusBitHistos);
00270       
00271                         sprintf(name,"errorFlagBitHisto%d",i);
00272                         sprintf(title,"Error Flag Bit %d",i);
00273                         AraTimeHistoHandler *tempErrorFlagBitHistos = (AraTimeHistoHandler*) fpRun->Get(name);
00274                         if(fErrorFlagBitHistos[i] && tempErrorFlagBitHistos)
00275                            fErrorFlagBitHistos[i]->addAraTimeHistoHandler(tempErrorFlagBitHistos);
00276       
00277                         sprintf(name,"trigTypeBitHisto%d",i);
00278                         sprintf(title,"Trig Type Bit %d",i);
00279                         AraTimeHistoHandler *tempTrigTypeBitHistos = (AraTimeHistoHandler*) fpRun->Get(name);
00280                         if(fTrigTypeBitHistos[i] && tempTrigTypeBitHistos)
00281                            fTrigTypeBitHistos[i]->addAraTimeHistoHandler(tempTrigTypeBitHistos);
00282                      }
00283     
00284                      for(int i=0;i<3;i++) {
00285                         sprintf(name,"roVddBitHisto%d",i);
00286                         sprintf(title,"RO VDD %d",i);
00287                         AraTimeHistoHandler *tempRoVddHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00288                         if(fRoVddHisto[i] && tempRoVddHisto)
00289                            fRoVddHisto[i]->addAraTimeHistoHandler(tempRoVddHisto);
00290       
00291                         sprintf(name,"rcoCountHisto%d",i);
00292                         sprintf(title,"RCO Count %d",i);
00293                         AraTimeHistoHandler *tempRcoCountHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00294                         if(fRcoCountHisto[i] && tempRcoCountHisto)
00295                            fRcoCountHisto[i]->addAraTimeHistoHandler(tempRcoCountHisto);
00296                      }
00297     
00298                      sprintf(name,"deadTimeHisto");
00299                      sprintf(title,"Dead Time");
00300                      AraTimeHistoHandler *tempDeadTimeHisto = (AraTimeHistoHandler*) fpRun->Get(name);
00301                      if(fDeadTimeHisto && tempDeadTimeHisto)
00302                         fDeadTimeHisto->addAraTimeHistoHandler(tempDeadTimeHisto);
00303   
00304 
00305                      for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00306                         fAverageFFTHisto[ant]->addFile(fpRun);
00307                      }
00308     
00309     
00310                      fAverageTriggerPattern->addFile(fpRun);    
00311                      fAverageUnixTimeUs->addFile(fpRun);
00312                   }
00313 
00314                   countFiles++;
00315                   if(fpRun)
00316                     delete fpRun;
00317                }
00318             }
00319          entry = gSystem->GetDirEntry(dirp);
00320       }  
00321    
00322    std::cerr << "\n";
00323    
00324    std::cout << "Found " << countFiles << " run event time hist files\n";
00325     
00326   
00327 }
00328 
00329 
00330 
00331 
00332 void AraEventPlotter::addEvent(Int_t runNumber,RawIcrrStationEvent *rawEvent)
00333 {  
00334    static Int_t lastPpsNum=0;
00335    static Double_t tthen=0;
00336    static UInt_t lastEventNumber=rawEvent->head.eventNumber;
00337    if(fCurrentRun!=runNumber) {
00338       fCurrentRun=runNumber;
00339       fEarliestTime=rawEvent->head.unixTime;
00340       fLatestTime=rawEvent->head.unixTime;
00341    }
00342    else {
00343       if(fEarliestTime>rawEvent->head.unixTime) 
00344          fEarliestTime=rawEvent->head.unixTime;
00345       if(fLatestTime<rawEvent->head.unixTime) 
00346          fLatestTime=rawEvent->head.unixTime;
00347    }
00348    if(!fHistoFile) initialiseCurrentRunTimeHists();
00349    fHistoFile->cd();
00350 
00351    Double_t deltaT=0;
00352 
00353    Double_t tnow=Double_t(rawEvent->head.unixTime)+1e-6*Double_t(rawEvent->head.unixTimeUs);
00354    if(rawEvent->head.eventNumber>lastEventNumber) {
00355       Double_t dn=rawEvent->head.eventNumber-lastEventNumber;
00356       //    Double_tthen=Double_t(lastUnixTime)+1e-6*Double_t(lastUnixTimeUs);
00357       if(tnow>tthen && (tnow-tthen)<20) {
00358          deltaT=(tnow-tthen)/dn;
00359       }
00360    }
00361    lastEventNumber=rawEvent->head.eventNumber;
00362    tthen=tnow;
00363   
00364   
00365       
00366 
00367     
00368    AraPlotUtils::updateTouchFile(fTouchFile,rawEvent->head.unixTime);
00369       
00370    fEventNumberHisto->addVariable(rawEvent->head.unixTime,rawEvent->head.eventNumber);
00371    if(deltaT>0)
00372       fEventRateHisto->addVariable(rawEvent->head.unixTime,deltaT);
00373   
00374    fPriorityHisto->addVariable(rawEvent->head.unixTime,rawEvent->head.priority);
00375    fPpsNumHisto->addVariable(rawEvent->head.unixTime,rawEvent->trig.ppsNum);
00376    for(int bit=0;bit<16;bit++) {
00377       fTrigPatternHisto[bit]->addVariable(rawEvent->head.unixTime,rawEvent->isInTrigPattern(bit));
00378    }
00379    for(int i=0;i<8;i++) {
00380       fCalibStatusBitHistos[i]->addVariable(rawEvent->head.unixTime,(((rawEvent->head.calibStatus)&(1<<i))>>i));
00381       fErrorFlagBitHistos[i]->addVariable(rawEvent->head.unixTime,(((rawEvent->head.errorFlag)&(1<<i))>>i));
00382       fTrigTypeBitHistos[i]->addVariable(rawEvent->head.unixTime,(((rawEvent->trig.trigType)&(1<<i))>>i));
00383    }
00384    if(rawEvent->trig.ppsNum!=lastPpsNum) 
00385       fDeadTimeHisto->addVariable(rawEvent->head.unixTime,rawEvent->trig.getDeadtime());
00386    lastPpsNum=rawEvent->trig.ppsNum;
00387    for(int i=0;i<3;i++) {
00388       fRcoCountHisto[i]->addVariable(rawEvent->head.unixTime,rawEvent->trig.rcoCount[i]);
00389       fRoVddHisto[i]->addVariable(rawEvent->head.unixTime,rawEvent->trig.rovdd[i]);
00390    }
00391 
00392    if(!histTrigPat) histTrigPat = new TH1D("temphistTrigPat","temphistTrigPat",16,-0.5,15.5);
00393    histTrigPat->Reset();
00394    for(int i=0;i<16;i++) {
00395       histTrigPat->Fill(i,rawEvent->isInTrigPattern(i));
00396    }
00397    fAverageTriggerPattern->addHisto(rawEvent->head.unixTime,histTrigPat);
00398 
00399    if(!histUnixTimeUs) histUnixTimeUs = new TH1D("temphistUnixTimeUs","temphistUnixTimeUs",200,0,1);
00400    histUnixTimeUs->Reset();
00401    histUnixTimeUs->Fill(rawEvent->head.unixTimeUs/1e6); 
00402    fAverageUnixTimeUs->addHisto(rawEvent->head.unixTime,histUnixTimeUs);
00403 
00404 
00405 
00406   
00407    //return;
00408    static TFile *fpEvent=0;
00409    if(!fpEvent) {  
00410       char histName[180];
00411       sprintf(histName,"%s/histEvent.root",fDataDir);
00412       fpEvent = new TFile(histName,"RECREATE");
00413    }
00414    else {
00415       fpEvent->cd();
00416    }
00417    //Now we deal with the event quantities
00418    UsefulIcrrStationEvent *usefulEventPtr = new UsefulIcrrStationEvent(rawEvent,AraCalType::kFirstCalib);
00419    //First up plot the event
00420    if(fEventPlotFlag) plotEvent(runNumber,usefulEventPtr);
00421 
00422    fHistoFile->cd();
00423    //Next we can make average FFT stuff
00424    for(int ant=0;ant<ANTS_PER_ICRR;ant++) {
00425       int good=0;
00426       if(!fftHist) {
00427          fftHist = usefulEventPtr->getFFTHistForRFChan(ant);//gEventCanvasMaker->getFFTHisto(ant);
00428          if(fftHist) good=1;
00429       }
00430       else {
00431          fftHist->Reset();
00432          if(usefulEventPtr->fillFFTHistoForRFChan(ant,fftHist)==0)
00433             good=1;
00434       }
00435       
00436       if(good) {
00437          fAverageFFTHisto[ant]->addHisto(rawEvent->head.unixTime,fftHist);
00438       }
00439       TGraph *grChan = usefulEventPtr->getGraphFromRFChan(ant);
00440       if(grChan) {
00441          Double_t rms=grChan->GetRMS(2);
00442          fWaveformRMSHisto[ant]->addVariable(rawEvent->head.unixTime,rms);
00443          Double_t peak=FFTtools::getPeakVal(grChan); //Actually just the maximum positive value
00444          Double_t snr=0;
00445          if(rms>0) {
00446             snr=peak/rms;
00447          }
00448          fWaveformSNRHisto[ant]->addVariable(rawEvent->head.unixTime,snr);
00449          delete grChan;
00450       }
00451    }
00452    fHistoFile->cd();
00453    delete usefulEventPtr;
00454 }
00455 
00456 void AraEventPlotter::makePlots()
00457 {
00458    fHistoFile->cd();
00459    char plotTitle[180];
00460    char canName[FILENAME_MAX];
00461    UInt_t lastTime=fEventNumberHisto->getLastTime();
00462    std::cout << "Last Event Time: " << lastTime << "\n";
00463    //Assume they are all the same
00464    TTimeStamp clockTime((time_t)lastTime,0);
00465    //Event Number plots
00466    for(int timeInd = (int) AraPlotTime::kFullTime;
00467        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00468       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00469       TCanvas canEventNumber("canEventNumber","canEventNumber");     
00470       sprintf(plotTitle,"Event Number for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00471       TGraph *grEventNumber[1]={0};
00472       for(int i=0;i<1;i++) {
00473          grEventNumber[i]= fEventNumberHisto->getTimeGraph(plotTime);
00474       }
00475     
00476       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canEventNumber,grEventNumber,1,plotTitle,"Time","Event Number",1);
00477       if(mg) {  
00478          sprintf(canName,"%s/headers/canEventNumber%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00479          unlink(canName);
00480          canEventNumber.Print(canName);
00481          canEventNumber.Clear();
00482          delete mg;
00483       }
00484    }
00485    std::cerr << "Done canEventNumber\n";
00486    //Event Rate plots
00487    for(int timeInd = (int) AraPlotTime::kFullTime;
00488        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00489       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00490       TCanvas canEventRate("canEventRate","canEventRate");     
00491       sprintf(plotTitle,"Event Rate for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00492       TGraph *grEventRate[1]={0};
00493       for(int i=0;i<1;i++) {
00494          TGraph *grTemp = fEventRateHisto->getTimeGraph(plotTime);
00495          if(grTemp) {
00496             if(grTemp->GetN()>1) {
00497                Double_t *yVals=grTemp->GetY();
00498                Double_t *xVals=grTemp->GetX();
00499                Double_t *newVals = new Double_t[grTemp->GetN()];
00500                for(int point =0;point<grTemp->GetN();point++) {
00501                   if(yVals[point]>0)
00502                      newVals[point]=1./yVals[point];
00503                   else
00504                      newVals[point]=0;
00505                }
00506                grEventRate[i]= new TGraph(grTemp->GetN(),xVals,newVals);
00507                delete [] newVals;         
00508             }
00509             delete grTemp;
00510          }
00511       }
00512       if(grEventRate[0]) {
00513          TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canEventRate,grEventRate,1,plotTitle,"Time","Event Rate",1);
00514          if(mg) {       
00515             sprintf(canName,"%s/headers/canEventRate%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00516             unlink(canName);
00517             canEventRate.Print(canName);
00518             canEventRate.Clear();
00519             delete mg;
00520          }
00521       }
00522    }
00523    std::cerr << "Done canEventRate\n";
00524 
00525    //Priority plots
00526    for(int timeInd = (int) AraPlotTime::kFullTime;
00527        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00528       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00529       TCanvas canPriority("canPriority","canPriority");
00530       TGraph *grPriority[1]={0};
00531       for(int i=0;i<1;i++) {
00532          grPriority[i]= fPriorityHisto->getTimeGraph(plotTime);
00533       }
00534       sprintf(plotTitle,"Priority for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00535     
00536       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canPriority,grPriority,1,plotTitle,"Time","Priority",1);
00537       if(mg) {  
00538          sprintf(canName,"%s/headers/canPriority%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00539          unlink(canName);
00540          canPriority.Print(canName);
00541          canPriority.Clear();
00542          delete mg;
00543       }
00544    }
00545    std::cerr << "Done canPriority\n";
00546    //PpsNum plots
00547    for(int timeInd = (int) AraPlotTime::kFullTime;
00548        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00549       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00550       TCanvas canPpsNum("canPpsNum","canPpsNum");
00551       TGraph *grPpsNum[1]={0};
00552       for(int i=0;i<1;i++) {
00553          grPpsNum[i]= fPpsNumHisto->getTimeGraph(plotTime);
00554       }
00555       sprintf(plotTitle,"PpsNum for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00556     
00557       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canPpsNum,grPpsNum,1,plotTitle,"Time","PpsNum",1);
00558       if(mg) {  
00559          sprintf(canName,"%s/headers/canPpsNum%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00560          unlink(canName);
00561          canPpsNum.Print(canName);
00562          canPpsNum.Clear();
00563          delete mg;
00564       }
00565    }
00566    std::cerr << "Done canPpsNum\n";
00567    //TrigPattern plots
00568    for(int timeInd = (int) AraPlotTime::kFullTime;
00569        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00570       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00571       TCanvas canTrigPatternTime("canTrigPatternTime","canTrigPatternTime");
00572       TGraph *grTrigPattern[16]={0};
00573       for(int i=0;i<16;i++) {
00574          grTrigPattern[i]= fTrigPatternHisto[i]->getTimeGraph(plotTime);
00575       }
00576       sprintf(plotTitle,"Trigger Pattern for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00577     
00578       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canTrigPatternTime,grTrigPattern,16,plotTitle,"Time","Trigger Pattern",1);
00579       if(mg) {  
00580          sprintf(canName,"%s/headers/canTrigPatternTime%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00581          unlink(canName);
00582          canTrigPatternTime.Print(canName);
00583          canTrigPatternTime.Clear();
00584          delete mg;
00585       }
00586    }
00587    std::cerr << "Done canTrigPatternTime\n";
00588    AraGeomTool *fGeomTool=AraGeomTool::Instance();
00589 
00590    AraAntPol::AraAntPol_t polMap[16]={AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kSurface,AraAntPol::kSurface,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal};
00591    int antPolNumMap[16]={0,1,2,3,4,5,0,1,0,1,2,3,4,5,6,7};
00592 
00593    //Waveform RMS plots
00594    for(int timeInd = (int) AraPlotTime::kFullTime;
00595        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00596       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00597       TCanvas canWaveformRMSTime("canWaveformRMSTime","canWaveformRMSTime",600,600);
00598    
00599       TPaveText titlePave(0.02,0.95,0.98,0.98);      
00600       sprintf(plotTitle,"Waveform RMS for %s  (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("s"));      
00601       titlePave.SetBorderSize(0);     
00602       titlePave.AddText(plotTitle);      
00603       titlePave.Draw();  
00604       TPad subPad("subPad","subPad",0,0,1,0.95);                 
00605       subPad.Draw();      
00606       subPad.SetLogy(0);         
00607       subPad.Divide(2,2);
00608     
00609       TGraph *grWaveformRMS[16]={0};
00610       for(int i=0;i<16;i++) {
00611          int chan=fGeomTool->getRFChanByPolAndAnt(polMap[i],antPolNumMap[i],ARA_TESTBED);
00612          grWaveformRMS[i]= fWaveformRMSHisto[chan]->getTimeGraph(plotTime);
00613       }
00614     
00615       char labels[4][5]={"V1-4","H1-4","VS-8","HS-8"};
00616       TMultiGraph *mg[4]={0};   
00617       for(int pad=1;pad<=4;pad++) {
00618          subPad.cd(pad);
00619          sprintf(plotTitle,"RMS for %s",labels[pad-1]);
00620       
00621          mg[pad-1]=AraPlotUtils::plotMultigraph(&canWaveformRMSTime,&(grWaveformRMS[4*(pad-1)]),4,plotTitle,"Time","Waveform RMS",1);
00622       }
00623       sprintf(canName,"%s/headers/canWaveformRMSTime%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00624       unlink(canName);
00625       canWaveformRMSTime.Print(canName);
00626       canWaveformRMSTime.Clear();
00627       for(int i=0;i<4;i++) {
00628          if(mg[i]) delete mg[i];
00629       }
00630    }
00631    std::cerr << "Done canWaveformRMSTime\n";
00632     
00633 
00634 
00635    //Waveform SNR plots
00636    for(int timeInd = (int) AraPlotTime::kFullTime;
00637        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00638       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00639       TCanvas canWaveformSNRTime("canWaveformSNRTime","canWaveformSNRTime",600,600);
00640    
00641       TPaveText titlePave(0.02,0.95,0.98,0.98);      
00642       sprintf(plotTitle,"Waveform SNR for %s  (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("s"));      
00643       titlePave.SetBorderSize(0);     
00644       titlePave.AddText(plotTitle);      
00645       titlePave.Draw();  
00646       TPad subPad("subPad","subPad",0,0,1,0.95);                 
00647       subPad.Draw();      
00648       subPad.SetLogy(0);         
00649       subPad.Divide(2,2);
00650     
00651       TGraph *grWaveformSNR[16]={0};
00652       for(int i=0;i<16;i++) {
00653         int chan=fGeomTool->getRFChanByPolAndAnt(polMap[i],antPolNumMap[i],ARA_TESTBED);
00654          grWaveformSNR[i]= fWaveformSNRHisto[chan]->getTimeGraph(plotTime);
00655       }
00656     
00657       char labels[4][5]={"V1-4","H1-4","VS-8","HS-8"};
00658       TMultiGraph *mg[4]={0};   
00659       for(int pad=1;pad<=4;pad++) {
00660          subPad.cd(pad);
00661          sprintf(plotTitle,"SNR for %s",labels[pad-1]);
00662       
00663          mg[pad-1]=AraPlotUtils::plotMultigraph(&canWaveformSNRTime,&(grWaveformSNR[4*(pad-1)]),4,plotTitle,"Time","Waveform SNR",1);
00664       }
00665       sprintf(canName,"%s/headers/canWaveformSNRTime%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00666       unlink(canName);
00667       canWaveformSNRTime.Print(canName);
00668       canWaveformSNRTime.Clear();
00669       for(int i=0;i<4;i++) {
00670          if(mg[i]) delete mg[i];
00671       }
00672    }
00673    std::cerr << "Done canWaveformSNRTime\n";
00674     
00675 
00676 
00677    for(int timeInd = (int) AraPlotTime::kFullTime;
00678        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00679       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00680       TCanvas canTrigPattern("canTrigPattern","canTrigPattern");
00681       TH1D *histTrigPattern = fAverageTriggerPattern->getTimeHisto(plotTime);
00682      
00683       sprintf(plotTitle,"Trigger Pattern for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00684      
00685       histTrigPattern->SetTitle(plotTitle);
00686       histTrigPattern->SetXTitle("Trigger Bit");
00687       histTrigPattern->SetYTitle("Event Fraction");
00688       histTrigPattern->SetFillColor(AraPlotUtils::getNiceColour(0));
00689       histTrigPattern->SetLineColor(AraPlotUtils::getNiceColour(0));
00690       histTrigPattern->SetFillStyle(2002);
00691       histTrigPattern->SetStats(0);
00692       histTrigPattern->Draw(); 
00693       sprintf(canName,"%s/headers/canTrigPattern%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00694       unlink(canName);
00695       canTrigPattern.Print(canName);
00696       canTrigPattern.Clear();
00697       delete histTrigPattern;
00698      
00699    }   
00700    std::cerr << "Done canTrigPattern\n";
00701 
00702 
00703    for(int timeInd = (int) AraPlotTime::kFullTime;
00704        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00705       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00706       TCanvas canUnixTimeUs("canUnixTimeUs","canUnixTimeUs");
00707       TH1D *histUnixTimeUs2 = fAverageUnixTimeUs->getTimeHisto(plotTime);
00708      
00709       sprintf(plotTitle,"Unix Time (#mu s) for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00710      
00711       histUnixTimeUs2->SetTitle(plotTitle);
00712       histUnixTimeUs2->SetXTitle("Time s");
00713       histUnixTimeUs2->SetYTitle("Event Fraction");
00714       histUnixTimeUs2->SetFillColor(AraPlotUtils::getNiceColour(1));
00715       histUnixTimeUs2->SetLineColor(AraPlotUtils::getNiceColour(1));
00716       histUnixTimeUs2->SetFillStyle(2002);
00717       histUnixTimeUs2->SetStats(0);
00718       histUnixTimeUs2->Draw(); 
00719       sprintf(canName,"%s/headers/canUnixTimeUs%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00720       unlink(canName);
00721       canUnixTimeUs.Print(canName);
00722       canUnixTimeUs.Clear();
00723       delete histUnixTimeUs2;
00724      
00725    }   
00726    std::cerr << "Done canUnixTimeUs\n";
00727 
00728 
00729    //CalibStatusBit plots
00730    for(int timeInd = (int) AraPlotTime::kFullTime;
00731        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00732       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00733       TCanvas canCalibStatusBit("canCalibStatusBit","canCalibStatusBit");
00734       TGraph *grCalibStatusBit[8]={0};
00735       for(int i=0;i<8;i++) {
00736          grCalibStatusBit[i]= fCalibStatusBitHistos[i]->getTimeGraph(plotTime);
00737       }
00738       sprintf(plotTitle,"Calib Status Bit for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00739     
00740       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canCalibStatusBit,grCalibStatusBit,8,plotTitle,"Time","Calib Status Bit",1);
00741       if(mg) {  
00742          sprintf(canName,"%s/headers/canCalibStatusBit%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00743          unlink(canName);
00744          canCalibStatusBit.Print(canName);
00745          canCalibStatusBit.Clear();
00746          delete mg;
00747       }
00748    }
00749    std::cerr << "Done canCalibStatusBit\n";
00750 
00751    //ErrorFlagBit plots
00752    for(int timeInd = (int) AraPlotTime::kFullTime;
00753        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00754       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00755       TCanvas canErrorFlag("canErrorFlag","canErrorFlag");
00756       TGraph *grErrorFlagBit[8]={0};
00757       for(int i=0;i<8;i++) {
00758          grErrorFlagBit[i]= fErrorFlagBitHistos[i]->getTimeGraph(plotTime);
00759       }
00760       sprintf(plotTitle,"Error Flag Bit for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00761     
00762       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canErrorFlag,grErrorFlagBit,8,plotTitle,"Time","Error Flag Bit",1);
00763       if(mg) {  
00764          sprintf(canName,"%s/headers/canErrorFlag%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00765          unlink(canName);
00766          canErrorFlag.Print(canName);
00767          canErrorFlag.Clear();
00768          delete mg;
00769       }
00770    }
00771    std::cerr << "Done canErrorFlag\n";
00772 
00773    //TrigTypeBit plots
00774    for(int timeInd = (int) AraPlotTime::kFullTime;
00775        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00776       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00777       TCanvas canTrigTypeBit("canTrigTypeBit","canTrigTypeBit");
00778       TGraph *grTrigTypeBit[8]={0};
00779       for(int i=0;i<8;i++) {
00780          grTrigTypeBit[i]= fTrigTypeBitHistos[i]->getTimeGraph(plotTime);
00781       }
00782       sprintf(plotTitle,"Trig Type Bit for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00783     
00784       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canTrigTypeBit,grTrigTypeBit,8,plotTitle,"Time","Trig Type Bit",1);
00785       if(mg) {  
00786          sprintf(canName,"%s/headers/canTrigTypeBit%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00787          unlink(canName);
00788          canTrigTypeBit.Print(canName);
00789          canTrigTypeBit.Clear();
00790          delete mg;
00791       }
00792    }
00793    std::cerr << "Done canTrigTypeBit\n";
00794    
00795 
00796    //DeadTime plots
00797    for(int timeInd = (int) AraPlotTime::kFullTime;
00798        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00799       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00800       TCanvas canDeadTime("canDeadTime","canDeadTime");
00801       TGraph *grDeadTime[1]={0};
00802       grDeadTime[0]= fDeadTimeHisto->getTimeGraph(plotTime);
00803     
00804       sprintf(plotTitle,"Dead Time for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00805     
00806       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canDeadTime,grDeadTime,1,plotTitle,"Time","Dead Time (s)",1);
00807       if(mg) {  
00808          sprintf(canName,"%s/headers/canDeadTime%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00809          unlink(canName);
00810          canDeadTime.Print(canName);
00811          canDeadTime.Clear();
00812          delete mg;
00813       }
00814    }
00815    std::cerr << "Done canDeadTime\n";
00816 
00817    //RoVdd plots
00818    for(int timeInd = (int) AraPlotTime::kFullTime;
00819        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00820       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00821       TCanvas canRoVdd("canRoVdd","canRoVdd");
00822       TGraph *grRoVdd[3]={0};
00823       for(int i=0;i<3;i++) {
00824          grRoVdd[i]= fRoVddHisto[i]->getTimeGraph(plotTime);
00825       }
00826       sprintf(plotTitle,"ROVDD for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00827     
00828       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canRoVdd,grRoVdd,3,plotTitle,"Time","ROVDD",1);
00829       if(mg) {  
00830          sprintf(canName,"%s/headers/canRoVdd%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00831          unlink(canName);
00832          canRoVdd.Print(canName);
00833          canRoVdd.Clear();
00834          delete mg;
00835       }
00836    } 
00837    std::cerr << "Done canRoVdd\n";
00838 
00839    //RcoCount plots
00840    for(int timeInd = (int) AraPlotTime::kFullTime;
00841        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00842       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00843       TCanvas canRcoCount("canRcoCount","canRcoCount");
00844       TGraph *grRcoCount[3]={0};
00845       for(int i=0;i<3;i++) {
00846          grRcoCount[i]= fRcoCountHisto[i]->getTimeGraph(plotTime);
00847       }
00848       sprintf(plotTitle,"RCO Count for %s (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("sl"));
00849     
00850       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canRcoCount,grRcoCount,3,plotTitle,"Time","RCO Count",1);
00851       if(mg) {  
00852          sprintf(canName,"%s/headers/canRcoCount%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00853          unlink(canName);
00854          canRcoCount.Print(canName);
00855          canRcoCount.Clear();
00856          delete mg;
00857       }
00858    } 
00859    std::cerr << "Done canRcoCount\n";
00860 
00861 
00862    //Average FFT plots
00863    for(int timeInd = (int) AraPlotTime::kFullTime;
00864        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00865       char histTitle[180];
00866       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00867       TCanvas canAverageFFT("canAverageFFT","canAverageFFT",800,800);      
00868       TPaveText titlePave(0.02,0.95,0.98,0.98);      
00869       sprintf(histTitle,"Average Power Spectral Density Estimators for %s  (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("s"));      
00870       titlePave.SetBorderSize(0);     
00871       titlePave.AddText(histTitle);      
00872       titlePave.Draw();  
00873       TPad subPad("subPad","subPad",0,0,1,0.95);                 
00874       subPad.Draw();      
00875       subPad.SetLogy(0);         
00876       subPad.Divide(4,4);
00877       TH1D *histFFT[ANTS_PER_ICRR]={0};
00878       Double_t minVal=1e9;
00879       Double_t maxVal=-1e9;
00880       for(int i=0;i<ANTS_PER_ICRR;i++) {
00881          //      std::cerr << i << fAverageFFTHisto[i] << "\n";
00882          histFFT[i]= fAverageFFTHisto[i]->getTimeHisto(plotTime);
00883          if(histFFT[i]) {
00884             subPad.cd(i+1);
00885             sprintf(histTitle,"Average PSD Chan %d",i+1);
00886             histFFT[i]->SetTitle(histTitle);
00887             histFFT[i]->SetLineColor(AraPlotUtils::getNiceColour(i));
00888             histFFT[i]->Draw();
00889             if(histFFT[i]->GetXaxis()) {
00890                histFFT[i]->GetXaxis()->SetTitle("Frequency (MHz)");
00891                //         histFFT[i]->GetXaxis()->SetRangeUser(0,500);
00892             }
00893             if(histFFT[i]->GetYaxis()) {
00894                histFFT[i]->GetYaxis()->SetTitle("Power (dB?)");
00895             }
00896             histFFT[i]->SetStats(0);
00897             if(histFFT[i]->GetMinimum()<minVal) minVal=histFFT[i]->GetMinimum();
00898             if(histFFT[i]->GetMaximum()>maxVal) maxVal=histFFT[i]->GetMaximum();
00899 
00900             //  std::cout << histFFT[i]->GetMean() << "\t" << histFFT[i]->GetEntries() << "\n";
00901          }
00902       }
00903       for(int i=0;i<ANTS_PER_ICRR;i++) {
00904          if(histFFT[i]) {
00905             subPad.cd(i+1);
00906             if(histFFT[i]->GetYaxis()) {
00907                histFFT[i]->GetYaxis()->SetRangeUser(minVal-5,maxVal+5);
00908             }
00909          }
00910       }
00911           
00912       
00913     
00914       sprintf(canName,"%s/headers/canAverageFFT%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00915       unlink(canName);
00916       canAverageFFT.Print(canName);
00917       canAverageFFT.Clear();
00918       for(int i=0;i<ANTS_PER_ICRR;i++) {
00919          if(histFFT[i]) delete histFFT[i];
00920       } 
00921    }
00922 
00923    std::cerr << "Done canAverageFFT\n";
00924 
00925 
00926    //Average FFT plots
00927    Int_t numPointsArray[6]={60,60,12,24,24,48};
00928    for(int timeInd = (int) AraPlotTime::kFullTime;
00929        timeInd<(int)AraPlotTime::kNoTime;timeInd++) {
00930       char histTitle[180];
00931       AraPlotTime::AraPlotTime_t plotTime=AraPlotTime::AraPlotTime_t(timeInd);
00932       TCanvas canAverageFFTTime("canAverageFFTTime","canAverageFFTTime",800,800);      
00933       TPaveText titlePave(0.02,0.95,0.98,0.98);      
00934       sprintf(histTitle,"Average Power Spectral Density Estimators for %s  (Last: %s)",AraPlotTime::getTimeTitleString(plotTime),clockTime.AsString("s"));      
00935       titlePave.SetBorderSize(0);     
00936       titlePave.AddText(histTitle);      
00937       titlePave.Draw();  
00938       TPad subPad("subPad","subPad",0,0,1,0.95);                 
00939       subPad.Draw();      
00940       subPad.SetLogy(0);         
00941       subPad.Divide(4,4);
00942       TH2D *histFFTTime[ANTS_PER_ICRR]={0};
00943       Double_t minVal=1e9;
00944       Double_t maxVal=-1e9;
00945       for(int i=0;i<ANTS_PER_ICRR;i++) {
00946          //      std::cerr << i << fAverageFFTHisto[i] << "\n";
00947          histFFTTime[i]= fAverageFFTHisto[i]->getTimeColourHisto(plotTime,numPointsArray[timeInd]);
00948          if(histFFTTime[i]) {
00949             subPad.cd(i+1);
00950             sprintf(histTitle,"Average PSD Chan %d",i+1);
00951             histFFTTime[i]->SetTitle(histTitle);
00952             histFFTTime[i]->SetLineColor(AraPlotUtils::getNiceColour(i));
00953             histFFTTime[i]->Draw("colz");
00954             if(histFFTTime[i]->GetYaxis()) {
00955                histFFTTime[i]->GetXaxis()->SetTitle("Frequency (MHz)");
00956                //         histFFTTime[i]->GetXaxis()->SetRangeUser(0,500);
00957             }
00958             if(histFFTTime[i]->GetXaxis()) {
00959                histFFTTime[i]->GetXaxis()->SetTitle("Time");
00960                histFFTTime[i]->GetXaxis()->SetTimeDisplay(1);
00961             }
00962             histFFTTime[i]->SetStats(0);
00963             if(histFFTTime[i]->GetMinimum()<minVal) minVal=histFFTTime[i]->GetMinimum();
00964             if(histFFTTime[i]->GetMaximum()>maxVal) maxVal=histFFTTime[i]->GetMaximum();
00965 
00966             //  std::cout << histFFTTime[i]->GetMean() << "\t" << histFFTTime[i]->GetEntries() << "\n";
00967          }
00968       }
00969       for(int i=0;i<ANTS_PER_ICRR;i++) {
00970          if(histFFTTime[i]) {
00971             subPad.cd(i+1);
00972             if(histFFTTime[i]->GetZaxis()) {
00973            
00974                histFFTTime[i]->GetZaxis()->SetRangeUser(5,maxVal+5);
00975             }
00976          }
00977       }
00978           
00979       
00980     
00981       sprintf(canName,"%s/headers/canAverageFFTTime%s.png",fPlotDir,AraPlotTime::getTimeString(plotTime));
00982       unlink(canName);
00983       canAverageFFTTime.Print(canName);
00984       canAverageFFTTime.Clear();
00985       for(int i=0;i<ANTS_PER_ICRR;i++) {
00986          if(histFFTTime[i]) delete histFFTTime[i];
00987       } 
00988    }
00989 
00990 }
00991 
00992 
00993 
00994 
00995 void AraEventPlotter::plotEvent(Int_t runNumber,UsefulIcrrStationEvent *usefulEvent)
00996 {
00997 
00998    gEventCanvasMaker=AraIcrrCanvasMaker::Instance();
00999    char gifName[180];
01000    if(!fAraDisplayCanvas) {
01001       fAraDisplayCanvas = new TCanvas("canAraDisplay","canAraDisplay",1200,800);
01002       fAraDisplayCanvas->cd();
01003    }
01004    if(!fAraDisplayMainPad) {
01005       fAraDisplayCanvas->cd();
01006       fAraDisplayMainPad= new TPad("canAraDisplayMain","canAraDisplayMain",0,0,1,0.9);
01007       fAraDisplayMainPad->Draw();
01008       fAraDisplayCanvas->Update();
01009    }
01010    if(!fAraDisplayEventInfoPad) {
01011       fAraDisplayCanvas->cd();
01012       fAraDisplayEventInfoPad= new TPad("canAraDisplayEventInfo","canAraDisplayEventInfo",0.2,0.91,0.8,0.99);
01013       fAraDisplayEventInfoPad->Draw();
01014       fAraDisplayCanvas->Update();
01015    } 
01016 
01017    gEventCanvasMaker->getEventInfoCanvas(usefulEvent,fAraDisplayEventInfoPad);
01018    //  gEventCanvasMaker->fMinVoltLimit=-100;
01019    //  gEventCanvasMaker->fMaxVoltLimit=100;
01020    gEventCanvasMaker->quickGetEventViewerCanvasForWebPlottter(usefulEvent,fAraDisplayMainPad);
01021 
01022 
01023    if(fEventPlotFlag) {
01024       char dirName[FILENAME_MAX];
01025       sprintf(dirName,"%s/events/all/run%d",fPlotDir,runNumber);
01026       gSystem->mkdir(dirName,kTRUE);
01027       sprintf(gifName,"%s/event_%u_%u.%u.gif",dirName,usefulEvent->head.eventNumber,usefulEvent->head.unixTime,usefulEvent->head.unixTimeUs);
01028       unlink(gifName);
01029       fAraDisplayCanvas->Print(gifName);
01030 
01031       char lastName[FILENAME_MAX];
01032       sprintf(lastName,"%s/events/lastEvent.gif",fPlotDir);
01033       unlink(lastName);
01034       link(gifName,lastName);
01035    }
01036 }
01037 
01038 
01039 
01040 void AraEventPlotter::makeLatestRunPlots()
01041 {
01042    fHistoFile->cd();
01043    char plotTitle[180];
01044    char canName[FILENAME_MAX];
01045    char dirName[FILENAME_MAX];
01046    sprintf(dirName,"%s/headers/archive/run%d",fPlotDir,fCurrentRun);
01047    gSystem->mkdir(dirName,kTRUE);
01048   
01049    UInt_t lastTime=fEventNumberHisto->getLastTime();
01050    std::cout << "Last Event Time: " << lastTime << "\n";
01051    //Assume they are all the same
01052    TTimeStamp clockTime((time_t)lastTime,0);
01053    //Event Number plots 
01054    {
01055       TCanvas canEventNumber("canEventNumber","canEventNumber");     
01056       sprintf(plotTitle,"Event Number for Run %d",fCurrentRun);
01057       TGraph *grEventNumber[1]={0};
01058       for(int i=0;i<1;i++) {
01059          grEventNumber[i]= fEventNumberHisto->getTimeGraph(fEarliestTime,fLatestTime);
01060       }
01061     
01062       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canEventNumber,grEventNumber,1,plotTitle,"Time","Event Number",1);
01063       if(mg) {  
01064          sprintf(canName,"%s/canEventNumber.png",dirName);
01065          unlink(canName);
01066          canEventNumber.Print(canName);
01067          canEventNumber.Clear();
01068          delete mg;
01069       }
01070    }
01071    //Event Rate plots
01072    {
01073       TCanvas canEventRate("canEventRate","canEventRate");     
01074       sprintf(plotTitle,"Event Rate for Run %d",fCurrentRun);
01075       TGraph *grEventRate[1]={0};
01076       for(int i=0;i<1;i++) {
01077          TGraph *grTemp = fEventRateHisto->getTimeGraph(fEarliestTime,fLatestTime);
01078       
01079 
01080          if(grTemp) {
01081             if(grTemp->GetN()>1) {
01082                Double_t *yVals=grTemp->GetY();
01083                Double_t *xVals=grTemp->GetX();
01084                Double_t *newVals = new Double_t[grTemp->GetN()];
01085                for(int point =0;point<grTemp->GetN();point++) {
01086                   if(yVals[point]>0)
01087                      newVals[point]=1./yVals[point];
01088                   else
01089                      newVals[point]=0;
01090                }
01091                grEventRate[i]= new TGraph(grTemp->GetN(),xVals,newVals);
01092                delete [] newVals;         
01093             }
01094             delete grTemp;
01095          }      
01096       }
01097       if(grEventRate[0]) {
01098          TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canEventRate,grEventRate,1,plotTitle,"Time","Event Rate",1);
01099          if(mg) {       
01100             sprintf(canName,"%s/canEventRate.png",dirName);
01101             unlink(canName);
01102             canEventRate.Print(canName);
01103             canEventRate.Clear();
01104             delete mg;
01105          }
01106       }
01107    }
01108    //Priority plots
01109    {
01110       TCanvas canPriority("canPriority","canPriority");
01111       TGraph *grPriority[1]={0};
01112       for(int i=0;i<1;i++) {
01113          grPriority[i]= fPriorityHisto->getTimeGraph(fEarliestTime,fLatestTime);
01114       }
01115       sprintf(plotTitle,"Priority for Run %d",fCurrentRun);
01116     
01117       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canPriority,grPriority,1,plotTitle,"Time","Priority",1);
01118       if(mg) {  
01119          sprintf(canName,"%s/canPriority.png",dirName);
01120          unlink(canName);
01121          canPriority.Print(canName);
01122          canPriority.Clear();
01123          delete mg;
01124       }
01125    }
01126    //PpsNum plots
01127    {
01128       TCanvas canPpsNum("canPpsNum","canPpsNum");
01129       TGraph *grPpsNum[1]={0};
01130       for(int i=0;i<1;i++) {
01131          grPpsNum[i]= fPpsNumHisto->getTimeGraph(fEarliestTime,fLatestTime);
01132       }
01133       sprintf(plotTitle,"PpsNum for Run %d",fCurrentRun);
01134     
01135       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canPpsNum,grPpsNum,1,plotTitle,"Time","PpsNum",1);
01136       if(mg) {  
01137          sprintf(canName,"%s/canPpsNum.png",dirName);
01138          unlink(canName);
01139          canPpsNum.Print(canName);
01140          canPpsNum.Clear();
01141          delete mg;
01142       }
01143    }
01144    //TrigPattern plots
01145    {
01146       TCanvas canTrigPatternTime("canTrigPatternTime","canTrigPatternTime");
01147       TGraph *grTrigPattern[16]={0};
01148       for(int i=0;i<16;i++) {
01149          grTrigPattern[i]= fTrigPatternHisto[i]->getTimeGraph(fEarliestTime,fLatestTime);
01150       }
01151       sprintf(plotTitle,"Trigger Pattern for Run %d",fCurrentRun);
01152     
01153       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canTrigPatternTime,grTrigPattern,16,plotTitle,"Time","Trigger Pattern",1);
01154       if(mg) {  
01155          sprintf(canName,"%s/canTrigPatternTime.png",dirName);
01156          unlink(canName);
01157          canTrigPatternTime.Print(canName);
01158          canTrigPatternTime.Clear();
01159          delete mg;
01160       }
01161    }
01162 
01163    //TrigPattern plots
01164    {
01165       TCanvas canTrigPattern("canTrigPattern","canTrigPattern");
01166       TH1D *histTrigPattern = fAverageTriggerPattern->getTimeHisto(fEarliestTime,fLatestTime);
01167       sprintf(plotTitle,"Trigger Pattern for Run %d",fCurrentRun);
01168       histTrigPattern->SetTitle(plotTitle);
01169       histTrigPattern->SetXTitle("Trigger Bit");
01170       histTrigPattern->SetYTitle("Event Fraction");
01171       histTrigPattern->SetFillColor(AraPlotUtils::getNiceColour(0));
01172       histTrigPattern->SetLineColor(AraPlotUtils::getNiceColour(0));
01173       histTrigPattern->SetFillStyle(2002);
01174       histTrigPattern->SetStats(0);
01175       histTrigPattern->Draw();    
01176       sprintf(canName,"%s/canTrigPattern.png",dirName);
01177       unlink(canName);
01178       canTrigPattern.Print(canName);
01179       canTrigPattern.Clear();
01180       delete histTrigPattern;
01181    }
01182 
01183    //UnixTimeUs plots
01184    {
01185       TCanvas canUnixTimeUs("canUnixTimeUs","canUnixTimeUs");
01186       TH1D *histUnixTimeUs2 = fAverageUnixTimeUs->getTimeHisto(fEarliestTime,fLatestTime);
01187       sprintf(plotTitle,"Unix Time (#mu s) for Run %d",fCurrentRun);
01188       histUnixTimeUs2->SetTitle(plotTitle);
01189       histUnixTimeUs2->SetXTitle("Unix Time (s)");
01190       histUnixTimeUs2->SetYTitle("Event Fraction");
01191       histUnixTimeUs2->SetFillColor(AraPlotUtils::getNiceColour(0));
01192       histUnixTimeUs2->SetLineColor(AraPlotUtils::getNiceColour(0));
01193       histUnixTimeUs2->SetFillStyle(2002);
01194       histUnixTimeUs2->SetStats(0);
01195       histUnixTimeUs2->Draw();    
01196       sprintf(canName,"%s/canUnixTimeUs.png",dirName);
01197       unlink(canName);
01198       canUnixTimeUs.Print(canName);
01199       canUnixTimeUs.Clear();
01200       delete histUnixTimeUs2;
01201    }
01202     
01203 
01204 
01205    AraGeomTool *fGeomTool=AraGeomTool::Instance();
01206    AraAntPol::AraAntPol_t polMap[16]={AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kVertical,AraAntPol::kSurface,AraAntPol::kSurface,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal,AraAntPol::kHorizontal};
01207    int antPolNumMap[16]={0,1,2,3,4,5,0,1,0,1,2,3,4,5,6,7};
01208    //Waveform RMS plots
01209    {
01210       TCanvas canWaveformRMSTime("canWaveformRMSTime","canWaveformRMSTime",600,600);
01211    
01212       TPaveText titlePave(0.02,0.95,0.98,0.98);      
01213       sprintf(plotTitle,"Waveform RMS for Run %d",fCurrentRun);    
01214       titlePave.SetBorderSize(0);     
01215       titlePave.AddText(plotTitle);      
01216       titlePave.Draw();  
01217       TPad subPad("subPad","subPad",0,0,1,0.95);                 
01218       subPad.Draw();      
01219       subPad.SetLogy(0);         
01220       subPad.Divide(2,2);
01221     
01222       TGraph *grWaveformRMS[16]={0};
01223       for(int i=0;i<16;i++) {
01224          int chan=fGeomTool->getRFChanByPolAndAnt(polMap[i],antPolNumMap[i],ARA_TESTBED);
01225          grWaveformRMS[i]= fWaveformRMSHisto[chan]->getTimeGraph(fEarliestTime,fLatestTime);
01226       }
01227     
01228       char labels[4][5]={"V1-4","V/S","H1-4","H5-8"};
01229       TMultiGraph *mg[4]={0};   
01230       for(int pad=1;pad<=4;pad++) {
01231          subPad.cd(pad);
01232          sprintf(plotTitle,"RMS for %s",labels[pad-1]);
01233       
01234          mg[pad-1]=AraPlotUtils::plotMultigraph(&canWaveformRMSTime,&(grWaveformRMS[4*(pad-1)]),4,plotTitle,"Time","Waveform RMS",1);
01235       }
01236       sprintf(canName,"%s/canWaveformRMSTime.png",dirName);
01237       unlink(canName);
01238       canWaveformRMSTime.Print(canName);
01239       canWaveformRMSTime.Clear();
01240       for(int i=0;i<4;i++) {
01241          if(mg[i]) delete mg[i];
01242       }
01243    }
01244    std::cerr << "Done canWaveformRMSTime\n";
01245 
01246    //Waveform SNR plots
01247    {
01248       TCanvas canWaveformSNRTime("canWaveformSNRTime","canWaveformSNRTime",600,600);
01249    
01250       TPaveText titlePave(0.02,0.95,0.98,0.98);      
01251       sprintf(plotTitle,"Waveform SNR for Run %d",fCurrentRun);    
01252       titlePave.SetBorderSize(0);     
01253       titlePave.AddText(plotTitle);      
01254       titlePave.Draw();  
01255       TPad subPad("subPad","subPad",0,0,1,0.95);                 
01256       subPad.Draw();      
01257       subPad.SetLogy(0);         
01258       subPad.Divide(2,2);
01259     
01260       TGraph *grWaveformSNR[16]={0};
01261       for(int i=0;i<16;i++) {
01262          int chan=fGeomTool->getRFChanByPolAndAnt(polMap[i],antPolNumMap[i],ARA_TESTBED);
01263          grWaveformSNR[i]= fWaveformSNRHisto[chan]->getTimeGraph(fEarliestTime,fLatestTime);
01264       }
01265     
01266       char labels[4][5]={"V1-4","H1-4","VS-8","HS-8"};
01267       TMultiGraph *mg[4]={0};   
01268       for(int pad=1;pad<=4;pad++) {
01269          subPad.cd(pad);
01270          sprintf(plotTitle,"SNR for %s",labels[pad-1]);
01271       
01272          mg[pad-1]=AraPlotUtils::plotMultigraph(&canWaveformSNRTime,&(grWaveformSNR[4*(pad-1)]),4,plotTitle,"Time","Waveform SNR",1);
01273       }
01274       sprintf(canName,"%s/canWaveformSNRTime.png",dirName);
01275       unlink(canName);
01276       canWaveformSNRTime.Print(canName);
01277       canWaveformSNRTime.Clear();
01278       for(int i=0;i<4;i++) {
01279          if(mg[i]) delete mg[i];
01280       }
01281    }
01282    std::cerr << "Done canWaveformSNRTime\n";
01283 
01284 
01285    //CalibStatusBit plots
01286    {
01287       TCanvas canCalibStatusBit("canCalibStatusBit","canCalibStatusBit");
01288       TGraph *grCalibStatusBit[8]={0};
01289       for(int i=0;i<8;i++) {
01290          grCalibStatusBit[i]= fCalibStatusBitHistos[i]->getTimeGraph(fEarliestTime,fLatestTime);
01291       }
01292       sprintf(plotTitle,"Calib Status Bit for Run %d",fCurrentRun);
01293     
01294       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canCalibStatusBit,grCalibStatusBit,8,plotTitle,"Time","Calib Status Bit",1);
01295       if(mg) {  
01296          sprintf(canName,"%s/canCalibStatusBit.png",dirName);
01297          unlink(canName);
01298          canCalibStatusBit.Print(canName);
01299          canCalibStatusBit.Clear();
01300          delete mg;
01301       }
01302    }
01303 
01304    //ErrorFlagBit plots
01305    {
01306       TCanvas canErrorFlag("canErrorFlag","canErrorFlag");
01307       TGraph *grErrorFlagBit[8]={0};
01308       for(int i=0;i<8;i++) {
01309          grErrorFlagBit[i]= fErrorFlagBitHistos[i]->getTimeGraph(fEarliestTime,fLatestTime);
01310       }
01311       sprintf(plotTitle,"Error Flag Bit for Run %d",fCurrentRun);
01312     
01313       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canErrorFlag,grErrorFlagBit,8,plotTitle,"Time","Error Flag Bit",1);
01314       if(mg) {  
01315          sprintf(canName,"%s/canErrorFlag.png",dirName);
01316          unlink(canName);
01317          canErrorFlag.Print(canName);
01318          canErrorFlag.Clear();
01319          delete mg;
01320       }
01321    }
01322 
01323    //TrigTypeBit plots
01324    {
01325       TCanvas canTrigTypeBit("canTrigTypeBit","canTrigTypeBit");
01326       TGraph *grTrigTypeBit[8]={0};
01327       for(int i=0;i<8;i++) {
01328          grTrigTypeBit[i]= fTrigTypeBitHistos[i]->getTimeGraph(fEarliestTime,fLatestTime);
01329       }
01330       sprintf(plotTitle,"Trig Type Bit for Run %d",fCurrentRun);
01331     
01332       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canTrigTypeBit,grTrigTypeBit,8,plotTitle,"Time","Trig Type Bit",1);
01333       if(mg) {  
01334          sprintf(canName,"%s/canTrigTypeBit.png",dirName);
01335          unlink(canName);
01336          canTrigTypeBit.Print(canName);
01337          canTrigTypeBit.Clear();
01338          delete mg;
01339       }
01340    }
01341    
01342 
01343    //DeadTime plots
01344    {
01345       TCanvas canDeadTime("canDeadTime","canDeadTime");
01346       TGraph *grDeadTime[1]={0};
01347       grDeadTime[0]= fDeadTimeHisto->getTimeGraph(fEarliestTime,fLatestTime);
01348     
01349       sprintf(plotTitle,"Dead Time for Run %d",fCurrentRun);
01350     
01351       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canDeadTime,grDeadTime,1,plotTitle,"Time","Dead Time (s)",1);
01352       if(mg) {  
01353          sprintf(canName,"%s/canDeadTime.png",dirName);
01354          unlink(canName);
01355          canDeadTime.Print(canName);
01356          canDeadTime.Clear();
01357          delete mg;
01358       }
01359    }
01360    //RoVdd plots
01361    {
01362       TCanvas canRoVdd("canRoVdd","canRoVdd");
01363       TGraph *grRoVdd[3]={0};
01364       for(int i=0;i<3;i++) {
01365          grRoVdd[i]= fRoVddHisto[i]->getTimeGraph(fEarliestTime,fLatestTime);
01366       }
01367       sprintf(plotTitle,"ROVDD for Run %d",fCurrentRun);
01368     
01369       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canRoVdd,grRoVdd,3,plotTitle,"Time","ROVDD",1);
01370       if(mg) {  
01371          sprintf(canName,"%s/canRoVdd.png",dirName);
01372          unlink(canName);
01373          canRoVdd.Print(canName);
01374          canRoVdd.Clear();
01375          delete mg;
01376       }
01377    } 
01378 
01379    //RcoCount plots
01380    {
01381       TCanvas canRcoCount("canRcoCount","canRcoCount");
01382       TGraph *grRcoCount[3]={0};
01383       for(int i=0;i<3;i++) {
01384          grRcoCount[i]= fRcoCountHisto[i]->getTimeGraph(fEarliestTime,fLatestTime);
01385       }
01386       sprintf(plotTitle,"RCO Count for Run %d",fCurrentRun);
01387     
01388       TMultiGraph *mg =AraPlotUtils::plotMultigraph(&canRcoCount,grRcoCount,3,plotTitle,"Time","RCO Count",1);
01389       if(mg) {  
01390          sprintf(canName,"%s/canRcoCount.png",dirName);
01391          unlink(canName);
01392          canRcoCount.Print(canName);
01393          canRcoCount.Clear();
01394          delete mg;
01395       }
01396    } 
01397 
01398 
01399    //Average FFT plots
01400    {
01401       char histTitle[180];
01402       TCanvas canAverageFFT("canAverageFFT","canAverageFFT",800,800);      
01403       TPaveText titlePave(0.02,0.95,0.98,0.98);      
01404       sprintf(histTitle,"Average Power Spectral Density Estimators for Run %d",fCurrentRun);      
01405       titlePave.SetBorderSize(0);     
01406       titlePave.AddText(histTitle);      
01407       titlePave.Draw();  
01408       TPad subPad("subPad","subPad",0,0,1,0.95);                 
01409       subPad.Draw();      
01410       subPad.SetLogy(0);         
01411       subPad.Divide(4,4);
01412       TH1D *histFFT[ANTS_PER_ICRR]={0};
01413       Double_t minVal=1e9;
01414       Double_t maxVal=-1e9;
01415       for(int i=0;i<ANTS_PER_ICRR;i++) {
01416          //      std::cerr << i << fAverageFFTHisto[i] << "\n";
01417          histFFT[i]= fAverageFFTHisto[i]->getTimeHisto(fEarliestTime,fLatestTime);
01418          if(histFFT[i]) {
01419             subPad.cd(i+1);
01420             sprintf(histTitle,"Average PSD Chan %d",i+1);
01421             histFFT[i]->SetTitle(histTitle);
01422             histFFT[i]->SetLineColor(AraPlotUtils::getNiceColour(i));
01423             histFFT[i]->Draw();
01424             if(histFFT[i]->GetXaxis()) {
01425                histFFT[i]->GetXaxis()->SetTitle("Frequency (MHz)");
01426                //         histFFT[i]->GetXaxis()->SetRangeUser(0,500);
01427             }
01428             if(histFFT[i]->GetYaxis()) {
01429                histFFT[i]->GetYaxis()->SetTitle("Power (dB?)");
01430             }
01431             histFFT[i]->SetStats(0);
01432             if(histFFT[i]->GetMinimum()<minVal) minVal=histFFT[i]->GetMinimum();
01433             if(histFFT[i]->GetMaximum()>maxVal) maxVal=histFFT[i]->GetMaximum();
01434 
01435             //  std::cout << histFFT[i]->GetMean() << "\t" << histFFT[i]->GetEntries() << "\n";
01436          }
01437       }
01438       for(int i=0;i<ANTS_PER_ICRR;i++) {
01439          if(histFFT[i]) {
01440             subPad.cd(i+1);
01441             if(histFFT[i]->GetYaxis()) {
01442                histFFT[i]->GetYaxis()->SetRangeUser(minVal-5,maxVal+5);
01443             }
01444          }
01445       }         
01446     
01447       sprintf(canName,"%s/canAverageFFT.png",dirName);
01448       unlink(canName);
01449       canAverageFFT.Print(canName);
01450       canAverageFFT.Clear();
01451       for(int i=0;i<ANTS_PER_ICRR;i++) {
01452          if(histFFT[i]) delete histFFT[i];
01453       } 
01454    }
01455 
01456 
01457    {
01458       char histTitle[180];
01459       TCanvas canAverageFFTTime("canAverageFFTTime","canAverageFFTTime",800,800);      
01460       TPaveText titlePave(0.02,0.95,0.98,0.98);      
01461       sprintf(histTitle,"Average Power Spectral Density Estimators for Run %d",fCurrentRun);
01462       titlePave.SetBorderSize(0);     
01463       titlePave.AddText(histTitle);      
01464       titlePave.Draw();  
01465       TPad subPad("subPad","subPad",0,0,1,0.95);                 
01466       subPad.Draw();      
01467       subPad.SetLogy(0);         
01468       subPad.Divide(4,4);
01469       TH2D *histFFTTime[ANTS_PER_ICRR]={0};
01470       Double_t minVal=1e9;
01471       Double_t maxVal=-1e9;
01472       for(int i=0;i<ANTS_PER_ICRR;i++) {
01473          //      std::cerr << i << fAverageFFTHisto[i] << "\n";
01474          histFFTTime[i]= fAverageFFTHisto[i]->getTimeColourHisto(fEarliestTime,fLatestTime,12);
01475          if(histFFTTime[i]) {
01476             subPad.cd(i+1);
01477             sprintf(histTitle,"Average PSD Chan %d",i+1);
01478             histFFTTime[i]->SetTitle(histTitle);
01479             histFFTTime[i]->SetLineColor(AraPlotUtils::getNiceColour(i));
01480             histFFTTime[i]->Draw("colz");
01481             if(histFFTTime[i]->GetYaxis()) {
01482                histFFTTime[i]->GetYaxis()->SetTitle("Frequency (MHz)");
01483             }
01484             if(histFFTTime[i]->GetZaxis()) {
01485                histFFTTime[i]->GetZaxis()->SetTitle("dB(?)");
01486             }
01487             if(histFFTTime[i]->GetXaxis()) {
01488                histFFTTime[i]->GetXaxis()->SetTitle("Time");
01489                histFFTTime[i]->GetXaxis()->SetTimeDisplay(1);
01490             }
01491             histFFTTime[i]->SetStats(0);
01492             if(histFFTTime[i]->GetMinimum()<minVal) minVal=histFFTTime[i]->GetMinimum();
01493             if(histFFTTime[i]->GetMaximum()>maxVal) maxVal=histFFTTime[i]->GetMaximum();
01494 
01495             //  std::cout << histFFTTime[i]->GetMean() << "\t" << histFFTTime[i]->GetEntries() << "\n";
01496          }
01497       }
01498       for(int i=0;i<ANTS_PER_ICRR;i++) {
01499          if(histFFTTime[i]) {
01500             subPad.cd(i+1);
01501             if(histFFTTime[i]->GetZaxis()) {
01502                histFFTTime[i]->GetZaxis()->SetRangeUser(5,maxVal+5);
01503             }
01504          }
01505       }
01506           
01507       
01508     
01509       sprintf(canName,"%s/canAverageFFTTime.png",dirName);
01510       unlink(canName);
01511       canAverageFFTTime.Print(canName);
01512       canAverageFFTTime.Clear();
01513       for(int i=0;i<ANTS_PER_ICRR;i++) {
01514          if(histFFTTime[i]) delete histFFTTime[i];
01515       } 
01516    }
01517 
01518 }

Generated on Mon Jun 3 16:10:04 2013 for ARA ROOT v3.9 Software by doxygen 1.4.7