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
