bugs fix for 2 digitizers

This commit is contained in:
Ryan Tang 2023-03-16 16:05:55 -04:00
parent 47983c1f8a
commit 6211852acf
5 changed files with 257 additions and 208 deletions

View File

@ -133,7 +133,7 @@ std::string Digitizer2Gen::ReadValue(const Reg para, int ch_index, bool verbose
bool Digitizer2Gen::WriteValue(const char * parameter, std::string value){ bool Digitizer2Gen::WriteValue(const char * parameter, std::string value){
if( !isConnected ) return false; if( !isConnected ) return false;
printf(" %s|%-45s|%s|\n", __func__, parameter, value.c_str()); printf(" %s|%d|%-45s|%s|\n", __func__, serialNumber, parameter, value.c_str());
ret = CAEN_FELib_SetValue(handle, parameter, value.c_str()); ret = CAEN_FELib_SetValue(handle, parameter, value.c_str());
if (ret != CAEN_FELib_Success) { if (ret != CAEN_FELib_Success) {
printf("WriteError|%s||%s|\n", parameter, value.c_str()); printf("WriteError|%s||%s|\n", parameter, value.c_str());
@ -213,11 +213,14 @@ int Digitizer2Gen::OpenDigitizer(const char * url){
isConnected = true; isConnected = true;
printf("#################################################\n");
ReadAllSettings(); ReadAllSettings();
serialNumber = atoi(ReadValue("/par/SerialNum").c_str()); serialNumber = atoi(GetSettingValue(PHA::DIG::SerialNumber).c_str());
FPGAType = GetSettingValue(PHA::DIG::FirmwareType); FPGAType = GetSettingValue(PHA::DIG::FirmwareType);
nChannels = atoi(ReadValue("/par/NumCh").c_str()); FPGAVer = atoi(GetSettingValue(PHA::DIG::CupVer).c_str());
nChannels = atoi(GetSettingValue(PHA::DIG::NumberOfChannel).c_str());
ModelName = GetSettingValue(PHA::DIG::ModelName);
int adcRate = atoi(GetSettingValue(PHA::DIG::ADC_SampleRate).c_str()); int adcRate = atoi(GetSettingValue(PHA::DIG::ADC_SampleRate).c_str());
ch2ns = 1000/adcRate; ch2ns = 1000/adcRate;
@ -225,7 +228,7 @@ int Digitizer2Gen::OpenDigitizer(const char * url){
printf(" Net Mask : %s\n", GetSettingValue(PHA::DIG::NetMask).c_str()); printf(" Net Mask : %s\n", GetSettingValue(PHA::DIG::NetMask).c_str());
printf(" Gateway : %s\n", GetSettingValue(PHA::DIG::Gateway).c_str()); printf(" Gateway : %s\n", GetSettingValue(PHA::DIG::Gateway).c_str());
printf(" Model name : %s\n", GetSettingValue(PHA::DIG::ModelName).c_str()); printf(" Model name : %s\n", ModelName.c_str());
printf(" CUP version : %s\n", GetSettingValue(PHA::DIG::CupVer).c_str()); printf(" CUP version : %s\n", GetSettingValue(PHA::DIG::CupVer).c_str());
printf(" DPP Type : %s\n", GetSettingValue(PHA::DIG::FirmwareType).c_str()); printf(" DPP Type : %s\n", GetSettingValue(PHA::DIG::FirmwareType).c_str());
printf(" DPP Version : %s\n", FPGAType.c_str()); printf(" DPP Version : %s\n", FPGAType.c_str());
@ -732,7 +735,7 @@ void Digitizer2Gen::ProgramPHA(bool testPulse){
} }
std::string Digitizer2Gen::ErrorMsg(const char * funcName){ std::string Digitizer2Gen::ErrorMsg(const char * funcName){
printf("======== %s | %s\n",__func__, funcName); printf("======== %s | %5d | %s\n",__func__, serialNumber, funcName);
char msg[1024]; char msg[1024];
int ec = CAEN_FELib_GetErrorDescription((CAEN_FELib_ErrorCode) ret, msg); int ec = CAEN_FELib_GetErrorDescription((CAEN_FELib_ErrorCode) ret, msg);
if (ec != CAEN_FELib_Success) { if (ec != CAEN_FELib_Success) {

View File

@ -33,8 +33,10 @@ class Digitizer2Gen {
unsigned short serialNumber; unsigned short serialNumber;
std::string FPGAType; std::string FPGAType;
unsigned int FPGAVer;
unsigned short nChannels; unsigned short nChannels;
unsigned short ch2ns; unsigned short ch2ns;
std::string ModelName;
void Initialization(); void Initialization();
@ -68,7 +70,9 @@ class Digitizer2Gen {
~Digitizer2Gen(); ~Digitizer2Gen();
unsigned short GetSerialNumber() const{return serialNumber;} unsigned short GetSerialNumber() const{return serialNumber;}
std::string GetFPGATyep() const {return FPGAType;} std::string GetFPGAType() const {return FPGAType;}
std::string GetModelName() const {return ModelName;}
unsigned int GetFPGAVersion() const {return FPGAVer;}
void SetDummy(unsigned short sn); void SetDummy(unsigned short sn);
bool IsDummy() const {return isDummy;} bool IsDummy() const {return isDummy;}

View File

@ -79,7 +79,6 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
QVBoxLayout * mainLayout = new QVBoxLayout(this); this->setLayout(mainLayout); QVBoxLayout * mainLayout = new QVBoxLayout(this); this->setLayout(mainLayout);
QTabWidget * tabWidget = new QTabWidget(this); mainLayout->addWidget(tabWidget); QTabWidget * tabWidget = new QTabWidget(this); mainLayout->addWidget(tabWidget);
connect(tabWidget, &QTabWidget::currentChanged, this, [=](int index){ ID = (index < nDigi ? index : 0); });
//@========================== Tab for each digitizer //@========================== Tab for each digitizer
for(unsigned short iDigi = 0; iDigi < this->nDigi; iDigi++){ for(unsigned short iDigi = 0; iDigi < this->nDigi; iDigi++){
@ -233,7 +232,7 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
//--------------- //---------------
if( digi[iDigi]->IsDummy() ){ if( digi[iDigi]->IsDummy() || !digi[iDigi]->IsConnected() ){
bnReadSettngs[iDigi]->setEnabled(false); bnReadSettngs[iDigi]->setEnabled(false);
bnResetBd[iDigi]->setEnabled(false); bnResetBd[iDigi]->setEnabled(false);
bnDefaultSetting[iDigi]->setEnabled(false); bnDefaultSetting[iDigi]->setEnabled(false);
@ -247,10 +246,10 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//^====================== Group Board settings {//^====================== Group Board settings
digiBox = new QGroupBox("Board Settings", tab); digiBox[iDigi] = new QGroupBox("Board Settings", tab);
//digiBox->setSizePolicy(sizePolicy); //digiBox->setSizePolicy(sizePolicy);
QGridLayout * boardLayout = new QGridLayout(digiBox); QGridLayout * boardLayout = new QGridLayout(digiBox[iDigi]);
tabLayout_V1->addWidget(digiBox); tabLayout_V1->addWidget(digiBox[iDigi]);
int rowId = 0; int rowId = 0;
//------------------------------------- //-------------------------------------
@ -451,9 +450,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//^====================== Test Pulse settings {//^====================== Test Pulse settings
testPulseBox = new QGroupBox("Test Pulse Settings", tab); testPulseBox[iDigi] = new QGroupBox("Test Pulse Settings", tab);
tabLayout_V1->addWidget(testPulseBox); tabLayout_V1->addWidget(testPulseBox[iDigi]);
QGridLayout * testPulseLayout = new QGridLayout(testPulseBox); QGridLayout * testPulseLayout = new QGridLayout(testPulseBox[iDigi]);
testPulseLayout->setAlignment(Qt::AlignLeft); testPulseLayout->setAlignment(Qt::AlignLeft);
testPulseLayout->setVerticalSpacing(0); testPulseLayout->setVerticalSpacing(0);
@ -471,9 +470,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//^====================== VGA settings {//^====================== VGA settings
VGABox = new QGroupBox("Gain Amplifier Settings", tab); VGABox[iDigi] = new QGroupBox("Gain Amplifier Settings", tab);
tabLayout_V1->addWidget(VGABox); tabLayout_V1->addWidget(VGABox[iDigi]);
QGridLayout * vgaLayout = new QGridLayout(VGABox); QGridLayout * vgaLayout = new QGridLayout(VGABox[iDigi]);
vgaLayout->setVerticalSpacing(0); vgaLayout->setVerticalSpacing(0);
//vgaLayout->setAlignment(Qt::AlignLeft); //vgaLayout->setAlignment(Qt::AlignLeft);
@ -512,8 +511,6 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
} }
if( digi[iDigi]->GetFPGATyep() != "DPP_PHA" ) VGABox->setEnabled(false);
{//^====================== Group channel settings {//^====================== Group channel settings
QGroupBox * chBox = new QGroupBox("Channel Settings", tab); QGroupBox * chBox = new QGroupBox("Channel Settings", tab);
//chBox->setSizePolicy(sizePolicy); //chBox->setSizePolicy(sizePolicy);
@ -533,9 +530,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
unsigned short ch = digi[iDigi]->GetNChannels(); unsigned short ch = digi[iDigi]->GetNChannels();
{//*--------- Group 0 {//*--------- Group 0
box0 = new QGroupBox("Channel Selection", tab); box0[iDigi] = new QGroupBox("Channel Selection", tab);
allLayout->addWidget(box0); allLayout->addWidget(box0[iDigi]);
QGridLayout * layout0 = new QGridLayout(box0); QGridLayout * layout0 = new QGridLayout(box0[iDigi]);
layout0->setAlignment(Qt::AlignLeft); layout0->setAlignment(Qt::AlignLeft);
QLabel * lbCh = new QLabel("Channel :", tab); QLabel * lbCh = new QLabel("Channel :", tab);
@ -606,9 +603,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
int rowID = 0; int rowID = 0;
{//*--------- Group 1 {//*--------- Group 1
box1 = new QGroupBox("Input Settings", tab); box1[iDigi] = new QGroupBox("Input Settings", tab);
allLayout->addWidget(box1); allLayout->addWidget(box1[iDigi]);
QGridLayout * layout1 = new QGridLayout(box1); QGridLayout * layout1 = new QGridLayout(box1[iDigi]);
rowID = 0; rowID = 0;
SetupComboBox(cbbOnOff[iDigi][ch], PHA::CH::ChannelEnable, -1, true, "On/Off", layout1, rowID, 0); SetupComboBox(cbbOnOff[iDigi][ch], PHA::CH::ChannelEnable, -1, true, "On/Off", layout1, rowID, 0);
@ -637,9 +634,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//*--------- Group 3 {//*--------- Group 3
box3 = new QGroupBox("Trap. Settings", tab); box3[iDigi] = new QGroupBox("Trap. Settings", tab);
allLayout->addWidget(box3); allLayout->addWidget(box3[iDigi]);
QGridLayout * layout3 = new QGridLayout(box3); QGridLayout * layout3 = new QGridLayout(box3[iDigi]);
//------------------------------ //------------------------------
rowID = 0; rowID = 0;
@ -662,9 +659,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//*--------- Group 4 {//*--------- Group 4
box4 = new QGroupBox("Probe Settings", tab); box4[iDigi] = new QGroupBox("Probe Settings", tab);
allLayout->addWidget(box4); allLayout->addWidget(box4[iDigi]);
QGridLayout * layout4 = new QGridLayout(box4); QGridLayout * layout4 = new QGridLayout(box4[iDigi]);
//------------------------------ //------------------------------
rowID = 0; rowID = 0;
@ -684,9 +681,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//*--------- Group 5 {//*--------- Group 5
box5 = new QGroupBox("Trigger Settings", tab); box5[iDigi] = new QGroupBox("Trigger Settings", tab);
allLayout->addWidget(box5); allLayout->addWidget(box5[iDigi]);
QGridLayout * layout5 = new QGridLayout(box5); QGridLayout * layout5 = new QGridLayout(box5[iDigi]);
//------------------------------ //------------------------------
rowID = 0; rowID = 0;
@ -712,9 +709,9 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//*--------- Group 6 {//*--------- Group 6
box6 = new QGroupBox("Other Settings", tab); box6[iDigi] = new QGroupBox("Other Settings", tab);
allLayout->addWidget(box6); allLayout->addWidget(box6[iDigi]);
QGridLayout * layout6 = new QGridLayout(box6); QGridLayout * layout6 = new QGridLayout(box6[iDigi]);
//------------------------------ //------------------------------
rowID = 0 ; rowID = 0 ;
@ -772,21 +769,21 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
{//@============== input tab {//@============== input tab
inputTab = new QTabWidget(tab); inputTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(inputTab, "Input"); chTabWidget->addTab(inputTab[iDigi], "Input");
SetupComboBoxTab(cbbOnOff, PHA::CH::ChannelEnable, "On/Off", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbOnOff, PHA::CH::ChannelEnable, "On/Off", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbDCOffset, PHA::CH::DC_Offset, "DC Offset [%]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbDCOffset, PHA::CH::DC_Offset, "DC Offset [%]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbThreshold, PHA::CH::TriggerThreshold, "Threshold [LSB]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbThreshold, PHA::CH::TriggerThreshold, "Threshold [LSB]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbParity, PHA::CH::Polarity, "Parity", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbParity, PHA::CH::Polarity, "Parity", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbRecordLength, PHA::CH::RecordLength, "Record Length [ns]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbRecordLength, PHA::CH::RecordLength, "Record Length [ns]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbPreTrigger, PHA::CH::PreTrigger, "PreTrigger [ns]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbPreTrigger, PHA::CH::PreTrigger, "PreTrigger [ns]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbInputRiseTime, PHA::CH::TimeFilterRiseTime, "Input Rise Time [ns]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbInputRiseTime, PHA::CH::TimeFilterRiseTime, "Input Rise Time [ns]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbTriggerGuard, PHA::CH::TimeFilterRetriggerGuard, "Trigger Guard [ns]", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbTriggerGuard, PHA::CH::TimeFilterRetriggerGuard, "Trigger Guard [ns]", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbLowFilter, PHA::CH::EnergyFilterLowFreqFilter, "Low Freq. Filter", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbLowFilter, PHA::CH::EnergyFilterLowFreqFilter, "Low Freq. Filter", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbWaveSource, PHA::CH::WaveDataSource, "Wave Data Dource", inputTab, iDigi, digi[iDigi]->GetNChannels(), 2); SetupComboBoxTab(cbbWaveSource, PHA::CH::WaveDataSource, "Wave Data Dource", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 2);
SetupComboBoxTab(cbbWaveRes, PHA::CH::WaveResolution, "Wave Resol.", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbWaveRes, PHA::CH::WaveResolution, "Wave Resol.", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbWaveSave, PHA::CH::WaveSaving, "Wave Save", inputTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbWaveSave, PHA::CH::WaveSaving, "Wave Save", inputTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch++){ for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch++){
//Set color of some combox //Set color of some combox
@ -801,53 +798,53 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
} }
{//@============== Trap tab {//@============== Trap tab
trapTab = new QTabWidget(tab); trapTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(trapTab, "Trapezoid"); chTabWidget->addTab(trapTab[iDigi], "Trapezoid");
SetupSpinBoxTab(spbTrapRiseTime, PHA::CH::EnergyFilterRiseTime, "Trap. Rise Time [ns]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbTrapRiseTime, PHA::CH::EnergyFilterRiseTime, "Trap. Rise Time [ns]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbTrapFlatTop, PHA::CH::EnergyFilterFlatTop, "Trap. Flat Top [ns]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbTrapFlatTop, PHA::CH::EnergyFilterFlatTop, "Trap. Flat Top [ns]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbTrapPoleZero, PHA::CH::EnergyFilterPoleZero, "Trap. Pole Zero [ns]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbTrapPoleZero, PHA::CH::EnergyFilterPoleZero, "Trap. Pole Zero [ns]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbPeaking, PHA::CH::EnergyFilterPeakingPosition, "Peaking [%]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbPeaking, PHA::CH::EnergyFilterPeakingPosition, "Peaking [%]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbPeakingAvg, PHA::CH::EnergyFilterPeakingAvg, "Peak Avg.", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbPeakingAvg, PHA::CH::EnergyFilterPeakingAvg, "Peak Avg.", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbBaselineAvg, PHA::CH::EnergyFilterBaselineAvg, "Baseline Avg.", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbBaselineAvg, PHA::CH::EnergyFilterBaselineAvg, "Baseline Avg.", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbFineGain, PHA::CH::EnergyFilterFineGain, "Fine Gain", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbFineGain, PHA::CH::EnergyFilterFineGain, "Fine Gain", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbBaselineGuard, PHA::CH::EnergyFilterBaselineGuard, "Baseline Guard [ns]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbBaselineGuard, PHA::CH::EnergyFilterBaselineGuard, "Baseline Guard [ns]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbPileupGuard, PHA::CH::EnergyFilterPileUpGuard, "Pile-up Guard [ns]", trapTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbPileupGuard, PHA::CH::EnergyFilterPileUpGuard, "Pile-up Guard [ns]", trapTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
} }
{//@============== Probe tab {//@============== Probe tab
probeTab = new QTabWidget(tab); probeTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(probeTab, "Probe"); chTabWidget->addTab(probeTab[iDigi], "Probe");
SetupComboBoxTab(cbbAnaProbe0, PHA::CH::WaveAnalogProbe0, "Analog Prob. 0", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbAnaProbe0, PHA::CH::WaveAnalogProbe0, "Analog Prob. 0", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
SetupComboBoxTab(cbbAnaProbe1, PHA::CH::WaveAnalogProbe1, "Analog Prob. 1", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbAnaProbe1, PHA::CH::WaveAnalogProbe1, "Analog Prob. 1", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
SetupComboBoxTab(cbbDigProbe0, PHA::CH::WaveDigitalProbe0, "Digital Prob. 0", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbDigProbe0, PHA::CH::WaveDigitalProbe0, "Digital Prob. 0", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
SetupComboBoxTab(cbbDigProbe1, PHA::CH::WaveDigitalProbe1, "Digital Prob. 1", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbDigProbe1, PHA::CH::WaveDigitalProbe1, "Digital Prob. 1", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
SetupComboBoxTab(cbbDigProbe2, PHA::CH::WaveDigitalProbe2, "Digital Prob. 2", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbDigProbe2, PHA::CH::WaveDigitalProbe2, "Digital Prob. 2", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
SetupComboBoxTab(cbbDigProbe3, PHA::CH::WaveDigitalProbe3, "Digital Prob. 3", probeTab, iDigi, digi[iDigi]->GetNChannels(), 4); SetupComboBoxTab(cbbDigProbe3, PHA::CH::WaveDigitalProbe3, "Digital Prob. 3", probeTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 4);
} }
{//@============== Other tab {//@============== Other tab
otherTab = new QTabWidget(tab); otherTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(otherTab, "Others"); chTabWidget->addTab(otherTab[iDigi], "Others");
SetupComboBoxTab(cbbEventSelector, PHA::CH::EventSelector, "Event Selector", otherTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbEventSelector, PHA::CH::EventSelector, "Event Selector", otherTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbWaveSelector, PHA::CH::WaveSelector, "Wave Selector", otherTab, iDigi, digi[iDigi]->GetNChannels(), 2 ); SetupComboBoxTab(cbbWaveSelector, PHA::CH::WaveSelector, "Wave Selector", otherTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 2 );
SetupSpinBoxTab(spbEnergySkimLow, PHA::CH::EnergySkimLowDiscriminator, "Energy Skim Low", otherTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbEnergySkimLow, PHA::CH::EnergySkimLowDiscriminator, "Energy Skim Low", otherTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbEnergySkimHigh, PHA::CH::EnergySkimHighDiscriminator, "Energy Skim High", otherTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbEnergySkimHigh, PHA::CH::EnergySkimHighDiscriminator, "Energy Skim High", otherTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
} }
{//@============== Trigger tab {//@============== Trigger tab
triggerTab = new QTabWidget(tab); triggerTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(triggerTab, "Trigger"); chTabWidget->addTab(triggerTab[iDigi], "Trigger");
SetupComboBoxTab(cbbEvtTrigger, PHA::CH::EventTriggerSource, "Event Trig. Source", triggerTab, iDigi, digi[iDigi]->GetNChannels(), 2); SetupComboBoxTab(cbbEvtTrigger, PHA::CH::EventTriggerSource, "Event Trig. Source", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 2);
SetupComboBoxTab(cbbWaveTrigger, PHA::CH::WaveTriggerSource, "Wave Trig. Source", triggerTab, iDigi, digi[iDigi]->GetNChannels(), 2); SetupComboBoxTab(cbbWaveTrigger, PHA::CH::WaveTriggerSource, "Wave Trig. Source", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 2);
SetupComboBoxTab(cbbChVetoSrc, PHA::CH::ChannelVetoSource, "Veto Source", triggerTab, iDigi, digi[iDigi]->GetNChannels(), 2); SetupComboBoxTab(cbbChVetoSrc, PHA::CH::ChannelVetoSource, "Veto Source", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels(), 2);
SetupComboBoxTab(cbbCoinMask, PHA::CH::CoincidenceMask, "Coin. Mask", triggerTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbCoinMask, PHA::CH::CoincidenceMask, "Coin. Mask", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupComboBoxTab(cbbAntiCoinMask, PHA::CH::AntiCoincidenceMask, "Anti-Coin. Mask", triggerTab, iDigi, digi[iDigi]->GetNChannels()); SetupComboBoxTab(cbbAntiCoinMask, PHA::CH::AntiCoincidenceMask, "Anti-Coin. Mask", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbCoinLength, PHA::CH::CoincidenceLength, "Coin. Length [ns]", triggerTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbCoinLength, PHA::CH::CoincidenceLength, "Coin. Length [ns]", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
SetupSpinBoxTab(spbADCVetoWidth, PHA::CH::ADCVetoWidth, "ADC Veto Length [ns]", triggerTab, iDigi, digi[iDigi]->GetNChannels()); SetupSpinBoxTab(spbADCVetoWidth, PHA::CH::ADCVetoWidth, "ADC Veto Length [ns]", triggerTab[iDigi], iDigi, digi[iDigi]->GetNChannels());
} }
for( int ch = 0; ch < digi[ID]->GetNChannels() + 1; ch++) { for( int ch = 0; ch < digi[ID]->GetNChannels() + 1; ch++) {
@ -930,25 +927,25 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
{//@============== Trigger Mask/Map tab {//@============== Trigger Mask/Map tab
//TODO========================== //TODO==========================
triggerMapTab = new QTabWidget(tab); triggerMapTab[iDigi] = new QTabWidget(tab);
chTabWidget->addTab(triggerMapTab, "Trigger Map"); chTabWidget->addTab(triggerMapTab[iDigi], "Trigger Map");
QGridLayout * triggerLayout = new QGridLayout(triggerMapTab); QGridLayout * triggerLayout = new QGridLayout(triggerMapTab[iDigi]);
triggerLayout->setAlignment(Qt::AlignTop); triggerLayout->setAlignment(Qt::AlignTop);
int rowID = 0; int rowID = 0;
//---------------------------- //----------------------------
SetupComboBox( cbAllEvtTrigger, PHA::CH::EventTriggerSource, -1, false, "Event Trigger Source (all ch.)", triggerLayout, rowID, 0); SetupComboBox( cbAllEvtTrigger[iDigi], PHA::CH::EventTriggerSource, -1, false, "Event Trigger Source (all ch.)", triggerLayout, rowID, 0);
SetupComboBox( cbAllWaveTrigger, PHA::CH::WaveTriggerSource, -1, false, "Wave Trigger Source (all ch.)", triggerLayout, rowID, 2); SetupComboBox( cbAllWaveTrigger[iDigi], PHA::CH::WaveTriggerSource, -1, false, "Wave Trigger Source (all ch.)", triggerLayout, rowID, 2);
//---------------------------- //----------------------------
rowID ++; rowID ++;
SetupComboBox( cbAllCoinMask, PHA::CH::CoincidenceMask, -1, false, "Coincident Mask (all ch.)", triggerLayout, rowID, 0); SetupComboBox( cbAllCoinMask[iDigi], PHA::CH::CoincidenceMask, -1, false, "Coincident Mask (all ch.)", triggerLayout, rowID, 0);
SetupSpinBox( sbAllCoinLength, PHA::CH::CoincidenceLength, -1, false, "Coincident Length [ns] (all ch.)", triggerLayout, rowID, 2); SetupSpinBox( sbAllCoinLength[iDigi], PHA::CH::CoincidenceLength, -1, false, "Coincident Length [ns] (all ch.)", triggerLayout, rowID, 2);
//---------------------------- //----------------------------
rowID ++; rowID ++;
SetupComboBox( cbAllAntiCoinMask, PHA::CH::AntiCoincidenceMask, -1, false, "Anti-Coincident Mask (all ch.)", triggerLayout, rowID, 0); SetupComboBox( cbAllAntiCoinMask[iDigi], PHA::CH::AntiCoincidenceMask, -1, false, "Anti-Coincident Mask (all ch.)", triggerLayout, rowID, 0);
QSignalMapper * triggerMapper = new QSignalMapper(tab); QSignalMapper * triggerMapper = new QSignalMapper(tab);
connect(triggerMapper, &QSignalMapper::mappedInt, this, &DigiSettingsPanel::onTriggerClick); connect(triggerMapper, &QSignalMapper::mappedInt, this, &DigiSettingsPanel::onTriggerClick);
@ -959,14 +956,28 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
triggerLayout->addWidget(triggerBox, rowID, 0, 1, 4); triggerLayout->addWidget(triggerBox, rowID, 0, 1, 4);
QGridLayout * tbLayout = new QGridLayout(triggerBox); QGridLayout * tbLayout = new QGridLayout(triggerBox);
tbLayout->setAlignment(Qt::AlignCenter); tbLayout->setAlignment(Qt::AlignCenter | Qt::AlignTop);
tbLayout->setSpacing(0); tbLayout->setSpacing(0);
//---------------------------- //----------------------------
rowID = 0; rowID = 0;
QLabel * instr = new QLabel("Reading: Column (C) represents a trigger channel for Row (R) channel.\nFor example, R3C1 = ch-3 trigger source is ch-1.\n", tab); QLabel * instr1 = new QLabel("Reading: Column (C) represents a trigger channel for Row (R) channel.", tab);
instr->setAlignment(Qt::AlignLeft); instr1->setAlignment(Qt::AlignLeft);
tbLayout->addWidget(instr, rowID, 0, 1, 64+15); tbLayout->addWidget(instr1, rowID, 0, 1, 64+15);
rowID ++;
QLabel * instr2 = new QLabel("For example, R3C1 = ch-3 trigger source is ch-1.", tab);
instr2->setAlignment(Qt::AlignLeft);
tbLayout->addWidget(instr2, rowID, 0, 1, 64+15);
rowID ++;
for( int j = 0; j < digi[iDigi]->GetNChannels(); j++){
if( j % 4 == 0) {
QLabel * lllb = new QLabel(QString::number(j), tab);
lllb->setAlignment(Qt::AlignLeft);
tbLayout->addWidget(lllb, rowID , 1 + j + j/4, 1, 4);
}
}
rowID ++; rowID ++;
int colID = 0; int colID = 0;
@ -976,29 +987,18 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
if( i % 4 == 0){ if( i % 4 == 0){
QLabel * lllba = new QLabel(QString::number(i), tab); QLabel * lllba = new QLabel(QString::number(i), tab);
lllba->setAlignment(Qt::AlignTop | Qt::AlignRight); lllba->setAlignment(Qt::AlignTop | Qt::AlignRight);
tbLayout->addWidget(lllba, i + 2 + i/4, 0, 4, 1); tbLayout->addWidget(lllba, 3 + i + i/4, 0, 4, 1);
}
if( i == 0 ){
for( int j = 0; j < digi[iDigi]->GetNChannels(); j++){
if( j % 4 == 0) {
QLabel * lllb = new QLabel(QString::number(j), tab);
lllb->setAlignment(Qt::AlignLeft);
tbLayout->addWidget(lllb, rowID, 1 + j + j/4, 1, 4);
}
}
rowID ++;
} }
for(int j = 0; j < digi[iDigi]->GetNChannels(); j++){ for(int j = 0; j < digi[iDigi]->GetNChannels(); j++){
trgMap[i][j] = new QPushButton(tab); trgMap[iDigi][i][j] = new QPushButton(tab);
trgMap[i][j]->setFixedSize(QSize(10,10)); trgMap[iDigi][i][j]->setFixedSize(QSize(10,10));
trgMapClickStatus[i][j] = false; trgMapClickStatus[iDigi][i][j] = false;
tbLayout->addWidget(trgMap[i][j], rowID, colID); tbLayout->addWidget(trgMap[iDigi][i][j], rowID, colID);
triggerMapper->setMapping(trgMap[i][j], (iDigi << 16) + (i << 8) + j); triggerMapper->setMapping(trgMap[iDigi][i][j], (iDigi << 16) + (i << 8) + j);
connect(trgMap[i][j], SIGNAL(clicked()), triggerMapper, SLOT(map())); connect(trgMap[iDigi][i][j], SIGNAL(clicked()), triggerMapper, SLOT(map()));
colID ++; colID ++;
if( j%4 == 3 && j!= digi[iDigi]->GetNChannels() - 1){ if( j%4 == 3 && j!= digi[iDigi]->GetNChannels() - 1){
@ -1320,6 +1320,14 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
for( int i = 0; i < nDigi; i++) cbCopyDigiFrom->addItem("Digi-" + QString::number(digi[i]->GetSerialNumber()), i); for( int i = 0; i < nDigi; i++) cbCopyDigiFrom->addItem("Digi-" + QString::number(digi[i]->GetSerialNumber()), i);
lo1->addWidget(cbCopyDigiFrom, 0, 0, 1, 8); lo1->addWidget(cbCopyDigiFrom, 0, 0, 1, 8);
connect(cbCopyDigiFrom, &RComboBox::currentIndexChanged, this, [=](int index){ connect(cbCopyDigiFrom, &RComboBox::currentIndexChanged, this, [=](int index){
CheckRadioAndCheckedButtons();
if( !CheckDigitizersCanCopy() ) {
pbCopyChannel->setEnabled(false);
return;
}
if( index == cbCopyDigiTo->currentIndex() ){ if( index == cbCopyDigiTo->currentIndex() ){
pbCopyBoard->setEnabled(false); pbCopyBoard->setEnabled(false);
pbCopyDigi->setEnabled(false); pbCopyDigi->setEnabled(false);
@ -1357,9 +1365,6 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
if( chkChTo[i]->isChecked() ) CopyChannelSettings(cbCopyDigiFrom->currentIndex(), chFromIndex, cbCopyDigiTo->currentIndex(), i ); if( chkChTo[i]->isChecked() ) CopyChannelSettings(cbCopyDigiFrom->currentIndex(), chFromIndex, cbCopyDigiTo->currentIndex(), i );
} }
SendLogMsg("------ done"); SendLogMsg("------ done");
ID = cbCopyDigiTo->currentIndex();
ShowSettingsToPanel();
}); });
pbCopyBoard = new QPushButton("Copy Board Settings", ICTab); pbCopyBoard = new QPushButton("Copy Board Settings", ICTab);
@ -1384,6 +1389,13 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
for( int i = 0; i < nDigi; i++) cbCopyDigiTo->addItem("Digi-" + QString::number(digi[i]->GetSerialNumber()), i); for( int i = 0; i < nDigi; i++) cbCopyDigiTo->addItem("Digi-" + QString::number(digi[i]->GetSerialNumber()), i);
lo2->addWidget(cbCopyDigiTo, 0, 0, 1, 8); lo2->addWidget(cbCopyDigiTo, 0, 0, 1, 8);
connect(cbCopyDigiTo, &RComboBox::currentIndexChanged, this, [=](int index){ connect(cbCopyDigiTo, &RComboBox::currentIndexChanged, this, [=](int index){
CheckRadioAndCheckedButtons();
if( !CheckDigitizersCanCopy() ) {
pbCopyChannel->setEnabled(false);
return;
}
if( index == cbCopyDigiFrom->currentIndex() ){ if( index == cbCopyDigiFrom->currentIndex() ){
pbCopyBoard->setEnabled(false); pbCopyBoard->setEnabled(false);
pbCopyDigi->setEnabled(false); pbCopyDigi->setEnabled(false);
@ -1405,11 +1417,21 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer2Gen ** digi, unsigned short nDigi
cpLayout->setColumnStretch(0, 4); cpLayout->setColumnStretch(0, 4);
cpLayout->setColumnStretch(1, 1); cpLayout->setColumnStretch(1, 1);
cpLayout->setColumnStretch(2, 4); cpLayout->setColumnStretch(2, 4);
} }
} }
EnableControl(); connect(tabWidget, &QTabWidget::currentChanged, this, [=](int index){
if( index < nDigi) {
ID = index;
ShowSettingsToPanel();
}else{
ID = 0;
}
});
for( ID = 0; ID < nDigi; ID ++) EnableControl();
ID = 0;
cbBdSettings->setCurrentText("ModelName"); cbBdSettings->setCurrentText("ModelName");
cbChSettings->setCurrentIndex(10); cbChSettings->setCurrentIndex(10);
@ -1432,20 +1454,20 @@ void DigiSettingsPanel::onTriggerClick(int haha){
unsigned short ch = (haha >> 8 ) & 0xFF; unsigned short ch = (haha >> 8 ) & 0xFF;
unsigned short ch2 = haha & 0xFF; unsigned short ch2 = haha & 0xFF;
//qDebug() << "Digi-" << iDig << ", Ch-" << ch << ", " << ch2; qDebug() << "Digi-" << iDig << ", Ch-" << ch << ", " << ch2;
if(trgMapClickStatus[ch][ch2]){ if(trgMapClickStatus[iDig][ch][ch2]){
trgMap[ch][ch2]->setStyleSheet(""); trgMap[iDig][ch][ch2]->setStyleSheet("");
trgMapClickStatus[ch][ch2] = false; trgMapClickStatus[iDig][ch][ch2] = false;
}else{ }else{
trgMap[ch][ch2]->setStyleSheet("background-color: red;"); trgMap[iDig][ch][ch2]->setStyleSheet("background-color: red;");
trgMapClickStatus[ch][ch2] = true; trgMapClickStatus[iDig][ch][ch2] = true;
} }
//format triggermask for ch; //format triggermask for ch;
unsigned long mask = 0; unsigned long mask = 0;
for( int i = 0; i < digi[ID]->GetNChannels(); i++){ for( int i = 0; i < digi[iDig]->GetNChannels(); i++){
if( trgMapClickStatus[ch][i] ) mask += (1 << i); if( trgMapClickStatus[iDig][ch][i] ) mask += (1 << i);
} }
QString kaka = "0x"+QString::number(mask, 16); QString kaka = "0x"+QString::number(mask, 16);
@ -1467,21 +1489,22 @@ void DigiSettingsPanel::ReadTriggerMap(){
enableSignalSlot = false; enableSignalSlot = false;
cbAllEvtTrigger->setCurrentIndex(cbbEvtTrigger[ID][MaxNumberOfChannel]->currentIndex()); cbAllEvtTrigger[ID]->setCurrentIndex(cbbEvtTrigger[ID][MaxNumberOfChannel]->currentIndex());
cbAllWaveTrigger->setCurrentIndex(cbbWaveTrigger[ID][MaxNumberOfChannel]->currentIndex()); cbAllWaveTrigger[ID]->setCurrentIndex(cbbWaveTrigger[ID][MaxNumberOfChannel]->currentIndex());
cbAllCoinMask->setCurrentIndex(cbbCoinMask[ID][MaxNumberOfChannel]->currentIndex()); cbAllCoinMask[ID]->setCurrentIndex(cbbCoinMask[ID][MaxNumberOfChannel]->currentIndex());
cbAllAntiCoinMask->setCurrentIndex(cbbAntiCoinMask[ID][MaxNumberOfChannel]->currentIndex()); cbAllAntiCoinMask[ID]->setCurrentIndex(cbbAntiCoinMask[ID][MaxNumberOfChannel]->currentIndex());
sbAllCoinLength->setValue(spbCoinLength[ID][MaxNumberOfChannel]->value()); sbAllCoinLength[ID]->setValue(spbCoinLength[ID][MaxNumberOfChannel]->value());
for( int ch = 0; ch < (int) digi[ID]->GetNChannels(); ch ++){ for( int ch = 0; ch < (int) digi[ID]->GetNChannels(); ch ++){
unsigned long mask = std::stoul(digi[ID]->GetSettingValue(PHA::CH::ChannelsTriggerMask, ch)); bool ok;
unsigned long mask = QString::fromStdString(digi[ID]->GetSettingValue(PHA::CH::ChannelsTriggerMask, ch)).toULong(&ok, 16);
for( int k = 0; k < (int) digi[ID]->GetNChannels(); k ++ ){ for( int k = 0; k < (int) digi[ID]->GetNChannels(); k ++ ){
trgMapClickStatus[ch][k] = ( (mask >> k) & 0x1 ); trgMapClickStatus[ID][ch][k] = ( (mask >> k) & 0x1 );
if( (mask >> k) & 0x1 ){ if( (mask >> k) & 0x1 ){
trgMap[ch][k]->setStyleSheet("background-color: red;"); trgMap[ID][ch][k]->setStyleSheet("background-color: red;");
}else{ }else{
trgMap[ch][k]->setStyleSheet(""); trgMap[ID][ch][k]->setStyleSheet("");
} }
} }
} }
@ -1502,29 +1525,29 @@ void DigiSettingsPanel::EnableControl(){
bool enable = !digi[ID]->IsAcqOn(); bool enable = !digi[ID]->IsAcqOn();
digiBox->setEnabled(enable); digiBox[ID]->setEnabled(enable);
if( digi[ID]->GetFPGATyep() == "DPP_PHA") VGABox->setEnabled(enable); if( digi[ID]->GetFPGAType() == "DPP_PHA") VGABox[ID]->setEnabled(enable);
if( ckbGlbTrgSource[ID][3]->isChecked() ) testPulseBox->setEnabled(enable); if( ckbGlbTrgSource[ID][3]->isChecked() ) testPulseBox[ID]->setEnabled(enable);
box1->setEnabled(enable); box1[ID]->setEnabled(enable);
box3->setEnabled(enable); box3[ID]->setEnabled(enable);
box4->setEnabled(enable); box4[ID]->setEnabled(enable);
box5->setEnabled(enable); box5[ID]->setEnabled(enable);
box6->setEnabled(enable); box6[ID]->setEnabled(enable);
for( int i = 0; i < nDigi; i++){ bnReadSettngs[ID]->setEnabled(enable);
bnReadSettngs[i]->setEnabled(enable); bnResetBd[ID]->setEnabled(enable);
bnResetBd[i]->setEnabled(enable); bnDefaultSetting[ID]->setEnabled(enable);
bnDefaultSetting[i]->setEnabled(enable); bnSaveSettings[ID]->setEnabled(enable);
bnSaveSettings[i]->setEnabled(enable); bnLoadSettings[ID]->setEnabled(enable);
bnLoadSettings[i]->setEnabled(enable); bnClearData[ID]->setEnabled(enable);
bnClearData[i]->setEnabled(enable); bnArmACQ[ID]->setEnabled(enable);
bnArmACQ[i]->setEnabled(enable); bnDisarmACQ[ID]->setEnabled(enable);
bnDisarmACQ[i]->setEnabled(enable); bnSoftwareStart[ID]->setEnabled(enable);
bnSoftwareStart[i]->setEnabled(enable); bnSoftwareStop[ID]->setEnabled(enable);
bnSoftwareStop[i]->setEnabled(enable);
}
QVector<QTabWidget*> tempArray = {inputTab, trapTab, probeTab, otherTab, triggerTab }; if( digi[ID]->GetFPGAType() != "DPP_PHA" || digi[ID]->GetModelName() != "VX2745" ) VGABox[ID]->setEnabled(false);
QVector<QTabWidget*> tempArray = {inputTab[ID], trapTab[ID], probeTab[ID], otherTab[ID], triggerTab[ID] };
for( int k = 0; k < tempArray.size(); k++){ for( int k = 0; k < tempArray.size(); k++){
for( int i = 0; i < tempArray[k]->count(); i++) { for( int i = 0; i < tempArray[k]->count(); i++) {
@ -1537,7 +1560,7 @@ void DigiSettingsPanel::EnableControl(){
} }
} }
} }
triggerMapTab->setEnabled(enable); triggerMapTab[ID]->setEnabled(enable);
icBox1->setEnabled(enable); icBox1->setEnabled(enable);
icBox2->setEnabled(enable); icBox2->setEnabled(enable);
@ -1654,13 +1677,13 @@ void DigiSettingsPanel::ShowSettingsToPanel(){
result = QString::fromStdString(digi[ID]->GetSettingValue(PHA::DIG::GlobalTriggerSource)); result = QString::fromStdString(digi[ID]->GetSettingValue(PHA::DIG::GlobalTriggerSource));
resultList = result.remove(QChar(' ')).split("|"); resultList = result.remove(QChar(' ')).split("|");
testPulseBox->setEnabled(false); testPulseBox[ID]->setEnabled(false);
for( int j = 0; j < (int) PHA::DIG::StartSource.GetAnswers().size(); j++){ for( int j = 0; j < (int) PHA::DIG::StartSource.GetAnswers().size(); j++){
ckbGlbTrgSource[ID][j]->setChecked(false); ckbGlbTrgSource[ID][j]->setChecked(false);
for( int i = 0; i < resultList.count(); i++){ for( int i = 0; i < resultList.count(); i++){
if( resultList[i] == QString::fromStdString((PHA::DIG::GlobalTriggerSource.GetAnswers())[j].first) ) { if( resultList[i] == QString::fromStdString((PHA::DIG::GlobalTriggerSource.GetAnswers())[j].first) ) {
ckbGlbTrgSource[ID][j]->setChecked(true); ckbGlbTrgSource[ID][j]->setChecked(true);
if( resultList[i] == "TestPulse" ) testPulseBox->setEnabled(true); if( resultList[i] == "TestPulse" ) testPulseBox[ID]->setEnabled(true);
} }
} }
} }
@ -1820,13 +1843,13 @@ void DigiSettingsPanel::SetGlobalTriggerSource(){
if( !enableSignalSlot ) return; if( !enableSignalSlot ) return;
std::string value = ""; std::string value = "";
testPulseBox->setEnabled(false); testPulseBox[ID]->setEnabled(false);
for( int i = 0; i < (int) PHA::DIG::GlobalTriggerSource.GetAnswers().size(); i++){ for( int i = 0; i < (int) PHA::DIG::GlobalTriggerSource.GetAnswers().size(); i++){
if( ckbGlbTrgSource[ID][i]->isChecked() ){ if( ckbGlbTrgSource[ID][i]->isChecked() ){
//printf("----- %s \n", DIGIPARA::DIG::StartSource.GetAnswers()[i].first.c_str()); //printf("----- %s \n", DIGIPARA::DIG::StartSource.GetAnswers()[i].first.c_str());
if( value != "" ) value += " | "; if( value != "" ) value += " | ";
value += PHA::DIG::GlobalTriggerSource.GetAnswers()[i].first; value += PHA::DIG::GlobalTriggerSource.GetAnswers()[i].first;
if( PHA::DIG::GlobalTriggerSource.GetAnswers()[i].first == "TestPulse" ) testPulseBox->setEnabled(true); if( PHA::DIG::GlobalTriggerSource.GetAnswers()[i].first == "TestPulse" ) testPulseBox[ID]->setEnabled(true);
} }
} }
@ -2203,12 +2226,21 @@ void DigiSettingsPanel::ReadChannelSetting(int cbIndex){
enableSignalSlot = true; enableSignalSlot = true;
} }
bool DigiSettingsPanel::CheckDigitizersCanCopy(){
int digiFromIndex = cbCopyDigiFrom->currentIndex();
int digiToIndex = cbCopyDigiTo->currentIndex();
if( digi[digiFromIndex]->GetModelName() != digi[digiToIndex]->GetModelName() ) return false;
if( digi[digiFromIndex]->GetFPGAType() != digi[digiToIndex]->GetFPGAType() ) return false;
if( digi[digiFromIndex]->GetFPGAVersion() != digi[digiToIndex]->GetFPGAVersion() ) return false;
return true;
}
void DigiSettingsPanel::CheckRadioAndCheckedButtons(){ void DigiSettingsPanel::CheckRadioAndCheckedButtons(){
int chFromIndex = -1; int chFromIndex = -1;
for( int i = 0 ; i < MaxNumberOfChannel ; i++){ for( int i = 0 ; i < MaxNumberOfChannel ; i++){
rbCopyChFrom[i]->setStyleSheet(""); rbCopyChFrom[i]->setStyleSheet("");
if( rbCopyChFrom[i]->isChecked() ){ if( rbCopyChFrom[i]->isChecked() && cbCopyDigiFrom->currentIndex() == cbCopyDigiTo->currentIndex()){
chFromIndex = i; chFromIndex = i;
rbCopyChFrom[i]->setStyleSheet("color : red;"); rbCopyChFrom[i]->setStyleSheet("color : red;");
chkChTo[i]->setChecked(false); chkChTo[i]->setChecked(false);
@ -2217,7 +2249,7 @@ void DigiSettingsPanel::CheckRadioAndCheckedButtons(){
} }
for( int i = 0 ; i < MaxNumberOfChannel ; i++) chkChTo[i]->setEnabled(true); for( int i = 0 ; i < MaxNumberOfChannel ; i++) chkChTo[i]->setEnabled(true);
if( chFromIndex >= 0 ) chkChTo[chFromIndex]->setEnabled(false); if( chFromIndex >= 0 && cbCopyDigiFrom->currentIndex() == cbCopyDigiTo->currentIndex() ) chkChTo[chFromIndex]->setEnabled(false);
bool isToIndexCleicked = false; bool isToIndexCleicked = false;
for( int i = 0 ; i < MaxNumberOfChannel ; i++){ for( int i = 0 ; i < MaxNumberOfChannel ; i++){
@ -2230,15 +2262,17 @@ void DigiSettingsPanel::CheckRadioAndCheckedButtons(){
} }
pbCopyChannel->setEnabled(chFromIndex >= 0 && isToIndexCleicked ); pbCopyChannel->setEnabled(chFromIndex >= 0 && isToIndexCleicked );
} }
bool DigiSettingsPanel::CopyChannelSettings(int digiFrom, int chFrom, int digiTo, int chTo){ bool DigiSettingsPanel::CopyChannelSettings(int digiFrom, int chFrom, int digiTo, int chTo){
if( !CheckDigitizersCanCopy() ) return false;
SendLogMsg("Copy Settings from DIG:" + QString::number(digi[digiFrom]->GetSerialNumber()) + ", CH:" + QString::number(chFrom) + " ---> DIG:" + QString::number(digi[digiTo]->GetSerialNumber()) + ", CH:" + QString::number(chTo)); SendLogMsg("Copy Settings from DIG:" + QString::number(digi[digiFrom]->GetSerialNumber()) + ", CH:" + QString::number(chFrom) + " ---> DIG:" + QString::number(digi[digiTo]->GetSerialNumber()) + ", CH:" + QString::number(chTo));
for( int k = 0; k < (int) PHA::CH::AllSettings.size(); k ++){ for( int k = 0; k < (int) PHA::CH::AllSettings.size(); k ++){
if( PHA::CH::AllSettings[k].ReadWrite() != RW::ReadWrite ) continue; if( PHA::CH::AllSettings[k].ReadWrite() != RW::ReadWrite ) continue;
if( !digi[digiTo]->WriteValue( PHA::CH::AllSettings[k], digi[digiFrom]->GetSettingValue(PHA::CH::AllSettings[k], chFrom) , chTo ) ){ std::string haha = digi[digiFrom]->GetSettingValue(PHA::CH::AllSettings[k], chFrom);
if( !digi[digiTo]->WriteValue( PHA::CH::AllSettings[k], haha , chTo ) ){
SendLogMsg("something wrong when copying setting : " + QString::fromStdString( PHA::CH::AllSettings[k].GetPara())) ; SendLogMsg("something wrong when copying setting : " + QString::fromStdString( PHA::CH::AllSettings[k].GetPara())) ;
return false; return false;
break; break;
@ -2251,6 +2285,8 @@ bool DigiSettingsPanel::CopyBoardSettings(){
int digiFromIndex = cbCopyDigiFrom->currentIndex(); int digiFromIndex = cbCopyDigiFrom->currentIndex();
int digiToIndex = cbCopyDigiTo->currentIndex(); int digiToIndex = cbCopyDigiTo->currentIndex();
if( !CheckDigitizersCanCopy() ) return false;
SendLogMsg("Copy Settings from DIG:" + QString::number(digi[digiFromIndex]->GetSerialNumber()) + " to DIG:" + QString::number(digi[digiToIndex]->GetSerialNumber())); SendLogMsg("Copy Settings from DIG:" + QString::number(digi[digiFromIndex]->GetSerialNumber()) + " to DIG:" + QString::number(digi[digiToIndex]->GetSerialNumber()));
for( int i = 0; i < MaxNumberOfChannel; i++){ for( int i = 0; i < MaxNumberOfChannel; i++){
if( chkChTo[i]->isChecked() ){ if( chkChTo[i]->isChecked() ){
@ -2266,8 +2302,6 @@ bool DigiSettingsPanel::CopyBoardSettings(){
} }
} }
SendLogMsg("------ done"); SendLogMsg("------ done");
ID = digiToIndex;
ShowSettingsToPanel();
return true; return true;
} }

View File

@ -57,37 +57,37 @@ private:
unsigned short ID; // index for digitizer; unsigned short ID; // index for digitizer;
//------------ Layout/GroupBox //------------ Layout/GroupBox
QGroupBox * digiBox; QGroupBox * digiBox[MaxNumberOfDigitizer];
QGroupBox * VGABox; QGroupBox * VGABox[MaxNumberOfDigitizer];
QGroupBox * testPulseBox; QGroupBox * testPulseBox[MaxNumberOfDigitizer];
QGroupBox * box0; QGroupBox * box0[MaxNumberOfDigitizer];
QGroupBox * box1; QGroupBox * box1[MaxNumberOfDigitizer];
QGroupBox * box3; QGroupBox * box3[MaxNumberOfDigitizer];
QGroupBox * box4; QGroupBox * box4[MaxNumberOfDigitizer];
QGroupBox * box5; QGroupBox * box5[MaxNumberOfDigitizer];
QGroupBox * box6; QGroupBox * box6[MaxNumberOfDigitizer];
QTabWidget * inputTab;
QTabWidget * trapTab;
QTabWidget * probeTab;
QTabWidget * otherTab;
QTabWidget * triggerTab;
QTabWidget * triggerMapTab;
QTabWidget * ICTab; // inquiry and copy
QGroupBox * icBox1;
QGroupBox * icBox2;
QTabWidget * inputTab[MaxNumberOfDigitizer];
QTabWidget * trapTab[MaxNumberOfDigitizer];
QTabWidget * probeTab[MaxNumberOfDigitizer];
QTabWidget * otherTab[MaxNumberOfDigitizer];
QTabWidget * triggerTab[MaxNumberOfDigitizer];
QTabWidget * triggerMapTab[MaxNumberOfDigitizer];
bool enableSignalSlot; bool enableSignalSlot;
//---------------- Inquiry and copy //---------------- Inquiry and copy
QTabWidget * ICTab; // inquiry and copy
RComboBox * cbIQDigi; RComboBox * cbIQDigi;
RComboBox * cbBdSettings; RComboBox * cbBdSettings;
RComboBox * cbIQCh; RComboBox * cbIQCh;
RComboBox * cbChSettings; RComboBox * cbChSettings;
QGroupBox * icBox1;
QGroupBox * icBox2;
QLineEdit * leBdSettingsType; QLineEdit * leBdSettingsType;
QLineEdit * leBdSettingsRead; QLineEdit * leBdSettingsRead;
QLineEdit * leBdSettingsUnit; QLineEdit * leBdSettingsUnit;
@ -157,13 +157,13 @@ private:
RSpinBox * VGA[MaxNumberOfDigitizer][4]; RSpinBox * VGA[MaxNumberOfDigitizer][4];
//--------------- trigger map //--------------- trigger map
RComboBox * cbAllEvtTrigger; RComboBox * cbAllEvtTrigger[MaxNumberOfDigitizer];
RComboBox * cbAllWaveTrigger; RComboBox * cbAllWaveTrigger[MaxNumberOfDigitizer];
RComboBox * cbAllCoinMask; RComboBox * cbAllCoinMask[MaxNumberOfDigitizer];
RComboBox * cbAllAntiCoinMask; RComboBox * cbAllAntiCoinMask[MaxNumberOfDigitizer];
RSpinBox * sbAllCoinLength; RSpinBox * sbAllCoinLength[MaxNumberOfDigitizer];
QPushButton * trgMap[MaxNumberOfChannel][MaxNumberOfChannel]; QPushButton * trgMap[MaxNumberOfDigitizer][MaxNumberOfChannel][MaxNumberOfChannel];
bool trgMapClickStatus[MaxNumberOfChannel][MaxNumberOfChannel]; bool trgMapClickStatus[MaxNumberOfDigitizer][MaxNumberOfChannel][MaxNumberOfChannel];
//--------------- Channel status //--------------- Channel status
QPushButton * chStatus[MaxNumberOfDigitizer][MaxNumberOfChannel][9]; QPushButton * chStatus[MaxNumberOfDigitizer][MaxNumberOfChannel][9];
@ -249,6 +249,7 @@ private:
void ReadBoardSetting(int cbIndex); void ReadBoardSetting(int cbIndex);
void ReadChannelSetting(int cbIndex); void ReadChannelSetting(int cbIndex);
bool CheckDigitizersCanCopy();
void CheckRadioAndCheckedButtons(); void CheckRadioAndCheckedButtons();
bool CopyChannelSettings(int digiFrom, int chFrom, int digiTo, int chTo); bool CopyChannelSettings(int digiFrom, int chFrom, int digiTo, int chTo);
bool CopyBoardSettings(); bool CopyBoardSettings();

View File

@ -375,7 +375,7 @@ void MainWindow::StartACQ(){
if( influx ){ if( influx ){
influx->ClearDataPointsBuffer(); influx->ClearDataPointsBuffer();
if( chkSaveRun->isChecked() ){ if( chkSaveRun->isChecked() ){
influx->AddDataPoint("RunID start=1,value=" + std::to_string(runID) + ",expName=\"" + expName.toStdString()+ + "\",comment=\"" + startComment.replace(' ', '_').toStdString() + "\""); influx->AddDataPoint("RunID,start=1 value=" + std::to_string(runID) + ",expName=\"" + expName.toStdString()+ + "\",comment=\"" + startComment.replace(' ', '_').toStdString() + "\"");
} }
influx->AddDataPoint("StartStop value=1"); influx->AddDataPoint("StartStop value=1");
influx->WriteData(DatabaseName.toStdString()); influx->WriteData(DatabaseName.toStdString());
@ -449,7 +449,7 @@ void MainWindow::StopACQ(){
if( influx ){ if( influx ){
influx->ClearDataPointsBuffer(); influx->ClearDataPointsBuffer();
if( chkSaveRun->isChecked() ){ if( chkSaveRun->isChecked() ){
influx->AddDataPoint("RunID start=0,value=" + std::to_string(runID) + ",expName=\"" + expName.toStdString()+ "\",comment=\"" + stopComment.replace(' ', '_').toStdString() + "\""); influx->AddDataPoint("RunID,start=0 value=" + std::to_string(runID) + ",expName=\"" + expName.toStdString()+ "\",comment=\"" + stopComment.replace(' ', '_').toStdString() + "\"");
} }
influx->AddDataPoint("StartStop value=0"); influx->AddDataPoint("StartStop value=0");
influx->WriteData(DatabaseName.toStdString()); influx->WriteData(DatabaseName.toStdString());
@ -546,6 +546,8 @@ void MainWindow::OpenDigitizers(){
digi = new Digitizer2Gen*[nDigi]; digi = new Digitizer2Gen*[nDigi];
readDataThread = new ReadDataThread*[nDigi]; readDataThread = new ReadDataThread*[nDigi];
int nDigiConnected = 0;
for( int i = 0; i < nDigi; i++){ for( int i = 0; i < nDigi; i++){
LogMsg("IP : " + IPList[i] + " | " + QString::number(i+1) + "/" + QString::number(nDigi)); LogMsg("IP : " + IPList[i] + " | " + QString::number(i+1) + "/" + QString::number(nDigi));
@ -578,15 +580,7 @@ void MainWindow::OpenDigitizers(){
digi[i]->ReadAllSettings(); digi[i]->ReadAllSettings();
SetUpScalar(); nDigiConnected ++;
bnStartACQ->setEnabled(true);
bnStopACQ->setEnabled(false);
bnOpenScope->setEnabled(true);
chkSaveRun->setEnabled(true);
bnOpenDigitizers->setEnabled(false);
bnOpenDigitizers->setStyleSheet("");
cbAutoRun->setEnabled(true);
bnOpenScalar->setEnabled(true);
for( int ch = 0; ch < (int) digi[i]->GetNChannels(); ch++) { for( int ch = 0; ch < (int) digi[i]->GetNChannels(); ch++) {
oldTimeStamp[i][ch] = 0; oldTimeStamp[i][ch] = 0;
@ -600,6 +594,19 @@ void MainWindow::OpenDigitizers(){
} }
} }
if( nDigiConnected > 0 ){
SetUpScalar();
bnStartACQ->setEnabled(true);
bnStopACQ->setEnabled(false);
bnOpenScope->setEnabled(true);
chkSaveRun->setEnabled(true);
bnOpenDigitizers->setEnabled(false);
bnOpenDigitizers->setStyleSheet("");
cbAutoRun->setEnabled(true);
bnOpenScalar->setEnabled(true);
}
bnDigiSettings->setEnabled(true); bnDigiSettings->setEnabled(true);
bnCloseDigitizers->setEnabled(true); bnCloseDigitizers->setEnabled(true);
@ -831,7 +838,7 @@ void MainWindow::UpdateScalar(){
unsigned long kaka = std::stoul(kakaStr.c_str()) ; unsigned long kaka = std::stoul(kakaStr.c_str()) ;
unsigned long time = std::stoul(timeStr.c_str()) ; unsigned long time = std::stoul(timeStr.c_str()) ;
leTrigger[iDigi][ch]->setText(QString::fromStdString(haha[ch])); leTrigger[iDigi][ch]->setText(QString::fromStdString(haha[ch]));
if( oldTimeStamp[iDigi][ch] > 0 && time > oldTimeStamp[iDigi][ch]){ if( oldTimeStamp[iDigi][ch] > 0 && time - oldTimeStamp[iDigi][ch] > 1e9){
acceptRate[ch] = (kaka - oldSavedCount[iDigi][ch]) * 1e9 *1.0 / (time - oldTimeStamp[iDigi][ch]); acceptRate[ch] = (kaka - oldSavedCount[iDigi][ch]) * 1e9 *1.0 / (time - oldTimeStamp[iDigi][ch]);
}else{ }else{
acceptRate[ch] = 0; acceptRate[ch] = 0;