2022-10-05 14:28:55 -04:00
|
|
|
#include <TApplication.h>
|
|
|
|
#include <TGClient.h>
|
|
|
|
#include <TCanvas.h>
|
|
|
|
#include <TF1.h>
|
|
|
|
#include <TRandom.h>
|
|
|
|
#include <TRootEmbeddedCanvas.h>
|
|
|
|
#include <TGTableContainer.h>
|
|
|
|
#include <TGFileDialog.h>
|
|
|
|
|
|
|
|
#include "triggerSummary.h"
|
|
|
|
|
2022-10-26 13:23:21 -04:00
|
|
|
extern unsigned short nDigi;
|
|
|
|
extern Digitizer ** digi;
|
|
|
|
|
2022-10-05 14:28:55 -04:00
|
|
|
bool TriggerSummary::updateFlag = true;
|
|
|
|
TGTextEntry * TriggerSummary::txtTrigger[MaxNBoards][MaxNChannels] = {NULL};
|
2022-10-06 15:49:08 -04:00
|
|
|
TGTextEntry * TriggerSummary::txtThresholdValue[MaxNBoards][MaxNChannels] = {NULL};
|
2022-10-05 14:28:55 -04:00
|
|
|
TGTextEntry * TriggerSummary::txtThreshold[MaxNBoards][MaxNChannels] = {NULL};
|
|
|
|
TGNumberEntry * TriggerSummary::numUpdateTime = NULL;
|
2022-10-06 15:49:08 -04:00
|
|
|
unsigned short TriggerSummary::value[MaxNBoards][MaxNChannels] = {0};
|
|
|
|
|
2022-10-05 14:28:55 -04:00
|
|
|
|
2022-10-26 13:23:21 -04:00
|
|
|
TriggerSummary::TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h){
|
2022-10-05 14:28:55 -04:00
|
|
|
|
2022-10-31 15:00:04 -04:00
|
|
|
printf("----- %s \n", __func__);
|
|
|
|
|
2022-10-05 14:28:55 -04:00
|
|
|
fMain = new TGMainFrame(p,w,h);
|
|
|
|
fMain->SetWindowName("Scalar Panel");
|
|
|
|
fMain->Connect("CloseWindow()", "TriggerSummary", this, "CloseWindow()");
|
|
|
|
|
|
|
|
TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain); fMain->AddFrame(hframe);
|
|
|
|
|
|
|
|
TGLayoutHints * kaka = new TGLayoutHints(kLHintsLeft, 0,0,0,0); /// left, right, top, bottom
|
|
|
|
|
|
|
|
TGGroupFrame * gBD[nDigi];
|
|
|
|
TGLabel * lbCh[nDigi][MaxNChannels];
|
|
|
|
|
|
|
|
for( int bd = 0; bd < nDigi; bd++){
|
|
|
|
|
|
|
|
gBD[bd] = new TGGroupFrame(hframe, Form("Board-%02d", bd), kHorizontalFrame); hframe->AddFrame(gBD[bd], new TGLayoutHints( kLHintsExpandY, 5, 0, 5, 5));
|
|
|
|
|
|
|
|
TGVerticalFrame * vframe0 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe0, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
|
|
|
|
TGVerticalFrame * vframe1 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe1, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
|
|
|
|
TGVerticalFrame * vframe2 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe2, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
|
2022-10-06 15:49:08 -04:00
|
|
|
TGVerticalFrame * vframe3 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe3, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
TGLabel * lbCh0 = new TGLabel(vframe0, "ch"); vframe0->AddFrame(lbCh0, new TGLayoutHints(kLHintsCenterY, 0,5,3,2));
|
|
|
|
TGLabel * lbTrigger = new TGLabel(vframe1, "Trig.[Hz]"); vframe1->AddFrame(lbTrigger, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
|
|
|
|
TGLabel * lbThreshold = new TGLabel(vframe2, "Thres."); vframe2->AddFrame(lbThreshold, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
|
2022-10-06 15:49:08 -04:00
|
|
|
TGLabel * lbdummy = new TGLabel(vframe3, ""); vframe3->AddFrame(lbdummy, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
for( int ch = 0; ch < (digi == NULL ? MaxNChannels: digi[bd]->GetNChannel()); ch++){
|
2022-10-06 15:49:08 -04:00
|
|
|
lbCh[bd][ch] = new TGLabel(vframe0, Form("%02d", ch)); vframe0->AddFrame(lbCh[bd][ch], new TGLayoutHints(kLHintsCenterY, 0,5,4,2));
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
txtTrigger[bd][ch] = new TGTextEntry(vframe1, ""); vframe1->AddFrame(txtTrigger[bd][ch], kaka);
|
|
|
|
txtTrigger[bd][ch]->Resize(50,20);
|
|
|
|
txtTrigger[bd][ch]->SetEnabled(false);
|
|
|
|
txtTrigger[bd][ch]->SetAlignment(kTextRight);
|
|
|
|
|
2022-10-06 15:49:08 -04:00
|
|
|
txtThresholdValue[bd][ch] = new TGTextEntry(vframe2, ""); vframe2->AddFrame(txtThresholdValue[bd][ch], kaka);
|
|
|
|
txtThresholdValue[bd][ch]->Resize(50,20);
|
|
|
|
txtThresholdValue[bd][ch]->SetEnabled(false);
|
|
|
|
txtThresholdValue[bd][ch]->SetAlignment(kTextRight);
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
value[bd][ch] = 0;
|
|
|
|
if( digi != NULL ){
|
2022-10-06 15:49:08 -04:00
|
|
|
if( digi[bd]->GetDPPType() == V1730_DPP_PSD_CODE ) value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PSD::TriggerThreshold, ch);
|
|
|
|
if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
|
2022-10-05 14:28:55 -04:00
|
|
|
}
|
2022-10-06 15:49:08 -04:00
|
|
|
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
|
|
|
|
|
|
|
|
txtThreshold[bd][ch] = new TGTextEntry(vframe3, ""); vframe3->AddFrame(txtThreshold[bd][ch], kaka);
|
|
|
|
txtThreshold[bd][ch]->Resize(50,20);
|
|
|
|
txtThreshold[bd][ch]->SetAlignment(kTextRight);
|
|
|
|
txtThreshold[bd][ch]->Connect("ReturnPressed()", "TriggerSummary", this, "SetThreshold()");
|
2022-10-05 14:28:55 -04:00
|
|
|
txtThreshold[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
|
2022-10-06 15:49:08 -04:00
|
|
|
|
2022-10-05 14:28:55 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TGHorizontalFrame * hframeSetting = new TGHorizontalFrame(fMain); fMain->AddFrame(hframeSetting, new TGLayoutHints(kLHintsExpandX));
|
|
|
|
|
|
|
|
TGLabel * lbUpDateTime = new TGLabel(hframeSetting, "Update Period [msec]:");
|
|
|
|
hframeSetting->AddFrame(lbUpDateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3));
|
|
|
|
|
|
|
|
numUpdateTime = new TGNumberEntry(hframeSetting, 500, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative);
|
|
|
|
hframeSetting->AddFrame(numUpdateTime, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5,5,3,3));
|
|
|
|
numUpdateTime->Resize(50, 20);
|
|
|
|
|
|
|
|
fMain->MapSubwindows();
|
|
|
|
fMain->Resize(fMain->GetDefaultSize());
|
|
|
|
fMain->MapWindow();
|
|
|
|
|
|
|
|
updateFlag = true;
|
|
|
|
|
|
|
|
if( digi != NULL ){
|
|
|
|
printf("-------- %s thread\n", __func__);
|
|
|
|
thread = new TThread("hahaha", UpdateTriggerRate, (void *) 0);
|
|
|
|
thread->Run();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TriggerSummary::~TriggerSummary(){
|
|
|
|
|
|
|
|
printf("Close %s \n", __func__);
|
|
|
|
|
|
|
|
for(int i = 0; i < nDigi; i++){
|
|
|
|
for(int j = 0; j < MaxNChannels; j++){
|
|
|
|
delete txtTrigger[i][j];
|
2022-10-06 15:49:08 -04:00
|
|
|
delete txtThresholdValue[i][j];
|
2022-10-05 14:28:55 -04:00
|
|
|
delete txtThreshold[i][j];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
delete numUpdateTime;
|
|
|
|
|
|
|
|
updateFlag = false;
|
2022-10-25 16:56:52 -04:00
|
|
|
thread->Join();
|
|
|
|
|
2022-10-05 14:28:55 -04:00
|
|
|
///delete thread; /// Don;t delete the thread, otherwise, thread will not run after close and reopen.
|
|
|
|
|
|
|
|
fMain->Cleanup();
|
|
|
|
delete fMain;
|
|
|
|
}
|
|
|
|
|
|
|
|
void * TriggerSummary::UpdateTriggerRate(void * ptr){
|
|
|
|
|
|
|
|
while( updateFlag){
|
2022-10-06 15:49:08 -04:00
|
|
|
///printf("==================== %s\n", __func__);
|
2022-10-05 14:28:55 -04:00
|
|
|
for( int bd = 0; bd < nDigi; bd++){
|
|
|
|
for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){
|
|
|
|
txtTrigger[bd][ch]->SetText(Form("%.2f", digi[bd]->GetData()->TriggerRate[ch]));
|
2022-10-06 15:49:08 -04:00
|
|
|
value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
|
|
|
|
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
|
2022-10-05 14:28:55 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
usleep(numUpdateTime->GetNumber() * 1000);
|
|
|
|
}
|
2022-10-06 15:49:08 -04:00
|
|
|
|
|
|
|
return 0;
|
2022-10-05 14:28:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void TriggerSummary::SetThreshold(){
|
|
|
|
if( digi == NULL ) return;
|
|
|
|
|
|
|
|
for( int bd = 0; bd < nDigi; bd++){
|
|
|
|
for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){
|
|
|
|
|
|
|
|
unsigned short haha = atoi( txtThreshold[bd][ch]->GetText());
|
|
|
|
|
|
|
|
if( value[bd][ch] != haha ){
|
|
|
|
if( digi[bd]->GetDPPType() == V1730_DPP_PSD_CODE ) {
|
|
|
|
|
|
|
|
|
|
|
|
digi[bd]->WriteRegister(Register::DPP::PSD::TriggerThreshold, haha, ch);
|
|
|
|
|
2022-10-06 15:49:08 -04:00
|
|
|
value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PSD::TriggerThreshold, ch);
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
}
|
|
|
|
if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) {
|
|
|
|
digi[bd]->WriteRegister(Register::DPP::PHA::TriggerThreshold, haha, ch);
|
|
|
|
|
2022-10-06 15:49:08 -04:00
|
|
|
value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
|
2022-10-05 14:28:55 -04:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-10-06 15:49:08 -04:00
|
|
|
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
|
2022-10-05 14:28:55 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|