diff --git a/ClassDigitizer2Gen.cpp b/ClassDigitizer2Gen.cpp index 79fbd37..9f374c9 100644 --- a/ClassDigitizer2Gen.cpp +++ b/ClassDigitizer2Gen.cpp @@ -6,7 +6,7 @@ Digitizer2Gen::Digitizer2Gen(){ } Digitizer2Gen::~Digitizer2Gen(){ - printf("========Digitizer2Gen::%s \n",__func__); + printf("========Digitizer2Gen::%s (%d)\n",__func__, serialNumber); if(isConnected ) CloseDigitizer(); } @@ -43,9 +43,10 @@ void Digitizer2Gen::Initialization(){ } -void Digitizer2Gen::SetDummy(){ +void Digitizer2Gen::SetDummy(unsigned short sn){ isDummy = true; + serialNumber = sn; nChannels = 64; } diff --git a/ClassDigitizer2Gen.h b/ClassDigitizer2Gen.h index 027bb2c..e690b46 100644 --- a/ClassDigitizer2Gen.h +++ b/ClassDigitizer2Gen.h @@ -66,7 +66,7 @@ class Digitizer2Gen { unsigned short GetSerialNumber() {return serialNumber;} - void SetDummy(); + void SetDummy(unsigned short sn); bool IsDummy() {return isDummy;} int OpenDigitizer(const char * url); diff --git a/mainwindow.cpp b/mainwindow.cpp index 16435e3..f859f4a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -28,18 +28,28 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ setWindowIcon(icon); nDigi = 0; - digiSerialNum.clear(); digiSetting = NULL; readDataThread = NULL; - scope = NULL; - + + { + scalar = new QMainWindow(this); + scalar->setWindowTitle("Scalar"); + scalar->setGeometry(0, 0, 1000, 800); + + QWidget * layoutWidget = new QWidget(scalar); + scalar->setCentralWidget(layoutWidget); + scalarLayout = new QGridLayout(layoutWidget); + scalarLayout->setSpacing(0); + + leTrigger = NULL; + } + QWidget * mainLayoutWidget = new QWidget(this); setCentralWidget(mainLayoutWidget); QVBoxLayout * layoutMain = new QVBoxLayout(mainLayoutWidget); mainLayoutWidget->setLayout(layoutMain); - {//====================== General QGroupBox * box1 = new QGroupBox("General", mainLayoutWidget); layoutMain->addWidget(box1); @@ -113,6 +123,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ leRawDataPath->setReadOnly(true); leRawDataPath->setStyleSheet("background-color: #F3F3F3;"); + bnOpenScalar = new QPushButton("Open Scalar", this); + bnOpenScalar->setEnabled(false); + connect(bnOpenScalar, &QPushButton::clicked, this, &MainWindow::OpenScaler); + bnStartACQ = new QPushButton("Start ACQ", this); bnStartACQ->setEnabled(false); connect(bnStartACQ, &QPushButton::clicked, this, &MainWindow::StartACQ); @@ -134,7 +148,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ runComment->setReadOnly(true); layout2->addWidget(lbRawDataPath, 0, 0); - layout2->addWidget(leRawDataPath, 0, 1, 1, 3); + layout2->addWidget(leRawDataPath, 0, 1, 1, 2); + layout2->addWidget(bnOpenScalar, 0, 3); layout2->addWidget(lbRunID, 1, 0); layout2->addWidget(leRunID, 1, 1); @@ -187,6 +202,7 @@ MainWindow::~MainWindow(){ //delete logInfo; printf("- %s\n", __func__); + DeleteTriggerLineEdit(); CloseDigitizers(); //---- need manually delete @@ -263,8 +279,6 @@ void MainWindow::OpenDigitizers(){ if(digi[i]->IsConnected()){ - digiSerialNum.push_back(digi[i]->GetSerialNumber()); - LogMsg("Opened digitizer : " + QString::number(digi[i]->GetSerialNumber()) + ""); bnStartACQ->setEnabled(true); bnStopACQ->setEnabled(false); @@ -274,9 +288,8 @@ void MainWindow::OpenDigitizers(){ connect(readDataThread[i], &ReadDataThread::sendMsg, this, &MainWindow::LogMsg); }else{ - LogMsg("Cannot open digitizer. Use a dummy with serial number " + QString::number(i)); - digi[i]->SetDummy(); - digiSerialNum.push_back(i); + digi[i]->SetDummy(i); + LogMsg("Cannot open digitizer. Use a dummy with serial number " + QString::number(i) + " and " + QString::number(digi[i]->GetNChannels()) + " ch."); readDataThread[i] = NULL; } @@ -287,26 +300,23 @@ void MainWindow::OpenDigitizers(){ bnOpenDigitizers->setEnabled(false); bnOpenDigitizers->setStyleSheet(""); + SetUpScalar(); + bnOpenScalar->setEnabled(true); } void MainWindow::CloseDigitizers(){ if( digi == NULL) return; + + scalar->close(); + DeleteTriggerLineEdit(); // this use digi->GetNChannels(); for( int i = 0; i < nDigi; i++){ if( digi[i] == NULL) return; digi[i]->CloseDigitizer(); delete digi[i]; - LogMsg("Closed Digitizer : " + QString::number(digiSerialNum[0])); - - digiSerialNum.clear(); - - bnOpenDigitizers->setEnabled(true); - bnCloseDigitizers->setEnabled(false); - bnDigiSettings->setEnabled(false); - bnStartACQ->setEnabled(false); - bnStopACQ->setEnabled(false); + LogMsg("Closed Digitizer : " + QString::number(digi[i]->GetSerialNumber())); if( digiSetting != NULL ) digiSetting->close(); @@ -321,7 +331,15 @@ void MainWindow::CloseDigitizers(){ digi = NULL; readDataThread = NULL; + + bnOpenDigitizers->setEnabled(true); + bnCloseDigitizers->setEnabled(false); + bnDigiSettings->setEnabled(false); + bnStartACQ->setEnabled(false); + bnStopACQ->setEnabled(false); bnOpenDigitizers->setFocus(); + bnOpenScalar->setEnabled(false); + } //^###################################################################### Open Scope @@ -329,7 +347,7 @@ void MainWindow::OpenScope(){ if( digi ){ if( !scope ){ - scope = new Scope(digi, nDigi, readDataThread, this); + scope = new Scope(digi, nDigi, readDataThread); connect(scope, &Scope::CloseWindow, this, [=](){ bnStartACQ->setEnabled(true); }); @@ -354,6 +372,69 @@ void MainWindow::OpenDigitizersSettings(){ } } +//^###################################################################### Open Scaler, when DAQ is running +//TODO ################################# +void MainWindow::OpenScaler(){ + scalar->show(); +} + +void MainWindow::SetUpScalar(){ + + scalar->setGeometry(0, 0, 10 + nDigi * 100, 1000); + + int rowID = 0; + for( int ch = 0; ch < MaxNumberOfChannel; ch++){ + + if( ch == 0 ){ + QLabel * lbCH_H = new QLabel("Ch", scalar); scalarLayout->addWidget(lbCH_H, rowID, 0); + } + + rowID ++; + QLabel * lbCH = new QLabel(QString::number(ch), scalar); + lbCH->setAlignment(Qt::AlignCenter); + scalarLayout->addWidget(lbCH, rowID, 0); + } + + leTrigger = new QLineEdit**[nDigi]; + for( int iDigi = 0; iDigi < nDigi; iDigi++){ + rowID = 0; + leTrigger[iDigi] = new QLineEdit *[digi[iDigi]->GetNChannels()]; + for( int ch = 0; ch < MaxNumberOfChannel; ch++){ + + if( ch == 0 ){ + QLabel * lbDigi = new QLabel("Digi-" + QString::number(digi[iDigi]->GetSerialNumber()), scalar); + lbDigi->setAlignment(Qt::AlignCenter); + scalarLayout->addWidget(lbDigi, rowID, iDigi+1); + } + + rowID ++; + + leTrigger[iDigi][ch] = new QLineEdit(); + leTrigger[iDigi][ch]->setReadOnly(true); + scalarLayout->addWidget(leTrigger[iDigi][ch], rowID, iDigi+1); + } + } + +} + +void MainWindow::DeleteTriggerLineEdit(){ + + printf("__________ %s \n", __func__); + + if( leTrigger == NULL ) return; + + for( int i = 0; i < nDigi; i++){ + for( int ch = 0; ch < digi[i]->GetNChannels(); ch ++){ + delete leTrigger[i][ch]; + } + delete [] leTrigger[i]; + } + delete [] leTrigger; + leTrigger = NULL; + printf("end of ____ %s \n", __func__); + +} + //^###################################################################### Program Settings void MainWindow::ProgramSettings(){ @@ -460,7 +541,6 @@ void MainWindow::ProgramSettings(){ QObject::connect(button2, &QPushButton::clicked, this, [=](){this->LogMsg("Cancel Program Settings");}); QObject::connect(button2, &QPushButton::clicked, &dialog, &QDialog::reject); - layout->setColumnStretch(0, 2); layout->setColumnStretch(1, 2); layout->setColumnStretch(2, 2); @@ -540,24 +620,7 @@ bool MainWindow::OpenProgramSettings(){ if( ret ){ - //------- decode IPListStr - nDigi = 0; - QStringList parts = IPListStr.split("."); - QString IPDomain = parts[0] + "." + parts[1] + "." + parts[2] + "."; - parts = parts[3].split(","); - for(int i = 0; i < parts.size(); i++){ - if( parts[i].indexOf("-") != -1){ - QStringList haha = parts[i].split("-"); - for( int j = haha[0].toInt(); j <= haha.last().toInt(); j++){ - IPList << IPDomain + QString::number(j); - } - }else{ - IPList << IPDomain + parts[i]; - } - } - - nDigi = IPList.size(); - + DecodeIPList(); return true; }else{ @@ -569,6 +632,26 @@ bool MainWindow::OpenProgramSettings(){ } } +void MainWindow::DecodeIPList(){ + //------- decode IPListStr + nDigi = 0; + IPList.clear(); + QStringList parts = IPListStr.split("."); + QString IPDomain = parts[0] + "." + parts[1] + "." + parts[2] + "."; + parts = parts[3].split(","); + for(int i = 0; i < parts.size(); i++){ + if( parts[i].indexOf("-") != -1){ + QStringList haha = parts[i].split("-"); + for( int j = haha[0].toInt(); j <= haha.last().toInt(); j++){ + IPList << IPDomain + QString::number(j); + } + }else{ + IPList << IPDomain + parts[i]; + } + } + nDigi = IPList.size(); +} + void MainWindow::SaveProgramSettings(){ IPListStr = lIPDomain->text(); @@ -600,6 +683,8 @@ void MainWindow::SaveProgramSettings(){ bnNewExp->setEnabled(true); bnOpenDigitizers->setEnabled(true); + DecodeIPList(); + OpenExpSettings(); } diff --git a/mainwindow.h b/mainwindow.h index eeb42f2..a481f6f 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -42,9 +42,14 @@ private slots: void OpenScope(); void OpenDigitizersSettings(); + void OpenScaler(); + void SetUpScalar(); + void DeleteTriggerLineEdit(); + void ProgramSettings(); bool OpenProgramSettings(); void SaveProgramSettings(); + void DecodeIPList(); void OpenDirectory(int id); void SetupNewExp(); @@ -54,7 +59,10 @@ private slots: void CreateRawDataFolderAndLink(const QString newExpName); void closeEvent(QCloseEvent * event){ + printf("___ %s \n", __func__); + printf("+++++++++++++++ digiSetting %p\n", digiSetting); if( digiSetting != NULL ) digiSetting->close(); + printf("+++++++++++++++ scope %p\n", scope); if( scope != NULL ) scope->close(); event->accept(); } @@ -78,11 +86,20 @@ private: Scope * scope; QPushButton * bnOpenScope; + //@----- scalar; + QMainWindow * scalar; + QPushButton * bnOpenScalar; + QLineEdit *** leTrigger; // need to delete manually + QGridLayout * scalarLayout; + //@------ ACQ things QPushButton * bnStartACQ; QPushButton * bnStopACQ; QLineEdit * leRunID; QLineEdit * leRawDataPath; + ReadDataThread ** readDataThread; + void StartACQ(); + void StopACQ(); DigiSettings * digiSetting; @@ -90,12 +107,6 @@ private: static Digitizer2Gen ** digi; unsigned short nDigi; - std::vector digiSerialNum; - - void StartACQ(); - void StopACQ(); - - ReadDataThread ** readDataThread; void LogMsg(QString msg); bool logMsgHTMLMode = true; diff --git a/scope.cpp b/scope.cpp index efa6e29..a9f3850 100644 --- a/scope.cpp +++ b/scope.cpp @@ -338,7 +338,6 @@ Scope::Scope(Digitizer2Gen **digi, unsigned int nDigi, ReadDataThread ** readDat layout->addWidget(bnClose, rowID, 5); connect(bnClose, &QPushButton::clicked, this, &Scope::close); - show(); StartScope();