From 31d6346151297b01bf526c9dc3145b7f897ef8c9 Mon Sep 17 00:00:00 2001 From: "Ryan@SOLARIS-DAQ" Date: Mon, 27 Mar 2023 12:46:03 -0400 Subject: [PATCH] SOLARIS panel, chkBox for all --- SOLARISpanel.cpp | 208 ++++++++++++++++++++++------------------------- SOLARISpanel.h | 6 +- 2 files changed, 101 insertions(+), 113 deletions(-) diff --git a/SOLARISpanel.cpp b/SOLARISpanel.cpp index e80bb34..1889c2c 100644 --- a/SOLARISpanel.cpp +++ b/SOLARISpanel.cpp @@ -172,7 +172,6 @@ SOLARISpanel::SOLARISpanel(Digitizer2Gen **digi, unsigned short nDigi, layout->setAlignment(Qt::AlignLeft|Qt::AlignTop); layout->setSpacing(0); - //TODO======= check all chkAll[detTypeID][SettingID] = new QCheckBox("Set for all", tab); layout->addWidget(chkAll[detTypeID][SettingID], 0, 0); connect(chkAll[detTypeID][SettingID], &QCheckBox::stateChanged, this, [=](bool state){ @@ -183,25 +182,12 @@ SOLARISpanel::SOLARISpanel(Digitizer2Gen **digi, unsigned short nDigi, } }); - if( SettingItems[SettingID].GetPara() == PHA::CH::TriggerThreshold.GetPara() && detTypeID == 0){ - chkAlle = new QCheckBox("Set for all e", tab); - layout->addWidget(chkAlle, 0, 1); - - - chkAllxf = new QCheckBox("Set for all xf", tab); - layout->addWidget(chkAllxf, 0, 2); - - chkAllxn = new QCheckBox("Set for all xn", tab); - layout->addWidget(chkAllxn, 0, 3); - } - QFrame *line = new QFrame(tab); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); line->setFixedHeight(10); layout->addWidget(line, 1, 0, 1, NCOL); - //range of detID int lowID = (detTypeID == 0 ? 0 : detMaxID[detTypeID-1]); @@ -212,9 +198,6 @@ SOLARISpanel::SOLARISpanel(Digitizer2Gen **digi, unsigned short nDigi, } - - - } } @@ -225,7 +208,7 @@ SOLARISpanel::~SOLARISpanel(){ } //^###################################################################### -int SOLARISpanel::FindDetTypID(QList detIDListElement){ +int SOLARISpanel::FindDetTypeID(QList detIDListElement){ for( int i = 0; i < (int) detType.size(); i++){ int lowID = (i == 0) ? 0 : detMaxID[i-1]; if( lowID <= detIDListElement[0] && detIDListElement[0] < detMaxID[i]) { @@ -247,22 +230,22 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID //@======================================== SpinBox and Display bool isDisableDetector = false; - for( int i = 1; i < (int) detID.size(); i ++){ + for( int chIndex = 1; chIndex < (int) detID.size(); chIndex ++){ isDisableDetector = false; - QLabel * lb = new QLabel(arrayLabel[i-1], this); - layout0->addWidget(lb, 2*i, 0, 2, 1); + QLabel * lb = new QLabel(arrayLabel[chIndex-1], this); + layout0->addWidget(lb, 2*chIndex, 0, 2, 1); - int digiID = (detID[i] >> 8 ); - int chID = (detID[i] & 0xFF); + int digiID = (detID[chIndex] >> 8 ); + int chID = (detID[chIndex] & 0xFF); chkOnOff[SettingID][digiID][chID] = new QCheckBox(this); - layout0->addWidget(chkOnOff[SettingID][digiID][chID], 2*i, 1, 2, 1); + layout0->addWidget(chkOnOff[SettingID][digiID][chID], 2*chIndex, 1, 2, 1); leDisplay[SettingID][digiID][chID] = new QLineEdit(this); leDisplay[SettingID][digiID][chID]->setFixedWidth(70); - layout0->addWidget(leDisplay[SettingID][digiID][chID], 2*i, 2); + layout0->addWidget(leDisplay[SettingID][digiID][chID], 2*chIndex, 2); sbSetting[SettingID][digiID][chID] = new RSpinBox(this); if( digiID < nDigi ) sbSetting[SettingID][digiID][chID]->setToolTip( "Digi-" + QString::number(digi[digiID]->GetSerialNumber()) + ", Ch-" + QString::number(chID)); @@ -274,7 +257,7 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID sbSetting[SettingID][digiID][chID]->setSingleStep(atoi(SettingItems[SettingID].GetAnswers()[2].first.c_str())); sbSetting[SettingID][digiID][chID]->SetToolTip(); - layout0->addWidget(sbSetting[SettingID][digiID][chID], 2*i+1, 2); + layout0->addWidget(sbSetting[SettingID][digiID][chID], 2*chIndex+1, 2); if( digiID >= nDigi || chID >= digi[digiID]->GetNChannels() ) { leDisplay[SettingID][digiID][chID]->setEnabled(false); @@ -301,18 +284,40 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID spb->setValue( (std::round(value/step) * step) ); } - int index = (chkAll[detTypeID][SettingID]->isChecked() ? -1 : chID); + if( chkAll[detTypeID][SettingID]->isChecked() ){ + for(int k = 0; k < detIDList.size() ; k++){ + if( detTypeID == FindDetTypeID(detIDList[k]) ){ + for( int h = 1; h < detIDList[k].size() ; h++){ + if( h != chIndex) continue; + int index = (detIDList[k][h] & 0xFF); - QString msg; - msg = QString::fromStdString(para.GetPara()) + "|DIG:"+ QString::number(digi[digiID]->GetSerialNumber()); - msg += ",CH:" + (index == - 1 ? "All" : QString::number(chID)) ; - msg += " = " + QString::number(spb->value()); - if( digi[digiID]->WriteValue(para, std::to_string(spb->value()), index)){ - SendLogMsg(msg + "|OK."); - spb->setStyleSheet(""); + QString msg; + msg = QString::fromStdString(para.GetPara()) + "|DIG:"+ QString::number(digi[digiID]->GetSerialNumber()); + msg += ",CH:" + QString::number(index) + "(" + arrayLabel[chIndex-1] + ")"; + msg += " = " + QString::number(spb->value()); + + if( digi[digiID]->WriteValue(para, std::to_string(spb->value()), index)){ + SendLogMsg(msg + "|OK."); + spb->setStyleSheet(""); + }else{ + SendLogMsg(msg + "|Fail."); + spb->setStyleSheet("color:red;"); + } + } + } + } }else{ - SendLogMsg(msg + "|Fail."); - spb->setStyleSheet("color:red;"); + QString msg; + msg = QString::fromStdString(para.GetPara()) + "|DIG:"+ QString::number(digi[digiID]->GetSerialNumber()); + msg += ",CH:" + QString::number(chID) + "(" + arrayLabel[chIndex-1] + ")"; + msg += " = " + QString::number(spb->value()); + if( digi[digiID]->WriteValue(para, std::to_string(spb->value()), chID)){ + SendLogMsg(msg + "|OK."); + spb->setStyleSheet(""); + }else{ + SendLogMsg(msg + "|Fail."); + spb->setStyleSheet("color:red;"); + } } UpdatePanelFromMemory(); UpdateOtherPanels(); @@ -322,20 +327,55 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID connect(chkOnOff[SettingID][digiID][chID], &QCheckBox::stateChanged, this, [=](int state){ if( !enableSignalSlot ) return; - int index = (chkAll[detTypeID][SettingID]->isChecked() ? -1 : chID); - digi[digiID]->WriteValue(PHA::CH::ChannelEnable, state ? "True" : "False", index); + if( chkAll[detTypeID][SettingID]->isChecked() ){ + for(int k = 0; k < detIDList.size() ; k++){ + if( detTypeID == FindDetTypeID(detIDList[k]) ){ + for( int h = 1; h < detIDList[k].size() ; h++){ + if( h != chIndex) continue; + int index = (detIDList[k][h] & 0xFF); - enableSignalSlot = false; - for( int i = 0; i < (int) detType.size(); i++){ - leDisplay[i][digiID][chID]->setEnabled(state); - sbSetting[i][digiID][chID]->setEnabled(state); - chkOnOff[i][digiID][chID]->setChecked(state); + QString msg; + msg = QString::fromStdString(PHA::CH::ChannelEnable.GetPara()) + "|DIG:"+ QString::number(digi[digiID]->GetSerialNumber()); + msg += ",CH:" + QString::number(index) + "(" + arrayLabel[chIndex-1] + ")"; + msg += ( state ? " = True" : " = False"); + + if( digi[digiID]->WriteValue(PHA::CH::ChannelEnable, state ? "True" : "False", index)){ + SendLogMsg(msg + "|OK."); + enableSignalSlot = false; + for( int k = 0; k < (int) detType.size(); k++){ + leDisplay[k][digiID][index]->setEnabled(state); + sbSetting[k][digiID][index]->setEnabled(state); + chkOnOff[k][digiID][index]->setChecked(state); + } + enableSignalSlot = true; + }else{ + SendLogMsg(msg + "|Fail."); + } + } + } + } + }else{ + QString msg; + msg = QString::fromStdString(PHA::CH::ChannelEnable.GetPara()) + "|DIG:"+ QString::number(digi[digiID]->GetSerialNumber()); + msg += ",CH:" + QString::number(chID) + "(" + arrayLabel[chIndex-1] + ")"; + msg += ( state ? " = True" : " = False"); + + if( digi[digiID]->WriteValue(PHA::CH::ChannelEnable, state ? "True" : "False", chID)){ + SendLogMsg(msg + "|OK."); + enableSignalSlot = false; + for( int k = 0; k < (int) detType.size(); k++){ + leDisplay[k][digiID][chID]->setEnabled(state); + sbSetting[k][digiID][chID]->setEnabled(state); + chkOnOff[k][digiID][chID]->setChecked(state); + } + enableSignalSlot = true; + }else{ + SendLogMsg(msg + "|Fail."); + } } - enableSignalSlot = true; UpdatePanelFromMemory(); UpdateOtherPanels(); - }); layout0->setColumnStretch(0, 1); @@ -366,9 +406,18 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID if( isDisableDetector ) cbTrigger[detTypeID][detID[0]]->setEnabled(false); + //*========== connection connect(cbTrigger[detTypeID][detID[0]], &RComboBox::currentIndexChanged, this , [=](int index){ if( !enableSignalSlot) return; + if( chkAll[detTypeID][SettingID]->isChecked() ){ + for( int gg = 0; gg < nDet[detTypeID]; gg++){ + if( gg == detID[0] ) continue; + cbTrigger[detTypeID][gg]->setCurrentIndex(index); + } + } + + ///----------- single for( int i = 1; i < detID.size(); i++){ int digiID = (detID[i] >> 8 ); @@ -384,7 +433,7 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID digi[digiID]->WriteValue(PHA::CH::WaveTriggerSource, "ChSelfTrigger", chID); digi[digiID]->WriteValue(PHA::CH::CoincidenceMask, "Disabled", chID); }; break; - case 1 : { // trigger by energy + case 1 : { /// trigger by energy digi[digiID]->WriteValue(PHA::CH::EventTriggerSource, "ChSelfTrigger", chID); digi[digiID]->WriteValue(PHA::CH::WaveTriggerSource, "ChSelfTrigger", chID); @@ -413,6 +462,9 @@ void SOLARISpanel::CreateDetGroup(int detTypeID, int SettingID, QList detID digi[digiID]->WriteValue(PHA::CH::CoincidenceMask, "Disabled", chID); }; break; } + + SendLogMsg("SOLARIS panel : Set Trigger = " + cbTrigger[detTypeID][detID[0]]->itemText(index) + "|Digi:" + QString::number(digi[digiID]->GetSerialNumber()) + ",Det:" + QString::number(detID[0])); + } UpdatePanelFromMemory(); UpdateOtherPanels(); @@ -497,7 +549,7 @@ void SOLARISpanel::UpdatePanelFromMemory(){ // and coincidentMask for e, xf, xn, are at least one for Ch64Trigger // and waveTriggerSource are all ChSelfTrigger - int detTypeID = FindDetTypID(detIDList[k]); + int detTypeID = FindDetTypeID(detIDList[k]); //====== a stupid way // triggerSource : Other = 0x0, Disabled = 0x1, ChSelfTrigger = 0x2, TRGIN = 0x3 @@ -567,68 +619,6 @@ void SOLARISpanel::UpdatePanelFromMemory(){ cbTrigger[detTypeID][detIDList[k][0]]->setCurrentIndex(comboxIndex); - - //Check the 0-index - /* - bool isAcceptableSetting = true; - bool isTriggerE = false; - - if( eventTriggerSource[0] != waveTriggerSource[0] || coincidentMask[0] != antiCoincidentMask[0] ) isAcceptableSetting = false; - if( antiCoincidentMask[0] != "Disabled") isAcceptableSetting = false; - - if( !(coincidentMask[0] == "Disabled" || coincidentMask[0] == "TRGIN") ) isAcceptableSetting = false; - - //check 0-index settings - if( isAcceptableSetting ){ - if( eventTriggerSource[0] == "ChSelfTrigger" && coincidentMask[0] == "Disabled") { - - //assume isTriggerE - isTriggerE = true; - unsigned long ShouldBeMask = 1ULL << (detIDList[k][1] & 0xFF); - for( int p = 1; p < (int) triggerMap.size(); p ++){ - if( coincidentMask[p] != "Ch64Trigger") isTriggerE = false; - if( triggerMap[p] != ShouldBeMask) isTriggerE = false; - } - - if( isTriggerE ){ - cbTrigger[detTypeID][detIDList[k][0]]->setCurrentText("Trigger e"); - }else{ - cbTrigger[detTypeID][detIDList[k][0]]->setCurrentText("Self Trigger"); - } - - }else if( eventTriggerSource[0] == "Disabled" && coincidentMask[0] == "Disabled" ) { - cbTrigger[detTypeID][detIDList[k][0]]->setCurrentText("Disabled"); - }else if( eventTriggerSource[0] == "TRGIN" && coincidentMask[0] == "TRGIN") { - cbTrigger[detTypeID][detIDList[k][0]]->setCurrentText("Ext. Trigger"); - }else{ - isAcceptableSetting = false; - } - } - - if( isAcceptableSetting){ - //Check if eventTriggerSource or coincidentMask compare to the 0-index - for( int h = 2; h < detIDList[k].size(); h++){ - if( eventTriggerSource[h-1] != eventTriggerSource[0]){ - isAcceptableSetting = false; - break; - } - if( waveTriggerSource[h-1] != waveTriggerSource[0]){ - isAcceptableSetting = false; - break; - } - if( !isTriggerE && coincidentMask[h-1] != coincidentMask[0]){ - isAcceptableSetting = false; - break; - } - if( antiCoincidentMask[h-1] != antiCoincidentMask[0]){ - isAcceptableSetting = false; - break; - } - } - } - if( !isAcceptableSetting ) cbTrigger[detTypeID][detIDList[k][0]]->setCurrentText("Others"); - */ - } //@===================== Coin. time diff --git a/SOLARISpanel.h b/SOLARISpanel.h index 0f4415c..8f4414d 100644 --- a/SOLARISpanel.h +++ b/SOLARISpanel.h @@ -64,14 +64,12 @@ private: std::vector detMaxID; QList> detIDList; // 1-D array of { detID, (Digi << 8 ) + ch} - int FindDetTypID(QList detIDListElement); + int FindDetTypeID(QList detIDListElement); RSpinBox * sbCoinTime; QCheckBox * chkAll[MaxDetType][MaxSettingItem]; // checkBox for all setting on that tab; - QCheckBox * chkAlle; - QCheckBox * chkAllxf; - QCheckBox * chkAllxn; + QGroupBox * groupBox[MaxDetType][MaxSettingItem][MaxDetID];