10 #include "MagicDisplayConventions.h" 11 #include "AnitaRFCanvasMaker.h" 12 #include "AnitaConventions.h" 13 #include "AnitaGeomTool.h" 14 #include "UsefulAnitaEvent.h" 15 #include "RawAnitaHeader.h" 17 #include "SummedTurfRate.h" 19 #include "AveragedSurfHk.h" 21 #include "AnitaVersion.h" 23 #include "TObjArray.h" 24 #include "TObjString.h" 27 #include "TPaveText.h" 32 #include "WaveformGraph.h" 40 #include "TTimeStamp.h" 42 #include "TMultiGraph.h" 46 TH1D *histTurfRate[6]={0};
47 TH1D *histSumTurfRate[6]={0};
48 TH1D *histAntMask[2]={0};
49 TH1D *histSumAntMask[2]={0};
51 TH1D *histSumPhiMask=0;
54 TH1D *histSurfHk[5][ACTIVE_SURFS]={{0}};
55 TH1D *histSurfHkPhi[5][PHI_SECTORS]={{0}};
56 TH1D *histBadThreshold=0;
58 THStack *histSurfHkStack[5];
59 THStack *histSurfHkPhiStack[5];
60 TH1F *surfHkFramey[5]={0};
61 TH1F *surfHkTimeFramey[5]={0};
62 TMultiGraph *mgSurfTime[5]={0};
63 TGraph *grSurfL2Scaler[TRIGGER_SURFS][L2S_PER_SURF]={{0}};
64 TGraph *grSurfL1Scaler[TRIGGER_SURFS][L2S_PER_SURF]={{0}};
65 TGraph *grSurfScaler[TRIGGER_SURFS][SCALERS_PER_SURF]={{0}};
66 TGraph *grSurfThresh[TRIGGER_SURFS][SCALERS_PER_SURF]={{0}};
67 TGraph *grSurfRfPwr[ACTIVE_SURFS][RFCHAN_PER_SURF]={{0}};
70 TH1D *histAvgSurfHk[3][ACTIVE_SURFS]={{0}};
71 TH1D *histAvgSurfHkPhi[3][PHI_SECTORS]={{0}};
72 TH1D *histAvgSurfBadThreshold=0;
73 TH1D *histAvgSurfBandMask=0;
74 THStack *histAvgSurfHkStack[3];
75 THStack *histAvgSurfHkPhiStack[3];
76 TH1F *avgSurfHkFramey[3]={0};
124 canTurfRate = (TPad*) gROOT->FindObject(
"canTurfRate");
126 canTurfRate =
new TCanvas(
"canTurfRate",
"canTurfRate",1000,600);
128 canTurfRate->Clear();
129 canTurfRate->SetTopMargin(0);
130 plotPad =
new TPad(
"canTurfRateMain",
"canTurfRateMain",0,0,1,0.9);
139 const char *histNames[6]={
"histUpperL1",
"histLowerL1",
"histUpperL2",
"histLowerL2",
"histNadirL",
"histL3"};
140 const char *histTitles[6]={
"Upper L1",
"Lower L1",
"Upper L2",
"Lower L2",
"Nadir L1/2",
"L3"};
142 for(
int i=0;i<6;i++) {
143 if(histTurfRate[i]) {
144 histTurfRate[i]->Reset();
147 histTurfRate[i]=
new TH1D(histNames[i],histTitles[i],PHI_SECTORS,0.5,PHI_SECTORS+0.5);
150 const char *maskNames[2]={
"histAntMask0",
"histAntMask1"};
151 for(
int i=0;i<2;i++) {
153 histAntMask[i]->Reset();
155 histAntMask[i] =
new TH1D(maskNames[i],maskNames[i],PHI_SECTORS,0.5,PHI_SECTORS+0.5);
159 histPhiMask->Reset();
161 histPhiMask =
new TH1D(
"histPhiMask",
"histPhiMask",PHI_SECTORS,0.5,PHI_SECTORS+0.5);
168 int maskedAnts[2][PHI_SECTORS];
169 memset(maskedAnts,0,2*PHI_SECTORS*
sizeof(
int));
170 for(
int phi=0;phi<PHI_SECTORS;phi++) {
192 histTurfRate[5]->Fill(phi+1,turfPtr->
getL3Rate(phi));
195 histPhiMask->Fill(phi+1);
202 plotPad->SetRightMargin(0.0);
203 plotPad->SetLeftMargin(0.1);
204 plotPad->SetTopMargin(0.05);
205 plotPad->SetBottomMargin(0.1);
206 plotPad->Divide(1,6,0,0);
209 texy.SetTextAlign(21);
210 texy.SetTextAngle(270);
211 texy.SetTextSize(0.17);
216 histTurfRate[0]->SetMaximum(l1Max);
217 histTurfRate[1]->SetMaximum(l1Max);
220 histTurfRate[2]->SetMaximum(l2Max);
221 histTurfRate[3]->SetMaximum(l2Max);
223 histPhiMask->Scale(l3Max);
228 for(
int ring=0;ring<2;ring++) {
229 for(
int phi=0;phi<PHI_SECTORS;phi++) {
230 if(maskedAnts[ring][phi]) {
231 histAntMask[ring]->Fill(phi+1,l1Max);
234 histAntMask[ring]->SetLineWidth(0);
235 histAntMask[ring]->SetFillColor(kGray);
236 histAntMask[ring]->SetFillStyle(3001);
239 histPhiMask->SetLineWidth(0);
240 histPhiMask->SetFillColor(kGray);
241 histPhiMask->SetFillStyle(3001);
243 for(
int i=0;i<6;i++) {
244 TPad* paddy = (TPad*)plotPad->cd(i+1);
246 paddy->SetBottomMargin(0.12);
248 paddy->SetBottomMargin(0.18);
249 paddy->SetRightMargin(0.05);
250 histTurfRate[i]->SetFillStyle(3001);
251 histTurfRate[i]->SetFillColor(getNiceColour(i));
252 histTurfRate[i]->SetLineColor(getNiceColour(i));
254 histTurfRate[i]->SetXTitle(
"Phi Sector");
257 histTurfRate[i]->SetYTitle(
"Rate (kHz)");
259 histTurfRate[i]->SetYTitle(
"Rate (Hz)");
260 histTurfRate[i]->SetStats(0);
261 histTurfRate[i]->GetYaxis()->SetNoExponent(1);
262 histTurfRate[i]->GetXaxis()->SetLabelSize(0.08);
263 histTurfRate[i]->GetYaxis()->SetLabelSize(0.08);
264 histTurfRate[i]->GetXaxis()->SetTitleSize(0.12);
265 histTurfRate[i]->GetYaxis()->SetTitleSize(0.12);
266 histTurfRate[i]->GetXaxis()->SetTitleOffset(0.65);
267 histTurfRate[i]->GetYaxis()->SetTitleOffset(0.4);
268 histTurfRate[i]->SetTitle(
"");
269 histTurfRate[i]->Draw();
271 histAntMask[i%2]->Draw(
"same");
273 texy.DrawTextNDC(0.96,0.5,histTitles[i]);
276 histPhiMask->Draw(
"same");
291 topPad =
new TPad(
"padTurfInfo",
"padTurfInfo",0.2,0.9,0.8,1);
298 topPad->SetTopMargin(0.05);
300 TPaveText *leftPave =
new TPaveText(0.2,0,0.8,0.9);
301 leftPave->SetBorderSize(0);
302 leftPave->SetFillColor(0);
303 leftPave->SetTextAlign(13);
304 sprintf(textLabel,
"Run: %d",turfPtr->
run);
305 TText *runText = leftPave->AddText(textLabel);
306 runText->SetTextColor(50);
307 TTimeStamp turfTime((time_t)turfPtr->
realTime,0);
308 sprintf(textLabel,
"Time: %s",turfTime.AsString(
"s"));
309 TText *timeText = leftPave->AddText(textLabel);
310 timeText->SetTextColor(1);
311 sprintf(textLabel,
"ppsNum: %d",turfPtr->
ppsNum);
312 TText *ppsText = leftPave->AddText(textLabel);
313 ppsText->SetTextColor(1);
321 static int lastKelvinView=1;
322 gStyle->SetOptTitle(0);
326 canSurfHk = (TPad*) gROOT->FindObject(
"canSurfHk");
328 canSurfHk =
new TCanvas(
"canSurfHk",
"canSurfHk",1000,600);
331 canSurfHk->SetTopMargin(0);
332 plotPad =
new TPad(
"canSurfHkMain",
"canSurfHkMain",0,0,1,0.9);
340 static int callCounter=0;
347 lastView=fSurfDisplay;
351 addToTimePlots(surfPtr);
352 if(fSurfDisplay==MagicDisplaySurfHkDisplay::kPhiView)
354 else if(fSurfDisplay==MagicDisplaySurfHkDisplay::kSurfView)
356 else if(fSurfDisplay==MagicDisplaySurfHkDisplay::kTimeView)
367 char actualName[180];
368 const char *histNames[5]={
"histL2Scaler",
"histL1Scaler",
"histScaler",
"histThreshold",
"histRFPower"};
369 const char *histTitles[5]={
"L2 Scaler",
"L1 Scaler",
"Scaler",
"Threshold",
"RF Power"};
370 const char *histYTitles[5]={
"Rate (kHz)",
"Rate (kHz)",
"Rate (kHz)",
"DAC",
"RF Power (ADC)"};
371 int numBins[5]={ACTIVE_SURFS*L2S_PER_SURF,
372 ACTIVE_SURFS*L1S_PER_SURF,
373 ACTIVE_SURFS*SCALERS_PER_SURF,
374 ACTIVE_SURFS*SCALERS_PER_SURF,
375 ACTIVE_SURFS*RFCHAN_PER_SURF};
379 delete histBadThreshold;
382 histBadThreshold =
new TH1D(
"histBadThreshold",
"histBadThreshold",
383 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
384 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
389 histBandMask =
new TH1D(
"histBandMask",
"histBandMask",
390 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
391 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
392 Int_t maskedBands[ACTIVE_SURFS*SCALERS_PER_SURF]={0};
394 for(
int i=0;i<5;i++) {
395 if(histSurfHkStack[i])
396 delete histSurfHkStack[i];
397 sprintf(actualName,
"%s_base",histNames[i]);
398 histSurfHkStack[i] =
new THStack(actualName,histTitles[i]);
401 for(
int surf=0;surf<ACTIVE_SURFS;surf++){
402 if(histSurfHk[i][surf]) {
403 delete histSurfHk[i][surf];
406 sprintf(actualName,
"%s_%d",histNames[i],surf);
407 histSurfHk[i][surf]=
new TH1D(actualName,histTitles[i],numBins[i],-0.5,numBins[i]-0.5);
413 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
421 for(
int scl=0;scl<SCALERS_PER_SURF;scl++) {
435 for(
int chan=0;chan<RFCHAN_PER_SURF;chan++) {
437 histSurfHk[4][surf]->Fill(chan+surf*RFCHAN_PER_SURF,
441 histSurfHk[4][surf]->Fill(chan+surf*RFCHAN_PER_SURF,
447 for(
int i=0;i<5;i++) {
448 histSurfHk[i][surf]->SetFillColor(getNiceColour(surf%2));
449 histSurfHkStack[i]->Add(histSurfHk[i][surf]);
454 histBadThreshold->SetFillColor(kRed+1);
455 histSurfHkStack[3]->Add(histBadThreshold);
458 if(!plotPad->cd(5)) {
465 plotPad->SetRightMargin(0.0);
466 plotPad->SetLeftMargin(0.1);
467 plotPad->SetTopMargin(0.05);
468 plotPad->SetBottomMargin(0.0);
469 plotPad->Divide(1,5,0,0);
473 texy.SetTextAlign(21);
474 texy.SetTextAngle(270);
475 texy.SetTextSize(0.17);
479 for(
int i=0;i<5;i++) {
480 Double_t maxVal=histSurfHkStack[i]->GetMaximum(
"nostack");
481 TPad* paddy = (TPad*)plotPad->cd(i+1);
482 if(!surfHkFramey[i]) {
483 paddy->SetBottomMargin(0.15);
485 paddy->SetBottomMargin(0.18);
486 paddy->SetRightMargin(0.05);
488 surfHkFramey[i]=paddy->DrawFrame(0,0,numBins[i],maxVal*1.05);
491 surfHkFramey[i]->GetYaxis()->SetTitle(histYTitles[i]);
494 surfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (K)");
497 surfHkFramey[i]->GetXaxis()->SetTitle(
"Logical Channel");
498 surfHkFramey[i]->GetYaxis()->SetNoExponent(1);
499 surfHkFramey[i]->GetXaxis()->SetLabelSize(0.08);
500 surfHkFramey[i]->GetYaxis()->SetLabelSize(0.08);
501 surfHkFramey[i]->GetXaxis()->SetTitleSize(0.09);
502 surfHkFramey[i]->GetYaxis()->SetTitleSize(0.09);
503 surfHkFramey[i]->GetXaxis()->SetTitleOffset(0.8);
504 surfHkFramey[i]->GetYaxis()->SetTitleOffset(0.6);
505 surfHkFramey[i]->GetYaxis()->SetTickLength(-0.01);
506 surfHkFramey[i]->GetYaxis()->SetLabelOffset(0.015);
507 surfHkFramey[i]->GetXaxis()->SetTickLength(-0.01);
508 surfHkFramey[i]->GetXaxis()->SetLabelOffset(0.015);
509 surfHkFramey[i]->SetTitle(
"");
513 surfHkFramey[i]->GetYaxis()->SetRangeUser(0,maxVal*1.05);
517 surfHkFramey[i]->GetYaxis()->SetRangeUser(0.1,maxVal*2);
522 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
523 histSurfHk[i][surf]->Draw(
"same hist");
527 for(
int i=0;i<ACTIVE_SURFS*SCALERS_PER_SURF;i++) {
529 histBandMask->Fill(i,maxVal);
531 histBandMask->SetLineWidth(0);
532 histBandMask->SetFillColor(kGray);
533 histBandMask->SetFillStyle(3001);
534 histBandMask->Draw(
"same hist");
545 char actualName[180];
547 const int numPhiHistBins=PHI_SECTORS*4*2;
549 const char *histNames[5]={
"histL2ScalerPhi",
"histL1ScalerPhi",
"histScalerPhi",
"histThresholdPhi",
"histRFPowerPhi"};
550 const char *histTitles[5]={
"L2 Scaler",
"L1 Scaler",
"Scaler",
"Threshold",
"RF Power"};
551 const char *histYTitles[5]={
"Rate (kHz)",
"Rate (kHz)",
"Rate (kHz)",
"DAC",
"RF Power (ADC)"};
552 int numBins[5]={PHI_SECTORS,PHI_SECTORS*3,
553 numPhiHistBins,numPhiHistBins,numPhiHistBins};
556 delete histBadThreshold;
557 histBadThreshold =
new TH1D(
"histBadThreshold",
"histBadThreshold",
559 (numPhiHistBins)-0.5);
564 histBandMask =
new TH1D(
"histBandMask",
"histBandMask",
566 (numPhiHistBins)-0.5);
567 Int_t maskedBands[numPhiHistBins]={0};
569 for(
int i=0;i<5;i++) {
570 if(histSurfHkPhiStack[i])
571 delete histSurfHkPhiStack[i];
572 histSurfHkPhiStack[i] =
new THStack(histNames[i],histTitles[i]);
573 sprintf(actualName,
"%s_base",histNames[i]);
576 for(
int phi=0;phi<PHI_SECTORS;phi++){
577 if(histSurfHkPhi[i][phi]) {
578 delete histSurfHkPhi[i][phi];
582 sprintf(actualName,
"%s_%d",histNames[i],phi);
583 histSurfHkPhi[i][phi]=
new TH1D(actualName,histTitles[i],
591 for(
int phi=0;phi<PHI_SECTORS;phi++) {
593 for(
int ring=0;ring<3;ring++) {
597 for(
int pol=0;pol<2;pol++) {
598 int binIndex=pol+ring*2+phi*8;
600 #ifdef MULTIVERSION_ANITA_ENABLED 601 int v = AnitaVersion::get();
603 if (v == 3 && ring == 0 || v ==4 && pol == 0)
624 for(
int pol=0;pol<2;pol++) {
629 Int_t index=pol + ring*2 + phi*8;
632 histSurfHkPhi[4][phi]->Fill(index,
636 histSurfHkPhi[4][phi]->Fill(index,
643 for(
int i=0;i<5;i++) {
644 histSurfHkPhi[i][phi]->SetFillColor(getNiceColour(phi%8));
645 histSurfHkPhiStack[i]->Add(histSurfHkPhi[i][phi]);
648 histBadThreshold->SetFillColor(kRed+1);
649 histSurfHkPhiStack[1]->Add(histBadThreshold);
655 if(!plotPad->cd(5)) {
662 plotPad->SetRightMargin(0.0);
663 plotPad->SetLeftMargin(0.1);
664 plotPad->SetTopMargin(0.05);
665 plotPad->SetBottomMargin(0.0);
666 plotPad->Divide(1,5,0,0);
670 texy.SetTextAlign(21);
671 texy.SetTextAngle(270);
672 texy.SetTextSize(0.17);
676 for(
int i=0;i<5;i++) {
677 Double_t maxVal=histSurfHkPhiStack[i]->GetMaximum(
"nostack");
678 TPad* paddy = (TPad*)plotPad->cd(i+1);
679 if(!surfHkFramey[i]) {
680 paddy->SetBottomMargin(0.15);
682 paddy->SetBottomMargin(0.18);
683 paddy->SetRightMargin(0.05);
685 surfHkFramey[i]=paddy->DrawFrame(0,0,numBins[i],maxVal*1.05);
686 surfHkFramey[i]->GetYaxis()->SetTitle(histYTitles[i]);;
689 surfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (K)");
692 surfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (ADC)");
695 surfHkFramey[i]->GetXaxis()->SetTitle(
"Phi Sector");
696 surfHkFramey[i]->SetBins(numBins[i],-0.5,
698 for(
int phi=0;phi<16;phi++) {
699 sprintf(label,
"%d",phi+1);
700 surfHkFramey[i]->GetXaxis()->SetBinLabel((numBins[i]/16)*phi+(numBins[i]/32)+1,label);
704 surfHkFramey[i]->GetYaxis()->SetNoExponent(1);
705 surfHkFramey[i]->GetXaxis()->SetLabelSize(0.08);
706 surfHkFramey[i]->GetYaxis()->SetLabelSize(0.08);
707 surfHkFramey[i]->GetXaxis()->SetTitleSize(0.09);
708 surfHkFramey[i]->GetYaxis()->SetTitleSize(0.09);
709 surfHkFramey[i]->GetXaxis()->SetTitleOffset(0.8);
710 surfHkFramey[i]->GetYaxis()->SetTitleOffset(0.6);
711 surfHkFramey[i]->GetYaxis()->SetTickLength(-0.01);
712 surfHkFramey[i]->GetYaxis()->SetLabelOffset(0.015);
713 surfHkFramey[i]->GetXaxis()->SetTickLength(-0.01);
714 surfHkFramey[i]->GetXaxis()->SetLabelOffset(0.015);
715 surfHkFramey[i]->SetTitle(
"");
719 surfHkFramey[i]->GetYaxis()->SetRangeUser(0,maxVal*1.05);
723 surfHkFramey[i]->GetYaxis()->SetRangeUser(0.1,maxVal*2);
727 for(
int phi=0;phi<PHI_SECTORS;phi++) {
728 histSurfHkPhi[i][phi]->Draw(
"same hist");
732 for(
int i=0;i<numPhiHistBins;i++) {
734 histBandMask->Fill(i,maxVal);
736 histBandMask->SetLineWidth(0);
737 histBandMask->SetFillColor(kGray);
738 histBandMask->SetFillStyle(3001);
739 histBandMask->Draw(
"same hist");
748 for(
int i=0;i<5;i++) {
749 if(mgSurfTime[i])
delete mgSurfTime[i];
752 if(!plotPad->cd(4)) {
754 plotPad->SetRightMargin(0);
755 plotPad->SetLeftMargin(0.1);
756 plotPad->SetTopMargin(0.05);
757 plotPad->SetBottomMargin(0.1);
758 plotPad->Divide(1,5,0,0);
765 Int_t numPoints=fNumSurfHks;
766 if(numPoints>MAX_SURF_HK_TIME_POINTS) numPoints=MAX_SURF_HK_TIME_POINTS;
779 gPad->SetRightMargin(0.05);
781 mgSurfTime[0] =
new TMultiGraph();
782 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
783 for(
int scl=0;scl<L2S_PER_SURF;scl++) {
785 grSurfL2Scaler[surf][scl] =
new TGraph(numPoints,fTimeVals,fL2ScalerVals[surf][scl]);
786 grSurfL2Scaler[surf][scl]->SetLineColor(getNiceColour(surf));
787 grSurfL2Scaler[surf][scl]->SetMarkerColor(getNiceColour(surf));
788 grSurfL2Scaler[surf][scl]->SetMarkerStyle(getMarker(scl));
790 sprintf(graphName,
"grSurfL2Scaler%d_%d",surf,scl);
791 grSurfL2Scaler[surf][scl]->SetName(graphName);
793 mgSurfTime[0]->Add(grSurfL2Scaler[surf][scl],
"lp");
796 mgSurfTime[0]->Draw(
"alp");
797 mgSurfTime[0]->GetYaxis()->SetTitle(
"L2 Scaler (kHz)");
798 mgSurfTime[0]->GetXaxis()->SetTimeDisplay(1);
804 gPad->SetRightMargin(0.05);
806 mgSurfTime[1] =
new TMultiGraph();
807 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
808 for(
int scl=0;scl<L1S_PER_SURF;scl++) {
810 grSurfL1Scaler[surf][scl] =
new TGraph(numPoints,fTimeVals,fL1ScalerVals[surf][scl]);
811 grSurfL1Scaler[surf][scl]->SetLineColor(getNiceColour(surf));
812 grSurfL1Scaler[surf][scl]->SetMarkerColor(getNiceColour(surf));
813 grSurfL1Scaler[surf][scl]->SetMarkerStyle(getMarker(scl));
815 sprintf(graphName,
"grSurfL2Scaler%d_%d",surf,scl);
816 grSurfL1Scaler[surf][scl]->SetName(graphName);
818 mgSurfTime[1]->Add(grSurfL1Scaler[surf][scl],
"lp");
821 mgSurfTime[1]->Draw(
"alp");
822 mgSurfTime[1]->GetYaxis()->SetTitle(
"L1 Scaler (kHz)");
823 mgSurfTime[1]->GetXaxis()->SetTimeDisplay(1);
830 gPad->SetRightMargin(0.05);
832 mgSurfTime[2] =
new TMultiGraph();
833 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
834 for(
int scl=0;scl<SCALERS_PER_SURF;scl++) {
836 grSurfScaler[surf][scl] =
new TGraph(numPoints,fTimeVals,fScalerVals[surf][scl]);
837 grSurfScaler[surf][scl]->SetLineColor(getNiceColour(surf));
838 grSurfScaler[surf][scl]->SetMarkerColor(getNiceColour(surf));
839 grSurfScaler[surf][scl]->SetMarkerStyle(getMarker(scl));
841 sprintf(graphName,
"grSurfScaler%d_%d",surf,scl);
842 grSurfScaler[surf][scl]->SetName(graphName);
844 mgSurfTime[2]->Add(grSurfScaler[surf][scl],
"lp");
847 mgSurfTime[2]->Draw(
"alp");
848 mgSurfTime[2]->GetYaxis()->SetTitle(
"Scaler (kHz)");
849 mgSurfTime[2]->GetXaxis()->SetTimeDisplay(1);
856 gPad->SetRightMargin(0.05);
858 mgSurfTime[3] =
new TMultiGraph();
859 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
860 for(
int scl=0;scl<SCALERS_PER_SURF;scl++) {
863 grSurfThresh[surf][scl] =
new TGraph(numPoints,fTimeVals,fThreshVals[surf][scl]);
864 grSurfThresh[surf][scl]->SetLineColor(getNiceColour(surf));
865 grSurfThresh[surf][scl]->SetMarkerColor(getNiceColour(surf));
866 grSurfThresh[surf][scl]->SetMarkerStyle(getMarker(scl));
869 sprintf(graphName,
"grSurfThresh%d_%d",surf,scl);
870 grSurfThresh[surf][scl]->SetName(graphName);
873 mgSurfTime[3]->Add(grSurfThresh[surf][scl],
"lp");
876 mgSurfTime[3]->Draw(
"alp");
877 mgSurfTime[3]->GetYaxis()->SetTitle(
"Threshold (DAC)");
883 gPad->SetRightMargin(0.05);
885 mgSurfTime[4] =
new TMultiGraph();
886 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
887 for(
int scl=0;scl<RFCHAN_PER_SURF;scl++) {
889 grSurfRfPwr[surf][scl] =
new TGraph(numPoints,fTimeVals,fRfPowVals[surf][scl]);
890 grSurfRfPwr[surf][scl]->SetLineColor(getNiceColour(surf));
891 grSurfRfPwr[surf][scl]->SetMarkerColor(getNiceColour(surf));
892 grSurfRfPwr[surf][scl]->SetMarkerStyle(getMarker(scl));
895 sprintf(graphName,
"grSurfRfPwr%d_%d",surf,scl);
896 grSurfRfPwr[surf][scl]->SetName(graphName);
898 mgSurfTime[4]->Add(grSurfRfPwr[surf][scl],
"lp");
901 mgSurfTime[4]->Draw(
"alp");
902 mgSurfTime[4]->GetXaxis()->SetTitle(
"Time");
903 mgSurfTime[4]->GetYaxis()->SetTitle(
"RF Power (K)");
904 mgSurfTime[4]->GetXaxis()->SetTimeDisplay(1);
919 topPad =
new TPad(
"padSurfInfo",
"padSurfInfo",0.2,0.9,0.8,1);
926 topPad->SetTopMargin(0.05);
929 TPaveText *leftPave =
new TPaveText(0.05,0,0.95,0.9);
930 leftPave->SetBorderSize(0);
931 leftPave->SetFillColor(0);
932 leftPave->SetTextAlign(13);
933 sprintf(textLabel,
"Run: %d",surfPtr->
run);
934 TText *runText = leftPave->AddText(textLabel);
935 runText->SetTextColor(50);
936 TTimeStamp surfTime((time_t)surfPtr->
realTime,0);
937 sprintf(textLabel,
"Time: %s",surfTime.AsString(
"s"));
938 TText *timeText = leftPave->AddText(textLabel);
939 timeText->SetTextColor(1);
940 sprintf(textLabel,
"ms: %8.6f ms",1e-3*surfPtr->
payloadTimeUs);
941 TText *msText = leftPave->AddText(textLabel);
942 msText->SetTextColor(1);
946 TPaveText *rightPave =
new TPaveText(0.05,0,0.95,0.9);
947 rightPave->SetBorderSize(0);
948 rightPave->SetFillColor(0);
949 rightPave->SetTextAlign(13);
951 TText *globalText = rightPave->AddText(textLabel);
952 globalText->SetTextColor(1);
953 sprintf(textLabel,
"Goal Rates: (%d %d %d %d) kHz",
956 TText *goalText = rightPave->AddText(textLabel);
957 goalText->SetTextColor(1);
958 sprintf(textLabel,
"Error Flag: %#x",surfPtr->
errorFlag);
959 TText *errorText = rightPave->AddText(textLabel);
960 errorText->SetTextColor(1);
973 canTurfRate = (TPad*) gROOT->FindObject(
"canTurfRate");
975 canTurfRate =
new TCanvas(
"canTurfRate",
"canTurfRate",1000,600);
977 canTurfRate->Clear();
978 canTurfRate->SetTopMargin(0);
979 plotPad =
new TPad(
"canTurfRateMain",
"canTurfRateMain",0,0,1,0.9);
988 const char *histNames[6]={
"histSumUpperL1",
"histSumLowerL1",
"histSumUpperL2",
"histSumLowerL2",
"histSumNadirL",
"histSumL3"};
989 const char *histTitles[6]={
"Upper L1",
"Lower L1",
"Upper L2",
"Lower L2",
"Nadir L1/2",
"L3"};
991 for(
int i=0;i<6;i++) {
992 if(histSumTurfRate[i]) {
993 delete histSumTurfRate[i];
997 histSumTurfRate[i]=
new TH1D(histNames[i],histTitles[i],PHI_SECTORS,0.5,PHI_SECTORS+0.5);
1000 const char *maskNames[2]={
"histSumAntMask0",
"histSumAntMask1"};
1001 for(
int i=0;i<2;i++) {
1002 if(histSumAntMask[i])
1003 delete histSumAntMask[i];
1006 histSumAntMask[i] =
new TH1D(maskNames[i],maskNames[i],PHI_SECTORS,0.5,PHI_SECTORS+0.5);
1011 delete histSumPhiMask;
1014 histSumPhiMask =
new TH1D(
"histSumPhiMask",
"histSumPhiMask",PHI_SECTORS,0.5,PHI_SECTORS+0.5);
1019 int maskedAnts[2][PHI_SECTORS];
1020 memset(maskedAnts,0,2*PHI_SECTORS*
sizeof(
int));
1022 for(
int phi=0;phi<PHI_SECTORS;phi++) {
1044 histSumTurfRate[5]->Fill(phi+1,sumTurfPtr->
getL3Rate(phi));
1047 histSumPhiMask->Fill(phi+1);
1051 float scale=1./sumTurfPtr->
numRates;
1052 for(
int i=0;i<6;i++)
1053 histSumTurfRate[i]->Scale(scale);
1060 plotPad->SetRightMargin(0.0);
1061 plotPad->SetLeftMargin(0.1);
1062 plotPad->SetTopMargin(0.05);
1063 plotPad->SetBottomMargin(0.1);
1064 plotPad->Divide(1,6,0,0);
1067 histSumPhiMask->Scale(l3Max);
1071 texy.SetTextAlign(21);
1072 texy.SetTextAngle(270);
1073 texy.SetTextSize(0.17);
1078 histSumTurfRate[0]->SetMaximum(l1Max);
1079 histSumTurfRate[1]->SetMaximum(l1Max);
1082 histSumTurfRate[2]->SetMaximum(l2Max);
1083 histSumTurfRate[3]->SetMaximum(l2Max);
1087 for(
int ring=0;ring<2;ring++) {
1088 for(
int phi=0;phi<PHI_SECTORS;phi++) {
1089 if(maskedAnts[ring][phi]) {
1091 histSumAntMask[ring]->Fill(phi+1,l1Max);
1094 histSumAntMask[ring]->SetLineWidth(0);
1095 histSumAntMask[ring]->SetFillColor(kGray);
1096 histSumAntMask[ring]->SetFillStyle(3001);
1099 histSumPhiMask->SetLineWidth(0);
1100 histSumPhiMask->SetFillColor(kGray);
1101 histSumPhiMask->SetFillStyle(3001);
1103 for(
int i=0;i<6;i++) {
1104 TPad* paddy = (TPad*)plotPad->cd(i+1);
1106 paddy->SetBottomMargin(0.12);
1108 paddy->SetBottomMargin(0.18);
1110 paddy->SetRightMargin(0.05);
1111 histSumTurfRate[i]->SetFillStyle(3001);
1112 histSumTurfRate[i]->SetFillColor(getNiceColour(i));
1113 histSumTurfRate[i]->SetLineColor(getNiceColour(i));
1115 histSumTurfRate[i]->SetXTitle(
"Phi Sector");
1117 histSumTurfRate[i]->SetYTitle(
"Rate (kHz)");
1119 histSumTurfRate[i]->SetYTitle(
"Rate (Hz)");
1120 histSumTurfRate[i]->SetStats(0);
1121 histSumTurfRate[i]->GetYaxis()->SetNoExponent(1);
1122 histSumTurfRate[i]->GetXaxis()->SetLabelSize(0.08);
1123 histSumTurfRate[i]->GetYaxis()->SetLabelSize(0.08);
1124 histSumTurfRate[i]->GetXaxis()->SetTitleSize(0.12);
1125 histSumTurfRate[i]->GetYaxis()->SetTitleSize(0.12);
1126 histSumTurfRate[i]->GetXaxis()->SetTitleOffset(0.65);
1127 histSumTurfRate[i]->GetYaxis()->SetTitleOffset(0.4);
1128 histSumTurfRate[i]->SetTitle(
"");
1129 histSumTurfRate[i]->Draw();
1131 histSumAntMask[i%2]->Draw(
"same");
1133 texy.DrawTextNDC(0.96,0.5,histTitles[i]);
1137 histSumPhiMask->Draw(
"same");
1149 char textLabel[180];
1152 topPad =
new TPad(
"padTurfInfo",
"padTurfInfo",0.2,0.9,0.8,1);
1159 topPad->SetTopMargin(0.05);
1161 TPaveText *leftPave =
new TPaveText(0.2,0,0.8,0.9);
1162 leftPave->SetBorderSize(0);
1163 leftPave->SetFillColor(0);
1164 leftPave->SetTextAlign(13);
1165 sprintf(textLabel,
"Run: %d",sumTurfPtr->
run);
1166 TText *runText = leftPave->AddText(textLabel);
1167 runText->SetTextColor(50);
1168 TTimeStamp turfTime((time_t)sumTurfPtr->
realTime,0);
1169 sprintf(textLabel,
"Time: %s",turfTime.AsString(
"s"));
1170 TText *timeText = leftPave->AddText(textLabel);
1171 timeText->SetTextColor(1);
1172 sprintf(textLabel,
"Num Rates: %d",sumTurfPtr->
numRates);
1173 TText *numRatesText = leftPave->AddText(textLabel);
1174 numRatesText->SetTextColor(1);
1175 sprintf(textLabel,
"Delta T: %d",sumTurfPtr->
deltaT);
1176 TText *deltatText = leftPave->AddText(textLabel);
1177 deltatText->SetTextColor(1);
1186 static int lastKelvinView=1;
1187 gStyle->SetOptTitle(0);
1191 canAvgSurfHk = (TPad*) gROOT->FindObject(
"canAvgSurfHk");
1193 canAvgSurfHk =
new TCanvas(
"canAvgSurfHk",
"canAvgSurfHk",1000,600);
1195 canAvgSurfHk->Clear();
1196 canAvgSurfHk->SetTopMargin(0);
1197 plotPad =
new TPad(
"canAvgSurfHkMain",
"canAvgSurfHkMain",0,0,1,0.9);
1207 avgSurfHkFramey[0]=0;
1208 avgSurfHkFramey[1]=0;
1209 avgSurfHkFramey[2]=0;
1211 lastView=fAvgSurfDisplay;
1215 if(fAvgSurfDisplay==MagicDisplaySurfHkDisplay::kPhiView)
1217 else if(fAvgSurfDisplay==MagicDisplaySurfHkDisplay::kSurfView)
1222 return canAvgSurfHk;
1228 char actualName[180];
1229 const char *histNames[3]={
"histAvgScaler",
"histAvgThreshold",
"histAvgRFPower"};
1230 const char *histTitles[3]={
"Scaler",
"Threshold",
"RF Power"};
1232 if(histAvgSurfBadThreshold)
1233 delete histAvgSurfBadThreshold;
1236 histAvgSurfBadThreshold =
new TH1D(
"histAvgSurfBadThreshold",
"histAvgSurfBadThreshold",
1237 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1238 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1239 if(histAvgSurfBandMask)
1240 delete histAvgSurfBandMask;
1243 histAvgSurfBandMask =
new TH1D(
"histAvgSurfBandMask",
"histAvgSurfBandMask",
1244 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1245 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1246 Int_t maskedBands[ACTIVE_SURFS*SCALERS_PER_SURF]={0};
1248 for(
int i=0;i<3;i++) {
1249 if(histAvgSurfHkStack[i])
1250 delete histAvgSurfHkStack[i];
1251 histAvgSurfHkStack[i] =
new THStack(histNames[i],histTitles[i]);
1252 sprintf(actualName,
"%s_base",histNames[i]);
1255 for(
int surf=0;surf<ACTIVE_SURFS;surf++){
1256 if(histAvgSurfHk[i][surf]) {
1257 delete histAvgSurfHk[i][surf];
1261 sprintf(actualName,
"%s_%d",histNames[i],surf);
1263 histAvgSurfHk[i][surf]=
new TH1D(actualName,histTitles[i],
1264 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1265 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1268 histAvgSurfHk[i][surf]=
new TH1D(actualName,histTitles[i],
1269 ACTIVE_SURFS*RFCHAN_PER_SURF,-0.5,
1270 (ACTIVE_SURFS*RFCHAN_PER_SURF)-0.5);
1276 Float_t maxVals[3]={0};
1278 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
1279 for(
int scl=0;scl<SCALERS_PER_SURF;scl++) {
1283 histAvgSurfHk[0][surf]->Fill(scl+surf*SCALERS_PER_SURF,
1288 if(avgSurfPtr->
numHks>0) {
1289 error1=avgSurfPtr->
rmsScaler[surf][scl];
1290 error2=avgSurfPtr->
rmsThresh[surf][scl];
1293 histAvgSurfHk[0][surf]->SetBinError(1+scl+surf*SCALERS_PER_SURF,
1295 histAvgSurfHk[1][surf]->Fill(scl+surf*SCALERS_PER_SURF,
1297 histAvgSurfHk[1][surf]->SetBinError(1+scl+surf*SCALERS_PER_SURF,
1300 if(maxVals[0]<avgSurfPtr->
avgScaler[surf][scl]+error1)
1301 maxVals[0]=avgSurfPtr->
avgScaler[surf][scl]+error1;
1302 if(maxVals[1]<avgSurfPtr->
avgThresh[surf][scl]+error2)
1303 maxVals[1]=avgSurfPtr->
avgThresh[surf][scl]+error2;
1307 for(
int chan=0;chan<RFCHAN_PER_SURF;chan++) {
1309 if(avgSurfPtr->
numHks>0) {
1319 histAvgSurfHk[2][surf]->Fill(chan+surf*RFCHAN_PER_SURF,val);
1320 if(maxVals[2]<val+error)
1321 maxVals[2]=val+error;
1324 histAvgSurfHk[2][surf]->Fill(chan+surf*RFCHAN_PER_SURF,
1326 if(maxVals[2]<avgSurfPtr->
avgRFPower[surf][chan]+error)
1327 maxVals[2]=avgSurfPtr->
avgRFPower[surf][chan]+error;
1329 histAvgSurfHk[2][surf]->SetBinError(1+chan+surf*RFCHAN_PER_SURF,
1332 histAvgSurfHk[0][surf]->SetFillColor(getNiceColour(surf%2));
1333 histAvgSurfHk[1][surf]->SetFillColor(getNiceColour(surf%2));
1334 histAvgSurfHk[2][surf]->SetFillColor(getNiceColour(surf%2));
1338 histAvgSurfHkStack[0]->Add(histAvgSurfHk[0][surf]);
1339 histAvgSurfHkStack[1]->Add(histAvgSurfHk[1][surf]);
1340 histAvgSurfHkStack[2]->Add(histAvgSurfHk[2][surf]);
1342 histAvgSurfBadThreshold->SetFillColor(kRed+1);
1343 histAvgSurfHkStack[1]->Add(histAvgSurfBadThreshold);
1346 if(!plotPad->cd(3)) {
1348 avgSurfHkFramey[0]=0;
1349 avgSurfHkFramey[1]=0;
1350 avgSurfHkFramey[2]=0;
1351 plotPad->SetRightMargin(0.0);
1352 plotPad->SetLeftMargin(0.1);
1353 plotPad->SetTopMargin(0.05);
1354 plotPad->SetBottomMargin(0.0);
1355 plotPad->Divide(1,3,0,0);
1359 texy.SetTextAlign(21);
1360 texy.SetTextAngle(270);
1361 texy.SetTextSize(0.17);
1365 for(
int i=0;i<3;i++) {
1367 Double_t maxVal=maxVals[i];
1368 TPad* paddy = (TPad*)plotPad->cd(i+1);
1369 if(!avgSurfHkFramey[i]) {
1370 paddy->SetBottomMargin(0.15);
1372 paddy->SetBottomMargin(0.18);
1373 paddy->SetRightMargin(0.05);
1376 avgSurfHkFramey[i]=paddy->DrawFrame(0,0,ACTIVE_SURFS*SCALERS_PER_SURF,maxVal*1.05);
1379 avgSurfHkFramey[i]=paddy->DrawFrame(0,0,ACTIVE_SURFS*RFCHAN_PER_SURF,maxVal*1.05);
1386 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"Rate (kHz)");
1388 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"Threshold (DAC)");
1391 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (K)");
1394 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (ADC)");
1397 avgSurfHkFramey[i]->GetXaxis()->SetTitle(
"Logical Channel");
1398 avgSurfHkFramey[i]->GetYaxis()->SetNoExponent(1);
1399 avgSurfHkFramey[i]->GetXaxis()->SetLabelSize(0.08);
1400 avgSurfHkFramey[i]->GetYaxis()->SetLabelSize(0.08);
1401 avgSurfHkFramey[i]->GetXaxis()->SetTitleSize(0.09);
1402 avgSurfHkFramey[i]->GetYaxis()->SetTitleSize(0.09);
1403 avgSurfHkFramey[i]->GetXaxis()->SetTitleOffset(0.8);
1404 avgSurfHkFramey[i]->GetYaxis()->SetTitleOffset(0.6);
1405 avgSurfHkFramey[i]->GetYaxis()->SetTickLength(-0.01);
1406 avgSurfHkFramey[i]->GetYaxis()->SetLabelOffset(0.015);
1407 avgSurfHkFramey[i]->GetXaxis()->SetTickLength(-0.01);
1408 avgSurfHkFramey[i]->GetXaxis()->SetLabelOffset(0.015);
1409 avgSurfHkFramey[i]->SetTitle(
"");
1413 avgSurfHkFramey[i]->GetYaxis()->SetRangeUser(0,maxVal*1.05);
1417 avgSurfHkFramey[i]->GetYaxis()->SetRangeUser(0.1,maxVal*2);
1421 for(
int surf=0;surf<ACTIVE_SURFS;surf++) {
1422 histAvgSurfHk[i][surf]->SetMarkerStyle(0);
1423 histAvgSurfHk[i][surf]->Draw(
"same bar e1");
1427 for(
int i=0;i<ACTIVE_SURFS*SCALERS_PER_SURF;i++) {
1429 histAvgSurfBandMask->Fill(i,maxVal);
1431 histAvgSurfBandMask->SetLineWidth(0);
1432 histAvgSurfBandMask->SetFillColor(kGray);
1433 histAvgSurfBandMask->SetFillStyle(3001);
1434 histAvgSurfBandMask->Draw(
"same");
1445 char actualName[180];
1446 const char *histNames[3]={
"histAvgScalerPhi",
"histAvgThresholdPhi",
"histAvgRFPowerPhi"};
1447 const char *histTitles[3]={
"Scaler",
"Threshold",
"RF Power"};
1449 if(histAvgSurfBadThreshold)
1450 delete histAvgSurfBadThreshold;
1453 histAvgSurfBadThreshold =
new TH1D(
"histAvgSurfBadThreshold",
"histAvgSurfBadThreshold",
1454 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1455 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1456 if(histAvgSurfBandMask)
1457 delete histAvgSurfBandMask;
1460 histAvgSurfBandMask =
new TH1D(
"histAvgSurfBandMask",
"histAvgSurfBandMask",
1461 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1462 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1463 Int_t maskedBands[ACTIVE_SURFS*SCALERS_PER_SURF]={0};
1465 for(
int i=0;i<3;i++) {
1466 if(histAvgSurfHkPhiStack[i])
1467 delete histAvgSurfHkPhiStack[i];
1468 histAvgSurfHkPhiStack[i] =
new THStack(histNames[i],histTitles[i]);
1469 sprintf(actualName,
"%s_base",histNames[i]);
1472 for(
int phi=0;phi<PHI_SECTORS;phi++){
1473 if(histAvgSurfHkPhi[i][phi]) {
1474 delete histAvgSurfHkPhi[i][phi];
1478 sprintf(actualName,
"%s_%d",histNames[i],phi);
1480 histAvgSurfHkPhi[i][phi]=
new TH1D(actualName,histTitles[i],
1481 ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1482 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1485 histAvgSurfHkPhi[i][phi]=
new TH1D(actualName,histTitles[i],
1486 3*PHI_SECTORS*2,-0.5,
1487 (3*PHI_SECTORS*2)-0.5);
1494 Float_t maxVals[3]={0};
1496 for(
int ring=0;ring<3;ring++) {
1497 for(
int phi=0;phi<PHI_SECTORS;phi++) {
1502 for(
int band=0;band<4;band++) {
1503 Int_t index=band+4*phi+64*ring;
1505 index=128 + band+4*(phi/2);
1527 for(
int pol=0;pol<2;pol++) {
1532 Int_t index=pol + 2 *phi + 32*ring;
1535 if(avgSurfPtr->
numHks>0) {
1545 histAvgSurfHkPhi[2][phi]->Fill(index,val);
1546 if(maxVals[2]<val+error)
1547 maxVals[2]=val+error;
1550 histAvgSurfHkPhi[2][phi]->Fill(index,
1552 if(maxVals[2]<avgSurfPtr->
avgRFPower[surf][rfChan]+error)
1553 maxVals[2]=avgSurfPtr->
avgRFPower[surf][rfChan]+error;
1555 histAvgSurfHkPhi[2][phi]->SetBinError(index+1,
1564 for(
int phi=0;phi<PHI_SECTORS;phi++) {
1565 histAvgSurfHkPhi[0][phi]->SetFillColor(getNiceColour(phi%8));
1566 histAvgSurfHkPhi[1][phi]->SetFillColor(getNiceColour(phi%8));
1567 histAvgSurfHkPhi[2][phi]->SetFillColor(getNiceColour(phi%8));
1568 histAvgSurfHkPhiStack[0]->Add(histAvgSurfHkPhi[0][phi]);
1569 histAvgSurfHkPhiStack[1]->Add(histAvgSurfHkPhi[1][phi]);
1570 histAvgSurfHkPhiStack[2]->Add(histAvgSurfHkPhi[2][phi]);
1572 histAvgSurfBadThreshold->SetFillColor(kRed+1);
1573 histAvgSurfHkPhiStack[1]->Add(histAvgSurfBadThreshold);
1576 if(!plotPad->cd(3)) {
1578 avgSurfHkFramey[0]=0;
1579 avgSurfHkFramey[1]=0;
1580 avgSurfHkFramey[2]=0;
1581 plotPad->SetRightMargin(0.0);
1582 plotPad->SetLeftMargin(0.1);
1583 plotPad->SetTopMargin(0.05);
1584 plotPad->SetBottomMargin(0.0);
1585 plotPad->Divide(1,3,0,0);
1589 texy.SetTextAlign(21);
1590 texy.SetTextAngle(270);
1591 texy.SetTextSize(0.17);
1595 for(
int i=0;i<3;i++) {
1597 Double_t maxVal=maxVals[i];
1598 TPad* paddy = (TPad*)plotPad->cd(i+1);
1599 if(!avgSurfHkFramey[i]) {
1600 paddy->SetBottomMargin(0.15);
1602 paddy->SetBottomMargin(0.18);
1603 paddy->SetRightMargin(0.05);
1606 avgSurfHkFramey[i]=paddy->DrawFrame(0,0,ACTIVE_SURFS*SCALERS_PER_SURF,maxVal*1.05);
1610 avgSurfHkFramey[i]=paddy->DrawFrame(0,0,3*PHI_SECTORS*2,maxVal*1.05);
1617 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"Rate (kHz)");
1619 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"Threshold (DAC)");
1622 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (K)");
1625 avgSurfHkFramey[i]->GetYaxis()->SetTitle(
"RF Power (ADC)");
1629 avgSurfHkFramey[i]->GetXaxis()->SetTitle(
"Phi Sector");
1632 avgSurfHkFramey[i]->SetBins(ACTIVE_SURFS*SCALERS_PER_SURF,-0.5,
1633 (ACTIVE_SURFS*SCALERS_PER_SURF)-0.5);
1634 for(
int phi=0;phi<16;phi+=2) {
1635 sprintf(label,
"%d",phi+1);
1636 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(4*phi+2,label);
1637 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(4*phi+66,label);
1639 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(2*phi+130,label);
1645 avgSurfHkFramey[i]->SetBins(3*PHI_SECTORS*2,-0.5,
1646 (3*PHI_SECTORS*2)-0.5);
1647 for(
int phi=0;phi<16;phi+=2) {
1648 sprintf(label,
"%d",phi+1);
1649 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(2*phi +1,label);
1650 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(2*phi +33,label);
1651 avgSurfHkFramey[i]->GetXaxis()->SetBinLabel(2*phi +65,label);
1656 avgSurfHkFramey[i]->GetYaxis()->SetNoExponent(1);
1657 avgSurfHkFramey[i]->GetXaxis()->SetLabelSize(0.08);
1658 avgSurfHkFramey[i]->GetYaxis()->SetLabelSize(0.08);
1659 avgSurfHkFramey[i]->GetXaxis()->SetTitleSize(0.09);
1660 avgSurfHkFramey[i]->GetYaxis()->SetTitleSize(0.09);
1661 avgSurfHkFramey[i]->GetXaxis()->SetTitleOffset(0.8);
1662 avgSurfHkFramey[i]->GetYaxis()->SetTitleOffset(0.6);
1663 avgSurfHkFramey[i]->GetYaxis()->SetTickLength(-0.01);
1664 avgSurfHkFramey[i]->GetYaxis()->SetLabelOffset(0.015);
1665 avgSurfHkFramey[i]->GetXaxis()->SetTickLength(-0.01);
1666 avgSurfHkFramey[i]->GetXaxis()->SetLabelOffset(0.015);
1667 avgSurfHkFramey[i]->SetTitle(
"");
1671 avgSurfHkFramey[i]->GetYaxis()->SetRangeUser(0,maxVal*1.05);
1675 avgSurfHkFramey[i]->GetYaxis()->SetRangeUser(0.1,maxVal*2);
1679 for(
int phi=0;phi<PHI_SECTORS;phi++) {
1680 histAvgSurfHkPhi[i][phi]->SetMarkerStyle(0);
1681 histAvgSurfHkPhi[i][phi]->Draw(
"same bar e1");
1685 for(
int i=0;i<ACTIVE_SURFS*SCALERS_PER_SURF;i++) {
1687 histAvgSurfBandMask->Fill(i,maxVal);
1689 histAvgSurfBandMask->SetLineWidth(0);
1690 histAvgSurfBandMask->SetFillColor(kGray);
1691 histAvgSurfBandMask->SetFillStyle(3001);
1692 histAvgSurfBandMask->Draw(
"same");
1704 char textLabel[180];
1707 topPad =
new TPad(
"padAvgSurfInfo",
"padAvgSurfInfo",0.2,0.9,0.8,1);
1714 topPad->SetTopMargin(0.05);
1715 topPad->Divide(2,1);
1717 TPaveText *leftPave =
new TPaveText(0.05,0,0.95,0.9);
1718 leftPave->SetBorderSize(0);
1719 leftPave->SetFillColor(0);
1720 leftPave->SetTextAlign(13);
1721 sprintf(textLabel,
"Run: %d",avgSurfPtr->
run);
1722 TText *runText = leftPave->AddText(textLabel);
1723 runText->SetTextColor(50);
1724 TTimeStamp avgSurfTime((time_t)avgSurfPtr->
realTime,0);
1725 sprintf(textLabel,
"Time: %s",avgSurfTime.AsString(
"s"));
1726 TText *timeText = leftPave->AddText(textLabel);
1727 timeText->SetTextColor(1);
1728 sprintf(textLabel,
"Num Hks: %d",avgSurfPtr->
numHks);
1729 leftPave->AddText(textLabel);
1730 sprintf(textLabel,
"Delta T: %d",avgSurfPtr->
deltaT);
1731 leftPave->AddText(textLabel);
1735 TPaveText *rightPave =
new TPaveText(0.05,0,0.95,0.9);
1736 rightPave->SetBorderSize(0);
1737 rightPave->SetFillColor(0);
1738 rightPave->SetTextAlign(13);
1740 TText *globalText = rightPave->AddText(textLabel);
1741 globalText->SetTextColor(1);
1742 sprintf(textLabel,
"Goal Rates: (%d %d %d) kHz",
1745 TText *goalText = rightPave->AddText(textLabel);
1746 goalText->SetTextColor(1);
1747 sprintf(textLabel,
"Had Error: %#x (%d)",avgSurfPtr->
hadError,avgSurfPtr->
hadError);
1748 TText *errorText = rightPave->AddText(textLabel);
1749 errorText->SetTextColor(1);
1755 void AnitaRFCanvasMaker::addToTimePlots(
SurfHk *surfPtr) {
1757 if(fNumSurfHks<MAX_SURF_HK_TIME_POINTS) {
1758 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
1776 for(
int surf=0;surf<TRIGGER_SURFS;surf++) {
1777 for(
int l2=0;l2<L2S_PER_SURF;l2++) {
1778 memmove(&fL2ScalerVals[surf][l2][0],&fL2ScalerVals[surf][l2][1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1781 for(
int l1=0;l1<L1S_PER_SURF;l1++) {
1782 memmove(&fL1ScalerVals[surf][l1][0],&fL1ScalerVals[surf][l1][1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1785 for(
int scl=0;scl<SCALERS_PER_SURF;scl++) {
1786 memmove(&fScalerVals[surf][scl][0],&fScalerVals[surf][scl][1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1787 memmove(&fThreshVals[surf][scl][0],&fThreshVals[surf][scl][1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1788 fScalerVals[surf][scl][MAX_SURF_HK_TIME_POINTS-1]=surfPtr->
scaler[surf][scl];
1789 fThreshVals[surf][scl][MAX_SURF_HK_TIME_POINTS-1]=surfPtr->
threshold[surf][scl];
1791 for(
int chan=0;chan<RFCHAN_PER_SURF;chan++) {
1792 memmove(&fRfPowVals[surf][chan][0],&fRfPowVals[surf][chan][1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1793 fRfPowVals[surf][chan][MAX_SURF_HK_TIME_POINTS-1]=surfPtr->
getRFPowerInK(surf,chan);
1796 memmove(&fTimeVals[0],&fTimeVals[1],
sizeof(Double_t)*(MAX_SURF_HK_TIME_POINTS-1));
1797 fTimeVals[MAX_SURF_HK_TIME_POINTS-1]=surfPtr->
realTime;
Double_t getRMSRFPowerInK(int surf, int chan)
Returns the pseudo-calibrated RF power in K.
AnitaRFCanvasMaker()
Constructor.
UInt_t realTime
Time in unixTime.
UShort_t scalerGoals[4]
Scaler goal for each ring, only use 3.
Int_t run
Run number, assigned offline.
UShort_t rmsThresh[12][12]
The rms threhsold value per channel.
UShort_t phiTrigMask
Which phi sectors are masked off (VPol only in A3)?
Int_t fSumTurfL2Max
Maximum summed TURF L2.
UShort_t avgThresh[12][12]
The mean threshold value per channel.
void getSurfHkSurfCanvas(SurfHk *surfPtr, TPad *plotPad)
Worker function.
TPad * getTurfInfoCanvas(TurfRate *turfPtr, TPad *useCan)
Returns the TurfRate info canvas, the canvas can be provided in useCan
Int_t fFixAvgSurfYScale
Fixed or autoscaling averaged SURF.
void getSurfHkTimeCanvas(TPad *plotPad)
Worker function.
void getAvgSurfHkSurfCanvas(AveragedSurfHk *avgSurfPtr, TPad *plotPad)
Worker function.
Int_t fSumTurfL3Min
Minimum summed TURF L3.
void getAvgSurfHkPhiCanvas(AveragedSurfHk *avgSurfPtr, TPad *plotPad)
Worker function.
TPad * getAvgSurfInfoCanvas(AveragedSurfHk *avgSurfPtr, TPad *useCan)
Returns the averaged SURF hk info canvas, the canvas can be provided in useCan
Int_t getThreshold(int phi, AnitaRing::AnitaRing_t ring, AnitaTrigPol::AnitaTrigPol_t pol)
Returns readback threhsold value for given ring-phi-pol.
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.
void getSurfHkPhiCanvas(SurfHk *surfPtr, TPad *plotPad)
Worker function.
UShort_t rmsScaler[12][12]
The rms scaler value per channel.
UShort_t scalerGoals[3]
The scaler goals for the four bands.
static AnitaRFCanvasMaker * Instance()
Instance generator.
TPad * getSurfInfoCanvas(SurfHk *surfPtr, TPad *useCan)
Returns the SURF hk info canvas, the canvas can be provided in useCan
~AnitaRFCanvasMaker()
Destructor.
Int_t fSumTurfL3Max
Maximum summed TURF L3.
Int_t fFixTurfYScale
Fixed or autoscaling TURF.
Int_t fTurfL2Min
Minimum TURF L2.
UInt_t realTime
Time in unixTime.
Double_t getRawRFPower(int surf, int chan)
Returns the measured adc value of the RF power while masking the top bit (the "phase" bit) ...
Double_t getRFPowerInK(int surf, int chan)
Returns the pseudo-calibrated RF power in K.
TPad * getSumTurfRateCanvas(SummedTurfRate *sumTurfPtr, TPad *useCan=0)
Returns the summed TURF rate histogram canvas, the canvas can be provided in useCan ...
UInt_t realTime
Time in unixTime.
UShort_t deltaT
Time span of data in seconds.
Int_t getL3Rate(int phi)
Returns l3 rate in phi sector.
SurfHk – The raw SURF scaler+threshold data.
UInt_t payloadTimeUs
Subsecond time of readout in us.
enum MagicDisplaySurfHkDisplay::EMagicDisplaySurfHkDisplay MagicDisplaySurfHkDisplay_t
Enumeration for plot style.
Int_t fTurfL3Max
Maximum TURF L3.
Int_t fFixSumTurfYScale
Fixed or autoscaling summed TURF.
UShort_t ppsNum
ppsNum of data
enum AnitaRing::EAnitaRing AnitaRing_t
Ring enumeration.
SummedTurfRate – The Summed Turf Rate data.
enum AnitaTrigPol::EAnitaTrigPol AnitaTrigPol_t
Polarisation enumeration.
Int_t fAvgSurfUseLog
Log or linear?
UInt_t hadError
Flag for errors.
Int_t fAvgSurfKelvinView
ADC or Kelvin view.
Int_t getL1Scaler(int phi, AnitaPol::AnitaPol_t pol, AnitaRing::AnitaRing_t ring)
Returns the L1 scaler value for given phi-ring-pol.
UShort_t globalThreshold
Global threshold if set.
UShort_t rmsRFPower[12][8]
The rms RF power value per channel.
Int_t run
Run number, assigned offline.
Int_t fTurfL2Max
Maximum TURF L2.
Int_t getL3Rate(int phi, AnitaPol::AnitaPol_t pol=AnitaPol::kVertical)
Int_t fTurfL3Min
Minimum TURF L3.
UShort_t avgRFPower[12][8]
The mean RF power value per channel.
TPad * getSurfHkCanvas(SurfHk *surfPtr, TPad *useCan=0)
Returns the SURF hk histogram canvas, the canvas can be provided in useCan
Int_t fSurfUseLog
Log or linear?
UShort_t scaler[12][16]
Scaler values, multiple by 1000 to get Hz.
UShort_t numHks
Number of SURF Hk reads that are included in average.
UShort_t errorFlag
Error flag.
Int_t isMasked(int phi, AnitaRing::AnitaRing_t ring, AnitaTrigPol::AnitaTrigPol_t pol)
Returns 1 if given phi-ring-pol is masked.
UShort_t deltaT
Time span of the averaging.
Double_t getRFPowerInK(int surf, int chan)
Returns the pseudo-calibrated RF power in K.
static AnitaRFCanvasMaker * fgInstance
Protect against multiple instances.
TPad * getSumTurfInfoCanvas(SummedTurfRate *sumTurfPtr, TPad *useCan)
Returns the summed TURF Rate info canvas, the canvas can be provided in useCan
Int_t fSumTurfL1Max
Maximum summed TURF L1.
Int_t run
Assigned offline.
TurfRate – The Turf Rate data.
Int_t fFixSurfYScale
Fixed or autoscaling SURF.
UShort_t globalThreshold
Global trheshold (if in global threshold mode)
Int_t fTurfL1Min
Minimum TURF L1.
Int_t getScaler(int phi, AnitaRing::AnitaRing_t ring, AnitaTrigPol::AnitaTrigPol_t pol)
Returns scaler value for given ring-phi-pol.
UShort_t numRates
Number of rates in the sum.
TPad * getAvgSurfHkCanvas(AveragedSurfHk *avgSurfPtr, TPad *useCan=0)
Returns the averaged SURF hk histogram canvas, the canvas can be provided in useCan ...
Int_t fSumTurfL2Min
Minimum summed TURF L2.
Int_t fTurfL1Max
Maximum TURF L1.
Int_t fSumTurfL1Min
Minimum summed TURF L1.
UInt_t realTime
Basically unixTime.
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.
Int_t fSurfKelvinView
ADC or Kelvin view.
UShort_t avgScaler[12][12]
The mean scaler value per channel.
Int_t run
Run number from offline.
UShort_t threshold[12][16]
Threshold values in DAC counts.
UShort_t phiTrigMask
Which phi sectors are masked off?
AveragedSurfHk – The Averaged SURF Housekeeping data.