11 #include "AnitaCanvasMaker.h" 12 #include "AnitaConventions.h" 13 #include "AnitaGeomTool.h" 14 #include "UsefulAnitaEvent.h" 15 #include "RawAnitaHeader.h" 16 #include "WaveformGraph.h" 18 #include "AnalysisReco.h" 22 #include "TObjArray.h" 23 #include "TObjString.h" 26 #include "TPaveText.h" 38 #include "TTimeStamp.h" 39 #include "TGeoManager.h" 40 #include "TGeoVolume.h" 44 #include "MagicDisplay.h" 46 #include "FilteredAnitaEvent.h" 47 #include "AcclaimFilters.h" 57 int phiMap[6][8]={{0,2,4,6,8,10,12,14},
62 {1,3,5,7,9,11,13,15}};
65 int rowMap[6]={0,0,1,1,2,2};
76 WaveformGraph *grSurfFiltered[ACTIVE_SURFS][CHANNELS_PER_SURF]={{0}};
77 WaveformGraph *grSurfHilbert[ACTIVE_SURFS][CHANNELS_PER_SURF]={{0}};
78 FFTGraph *grSurfFFT[ACTIVE_SURFS][CHANNELS_PER_SURF]={{0}};
79 FFTGraph *grSurfAveragedFFT[ACTIVE_SURFS][CHANNELS_PER_SURF]={{0}};
116 memset(grSurf,0,
sizeof(
WaveformGraph*)*ACTIVE_SURFS*CHANNELS_PER_SURF);
117 memset(grSurfFiltered,0,
sizeof(
WaveformGraph*)*ACTIVE_SURFS*CHANNELS_PER_SURF);
118 memset(grSurfHilbert,0,
sizeof(
WaveformGraph*)*ACTIVE_SURFS*CHANNELS_PER_SURF);
119 memset(grSurfFFT,0,
sizeof(
FFTGraph*)*ACTIVE_SURFS*CHANNELS_PER_SURF);
120 memset(grSurfAveragedFFT,0,
sizeof(
FFTGraph*)*ACTIVE_SURFS*CHANNELS_PER_SURF);
162 static UInt_t lastEventNumber=0;
163 static TPaveText *leftPave=0;
164 static TPaveText *midLeftPave=0;
165 static TPaveText *midRightPave=0;
166 static TPaveText *rightPave=0;
167 static TPaveText *farRightPave=0;
174 topPad =
new TPad(
"padEventInfo",
"padEventInfo",0.2,0.9,0.8,1);
183 topPad->SetTopMargin(0.05);
187 if(leftPave)
delete leftPave;
188 leftPave =
new TPaveText(0,0,1,0.9);
189 leftPave->SetName(
"leftPave");
190 leftPave->SetBorderSize(0);
191 leftPave->SetFillColor(0);
192 leftPave->SetTextAlign(13);
193 sprintf(textLabel,
"ANITA %d",AnitaVersion::get());
194 TText *flightText = leftPave->AddText(textLabel);
195 flightText->SetTextColor(50);
196 sprintf(textLabel,
"Run: %d",hdPtr->
run);
197 TText *runText = leftPave->AddText(textLabel);
198 runText->SetTextColor(50);
200 TText *eventText = leftPave->AddText(textLabel);
201 eventText->SetTextColor(50);
206 gPad->SetRightMargin(0);
207 gPad->SetLeftMargin(0);
208 if(midLeftPave)
delete midLeftPave;
209 midLeftPave =
new TPaveText(0,0,0.99,0.9);
210 midLeftPave->SetName(
"midLeftPave");
211 midLeftPave->SetBorderSize(0);
212 midLeftPave->SetTextAlign(13);
214 sprintf(textLabel,
"Time: %s",trigTime.AsString(
"s"));
215 TText *timeText = midLeftPave->AddText(textLabel);
216 timeText->SetTextColor(1);
217 sprintf(textLabel,
"Trigger: %8.6f ms",1e-6*hdPtr->
triggerTimeNs);
218 TText *timeText2 = midLeftPave->AddText(textLabel);
219 timeText2->SetTextColor(1);
220 sprintf(textLabel,
"Priority: %d -- Queue: %d",(hdPtr->
priority&0xf0)/16,hdPtr->
priority&0xf);
221 midLeftPave->AddText(textLabel);
230 if(midRightPave)
delete midRightPave;
231 midRightPave =
new TPaveText(0,0,1,0.95);
232 midRightPave->SetBorderSize(0);
233 midRightPave->SetTextAlign(13);
235 midRightPave->AddText(textLabel);
237 TText *slipText = midRightPave->AddText(
"Possible Sync Slip");
238 slipText->SetTextColor(6);
240 sprintf(textLabel,
"TURF: %d",hdPtr->
turfEventId&0xfffff);
241 midRightPave->AddText(textLabel);
242 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
243 sprintf(textLabel,
"SURF %d: %d",surf+1,evPtr->
surfEventId[surf]&0xfffff);
246 TText *slipText = midRightPave->AddText(textLabel);
247 slipText->SetTextColor(6);
250 midRightPave->Draw();
254 if(rightPave)
delete rightPave;
255 rightPave =
new TPaveText(0,0,1,0.95);
256 rightPave->SetBorderSize(0);
257 rightPave->SetTextAlign(13);
263 rightPave->AddText(textLabel);
267 char labLetter[4]={
'A',
'B',
'C',
'D'};
268 sprintf(textLabel,
"Labrador ");
271 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
272 sprintf(textLabel,
"%s%c",textLabel,labLetter[evPtr->
getLabChip(1+ 9*surf)]);
276 TText *labText=rightPave->AddText(textLabel);
278 labText->SetTextColor(6);
280 sprintf(textLabel,
"Peak Phi: %3.1f",(hdPtr->getPeakPhiDeg()));
281 rightPave->AddText(textLabel);
282 sprintf(textLabel,
"Peak Theta: %3.1f",(hdPtr->getPeakThetaDeg()));
283 rightPave->AddText(textLabel);
288 if(farRightPave)
delete farRightPave;
289 farRightPave =
new TPaveText(0,0,1,0.95);
290 farRightPave->SetBorderSize(0);
291 farRightPave->SetTextAlign(13);
293 sprintf(textLabel,
"Heading %3.1f",pat->
heading);
294 farRightPave->AddText(textLabel);
296 sprintf(textLabel,
"Latitude %3.1f",pat->
latitude);
297 farRightPave->AddText(textLabel);
299 sprintf(textLabel,
"Longitude %3.1f",pat->
longitude);
300 farRightPave->AddText(textLabel);
302 sprintf(textLabel,
"Altitude %3.1f",pat->
altitude);
303 farRightPave->AddText(textLabel);
305 farRightPave->Draw();
334 for(
int surf=0;surf<ACTIVE_SURFS;surf++){
335 for(
int chan=0;chan<CHANNELS_PER_SURF;chan++){
337 if(grSurf[surf][chan]){
338 delete grSurf[surf][chan];
344 grSurf[surf][chan] =
new WaveformGraph(grTemp->GetN(),grTemp->GetX(),grTemp->GetY());
350 Int_t numPoints=grTemp->GetN();
351 Double_t *yVals=grTemp->GetY();
358 for(
int i=0;i<numPoints;i++) {
376 for(
int i=0;i<numPoints;i++) {
418 retCan=AnitaCanvasMaker::getCombinedCanvasForWebPlotter(hdPtr,useCan);
437 static UInt_t lastEventNumber=0;
461 for(
int surf=0;surf<ACTIVE_SURFS;surf++){
462 for(
int chan=0;chan<CHANNELS_PER_SURF;chan++){
464 if(grSurf[surf][chan]){
465 delete grSurf[surf][chan];
466 grSurf[surf][chan]=0;
468 if(grSurfHilbert[surf][chan]) {
469 delete grSurfHilbert[surf][chan];
470 grSurfHilbert[surf][chan]=0;
473 if(grSurfFFT[surf][chan]){
474 delete grSurfFFT[surf][chan];
475 grSurfFFT[surf][chan]=0;
478 if(grSurfFiltered[surf][chan]) {
479 delete grSurfFiltered[surf][chan];
480 grSurfFiltered[surf][chan]=0;
483 TGraph *grTemp = NULL;
487 if(chan==CHANNELS_PER_SURF-1)
495 grTemp =
new TGraph(gr->GetN(), gr->GetX(), gr->GetY());
500 if(grTemp==NULL || grTemp->GetN()==0){
508 Int_t numPoints=grTemp->GetN();
509 Double_t *yVals=grTemp->GetY();
512 if(chan<CHANNELS_PER_SURF-1)
516 for(
int i=0;i<numPoints;i++) {
538 if(yVals[i] > maxVal){
548 for(
int i=0;i<numPoints;i++){
559 if(fPassBandFilter) {
570 grSurf[surf][chan] =
new WaveformGraph(grTemp->GetN(),grTemp->GetX(),grTemp->GetY());
572 TGraph *grTempFFT = grSurf[surf][chan]->
getFFT();
573 grSurfFFT[surf][chan] =
new FFTGraph(grTempFFT->GetN(),grTempFFT->GetX(),grTempFFT->GetY());
577 TGraph *grTempHilbert = grSurf[surf][chan]->
getHilbert();
578 grSurfHilbert[surf][chan] =
new WaveformGraph(grTempHilbert->GetN(),grTempHilbert->GetX(),grTempHilbert->GetY());
579 delete grTempHilbert;
582 TGraph *grTempFFT = grSurf[surf][chan]->
getFFT();
583 grSurfFFT[surf][chan] =
new FFTGraph(grTempFFT->GetN(),grTempFFT->GetX(),grTempFFT->GetY());
584 if(!grSurfAveragedFFT[surf][chan]) {
585 grSurfAveragedFFT[surf][chan] =
new FFTGraph(grTempFFT->GetN(),grTempFFT->GetX(),grTempFFT->GetY());
588 grSurfAveragedFFT[surf][chan]->
AddFFT(grSurfFFT[surf][chan]);
624 if(
fCanvasView==MagicDisplayCanvasLayoutOption::kInterferometry){
632 reco->
process(fEv, &sum, NULL, truth);
637 if (
fCanvasView==MagicDisplayCanvasLayoutOption::kUCorrelator)
659 else if(
fCanvasView==MagicDisplayCanvasLayoutOption::kUCorrelator) retCan=AnitaCanvasMaker::getUCorrelatorCanvas(hdPtr,useCan);
671 TPad *AnitaCanvasMaker::getHorizontalCanvas(
const RawAnitaHeader *hdPtr,
676 gStyle->SetOptTitle(0);
684 canHoriz = (TPad*) gROOT->FindObject(
"canHoriz");
686 canHoriz =
new TCanvas(
"canHoriz",
"canHoriz",1000,600);
689 canHoriz->SetTopMargin(0);
690 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
691 leftPave->SetBorderSize(0);
693 TText *eventText = leftPave->AddText(textLabel);
694 eventText->SetTextColor(50);
696 plotPad =
new TPad(
"canHorizMain",
"canHorizMain",0,0,1,0.9);
716 for(
int column=0;column<8;column++) {
717 for(
int row=0;row<6;row++) {
719 int phi=phiMap[row][column];
729 sprintf(padName,
"phiChanPad%d",count);
730 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
731 paddy1->SetEditable(kTRUE);
740 grSurf[surf][chan]->SetLineColor(kRed-3);
743 grSurf[surf][chan]->SetLineColor(kBlack);
762 grSurfFFT[surf][chan]->Draw(
"l");
769 grSurfAveragedFFT[surf][chan]->Draw(
"l");
780 grSurfHilbert[surf][chan]->Draw(
"l");
783 grSurf[surf][chan]->Draw(
"l");
786 TList *listy = gPad->GetListOfPrimitives();
787 for(
int i=0;i<listy->GetSize();i++) {
788 TObject *fred = listy->At(i);
789 TH1F *tempHist = (TH1F*) fred;
790 if(tempHist->InheritsFrom(
"TH1")) {
800 paddy1->SetEditable(kFALSE);
811 TPad *AnitaCanvasMaker::getVerticalCanvas(
const RawAnitaHeader *hdPtr,
815 gStyle->SetOptTitle(0);
823 canVert = (TPad*) gROOT->FindObject(
"canVert");
825 canVert =
new TCanvas(
"canVert",
"canVert",1000,600);
828 canVert->SetTopMargin(0);
829 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
830 leftPave->SetBorderSize(0);
831 sprintf(textLabel,
"Run %d, Event %d",hdPtr->
run,hdPtr->
eventNumber);
832 TText *eventText = leftPave->AddText(textLabel);
833 eventText->SetTextColor(50);
835 plotPad =
new TPad(
"canVertMain",
"canVertMain",0,0,1,0.9);
855 for(
int column=0;column<8;column++) {
856 for(
int row=0;row<6;row++) {
858 int phi=phiMap[row][column];
868 sprintf(padName,
"phiChanPad%d",count);
869 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
870 paddy1->SetEditable(kTRUE);
879 grSurf[surf][chan]->SetLineColor(kRed-3);
899 grSurfFFT[surf][chan]->Draw(
"l");
905 grSurfAveragedFFT[surf][chan]->Draw(
"l");
912 grSurfHilbert[surf][chan]->Draw(
"l");
915 grSurf[surf][chan]->Draw(
"l");
918 TList *listy = gPad->GetListOfPrimitives();
919 for(
int i=0;i<listy->GetSize();i++) {
920 TObject *fred = listy->At(i);
921 TH1F *tempHist = (TH1F*) fred;
922 if(tempHist->InheritsFrom(
"TH1")) {
936 paddy1->SetEditable(kFALSE);
949 TPad *AnitaCanvasMaker::getVerticalCanvasForWebPlotter(
const RawAnitaHeader *hdPtr,
953 gStyle->SetOptTitle(0);
961 canVert = (TPad*) gROOT->FindObject(
"canVert");
963 canVert =
new TCanvas(
"canVert",
"canVert",1000,600);
966 canVert->SetTopMargin(0);
967 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
968 leftPave->SetBorderSize(0);
969 sprintf(textLabel,
"Run %d, Event %d",hdPtr->
run,hdPtr->
eventNumber);
970 TText *eventText = leftPave->AddText(textLabel);
971 eventText->SetTextColor(50);
973 plotPad =
new TPad(
"canVertMain",
"canVertMain",0,0,1,0.9);
994 for(
int column=0;column<8;column++) {
995 for(
int row=0;row<6;row++) {
997 int phi=phiMap[row][column];
1007 sprintf(padName,
"phiChanPad%d",count);
1008 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
1009 paddy1->SetEditable(kTRUE);
1026 grSurf[surf][chan]->SetLineColor(kRed-3);
1036 grSurf[surf][chan]->Draw(
"l");
1039 TList *listy = gPad->GetListOfPrimitives();
1040 for(
int i=0;i<listy->GetSize();i++) {
1041 TObject *fred = listy->At(i);
1042 TH1F *tempHist = (TH1F*) fred;
1043 if(tempHist->InheritsFrom(
"TH1")) {
1056 paddy1->SetEditable(kFALSE);
1069 TPad *AnitaCanvasMaker::getCombinedCanvasForWebPlotter(
const RawAnitaHeader *hdPtr,
1073 gStyle->SetOptTitle(0);
1076 char textLabel[180];
1081 canBoth = (TPad*) gROOT->FindObject(
"canBoth");
1083 canBoth =
new TCanvas(
"canBoth",
"canBoth",1000,600);
1086 canBoth->SetTopMargin(0);
1087 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1088 leftPave->SetBorderSize(0);
1089 sprintf(textLabel,
"Run %d, Event %d",hdPtr->
run,hdPtr->
eventNumber);
1090 TText *eventText = leftPave->AddText(textLabel);
1091 eventText->SetTextColor(50);
1093 plotPad =
new TPad(
"canBothMain",
"canBothMain",0,0,1,0.9);
1114 Bool_t moreVpol=
true;
1117 for(
int phi=0;phi<NUM_PHI;phi++) {
1121 if(countH>countV) moreVpol=
false;
1124 for(
int column=0;column<8;column++) {
1125 for(
int row=0;row<6;row++) {
1127 int phi=phiMap[row][column];
1143 sprintf(padName,
"phiChanPad%d",count);
1144 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
1145 paddy1->SetEditable(kTRUE);
1152 grSurf[surf][chan]->SetLineColor(kBlack);
1153 grSurf[surfH][chanH]->SetLineColor(kBlue);
1163 grSurf[surf][chan]->SetLineColor(kRed-3);
1165 grSurf[surfH][chanH]->SetLineColor(kGreen-3);
1179 grSurf[surfH][chanH]->Draw(
"l");
1180 grSurf[surf][chan]->Draw(
"l");
1183 grSurf[surf][chan]->Draw(
"l");
1184 grSurf[surfH][chanH]->Draw(
"l");
1189 TList *listy = gPad->GetListOfPrimitives();
1190 for(
int i=0;i<listy->GetSize();i++) {
1191 TObject *fred = listy->At(i);
1192 TH1F *tempHist = (TH1F*) fred;
1193 if(tempHist->InheritsFrom(
"TH1")) {
1206 paddy1->SetEditable(kFALSE);
1218 TPad *AnitaCanvasMaker::getSurfChanCanvas(
const RawAnitaHeader *hdPtr,TPad *useCan)
1221 gStyle->SetOptTitle(0);
1223 char textLabel[180];
1228 canSurf = (TPad*) gROOT->FindObject(
"canSurf");
1230 canSurf =
new TCanvas(
"canSurf",
"canSurf",1000,600);
1233 canSurf->SetTopMargin(0);
1234 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1235 leftPave->SetBorderSize(0);
1237 TText *eventText = leftPave->AddText(textLabel);
1238 eventText->SetTextColor(50);
1240 plotPad =
new TPad(
"canSurfMain",
"canSurfMain",0,0,1,0.9);
1250 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
1251 for(
int chan=0;chan<CHANNELS_PER_SURF;chan++) {
1253 sprintf(padName,
"surfChanPad%d_%d",surf,chan);
1254 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
1255 paddy1->SetEditable(kTRUE);
1276 grSurf[surf][chan]->SetLineColor(kRed-3);
1289 grSurfFFT[surf][chan]->Draw(
"l");
1294 grSurfAveragedFFT[surf][chan]->Draw(
"l");
1299 grSurfHilbert[surf][chan]->Draw(
"l");
1302 grSurf[surf][chan]->Draw(
"l");
1305 TList *listy = gPad->GetListOfPrimitives();
1306 for(
int i=0;i<listy->GetSize();i++) {
1307 TObject *fred = listy->At(i);
1308 TH1F *tempHist = (TH1F*) fred;
1309 if(tempHist->InheritsFrom(
"TH1")) {
1323 paddy1->SetEditable(kFALSE);
1336 TPad * AnitaCanvasMaker::getUCorrelatorCanvas(
const RawAnitaHeader *hdPtr, TPad *useCan)
1339 gStyle->SetOptTitle(1);
1342 char textLabel[180];
1345 canSurf = (TPad*) gROOT->FindObject(
"canUCorr");
1347 canSurf =
new TCanvas(
"canUCorr",
"canUCorr",1000,600);
1350 canSurf->SetTopMargin(0);
1351 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1352 leftPave->SetBorderSize(0);
1354 TText *eventText = leftPave->AddText(textLabel);
1355 eventText->SetTextColor(50);
1357 plotPad =
new TPad(
"canUCorrMain",
"canUCorrMain",0,0,1,0.9);
1365 plotPad->Divide(1,2);
1379 gStyle->SetOptTitle(1);
1381 char textLabel[180];
1385 canSurf = (TPad*) gROOT->FindObject(
"canInterf");
1387 canSurf =
new TCanvas(
"canInterf",
"canInterf",1000,600);
1390 canSurf->SetTopMargin(0);
1391 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1392 leftPave->SetBorderSize(0);
1394 TText *eventText = leftPave->AddText(textLabel);
1395 eventText->SetTextColor(50);
1397 plotPad =
new TPad(
"canInterfMain",
"canInterfMain",0,0,1,0.9);
1427 TPad* subPad = (TPad*) plotPad->GetPad(polInd+1);
1447 TPad *AnitaCanvasMaker::getPayloadCanvas(
const RawAnitaHeader *hdPtr,TPad *useCan)
1450 gStyle->SetOptTitle(0);
1453 char textLabel[180];
1458 canPayload = (TPad*) gROOT->FindObject(
"canPayload");
1460 canPayload =
new TCanvas(
"canPayload",
"canPayload",1000,600);
1462 canPayload->Clear();
1463 canPayload->SetTopMargin(0);
1464 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1465 leftPave->SetBorderSize(0);
1467 TText *eventText = leftPave->AddText(textLabel);
1468 eventText->SetTextColor(50);
1470 plotPad =
new TPad(
"canPayloadMain",
"canPayloadMain",0,0,1,0.9);
1479 loadPayloadViewSutff();
1481 Int_t leftPhi=(fPhiMax+1)-1;
1482 if(leftPhi<1) leftPhi+=16;
1483 Int_t maxPhi=(fPhiMax+1);
1484 Int_t rightPhi=(fPhiMax+1)+1;
1485 if(rightPhi>16) rightPhi-=16;
1487 Int_t phiArray[3]={fPhiMax-1,fPhiMax,fPhiMax+1};
1488 if(phiArray[0]<0) phiArray[0]+=16;
1489 if(phiArray[2]>15) phiArray[2]-=16;
1493 if(fAnitaGeomManager) {
1494 TPad *payloadPadLeft = (TPad*) plotPad->FindObject(
"payloadPadLeft");
1495 payloadPadLeft->cd();
1496 payloadPadLeft->Clear();
1499 TGeoVolume *anita = fAnitaGeomManager->GetMasterVolume();
1501 int n_ant[4]={8,8,16,8};
1504 Int_t phiNums[4][16]={{1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0},
1505 {0,2,4,6,8,10,12,14,16,0,0,0,0,0,0},
1506 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},
1507 {0,2,4,6,8,10,12,14,16,0,0,0,0,0,0}};
1510 for (
int i_layer=0;i_layer<4;i_layer++){
1511 for (
int i_ant=0;i_ant<n_ant[i_layer];i_ant++){
1513 anita->GetNode(i_node)->GetVolume()->GetNode(4)->GetVolume()->SetLineColor(kWhite);
1515 anita->GetNode(i_node)->GetVolume()->GetNode(0)->GetVolume()->SetLineColor(kWhite);
1517 anita->GetNode(i_node)->GetVolume()->GetNode(1)->GetVolume()->SetLineColor(kWhite);
1521 anita->GetNode(i_node)->GetVolume()->GetNode(1)->GetVolume()->SetLineColor(kRed-3);
1522 anita->GetNode(i_node)->GetVolume()->GetNode(4)->GetVolume()->SetLineColor(kRed-3);
1530 Double_t rmin[3]={-400,-400,-400};
1531 Double_t rmax[3]={400,400,400};
1533 TView3D *my3dView =
new TView3D(1,rmin,rmax);
1536 anita->GetNode(40)->GetVolume()->SetLineColor(kGray);
1537 anita->GetNode(41)->GetVolume()->SetLineColor(kGray);
1538 anita->GetNode(42)->GetVolume()->SetLineColor(kGray);
1539 gGeoManager->GetTopVolume()->Draw();
1544 Double_t phiDeg=(maxPhi-1)*22.5;
1545 my3dView->SetView(phiDeg,90,0,iRep);
1557 static Int_t lastSurf[3][3]={{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
1558 static Int_t lastChan[3][3]={{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}};
1560 for(
int row=0;row<3;row++) {
1561 for(
int phiInd=0;phiInd<3;phiInd++) {
1564 sprintf(padName,
"payloadPad%d_%d",row,phiInd);
1565 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
1566 paddy1->SetEditable(kTRUE);
1567 if(lastSurf[row][phiInd]>=0)
1571 Int_t surf,chan,ant;
1572 Int_t phi=phiArray[phiInd];
1576 phiArray[phiInd]%2==1) {
1577 lastSurf[row][phiInd]=-1;
1584 lastSurf[row][phiInd]=surf;
1585 lastChan[row][phiInd]=chan;
1592 grSurf[surf][chan]->SetLineColor(kRed-3);
1597 grSurfFFT[surf][chan]->Draw(
"l");
1602 grSurfAveragedFFT[surf][chan]->Draw(
"l");
1607 grSurfHilbert[surf][chan]->Draw(
"l");
1610 grSurf[surf][chan]->Draw(
"l");
1613 TList *listy = gPad->GetListOfPrimitives();
1614 for(
int i=0;i<listy->GetSize();i++) {
1615 TObject *fred = listy->At(i);
1616 TH1F *tempHist = (TH1F*) fred;
1617 if(tempHist->InheritsFrom(
"TH1")) {
1631 paddy1->SetEditable(kFALSE);
1646 TPad *AnitaCanvasMaker::getCombinedCanvas(
const RawAnitaHeader *hdPtr,
1649 gStyle->SetOptTitle(0);
1652 char textLabel[180];
1657 canBoth = (TPad*) gROOT->FindObject(
"canBoth");
1659 canBoth =
new TCanvas(
"canBoth",
"canBoth",1000,600);
1662 canBoth->SetTopMargin(0);
1663 TPaveText *leftPave =
new TPaveText(0.05,0.92,0.95,0.98);
1664 leftPave->SetBorderSize(0);
1665 sprintf(textLabel,
"Run %d, Event %d",hdPtr->
run,hdPtr->
eventNumber);
1666 TText *eventText = leftPave->AddText(textLabel);
1667 eventText->SetTextColor(50);
1669 plotPad =
new TPad(
"canBothMain",
"canBothMain",0,0,1,0.9);
1690 Bool_t moreVpol=
true;
1693 for(
int phi=0;phi<NUM_PHI;phi++) {
1697 if(countH>countV) moreVpol=
false;
1700 for(
int column=0;column<8;column++) {
1701 for(
int row=0;row<6;row++) {
1704 int phi=phiMap[row][column];
1718 sprintf(padName,
"phiChanPad%d",count);
1719 TPad *paddy1 = (TPad*) plotPad->FindObject(padName);
1720 paddy1->SetEditable(kTRUE);
1731 grSurf[surf][chanV]->SetLineColor(kBlack);
1732 grSurf[surf][chanH]->SetLineColor(kBlue);
1735 grSurf[surf][chanV]->SetLineColor(kRed-3);
1737 grSurf[surf][chanH]->SetLineColor(kGreen-3);
1761 grSurfFFT[surf][chanH]->SetLineColor(kBlue);
1762 grSurfFFT[surf][chanH]->Draw(
"l");
1763 grSurfFFT[surf][chanV]->Draw(
"l");
1773 grSurfAveragedFFT[surf][chanH]->SetLineColor(kBlue);
1774 grSurfAveragedFFT[surf][chanH]->Draw(
"l");
1775 grSurfAveragedFFT[surf][chanV]->Draw(
"l");
1785 grSurfHilbert[surf][chanH]->SetLineColor(kBlue);
1786 grSurfHilbert[surf][chanH]->Draw(
"l");
1787 grSurfHilbert[surf][chanV]->Draw(
"l");
1792 grSurf[surf][chanH]->Draw(
"l");
1793 grSurf[surf][chanV]->Draw(
"l");
1796 grSurf[surf][chanV]->Draw(
"l");
1797 grSurf[surf][chanH]->Draw(
"l");
1802 TList *listy = gPad->GetListOfPrimitives();
1803 for(
int i=0;i<listy->GetSize();i++) {
1804 TObject *fred = listy->At(i);
1805 TH1F *tempHist = (TH1F*) fred;
1806 if(tempHist->InheritsFrom(
"TH1")) {
1819 paddy1->SetEditable(kFALSE);
1831 char textLabel[180];
1843 static int phiPadsDone=0;
1846 for(
int i=0;i<48;i++) {
1847 sprintf(padName,
"phiChanPad%d",i);
1848 TPad *paddy = (TPad*) plotPad->FindObject(padName);
1859 Double_t left[8]={0.04,0.165,0.28,0.395,0.51,0.625,0.74,0.855};
1860 Double_t right[8]={0.165,0.28,0.395,0.51,0.625,0.74,0.855,0.97};
1861 Double_t top[6]={0.95,0.8,0.65,0.50,0.35,0.20};
1862 Double_t bottom[6]={0.8,0.65,0.50,0.35,0.20,0.03};
1866 texy.SetTextSize(0.03);
1867 texy.SetTextAlign(12);
1868 for(
int column=0;column<8;column++) {
1869 sprintf(textLabel,
"Phi %d/%d",1+(2*column),2+(2*column));
1871 texy.DrawTextNDC(right[column]-0.1,0.97,textLabel);
1873 texy.DrawTextNDC(right[column]-0.09,0.97,textLabel);
1875 texy.SetTextAlign(21);
1876 texy.SetTextAngle(90);
1877 texy.DrawTextNDC(left[0]-0.01,bottom[0],
"Top Ring");
1878 texy.DrawTextNDC(left[0]-0.01,bottom[2],
"Middle Ring");
1879 texy.DrawTextNDC(left[0]-0.01,bottom[4],
"Bottom Ring");
1893 for(
int column=0;column<8;column++) {
1894 for(
int row=0;row<6;row++) {
1897 sprintf(padName,
"phiChanPad%d",count);
1898 TPad *paddy1 =
new TPad(padName,padName,left[column],bottom[row],right[column],top[row]);
1899 paddy1->SetTopMargin(0);
1900 paddy1->SetBottomMargin(0);
1901 paddy1->SetLeftMargin(0);
1902 paddy1->SetRightMargin(0);
1904 paddy1->SetRightMargin(0.01);
1906 paddy1->SetLeftMargin(0.1);
1908 paddy1->SetBottomMargin(0.1);
1919 framey->GetYaxis()->SetLabelSize(0.08);
1920 framey->GetYaxis()->SetTitleSize(0.1);
1921 framey->GetYaxis()->SetTitleOffset(0.5);
1923 framey->GetXaxis()->SetLabelSize(0.09);
1924 framey->GetXaxis()->SetTitleSize(0.09);
1925 framey->GetYaxis()->SetLabelSize(0.09);
1926 framey->GetYaxis()->SetTitleSize(0.09);
1941 static int interfPadsDone=0;
1944 if(
fLastCanvasView!=MagicDisplayCanvasLayoutOption::kInterferometry) {
1956 for(Int_t padInd=0; padInd<interfPadsDone; padInd++){
1957 sprintf(padName,
"interfPad%d",padInd);
1958 TPad *paddy = (TPad*) plotPad->FindObject(padName);
1971 Double_t bottom = 0.03;
1995 sprintf(padName,
"interfPad%d",polInd);
1997 TPad *paddy1 =
new TPad(padName,padName,left[polInd],bottom,right[polInd],top);
2021 static int surfPadsDone=0;
2022 char textLabel[180];
2037 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
2038 for(
int chan=0;chan<CHANNELS_PER_SURF;chan++) {
2039 sprintf(padName,
"surfChanPad%d_%d",surf,chan);
2040 TPad *paddy = (TPad*) plotPad->FindObject(padName);
2052 Double_t leftEdge=0.04;
2053 Double_t rightEdge=0.97;
2054 Double_t standardStep=(rightEdge-leftEdge)/(1.01*ACTIVE_SURFS);
2055 Double_t firstStep=(rightEdge-leftEdge)-(ACTIVE_SURFS-1)*standardStep;
2057 Double_t left[ACTIVE_SURFS]={0};
2058 Double_t right[ACTIVE_SURFS]={0};
2060 right[0]=leftEdge+firstStep;
2061 for(
int surf=1;surf<ACTIVE_SURFS;surf++) {
2062 left[surf]=right[surf-1];
2063 right[surf]=left[surf]+standardStep;
2066 Double_t top[9]={0.95,0.85,0.75,0.65,0.55,0.45,0.35,0.25,0.15};
2067 Double_t bottom[9]={0.85,0.75,0.65,0.55,0.45,0.35,0.25,0.15,0.03};
2071 texy.SetTextSize(0.03);
2072 texy.SetTextAlign(12);
2073 for(
int column=0;column<ACTIVE_SURFS;column++) {
2074 sprintf(textLabel,
"Surf %d",1+column);
2076 texy.DrawTextNDC(right[column]-0.1,0.97,textLabel);
2078 texy.DrawTextNDC(right[column]-0.09,0.97,textLabel);
2080 texy.SetTextAlign(21);
2081 texy.SetTextAngle(90);
2092 for(
int column=0;column<ACTIVE_SURFS;column++) {
2093 for(
int row=0;row<9;row++) {
2096 sprintf(padName,
"surfChanPad%d_%d",column,row);
2097 TPad *paddy1 =
new TPad(padName,padName,left[column],bottom[row],right[column],top[row]);
2098 paddy1->SetTopMargin(0);
2099 paddy1->SetBottomMargin(0);
2100 paddy1->SetLeftMargin(0);
2101 paddy1->SetRightMargin(0);
2103 paddy1->SetRightMargin(0.01);
2105 paddy1->SetLeftMargin(0.1);
2107 paddy1->SetBottomMargin(0.1);
2124 framey->GetYaxis()->SetLabelSize(0.1);
2125 framey->GetYaxis()->SetTitleSize(0.1);
2126 framey->GetYaxis()->SetTitleOffset(0.5);
2128 framey->GetXaxis()->SetLabelSize(0.09);
2129 framey->GetXaxis()->SetTitleSize(0.09);
2130 framey->GetYaxis()->SetLabelSize(0.09);
2131 framey->GetYaxis()->SetTitleSize(0.09);
2143 static int payloadPadsDone=0;
2159 sprintf(padName,
"payloadPadLeft");
2160 TPad *paddy = (TPad*) plotPad->FindObject(padName);
2164 for(
int ring=0;ring<3;ring++) {
2165 for(
int phi=0;phi<3;phi++) {
2166 sprintf(padName,
"payloadPad%d_%d",ring,phi);
2167 TPad *paddy = (TPad*) plotPad->FindObject(padName);
2180 Double_t left[3]={0.53,0.7,0.85};
2181 Double_t right[3]={0.7,0.85,0.99};
2182 Double_t top[3]={0.95,0.65,0.35};
2183 Double_t bottom[3]={0.65,0.35,0.03};
2187 texy.SetTextSize(0.03);
2188 texy.SetTextAlign(12);
2193 sprintf(padName,
"payloadPadLeft");
2194 TPad *padLeft =
new TPad(padName,padName,0.05,0.05,0.5,0.95);
2195 padLeft->SetFillColor(kBlack);
2199 for(
int column=0;column<3;column++) {
2200 for(
int row=0;row<3;row++) {
2203 sprintf(padName,
"payloadPad%d_%d",row,column);
2204 TPad *paddy1 =
new TPad(padName,padName,left[column],bottom[row],right[column],top[row]);
2205 paddy1->SetTopMargin(0);
2206 paddy1->SetBottomMargin(0);
2207 paddy1->SetLeftMargin(0);
2208 paddy1->SetRightMargin(0);
2210 paddy1->SetRightMargin(0.01);
2212 paddy1->SetLeftMargin(0.1);
2214 paddy1->SetBottomMargin(0.1);
2226 framey->GetYaxis()->SetLabelSize(0.1);
2227 framey->GetYaxis()->SetTitleSize(0.1);
2228 framey->GetYaxis()->SetTitleOffset(0.5);
2230 framey->GetXaxis()->SetLabelSize(0.09);
2231 framey->GetXaxis()->SetTitleSize(0.09);
2232 framey->GetYaxis()->SetLabelSize(0.09);
2233 framey->GetYaxis()->SetTitleSize(0.09);
2257 paddy->GetListOfPrimitives()->Remove(grSurf[surf][chan]);
2258 paddy->GetListOfPrimitives()->Remove(grSurf[surf][chan2]);
2261 paddy->GetListOfPrimitives()->Remove(grSurfFFT[surf][chan]);
2262 paddy->GetListOfPrimitives()->Remove(grSurfFFT[surf][chan2]);
2265 paddy->GetListOfPrimitives()->Remove(grSurfAveragedFFT[surf][chan]);
2266 paddy->GetListOfPrimitives()->Remove(grSurfAveragedFFT[surf][chan2]);
2269 paddy->GetListOfPrimitives()->Remove(grSurfHilbert[surf][chan]);
2270 paddy->GetListOfPrimitives()->Remove(grSurfHilbert[surf][chan2]);
2276 void AnitaCanvasMaker::resetAverage()
2278 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
2279 for(
int chan=0;chan<CHANNELS_PER_SURF;chan++) {
2280 if(grSurfAveragedFFT[surf][chan]) {
2281 delete grSurfAveragedFFT[surf][chan];
2282 grSurfAveragedFFT[surf][chan]=0;
2291 void AnitaCanvasMaker::loadPayloadViewSutff()
2293 if(fAnitaGeomManager)
return;
2294 char fileName[FILENAME_MAX];
2295 char *dirName=getenv(
"ANITA_UTIL_INSTALL_DIR");
2297 sprintf(fileName,
"%s/share/anitaMap/anitageom.root",dirName);
2300 sprintf(fileName,
"anitageom.root");
2302 fAnitaGeomFile =
new TFile(fileName);
2303 if(!fAnitaGeomFile) {
2304 std::cerr <<
"Couldn't open: " << fileName <<
"\n";
2308 fAnitaGeomManager= (TGeoManager*) fAnitaGeomFile->Get(
"anita");
2309 if(!fAnitaGeomManager) {
2310 std::cerr <<
"Couldn't find anita geometry\n";
2318 TString magicDisplayConfigFile = TString::Format(
"%s/share/Acclaim/AcclaimMagicDisplay.conf", getenv(
"ANITA_UTIL_INSTALL_DIR"));
UInt_t eventNumber
Event number from software.
static AnitaCanvasMaker * Instance()
The instance generator.
Double_t fMinTimeLimit
The minimum time in the waveform (typically 0).
MagicDisplayCanvasLayoutOption::MagicDisplayCanvasLayoutOption_t fLastCanvasView
What was the last view (phi or SURF)?
void process(const FilteredAnitaEvent *fEv, AnitaEventSummary *sum, NoiseMonitor *noiseMonitor=NULL, TruthAnitaEvent *truth=NULL)
Double_t fMinVoltLimit
The minimum voltage.
void analyze(const FilteredAnitaEvent *event, AnitaEventSummary *summary, const TruthAnitaEvent *truth=0)
Double_t fMaxFreqLimit
The maximum frequency in the PSDs (typically 1200).
Double_t fMaxTimeLimit
The maximum time in the waveform (typically 100).
Int_t fRedoEventCanvas
Do we neeed to redraw the event canvas (eg. switching from phi to SURF)?
const UsefulAnitaEvent * getUsefulAnitaEvent() const
Adu5Pat – The ADU5 Position and Attitude Data.
Double_t fMinVertVoltLimit
The minimum voltage in vertical channels.
WaveCalType::WaveCalType_t fCalType
The calibration type.
Does the event reconstruction, and produces a summary of it.
View of both polarisations arranged by phi.
enum WaveCalType::EWaveCalType WaveCalType_t
The calibration enumeration type.
Double_t fMaxPowerLimit
The maximum power in the PSDs.
void deleteTGraphsFromPad(TPad *paddy, int surf, int chan)
Worker fucntion to delete a specific graph from a pad.
Float_t latitude
In degrees.
Double_t fMinFreqLimit
The minimum frequency in the PSDs (typically 0).
void setupPayloadViewWithFrames(TPad *plotPad)
Worker function to setup the payload view canvas.
Float_t longitude
In degrees.
TruthAnitaEvent * truth(bool force_reload=true)
Double_t fMaxVoltLimit
The maximum voltage.
A filter strategy defines the sets of filters that are used and provides some introspection abilities...
Double_t fMinClockVoltLimit
The minimum voltage in the clock channels.
void setupInterfPadWithFrames(TPad *plotPad)
Worker function to setup the phi view canvas.
MagicDisplayFormatOption::MagicDisplayFormatOption_t fWaveformOption
Are we viewing PSDs, waveforms or other stuff?
~AnitaCanvasMaker()
Destructor.
TGraph * getGraphFromSurfAndChan(int surf, int chan) const
Returns a voltage-time waveform for given SURF and channel.
enum AnitaRing::EAnitaRing AnitaRing_t
Ring enumeration.
TPad * getInterferometryCanvas(const RawAnitaHeader *hdPtr, TPad *useCan=NULL)
The interferometry canvas getter.
Double_t fMinPowerLimit
The minimum power in the PSDs.
UCorrelator::Analyzer * getUCorr()
< for command line interface
MagicDisplayCanvasLayoutOption::MagicDisplayCanvasLayoutOption_t fCanvasView
Which canvas layout do we want?
UsefulAnitaEvent – The Calibrated Useful Anita Event object.
Float_t altitude
In metres.
static AnitaCanvasMaker * fgInstance
To protect against multiple instances.
AnitaCanvasMaker(WaveCalType::WaveCalType_t calType=WaveCalType::kVoltageTime)
The assignment constructor.
View of vertical polarisation arranged by phi.
Int_t fNewEvent
Is this a new event?
View of all channels arranged by SURF.
MagicDisplayFormatOption::MagicDisplayFormatOption_t fLastWaveformFormat
What did we plot last time??
The 260 samples straight from raw data.
Double_t fMaxClockVoltLimit
The maximum voltage in the clock channels.
Int_t getLabChip(Int_t chanIndex) const
Returns the LABRADOR number.
TruthAnitaEvent – The Truth ANITA Event.
TPad * quickGetEventViewerCanvasForWebPlottter(const UsefulAnitaEvent *evPtr, const RawAnitaHeader *hdPtr, TPad *useCan=0)
The main event view canvas getter used by QnDWBOM.
void setupSurfPadWithFrames(TPad *plotPad)
Worker function to setup the surf view canvas.
Acclaim::AnalysisReco & getAnalysisReco()
get command line access with a reference
Double_t fMaxVertVoltLimit
The maximum voltage in vertical channels.
View of horizontal polarisation arranged by phi.
void setSurfChanPhiAntPolRing(Int_t surf, Int_t chan, Int_t phi, Int_t ant, AnitaPol::AnitaPol_t pol, AnitaRing::AnitaRing_t ring)
These are just used for labelling.
The PSD display graph class that inherits from ROOT's TGraph.
void drawSummary(TPad *wholePad, AnitaPol::AnitaPol_t pol)
Draw everything interesting onto a TPad.
TPad * getEventViewerCanvas(FilteredAnitaEvent *fEv, TPad *useCan=0, bool forceRedo=false)
The main event view canvas getter.
const AnalysisWaveform * getFilteredGraph(UInt_t i) const
static MagicDisplay * Instance()
Returns a pointer to the active MagicDisplay. This is very useful if you want to access the TTree's d...
The X good samples from raw data (260-hitbus)
Common analysis format between UCorrelator and Acclaim.
TPad * getEventInfoCanvas(const UsefulAnitaEvent *evPtr, const RawAnitaHeader *hdPtr, const Adu5Pat *pat, TPad *useCan=0)
The event info canvas getter.
View of Jiwoo's pretty 3-d payload.
void setupPhiPadWithFrames(TPad *plotPad)
Worker function to setup the phi view canvas.
Float_t heading
0 is facing north, 180 is facing south
UInt_t surfEventId[12]
SURF Event Id's.
Int_t fAutoScaleNeg
Fixed or auto-scaling y-axis?
int AddFFT(FFTGraph *otherGraph)
Adds an FFT to an average.
Int_t fAutoScale
Fixed or auto-scaling y-axis?
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.
The event display canvas maker.
void drawSummary(TPad *chpol=0, TPad *cvpol=0, int draw_filtered=0) const
const RawAnitaHeader * getHeader() const