31 #include "KeySymbols.h" 39 #include "CalibratedAnitaEvent.h" 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" 51 #include "AnitaConventions.h" 52 #include "UsefulAnitaEvent.h" 53 #include "RawAnitaHeader.h" 54 #include "PrettyAnitaHk.h" 57 #include "SummedTurfRate.h" 58 #include "AveragedSurfHk.h" 71 #include "TTreeIndex.h" 73 #include "TGroupButton.h" 75 #include "TEventList.h" 77 #include "TRootEmbeddedCanvas.h" 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" 98 void MagicDisplay::zeroPointers()
104 fOrderByEventNumber=1;
105 fEventCutListEntry=-1;
106 fEventTreeIndexEntry=-1;
117 fWhichEventFileKind=MagicDisplayFileType::kCalEvent;
124 fLastFilteredEventNumber = 0;
162 fMagicEventInfoPad=0;
196 fInEventPlayMode = 0;
198 initializeFilterStrategies();
218 void MagicDisplay::initializeFilterStrategies(){
221 clearFilterStrategies();
223 FILE * f = fopen(
"ucfilters.cfg",
"r");
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");
239 while (
char * pos = strchr(buf,
'\n')) *pos = 0;
241 while (
char * pos = strchr(buf,
'#')) *pos = 0;
248 filterStrats[
"None"] = fNone;
258 filterStrats[Acclaim::Filters::getCosminsFavouriteSineSubName()] = fSS;
269 setFilterStrategy(fNone);
274 void MagicDisplay::drawUCorrelatorFilterButtons()
285 void MagicDisplay::clearFilterStrategies()
288 for (std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin(); it != filterStrats.end(); it++)
294 filterStrats.clear();
304 fFilteringPanel->selectMagicDisplayFilterInComboBox();
305 fFilteringPanel->updateText();
311 bool foundIt =
false;
312 std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin();
313 for(; it!= filterStrats.end(); it++)
315 if(it->second == fStrategy){
316 butFiltering->SetTitle(it->first);
323 butFiltering->SetTitle(
"?????");
325 butFiltering->Modified();
326 butFiltering->Update();
329 this->refreshEventDisplay(
true);
347 prepareKeyboardShortcuts();
348 fDataDirectory= AnitaDataset::ANITA_ROOT_DATA;
358 delete fControlPanel;
361 delete fFilteringPanel;
364 clearFilterStrategies();
374 prepareKeyboardShortcuts();
375 fDataDirectory= AnitaDataset::ANITA_ROOT_DATA;
377 std::cout <<
"MagicDisplay::MagicDisplay(" << baseDir <<
" , " << run <<
")" << std::endl;
380 fBlindingStrategy = blinding;
383 setenv(
"ANITA_ROOT_DATA", baseDir,1);
386 if (FILE * wf = fopen(
"magicwisdom.dat",
"r"))
389 FFTtools::loadWisdom(
"magicwisdom.dat");
399 prepareKeyboardShortcuts();
400 int anita_version = (int) dir;
401 if (anita_version > 0) AnitaVersion::set(anita_version);
402 fDataDirectory = dir;
407 fBlindingStrategy = blinding;
409 if (FILE * wf = fopen(
"magicwisdom.dat",
"r"))
412 FFTtools::loadWisdom(
"magicwisdom.dat");
420 loadPlaylist(playlist);
424 prepareKeyboardShortcuts();
425 int anita_version = (int) dir;
426 if (anita_version > 0) AnitaVersion::set(anita_version);
427 fDataDirectory = dir;
432 fBlindingStrategy = blinding;
436 if (FILE * wf = fopen(
"magicwisdom.dat",
"r"))
439 FFTtools::loadWisdom(
"magicwisdom.dat");
470 if(!fPlaylist.empty()){
486 std::cout <<
"Couldn't load data set file\n";
493 fHeadPtr = fDataset->
header();
494 fUsefulEventPtr = fDataset->
useful();
495 fPatPtr = fDataset->
gps();
522 if(fDataset->
N() < 1){
523 cout <<
"Couldn't find dataset! << \n";
526 std::cerr << fDataset->
N() << std::endl;
533 Bool_t MagicDisplay::HandleSelection(Event_t* event){
534 prepareKeyboardShortcuts();
535 std::cout <<
"here" << std::endl;
536 return TGMainFrame::HandleSelection(event);
540 void MagicDisplay::prepareKeyboardShortcuts(){
542 gVirtualX->GrabKey(fId, kAnyKey, kAnyModifier, kTRUE);
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;
554 static int getNumeric()
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));
568 Bool_t MagicDisplay::HandleKey(Event_t * event)
574 int start_index = numeric_buf_index;
576 if (event->fType == kGKeyPress){
580 gVirtualX->LookupString(event,tmp,
sizeof(tmp),keysym);
595 numeric_buf_index = numeric_buf_index % max_numeric_buf;
596 numeric_buf[numeric_buf_index++] =
'0' + keysym - kKey_0;
602 last_nskip = getNumeric()-1;
609 last_nskip = getNumeric()-1;
615 if(fInEventPlayMode){
623 if(fInEventPlayMode){
684 if(fCanvasLayout==MagicDisplayCanvasLayoutOption::kInterferometry){
685 switch(Acclaim::AnalysisReco::DrawDomain d = getAnalysisReco().GetEnumDrawDomain()){
686 case Acclaim::AnalysisReco::kTimeDomain:
687 getAnalysisReco().
SetDrawDomain(Acclaim::AnalysisReco::kFreqDomain);
689 case Acclaim::AnalysisReco::kFreqDomain:
690 getAnalysisReco().
SetDrawDomain(Acclaim::AnalysisReco::kStokesParams);
692 case Acclaim::AnalysisReco::kStokesParams:
693 getAnalysisReco().
SetDrawDomain(Acclaim::AnalysisReco::kTimeDomain);
696 swapWaveformButtonFunctionsAndTitles(MagicDisplayCanvasLayoutOption::kInterferometry);
711 fb->setForceLoadHistory(
true);
734 fMagicCanvas->SaveAs(TString::Format(
"run%d_ev%d_a%d_%s_%s_%s.png",
736 MagicDisplayCanvasLayoutOption::toString(fCanvasLayout),
737 MagicDisplayFormatOption::toString(fWaveformFormat),
738 butFiltering->GetTitle()));
744 dumpWaveformsForPeter();
753 case kKey_NumberSign:
754 FFTtools::saveWisdom(
"magicwisdom.dat");
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" 763 "[space]: start/stop play\n" 764 "[bksp] play reverse\n" 767 "x: show both pols\n" 769 "i: show interferometry\n" 770 "u: show UCorrelator\n" 771 "[tab]:cycle filter\n" 772 "f: show filter panel\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);
788 if (numeric_buf_index == start_index)
798 if (!fBindList)
return kFALSE;
800 TIter next(fBindList);
804 while ((m = (TGMapKey *) next()))
806 if (m->fKeyCode == event->fCode)
808 w = (TGFrame *) m->fWindow;
809 if (w->HandleKey(event))
return kTRUE;
827 this->AddFrame(fMagicEmbedded,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
828 this->SetWindowName(
"MAGIC Display");
829 this->MapSubwindows();
845 fMagicCanvas = fMagicEmbedded->GetCanvas();
853 fMagicCanvas->SetName(
"canMagic");
865 fMagicMainPad=
new TPad(
"canMagicMain",
"canMagicMain",0,0,1,0.9);
867 fMagicMainPad->Draw();
868 fMagicCanvas->Update();
870 if(!fMagicEventInfoPad) {
872 fMagicEventInfoPad=
new TPad(
"canMagicEventInfo",
"canMagicEventInfo",0.2,0.91,0.8,0.99);
873 fMagicEventInfoPad->Draw();
874 fMagicCanvas->Update();
881 fEventCanMaker->setWaveformFormat(fWaveformFormat);
882 fEventCanMaker->setCanvasLayout(fCanvasLayout);
890 if(fFilteredEventPtr){
894 if(fFilteredEventPtr->
getStrategy() != getStrategy() ||
897 delete fFilteredEventPtr;
898 fFilteredEventPtr = NULL;
902 if(!fFilteredEventPtr){
903 fFilteredEventPtr =
new FilteredAnitaEvent(fUsefulEventPtr, getStrategy(), fPatPtr, fHeadPtr);
909 fEventCanMaker->
getEventInfoCanvas(fUsefulEventPtr,fHeadPtr,fPatPtr,fMagicEventInfoPad);
911 fMagicCanvas->Update();
919 void MagicDisplay::setNextFilter(){
922 std::map<TString, FilterStrategy*>::iterator it = filterStrats.begin();
923 bool selectThisOne =
false;
925 for(; it!=filterStrats.end(); ++it){
928 setFilterStrategy(it->second);
929 selectThisOne =
false;
933 if(it->second == fStrategy){
935 selectThisOne =
true;
939 if(selectThisOne==
true){
940 it = filterStrats.begin();
941 setFilterStrategy(it->second);
954 std::cout <<
"Couldn't load dataset\n";
958 fDataset->
setCut(TCut(cutString));
965 if(!fPlaylist.empty())
968 if(fPlaylistEntry > (
int)fPlaylist.size() - 1)
970 fprintf(stderr,
"reached end of playlist, looping around\n");
978 if(fApplyEventCut==0){
979 for (
int i = 0; i < nskip; i++) fDataset->
next();
983 for (
int i = 0; i < nskip; i++) fDataset->
nextInCut();
998 if(fApplyEventCut==0){
1015 if(fApplyEventCut==0){
1032 if(!fPlaylist.empty())
1035 if(fPlaylistEntry < 0)
1037 fprintf(stderr,
"reached end of playlist, looping around\n");
1038 fPlaylistEntry = fPlaylist.size() - 1;
1045 if(fApplyEventCut==0){
1046 for (
int i = 0; i < nskip; i++) fDataset->
previous();
1068 std::cout <<
"displayThisEvent: " << eventNumber <<
"\t" << run << std::endl;
1071 std::cout <<
"\t" <<
fCurrentRun <<
"\t" << run << std::endl;
1078 if(!fEventCanMaker){
1083 std::cerr <<
"Error! Couldn't find dataset" << std::endl;
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);
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);
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);
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);
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);
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);
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);
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);
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);
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();
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++)
1147 if(it->second == fStrategy){
1148 butFiltering->SetTitle(it->first);
1154 butFiltering->SetTitle(
"?????");
1158 butFiltering->SetTextSize(0.5);
1159 butFiltering->SetFillColor(kYellow);
1160 butFiltering->Draw();
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();
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();
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();
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();
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();
1278 fWaveformButton->SetFillColor(kGray);
1279 fPowerButton->SetFillColor(kGray);
1280 fHilbertButton->SetFillColor(kGray);
1281 fAverageFFTButton->SetFillColor(kGray);
1283 if(option==MagicDisplayCanvasLayoutOption::kInterferometry){
1285 const TString magicPtr =
"MagicDisplay* x = MagicDisplay::Instance();";
1286 const TString refreshButtons =
"x->swapWaveformButtonFunctionsAndTitles(MagicDisplayCanvasLayoutOption::kInterferometry);";
1287 const TString refreshDisplay =
"x->refreshEventDisplay();";
1289 const int deltaColor = 2;
1291 Int_t buttonColor = kGray + (getAnalysisReco().
GetEnumDrawDomain()==Acclaim::AnalysisReco::kTimeDomain ? deltaColor : 0);
1292 fWaveformButton->SetFillColor(buttonColor);
1294 buttonColor = kGray + (getAnalysisReco().
GetEnumDrawDomain()==Acclaim::AnalysisReco::kFreqDomain ? deltaColor : 0);
1295 fPowerButton->SetFillColor(buttonColor);
1297 buttonColor = kGray + (getAnalysisReco().
GetEnumDrawDomain()==Acclaim::AnalysisReco::kStokesParams ? deltaColor : 0);
1298 fHilbertButton->SetFillColor(buttonColor);
1300 fWaveformButton->Modified();
1301 fPowerButton->Modified();
1302 fHilbertButton->Modified();
1303 fAverageFFTButton->Modified();
1305 fWaveformButton->SetTitle(
"Time domain");
1306 fWaveformButton->SetMethod(
"{" + magicPtr +
"x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kTimeDomain);" + refreshButtons + refreshDisplay +
"}");
1307 fWaveformButton->SetTextSize(0.4);
1309 fPowerButton->SetTitle(
"Freq domain");
1310 fPowerButton->SetMethod(
"{" + magicPtr +
"x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kFreqDomain);" + refreshButtons + refreshDisplay +
"}");
1311 fPowerButton->SetTextSize(0.4);
1313 fHilbertButton->SetTitle(
"Stokes");
1314 fHilbertButton->SetMethod(
"{" + magicPtr +
"x->getAnalysisReco().SetDrawDomain(Acclaim::AnalysisReco::kStokesParams);" + refreshButtons + refreshDisplay +
"}");
1315 fHilbertButton->SetTextSize(0.4);
1317 TString methodForCrossPol;
1318 if(getAnalysisReco().GetDrawXPol()==0 && getAnalysisReco().GetDrawXPolDedispersed()==0){
1319 methodForCrossPol =
"x->getAnalysisReco().SetDrawXPol(1);";
1320 fAverageFFTButton->SetFillColor(kGray);
1322 else if(getAnalysisReco().GetDrawXPol() > 0 && getAnalysisReco().GetDrawXPolDedispersed()==0){
1323 methodForCrossPol =
"x->getAnalysisReco().SetDrawXPolDedispersed(1); x->getAnalysisReco().SetDrawXPol(0);";
1324 fAverageFFTButton->SetFillColor(kGray+1);
1326 else if(getAnalysisReco().GetDrawXPol() == 0 && getAnalysisReco().GetDrawXPolDedispersed() > 0){
1327 methodForCrossPol =
"x->getAnalysisReco().SetDrawXPol(1);";
1328 fAverageFFTButton->SetFillColor(kGray+2);
1331 methodForCrossPol =
"x->getAnalysisReco().SetDrawXPol(0); x->getAnalysisReco().SetDrawXPolDedispersed(0);";
1332 fAverageFFTButton->SetFillColor(kGray+3);
1335 fAverageFFTButton->SetTitle(
"Cross-pol");
1336 fAverageFFTButton->SetMethod(
"{" + magicPtr + methodForCrossPol + refreshButtons + refreshDisplay +
"}");
1337 fAverageFFTButton->SetTextSize(0.4);
1339 else if (option == MagicDisplayCanvasLayoutOption::kUCorrelator)
1341 fWaveformButton->SetTitle(
"");
1342 fWaveformButton->SetMethod(
"std::cout << \"Sorry Cosmin, I broke your buttons. Use the TAB key instead...\" << std::endl;");
1347 fPowerButton->SetTitle(
"");
1348 fPowerButton->SetMethod(
"std::cout << \"Sorry Cosmin, I broke your buttons. Use the TAB key instead...\" << std::endl;");
1352 fHilbertButton->SetTitle(
"");
1353 fHilbertButton->SetMethod(
"");
1354 fHilbertButton->SetTextSize(0.4);
1356 fAverageFFTButton->SetTitle(
"");
1357 fAverageFFTButton->SetMethod(
"");
1358 fAverageFFTButton->SetTextSize(0.4);
1360 drawUCorrelatorFilterButtons();
1364 fWaveformButton->SetTitle(
"Waveform");
1365 fWaveformButton->SetMethod(
"MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kWaveform); MagicDisplay::Instance()->refreshEventDisplay();");
1366 fWaveformButton->SetTextSize(0.4);
1368 fPowerButton->SetTitle(
"FFT");
1369 fPowerButton->SetMethod(
"MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kFFT); MagicDisplay::Instance()->refreshEventDisplay();");
1370 fPowerButton->SetTextSize(0.4);
1372 fHilbertButton->SetTitle(
"Hilbert");
1373 fHilbertButton->SetMethod(
"MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kHilbertEnvelope); MagicDisplay::Instance()->refreshEventDisplay();");
1374 fHilbertButton->SetTextSize(0.4);
1376 fAverageFFTButton->SetTitle(
"Average FFT");
1377 fAverageFFTButton->SetMethod(
"MagicDisplay::Instance()->setWaveformFormat(MagicDisplayFormatOption::kAveragedFFT); MagicDisplay::Instance()->refreshEventDisplay();");
1378 fAverageFFTButton->SetTextSize(0.4);
1380 fWaveformButton->Modified();
1381 fPowerButton->Modified();
1382 fHilbertButton->Modified();
1383 fAverageFFTButton->Modified();
1390 fCanvasLayout=option;
1391 swapWaveformButtonFunctionsAndTitles(fCanvasLayout);
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);
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);
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);
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);
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);
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);
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);
1461 fVertButton->Modified();
1462 fHorizButton->Modified();
1463 fBothButton->Modified();
1464 fSurfButton->Modified();
1465 fPayloadButton->Modified();
1466 fInterferometryButton->Modified();
1467 fUCorrelatorButton->Modified();
1473 if(fOrderByEventNumber) {
1474 fOrderByEventNumber=0;
1475 fTimeEntryButton->SetFillColor(kGray);
1476 fTimeEntryButton->Modified();
1479 fOrderByEventNumber=1;
1480 fTimeEntryButton->SetFillColor(kGray+3);
1481 fTimeEntryButton->Modified();
1488 fWaveformFormat=waveformOption;
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();
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();
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();
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();
1561 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
1592 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
1622 fTurfCanvas =
new TCanvas(
"canMagicTurf",
"canMagicTurf",800,800);
1628 fTurfMainPad=
new TPad(
"canMagicTurfMain",
"canMagicTurfMain",0,0,1,0.9);
1629 fTurfMainPad->Draw();
1630 fTurfCanvas->Update();
1634 fTurfInfoPad=
new TPad(
"canMagicTurfInfo",
"canMagicTurfInfo",0.2,0.91,0.8,0.99);
1635 fTurfInfoPad->Draw();
1636 fTurfCanvas->Update();
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);
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);
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();
1663 if(fTurfYScaleButton->GetFillColor()==kGray) {
1666 fTurfYScaleButton->SetFillColor(kGray+3);
1667 fTurfYScaleButton->Modified();
1672 fTurfYScaleButton->SetFillColor(kGray);
1673 fTurfYScaleButton->Modified();
1695 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
1707 std::cout <<
"RetVal: " << retVal <<
"\n";
1731 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
1762 fSurfCanvas =
new TCanvas(
"canMagicSurf",
"canMagicSurf",800,800);
1768 fSurfMainPad=
new TPad(
"canMagicSurfMain",
"canMagicSurfMain",0,0,1,0.9);
1769 fSurfMainPad->Draw();
1770 fSurfCanvas->Update();
1774 fSurfInfoPad=
new TPad(
"canMagicSurfInfo",
"canMagicSurfInfo",0.2,0.91,0.8,0.99);
1775 fSurfInfoPad->Draw();
1776 fSurfCanvas->Update();
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);
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);
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);
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);
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();
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();
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();
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();
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();
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();
1850 if(fSurfLogButton->GetFillColor()==kGray) {
1859 fSurfLogButton->SetFillColor(kGray+3);
1860 fSurfLogButton->Modified();
1864 fSurfLogButton->SetFillColor(kGray);
1865 fSurfLogButton->Modified();
1873 if(surfDisplay==MagicDisplaySurfHkDisplay::kSurfView) {
1875 fSurfSurfViewButton->SetFillColor(kGray+3);
1876 fSurfPhiViewButton->SetFillColor(kGray);
1877 fSurfTimeViewButton->SetFillColor(kGray);
1878 fSurfSurfViewButton->Modified();
1879 fSurfPhiViewButton->Modified();
1880 fSurfTimeViewButton->Modified();
1882 else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
1884 fSurfSurfViewButton->SetFillColor(kGray);
1885 fSurfPhiViewButton->SetFillColor(kGray+3);
1886 fSurfTimeViewButton->SetFillColor(kGray);
1887 fSurfSurfViewButton->Modified();
1888 fSurfPhiViewButton->Modified();
1889 fSurfTimeViewButton->Modified();
1891 else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
1893 fSurfSurfViewButton->SetFillColor(kGray);
1894 fSurfPhiViewButton->SetFillColor(kGray);
1895 fSurfTimeViewButton->SetFillColor(kGray+3);
1896 fSurfSurfViewButton->Modified();
1897 fSurfPhiViewButton->Modified();
1898 fSurfTimeViewButton->Modified();
1911 fSurfKelvinViewButton->SetFillColor(kGray+3);
1914 else if(kelvinView==2) {
1915 fSurfKelvinViewButton->SetFillColor(kGray);
1918 fSurfAdcViewButton->SetFillColor(kGray);
1919 fSurfKelvinViewButton->Modified();
1920 fSurfAdcViewButton->Modified();
1926 fSurfKelvinViewButton->SetFillColor(kGray);
1928 fSurfAdcViewButton->SetFillColor(kGray+3);
1929 fSurfKelvinViewButton->Modified();
1930 fSurfAdcViewButton->Modified();
1956 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
1990 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2020 if(!fAvgSurfCanvas) {
2021 fAvgSurfCanvas =
new TCanvas(
"canMagicAvgSurf",
"canMagicAvgSurf",800,800);
2022 fAvgSurfCanvas->cd();
2025 if(!fAvgSurfMainPad) {
2026 fAvgSurfCanvas->cd();
2027 fAvgSurfMainPad=
new TPad(
"canMagicAvgSurfMain",
"canMagicAvgSurfMain",0,0,1,0.9);
2028 fAvgSurfMainPad->Draw();
2029 fAvgSurfCanvas->Update();
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();
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);
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);
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);
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);
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();
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();
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();
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();
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();
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();
2104 if(fAvgSurfLogButton->GetFillColor()==kGray) {
2113 fAvgSurfLogButton->SetFillColor(kGray+3);
2114 fAvgSurfLogButton->Modified();
2118 fAvgSurfLogButton->SetFillColor(kGray);
2119 fAvgSurfLogButton->Modified();
2129 if(surfDisplay==MagicDisplaySurfHkDisplay::kSurfView) {
2131 fAvgSurfSurfViewButton->SetFillColor(kGray+3);
2132 fAvgSurfPhiViewButton->SetFillColor(kGray);
2133 fAvgSurfSurfViewButton->Modified();
2134 fAvgSurfPhiViewButton->Modified();
2136 else if(surfDisplay==MagicDisplaySurfHkDisplay::kPhiView) {
2138 fAvgSurfSurfViewButton->SetFillColor(kGray);
2139 fAvgSurfPhiViewButton->SetFillColor(kGray+3);
2140 fAvgSurfSurfViewButton->Modified();
2141 fAvgSurfPhiViewButton->Modified();
2155 fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray+3);
2156 fAvgSurfKelvinViewButton->SetFillColor(kGray);
2158 else if(kelvinView==1){
2159 fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray);
2160 fAvgSurfKelvinViewButton->SetFillColor(kGray+3);
2163 fAvgSurfAdcViewButton->SetFillColor(kGray);
2164 fAvgSurfKelvinViewButton->Modified();
2165 fAvgSurfAdcViewButton->Modified();
2166 fAvgSurfMeasuredKelvinViewButton->Modified();
2171 fAvgSurfMeasuredKelvinViewButton->SetFillColor(kGray);
2172 fAvgSurfKelvinViewButton->SetFillColor(kGray);
2173 fAvgSurfAdcViewButton->SetFillColor(kGray+3);
2174 fAvgSurfKelvinViewButton->Modified();
2175 fAvgSurfAdcViewButton->Modified();
2176 fAvgSurfMeasuredKelvinViewButton->Modified();
2201 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2232 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2262 if(!fSumTurfCanvas) {
2263 fSumTurfCanvas =
new TCanvas(
"canMagicSumTurf",
"canMagicSumTurf",800,800);
2264 fSumTurfCanvas->cd();
2267 if(!fSumTurfMainPad) {
2268 fSumTurfCanvas->cd();
2269 fSumTurfMainPad=
new TPad(
"canMagicSumTurfMain",
"canMagicSumTurfMain",0,0,1,0.9);
2270 fSumTurfMainPad->Draw();
2271 fSumTurfCanvas->Update();
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();
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);
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);
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();
2304 if(fSumTurfYScaleButton->GetFillColor()==kGray) {
2307 fSumTurfYScaleButton->SetFillColor(kGray+3);
2308 fSumTurfYScaleButton->Modified();
2313 fSumTurfYScaleButton->SetFillColor(kGray);
2314 fSumTurfYScaleButton->Modified();
2329 gSystem->ProcessEvents();
2330 if(!fInSurfPlayMode)
break;
2331 if(fEventPlaySleepMs>0)
2332 gSystem->Sleep(fEventPlaySleepMs);
2345 fInAvgSurfPlayMode=1;
2347 gSystem->ProcessEvents();
2348 if(!fInAvgSurfPlayMode)
break;
2349 if(fEventPlaySleepMs>0)
2350 gSystem->Sleep(fEventPlaySleepMs);
2357 fInAvgSurfPlayMode=0;
2366 gSystem->ProcessEvents();
2367 if(!fInEventPlayMode)
break;
2368 if(fEventPlaySleepMs>0)
2369 gSystem->Sleep(fEventPlaySleepMs);
2372 if(fInEventPlayMode) {
2374 Long64_t headEntries=fDataset->
N();
2377 if(fDataset->
N()!=headEntries) {
2378 std::cout << headEntries <<
"\t" << fDataset->
N() <<
"\n";
2392 gSystem->ProcessEvents();
2393 if(!fInEventPlayMode)
break;
2394 if(fEventPlaySleepMs>0)
2395 gSystem->Sleep(fEventPlaySleepMs);
2439 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2561 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2589 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2597 fGpsCanvas =
new TCanvas(
"canMagicGps",
"canMagicGps",800,700);
2603 fGpsMainPad=
new TPad(
"canMagicGpsMain",
"canMagicGpsMain",0,0,1,0.9);
2604 fGpsMainPad->Draw();
2605 fGpsCanvas->Update();
2609 fGpsInfoPad=
new TPad(
"canMagicGpsInfo",
"canMagicGpsInfo",0.2,0.91,0.8,0.99);
2610 fGpsInfoPad->Draw();
2611 fGpsCanvas->Update();
2615 fAdu5APatPtr,fAdu5BPatPtr,fG12PosPtr,
2618 fAdu5APatPtr,fAdu5BPatPtr,fG12PosPtr,
2621 fGpsCanvas->Update();
2622 fGpsCanvas->Modified();
2724 std::cerr <<
"Temporarily deleted body of " << __PRETTY_FUNCTION__ <<
" during code refactoring" << std::endl;
2731 if(theDisplay==MagicDisplayGpsDisplay::kSatView) {
2733 fGpsSatViewButton->SetFillColor(kGray+3);
2734 fGpsMapViewButton->SetFillColor(kGray);
2735 fGpsSatViewButton->Modified();
2736 fGpsMapViewButton->Modified();
2738 else if(theDisplay==MagicDisplayGpsDisplay::kMapView) {
2740 fGpsSatViewButton->SetFillColor(kGray);
2741 fGpsMapViewButton->SetFillColor(kGray+3);
2742 fGpsSatViewButton->Modified();
2743 fGpsMapViewButton->Modified();
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);
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);
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);
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);
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();
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();
2785 if (fCanvasLayout == MagicDisplayCanvasLayoutOption::kUCorrelator)
2796 gSystem->ProcessEvents();
2797 if(!fInGpsPlayMode)
break;
2810 if(fEventCanMaker==NULL){
2818 void MagicDisplay::loadPlaylist(
const char* playlist)
2820 std::vector<std::vector<long> > runEv;
2823 ifstream pl(playlist);
2828 Bool_t simulatedData =
false;
2829 if(simulatedData ==
true)
2831 std::cout <<
"Using simulated data! Turn off the simulatedData variable if you are working with real data." << std::endl;
2834 std::vector<long> Row;
2837 runEv.push_back(Row);
2838 while(pl >> rN >> evN)
2840 std::vector<long> newRow;
2841 newRow.push_back(rN);
2842 newRow.push_back(evN);
2843 runEv.push_back(newRow);
2857 runEv.push_back(Row);
2858 while(pl >> rN >> evN)
2860 vector<long> newRow;
2861 newRow.push_back(rN);
2862 newRow.push_back(evN);
2863 runEv.push_back(newRow);
2869 if(rN == -1) fprintf(stderr,
"Something is wrong with your playlist\n");
2873 runEv.push_back(Row);
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);
2892 void MagicDisplay::dumpWaveformsForPeter(){
2894 if(fFilteredEventPtr){
2896 TString fileName = TString::Format(
"run%d_ev%d_a%d_%s_%s_%s.txt",
2898 MagicDisplayCanvasLayoutOption::toString(fCanvasLayout),
2899 MagicDisplayFormatOption::toString(fWaveformFormat),
2900 butFiltering->GetTitle());
2902 std::ofstream dump(fileName);
2905 for(
int ant=0; ant < NUM_SEAVEYS; ant++){
2908 for(
int i=0; i < gr->GetN(); i++){
2909 dump << gr->GetX()[i] <<
", " << gr->GetY()[i];
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...
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
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
Ben's unified respone.
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.
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
Char_t fCurrentBaseDir[180]
The base directory for the ROOT files.
int displayPreviousSurf()
Displays the previous SURF hk entry.
FilterStrategy * getStrategyWithKey(const char *key)
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.
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.
void refreshAvgSurfDisplay()
Refreshes the averaged SURF hk display.
Long64_t fSumTurfRateEntry
The current summed TURF rate entry.
void refreshGpsDisplay()
Refreshs the GPS display.
enum MagicDisplaySurfHkDisplay::EMagicDisplaySurfHkDisplay MagicDisplaySurfHkDisplay_t
Enumeration for plot style.
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.
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.
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.
static MagicDisplay * fgInstance
The pointer to the current MagicDisplay.
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.
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'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)
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.
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.
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'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.
View of Jiwoo's pretty 3-d payload.
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.
Long64_t fAvgSurfHkEntry
The current averaged SURF hk entry.
The Marvellous ANITA Graphical Interface and Class Display (Magic Display)
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...