10 #include <TRootEmbeddedCanvas.h>
12 #include <TGComboBox.h>
16 #include <TGButtonGroup.h>
17 #include <TGNumberEntry.h>
18 #include <TGListBox.h>
19 #include <TObjArray.h>
21 #include <TClonesArray.h>
22 #include <TSystemDirectory.h>
33 #include <TApplication.h>
36 #include "TMethodCall.h"
88 : TGMainFrame(p, w, h, opt)
98 sprintf(
rundir,
"outputs/");
139 for(Int_t n = 0; n< 100; n++)
150 UInt_t mainx = xsize1 + xsize2;
153 gStyle->SetFrameBorderMode(1);
154 gStyle->SetFrameBorderSize(1);
155 gStyle->SetOptStat(0);
163 TGVerticalFrame* f1 =
new TGVerticalFrame(
this,xsize1,mainy,kVerticalFrame);
164 TGVerticalFrame* f2 =
new TGVerticalFrame(
this,xsize2,mainy,kVerticalFrame);
165 this->AddFrame(f1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandY,5,5,5,5));
166 this->AddFrame(f2,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
167 TGVerticalFrame* f20 =
new TGVerticalFrame(f2,xsize2,mainy,kVerticalFrame);
168 f2->AddFrame(f20,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
169 TGHorizontalFrame* f21 =
new TGHorizontalFrame(f2,xsize2,80,kHorizontalFrame);
170 f2->AddFrame(f21,
new TGLayoutHints(kLHintsBottom ,5,5,5,5));
178 mfile = TMapFile::Create(
"/tmp/harpo.map");
184 Warning(
"Constructor",
"Could not open data file");
197 mfilePmm2 = TMapFile::Create(
"/tmp/harpoPmm2.map");
203 Warning(
"Constructor",
"Could not open Pmm2 file");
215 SetWindowName(
"HARPO Monitor");
216 MoveResize(0,0,mainx,mainy);
239 gApplication->Terminate(0);
249 UInt_t xsize2 = f20->GetWidth();
250 UInt_t mainy = f20->GetHeight();
254 f20->AddFrame(
fEventLabel,
new TGLayoutHints(kLHintsExpandX,5,5,5,5));
258 f20->AddFrame(
fEventPmm2Label,
new TGLayoutHints(kLHintsExpandX,5,5,5,5));
260 TGTab* fTab =
new TGTab(f20, xsize2, mainy);
262 TGCompositeFrame *tf = fTab->AddTab(
"Current Event");
263 ecTabEvent =
new TRootEmbeddedCanvas(
"ecTabEvent",tf,xsize2,mainy);
264 tf->AddFrame(
ecTabEvent,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
266 tf = fTab->AddTab(
"Cumulated data");
267 ecTabCumul =
new TRootEmbeddedCanvas(
"ecTabCumul",tf,xsize2,mainy);
268 tf->AddFrame(
ecTabCumul,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
270 tf = fTab->AddTab(
"Trigger data");
271 ecTabTrigger =
new TRootEmbeddedCanvas(
"ecTabTrigger",tf,xsize2,mainy);
272 tf->AddFrame(
ecTabTrigger,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
274 tf = fTab->AddTab(
"PMm2 data");
275 ecTabPmm2 =
new TRootEmbeddedCanvas(
"ecTabPmm2",tf,xsize2,mainy);
276 tf->AddFrame(
ecTabPmm2,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
278 tf = fTab->AddTab(
"Traversing tracks");
279 ecTabTT =
new TRootEmbeddedCanvas(
"ecTabTT",tf,xsize2,mainy);
280 tf->AddFrame(
ecTabTT,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
283 f20->AddFrame(fTab,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5));
290 UInt_t xsize2 = f21->GetWidth();
291 UInt_t ysize = f21->GetHeight();
292 TGVerticalFrame* f211 =
new TGVerticalFrame(f21,xsize2/4,ysize,kVerticalFrame);
293 TGVerticalFrame* f212 =
new TGVerticalFrame(f21,xsize2/4,ysize,kVerticalFrame);
294 TGVerticalFrame* f213 =
new TGVerticalFrame(f21,xsize2/4,ysize,kVerticalFrame);
295 TGVerticalFrame* f214 =
new TGVerticalFrame(f21,xsize2/4,ysize,kVerticalFrame);
296 TGLayoutHints* fLayout3 =
new TGLayoutHints(kLHintsBottom ,5,5,5,5);
297 f21->AddFrame(f211,fLayout3);
298 f21->AddFrame(f212,fLayout3);
299 f21->AddFrame(f213,
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY,5,5,5,5));
300 f21->AddFrame(f214,fLayout3);
307 UInt_t xsize1 = f1->GetWidth();
309 TGLayoutHints* fLayout1 =
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5);
311 TGLayoutHints* fLayout2 =
new TGLayoutHints(kLHintsExpandX | kLHintsTop,5,5,5,5);
315 TGHorizontalFrame* autorefreshFrame =
new TGHorizontalFrame(f1,xsize1,ysize,kHorizontalFrame);
316 TGLabel* fDelayLabel =
new TGLabel(f1,
"Delay [s]");
324 autorefreshFrame->AddFrame(fDelayLabel,fLayout2);
345 ecSideSummary =
new TRootEmbeddedCanvas(
"ecSideSummary",f1,xsize1,300);
351 f1->AddFrame(autorefreshFrame,fLayout2);
368 cout <<
"Get List of files in " << dirname << endl;
370 const char* pwd = gSystem->ExpandPathName(
"$PWD");
371 TSystemDirectory* sysdir =
new TSystemDirectory(
"data_dir",dirname);
372 TList* listoffiles = sysdir->GetListOfFiles();
377 cout <<
"Nfiles = " << listoffiles->GetEntries() << endl;
378 for(Int_t Nfile = 0; Nfile<listoffiles->GetEntries(); Nfile++){
382 const char* filename = listoffiles->At(Nfile)->GetName();
383 if(sscanf(filename,
"reduced-%d",&runnumber)){
384 box->AddEntry(filename, Nfile);
389 TSystemDirectory* startdir =
new TSystemDirectory(
"startdir",pwd);
390 startdir->GetListOfFiles();
401 printf(
"Starting Thread 0\n");
420 mfile = TMapFile::Create(
"/tmp/harpo.map",
"READ",50000000);
422 Warning(
"DisplayEvent",
"Could not open data file");
429 if(!
mfile->Get(
"hX")){
433 TH1F* hTmin_X = 0; hTmin_X = (TH1F*)
mfile->Get(
"hTmin_X",hTmin_X);
434 TH1F* hTmin_Y = 0; hTmin_Y = (TH1F*)
mfile->Get(
"hTmin_Y",hTmin_Y);
435 TH1F* hTmax_X = 0; hTmax_X = (TH1F*)
mfile->Get(
"hTmax_X",hTmax_X);
436 TH1F* hTmax_Y = 0; hTmax_Y = (TH1F*)
mfile->Get(
"hTmax_Y",hTmax_Y);
438 TH1F* hTdrift_TT_X = 0; hTdrift_TT_X = (TH1F*)
mfile->Get(
"hTdrift_TT_X",hTdrift_TT_X);
439 TH1F* hTdrift_TT_Y = 0; hTdrift_TT_Y = (TH1F*)
mfile->Get(
"hTdrift_TT_Y",hTdrift_TT_Y);
440 TH1F* hQvsT_TT_X = 0; hQvsT_TT_X = (TH1F*)
mfile->Get(
"hQvsT_TT_X",hQvsT_TT_X);
441 TH1F* hQvsT_TT_Y = 0; hQvsT_TT_Y = (TH1F*)
mfile->Get(
"hQvsT_TT_Y",hQvsT_TT_Y);
442 TH2F* hQvsT_TT2D_X = 0; hQvsT_TT2D_X = (TH2F*)
mfile->Get(
"hQvsT_TT2D_X",hQvsT_TT2D_X);
443 TH2F* hQvsT_TT2D_Y = 0; hQvsT_TT2D_Y = (TH2F*)
mfile->Get(
"hQvsT_TT2D_Y",hQvsT_TT2D_Y);
444 TGraphErrors* gQtotTT_X = 0; gQtotTT_X = (TGraphErrors*)
mfile->Get(
"gQtotTT_X",gQtotTT_X);
445 TGraphErrors* gQtotTT_Y = 0; gQtotTT_Y = (TGraphErrors*)
mfile->Get(
"gQtotTT_Y",gQtotTT_Y);
448 TH1F* hT_X = 0; hT_X = (TH1F*)
mfile->Get(
"hT_X",hT_X);
449 TH1F* hT_Y = 0; hT_Y = (TH1F*)
mfile->Get(
"hT_Y",hT_Y);
450 TH1F* hCh_X = 0; hCh_X = (TH1F*)
mfile->Get(
"hCh_X",hCh_X);
451 TH1F* hCh_Y = 0; hCh_Y = (TH1F*)
mfile->Get(
"hCh_Y",hCh_Y);
452 TH1F* hQ_X = 0; hQ_X = (TH1F*)
mfile->Get(
"hQ_X",hQ_X);
453 TH1F* hQ_Y = 0; hQ_Y = (TH1F*)
mfile->Get(
"hQ_Y",hQ_Y);
454 TH1F* hQev_X = 0; hQev_X = (TH1F*)
mfile->Get(
"hQev_X",hQev_X);
455 TH1F* hQev_Y = 0; hQev_Y = (TH1F*)
mfile->Get(
"hQev_Y",hQev_Y);
456 TH1F* hQtotT_X = 0; hQtotT_X = (TH1F*)
mfile->Get(
"hQtotT_X",hQtotT_X);
457 TH1F* hQtotT_Y = 0; hQtotT_Y = (TH1F*)
mfile->Get(
"hQtotT_Y",hQtotT_Y);
458 TH1F* hQtot_X = 0; hQtot_X = (TH1F*)
mfile->Get(
"hQtot_X",hQtot_X);
459 TH1F* hQtot_Y = 0; hQtot_Y = (TH1F*)
mfile->Get(
"hQtot_Y",hQtot_Y);
460 TH1F* hTZs_X = 0; hTZs_X = (TH1F*)
mfile->Get(
"hTZs_X",hTZs_X);
461 TH1F* hTZs_Y = 0; hTZs_Y = (TH1F*)
mfile->Get(
"hTZs_Y",hTZs_Y);
462 TH1F* hChZs_X = 0; hChZs_X = (TH1F*)
mfile->Get(
"hChZs_X",hChZs_X);
463 TH1F* hChZs_Y = 0; hChZs_Y = (TH1F*)
mfile->Get(
"hChZs_Y",hChZs_Y);
464 TH1F* hQZs_X = 0; hQZs_X = (TH1F*)
mfile->Get(
"hQZs_X",hQZs_X);
465 TH1F* hQZs_Y = 0; hQZs_Y = (TH1F*)
mfile->Get(
"hQZs_Y",hQZs_Y);
466 TH1F* hQevZs_X = 0; hQevZs_X = (TH1F*)
mfile->Get(
"hQevZs_X",hQevZs_X);
467 TH1F* hQevZs_Y = 0; hQevZs_Y = (TH1F*)
mfile->Get(
"hQevZs_Y",hQevZs_Y);
468 TH1F* hQtotTZs_X = 0; hQtotTZs_X = (TH1F*)
mfile->Get(
"hQtotTZs_X",hQtotTZs_X);
469 TH1F* hQtotTZs_Y = 0; hQtotTZs_Y = (TH1F*)
mfile->Get(
"hQtotTZs_Y",hQtotTZs_Y);
470 TH1F* hQtotZs_X = 0; hQtotZs_X = (TH1F*)
mfile->Get(
"hQtotZs_X",hQtotZs_X);
471 TH1F* hQtotZs_Y = 0; hQtotZs_Y = (TH1F*)
mfile->Get(
"hQtotZs_Y",hQtotZs_Y);
472 TH1F* hInfo = 0; hInfo = (TH1F*)
mfile->Get(
"hInfo",hInfo);
473 TH1F* hPmm2 = 0; hPmm2 = (TH1F*)
mfile->Get(
"hPmm2",hPmm2);
474 TH1F* hTev_X = 0; hTev_X = (TH1F*)
mfile->Get(
"hTev_X",hTev_X);
475 TH1F* hTev_Y = 0; hTev_Y = (TH1F*)
mfile->Get(
"hTev_Y",hTev_Y);
476 TH1F* hTevZs_X = 0; hTevZs_X = (TH1F*)
mfile->Get(
"hTevZs_X",hTevZs_X);
477 TH1F* hTevZs_Y = 0; hTevZs_Y = (TH1F*)
mfile->Get(
"hTevZs_Y",hTevZs_Y);
478 TH1F* hQtotTev_X = 0; hQtotTev_X = (TH1F*)
mfile->Get(
"hQtotTev_X",hQtotTev_X);
479 TH1F* hQtotTev_Y = 0; hQtotTev_Y = (TH1F*)
mfile->Get(
"hQtotTev_Y",hQtotTev_Y);
480 TH1F* hQtotTevZs_X = 0; hQtotTevZs_X = (TH1F*)
mfile->Get(
"hQtotTevZs_X",hQtotTevZs_X);
481 TH1F* hQtotTevZs_Y = 0; hQtotTevZs_Y = (TH1F*)
mfile->Get(
"hQtotTevZs_Y",hQtotTevZs_Y);
482 TH2F* hX = 0; hX = (TH2F*)
mfile->Get(
"hX",hX);
483 TH2F* hXZs = 0; hXZs = (TH2F*)
mfile->Get(
"hXZs",hXZs);
484 TH2F* hY = 0; hY = (TH2F*)
mfile->Get(
"hY",hY);
485 TH2F* hYZs = 0; hYZs = (TH2F*)
mfile->Get(
"hYZs",hYZs);
486 TH2F* hCumul_X = 0; hCumul_X = (TH2F*)
mfile->Get(
"hCumul_X",hCumul_X);
487 TH2F* hCumul_Y = 0; hCumul_Y = (TH2F*)
mfile->Get(
"hCumul_Y",hCumul_Y);
493 TH1F* hPmm2Size = 0; hPmm2Size = (TH1F*)
mfile->Get(
"hPmm2Size",hPmm2Size);
494 TH1F* hPmm2Missed = 0; hPmm2Missed = (TH1F*)
mfile->Get(
"hPmm2Missed",hPmm2Missed);
495 TH1F* hPmm2Triggered = 0; hPmm2Triggered = (TH1F*)
mfile->Get(
"hPmm2Triggered",hPmm2Triggered);
496 TH2F* hPmm2Spectrum2D = 0; hPmm2Spectrum2D = (TH2F*)
mfile->Get(
"hPmm2Spectrum2D",hPmm2Spectrum2D);
497 TH2F* hPmm2Coincidence = 0; hPmm2Coincidence = (TH2F*)
mfile->Get(
"hPmm2Coincidence",hPmm2Coincidence);
504 TGraph* gXTmin = 0; gXTmin = (TGraph*)
mfile->Get(
"gXTmin",gXTmin);
505 TGraph* gYTmin = 0; gYTmin = (TGraph*)
mfile->Get(
"gYTmin",gYTmin);
506 gXTmin->SetMarkerStyle(7);
507 if(gXTmin->GetN()>500)
508 gXTmin->SetMarkerStyle(6);
509 if(gXTmin->GetN()>2500)
510 gXTmin->SetMarkerStyle(1);
511 gYTmin->SetMarkerStyle(7);
512 if(gYTmin->GetN()>500)
513 gYTmin->SetMarkerStyle(6);
514 if(gYTmin->GetN()>2500)
515 gYTmin->SetMarkerStyle(1);
517 const Int_t kNtrackTypes = 5;
518 const char* trackTypeNames[kNtrackTypes] = {
"Empty",
"Traversing",
"Created",
"Saturated",
"Other"};
519 TH1F* hTrigger[kNtrackTypes];
520 TGraphErrors* gRate[kNtrackTypes];
521 for(Int_t i = 0; i<kNtrackTypes; i++){
522 hTrigger[i] = 0; hTrigger[i] = (TH1F*)
mfile->Get(Form(
"hTrigger%s",trackTypeNames[i]),hTrigger[i]);
524 gRate[i] = 0; gRate[i] = (TGraphErrors*)
mfile->Get(Form(
"gRate%s_1",trackTypeNames[i]),gRate[i]);
526 TH1F* hTriggerCorrection = 0; hTriggerCorrection = (TH1F*)
mfile->Get(
"hTriggerCorrection",hTriggerCorrection);
528 const Int_t kNtriggerTypes = 16;
529 TGraphErrors* gRateTotal[kNtriggerTypes+1];
530 TH1F* hDeadTime[kNtriggerTypes+1];
531 Int_t triggerColors[kNtriggerTypes+1] = {kBlack,kGray,kWhite,kRed,kBlue,kGreen,kMagenta,kWhite,kRed,kBlue,kGreen,kMagenta,kCyan,kOrange,kWhite,kBlack,kWhite};
532 const char* triggerNames[kNtriggerTypes+1] = {
"Unknown",
550 for(Int_t i = 0; i<kNtriggerTypes+1; i++){
551 gRateTotal[i] = 0; gRateTotal[i] = (TGraphErrors*)
mfile->Get(Form(
"gRateTotal_%d",i),gRateTotal[i]);
552 gRateTotal[i]->SetLineColor(triggerColors[i]);
553 gRateTotal[i]->SetMarkerColor(triggerColors[i]);
555 gRateTotal[i]->SetMarkerStyle(7);
556 hDeadTime[i] = 0; hDeadTime[i] = (TH1F*)
mfile->Get(Form(
"hDeadTime_%d",i),hDeadTime[i]);
557 hDeadTime[i]->SetLineColor(triggerColors[i]);
562 Int_t runNo = hInfo->GetBinContent(1);
564 Int_t nEvent = hInfo->GetBinContent(2);
566 Int_t skipEvents = hInfo->GetBinContent(6);
567 Int_t firstEvent = hInfo->GetBinContent(7);
568 Double_t timeStamp = hInfo->GetBinContent(3)/1e8;
569 Int_t triggerType = hInfo->GetBinContent(8);
571 Info(
"DisplayEvent",
"Run %d, Event %d",runNo,nEvent);
587 TLatex* latex =
new TLatex();
588 latex->SetTextFont(132);
589 latex->SetTextAlign(12);
590 latex->SetTextSize(0.1);
593 hX->GetZaxis()->SetRangeUser(0,4096);
594 hY->GetZaxis()->SetRangeUser(0,4096);
595 hXZs->GetZaxis()->SetRangeUser(0,4096);
596 hYZs->GetZaxis()->SetRangeUser(0,4096);
607 latex->DrawLatex(30,260,Form(
"evt %d",nEvent));
608 latex->DrawLatex(30,240,triggerNames[triggerType+1]);
610 TLine* line =
new TLine();
611 line->SetLineWidth(2);
612 line->SetLineStyle(2);
613 line->DrawLine(0,194,511,194);
614 line->DrawLine(0,94,511,94);
615 line->SetLineWidth(1);
616 line->SetLineStyle(3);
617 line->DrawLine(0,259,511,259);
618 line->DrawLine(0,226,511,226);
619 line->DrawLine(0,160.5,511,160.5);
620 line->DrawLine(0,127.5,511,127.5);
621 line->DrawLine(0,61.5,511,61.5);
622 line->DrawLine(0,28.5,511,28.5);
625 latex->DrawLatex(30,260,Form(
"evt %d",nEvent));
626 latex->DrawLatex(30,240,triggerNames[triggerType+1]);
627 line->SetLineWidth(2);
628 line->SetLineStyle(2);
629 line->DrawLine(0,194,511,194);
630 line->DrawLine(0,94,511,94);
655 for(Int_t i = 0; i<8; i++){
656 boxX[i] =
new TBox();
657 boxY[i] =
new TBox();
660 for(
int ch = 0; ch<16; ch++){
661 Double_t q = hPmm2->GetBinContent(ch+1);
665 if(q==0) color = kBlack;
667 color = 51 + q*49./800.;
671 boxX[2]->SetFillColor(color);
674 boxX[3]->SetFillColor(color);
677 boxX[1]->SetFillColor(color);
678 boxY[1]->SetFillColor(color);
681 boxX[0]->SetFillColor(color);
682 boxY[0]->SetFillColor(color);
685 boxX[5]->SetFillColor(color);
686 boxY[5]->SetFillColor(color);
689 boxX[4]->SetFillColor(color);
690 boxY[4]->SetFillColor(color);
693 boxY[6]->SetFillColor(color);
696 boxY[7]->SetFillColor(color);
699 boxX[6]->SetFillColor(color);
702 boxX[7]->SetFillColor(color);
705 boxY[2]->SetFillColor(color);
708 boxY[3]->SetFillColor(color);
714 boxX[0]->DrawBox(1,50,11,150);
715 boxX[1]->DrawBox(1,154,11,254);
716 boxX[2]->DrawBox(60,290,250,300);
717 boxX[3]->DrawBox(260,290,450,300);
718 boxX[4]->DrawBox(500,50,510,150);
719 boxX[5]->DrawBox(500,154,510,254);
720 boxX[6]->DrawBox(60,4,250,14);
721 boxX[7]->DrawBox(260,4,450,14);
723 boxY[0]->DrawBox(1,50,11,150);
724 boxY[1]->DrawBox(1,154,11,254);
725 boxY[2]->DrawBox(60,290,250,300);
726 boxY[3]->DrawBox(260,290,450,300);
727 boxY[4]->DrawBox(500,50,510,150);
728 boxY[5]->DrawBox(500,154,510,254);
729 boxY[6]->DrawBox(60,4,250,14);
730 boxY[7]->DrawBox(260,4,450,14);
761 gXTmin->Draw(
"Psame");
766 gYTmin->Draw(
"Psame");
770 hQ_X->GetXaxis()->SetRangeUser(10,4096);
773 hQ_Y->DrawCopy(
"same");
781 hTmin_Y->DrawCopy(
"same");
795 hCh_Y->DrawCopy(
"same");
796 hChZs_X->DrawCopy(
"same");
797 hChZs_Y->DrawCopy(
"same");
801 hQtotZs_X->SetLineStyle(1);
802 hQtotZs_Y->SetLineStyle(1);
824 THStack* hTriggerStack =
new THStack(
"hTriggerStack",
";");
825 THStack* hTriggerStack2 =
new THStack(
"hTriggerStack",
";");
827 Int_t color[5] = {kGreen, kBlue, kYellow, kMagenta, kRed};
828 TLegend* lTrigger =
new TLegend(0.6,0.6,0.9,0.9);
829 for(Int_t i = 0; i<kNtrackTypes; i++){
830 hTrigger[i]->SetFillColor(color[i]);
831 hTrigger[i]->Scale(skipEvents*1./timeStamp);
832 gRate[i]->SetMarkerColor(color[i]);
833 gRate[i]->SetLineColor(color[i]);
834 gRate[i]->SetFillColor(color[i]-10);
835 for(Int_t k = 0; k<16;k++)
836 hTrigger[i]->GetXaxis()->SetBinLabel(k+1,triggerNames[k]);
838 hTrigger[i]->GetXaxis()->SetTitle(
"");
839 hTrigger[i]->GetYaxis()->SetTitle(
"Measured rate [Hz]");
840 hTrigger[i]->GetXaxis()->LabelsOption(
"v");
841 hTriggerStack->Add(hTrigger[i]);
842 lTrigger->AddEntry(hTrigger[i],trackTypeNames[i],
"F");
845 if(hTriggerStack->GetMaximum()>0)
846 hTrigger[0]->SetMaximum(1.1*hTriggerStack->GetMaximum());
849 hTriggerStack->Draw(
"same");
851 for(Int_t k = 0; k<16;k++)
852 hTriggerCorrection->GetXaxis()->SetBinLabel(k+1,triggerNames[k]);
853 Double_t totalRate[kNtriggerTypes+1];
854 for(Int_t k = 0; k<kNtriggerTypes+1;k++)
856 for(Int_t i = 0; i<kNtrackTypes; i++){
857 hTrigger[i]->GetYaxis()->SetTitle(
"Actual rate [Hz]");
858 hTrigger[i]->Multiply(hTriggerCorrection);
859 hTriggerStack2->Add(hTrigger[i]);
860 for(Int_t k = 0; k<kNtriggerTypes+1;k++)
861 totalRate[k] += hTrigger[i]->GetBinContent(k+1);
863 latex->DrawLatex(0,50,Form(
"Created: %.0fHz",hTrigger[2]->GetBinContent(9)));
864 latex->DrawLatex(0,42,Form(
"Empty: %.0fHz",hTrigger[0]->GetBinContent(9)));
865 latex->DrawLatex(0,34,Form(
"TTz: %.0fHz",hTrigger[1]->GetBinContent(9)));
867 if(hTriggerStack2->GetMaximum()>0)
868 hTrigger[0]->SetMaximum(1.1*hTriggerStack2->GetMaximum());
871 hTriggerStack2->Draw(
"same");
874 Double_t maxDeadTime = 0;
875 for(Int_t i = 0; i<kNtriggerTypes; i++){
876 Double_t tmp = hDeadTime[i]->GetMaximum();
877 if(tmp>maxDeadTime) maxDeadTime = tmp;
879 hDeadTime[0]->SetMaximum(maxDeadTime);
880 hDeadTime[0]->GetXaxis()->SetRangeUser(0,100);
883 TF1* fExp =
new TF1(
"fExp",
"expo",0,500);
886 TLegend* lDT =
new TLegend(0.6,0.6,0.98,0.91);
887 for(Int_t i = 0; i<kNtriggerTypes; i++){
888 hDeadTime[i]->Draw(
"same");
889 if(skipEvents>1)
continue;
890 if(hDeadTime[i]->GetEntries()<50)
continue;
891 hDeadTime[i]->Fit(fExp,
"q0",
"",0,50);
892 fExp->SetLineColor(triggerColors[i]);
893 fExp->DrawCopy(
"same");
894 lDT->AddEntry(hDeadTime[i],Form(
"%s: %.0fHz/%.0fHz",triggerNames[i],-1000.*fExp->GetParameter(1),totalRate[i]));
905 hPmm2Size->SetMinimum(0.1);
907 hPmm2Size->Scale(skipEvents*1./timeStamp);
908 hPmm2Size->SetTitle(
"PM signal rate;PM channel; rate [Hz]");
909 TLegend* lSizePmm2 =
new TLegend(0.6,0.6,0.9,0.9);
910 if(hPmm2Size->GetEntries()){
912 lSizePmm2->AddEntry(hPmm2Size,
"Triggered signals",
"L");
914 if(hPmm2Size->GetEntries())
918 if(hPmm2Spectrum2D->GetEntries())
928 cTabTT->SetName(
"cTabTT");
932 const Int_t TRIG_TT = 0;
933 for(Int_t i = 0; i<kNtrackTypes; i++)
934 nTT += hTrigger[i]->GetBinContent(2+TRIG_TT);
937 if(hInfo->GetBinContent(9)){
942 hQvsT_TT_X->Scale(1./hInfo->GetBinContent(9));
943 hQvsT_TT_Y->Scale(1./hInfo->GetBinContent(9));
946 hQvsT_TT_X->SetLineColor(kBlack);
947 hQvsT_TT_X->SetLineWidth(3);
948 hQvsT_TT_X->DrawCopy(
"same");
950 hQvsT_TT_Y->SetLineColor(kBlack);
951 hQvsT_TT_Y->SetLineWidth(3);
952 hQvsT_TT_Y->DrawCopy(
"same");
958 for(Int_t i = 0; i<gQtotTT_X->GetN();i++){
960 gQtotTT_X->GetPoint(i,x,y);
962 gQtotTT_Y->GetPoint(i,x,y);
965 Double_t tstmp = timeStamp;
966 if(tstmp<=0) tstmp = 1;
967 TH1F* hTimeDummy =
new TH1F(
"hTimeDummy",
"Trigger Rate;time [s];rate [Hz]",1000,0,tstmp);
968 hTimeDummy->GetXaxis()->SetTimeDisplay(0);
969 hTimeDummy->GetXaxis()->SetTimeFormat(
"%H:%M:%S");
970 hTimeDummy->GetXaxis()->SetTimeOffset(0);
971 hTimeDummy->GetXaxis()->SetNdivisions(1210,kTRUE);
972 hTimeDummy->SetMaximum(1.1*maxQ);
973 hTimeDummy->SetMinimum(0);
974 hTimeDummy->SetTitle(
"Gain vs Time;time [s]; total charge/event [ADC]");
977 gQtotTT_X->SetMarkerColor(kBlue);
978 gQtotTT_X->SetLineColor(kBlue);
979 gQtotTT_Y->SetMarkerColor(kRed);
980 gQtotTT_Y->SetLineColor(kRed);
981 if(gQtotTT_X->GetN())
982 gQtotTT_X->Draw(
"Lsame");
983 if(gQtotTT_Y->GetN())
984 gQtotTT_Y->Draw(
"Lsame");
997 hCh_Y->DrawCopy(
"same");
998 hChZs_X->DrawCopy(
"same");
999 hChZs_Y->DrawCopy(
"same");
1009 hTriggerStack->Draw();
1015 Double_t timeMax = timeStamp;
1016 Double_t maxRate = 2e-5;
1017 for(Int_t k = 0; k<kNtriggerTypes; k++){
1018 for(Int_t i = 0; i<gRateTotal[k]->GetN();i++){
1020 gRateTotal[k]->GetPoint(i,x,y);
1021 if(y>maxRate) maxRate = y;
1024 TGraphErrors* gRatePmm2Tot = 0;
1025 mfilePmm2 = TMapFile::Create(
"/tmp/harpoPmm2.map",
"READ",10000000);
1027 TH1F* fHistTriggered = 0; fHistTriggered = (TH1F*)
mfilePmm2->Get(
"fHistTriggered",fHistTriggered);
1028 TH1F* fHistMissed = 0; fHistMissed = (TH1F*)
mfilePmm2->Get(
"fHistMissed",fHistMissed);
1029 TH2F* fHistCoincidence = 0; fHistCoincidence = (TH2F*)
mfilePmm2->Get(
"fHistCoincidence",fHistCoincidence);
1030 TH2F* fHistCoincidenceNorm = 0; fHistCoincidenceNorm = (TH2F*)
mfilePmm2->Get(
"fHistCoincidenceNorm",fHistCoincidenceNorm);
1031 TH1F* fHistSize = 0; fHistSize = (TH1F*)
mfilePmm2->Get(
"fHistSize",fHistSize);
1032 TH1F* fHistSizeTrig = 0; fHistSizeTrig = (TH1F*)
mfilePmm2->Get(
"fHistSizeTrig",fHistSizeTrig);
1033 TH1F* fHistInfo = 0; fHistInfo = (TH1F*)
mfilePmm2->Get(
"fHistInfo",fHistInfo);
1034 TH1F* fHistRatePmm2 = 0; fHistRatePmm2 = (TH1F*)
mfilePmm2->Get(
"fHistRatePmm2",fHistRatePmm2);
1035 TH1F* fHistRatePmm2Tot = 0; fHistRatePmm2Tot = (TH1F*)
mfilePmm2->Get(
"fHistRatePmm2Tot",fHistRatePmm2Tot);
1036 TGraphErrors* gRatePmm2[16];
1037 for(Int_t i = 0; i<16; i++){
1039 gRatePmm2[i] = (TGraphErrors*)
mfilePmm2->Get(Form(
"gRatePmm2_%d",i),gRatePmm2[i]);
1041 gRatePmm2Tot = (TGraphErrors*)
mfilePmm2->Get(
"gRatePmm2Tot",gRatePmm2Tot);
1081 Int_t runNoPmm2 = fHistInfo->GetBinContent(1);
1082 Int_t nEventPmm2 = fHistInfo->GetBinContent(2);
1083 Double_t timeStampPmm2 = fHistInfo->GetBinContent(3)/1e8;
1084 fEventPmm2Label->SetText(Form(
"PMM2: Run %d, Event %d, %gs",runNoPmm2,nEventPmm2,timeStampPmm2));
1087 fHistCoincidenceNorm->Scale(1./fHistCoincidenceNorm->GetMaximum());
1088 for(
int ch1 = 0; ch1<16; ch1++){
1089 for(
int ch2 = 0; ch2<16; ch2++){
1090 if(fHistCoincidenceNorm->GetBinContent(ch1+1,ch2+1) == 0)
1091 fHistCoincidenceNorm->SetBinContent(ch1+1,ch2+1,1);
1094 fHistCoincidence->Divide(fHistCoincidenceNorm);
1103 TH1F* fHistEfficiency = (TH1F*)fHistTriggered->Clone();
1104 fHistEfficiency->SetTitle(
"PM efficiency;Channel;Efficiency [%]");
1105 fHistEfficiency->Add(fHistMissed,-1);
1106 fHistEfficiency->Divide(fHistTriggered);
1107 fHistEfficiency->Scale(100);
1108 fHistEfficiency->SetMinimum(0);
1109 fHistEfficiency->SetMaximum(100);
1111 Double_t scaletmp = 80./fHistRatePmm2Tot->GetMaximum();
1112 fHistRatePmm2Tot->Scale(scaletmp);
1113 fHistRatePmm2Tot->SetLineColor(kRed);
1114 fHistRatePmm2->SetLineColor(kRed+2);
1115 fHistRatePmm2->SetLineStyle(2);
1116 fHistRatePmm2->Scale(timeStampPmm2);
1117 fHistRatePmm2->Scale(scaletmp);
1119 Double_t maxAxis = 1;
1120 if(scaletmp*timeStampPmm2>0)
1121 maxAxis = 100./scaletmp/timeStampPmm2;
1122 TGaxis *axis =
new TGaxis(16,0,
1124 0,maxAxis,510,
"+L");
1125 axis->SetLineColor(kRed);
1126 axis->SetTextColor(kRed);
1127 axis->SetLabelColor(kRed);
1128 axis->SetTitle(
"Rate [Hz]");
1129 axis->SetTitleSize(0.07);
1130 axis->SetTitleOffset(0.7);
1131 axis->SetTitleFont(132);
1132 axis->SetLabelFont(132);
1133 axis->SetLabelSize(0.06);
1137 cTabPmm2->GetPad(2)->SetRightMargin(0.12);
1138 latex->SetTextSize(0.07);
1139 Double_t meanEfficiency = 0, nsig = 0;
1140 for(Int_t i = 1; i<=12; i++){
1141 if(fHistEfficiency->GetBinContent(i)>0){
1142 meanEfficiency += fHistEfficiency->GetBinContent(i);
1147 meanEfficiency /= nsig;
1148 latex->DrawLatex(3,50,Form(
"<Efficiency> = %.1f %%",meanEfficiency));
1160 fHistSize->Scale(1./timeStampPmm2);
1161 fHistSize->SetLineColor(kRed);
1162 lSizePmm2->AddEntry(fHistSize,
"All signals",
"L");
1165 fHistSize->GetYaxis()->SetRangeUser(1e-2,1e4);
1168 if(timeStampPmm2>timeMax) timeMax = timeStampPmm2;
1169 for(Int_t i = 0; i<gRatePmm2Tot->GetN();i++){
1171 gRatePmm2Tot->GetPoint(i,x,y);
1172 if(y>maxRate) maxRate = y;
1177 Warning(
"Constructor",
"Could not open Pmm2 file");
1186 if(timeMax<=0) timeMax = 1;
1187 TH1F* hTimeMaxDummy =
new TH1F(
"hTimeMaxDummy",
"Trigger Rate;time [s];rate [Hz]",1000,-timeMax/3,timeMax);
1188 hTimeMaxDummy->GetXaxis()->SetTimeDisplay(0);
1189 hTimeMaxDummy->GetXaxis()->SetTimeFormat(
"%H:%M:%S");
1190 hTimeMaxDummy->GetXaxis()->SetTimeOffset(0);
1191 hTimeMaxDummy->GetXaxis()->SetNdivisions(1210,kTRUE);
1193 hTimeMaxDummy->SetMaximum(2*maxRate);
1194 hTimeMaxDummy->SetMinimum(5e-2);
1198 TLegend* lTrigger2 =
new TLegend(0.12,0.12,0.33,0.91);
1200 for(Int_t k = 0; k<kNtriggerTypes+1; k++){
1201 if(gRateTotal[k]->GetN()){
1202 gRateTotal[k]->Draw(
"LPsame");
1207 gRatePmm2Tot->SetMarkerStyle(29);
1208 gRatePmm2Tot->Draw(
"LPsame");
1209 lTrigger2->AddEntry(gRatePmm2Tot,
"PMs",
"LP");
1212 Int_t reindex[kNtriggerTypes+1] = {9,4,1,10,11,12,8,13,5,6,3,0,2,7,14,15,16};
1213 for(Int_t i = 0; i<kNtriggerTypes+1; i++){
1214 Int_t k = reindex[i];
1215 if(gRateTotal[k]->GetN()){
1216 lTrigger2->AddEntry(gRateTotal[k],triggerNames[k],
"LP");
1219 lTrigger2->SetY1NDC(0.91-nGraphs*0.06);
1235 for(Int_t k = 0; k<kNtriggerTypes+1; k++){
1236 if(gRateTotal[k]->GetN()){
1237 gRateTotal[k]->Draw(
"LPsame");
1243 gRatePmm2Tot->Draw(
"LPsame");
1260 stringstream titlestr;
1261 titlestr <<
"Feminos: Run " << runNo;
1262 titlestr <<
", Event " << nEvent;
1263 titlestr <<
" (" << fixed << setprecision(2) << timeStamp <<
"s)";
1265 titlestr <<
", from " << firstEvent;
1267 titlestr <<
", downscaled " << skipEvents;
1296 hQtotTZs_X->Delete();
1297 hQtotTZs_Y->Delete();
1298 hQtotZs_X->Delete();
1299 hQtotZs_Y->Delete();
1306 hQtotTev_X->Delete();
1307 hQtotTev_Y->Delete();
1308 hQtotTevZs_X->Delete();
1309 hQtotTevZs_Y->Delete();
1358 gSystem->Sleep(500);
1360 char outputfile[512];
1361 char outputfileroot[512];
1362 char outputfileopen[512];
1363 char outputfileclose[512];
1364 const char* dir = gSystem->ExpandPathName(
"$HARPO_ANA_DIR/monitor");
1366 if(gSystem->AccessPathName(dir)){
1367 Warning(
"Save",
"Directory %s does not exist. Saving in local directory",dir);
1385 cTabTT->SaveAs(outputfile);
1387 cTabTT->SaveAs(outputfileclose);
1389 cout <<
"File Saved" << endl;
1409 gSystem->Sleep(1000);
1441 switch(GET_MSG(msg)){
1443 switch(GET_SUBMSG(msg)){
1457 default: cout <<
"Unknown button" << endl;
break;
1537 gStyle->SetTitleH(0.08);
1538 gStyle->SetTitleW(0.78);
1539 gStyle->SetTitleX(0.16);
1540 gStyle->SetTitleY(0.99);
1541 gStyle->SetTitleFont(132,
" ");
1542 gStyle->SetTitleSize(0.09,
" ");
1543 hist->SetTitleFont(132);
1544 hist->SetTitleSize(0.09);
1545 hist->GetXaxis()->SetTitleSize(0.07);
1546 hist->GetYaxis()->SetTitleSize(0.07);
1547 hist->GetXaxis()->SetTitleOffset(0.7);
1548 hist->GetYaxis()->SetTitleOffset(0.7);
1549 hist->GetXaxis()->SetTitleFont(132);
1550 hist->GetYaxis()->SetTitleFont(132);
1551 hist->GetXaxis()->SetLabelFont(132);
1552 hist->GetYaxis()->SetLabelFont(132);
1553 hist->GetXaxis()->SetLabelSize(0.06);
1554 hist->GetYaxis()->SetLabelSize(0.06);
1557 c1->SetLeftMargin(0.12);
1558 c1->SetRightMargin(0.02);
1559 c1->SetBottomMargin(0.12);
1560 c1->SetTopMargin(0.09);
1562 hist->DrawCopy(opt);
1569 gStyle->SetTitleH(0.08);
1570 gStyle->SetTitleW(0.78);
1571 gStyle->SetTitleX(0.16);
1572 gStyle->SetTitleY(0.99);
1574 gStyle->SetTitleW(0.68);
1575 gStyle->SetTitleFont(132,
" ");
1576 gStyle->SetTitleSize(0.09,
" ");
1578 hist->GetXaxis()->SetTitleSize(0.07);
1579 hist->GetYaxis()->SetTitleSize(0.07);
1580 hist->GetZaxis()->SetTitleSize(0.07);
1581 hist->GetXaxis()->SetTitleOffset(0.7);
1582 hist->GetYaxis()->SetTitleOffset(0.8);
1583 hist->GetZaxis()->SetTitleOffset(0.8);
1584 hist->GetXaxis()->SetTitleFont(132);
1585 hist->GetYaxis()->SetTitleFont(132);
1586 hist->GetZaxis()->SetTitleFont(132);
1587 hist->GetXaxis()->SetLabelFont(132);
1588 hist->GetYaxis()->SetLabelFont(132);
1589 hist->GetZaxis()->SetLabelFont(132);
1590 hist->GetXaxis()->SetLabelSize(0.06);
1591 hist->GetYaxis()->SetLabelSize(0.06);
1592 hist->GetZaxis()->SetLabelSize(0.06);
1595 c1->SetLeftMargin(0.12);
1597 c1->SetRightMargin(0.02);
1599 c1->SetRightMargin(0.12);
1600 c1->SetBottomMargin(0.12);
1601 c1->SetTopMargin(0.09);
1604 hist->DrawCopy(
"colz");
TRootEmbeddedCanvas * ecTabCumul
void DisplayEvent(HarpoEvent *event)
TGLabel * fEventPmm2Label
TGTextButton * fNextEvent
TGNumberEntry * fChooseEvent
TObjArray * padHelpArray[100]
Int_t fCurrentEventNumber
Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
TRootEmbeddedCanvas * ecSideSummary
HarpoMonitorGui * gHarpoGui
TGTextButton * fDisplayEvent
TGCheckButton * fCheckClusters
void BuildButtonsFrame(TGVerticalFrame *f)
TGTextButton * fDisplayBox
void BuildDisplayFrame(TGVerticalFrame *f)
void SetListOfRuns(TGComboBox *box, const char *dirname)
void MakeNice2dHisto(TH2 *hist, TVirtualPad *c1, Bool_t colz=kTRUE)
void BuildInfoFrame(TGHorizontalFrame *f)
TGTextButton * fPrevEvent
TGNumberEntry * fChooseDelay
void MakeNice1dHisto(TH1 *hist, TVirtualPad *c1, const char *opt="")
TGTextButton * fAutoRefreshButton
TRootEmbeddedCanvas * ecTabPmm2
TRootEmbeddedCanvas * ecTabTT
TGNumberEntry * fChooseNEvents
TRootEmbeddedCanvas * ecTabEvent
virtual void CloseWindow()
HarpoMonitorGui(const TGWindow *p, UInt_t w, UInt_t h, UInt_t opt)
TGTextButton * fSaveButton
A class store HARPO row event data and header. Provide access metods to the row event data...
TRootEmbeddedCanvas * ecTabTrigger