From 7845b8fb8c3d7b0917b96e31a73f9920b96b2809 Mon Sep 17 00:00:00 2001 From: "Ryan@WorkStation" Date: Tue, 19 Sep 2023 12:57:42 -0400 Subject: [PATCH] change the scalar update rountine. scalar will update every 2 sec once it opened and keep running unit digitizer closed. scalar also update board status if digi setting pannel open --- digiSettingsPanel.cpp | 48 +++++++++++-------------------------------- mainwindow.cpp | 46 ++++++++++++++++++++++++++++++----------- mainwindow.h | 2 +- 3 files changed, 47 insertions(+), 49 deletions(-) diff --git a/digiSettingsPanel.cpp b/digiSettingsPanel.cpp index ea4ba74..0ae3e53 100644 --- a/digiSettingsPanel.cpp +++ b/digiSettingsPanel.cpp @@ -537,39 +537,11 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi vgaLayout->setAlignment(Qt::AlignTop| Qt::AlignLeft); for( int k = 0; k < 4; k ++){ - QLabel * lb = new QLabel("VGA-" + QString::number(k) + " [dB] :", tab); - lb->setAlignment(Qt::AlignRight | Qt::AlignCenter); - vgaLayout->addWidget(lb, k, 0); - - VGA[iDigi][k] = new RSpinBox(tab, 1); - VGA[iDigi][k]->setMinimum(0); - VGA[iDigi][k]->setMaximum(40); + SetupSpinBox(VGA[iDigi][k], PHA::VGA::VGAGain, -1, false, "VGA-" + QString::number(k) + " [dB] :", vgaLayout, k, 0); VGA[iDigi][k]->setSingleStep(0.5); + VGA[iDigi][k]->setFixedWidth(40); VGA[iDigi][k]->SetToolTip(); - vgaLayout->addWidget(VGA[iDigi][k], k, 1); - connect(VGA[iDigi][k], &RSpinBox::valueChanged, this, [=](){ - if( !enableSignalSlot ) return; - VGA[ID][k]->setStyleSheet("color:blue;"); - }); - connect(VGA[iDigi][k], &RSpinBox::returnPressed, this, [=](){ - if( !enableSignalSlot ) return; - //printf("%s %d %d \n", para.GetPara().c_str(), ch_index, spb->value()); - double step = VGA[ID][k]->singleStep(); - double value = VGA[ID][k]->value(); - VGA[ID][k]->setValue( (std::round(value/step) * step) ); - QString msg; - msg = "DIG:"+ QString::number(digi[ID]->GetSerialNumber()) + "|" + QString::fromStdString(PHA::VGA::VGAGain.GetPara()); - if( PHA::VGA::VGAGain.GetType() == TYPE::VGA ) msg += ",VGA:" + QString::number(k); - msg += " = " + QString::number(VGA[ID][k]->value()); - if( digi[ID]->WriteValue(PHA::VGA::VGAGain, std::to_string(VGA[ID][k]->value()), k)){ - VGA[ID][k]->setStyleSheet(""); - SendLogMsg(msg + "|OK."); - }else{ - VGA[ID][k]->setStyleSheet("color:red;"); - SendLogMsg(msg + "|Fail."); - } - }); } } @@ -587,18 +559,18 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi SetupSpinBox( sbITLAMajority[iDigi], PHA::DIG::ITLAMajorityLev, -1, false, "Majority", aLayout, 1, 0); SetupComboBox(cbITLAPairLogic[iDigi], PHA::DIG::ITLAPairLogic, -1, false, "Pair Logic", aLayout, 2, 0); SetupComboBox(cbITLAPolarity[iDigi], PHA::DIG::ITLAPolarity, -1, false, "Polarity", aLayout, 3, 0); - SetupSpinBox( sbITLAGateWidth[iDigi], PHA::DIG::ITLAGateWidth, -1, false, "GateWidth [ns]", aLayout, 4, 0); + SetupSpinBox( sbITLAGateWidth[iDigi], PHA::DIG::ITLAGateWidth, -1, false, "Output GateWidth [ns]", aLayout, 4, 0); QGroupBox * gbITLB = new QGroupBox("ITL-B", bdITL[iDigi]); ITLLayout->addWidget(gbITLB, 0, 1); QGridLayout * bLayout = new QGridLayout(gbITLB); - SetupComboBox(cbITLBMainLogic[iDigi], PHA::DIG::ITLAMainLogic, -1, false, "Main Logic", bLayout, 0, 0); - SetupSpinBox( sbITLBMajority[iDigi], PHA::DIG::ITLAMajorityLev, -1, false, "Majority", bLayout, 1, 0); - SetupComboBox(cbITLBPairLogic[iDigi], PHA::DIG::ITLAPairLogic, -1, false, "Pair Logic", bLayout, 2, 0); - SetupComboBox(cbITLBPolarity[iDigi], PHA::DIG::ITLAPolarity, -1, false, "Polarity", bLayout, 3, 0); - SetupSpinBox( sbITLBGateWidth[iDigi], PHA::DIG::ITLAGateWidth, -1, false, "GateWidth [ns]", bLayout, 4, 0); + SetupComboBox(cbITLBMainLogic[iDigi], PHA::DIG::ITLBMainLogic, -1, false, "Main Logic", bLayout, 0, 0); + SetupSpinBox( sbITLBMajority[iDigi], PHA::DIG::ITLBMajorityLev, -1, false, "Majority", bLayout, 1, 0); + SetupComboBox(cbITLBPairLogic[iDigi], PHA::DIG::ITLBPairLogic, -1, false, "Pair Logic", bLayout, 2, 0); + SetupComboBox(cbITLBPolarity[iDigi], PHA::DIG::ITLBPolarity, -1, false, "Polarity", bLayout, 3, 0); + SetupSpinBox( sbITLBGateWidth[iDigi], PHA::DIG::ITLBGateWidth, -1, false, "Output GateWidth [ns]", bLayout, 4, 0); QGroupBox * gbITL = new QGroupBox("ITL-Connect", bdITL[iDigi]); @@ -1775,6 +1747,7 @@ void DigiSettingsPanel::UpdateStatus(){ digi[ID]->ReadValue(PHA::DIG::ACQ_status); for( int i = 0; i < (int) PHA::DIG::TempSensADC.size(); i++){ + if( digi[ID]->GetModelName() != "VX2745" && i > 0 ) continue; digi[ID]->ReadValue(PHA::DIG::TempSensADC[i]); } for( int i = 0; i < (int) PHA::DIG::TempSensOthers.size(); i++){ @@ -1798,6 +1771,9 @@ void DigiSettingsPanel::EnableControl(){ bdCfg[id]->setEnabled(enable); bdTestPulse[id]->setEnabled(enable); + bdVGA[id]->setEnabled(enable); + bdLVDS[id]->setEnabled(enable); + bdITL[id]->setEnabled(enable); box1[id]->setEnabled(enable); box3[id]->setEnabled(enable); diff --git a/mainwindow.cpp b/mainwindow.cpp index 7ad1091..5a9d2d2 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -42,8 +42,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ runTimer = new QTimer(); needManualComment = true; + isRunning = false; { + scalarOutputInflux = false; scalar = new QMainWindow(this); scalar->setWindowTitle("Scalar"); scalar->setGeometry(0, 0, 1000, 800); @@ -333,6 +335,11 @@ MainWindow::~MainWindow(){ CloseDigitizers(); // SOlaris panel, digiSetting, scope are also deleted. printf("-------- Delete scalar Thread\n"); + if( scalarThread->isRunning()){ + scalarThread->Stop(); + scalarThread->quit(); + scalarThread->wait(); + } CleanUpScalar(); delete scalarThread; @@ -460,8 +467,10 @@ int MainWindow::StartACQ(){ } if( !scalar->isVisible() ) scalar->show(); + isRunning = True; lbScalarACQStatus->setText("ACQ On"); - scalarThread->start(); + //scalarThread->start(); + scalarOutputInflux = true; return 1; @@ -521,11 +530,12 @@ void MainWindow::StopACQ(){ if( chkSaveRun->isChecked() ) digi[i]->CloseOutFile(); } - if( scalarThread->isRunning()){ - scalarThread->Stop(); - scalarThread->quit(); - scalarThread->wait(); - } + // if( scalarThread->isRunning()){ + // scalarThread->Stop(); + // scalarThread->quit(); + // scalarThread->wait(); + // } + scalarOutputInflux = false; if( influx ){ influx->ClearDataPointsBuffer(); @@ -557,6 +567,7 @@ void MainWindow::StopACQ(){ LogMsg("=========================== no-Save Run stopped."); } + isRunning = false; lbScalarACQStatus->setText("ACQ Off"); } @@ -855,7 +866,7 @@ void MainWindow::OpenScope(){ if( !scope ){ scope = new Scope(digi, nDigi, readDataThread); connect(scope, &Scope::CloseWindow, this, [=](){ bnStartACQ->setEnabled(true); }); - connect(scope, &Scope::UpdateScalar, this, &MainWindow::UpdateScalar); + //connect(scope, &Scope::UpdateScalar, this, &MainWindow::UpdateScalar); connect(scope, &Scope::SendLogMsg, this, &MainWindow::LogMsg); connect(scope, &Scope::UpdateOtherPanels, this, [=](){ UpdateAllPanel(0);}); connect(scope, &Scope::TellACQOnOff, this, [=](const bool onOff){ @@ -1063,6 +1074,13 @@ void MainWindow::UpdateAllPanel(int panelID){ //^###################################################################### Open Scaler, when DAQ is running void MainWindow::OpenScaler(){ scalar->show(); + if( isRunning ) { + lbScalarACQStatus->setText("ACQ On"); + }else{ + lbScalarACQStatus->setText("ACQ Off"); + } + + scalarThread->start(); if( scalar->isVisible() ) scalar->activateWindow(); } @@ -1081,8 +1099,12 @@ void MainWindow::SetUpScalar(){ scalarLayout->removeWidget(lbScalarACQStatus); scalarLayout->addWidget(lbScalarACQStatus, 1, 1, 1, 1 + nDigi); + // QPushButton * bnUpdateScaler = new QPushButton("Manual Update", scalar); + // scalarLayout->addWidget(bnUpdateScaler, 2, 1, 1, 1 + nDigi); + // connect(bnUpdateScaler, &QPushButton::clicked, this, &MainWindow::UpdateScalar); + ///==== create the 1st row - int rowID = 3; + int rowID = 4; for( int ch = 0; ch < MaxNumberOfChannel; ch++){ if( ch == 0 ){ @@ -1100,7 +1122,7 @@ void MainWindow::SetUpScalar(){ leTrigger = new QLineEdit**[nDigi]; leAccept = new QLineEdit**[nDigi]; for( int iDigi = 0; iDigi < nDigi; iDigi++){ - rowID = 2; + rowID = 3; leTrigger[iDigi] = new QLineEdit *[digi[iDigi]->GetNChannels()]; leAccept[iDigi] = new QLineEdit *[digi[iDigi]->GetNChannels()]; for( int ch = 0; ch < MaxNumberOfChannel; ch++){ @@ -1165,7 +1187,7 @@ void MainWindow::UpdateScalar(){ lbLastUpdateTime->setText("Last update: " + QDateTime::currentDateTime().toString("MM.dd hh:mm:ss")); - if( influx ) influx->ClearDataPointsBuffer(); + if( influx && scalarOutputInflux) influx->ClearDataPointsBuffer(); std::string haha[MaxNumberOfChannel] = {""}; double acceptRate[MaxNumberOfChannel] = {0}; @@ -1209,7 +1231,7 @@ void MainWindow::UpdateScalar(){ } ///============== push the trigger, acceptRate rate database - if( influx ){ + if( influx && scalarOutputInflux ){ for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch++ ){ influx->AddDataPoint("Rate,Bd=" + std::to_string(digi[iDigi]->GetSerialNumber()) + ",Ch=" + QString::number(ch).rightJustified(2, '0').toStdString() + " value=" + haha[ch]); if( !std::isnan(acceptRate[ch]) ) influx->AddDataPoint("AccpRate,Bd=" + std::to_string(digi[iDigi]->GetSerialNumber()) + ",Ch=" + QString::number(ch).rightJustified(2, '0').toStdString() + " value=" + std::to_string(acceptRate[ch])); @@ -1218,7 +1240,7 @@ void MainWindow::UpdateScalar(){ totalFileSize += digi[iDigi]->GetTotalFilesSize(); } - if( influx && influx->GetDataLength() > 0 ){ + if( influx && influx->GetDataLength() > 0 && scalarOutputInflux ){ if( chkSaveRun->isChecked() ) influx->AddDataPoint("FileSize value=" + std::to_string(totalFileSize)); //influx->PrintDataPoints(); influx->WriteData(DatabaseName.toStdString()); diff --git a/mainwindow.h b/mainwindow.h index e80d399..f66a119 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -126,7 +126,7 @@ private: QLineEdit *** leAccept; // need to delete manually QLabel * lbLastUpdateTime; QLabel * lbScalarACQStatus; - + bool scalarOutputInflux; InfluxDB * influx;