MagicDisplay.cxx
1 
31 #include "KeySymbols.h"
32 
33 //System includes
34 #include <fstream>
35 #include <iostream>
36 #include <sstream>
37 #include <stdlib.h>
38 
39 #include "CalibratedAnitaEvent.h"
40 
41 //Magic Display Includes
42 #include "MagicDisplay.h"
43 #include "WaveformGraph.h"
44 #include "AnitaCanvasMaker.h"
45 #include "AnitaRFCanvasMaker.h"
46 #include "AnitaGpsCanvasMaker.h"
47 #include "MagicControlPanel.h"
48 #include "FilteringPanel.h"
49 
50 //Event Reader Includes
51 #include "AnitaConventions.h"
52 #include "UsefulAnitaEvent.h"
53 #include "RawAnitaHeader.h"
54 #include "PrettyAnitaHk.h"
55 #include "TurfRate.h"
56 #include "SurfHk.h"
57 #include "SummedTurfRate.h"
58 #include "AveragedSurfHk.h"
59 #include "G12Pos.h"
60 #include "G12Sat.h"
61 #include "Adu5Pat.h"
62 #include "Adu5Sat.h"
63 #include "Adu5Vtg.h"
64 
65 //ROOT Includes
66 #include "TROOT.h"
67 #include "TCanvas.h"
68 #include "TTree.h"
69 #include "TFile.h"
70 #include "TTree.h"
71 #include "TTreeIndex.h"
72 #include "TButton.h"
73 #include "TGroupButton.h"
74 #include "TThread.h"
75 #include "TEventList.h"
76 #include <TGClient.h>
77 #include "TRootEmbeddedCanvas.h"
78 #include "TCut.h"
79 #include "TGMsgBox.h"
80 
81 #include "FilteredAnitaEvent.h"
82 #include "UCFilters.h"
83 #include "BasicFilters.h"
84 #include "AnalysisConfig.h"
85 #include "SystemResponse.h"
86 #include "AnalysisReco.h"
87 #include "AcclaimFilters.h"
88 using namespace std;
89 
91 AnitaCanvasMaker *fEventCanMaker=0;
92 AnitaRFCanvasMaker *fRFCanMaker=0;
93 AnitaGpsCanvasMaker *fGpsCanMaker=0;
94 
95 
96 
97 
98 void MagicDisplay::zeroPointers()
99 {
100 
101  fDataset = NULL;
102 
103  fApplyEventCut=0;
104  fOrderByEventNumber=1;
105  fEventCutListEntry=-1;
106  fEventTreeIndexEntry=-1;
107  // fHeadFile=0;
108  fEventEntry=0;
109  // fEventFile=0;
110  // fTurfRateFile=0;
111  // fSumTurfRateFile=0;
112  // fSurfHkFile=0;
113  // fAvgSurfHkFile=0;
114  fRawEventPtr=0;
115  fCalEventPtr=0;
116  fPatPtr=0;
117  fWhichEventFileKind=MagicDisplayFileType::kCalEvent;
118  fHeadPtr=0;
119  fHkPtr=0;
120  fAvgSurfPtr=0;
121  fSumTurfPtr=0;
122  fUsefulEventPtr=0;
123  fFilteredEventPtr=0;
124  fLastFilteredEventNumber = 0;
125  // fTurfRateTree=0;
126  fTurfPtr=0;
127  fSurfPtr=0;
128  fSurfHkEntry=0;
129  // fSurfHkTree=0;
130 
131  //GPS stuff
132  // fGpsFile=0;
133  // fG12PosTree=0;
134  // fG12SatTree=0;
135  // fAdu5aPatTree=0;
136  // fAdu5aSatTree=0;
137  // fAdu5aVtgTree=0;
138  // fAdu5bPatTree=0;
139  // fAdu5bSatTree=0;
140  // fAdu5bVtgTree=0;
141  fG12PosEntry=0;
142  fG12SatEntry=0;
143  fAdu5aPatEntry=0;
144  fAdu5aSatEntry=0;
145  fAdu5aVtgEntry=0;
146  fAdu5bPatEntry=0;
147  fAdu5bSatEntry=0;
148  fAdu5bVtgEntry=0;
149  fG12PosPtr=0;
150  fG12SatPtr=0;
151  fAdu5APatPtr=0;
152  fAdu5ASatPtr=0;
153  fAdu5AVtgPtr=0;
154  fAdu5BPatPtr=0;
155  fAdu5BSatPtr=0;
156  fAdu5BVtgPtr=0;
157  fGpsCanvas=0;
158  fGpsMainPad=0;
159  fGpsInfoPad=0;
160 
161  fMagicCanvas=0;
162  fMagicEventInfoPad=0;
163  fMagicMainPad=0;
164 
165  fTurfCanvas=0;
166  fTurfMainPad=0;
167  fTurfInfoPad=0;
168 
169  fSumTurfCanvas=0;
170  fSumTurfMainPad=0;
171  fSumTurfInfoPad=0;
172 
173  fSurfCanvas=0;
174  fSurfMainPad=0;
175  fSurfInfoPad=0;
176 
177  fAvgSurfCanvas=0;
178  fAvgSurfMainPad=0;
179  fAvgSurfInfoPad=0;
180 
181  fgInstance=this;
182  // fEventTree=0;
183  // fSurfHkTree=0;
184  // fTurfRateTree=0;
185  // fAvgSurfHkTree=0;
186  // fSumTurfRateTree=0;
187  fEventPlaySleepMs=0;
188 
189  fWaveformFormat=MagicDisplayFormatOption::kWaveform;
191 
192 
193  butFiltering = 0;
194  fFilteringPanel = 0;
195  fControlPanel = 0;
196  fInEventPlayMode = 0;
197 
198  initializeFilterStrategies();
199 
201  cfg->nmaxima=3;
204  fUCorr = new UCorrelator::Analyzer(cfg,true);
205 
206 }
207 
208 
209 
210 
211 
212 
213 
218 void MagicDisplay::initializeFilterStrategies(){
219 
220 
221  clearFilterStrategies();
223  FILE * f = fopen("ucfilters.cfg","r");
224 
225  if (!f)
226  {
227  char* installDir = getenv("ANITA_UTIL_INSTALL_DIR");
228  stringstream ucFilterFile;
229  ucFilterFile.str("");
230  ucFilterFile << installDir << "/bin/ucfilters.cfg";
231  f = fopen(ucFilterFile.str().c_str(),"r");
232  }
233 
234  char buf[128];
235  while(f && !feof(f))
236  {
237  fgets(buf,128,f);
238  //replace \n with 0
239  while (char * pos = strchr(buf,'\n')) *pos = 0;
240  //replace # with 0
241  while (char * pos = strchr(buf,'#')) *pos = 0;
242 
243  if (strlen(buf))
244  filterStrats[buf] = UCorrelator::getStrategyWithKey(buf);
245  }
246 
247  FilterStrategy* fNone = new FilterStrategy();
248  filterStrats["None"] = fNone;
249 
250  // Acclaim::Filters::generateFilterStrategies();
251  // FilterStrategy* fHybrid = new FilterStrategy();
252  // if (AnitaVersion::get()==3) fHybrid->addOperation(new ALFASincFilter);
253  // fHybrid->addOperation(new HybridFilter);
254  // filterStrats["hybrid"] = fHybrid;
255 
256  FilterStrategy* fSS = new FilterStrategy();
257  UCorrelator::fillStrategyWithKey(fSS, Acclaim::Filters::getCosminsFavouriteSineSubName());
258  filterStrats[Acclaim::Filters::getCosminsFavouriteSineSubName()] = fSS;
259 
260  // FilterStrategy* fSSPBW = new FilterStrategy();
261  // UCorrelator::fillStrategyWithKey(fSSPBW, Acclaim::Filters::getCosminsFavouriteSineSubName());
262  // FilterStrategy* stupidNotchStrat = Acclaim::Filters::findDefaultStrategy("BrickWallSatellites");
263  // for(unsigned i=0; i < stupidNotchStrat->nOperations(); i++){
264  // fSSPBW->addOperation((FilterOperation*)stupidNotchStrat->getOperation(i));
265  // }
266  // filterStrats["SineSubPlusBrickWall"] = fSSPBW;
267 
268  // it's important that this gets set here.
269  setFilterStrategy(fNone);
270 
271 }
272 
273 
274 void MagicDisplay::drawUCorrelatorFilterButtons()
275 {
276  // if (fStrategy == &no_filter_strategy) fWaveformButton->SetFillColor(kGray + 3);
277  // else fWaveformButton->SetFillColor(kGray);
278  // if (fStrategy == &default_strategy) fPowerButton->SetFillColor(kGray + 3);
279  // else fPowerButton->SetFillColor(kGray);
280 
281  // fWaveformButton->Modified();
282  // fPowerButton->Modified();
283 }
284 
285 void MagicDisplay::clearFilterStrategies()
286 {
287 
288  for (std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin(); it != filterStrats.end(); it++)
289  {
290  delete (*it).second;
291 
292  }
293 
294  filterStrats.clear();
295 }
296 
297 
298 void MagicDisplay::setFilterStrategy(FilterStrategy * s)
299 {
300  // FilterStrategy* lastStrat = fStrategy;
301  fStrategy = s;
302 
303  if(fFilteringPanel){
304  fFilteringPanel->selectMagicDisplayFilterInComboBox();
305  fFilteringPanel->updateText();
306  }
307 
308 
309  if(butFiltering){ // Prevent crash on startup
310 
311  bool foundIt = false;
312  std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin();
313  for(; it!= filterStrats.end(); it++)
314  {
315  if(it->second == fStrategy){
316  butFiltering->SetTitle(it->first);
317  foundIt = true;
318  break;
319  }
320  }
321 
322  if(!foundIt){
323  butFiltering->SetTitle("?????");
324  }
325  butFiltering->Modified(); // force update
326  butFiltering->Update(); // force update
327 
328  // if(lastStrat!=fStrategy){
329  this->refreshEventDisplay(true);
330  // }
331  }
332 
333 
334  //TODO: do a smarter job of this
335  // if (fCanvasLayout == MagicDisplayCanvasLayoutOption::kUCorrelator)
336  // {
337  // drawUCorrelatorFilterButtons();
338  // }
339 }
340 
341 
342 MagicDisplay::MagicDisplay() : TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame)
343 {
344  //Default constructor
345  fCurrentRun = 1;
346  zeroPointers();
347  prepareKeyboardShortcuts();
348  fDataDirectory= AnitaDataset::ANITA_ROOT_DATA;
349 
350 }
351 
353 {
354  //Default destructor
355  //
356  delete fUCorr;
357  if(fControlPanel){
358  delete fControlPanel;
359  }
360  if(fFilteringPanel){
361  delete fFilteringPanel;
362  }
363 
364  clearFilterStrategies();
365  fgInstance = 0;
366 }
367 
368 
369 MagicDisplay::MagicDisplay(const char *baseDir, int run, WaveCalType::WaveCalType_t calType, AnitaDataset::BlindingStrategy blinding) : TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame)
370 {
371  //Offline constructor
372  fCurrentRun=run;
373  zeroPointers();
374  prepareKeyboardShortcuts();
375  fDataDirectory= AnitaDataset::ANITA_ROOT_DATA;
376 
377  std::cout << "MagicDisplay::MagicDisplay(" << baseDir << " , " << run << ")" << std::endl;
378  strncpy(fCurrentBaseDir,baseDir,179);
379  fCalType=calType;
380  fBlindingStrategy = blinding;
381 
382  // AnitaDataset needs this, so set it
383  setenv("ANITA_ROOT_DATA", baseDir,1);
384 
385  //try to load wisdom
386  if (FILE * wf = fopen("magicwisdom.dat","r"))
387  {
388  fclose(wf);
389  FFTtools::loadWisdom("magicwisdom.dat");
390  }
391 
392 }
393 
394 MagicDisplay::MagicDisplay(int run, AnitaDataset::DataDirectory dir, WaveCalType::WaveCalType_t calType, AnitaDataset::BlindingStrategy blinding) : TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame)
395 {
396  //Offline constructor
397  fCurrentRun=run;
398  zeroPointers();
399  prepareKeyboardShortcuts();
400  int anita_version = (int) dir;
401  if (anita_version > 0) AnitaVersion::set(anita_version);
402  fDataDirectory = dir;
403 
404 
405  strncpy(fCurrentBaseDir, AnitaDataset::getDataDir(dir),179);
406  fCalType=calType;
407  fBlindingStrategy = blinding;
408  //try to load wisdom
409  if (FILE * wf = fopen("magicwisdom.dat","r"))
410  {
411  fclose(wf);
412  FFTtools::loadWisdom("magicwisdom.dat");
413  }
414 
415 }
416 
417 MagicDisplay::MagicDisplay(const char* playlist, AnitaDataset::DataDirectory dir, WaveCalType::WaveCalType_t calType, AnitaDataset::BlindingStrategy blinding) : TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame)
418 {
419  //Offline constructor
420  loadPlaylist(playlist);
421  fPlaylistEntry = 0;
422  fCurrentRun=getPlaylistRun();
423  zeroPointers();
424  prepareKeyboardShortcuts();
425  int anita_version = (int) dir;
426  if (anita_version > 0) AnitaVersion::set(anita_version);
427  fDataDirectory = dir;
428 
429 
430  strncpy(fCurrentBaseDir, AnitaDataset::getDataDir(dir),179);
431  fCalType=calType;
432  fBlindingStrategy = blinding;
433  fEventEntry=getPlaylistEvent();
434 
435  //try to load wisdom
436  if (FILE * wf = fopen("magicwisdom.dat","r"))
437  {
438  fclose(wf);
439  FFTtools::loadWisdom("magicwisdom.dat");
440  }
441 
442 }
443 
444 
445 
446 //______________________________________________________________________________
448 {
449  //static function
450  return (fgInstance) ? (MagicDisplay*) fgInstance : new MagicDisplay();
451 }
452 
454 {
455  fControlPanel = MagicControlPanel::Instance();
456 }
457 
458 
459 
461 {
462  fFilteringPanel = FilteringPanel::Instance();
463 }
464 
465 
467 {
468 
469  fEventCanMaker=new AnitaCanvasMaker(this->fCalType);
470  if(!fPlaylist.empty()){
471  loadDataset();
472  displayThisEvent(getPlaylistEvent(), getPlaylistRun());
473  }
474  else {
475  int retVal=this->getEventEntry();
476  if(retVal==0){
477  this->refreshEventDisplay();
478  }
479  }
480 }
481 
483 {
484  if(!fDataset) {
485  if(loadDataset()<0) {
486  std::cout << "Couldn't load data set file\n";
487  return -1;
488  }
489  }
490 
491  int retVal = 0;
492  if(fEventEntry >= 0){
493  fHeadPtr = fDataset->header();
494  fUsefulEventPtr = fDataset->useful();
495  fPatPtr = fDataset->gps();
496  }
497  else{
498  retVal = -1;
499  }
500 
501  return retVal;
502 }
503 
504 
506 {
507 
508  if(fDataset){
509  delete fDataset;
510  fDataset = NULL;
511  }
512 
513 }
514 
515 
516 // int MagicDisplay::loadEventTree()
518 {
519 
520 
521  fDataset = new AnitaDataset(fCurrentRun, false, fCalType,fDataDirectory, fBlindingStrategy);
522  if(fDataset->N() < 1){
523  cout << "Couldn't find dataset! << \n";
524  return -1;
525  }
526  std::cerr << fDataset->N() << std::endl;
527  return 0;
528 }
529 
530 
531 
532 // Don't think this does anything?
533 Bool_t MagicDisplay::HandleSelection(Event_t* event){
534  prepareKeyboardShortcuts();
535  std::cout << "here" << std::endl;
536  return TGMainFrame::HandleSelection(event);
537 }
538 
539 // // Here we grab all the keys we want...
540 void MagicDisplay::prepareKeyboardShortcuts(){
541 
542  gVirtualX->GrabKey(fId, kAnyKey, kAnyModifier, kTRUE);
543 
544  // fEditDisabled = kEditDisableGrab;
545 }
546 
548 static const int max_numeric_buf=9;
549 static int numeric_buf_index = 0;
550 static char numeric_buf[max_numeric_buf+1] = {0};
551 static int last_direction =0;
552 static int last_nskip=0;
553 
554 static int getNumeric()
555 {
556  if (numeric_buf_index == 0) return -1;
557  int ret =atoi(numeric_buf);
558  numeric_buf_index = 0;
559  memset(numeric_buf,0,sizeof(numeric_buf));
560 // printf("%d\n", ret);
561  return ret;
562 }
563 
564 
565 // Googling how to do this... look who turns up in the first results page!
566 // http://cozzyd.net/mt/cozzyd/2011/05/keyboard-bindings-in-the-root-gui-toolkit.html
567 // which does make me wonder why I'm the one doing this...
568 Bool_t MagicDisplay::HandleKey(Event_t * event)
569 {
570  // See ROOT's KeySymbols.h for the complete list...
571 
572 
573  int evN = 0;
574  int start_index = numeric_buf_index;
575 
576  if (event->fType == kGKeyPress){
577  //Look up the key
578  UInt_t keysym;
579  char tmp[2];
580  gVirtualX->LookupString(event,tmp,sizeof(tmp),keysym);
581 
582  switch(keysym)
583  {
584 
585  case kKey_0:
586  case kKey_1:
587  case kKey_2:
588  case kKey_3:
589  case kKey_4:
590  case kKey_5:
591  case kKey_6:
592  case kKey_7:
593  case kKey_8:
594  case kKey_9:
595  numeric_buf_index = numeric_buf_index % max_numeric_buf;
596  numeric_buf[numeric_buf_index++] = '0' + keysym - kKey_0;
597  break;
598 
599  case kKey_Left:
600  case kKey_j:
601  case kKey_J:
602  last_nskip = getNumeric()-1;
603  last_direction=-1;
604  displayPreviousEvent(last_nskip);
605  break;
606  case kKey_Right:
607  case kKey_k:
608  case kKey_K:
609  last_nskip = getNumeric()-1;
610  last_direction=1;
611  displayNextEvent(last_nskip);
612  break;
613 
614  case kKey_Space:
615  if(fInEventPlayMode){
617  }
618  else{
620  }
621  break;
622  case kKey_Backspace:
623  if(fInEventPlayMode){
625  }
626  else{
628  }
629  break;
630 
631  case kKey_v:
632  case kKey_V:
635  break;
636 
637  case kKey_h:
638  case kKey_H:
641  break;
642 
643  case kKey_x:
644  case kKey_X:
647  break;
648 
649 
650  case kKey_s:
651  case kKey_S:
654  break;
655 
656 
657  case kKey_i:
658  case kKey_I:
659  setCanvasLayout(MagicDisplayCanvasLayoutOption::kInterferometry);
661  break;
662 
663 
664  case kKey_u:
665  case kKey_U:
666  setCanvasLayout(MagicDisplayCanvasLayoutOption::kUCorrelator);
668  break;
669 
670 
671  case kKey_Tab:
672  setNextFilter();
673 // refreshEventDisplay();// This is redundant!
674  break;
675 
676 
677  case kKey_F:
678  case kKey_f:
680  break;
681 
682  case kKey_T:
683  case kKey_t: // toggle time/freq/stokes domain representation
684  if(fCanvasLayout==MagicDisplayCanvasLayoutOption::kInterferometry){
685  switch(Acclaim::AnalysisReco::DrawDomain d = getAnalysisReco().GetEnumDrawDomain()){
686  case Acclaim::AnalysisReco::kTimeDomain:
687  getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kFreqDomain);
688  break;
689  case Acclaim::AnalysisReco::kFreqDomain:
690  getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kStokesParams);
691  break;
692  case Acclaim::AnalysisReco::kStokesParams:
693  getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kTimeDomain);
694  break;
695  }
696  swapWaveformButtonFunctionsAndTitles(MagicDisplayCanvasLayoutOption::kInterferometry);
698  }
699  break;
700 
701  case kKey_L:
702  case kKey_l: // l is for load history
703  // for interferometry, load the history if there's a RayleighMonitor type filter
704  // if(fCanvasLayout==MagicDisplayCanvasLayoutOption::kInterferometry){
705  {
706  FilterStrategy* fs = getStrategy();
707  for(unsigned i=0; i < fs->nOperations(); i++){
708  const Acclaim::Filters::RayleighMonitor* rmConst = dynamic_cast<const Acclaim::Filters::RayleighMonitor*>(fs->getOperation(i));
709  if(rmConst){
710  const Acclaim::FourierBuffer* fb = rmConst->getFourierBuffer();
711  fb->setForceLoadHistory(true);
712  refreshEventDisplay(true);
713  }
714  }
715  }
716  break;
717 
718 
719  case kKey_G:
720  case kKey_g:
721  evN = getNumeric();
722  if (evN >= 0)
723  {
725  }
726  else
727  {
729  }
730  break;
731 
732  case kKey_W:
733  case kKey_w:
734  fMagicCanvas->SaveAs(TString::Format("run%d_ev%d_a%d_%s_%s_%s.png",
735  getCurrentRun(), getCurrentEvent(), AnitaVersion::get(),
736  MagicDisplayCanvasLayoutOption::toString(fCanvasLayout),
737  MagicDisplayFormatOption::toString(fWaveformFormat),
738  butFiltering->GetTitle()));
739  break;
740 
741  case kKey_D:
742  case kKey_d:
743  {
744  dumpWaveformsForPeter();
745  }
746  break;
747 
748  case kKey_Period:
749  if (last_direction == 1) displayNextEvent(last_nskip);
750  if (last_direction ==-1) displayPreviousEvent(last_nskip);
751  break;
752 
753  case kKey_NumberSign:
754  FFTtools::saveWisdom("magicwisdom.dat");
755 
756  break;
757 
758  case kKey_Question:
759  new TGMsgBox(gClient->GetRoot(),0,"MagicDisplay key bindings",
760  "Key bindings are case-insensitive. Also, this is a modal dialog so you must dismiss it!\n\n"
761  "[left]/j: previous\n"
762  "[right]/k: next\n"
763  "[space]: start/stop play\n"
764  "[bksp] play reverse\n"
765  "v: show vpol\n"
766  "h: show hpol\n"
767  "x: show both pols\n"
768  "s: show surf\n"
769  "i: show interferometry\n"
770  "u: show UCorrelator\n"
771  "[tab]:cycle filter\n"
772  "f: show filter panel\n"
773  "g: goto event\n"
774  "w: save canvas image to currentdir\n"
775  "[0-9]*: vi-like numerical modifier for jkg\n"
776  "n: find neutrinos (not implemented yet)\n"
777  ".: repeat last movement command\n"
778  "#: save wisdom to currentdir\n"
779  "?: show keybindings"
780  ,0, kMBDismiss,0, kVerticalFrame, kTextLeft | kTextTop);
781 
782 
783  default:
784  break;
785  }
786 
787  //consume the number
788  if (numeric_buf_index == start_index)
789  getNumeric();
790 
791  // if(event->fState & kKeyControlMask){
792  // std::cout << "Ctrl+";
793  // }
794  // std::cout << keysym << std::endl;
795  }
796  //Children must get their key events too
797 
798  if (!fBindList) return kFALSE;
799 
800  TIter next(fBindList);
801  TGMapKey *m;
802  TGFrame *w = 0;
803 
804  while ((m = (TGMapKey *) next()))
805  {
806  if (m->fKeyCode == event->fCode)
807  {
808  w = (TGFrame *) m->fWindow;
809  if (w->HandleKey(event)) return kTRUE;
810  }
811  }
812 
813  return kFALSE;
814 }
815 
816 
818 {
819  if(!fMagicCanvas) {
820  // fMainFrame = new TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame);
821  // fMainFrame->Connect("HandleKey(Event_t*)", "MagicDisplay", this, "doKeyboardShortcut(Event_t*)");
822  // fMagicEmbedded = new TRootEmbeddedCanvas("canMagic", fMainFrame, 1200, 800);
823  // fMagicEmbedded = new TRootEmbeddedCanvas("canEmbeddedMagic", this, 1200, 800);
824  fMagicEmbedded = new AnitaEmbeddedCanvas("canEmbeddedMagic", this, 1200, 800);
825 
826  // prepareKeyboardShortcuts(); // do this here to grab keys back from the embedded canvas?
827  this->AddFrame(fMagicEmbedded, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
828  this->SetWindowName("MAGIC Display");
829  this->MapSubwindows();
830  this->Resize();
831  this->MapRaised();
832 
833 
834  // fMainFrame = new TGMainFrame(gClient->GetRoot(),1200,800,kVerticalFrame);
835  // fMainFrame->Connect("HandleKey(Event_t*)", "MagicDisplay", this, "doKeyboardShortcut(Event_t*)");
836  // fMagicEmbedded = new TRootEmbeddedCanvas("canMagic", fMainFrame, 1200, 800);
837  // fMainFrame->AddFrame(fMagicEmbedded, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
838  // fMainFrame->SetWindowName("MAGIC Display");
839  // fMainFrame->MapSubwindows();
840  // // fMainFrame->Connect("CloseWindow()", "MagicDisplay", this, "closeWindow()");
841  // fMainFrame->Resize();
842  // fMainFrame->MapRaised();
843 
844 
845  fMagicCanvas = fMagicEmbedded->GetCanvas();
846 
847  // fMagicCanvas->Connect(
848  // fMagicCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)", "MagicDisplay", this,
849  // "doKeyboardShortcut(Int_t,Int_t,Int_t)");
850  // fMagicCanvas->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)", 0, 0,
851  // "MagicDisplay::doKeyboardShortcut(Int_t,Int_t,Int_t)");
852 
853  fMagicCanvas->SetName("canMagic");
854  fMagicCanvas->cd();
856  }
857  // if(!fMagicCanvas) {
858  // fMagicCanvas = new TCanvas("canMagic","canMagic",1200,800);
859  // fMagicCanvas->cd();
860  // drawEventButtons();
861  // }
862 
863  if(!fMagicMainPad) {
864  fMagicCanvas->cd();
865  fMagicMainPad= new TPad("canMagicMain","canMagicMain",0,0,1,0.9);
866 
867  fMagicMainPad->Draw();
868  fMagicCanvas->Update();
869  }
870  if(!fMagicEventInfoPad) {
871  fMagicCanvas->cd();
872  fMagicEventInfoPad= new TPad("canMagicEventInfo","canMagicEventInfo",0.2,0.91,0.8,0.99);
873  fMagicEventInfoPad->Draw();
874  fMagicCanvas->Update();
875  }
876  // fMagicMainPad->Clear();
877 
878 
879  //This will need to change
880 
881  fEventCanMaker->setWaveformFormat(fWaveformFormat);
882  fEventCanMaker->setCanvasLayout(fCanvasLayout);
883  // fEventCanMaker->setInterferometryTypeFlags(fInterferometryMapMode, fInterferometryZoomMode);
884 
885 
886  // fEventCanMaker->getEventViewerCanvas(fUsefulEventPtr,fHeadPtr,fMagicMainPad);
887  // fEventCanMaker->getEventViewerCanvas(fUsefulEventPtr,fHeadPtr,fPatPtr, fMagicMainPad, forceRedo);
888 
889  // if we have a filtered event...
890  if(fFilteredEventPtr){
891  // and either the strategy or event number has changed, then delete it
892  // std::cerr << fFilteredEventPtr->getStrategy() << "\t" << getStrategy() << std::endl;
893  // std::cerr << fHeadPtr->eventNumber << "\t" << fLastFilteredEventNumber << std::endl;
894  if(fFilteredEventPtr->getStrategy() != getStrategy() ||
895  fHeadPtr->eventNumber != fLastFilteredEventNumber)
896  {
897  delete fFilteredEventPtr;
898  fFilteredEventPtr = NULL;
899  }
900  }
901  // std::cerr << "here\t" << fFilteredEventPtr << "\t" << fUsefulEventPtr << "\t" << getStrategy() << "\t" << fPatPtr << "\t" << fHeadPtr << std::endl;
902  if(!fFilteredEventPtr){
903  fFilteredEventPtr = new FilteredAnitaEvent(fUsefulEventPtr, getStrategy(), fPatPtr, fHeadPtr);
904  fLastFilteredEventNumber = fHeadPtr->eventNumber;
905  // std::cerr << "new filtered event " << std::endl;
906  }
907 
908  fEventCanMaker->getEventViewerCanvas(fFilteredEventPtr, fMagicMainPad, forceRedo);
909  fEventCanMaker->getEventInfoCanvas(fUsefulEventPtr,fHeadPtr,fPatPtr,fMagicEventInfoPad);
910 
911  fMagicCanvas->Update();
912 }
913 
914 
915 
916 
917 
918 
919 void MagicDisplay::setNextFilter(){
920  // this is mostly for a keyboard cut to cycle through the available filters...
921 
922  std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin();
923  bool selectThisOne = false;
924 
925  for(; it!=filterStrats.end(); ++it){
926 
927  if(selectThisOne){
928  setFilterStrategy(it->second);
929  selectThisOne = false;
930  break;
931  }
932 
933  if(it->second == fStrategy){
934  // we want to select the next one...
935  selectThisOne = true;
936  }
937  }
938 
939  if(selectThisOne==true){
940  it = filterStrats.begin();
941  setFilterStrategy(it->second);
942  }
943 }
944 
945 
946 void MagicDisplay::applyCut(const char *cutString)
947 {
948  if(cutString==NULL){
949  fApplyEventCut=0;
950  }
951 
952  if(!fDataset) {
953  if(loadDataset()<0) {
954  std::cout << "Couldn't load dataset\n";
955  }
956  }
957  else{
958  fDataset->setCut(TCut(cutString));
959  fApplyEventCut = 1;
960  }
961 }
962 
964 
965  if(!fPlaylist.empty())
966  {
967  fPlaylistEntry++;
968  if(fPlaylistEntry > (int)fPlaylist.size() - 1)
969  {
970  fprintf(stderr, "reached end of playlist, looping around\n");
971  fPlaylistEntry = 0;
972  }
973  int retVal = displayThisEvent(getPlaylistEvent(), getPlaylistRun());
974 
975  return retVal;
976  }
977 
978  if(fApplyEventCut==0){
979  for (int i = 0; i < nskip; i++) fDataset->next(); //TODO skip properly
980  fEventEntry = fDataset->next();
981  }
982  else{
983  for (int i = 0; i < nskip; i++) fDataset->nextInCut();
984 
985  fEventEntry = fDataset->nextInCut();
986  }
987  int retVal = getEventEntry();
988  if(retVal==0){
990  }
991 
992  return retVal;
993 }
994 
995 
997 
998  if(fApplyEventCut==0){
999  fEventEntry = fDataset->first();
1000  }
1001  else{
1002  fEventEntry = fDataset->firstInCut();
1003  }
1004  int retVal = getEventEntry();
1005  if(retVal==0){
1007  }
1008 
1009  return retVal;
1010 }
1011 
1012 
1014 
1015  if(fApplyEventCut==0){
1016  fEventEntry = fDataset->last();
1017  }
1018  else{
1019  fEventEntry = fDataset->lastInCut();
1020  }
1021  int retVal = getEventEntry();
1022  if(retVal==0){
1024  }
1025 
1026  return retVal;
1027 }
1028 
1029 
1031 
1032  if(!fPlaylist.empty())
1033  {
1034  fPlaylistEntry--;
1035  if(fPlaylistEntry < 0)
1036  {
1037  fprintf(stderr, "reached end of playlist, looping around\n");
1038  fPlaylistEntry = fPlaylist.size() - 1;
1039  }
1040  int retVal = displayThisEvent(getPlaylistEvent(), getPlaylistRun());
1041 
1042  return retVal;
1043  }
1044 
1045  if(fApplyEventCut==0){
1046  for (int i = 0; i < nskip; i++) fDataset->previous(); //TODO skip properly
1047  fEventEntry = fDataset->previous();
1048  }
1049  else{
1050  for (int i = 0; i < nskip; i++) fDataset->previousInCut(); //TODO skip properly
1051  fEventEntry = fDataset->previousInCut();
1052  }
1053  int retVal = getEventEntry();
1054  if(retVal==0){
1056  }
1057  return retVal;
1058 }
1059 
1060 
1061 
1062 int MagicDisplay::displayThisEvent(UInt_t eventNumber, Int_t run){
1063 
1064  if(run < 0){
1065  run = AnitaDataset::getRunContainingEventNumber(eventNumber);
1066  }
1067 
1068  std::cout << "displayThisEvent: " << eventNumber << "\t" << run << std::endl;
1069 
1070  if(fCurrentRun != (UInt_t)run) {
1071  std::cout << "\t" << fCurrentRun << "\t" << run << std::endl;
1072  closeCurrentRun();
1073  fCurrentRun=run;
1074  // loadEventTree();
1075  loadDataset();
1076  }
1077 
1078  if(!fEventCanMaker){
1080  }
1081 
1082  if(!fDataset){
1083  std::cerr << "Error! Couldn't find dataset" << std::endl;
1084  }
1085  else{
1086  fEventEntry = fDataset->getEvent(eventNumber);
1087  }
1088  int retVal=getEventEntry();
1089  if(retVal==0){
1091  }
1092 
1093  return retVal;
1094 }
1095 
1097  TButton *butNext = new TButton("Next ","MagicDisplay::Instance()->displayNextEvent();",0.95,0.975,1,1);
1098  butNext->SetTextSize(0.5);
1099  butNext->SetFillColor(kGreen-10);
1100  butNext->Draw();
1101  TButton *butPrev = new TButton("Prev.","MagicDisplay::Instance()->displayPreviousEvent();",0.95,0.95,1,0.975);
1102  butPrev->SetTextSize(0.5);
1103  butPrev->SetFillColor(kBlue-10);
1104  butPrev->Draw();
1105  TButton *butFirst = new TButton("First ","MagicDisplay::Instance()->displayFirstEvent();",0.95,0.925,1,0.95);
1106  butFirst->SetTextSize(0.5);
1107  butFirst->SetFillColor(kOrange+10);
1108  butFirst->Draw();
1109  TButton *butLast = new TButton("Last","MagicDisplay::Instance()->displayLastEvent();",0.95,0.90,1,0.925);
1110  butLast->SetTextSize(0.5);
1111  butLast->SetFillColor(kViolet-10);
1112  butLast->Draw();
1113 
1114 
1115  TButton *butPlay = new TButton("Play","MagicDisplay::Instance()->startEventPlaying();",0.9,0.97,0.95,1);
1116  butPlay->SetTextSize(0.5);
1117  butPlay->SetFillColor(kGreen-10);
1118  butPlay->Draw();
1119  TButton *butPlayRev = new TButton("Rev ","MagicDisplay::Instance()->startEventPlayingReverse();",0.9,0.94,0.95,0.97);
1120  butPlayRev->SetTextSize(0.5);
1121  butPlayRev->SetFillColor(kBlue-10);
1122  butPlayRev->Draw();
1123  TButton *butStop = new TButton("Stop","MagicDisplay::Instance()->stopEventPlaying();",0.90,0.90,0.95,0.94);
1124  butStop->SetTextSize(0.5);
1125  butStop->SetFillColor(kRed-10);
1126  butStop->Draw();
1127  TButton *butReset = new TButton("Reset Avg","AnitaCanvasMaker::Instance()->resetAverage();",0.85,0.975,0.90,1);
1128  butReset->SetTextSize(0.5);
1129  butReset->SetFillColor(kViolet-10);
1130  butReset->Draw();;
1131  TButton *butGoto = new TButton("Go to Event","MagicDisplay::Instance()->startControlPanel();",0.85,0.95,0.9,0.975);
1132  butGoto->SetTextSize(0.5);
1133  butGoto->SetFillColor(kOrange);
1134  butGoto->Draw();
1135 
1136  fTimeEntryButton= new TButton("Event#","MagicDisplay::Instance()->toggleTimeEventOrdering();",0.85,0.925,0.9,0.95);
1137  fTimeEntryButton->SetTextSize(0.5);
1138  fTimeEntryButton->SetFillColor(kGray);
1139  fTimeEntryButton->Draw();
1140 
1141 
1142  butFiltering = new TButton("Filtering","MagicDisplay::Instance()->startFilteringPanel();",0.85,0.9,0.9,0.925);
1143  bool foundIt = false;
1144  std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin();
1145  for(; it!= filterStrats.end(); it++)
1146  {
1147  if(it->second == fStrategy){
1148  butFiltering->SetTitle(it->first);
1149  foundIt = true;
1150  break;
1151  }
1152  }
1153  if(!foundIt){
1154  butFiltering->SetTitle("?????");
1155  }
1156  // TButton *butFiltering = new TButton("Filtering","MagicDisplay::Instance()->startFilteringPanel();",0.85,0.9,0.9,0.925);
1157  // TButton *butFiltering = new TButton("Filtering","std::cout << \"some words\" << std::endl;",0.85,0.9,0.9,0.925);
1158  butFiltering->SetTextSize(0.5);
1159  butFiltering->SetFillColor(kYellow);
1160  butFiltering->Draw();
1161 
1162 
1163 
1164 
1165  fVertButton = new TButton("V","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kPhiVerticalOnly); MagicDisplay::Instance()->refreshEventDisplay();",0,0.966,0.05,1);
1166  fVertButton->SetTextSize(0.5);
1167  fVertButton->SetFillColor(kGray+3);
1168  fVertButton->Draw();
1169  fHorizButton = new TButton("H","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kPhiHorizontalOnly); MagicDisplay::Instance()->refreshEventDisplay();",0,0.933,0.05,0.966);
1170  fHorizButton->SetTextSize(0.5);
1171  fHorizButton->SetFillColor(kGray);
1172  fHorizButton->Draw();
1173  fBothButton = new TButton("V&H","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kPhiCombined); MagicDisplay::Instance()->refreshEventDisplay();",0,0.90,0.05,0.933);
1174  fBothButton->SetTextSize(0.5);
1175  fBothButton->SetFillColor(kGray);
1176  fBothButton->Draw();
1177  fSurfButton = new TButton("SURF","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kSurfOnly); MagicDisplay::Instance()->refreshEventDisplay();",0.05,0.966,0.1,1);
1178  fSurfButton->SetTextSize(0.5);
1179  fSurfButton->SetFillColor(kGray);
1180  fSurfButton->Draw();
1181  // fPayloadButton = new TButton("Payload","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kPayloadView); MagicDisplay::Instance()->refreshEventDisplay();",0.05,0.933,0.1,0.966);
1182  fPayloadButton = new TButton("Payload","std::cout << \"Sorry. Payload view currently disabled for ANITA-3.\" << std::endl;",0.05,0.933,0.1,0.966);
1183  fPayloadButton->SetTextSize(0.5);
1184  fPayloadButton->SetFillColor(kGray);
1185  fPayloadButton->Draw();
1186 
1187  fInterferometryButton = new TButton("Interferometry","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kInterferometry); MagicDisplay::Instance()->refreshEventDisplay();",0.05,0.9,0.1,0.933);
1188  fInterferometryButton->SetTextSize(0.33);
1189  fInterferometryButton->SetFillColor(kGray);
1190  fInterferometryButton->Draw();
1191 
1193  fUCorrelatorButton = new TButton("UCorrelator","MagicDisplay::Instance()->setCanvasLayout(MagicDisplayCanvasLayoutOption::kUCorrelator); MagicDisplay::Instance()->refreshEventDisplay();",0.05,0.933,0.1,0.966);
1194  fUCorrelatorButton->SetTextSize(0.33);
1195  fUCorrelatorButton->SetFillColor(kGray);
1196  fUCorrelatorButton->Draw();
1197 
1198 
1199 
1200  //NEW BUTTONS
1201  fWaveformButton = new TButton("Waveform","MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kWaveform); MagicDisplay::Instance()->refreshEventDisplay();",0.1,0.975,0.2,1);
1202  fWaveformButton->SetTextSize(0.4);
1203  fWaveformButton->SetFillColor(kGray+3);
1204  fWaveformButton->Draw();
1205  fPowerButton = new TButton("FFT","MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kFFT); MagicDisplay::Instance()->refreshEventDisplay();",0.1,0.95,0.2,0.975);
1206  fPowerButton->SetTextSize(0.4);
1207  fPowerButton->SetFillColor(kGray);
1208  fPowerButton->Draw();
1209  fHilbertButton = new TButton("Hilbert","MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kHilbertEnvelope); MagicDisplay::Instance()->refreshEventDisplay();",0.1,0.925,0.2,0.95);
1210  fHilbertButton->SetTextSize(0.4);
1211  fHilbertButton->SetFillColor(kGray);
1212  fHilbertButton->Draw();
1213  fAverageFFTButton = new TButton("Average FFT","MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kAveragedFFT); MagicDisplay::Instance()->refreshEventDisplay();",0.1,0.9,0.2,0.925);
1214  fAverageFFTButton->SetTextSize(0.4);
1215  fAverageFFTButton->SetFillColor(kGray);
1216  fAverageFFTButton->Draw();
1217 
1218 
1219 }
1220 
1221 
1222 
1223 // void MagicDisplay::setInterferometryTypeFlags(AnalysisReco::mapMode_t mapMode, AnalysisReco::zoomMode_t zoomMode){
1224 
1225 // fInterferometryZoomMode = zoomMode;
1226 // if(zoomMode==AnalysisReco::kZoomedIn){
1227 // fInterferometryMapMode = AnalysisReco::kTriggered;
1228 // }
1229 // else{
1230 // fInterferometryMapMode = mapMode;
1231 // }
1232 // if(fInterferometryMapMode==AnalysisReco::kGlobal) {
1233 // fWaveformButton->SetFillColor(kGray+3);
1234 // fPowerButton->SetFillColor(kGray);
1235 // fHilbertButton->SetFillColor(kGray);
1236 // fAverageFFTButton->SetFillColor(kGray);
1237 // fWaveformButton->Modified();
1238 // fPowerButton->Modified();
1239 // fHilbertButton->Modified();
1240 // fAverageFFTButton->Modified();
1241 // }
1242 // else if(fInterferometryZoomMode==AnalysisReco::kZoomedOut) {
1243 // fWaveformButton->SetFillColor(kGray);
1244 // fPowerButton->SetFillColor(kGray+3);
1245 // fHilbertButton->SetFillColor(kGray);
1246 // fAverageFFTButton->SetFillColor(kGray);
1247 // fWaveformButton->Modified();
1248 // fPowerButton->Modified();
1249 // fHilbertButton->Modified();
1250 // fAverageFFTButton->Modified();
1251 // }
1252 // else if(fInterferometryZoomMode==AnalysisReco::kZoomedIn &&
1253 // fInterferometryMapMode==AnalysisReco::kTriggered) {
1254 // //Turn fft view on
1255 // fWaveformButton->SetFillColor(kGray);
1256 // fPowerButton->SetFillColor(kGray);
1257 // fHilbertButton->SetFillColor(kGray+3);
1258 // fAverageFFTButton->SetFillColor(kGray);
1259 // fWaveformButton->Modified();
1260 // fPowerButton->Modified();
1261 // fHilbertButton->Modified();
1262 // fAverageFFTButton->Modified();
1263 // }
1264 
1265  // std::cout << fInterferometryMapMode << "\t" << fInterferometryZoomMode << std::endl;
1266 
1267 // }
1268 
1269 
1270 // FilterStrategy * MagicDisplay::getNoFilterStrategy() { return &no_filter_strategy; }
1271 // FilterStrategy * MagicDisplay::getDefaultFilterStrategy() { return &default_strategy; }
1272 // FilterStrategy * MagicDisplay::getNoFilterStrategy() { return filterStrats["NoFilter"]; }
1273 // FilterStrategy * MagicDisplay::getDefaultFilterStrategy() { return filterStrats["SineSubtract"];}
1274 
1275 
1276 void MagicDisplay::swapWaveformButtonFunctionsAndTitles(MagicDisplayCanvasLayoutOption::MagicDisplayCanvasLayoutOption_t option){
1277 
1278  fWaveformButton->SetFillColor(kGray);
1279  fPowerButton->SetFillColor(kGray);
1280  fHilbertButton->SetFillColor(kGray);
1281  fAverageFFTButton->SetFillColor(kGray);
1282 
1283  if(option==MagicDisplayCanvasLayoutOption::kInterferometry){
1284 
1285  const TString magicPtr = "MagicDisplay* x = MagicDisplay::Instance();";
1286  const TString refreshButtons = "x->swapWaveformButtonFunctionsAndTitles(MagicDisplayCanvasLayoutOption::kInterferometry);";
1287  const TString refreshDisplay = "x->refreshEventDisplay();";
1288 
1289  const int deltaColor = 2;
1290  // do nothing, unset all buttons
1291  Int_t buttonColor = kGray + (getAnalysisReco().GetEnumDrawDomain()==Acclaim::AnalysisReco::kTimeDomain ? deltaColor : 0);
1292  fWaveformButton->SetFillColor(buttonColor);
1293 
1294  buttonColor = kGray + (getAnalysisReco().GetEnumDrawDomain()==Acclaim::AnalysisReco::kFreqDomain ? deltaColor : 0);
1295  fPowerButton->SetFillColor(buttonColor);
1296 
1297  buttonColor = kGray + (getAnalysisReco().GetEnumDrawDomain()==Acclaim::AnalysisReco::kStokesParams ? deltaColor : 0);
1298  fHilbertButton->SetFillColor(buttonColor);
1299 
1300  fWaveformButton->Modified();
1301  fPowerButton->Modified();
1302  fHilbertButton->Modified();
1303  fAverageFFTButton->Modified();
1304 
1305  fWaveformButton->SetTitle("Time domain");
1306  fWaveformButton->SetMethod("{" + magicPtr + "x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kTimeDomain);" + refreshButtons + refreshDisplay + "}");
1307  fWaveformButton->SetTextSize(0.4);
1308 
1309  fPowerButton->SetTitle("Freq domain");
1310  fPowerButton->SetMethod("{" + magicPtr + "x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kFreqDomain);" + refreshButtons + refreshDisplay + "}");
1311  fPowerButton->SetTextSize(0.4);
1312 
1313  fHilbertButton->SetTitle("Stokes");
1314  fHilbertButton->SetMethod("{" + magicPtr + "x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kStokesParams);" + refreshButtons + refreshDisplay + "}");
1315  fHilbertButton->SetTextSize(0.4);
1316 
1317  TString methodForCrossPol;
1318  if(getAnalysisReco().GetDrawXPol()==0 && getAnalysisReco().GetDrawXPolDedispersed()==0){
1319  methodForCrossPol = "x->getAnalysisReco().SetDrawXPol(1);";
1320  fAverageFFTButton->SetFillColor(kGray);
1321  }
1322  else if(getAnalysisReco().GetDrawXPol() > 0 && getAnalysisReco().GetDrawXPolDedispersed()==0){
1323  methodForCrossPol = "x->getAnalysisReco().SetDrawXPolDedispersed(1); x->getAnalysisReco().SetDrawXPol(0);";
1324  fAverageFFTButton->SetFillColor(kGray+1);
1325  }
1326  else if(getAnalysisReco().GetDrawXPol() == 0 && getAnalysisReco().GetDrawXPolDedispersed() > 0){
1327  methodForCrossPol = "x->getAnalysisReco().SetDrawXPol(1);";
1328  fAverageFFTButton->SetFillColor(kGray+2);
1329  }
1330  else{ // they're both on...,
1331  methodForCrossPol = "x->getAnalysisReco().SetDrawXPol(0); x->getAnalysisReco().SetDrawXPolDedispersed(0);";
1332  fAverageFFTButton->SetFillColor(kGray+3);
1333  }
1334 
1335  fAverageFFTButton->SetTitle("Cross-pol");
1336  fAverageFFTButton->SetMethod("{" + magicPtr + methodForCrossPol + refreshButtons + refreshDisplay + "}");
1337  fAverageFFTButton->SetTextSize(0.4);
1338  }
1339  else if (option == MagicDisplayCanvasLayoutOption::kUCorrelator)
1340  {
1341  fWaveformButton->SetTitle("");
1342  fWaveformButton->SetMethod("std::cout << \"Sorry Cosmin, I broke your buttons. Use the TAB key instead...\" << std::endl;");
1343  // fWaveformButton->SetMethod("MagicDisplay::Instance()->setFilterStrategy(MagicDisplay::Instance()->getNoFilterStrategy()); MagicDisplay::Instance()->refreshEventDisplay();");
1344  // fWaveformButton->SetTextSize(0.4);
1345 
1346 
1347  fPowerButton->SetTitle("");
1348  fPowerButton->SetMethod("std::cout << \"Sorry Cosmin, I broke your buttons. Use the TAB key instead...\" << std::endl;");
1349  // fPowerButton->SetMethod("MagicDisplay::Instance()->setFilterStrategy(MagicDisplay::Instance()->getDefaultFilterStrategy()); MagicDisplay::Instance()->refreshEventDisplay();");
1350  // fPowerButton->SetTextSize(0.4);
1351 
1352  fHilbertButton->SetTitle("");
1353  fHilbertButton->SetMethod("");
1354  fHilbertButton->SetTextSize(0.4);
1355 
1356  fAverageFFTButton->SetTitle("");
1357  fAverageFFTButton->SetMethod("");
1358  fAverageFFTButton->SetTextSize(0.4);
1359 
1360  drawUCorrelatorFilterButtons();
1361 
1362  }
1363  else{
1364  fWaveformButton->SetTitle("Waveform");
1365  fWaveformButton->SetMethod("MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kWaveform); MagicDisplay::Instance()->refreshEventDisplay();");
1366  fWaveformButton->SetTextSize(0.4);
1367 
1368  fPowerButton->SetTitle("FFT");
1369  fPowerButton->SetMethod("MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kFFT); MagicDisplay::Instance()->refreshEventDisplay();");
1370  fPowerButton->SetTextSize(0.4);
1371 
1372  fHilbertButton->SetTitle("Hilbert");
1373  fHilbertButton->SetMethod("MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kHilbertEnvelope); MagicDisplay::Instance()->refreshEventDisplay();");
1374  fHilbertButton->SetTextSize(0.4);
1375 
1376  fAverageFFTButton->SetTitle("Average FFT");
1377  fAverageFFTButton->SetMethod("MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kAveragedFFT); MagicDisplay::Instance()->refreshEventDisplay();");
1378  fAverageFFTButton->SetTextSize(0.4);
1379  }
1380  fWaveformButton->Modified();
1381  fPowerButton->Modified();
1382  fHilbertButton->Modified();
1383  fAverageFFTButton->Modified();
1384 
1385 }
1386 
1387 
1389 {
1390  fCanvasLayout=option;
1391  swapWaveformButtonFunctionsAndTitles(fCanvasLayout);
1392 
1393  switch(option) {
1395  fVertButton->SetFillColor(kGray);
1396  fHorizButton->SetFillColor(kGray);
1397  fBothButton->SetFillColor(kGray);
1398  fSurfButton->SetFillColor(kGray+3);
1399  fPayloadButton->SetFillColor(kGray);
1400  fInterferometryButton->SetFillColor(kGray);
1401  fUCorrelatorButton->SetFillColor(kGray);
1402  break;
1404  fVertButton->SetFillColor(kGray+3);
1405  fHorizButton->SetFillColor(kGray);
1406  fBothButton->SetFillColor(kGray);
1407  fSurfButton->SetFillColor(kGray);
1408  fPayloadButton->SetFillColor(kGray);
1409  fInterferometryButton->SetFillColor(kGray);
1410  fUCorrelatorButton->SetFillColor(kGray);
1411  break;
1413  fHorizButton->SetFillColor(kGray+3);
1414  fVertButton->SetFillColor(kGray);
1415  fBothButton->SetFillColor(kGray);
1416  fSurfButton->SetFillColor(kGray);
1417  fPayloadButton->SetFillColor(kGray);
1418  fInterferometryButton->SetFillColor(kGray);
1419  fUCorrelatorButton->SetFillColor(kGray);
1420  break;
1422  fHorizButton->SetFillColor(kGray);
1423  fVertButton->SetFillColor(kGray);
1424  fBothButton->SetFillColor(kGray+3);
1425  fSurfButton->SetFillColor(kGray);
1426  fPayloadButton->SetFillColor(kGray);
1427  fInterferometryButton->SetFillColor(kGray);
1428  fUCorrelatorButton->SetFillColor(kGray);
1429  break;
1431  fHorizButton->SetFillColor(kGray);
1432  fVertButton->SetFillColor(kGray);
1433  fBothButton->SetFillColor(kGray);
1434  fSurfButton->SetFillColor(kGray);
1435  fPayloadButton->SetFillColor(kGray+3);
1436  fInterferometryButton->SetFillColor(kGray);
1437  fUCorrelatorButton->SetFillColor(kGray);
1438  break;
1439  case MagicDisplayCanvasLayoutOption::kInterferometry:
1440  fHorizButton->SetFillColor(kGray);
1441  fVertButton->SetFillColor(kGray);
1442  fBothButton->SetFillColor(kGray);
1443  fSurfButton->SetFillColor(kGray);
1444  fPayloadButton->SetFillColor(kGray);
1445  fInterferometryButton->SetFillColor(kGray+3);
1446  fUCorrelatorButton->SetFillColor(kGray);
1447  break;
1448  case MagicDisplayCanvasLayoutOption::kUCorrelator:
1449  fHorizButton->SetFillColor(kGray);
1450  fVertButton->SetFillColor(kGray);
1451  fBothButton->SetFillColor(kGray);
1452  fSurfButton->SetFillColor(kGray);
1453  fPayloadButton->SetFillColor(kGray);
1454  fInterferometryButton->SetFillColor(kGray);
1455  fUCorrelatorButton->SetFillColor(kGray+3);
1456  break;
1457 
1458  default:
1459  break;
1460  }
1461  fVertButton->Modified();
1462  fHorizButton->Modified();
1463  fBothButton->Modified();
1464  fSurfButton->Modified();
1465  fPayloadButton->Modified();
1466  fInterferometryButton->Modified();
1467  fUCorrelatorButton->Modified();
1468 }
1469 
1470 
1472 {
1473  if(fOrderByEventNumber) {
1474  fOrderByEventNumber=0;
1475  fTimeEntryButton->SetFillColor(kGray);
1476  fTimeEntryButton->Modified();
1477  }
1478  else {
1479  fOrderByEventNumber=1;
1480  fTimeEntryButton->SetFillColor(kGray+3);
1481  fTimeEntryButton->Modified();
1482  }
1483 }
1484 
1485 
1487 {
1488  fWaveformFormat=waveformOption;
1489  if(waveformOption==MagicDisplayFormatOption::kWaveform) {
1490  //Turn on fft view off
1491  fWaveformButton->SetFillColor(kGray+3);
1492  fPowerButton->SetFillColor(kGray);
1493  fHilbertButton->SetFillColor(kGray);
1494  fAverageFFTButton->SetFillColor(kGray);
1495  fWaveformButton->Modified();
1496  fPowerButton->Modified();
1497  fHilbertButton->Modified();
1498  fAverageFFTButton->Modified();
1499  }
1500  else if(waveformOption==MagicDisplayFormatOption::kFFT) {
1501  //Turn fft view on
1502  fWaveformButton->SetFillColor(kGray);
1503  fPowerButton->SetFillColor(kGray+3);
1504  fHilbertButton->SetFillColor(kGray);
1505  fAverageFFTButton->SetFillColor(kGray);
1506  fWaveformButton->Modified();
1507  fPowerButton->Modified();
1508  fHilbertButton->Modified();
1509  fAverageFFTButton->Modified();
1510  }
1511  else if(waveformOption==MagicDisplayFormatOption::kHilbertEnvelope) {
1512  //Turn fft view on
1513  fWaveformButton->SetFillColor(kGray);
1514  fPowerButton->SetFillColor(kGray);
1515  fHilbertButton->SetFillColor(kGray+3);
1516  fAverageFFTButton->SetFillColor(kGray);
1517  fWaveformButton->Modified();
1518  fPowerButton->Modified();
1519  fHilbertButton->Modified();
1520  fAverageFFTButton->Modified();
1521  }
1522  else if(waveformOption==MagicDisplayFormatOption::kAveragedFFT) {
1523  //Turn fft view on
1524  fWaveformButton->SetFillColor(kGray);
1525  fPowerButton->SetFillColor(kGray);
1526  fHilbertButton->SetFillColor(kGray);
1527  fAverageFFTButton->SetFillColor(kGray+3);
1528  fWaveformButton->Modified();
1529  fPowerButton->Modified();
1530  fHilbertButton->Modified();
1531  fAverageFFTButton->Modified();
1532  }
1533 
1534 }
1535 
1537 {
1538  // char turfName[FILENAME_MAX];
1539  // sprintf(turfName,"%s/run%d/turfRateFile%d.root",fCurrentBaseDir,
1540  // fCurrentRun,fCurrentRun);
1541  // fTurfRateFile = TFile::Open(turfName);
1542  // if(!fTurfRateFile) {
1543  // cout << "Couldn't open: " << turfName << "\n";
1544  // return -1;
1545  // }
1546  // fTurfRateTree = (TTree*) fTurfRateFile->Get("turfRateTree");
1547  // if(!fTurfRateTree) {
1548  // cout << "Couldn't get turfRateTree from " << turfName << endl;
1549  // return -1;
1550  // }
1551  // if(fTurfRateTree->GetEntries()>0) {
1552  // fTurfRateTree->SetBranchAddress("turf",&fTurfPtr);
1553  // fTurfRateEntry=0;
1554  // }
1555  // else {
1556  // delete fTurfRateTree;
1557  // fTurfRateFile->Close();
1558  // fTurfRateFile=0;
1559  // fTurfRateTree=0;
1560  // }
1561  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1562  return 0;
1563 }
1564 
1565 
1567 {
1568  fRFCanMaker=AnitaRFCanvasMaker::Instance();
1569  int retVal=this->getTurfEntry();
1570  if(retVal==0)
1571  this->refreshTurfDisplay();
1572 }
1573 
1575 {
1576  // if(!fTurfRateTree) {
1577  // if(loadTurfTree()<0)
1578  // return -1;
1579  // }
1580  // if(!fTurfRateTree) {
1581  // std::cout << "No Turf Rates to play with\n";
1582  // return -1;
1583  // }
1584  // if(fTurfRateEntry<fTurfRateTree->GetEntries())
1585  // fTurfRateTree->GetEntry(fTurfRateEntry);
1586  // else {
1587  // std::cout << "No more entries in turf rate tree" << endl;
1588  // return -1;
1589  // }
1590  // std::cout << fTurfRateEntry << "\t" << fTurfPtr->realTime
1591  // << "\t" << fTurfPtr->ppsNum << std::endl;
1592  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1593  return 0;
1594 }
1595 
1597 {
1598  fTurfRateEntry++;
1599  int retVal=getTurfEntry();
1600  if(retVal==0)
1602  else fTurfRateEntry--;
1603  return retVal;
1604 }
1605 
1606 
1608 {
1609  if(fTurfRateEntry>0)
1610  fTurfRateEntry--;
1611  else
1612  return -1;
1613  int retVal=getTurfEntry();
1614  if(retVal==0)
1616  return retVal;
1617 }
1618 
1620 {
1621  if(!fTurfCanvas) {
1622  fTurfCanvas = new TCanvas("canMagicTurf","canMagicTurf",800,800);
1623  fTurfCanvas->cd();
1624  drawTurfButtons();
1625  }
1626  if(!fTurfMainPad) {
1627  fTurfCanvas->cd();
1628  fTurfMainPad= new TPad("canMagicTurfMain","canMagicTurfMain",0,0,1,0.9);
1629  fTurfMainPad->Draw();
1630  fTurfCanvas->Update();
1631  }
1632  if(!fTurfInfoPad) {
1633  fTurfCanvas->cd();
1634  fTurfInfoPad= new TPad("canMagicTurfInfo","canMagicTurfInfo",0.2,0.91,0.8,0.99);
1635  fTurfInfoPad->Draw();
1636  fTurfCanvas->Update();
1637  }
1638  //This will need to change
1639  fRFCanMaker->getTurfInfoCanvas(fTurfPtr,fTurfInfoPad);
1640  fRFCanMaker->getTurfRateCanvas(fTurfPtr,fTurfMainPad);
1641 
1642 }
1643 
1645 {
1646  TButton *butNext = new TButton("Next Turf","MagicDisplay::Instance()->displayNextTurf();",0.85,0.95,1,1);
1647  butNext->SetTextSize(0.5);
1648  butNext->SetFillColor(kGreen-10);
1649  butNext->Draw();
1650  TButton *butPrev = new TButton("Prev. Turf","MagicDisplay::Instance()->displayPreviousTurf();",0.85,0.90,1,0.95);
1651  butPrev->SetTextSize(0.5);
1652  butPrev->SetFillColor(kBlue-10);
1653  butPrev->Draw();
1654 
1655  fTurfYScaleButton = new TButton("Fix Scale","MagicDisplay::Instance()->toggleTurfYScale(); MagicDisplay::Instance()->refreshTurfDisplay();",0,0.96,0.1,1);
1656  fTurfYScaleButton->SetTextSize(0.4);
1657  fTurfYScaleButton->SetFillColor(kGray);
1658  fTurfYScaleButton->Draw();
1659 }
1660 
1662 {
1663  if(fTurfYScaleButton->GetFillColor()==kGray) {
1664  //Turn on fixed y scale
1665  fRFCanMaker->fFixTurfYScale=1;
1666  fTurfYScaleButton->SetFillColor(kGray+3);
1667  fTurfYScaleButton->Modified();
1668  }
1669  else {
1670  //Turn off fixed y scale
1671  fRFCanMaker->fFixTurfYScale=0;
1672  fTurfYScaleButton->SetFillColor(kGray);
1673  fTurfYScaleButton->Modified();
1674  }
1675 
1676 }
1677 
1679 {
1680  // char surfName[FILENAME_MAX];
1681  // sprintf(surfName,"%s/run%d/surfHkFile%d.root",fCurrentBaseDir,
1682  // fCurrentRun,fCurrentRun);
1683  // fSurfHkFile = TFile::Open(surfName);
1684  // if(!fSurfHkFile) {
1685  // cout << "Couldn't open: " << surfName << "\n";
1686  // return -1;
1687  // }
1688  // fSurfHkTree = (TTree*) fSurfHkFile->Get("surfHkTree");
1689  // if(!fSurfHkTree) {
1690  // cout << "Couldn't get surfHkTree from " << surfName << endl;
1691  // return -1;
1692  // }
1693  // fSurfHkTree->SetBranchAddress("surf",&fSurfPtr);
1694  // fSurfHkEntry=0;
1695  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1696 
1697  return 0;
1698 }
1699 
1701 {
1702 
1703  if(!fRFCanMaker)
1704  fRFCanMaker=AnitaRFCanvasMaker::Instance();
1705  int retVal=getSurfEntry();
1706  fRFCanMaker->setSurfHkDisplay(MagicDisplaySurfHkDisplay::kSurfView);
1707  std::cout << "RetVal: " << retVal << "\n";
1708  if(retVal==0) {
1710  }
1711 
1712 }
1713 
1715 {
1716  // if(!fSurfHkTree) {
1717  // if(loadSurfTree()<0) {
1718  // cout << "Couldn't open SURF hk tree\n";
1719  // return -1;
1720  // }
1721  // }
1722  // // std::cerr <<
1723  // if(fSurfHkEntry<fSurfHkTree->GetEntries())
1724  // fSurfHkTree->GetEntry(fSurfHkEntry);
1725  // else {
1726  // std::cout << "No more entries in surfHkTree" << endl;
1727  // return -1;
1728  // }
1729  // std::cout << fSurfHkEntry << "\t" << fSurfPtr->realTime
1730  // << "\t" << fSurfPtr->ppsNum << std::endl;
1731  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1732 
1733  return 0;
1734 }
1735 
1737 {
1738  fSurfHkEntry++;
1739  int retVal=getSurfEntry();
1740  if(retVal==0)
1742  else fSurfHkEntry--;
1743  return retVal;
1744 }
1745 
1746 
1748 {
1749  if(fSurfHkEntry>0)
1750  fSurfHkEntry--;
1751  else
1752  return -1;
1753  int retVal=getSurfEntry();
1754  if(retVal==0)
1756  return retVal;
1757 }
1758 
1760 {
1761  if(!fSurfCanvas) {
1762  fSurfCanvas = new TCanvas("canMagicSurf","canMagicSurf",800,800);
1763  fSurfCanvas->cd();
1764  drawSurfButtons();
1765  }
1766  if(!fSurfMainPad) {
1767  fSurfCanvas->cd();
1768  fSurfMainPad= new TPad("canMagicSurfMain","canMagicSurfMain",0,0,1,0.9);
1769  fSurfMainPad->Draw();
1770  fSurfCanvas->Update();
1771  }
1772  if(!fSurfInfoPad) {
1773  fSurfCanvas->cd();
1774  fSurfInfoPad= new TPad("canMagicSurfInfo","canMagicSurfInfo",0.2,0.91,0.8,0.99);
1775  fSurfInfoPad->Draw();
1776  fSurfCanvas->Update();
1777  }
1778  //This will need to change
1779  fRFCanMaker->getSurfInfoCanvas(fSurfPtr,fSurfInfoPad);
1780  fRFCanMaker->getSurfHkCanvas(fSurfPtr,fSurfMainPad);
1781 
1782 }
1783 
1785 {
1786  TButton *butNext = new TButton("Next","MagicDisplay::Instance()->displayNextSurf();",0.9,0.95,1,1);
1787  butNext->SetTextSize(0.4);
1788  butNext->SetFillColor(kGreen-10);
1789  butNext->Draw();
1790  TButton *butPrev = new TButton("Prev.","MagicDisplay::Instance()->displayPreviousSurf();",0.9,0.90,1,0.95);
1791  butPrev->SetTextSize(0.4);
1792  butPrev->SetFillColor(kBlue-10);
1793  butPrev->Draw();
1794 
1795 
1796  TButton *butPlay = new TButton("Play","MagicDisplay::Instance()->startSurfHkPlaying();",0.8,0.95,0.9,1);
1797  butPlay->SetTextSize(0.5);
1798  butPlay->SetFillColor(kGreen-10);
1799  butPlay->Draw();
1800 
1801  TButton *butStop = new TButton("Stop","MagicDisplay::Instance()->stopSurfHkPlaying();",0.8,0.90,0.9,0.95);
1802  butStop->SetTextSize(0.5);
1803  butStop->SetFillColor(kRed-10);
1804  butStop->Draw();
1805 
1806  fSurfSurfViewButton = new TButton("SURF View","MagicDisplay::Instance()->setSurfHkDisplay(MagicDisplaySurfHkDisplay::kSurfView); MagicDisplay::Instance()->refreshSurfDisplay();",0,0.97,0.1,1);
1807  fSurfSurfViewButton->SetTextSize(0.4);
1808  fSurfSurfViewButton->SetFillColor(kGray+3);
1809  fSurfSurfViewButton->Draw();
1810 
1811 
1812  fSurfPhiViewButton = new TButton("PHI View","MagicDisplay::Instance()->setSurfHkDisplay(MagicDisplaySurfHkDisplay::kPhiView); MagicDisplay::Instance()->refreshSurfDisplay();",0,0.94,0.1,0.97);
1813  fSurfPhiViewButton->SetTextSize(0.4);
1814  fSurfPhiViewButton->SetFillColor(kGray);
1815  fSurfPhiViewButton->Draw();
1816 
1817 
1818  fSurfTimeViewButton = new TButton("Time View","MagicDisplay::Instance()->setSurfHkDisplay(MagicDisplaySurfHkDisplay::kTimeView); MagicDisplay::Instance()->refreshSurfDisplay();",0,0.91,0.1,0.94);
1819  fSurfTimeViewButton->SetTextSize(0.4);
1820  fSurfTimeViewButton->SetFillColor(kGray);
1821  fSurfTimeViewButton->Draw();
1822 
1823  fSurfAdcViewButton = new TButton("ADC","MagicDisplay::Instance()->toggleSurfRfPowerView(0); MagicDisplay::Instance()->refreshSurfDisplay();",0.1,0.91,0.2,0.94);
1824  fSurfAdcViewButton->SetTextSize(0.4);
1825  fSurfAdcViewButton->SetFillColor(kGray);
1826  fSurfAdcViewButton->Draw();
1827 
1828  fSurfKelvinViewButton = new TButton("T_inp","MagicDisplay::Instance()->toggleSurfRfPowerView(1); MagicDisplay::Instance()->refreshSurfDisplay();",0.1,0.94,0.15,0.97);
1829  fSurfKelvinViewButton->SetTextSize(0.4);
1830  fSurfKelvinViewButton->SetFillColor(kGray+3);
1831  fSurfKelvinViewButton->Draw();
1832 
1833  //fSurfMeasuredKelvinViewButton = new TButton("T_meas","MagicDisplay::Instance()->toggleSurfRfPowerView(2); MagicDisplay::Instance()->refreshSurfDisplay();",0.15,0.94,0.2,0.97);
1834  //fSurfMeasuredKelvinViewButton->SetTextSize(0.4);
1835  //fSurfMeasuredKelvinViewButton->SetFillColor(kGray);
1836  //fSurfMeasuredKelvinViewButton->Draw();
1837 
1838  fSurfLogButton = new TButton("Log Scale","MagicDisplay::Instance()->toggleSurfLogView(); MagicDisplay::Instance()->refreshSurfDisplay();",0.1,0.97,0.2,1);
1839  fSurfLogButton->SetTextSize(0.4);
1840  fSurfLogButton->SetFillColor(kGray);
1841  fSurfLogButton->Draw();
1842 
1843 
1844 }
1845 
1846 
1848 {
1849  Int_t nextState=0;
1850  if(fSurfLogButton->GetFillColor()==kGray) {
1851  nextState=1;
1852  }
1853  else {
1854  nextState=0;
1855  }
1856  // std::cout << nextState << "\an";
1857  if(nextState) {
1858  fRFCanMaker->setSurfLogFlag(1);
1859  fSurfLogButton->SetFillColor(kGray+3);
1860  fSurfLogButton->Modified();
1861  }
1862  else {
1863  fRFCanMaker->setSurfLogFlag(0);
1864  fSurfLogButton->SetFillColor(kGray);
1865  fSurfLogButton->Modified();
1866  }
1868 }
1869 
1871 {
1872  fRFCanMaker->setSurfHkDisplay(surfDisplay);
1873  if(surfDisplay==MagicDisplaySurfHkDisplay::kSurfView) {
1874  //Turn on phi view off
1875  fSurfSurfViewButton->SetFillColor(kGray+3);
1876  fSurfPhiViewButton->SetFillColor(kGray);
1877  fSurfTimeViewButton->SetFillColor(kGray);
1878  fSurfSurfViewButton->Modified();
1879  fSurfPhiViewButton->Modified();
1880  fSurfTimeViewButton->Modified();
1881  }
1882  else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
1883  //Turn phi view on
1884  fSurfSurfViewButton->SetFillColor(kGray);
1885  fSurfPhiViewButton->SetFillColor(kGray+3);
1886  fSurfTimeViewButton->SetFillColor(kGray);
1887  fSurfSurfViewButton->Modified();
1888  fSurfPhiViewButton->Modified();
1889  fSurfTimeViewButton->Modified();
1890  }
1891  else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
1892  //Turn phi view on
1893  fSurfSurfViewButton->SetFillColor(kGray);
1894  fSurfPhiViewButton->SetFillColor(kGray);
1895  fSurfTimeViewButton->SetFillColor(kGray+3);
1896  fSurfSurfViewButton->Modified();
1897  fSurfPhiViewButton->Modified();
1898  fSurfTimeViewButton->Modified();
1899  }
1900 
1901 }
1902 
1903 
1905 {
1906 
1907  if(kelvinView) {
1908  //Turn on
1909  fRFCanMaker->fSurfKelvinView=kelvinView;
1910  if(kelvinView==1) {
1911  fSurfKelvinViewButton->SetFillColor(kGray+3);
1912  // fSurfMeasuredKelvinViewButton->SetFillColor(kGray);
1913  }
1914  else if(kelvinView==2) {
1915  fSurfKelvinViewButton->SetFillColor(kGray);
1916  // fSurfMeasuredKelvinViewButton->SetFillColor(kGray+3);
1917  }
1918  fSurfAdcViewButton->SetFillColor(kGray);
1919  fSurfKelvinViewButton->Modified();
1920  fSurfAdcViewButton->Modified();
1921  // fSurfMeasuredKelvinViewButton->Modified();
1922  }
1923  else {
1924  //Turn phi view on
1925  fRFCanMaker->fSurfKelvinView=0;
1926  fSurfKelvinViewButton->SetFillColor(kGray);
1927  //fSurfMeasuredKelvinViewButton->SetFillColor(kGray);
1928  fSurfAdcViewButton->SetFillColor(kGray+3);
1929  fSurfKelvinViewButton->Modified();
1930  fSurfAdcViewButton->Modified();
1931  //fSurfMeasuredKelvinViewButton->Modified();
1932  }
1933 
1934 }
1935 
1936 
1937 
1938 
1940 {
1941  // char surfName[FILENAME_MAX];
1942  // sprintf(surfName,"%s/run%d/avgSurfHkFile%d.root",fCurrentBaseDir,
1943  // fCurrentRun,fCurrentRun);
1944  // fSurfHkFile = TFile::Open(surfName);
1945  // if(!fSurfHkFile) {
1946  // cout << "Couldn't open: " << surfName << "\n";
1947  // return -1;
1948  // }
1949  // fAvgSurfHkTree = (TTree*) fSurfHkFile->Get("avgSurfHkTree");
1950  // if(!fAvgSurfHkTree) {
1951  // cout << "Couldn't get avgSurfHkTree from " << surfName << endl;
1952  // return -1;
1953  // }
1954  // fAvgSurfHkTree->SetBranchAddress("avgsurf",&fAvgSurfPtr);
1955  // fAvgSurfHkEntry=0;
1956  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1957 
1958  return 0;
1959 }
1960 
1962 {
1963 
1964  if(!fRFCanMaker)
1965  fRFCanMaker=AnitaRFCanvasMaker::Instance();
1966  int retVal=getAvgSurfEntry();
1967  if(retVal==0)
1969 }
1970 
1972 {
1973  // if(!fAvgSurfHkTree) {
1974  // int retVal=loadAvgSurfTree();
1975  // if(retVal<0) {
1976  // std::cout << "Couldn't load average surf tree\n";
1977  // return retVal;
1978  // }
1979  // }
1980  // // std::cerr <<
1981  // if(fAvgSurfHkEntry<fAvgSurfHkTree->GetEntries())
1982  // fAvgSurfHkTree->GetEntry(fAvgSurfHkEntry);
1983  // else {
1984  // std::cout << "No more entries in avgSurfHkTree" << endl;
1985  // return -1;
1986  // }
1987  // // std::cout << fAvgSurfHkEntry << "\t" << fAvgSurfPtr->realTime
1988  // // << "\t" << fAvgSurfPtr->ppsNum << std::endl;
1989 
1990  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
1991 
1992  return 0;
1993 }
1994 
1996 {
1997  fAvgSurfHkEntry++;
1998  int retVal=getAvgSurfEntry();
1999  if(retVal==0)
2001  else fAvgSurfHkEntry--;
2002  return retVal;
2003 }
2004 
2005 
2007 {
2008  if(fAvgSurfHkEntry>0)
2009  fAvgSurfHkEntry--;
2010  else
2011  return -1;
2012  int retVal=getAvgSurfEntry();
2013  if(retVal==0)
2015  return retVal;
2016 }
2017 
2019 {
2020  if(!fAvgSurfCanvas) {
2021  fAvgSurfCanvas = new TCanvas("canMagicAvgSurf","canMagicAvgSurf",800,800);
2022  fAvgSurfCanvas->cd();
2024  }
2025  if(!fAvgSurfMainPad) {
2026  fAvgSurfCanvas->cd();
2027  fAvgSurfMainPad= new TPad("canMagicAvgSurfMain","canMagicAvgSurfMain",0,0,1,0.9);
2028  fAvgSurfMainPad->Draw();
2029  fAvgSurfCanvas->Update();
2030  }
2031  if(!fAvgSurfInfoPad) {
2032  fAvgSurfCanvas->cd();
2033  fAvgSurfInfoPad= new TPad("canMagicAvgSurfInfo","canMagicAvgSurfInfo",0.2,0.91,0.8,0.99);
2034  fAvgSurfInfoPad->Draw();
2035  fAvgSurfCanvas->Update();
2036  }
2037  //This will need to change
2038  fRFCanMaker->getAvgSurfInfoCanvas(fAvgSurfPtr,fAvgSurfInfoPad);
2039  fRFCanMaker->getAvgSurfHkCanvas(fAvgSurfPtr,fAvgSurfMainPad);
2040 
2041 }
2042 
2044 {
2045  TButton *butNext = new TButton("Next.","MagicDisplay::Instance()->displayNextAvgSurf();",0.9,0.95,1,1);
2046  butNext->SetTextSize(0.4);
2047  butNext->SetFillColor(kGreen-10);
2048  butNext->Draw();
2049  TButton *butPrev = new TButton("Prev.","MagicDisplay::Instance()->displayPreviousAvgSurf();",0.9,0.90,1,0.95);
2050  butPrev->SetTextSize(0.4);
2051  butPrev->SetFillColor(kBlue-10);
2052  butPrev->Draw();
2053  TButton *butPlay = new TButton("Play","MagicDisplay::Instance()->startAvgSurfHkPlaying();",0.85,0.95,0.9,1);
2054  butPlay->SetTextSize(0.4);
2055  butPlay->SetFillColor(kGreen-10);
2056  butPlay->Draw();
2057  TButton *butStop = new TButton("Stop","MagicDisplay::Instance()->stopAvgSurfHkPlaying();",0.85,0.90,0.9,0.95);
2058  butStop->SetTextSize(0.4);
2059  butStop->SetFillColor(kRed-10);
2060  butStop->Draw();
2061 
2062 
2063 
2064  fAvgSurfAdcViewButton = new TButton("ADC","MagicDisplay::Instance()->toggleAvgSurfRfPowerView(0); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0.1,0.91,0.2,0.94);
2065  fAvgSurfAdcViewButton->SetTextSize(0.4);
2066  fAvgSurfAdcViewButton->SetFillColor(kGray);
2067  fAvgSurfAdcViewButton->Draw();
2068 
2069  fAvgSurfKelvinViewButton = new TButton("T_inp","MagicDisplay::Instance()->toggleAvgSurfRfPowerView(1); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0.1,0.94,0.15,0.97);
2070  fAvgSurfKelvinViewButton->SetTextSize(0.4);
2071  fAvgSurfKelvinViewButton->SetFillColor(kGray+3);
2072  fAvgSurfKelvinViewButton->Draw();
2073 
2074 
2075  fAvgSurfMeasuredKelvinViewButton = new TButton("T_meas","MagicDisplay::Instance()->toggleAvgSurfRfPowerView(2); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0.15,0.94,0.2,0.97);
2076  fAvgSurfMeasuredKelvinViewButton->SetTextSize(0.4);
2077  fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray);
2078  fAvgSurfMeasuredKelvinViewButton->Draw();
2079 
2080  fAvgSurfLogButton = new TButton("Log Scale","MagicDisplay::Instance()->toggleAvgSurfLogView(); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0.1,0.97,0.2,1);
2081  fAvgSurfLogButton->SetTextSize(0.4);
2082  fAvgSurfLogButton->SetFillColor(kGray);
2083  fAvgSurfLogButton->Draw();
2084 
2085 
2086 
2087  fAvgSurfSurfViewButton = new TButton("SURF View","MagicDisplay::Instance()->setAvgSurfHkDisplay(MagicDisplaySurfHkDisplay::kSurfView); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0,0.955,0.1,1);
2088  fAvgSurfSurfViewButton->SetTextSize(0.4);
2089  fAvgSurfSurfViewButton->SetFillColor(kGray+3);
2090  fAvgSurfSurfViewButton->Draw();
2091 
2092 
2093  fAvgSurfPhiViewButton = new TButton("PHI View","MagicDisplay::Instance()->setAvgSurfHkDisplay(MagicDisplaySurfHkDisplay::kPhiView); MagicDisplay::Instance()->refreshAvgSurfDisplay();",0,0.91,0.1,0.955);
2094  fAvgSurfPhiViewButton->SetTextSize(0.4);
2095  fAvgSurfPhiViewButton->SetFillColor(kGray);
2096  fAvgSurfPhiViewButton->Draw();
2097 
2098 }
2099 
2100 
2102 {
2103  Int_t nextState=0;
2104  if(fAvgSurfLogButton->GetFillColor()==kGray) {
2105  nextState=1;
2106  }
2107  else {
2108  nextState=0;
2109  }
2110  // std::cout << nextState << "\n";
2111  if(nextState) {
2112  fRFCanMaker->setAvgSurfLogFlag(1);
2113  fAvgSurfLogButton->SetFillColor(kGray+3);
2114  fAvgSurfLogButton->Modified();
2115  }
2116  else {
2117  fRFCanMaker->setAvgSurfLogFlag(0);
2118  fAvgSurfLogButton->SetFillColor(kGray);
2119  fAvgSurfLogButton->Modified();
2120  }
2122 }
2123 
2125 {
2126 
2127  fRFCanMaker->setAvgSurfHkDisplay(surfDisplay);
2128 
2129  if(surfDisplay==MagicDisplaySurfHkDisplay::kSurfView) {
2130  //Turn on phi view off
2131  fAvgSurfSurfViewButton->SetFillColor(kGray+3);
2132  fAvgSurfPhiViewButton->SetFillColor(kGray);
2133  fAvgSurfSurfViewButton->Modified();
2134  fAvgSurfPhiViewButton->Modified();
2135  }
2136  else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
2137  //Turn phi view on
2138  fAvgSurfSurfViewButton->SetFillColor(kGray);
2139  fAvgSurfPhiViewButton->SetFillColor(kGray+3);
2140  fAvgSurfSurfViewButton->Modified();
2141  fAvgSurfPhiViewButton->Modified();
2142  }
2143 
2144 }
2145 
2146 
2148 {
2149 
2150  if(kelvinView) {
2151  //Turn on
2152  // std::cout << "setting fAvgSurfKelvinView " << 1 << "\n";
2153  fRFCanMaker->fAvgSurfKelvinView=kelvinView;
2154  if(kelvinView==2) {
2155  fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray+3);
2156  fAvgSurfKelvinViewButton->SetFillColor(kGray);
2157  }
2158  else if(kelvinView==1){
2159  fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray);
2160  fAvgSurfKelvinViewButton->SetFillColor(kGray+3);
2161  }
2162 
2163  fAvgSurfAdcViewButton->SetFillColor(kGray);
2164  fAvgSurfKelvinViewButton->Modified();
2165  fAvgSurfAdcViewButton->Modified();
2166  fAvgSurfMeasuredKelvinViewButton->Modified();
2167  }
2168  else {
2169  //Turn phi view on
2170  fRFCanMaker->fAvgSurfKelvinView=0;
2171  fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray);
2172  fAvgSurfKelvinViewButton->SetFillColor(kGray);
2173  fAvgSurfAdcViewButton->SetFillColor(kGray+3);
2174  fAvgSurfKelvinViewButton->Modified();
2175  fAvgSurfAdcViewButton->Modified();
2176  fAvgSurfMeasuredKelvinViewButton->Modified();
2177  }
2178 
2179 }
2180 
2181 
2183 {
2184 
2185  // char sumTurfName[FILENAME_MAX];
2186  // sprintf(sumTurfName,"%s/run%d/sumTurfRateFile%d.root",fCurrentBaseDir,
2187  // fCurrentRun,fCurrentRun);
2188  // fSumTurfRateFile = TFile::Open(sumTurfName);
2189  // if(!fSumTurfRateFile) {
2190  // cout << "Couldn't open: " << sumTurfName << "\n";
2191  // return -1;
2192  // }
2193  // fSumTurfRateTree = (TTree*) fSumTurfRateFile->Get("sumTurfRateTree");
2194  // if(!fSumTurfRateTree) {
2195  // cout << "Couldn't get sumTurfRateTree from " << sumTurfName << endl;
2196  // return -1;
2197  // }
2198  // fSumTurfRateTree->SetBranchAddress("sumturf",&fSumTurfPtr);
2199  // fSumTurfRateEntry=0;
2200 
2201  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2202 
2203  return 0;
2204 }
2205 
2206 
2208 {
2209 
2210 
2211 
2212  fRFCanMaker=AnitaRFCanvasMaker::Instance();
2213  int retVal=getSumTurfEntry();
2214  if(retVal==0)
2216 }
2217 
2219 {
2220  // if(!fSumTurfRateTree) {
2221  // if(loadSumTurfTree()<0)
2222  // return -1;
2223  // }
2224  // if(fSumTurfRateEntry<fSumTurfRateTree->GetEntries())
2225  // fSumTurfRateTree->GetEntry(fSumTurfRateEntry);
2226  // else {
2227  // std::cout << "No more entries in sumTurf rate tree" << endl;
2228  // return -1;
2229  // }
2230  // // std::cout << fSumTurfRateEntry << "\t" << fSumTurfPtr->realTime
2231  // // << "\t" << fSumTurfPtr->ppsNum << std::endl;
2232  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2233 
2234  return 0;
2235 }
2236 
2238 {
2240  int retVal=getSumTurfEntry();
2241  if(retVal==0)
2243  else fSumTurfRateEntry--;
2244  return retVal;
2245 }
2246 
2247 
2249 {
2250  if(fSumTurfRateEntry>0)
2252  else
2253  return -1;
2254  int retVal=getSumTurfEntry();
2255  if(retVal==0)
2257  return retVal;
2258 }
2259 
2261 {
2262  if(!fSumTurfCanvas) {
2263  fSumTurfCanvas = new TCanvas("canMagicSumTurf","canMagicSumTurf",800,800);
2264  fSumTurfCanvas->cd();
2266  }
2267  if(!fSumTurfMainPad) {
2268  fSumTurfCanvas->cd();
2269  fSumTurfMainPad= new TPad("canMagicSumTurfMain","canMagicSumTurfMain",0,0,1,0.9);
2270  fSumTurfMainPad->Draw();
2271  fSumTurfCanvas->Update();
2272  }
2273  if(!fSumTurfInfoPad) {
2274  fSumTurfCanvas->cd();
2275  fSumTurfInfoPad= new TPad("canMagicSumTurfInfo","canMagicSumTurfInfo",0.2,0.91,0.8,0.99);
2276  fSumTurfInfoPad->Draw();
2277  fSumTurfCanvas->Update();
2278  }
2279  //This will need to change
2280  fRFCanMaker->getSumTurfInfoCanvas(fSumTurfPtr,fSumTurfInfoPad);
2281  fRFCanMaker->getSumTurfRateCanvas(fSumTurfPtr,fSumTurfMainPad);
2282 
2283 }
2284 
2286 {
2287  TButton *butNext = new TButton("Next SumTurf","MagicDisplay::Instance()->displayNextSumTurf();",0.85,0.95,1,1);
2288  butNext->SetTextSize(0.5);
2289  butNext->SetFillColor(kGreen-10);
2290  butNext->Draw();
2291  TButton *butPrev = new TButton("Prev. SumTurf","MagicDisplay::Instance()->displayPreviousSumTurf();",0.85,0.90,1,0.95);
2292  butPrev->SetTextSize(0.5);
2293  butPrev->SetFillColor(kBlue-10);
2294  butPrev->Draw();
2295 
2296  fSumTurfYScaleButton = new TButton("Fix Scale","MagicDisplay::Instance()->toggleSumTurfYScale(); MagicDisplay::Instance()->refreshSumTurfDisplay();",0,0.96,0.1,1);
2297  fSumTurfYScaleButton->SetTextSize(0.4);
2298  fSumTurfYScaleButton->SetFillColor(kGray);
2299  fSumTurfYScaleButton->Draw();
2300 }
2301 
2303 {
2304  if(fSumTurfYScaleButton->GetFillColor()==kGray) {
2305  //Turn on fixed y scale
2306  fRFCanMaker->fFixSumTurfYScale=1;
2307  fSumTurfYScaleButton->SetFillColor(kGray+3);
2308  fSumTurfYScaleButton->Modified();
2309  }
2310  else {
2311  //Turn off fixed y scale
2312  fRFCanMaker->fFixSumTurfYScale=0;
2313  fSumTurfYScaleButton->SetFillColor(kGray);
2314  fSumTurfYScaleButton->Modified();
2315  }
2316 
2317 }
2318 
2320 {
2321  if(fHeadPtr) return fHeadPtr->eventNumber;
2322  return 0;
2323 }
2324 
2326 {
2327  fInSurfPlayMode=1;
2328  do {
2329  gSystem->ProcessEvents();
2330  if(!fInSurfPlayMode) break;
2331  if(fEventPlaySleepMs>0)
2332  gSystem->Sleep(fEventPlaySleepMs);
2333  }
2334  while(this->displayNextSurf()==0);
2335 }
2336 
2338 {
2339  fInSurfPlayMode=0;
2340 }
2341 
2342 
2344 {
2345  fInAvgSurfPlayMode=1;
2346  do {
2347  gSystem->ProcessEvents();
2348  if(!fInAvgSurfPlayMode) break;
2349  if(fEventPlaySleepMs>0)
2350  gSystem->Sleep(fEventPlaySleepMs);
2351  }
2352  while(this->displayNextAvgSurf()==0);
2353 }
2354 
2356 {
2357  fInAvgSurfPlayMode=0;
2358 }
2359 
2360 
2362 {
2363 
2364  fInEventPlayMode=1;
2365  do {
2366  gSystem->ProcessEvents();
2367  if(!fInEventPlayMode) break;
2368  if(fEventPlaySleepMs>0)
2369  gSystem->Sleep(fEventPlaySleepMs);
2370  }
2371  while(this->displayNextEvent()==0);
2372  if(fInEventPlayMode) {
2373  // Long64_t headEntries=fHeadTree->GetEntries();
2374  Long64_t headEntries=fDataset->N();
2375  // fHeadTree->Refresh();
2376  //fEventTree->Refresh();
2377  if(fDataset->N()!=headEntries) {
2378  std::cout << headEntries << "\t" << fDataset->N() << "\n";
2379  // if(fHeadTree->GetEntries()!=headEntries) {
2380  // std::cout << headEntries << "\t" << fHeadTree->GetEntries() << "\n";
2382  }
2383  }
2384 }
2385 
2386 
2387 
2389 {
2390  fInEventPlayMode=1;
2391  do {
2392  gSystem->ProcessEvents();
2393  if(!fInEventPlayMode) break;
2394  if(fEventPlaySleepMs>0)
2395  gSystem->Sleep(fEventPlaySleepMs);
2396  }
2397  while(this->displayPreviousEvent()==0);
2398 }
2399 
2401 {
2402  fInEventPlayMode=0;
2403 }
2404 
2405 
2406 /*
2407 void MagicDisplay::startSummaryDisplay()
2408 {
2409  char headerName[FILENAME_MAX];
2410  char eventName[FILENAME_MAX];
2411  sprintf(headerName,"%s/run%d/headFile%d.root",fCurrentBaseDir,fCurrentRun,fCurrentRun);
2412  sprintf(eventName,"%s/run%d/eventFile%d*.root",fCurrentBaseDir,fCurrentRun,fCurrentRun);
2413 
2414  fEventTree = new TChain("eventTree");
2415  fEventTree->Add(eventName);
2416  fEventTree->SetBranchAddress("event",&fSummaryEventPtr);
2417 
2418  TFile *fHeadFile = TFile::Open(headerName);
2419  if(!fHeadFile) {
2420  cout << "Couldn't open: " << headerName << "\n";
2421  return;
2422  }
2423  fHeadTree = (TTree*) fHeadFile->Get("headTree");
2424  if(!fHeadTree) {
2425  cout << "Couldn't get headTree from " << headerName << endl;
2426  return;
2427  }
2428 
2429  fHeadTree->SetBranchAddress("header",&fSummaryHeadPtr);
2430 
2431 
2432 
2433  }
2434 */
2435 
2437 {
2438 
2439  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2440 
2441  // char gpsName[FILENAME_MAX];
2442  // sprintf(gpsName,"%s/run%d/gpsFile%d.root",fCurrentBaseDir,
2443  // fCurrentRun,fCurrentRun);
2444  // fGpsFile = TFile::Open(gpsName);
2445  // if(!fGpsFile) {
2446  // cout << "Couldn't open: " << gpsName << "\n";
2447  // return -1;
2448  // }
2449  // fG12PosTree = (TTree*) fGpsFile->Get("g12PosTree");
2450  // if(!fG12PosTree) {
2451  // cout << "Couldn't get g12PosTree\n";
2452  // }
2453  // else {
2454  // fG12PosTree->SetBranchAddress("pos",&fG12PosPtr);
2455  // }
2456  // fG12SatTree = (TTree*) fGpsFile->Get("g12SatTree");
2457  // if(!fG12SatTree) {
2458  // cout << "Couldn't get g12SatTree\n";
2459  // }
2460  // else {
2461  // fG12SatTree->SetBranchAddress("sat",&fG12SatPtr);
2462  // }
2463  // fAdu5aPatTree = (TTree*) fGpsFile->Get("adu5PatTree");
2464  // if(!fAdu5aPatTree) {
2465  // cout << "Couldn't get adu5aPatTree\n";
2466  // }
2467  // else {
2468  // fAdu5aPatTree->SetBranchAddress("pat",&fAdu5APatPtr);
2469  // }
2470  // fAdu5aSatTree = (TTree*) fGpsFile->Get("adu5SatTree");
2471  // if(!fAdu5aSatTree) {
2472  // cout << "Couldn't get adu5aSatTree\n";
2473  // }
2474  // else {
2475  // fAdu5aSatTree->SetBranchAddress("sat",&fAdu5ASatPtr);
2476  // fAdu5aSatTree->BuildIndex("realTime");
2477  // fAdu5aSatIndex=(TTreeIndex*)fAdu5aSatTree->GetTreeIndex();
2478  // }
2479  // fAdu5aVtgTree = (TTree*) fGpsFile->Get("adu5VtgTree");
2480  // if(!fAdu5aVtgTree) {
2481  // cout << "Couldn't get adu5aVtgTree\n";
2482  // }
2483  // else {
2484  // fAdu5aVtgTree->SetBranchAddress("vtg",&fAdu5AVtgPtr);
2485  // }
2486  // fAdu5bPatTree = (TTree*) fGpsFile->Get("adu5bPatTree");
2487  // if(!fAdu5bPatTree) {
2488  // cout << "Couldn't get adu5bPatTree\n";
2489  // }
2490  // else {
2491  // fAdu5bPatTree->SetBranchAddress("pat",&fAdu5BPatPtr);
2492  // }
2493  // fAdu5bSatTree = (TTree*) fGpsFile->Get("adu5bSatTree");
2494  // if(!fAdu5bSatTree) {
2495  // cout << "Couldn't get adu5bSatTree\n";
2496  // }
2497  // else {
2498  // fAdu5bSatTree->SetBranchAddress("sat",&fAdu5BSatPtr);
2499  // fAdu5bSatTree->BuildIndex("realTime");
2500  // fAdu5bSatIndex=(TTreeIndex*)fAdu5bSatTree->GetTreeIndex();
2501  // }
2502  // fAdu5bVtgTree = (TTree*) fGpsFile->Get("adu5bVtgTree");
2503  // if(!fAdu5bVtgTree) {
2504  // cout << "Couldn't get adu5bVtgTree\n";
2505  // }
2506  // else {
2507  // fAdu5bVtgTree->SetBranchAddress("vtg",&fAdu5BVtgPtr);
2508  // }
2509  // fG12PosEntry=0;
2510  // fG12SatEntry=0;
2511  // fAdu5aPatEntry=0;
2512  // fAdu5aSatEntry=0;
2513  // fAdu5aVtgEntry=0;
2514  // fAdu5bPatEntry=0;
2515  // fAdu5bSatEntry=0;
2516  // fAdu5bVtgEntry=0;
2517  return 0;
2518 }
2519 
2521 {
2522  if(!fGpsCanMaker)
2523  fGpsCanMaker=AnitaGpsCanvasMaker::Instance();
2524  int retVal=getGpsEntry();
2525  if(retVal==0)
2527 
2528 
2529 }
2530 
2532 {
2533  Int_t retVal=0;
2534  // switch(fGpsCanMaker->getGpsDisplayOpt()) {
2535  // case MagicDisplayGpsDisplay::kMapView:
2536  // break;
2537  // case MagicDisplayGpsDisplay::kSatView:
2538  // fG12SatEntry++;
2539  // if(fG12SatTree) {
2540  // if(fG12SatEntry>=fG12SatTree->GetEntries())
2541  // return -1;
2542  // }
2543  // getGpsEntry();
2544  // if(fAdu5aSatIndex) {
2545  // fAdu5aSatEntry=fAdu5aSatIndex->GetEntryNumberWithBestIndex(fG12SatPtr->realTime,0);
2546  // if(fAdu5aSatEntry<0) fAdu5aSatEntry=0;
2547  // }
2548  // if(fAdu5bSatIndex) {
2549  // fAdu5bSatEntry=fAdu5bSatIndex->GetEntryNumberWithBestIndex(fG12SatPtr->realTime,0);
2550  // if(fAdu5bSatEntry<0) fAdu5aSatEntry=0;
2551  // }
2552  // break;
2553  // case MagicDisplayGpsDisplay::kTimeView:
2554  // break;
2555  // default:
2556  // break;
2557  // }
2558  // retVal=getGpsEntry();
2559  // if(retVal==0)
2560  // refreshGpsDisplay();
2561  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2562 
2563  return retVal;
2564 
2565 }
2566 
2568 {
2569  Int_t retVal=0;
2570  // switch(fGpsCanMaker->getGpsDisplayOpt()) {
2571  // case MagicDisplayGpsDisplay::kMapView:
2572  // break;
2573  // case MagicDisplayGpsDisplay::kSatView:
2574  // if(fG12SatEntry>0)
2575  // fG12SatEntry--;
2576  // if(fAdu5aSatEntry>0)
2577  // fAdu5aSatEntry--;
2578  // if(fAdu5bSatEntry>0)
2579  // fAdu5bSatEntry--;
2580  // break;
2581  // case MagicDisplayGpsDisplay::kTimeView:
2582  // break;
2583  // default:
2584  // break;
2585  // }
2586  // retVal=getGpsEntry();
2587  // if(retVal==0)
2588  // refreshGpsDisplay();
2589  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2590 
2591  return retVal;
2592 }
2593 
2595 {
2596  if(!fGpsCanvas) {
2597  fGpsCanvas = new TCanvas("canMagicGps","canMagicGps",800,700);
2598  fGpsCanvas->cd();
2599  drawGpsButtons();
2600  }
2601  if(!fGpsMainPad) {
2602  fGpsCanvas->cd();
2603  fGpsMainPad= new TPad("canMagicGpsMain","canMagicGpsMain",0,0,1,0.9);
2604  fGpsMainPad->Draw();
2605  fGpsCanvas->Update();
2606  }
2607  if(!fGpsInfoPad) {
2608  fGpsCanvas->cd();
2609  fGpsInfoPad= new TPad("canMagicGpsInfo","canMagicGpsInfo",0.2,0.91,0.8,0.99);
2610  fGpsInfoPad->Draw();
2611  fGpsCanvas->Update();
2612  }
2613  //This will need to change
2614  fGpsCanMaker->getGpsInfoCanvas(fAdu5ASatPtr,fAdu5BSatPtr,fG12SatPtr,
2615  fAdu5APatPtr,fAdu5BPatPtr,fG12PosPtr,
2616  fGpsInfoPad);
2617  fGpsCanMaker->getGpsMainCanvas(fAdu5ASatPtr,fAdu5BSatPtr,fG12SatPtr,
2618  fAdu5APatPtr,fAdu5BPatPtr,fG12PosPtr,
2619  fGpsMainPad);
2620 
2621  fGpsCanvas->Update();
2622  fGpsCanvas->Modified();
2623 
2624 }
2625 
2627 {
2628  // if(!fGpsFile) {
2629  // if(loadGpsTrees()<0) {
2630  // cout << "Couldn't open GPS file\n";
2631  // return -1;
2632  // }
2633  // }
2634 
2635  // //Now have to decide which tree to move on in
2636  // Int_t newData=0;
2637  // if(fG12PosTree) {
2638  // // cout << "Got g12PosTree\n";
2639  // if(fG12PosEntry<fG12PosTree->GetEntries()) {
2640  // fG12PosTree->GetEntry(fG12PosEntry);
2641  // newData++;
2642  // }
2643  // else {
2644  // std::cout << "Now more entries in g12PosTree\n";
2645  // }
2646  // }
2647  // if(fG12SatTree) {
2648  // // cout << "Got g12SatTree\n";
2649  // if(fG12SatEntry<fG12SatTree->GetEntries()) {
2650  // fG12SatTree->GetEntry(fG12SatEntry);
2651  // newData++;
2652  // }
2653  // else {
2654  // std::cout << "Now more entries in g12SatTree\n";
2655  // }
2656  // }
2657  // if(fAdu5aSatTree) {
2658  // // cout << "Got adu5SatTree\n";
2659  // if(fAdu5aSatEntry<fAdu5aSatTree->GetEntries()) {
2660  // fAdu5aSatTree->GetEntry(fAdu5aSatEntry);
2661  // newData++;
2662  // }
2663  // else {
2664  // std::cout << "Now more entries in adu5aSatTree\n";
2665  // }
2666  // }
2667  // if(fAdu5bSatTree) {
2668  // // cout << "Got adu5bSatTree\n";
2669  // if(fAdu5bSatEntry<fAdu5bSatTree->GetEntries()) {
2670  // fAdu5bSatTree->GetEntry(fAdu5bSatEntry);
2671  // newData++;
2672  // }
2673  // else {
2674  // std::cout << "Now more entries in adu5bSatTree\n";
2675  // }
2676  // }
2677 
2678  // if(fAdu5aPatTree) {
2679  // // cout << "Got adu5PatTree\n";
2680  // if(fAdu5aPatEntry<fAdu5aPatTree->GetEntries()) {
2681  // fAdu5aPatTree->GetEntry(fAdu5aPatEntry);
2682  // newData++;
2683  // }
2684  // else {
2685  // std::cout << "Now more entries in adu5aPatTree\n";
2686  // }
2687  // }
2688 
2689  // if(fAdu5bPatTree) {
2690  // // cout << "Got adu5bPatTree\n";
2691  // if(fAdu5bPatEntry<fAdu5bPatTree->GetEntries()) {
2692  // fAdu5bPatTree->GetEntry(fAdu5bPatEntry);
2693  // newData++;
2694  // }
2695  // else {
2696  // std::cout << "Now more entries in adu5bPatTree\n";
2697  // }
2698  // }
2699  // if(fAdu5aVtgTree) {
2700  // // cout << "Got adu5VtgTree\n";
2701  // if(fAdu5aVtgEntry<fAdu5aVtgTree->GetEntries()) {
2702  // fAdu5aVtgTree->GetEntry(fAdu5aVtgEntry);
2703  // newData++;
2704  // }
2705  // else {
2706  // std::cout << "Now more entries in adu5aVtgTree\n";
2707  // }
2708  // }
2709  // if(fAdu5bVtgTree) {
2710  // // cout << "Got adu5bVtgTree\n";
2711  // if(fAdu5bVtgEntry<fAdu5bVtgTree->GetEntries()) {
2712  // fAdu5bVtgTree->GetEntry(fAdu5bVtgEntry);
2713  // newData++;
2714  // }
2715  // else {
2716  // std::cout << "Now more entries in adu5bVtgTree\n";
2717  // }
2718  // }
2719 
2720 
2721  // if(newData==0)
2722  // return -1;
2723 
2724  std::cerr << "Temporarily deleted body of " << __PRETTY_FUNCTION__ << " during code refactoring" << std::endl;
2725 
2726  return 0;
2727 }
2728 
2729 void MagicDisplay::setGpsView(MagicDisplayGpsDisplay::MagicDisplayGpsDisplay_t theDisplay)
2730 {
2731  if(theDisplay==MagicDisplayGpsDisplay::kSatView) {
2732  fGpsCanMaker->setGpsDisplayOpt(theDisplay);
2733  fGpsSatViewButton->SetFillColor(kGray+3);
2734  fGpsMapViewButton->SetFillColor(kGray);
2735  fGpsSatViewButton->Modified();
2736  fGpsMapViewButton->Modified();
2737  }
2738  else if(theDisplay==MagicDisplayGpsDisplay::kMapView) {
2739  fGpsCanMaker->setGpsDisplayOpt(theDisplay);
2740  fGpsSatViewButton->SetFillColor(kGray);
2741  fGpsMapViewButton->SetFillColor(kGray+3);
2742  fGpsSatViewButton->Modified();
2743  fGpsMapViewButton->Modified();
2744  }
2746 }
2747 
2749 {
2750  TButton *butNext = new TButton("Next.","MagicDisplay::Instance()->displayNextGps();",0.9,0.95,1,1);
2751  butNext->SetTextSize(0.4);
2752  butNext->SetFillColor(kGreen-10);
2753  butNext->Draw();
2754  TButton *butPrev = new TButton("Prev.","MagicDisplay::Instance()->displayPreviousGps();",0.9,0.90,1,0.95);
2755  butPrev->SetTextSize(0.4);
2756  butPrev->SetFillColor(kBlue-10);
2757  butPrev->Draw();
2758  TButton *butPlay = new TButton("Play","MagicDisplay::Instance()->startGpsPlaying();",0.85,0.95,0.9,1);
2759  butPlay->SetTextSize(0.4);
2760  butPlay->SetFillColor(kGreen-10);
2761  butPlay->Draw();
2762  TButton *butStop = new TButton("Stop","MagicDisplay::Instance()->stopGpsPlaying();",0.85,0.90,0.9,0.95);
2763  butStop->SetTextSize(0.4);
2764  butStop->SetFillColor(kRed-10);
2765  butStop->Draw();
2766 
2767  fGpsSatViewButton = new TButton("Satellite","MagicDisplay::Instance()->setGpsView(MagicDisplayGpsDisplay::kSatView);",0.,0.95,0.1,1);
2768  fGpsSatViewButton->SetTextSize(0.4);
2769  fGpsSatViewButton->SetFillColor(kGray+3);
2770  fGpsSatViewButton->Draw();
2771 
2772  fGpsMapViewButton = new TButton("Map View","MagicDisplay::Instance()->setGpsView(MagicDisplayGpsDisplay::kMapView);",0.,0.9,0.1,0.95);
2773  fGpsMapViewButton->SetTextSize(0.4);
2774  fGpsMapViewButton->SetFillColor(kGray);
2775  fGpsMapViewButton->Draw();
2776 
2777 }
2778 
2779 
2780 void MagicDisplay::setAnalysisConfig(const UCorrelator::AnalysisConfig * config)
2781 {
2782  delete fUCorr;
2783  fUCorr = new UCorrelator::Analyzer(config, true);
2784 
2785  if (fCanvasLayout == MagicDisplayCanvasLayoutOption::kUCorrelator)
2786  {
2787  this->refreshEventDisplay();
2788  }
2789 
2790 }
2791 
2793 {
2794  fInGpsPlayMode=1;
2795  do {
2796  gSystem->ProcessEvents();
2797  if(!fInGpsPlayMode) break;
2798  }
2799  while(this->displayNextGps()==0);
2800 
2801 }
2802 
2804  {
2805  fInGpsPlayMode=0;
2806  }
2807 
2808 Acclaim::AnalysisReco& MagicDisplay::getAnalysisReco(){
2809 
2810  if(fEventCanMaker==NULL){
2812  }
2813  return fEventCanMaker->getAnalysisReco();
2814 }
2815 
2816 
2817 
2818 void MagicDisplay::loadPlaylist(const char* playlist)
2819 {
2820  std::vector<std::vector<long> > runEv;
2821  int rN;
2822  int evN;
2823  ifstream pl(playlist);
2824  pl >> evN;
2825 
2826  // Simulated events
2827  //as iceMC generates random eventNumbers, simulated data event numbers aren't linked to actual event numbers, so ignore evN restrictions
2828  Bool_t simulatedData = false; // must be set to false for non-simulated data
2829  if(simulatedData == true)
2830  {
2831  std::cout << "Using simulated data! Turn off the simulatedData variable if you are working with real data." << std::endl;
2832  rN = evN;
2833  pl >> evN;
2834  std::vector<long> Row;
2835  Row.push_back(rN);
2836  Row.push_back(evN);
2837  runEv.push_back(Row);
2838  while(pl >> rN >> evN)
2839  {
2840  std::vector<long> newRow;
2841  newRow.push_back(rN);
2842  newRow.push_back(evN);
2843  runEv.push_back(newRow);
2844  }
2845 
2846  }
2847 
2848  else
2849  {
2850  if(evN < 400)
2851  {
2852  rN = evN;
2853  pl >> evN;
2854  vector<long> Row;
2855  Row.push_back(rN);
2856  Row.push_back(evN);
2857  runEv.push_back(Row);
2858  while(pl >> rN >> evN)
2859  {
2860  vector<long> newRow;
2861  newRow.push_back(rN);
2862  newRow.push_back(evN);
2863  runEv.push_back(newRow);
2864  }
2865  }
2866  else
2867  {
2869  if(rN == -1) fprintf(stderr, "Something is wrong with your playlist\n");
2870  vector<long> Row;
2871  Row.push_back(rN);
2872  Row.push_back(evN);
2873  runEv.push_back(Row);
2874  while(pl >> evN)
2875  {
2877  if(rN == -1) fprintf(stderr, "Something is wrong with your playlist\n");
2878  vector<long> newRow;
2879  newRow.push_back(rN);
2880  newRow.push_back(evN);
2881  runEv.push_back(newRow);
2882  }
2883  }
2884  }
2885  fPlaylist = runEv;
2886 }
2887 
2888 
2889 
2890 
2891 
2892 void MagicDisplay::dumpWaveformsForPeter(){
2893 
2894  if(fFilteredEventPtr){
2895 
2896  TString fileName = TString::Format("run%d_ev%d_a%d_%s_%s_%s.txt",
2897  getCurrentRun(), getCurrentEvent(), AnitaVersion::get(),
2898  MagicDisplayCanvasLayoutOption::toString(fCanvasLayout),
2899  MagicDisplayFormatOption::toString(fWaveformFormat),
2900  butFiltering->GetTitle());
2901 
2902  std::ofstream dump(fileName);
2903 
2904  for(int pol=0; pol < AnitaPol::kNotAPol; pol++){
2905  for(int ant=0; ant < NUM_SEAVEYS; ant++){
2906  const AnalysisWaveform* wf = fFilteredEventPtr->getFilteredGraph(ant, AnitaPol::AnitaPol_t(pol));
2907  const TGraphAligned* gr = wf->even();
2908  for(int i=0; i < gr->GetN(); i++){
2909  dump << gr->GetX()[i] << ", " << gr->GetY()[i];
2910  }
2911 
2912 
2913  }
2914  }
2915 
2916 
2917 
2918  }
2919 }
enum MagicDisplayCanvasLayoutOption::EMagicDisplayCanvasLayoutOption MagicDisplayCanvasLayoutOption_t
Enumeration for canvas layout.
void stopSurfHkPlaying()
Stops SURF Hk Play modes.
int setCut(const TCut &cut)
void toggleAvgSurfLogView()
Toggles between log and linear.
MagicDisplay()
Default constructor.
void refreshEventDisplay(bool forceRedo=false)
Refresh the event display and redraw the graphs, this is called everytime a new event is displayed...
void startControlPanel()
Starts the (currently highly buggy) control panel.
int displayNextAvgSurf()
Displays the next entry in the averaged SURF hk tree.
A a glorified ring buffer of frequency amplitudes with a TSpectrum to look for CW spikes...
Definition: FourierBuffer.h:42
void drawGpsButtons()
Draws the buttons on the GPS rate display.
void stopAvgSurfHkPlaying()
Stops Average SURF Hk Play mode.
void drawTurfButtons()
Draws the buttons on the TURF rate display.
void toggleSurfRfPowerView(Int_t kelvinView)
Toggles betweem adc and Kelvin views.
void startGpsDisplay()
Starts the GPS display window.
void stopGpsPlaying()
Stops GPS Play mode.
const FilterStrategy * getStrategy() const
enum MagicDisplayFormatOption::EMagicDisplayFormatOption MagicDisplayFormatOption_t
Enumeration for plot style.
void closeCurrentRun()
Closes all currently opened run TFiles, in preparation for changing to a new run. ...
void drawSumTurfButtons()
Draws the buttons on the summed TURF rate display.
void startTurfDisplay()
Starts the TURF Rate display window.
int displayPreviousAvgSurf()
Displays the previous entry in the averaged SURF hk tree.
int displayNextSumTurf()
Displays the next summed TURF rate entry in the tree.
TPad * getTurfInfoCanvas(TurfRate *turfPtr, TPad *useCan)
Returns the TurfRate info canvas, the canvas can be provided in useCan
void setAvgSurfHkDisplay(MagicDisplaySurfHkDisplay::MagicDisplaySurfHkDisplay_t surfDisplay)
Toggles between surf and phi views.
TPad * getGpsMainCanvas(Adu5Sat *adu5SatAPtr, Adu5Sat *adu5SatBPtr, G12Sat *g12SatPtr, Adu5Pat *adu5PatAPtr, Adu5Pat *adu5PatBPtr, G12Pos *g12PosPtr, TPad *useCan=0)
Returns the main GPS canvas.
Does the event reconstruction, and produces a summary of it.
Definition: AnalysisReco.h:30
View of both polarisations arranged by phi.
int loadGpsTrees()
Opens the GPS file for the current run.
int displayPreviousSumTurf()
Displays the previous summed TURF rate entry in the tree.
enum WaveCalType::EWaveCalType WaveCalType_t
The calibration enumeration type.
int getSumTurfEntry()
Attempts to get the entry corresponding to fSumTurfRateFile.
int displayPreviousEvent(int nskip=0)
Displays the previous event in the file, normally called by pressing the "Previous" button...
TPad * getAvgSurfInfoCanvas(AveragedSurfHk *avgSurfPtr, TPad *useCan)
Returns the averaged SURF hk info canvas, the canvas can be provided in useCan
STL namespace.
Char_t fCurrentBaseDir[180]
The base directory for the ROOT files.
Definition: MagicDisplay.h:274
int displayPreviousSurf()
Displays the previous SURF hk entry.
FilterStrategy * getStrategyWithKey(const char *key)
Definition: UCFilters.cc:28
static AnitaGpsCanvasMaker * Instance()
Instance generator.
void toggleTimeEventOrdering()
Toggles between time and event ordering.
int displayNextGps()
Displays the next event in the GPS tree.
TPad * getTurfRateCanvas(TurfRate *turfPtr, TPad *useCan=0)
Returns the TurfRate histogram canvas, the canvas can be provided in useCan
The SURF and TURF hk display canvas maker.
int displayNextSurf()
Displays the next SURF hk entry.
static AnitaRFCanvasMaker * Instance()
Instance generator.
void startSurfDisplay()
Starts the SURF Hk display window.
int displayPreviousTurf()
Displays the previous event in the TURF tree.
~MagicDisplay()
Destructor.
TPad * getSurfInfoCanvas(SurfHk *surfPtr, TPad *useCan)
Returns the SURF hk info canvas, the canvas can be provided in useCan
int getEvent(int eventNumber, bool quiet=false)
A filter strategy defines the sets of filters that are used and provides some introspection abilities...
void setGpsDisplayOpt(MagicDisplayGpsDisplay::MagicDisplayGpsDisplay_t displayOpt)
Sets the GPS display option.
void startEventPlaying()
Starts event playback mode, normally called by pressing the "Play" button the display.
Int_t fFixTurfYScale
Fixed or autoscaling TURF.
void startAvgSurfDisplay()
Starts the averaged SURF hk display window.
int getAvgSurfEntry()
Attempts to load get the entry corresponding to fAvgSurfHkEntry.
int loadSurfTree()
Opens the SURF hk file for the current run.
Long64_t fEventEntry
The current event+header entry.
Definition: MagicDisplay.h:251
TPad * getSumTurfRateCanvas(SummedTurfRate *sumTurfPtr, TPad *useCan=0)
Returns the summed TURF rate histogram canvas, the canvas can be provided in useCan ...
Int_t getCurrentRun()
Returns the current run number.
Definition: MagicDisplay.h:107
USeful in for loops.
void refreshAvgSurfDisplay()
Refreshes the averaged SURF hk display.
Long64_t fSumTurfRateEntry
The current summed TURF rate entry.
Definition: MagicDisplay.h:255
void refreshGpsDisplay()
Refreshs the GPS display.
enum MagicDisplaySurfHkDisplay::EMagicDisplaySurfHkDisplay MagicDisplaySurfHkDisplay_t
Enumeration for plot style.
int N() const
Int_t fFixSumTurfYScale
Fixed or autoscaling summed TURF.
void setSurfLogFlag(Int_t logFlag)
Log or linear scale?
int displayLastEvent()
Displays the last event in the file, normally called by pressing the "Last" button.
int loadAvgSurfTree()
Opens the averaged SURF hk file for the current rune.
int displayPreviousGps()
Displays the previous event in the GPS tree.
virtual UsefulAnitaEvent * useful(bool force_reload=false)
Long64_t fSurfHkEntry
The current SURF hk entry.
Definition: MagicDisplay.h:254
int loadDataset()
Loads the event tree corresponding to the current run number fCurrentRun
size_t nOperations() const
void drawEventButtons()
Worker function to draw the buttons on the main event display canvas.
Int_t fAvgSurfKelvinView
ADC or Kelvin view.
Long64_t fTurfRateEntry
The current TURF rate entry.
Definition: MagicDisplay.h:253
AnitaResponse::DeconvolutionMethod * deconvolution_method
UInt_t getCurrentEvent()
Returns the current event number.
void toggleSumTurfYScale()
Toggles between fixed and auto-scaling y-axis on the summed TURF display.
View of vertical polarisation arranged by phi.
void startEventDisplay()
static MagicDisplay * fgInstance
The pointer to the current MagicDisplay.
Definition: MagicDisplay.h:291
int displayNextTurf()
Displays the next event in the TURF tree.
void startEventPlayingReverse()
Starts the event playback in reverse mode, normally called by pressing the "Rev" button on the main d...
UInt_t fCurrentRun
The current run number.
Definition: MagicDisplay.h:273
View of all channels arranged by SURF.
enum MagicDisplayGpsDisplay::EMagicDisplayGpsDisplay MagicDisplayGpsDisplay_t
Enumeration for plot style.
void toggleTurfYScale()
Toggles betweeen fixed and auto-scaling y-axis pn the TURF rate display.
void toggleSurfLogView()
Toggles between log and linear.
void setSurfHkDisplay(MagicDisplaySurfHkDisplay::MagicDisplaySurfHkDisplay_t surfOpt)
Phi, surf or time.
void startSumTurfDisplay()
Starts the summed TURF rate display program.
Tracks the amplitudes of frequencies but doesn&#39;t do anything else, to be inherited from...
void setCanvasLayout(MagicDisplayCanvasLayoutOption::MagicDisplayCanvasLayoutOption_t option)
Toggles between waveform and FFT view modes.
static MagicControlPanel * Instance()
The instance generator (there should only be one instance of the MagicControlPanel at a time...
TPad * getSurfHkCanvas(SurfHk *surfPtr, TPad *useCan=0)
Returns the SURF hk histogram canvas, the canvas can be provided in useCan
int getSurfEntry()
Attempts to load the entry corresponding to fSurfHkEntry.
void setSurfHkDisplay(MagicDisplaySurfHkDisplay::MagicDisplaySurfHkDisplay_t surfDisplay)
Toggles between surf and phi views.
Acclaim::AnalysisReco & getAnalysisReco()
get command line access with a reference
void setAvgSurfLogFlag(Int_t logFlag)
Log or linear scale?
View of horizontal polarisation arranged by phi.
static FilteringPanel * Instance()
The instance generator (there should only be one instance of the FilteringPanel at a time...
const char * fillStrategyWithKey(FilterStrategy *fillme, const char *key)
Definition: UCFilters.cc:50
void drawAvgSurfButtons()
Draws the buttons on the averaged SURF hk display.
void refreshTurfDisplay()
Refreshs the TURF rate display.
static const char * getDataDir(DataDirectory dir=ANITA_ROOT_DATA)
TPad * getSumTurfInfoCanvas(SummedTurfRate *sumTurfPtr, TPad *useCan)
Returns the summed TURF Rate info canvas, the canvas can be provided in useCan
Adu5Pat * gps(bool force_reload=false)
void refreshSumTurfDisplay()
Refreshes the summed TURF rate display.
TPad * getEventViewerCanvas(FilteredAnitaEvent *fEv, TPad *useCan=0, bool forceRedo=false)
The main event view canvas getter.
The GPS canvas maker.
const AnalysisWaveform * getFilteredGraph(UInt_t i) const
void toggleAvgSurfRfPowerView(Int_t kelvinView)
Toggles betweem adc and Kelvin views.
void startSurfHkPlaying()
Starts SURF Hk Play mode.
void SetDrawDomain(Int_t val)
Set the value of fDrawDomain from an integer value.
Definition: AnalysisReco.h:767
int loadTurfTree()
Opens the TURF rate file for the current run.
TPad * getGpsInfoCanvas(Adu5Sat *adu5SatAPtr, Adu5Sat *adu5SatBPtr, G12Sat *g12SatPtr, Adu5Pat *adu5PatAPtr, Adu5Pat *adu5PatBPtr, G12Pos *g12PosPtr, TPad *useCan)
Returns the GPS info canvas, the canvas can be provided in useCan
int displayNextEvent(int nskip=0)
!< Display a particular event, uses AnitaDataset to find run if -1 is passed (default) ...
static MagicDisplay * Instance()
Returns a pointer to the active MagicDisplay. This is very useful if you want to access the TTree&#39;s d...
void setWaveformFormat(MagicDisplayFormatOption::MagicDisplayFormatOption_t waveformView)
Toggles between waveform and FFT view modes.
virtual RawAnitaHeader * header(bool force_reload=false)
void refreshSurfDisplay()
Refreshes the SURF Hk display.
TPad * getEventInfoCanvas(const UsefulAnitaEvent *evPtr, const RawAnitaHeader *hdPtr, const Adu5Pat *pat, TPad *useCan=0)
The event info canvas getter.
int displayFirstEvent()
Displays the first event in the file, normally called by pressing the "First" button.
TPad * getAvgSurfHkCanvas(AveragedSurfHk *avgSurfPtr, TPad *useCan=0)
Returns the averaged SURF hk histogram canvas, the canvas can be provided in useCan ...
void setAvgSurfHkDisplay(MagicDisplaySurfHkDisplay::MagicDisplaySurfHkDisplay_t surfOpt)
Phi, surf or time.
DrawDomain GetEnumDrawDomain() const
Get the value of fDrawDomain as AnalysisFlow::selection enum.
Definition: AnalysisReco.h:767
View of Jiwoo&#39;s pretty 3-d payload.
const TGraphAligned * even() const
void startAvgSurfHkPlaying()
Starts Average SURF Hk Play mode.
void drawSurfButtons()
Draws the buttons on the SURF hk display.
int loadSumTurfTree()
Opens the summed TURF rate file for the current run.
int displayThisEvent(UInt_t eventNumber, Int_t run=-1)
Displays a specified event number (from the specified run number). This is an increddibly useful and ...
This class is intended to store all the necessary data about an ANITA event for filtering and analysi...
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.
int getTurfEntry()
Attempts to load the entry corresponding to fTurfRateEntry.
static int getRunContainingEventNumber(UInt_t eventNumber)
Get the run that contains the eventNumber.
int getGpsEntry()
Attempts to load the entries.
void applyCut(const char *cutString)
Applies a cut to the head tree.
Int_t fSurfKelvinView
ADC or Kelvin view.
The event display canvas maker.
This class is intended to be the main storage vessel for ANITA waveforms. It is similar in principle ...
Long64_t fAvgSurfHkEntry
The current averaged SURF hk entry.
Definition: MagicDisplay.h:256
The Marvellous ANITA Graphical Interface and Class Display (Magic Display)
Definition: MagicDisplay.h:75
const FilterOperation * getOperation(size_t i) const
void startFilteringPanel()
Starts the filtering control panel, to set filter strategies in the gui.
int getEventEntry()
Tries to retrieve the event corresponding to entry fEventEntry from the evnt file. Returns zero on success.
void startGpsPlaying()
Starts GPS Play mode.
void stopEventPlaying()
Stops the event playback, normally called by pressing the "Stop" button on the main display...