diff --git a/slsDetectorGui/forms/form_tab_advanced.ui b/slsDetectorGui/forms/form_tab_advanced.ui index 60384eccb..7de324bdb 100644 --- a/slsDetectorGui/forms/form_tab_advanced.ui +++ b/slsDetectorGui/forms/form_tab_advanced.ui @@ -51,11 +51,70 @@ QTabWidget::North - 3 + 2 Qt::ElideLeft + + + Logs + + + + + 5 + 10 + 746 + 66 + + + + Calibration Logs + + + + + 25 + 20 + 313 + 31 + + + + + 42 + + + + + + 0 + 0 + + + + Energy Calibration + + + + + + + + 0 + 0 + + + + Angular Calibration + + + + + + + Trimming @@ -682,130 +741,129 @@ An extension given by the modules serial number will be attached. - - - Logs - - - - - 5 - 10 - 746 - 66 - - - - Calibration Logs - - - - - 25 - 20 - 313 - 31 - - - - - 42 - - - - - - 0 - 0 - - - - Energy Calibration - - - - - - - - 0 - 0 - - - - Angular Calibration - - - - - - - - Readout + Region of Interest - + 10 - 10 - 136 - 31 + 50 + 736 + 246 - - - 42 + + QFrame::NoFrame + + + true + + + + + 0 + 0 + 736 + 246 + + + + 1 + + + 15 + + + + + + + + 10 + 5 + 736 + 41 + + + - - - ADC: - - - - - + - + 0 0 - - 5 + + Get ROI + + + + :/icons/images/download.png:/icons/images/download.png + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Set ROI + + + + :/icons/images/upload.png:/icons/images/upload.png + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Clear ROI + + + + :/icons/images/close.png:/icons/images/close.png - - - 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - All - - @@ -962,9 +1020,6 @@ An extension given by the modules serial number will be attached. - gridLayoutWidget_5 - dispFileName - gridLayoutWidget_7 @@ -1470,7 +1525,11 @@ An extension given by the modules serial number will be attached. - Set Receiver + Set Receiver + + + + :/icons/images/start.png:/icons/images/start.png @@ -1483,7 +1542,11 @@ An extension given by the modules serial number will be attached. - Configure MAC + Configure MAC + + + + :/icons/images/start.png:/icons/images/start.png diff --git a/slsDetectorGui/include/icons.qrc b/slsDetectorGui/include/icons.qrc index abb13ecf9..3b912dce3 100644 --- a/slsDetectorGui/include/icons.qrc +++ b/slsDetectorGui/include/icons.qrc @@ -15,5 +15,6 @@ ../images/stop.png ../images/leftArrow.png ../images/rightArrow.png + ../images/upload.png diff --git a/slsDetectorGui/include/qTabAdvanced.h b/slsDetectorGui/include/qTabAdvanced.h index b0961e192..896f9f53f 100644 --- a/slsDetectorGui/include/qTabAdvanced.h +++ b/slsDetectorGui/include/qTabAdvanced.h @@ -9,17 +9,18 @@ #define QTABADVANCED_H_ #include "qDefs.h" - +#include "sls_detector_defs.h" /** Form Header */ #include "ui_form_tab_advanced.h" /** Project Class Headers */ class multiSlsDetector; +class slsDetector; /** Qt Project Class Headers */ class qDrawPlot; /** Qt Include Header */ #include - +#include /** *@short sets up the advanced parameters */ @@ -52,14 +53,13 @@ private: */ void Initialization(); - + /** Add ROI Input + * @param num number of inputs to add + */ + void AddROIInput(int num); private slots: - /** Set ADC Readout - */ - void SetADCReadout(int i); - /** Enable/Disable Energy and Calibration Logs */ void SetLogs(); @@ -146,6 +146,26 @@ private slots: */ void Configuremac(); + /** Add ROI Input if the value changed in the last slot + */ + void AddROIInputSlot(){AddROIInput(1);}; + + /** Clears all the ROI inputs + */ + void clearROI(); + + /** Gets ROIs from detector and updates it + */ + void updateROIList(); + + /** Sets ROI in detector + */ + void setROI(); + + /** Clears ROI in detector + */ + void clearROIinDetector(); + private: /** The sls detector object */ multiSlsDetector *myDet; @@ -172,6 +192,23 @@ private: bool isEnergy; bool isAngular; + /**sls detector obejct*/ + slsDetector *det; + + + /** ROI */ + vector lblFromX; + vector spinFromX; + vector lblFromY; + vector spinFromY; + vector lblToX; + vector spinToX; + vector lblToY; + vector spinToY; + int numRois; + + + }; diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp index afde69957..4c4a5cd1f 100644 --- a/slsDetectorGui/src/qDetectorMain.cpp +++ b/slsDetectorGui/src/qDetectorMain.cpp @@ -101,13 +101,15 @@ void qDetectorMain::SetUpWidgetWindow(){ tabs = new MyTabWidget(this); layoutTabs->addWidget(tabs); + int numDet = myDet->getNumberOfDetectors(); + // creating all the other tab widgets tab_measurement = new qTabMeasurement (this, myDet,myPlot); cout<<"Measurement ready"<setEnabled(false); - comboADC->setEnabled(false); //Network lblIP->setEnabled(false); lblMAC->setEnabled(false); @@ -75,8 +72,6 @@ void qTabAdvanced::SetupWidgetWindow(){ case slsDetectorDefs::GOTTHARD: isEnergy = false; isAngular = true; - lblADC->setEnabled(true); - comboADC->setEnabled(true); lblIP->setEnabled(true); lblMAC->setEnabled(true); dispIP->setEnabled(true); @@ -142,6 +137,9 @@ void qTabAdvanced::SetupWidgetWindow(){ } + //updates roi + updateROIList(); + Initialization(); } @@ -194,8 +192,6 @@ void qTabAdvanced::Initialization(){ connect(comboOnline, SIGNAL(currentIndexChanged(int)), this, SLOT(SetOnline(int))); if(detType==slsDetectorDefs::GOTTHARD){ - //readout - connect(comboADC, SIGNAL(currentIndexChanged(int)), this, SLOT(SetADCReadout(int))); //network connect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int))); @@ -212,18 +208,11 @@ void qTabAdvanced::Initialization(){ } -} -//------------------------------------------------------------------------------------------------------------------------------------------------- - - -void qTabAdvanced::SetADCReadout(int i){ - - if(i==5) i=-1; - if(myDet->configureMAC(i)==slsDetectorDefs::FAIL) - qDefs::Message(qDefs::WARNING,"Could not configure mac","Advanced"); - else - qDefs::Message(qDefs::WARNING,"ADC Readout successfully set up","Advanced"); + //roi + connect(btnClearRoi, SIGNAL(clicked()), this, SLOT(clearROIinDetector())); + connect(btnGetRoi, SIGNAL(clicked()), this, SLOT(updateROIList())); + connect(btnSetRoi, SIGNAL(clicked()), this, SLOT(setROI())); } @@ -643,12 +632,7 @@ void qTabAdvanced::Configuremac(){ #ifdef VERBOSE cout << "Configuring Mac:" << endl; #endif - int adc = comboADC->currentIndex(); - if(adc==5) adc=-1; - myDet->configureMAC(adc); - // qDefs::Message(qDefs::WARNING,"Could not configure mac","Advanced"); - //else - // qDefs::Message(qDefs::WARNING,"ADC Readout successfully set up","Advanced"); + myDet->configureMAC(); qDefs::checkErrorMessage(myDet); } @@ -656,7 +640,234 @@ void qTabAdvanced::Configuremac(){ //------------------------------------------------------------------------------------------------------------------------------------------------- +void qTabAdvanced::updateROIList(){ +#ifdef VERYVERBOSE + cout<<"in updateROIList() " << endl; +#endif + clearROI(); + + int n,i; + slsDetectorDefs::ROI* temp = myDet->getROI(n); + + if((temp!=NULL)&&(n>0)){ + //assign into array, else it loses values cuz of memory + slsDetectorDefs::ROI allroi[n]; + for(i=0;isetValue(allroi[i].xmin); + spinFromY[i]->setValue(allroi[i].ymin); + spinToX[i]->setValue(allroi[i].xmax); + spinToY[i]->setValue(allroi[i].ymax); + } + cout << "ROIs populated: " << n << endl; + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::AddROIInput(int num){ +#ifdef VERVERBOSE + cout<<"in AddROIInput() " << num << endl; +#endif + if((int)lblFromX.size()){ + disconnect(spinFromX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinFromY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinToX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinToY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + } + + int exists = numRois+1; + int total = exists+num; + //if cleared, addding just one + if ((num==0) && (numRois==0)){ + exists = 0; + total = 1; + }/*else{ + gridRoi->removeWidget + }*/ + + for (int i=exists;i= ((int)lblFromX.size())){ + lblFromX.resize(i+1); spinFromX.resize(i+1); + lblFromY.resize(i+1); spinFromY.resize(i+1); + lblToX.resize(i+1); spinToX.resize(i+1); + lblToY.resize(i+1); spinToY.resize(i+1); + + lblFromX[i] = new QLabel("x min:"); + lblFromY[i] = new QLabel("y min:"); + lblToX[i] = new QLabel("x max:"); + lblToY[i] = new QLabel("y max:"); + spinFromX[i] = new QSpinBox(); + spinFromY[i] = new QSpinBox(); + spinToX[i] = new QSpinBox(); + spinToY[i] = new QSpinBox(); + + + lblFromX[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblFromX[i]->setFixedWidth(50); + lblFromY[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblFromY[i]->setFixedWidth(50); + lblToX[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblToX[i]->setFixedWidth(50); + lblToY[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblToY[i]->setFixedWidth(50); + spinFromX[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); spinFromX[i]->setFixedWidth(80); + spinFromY[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); spinFromY[i]->setFixedWidth(80); + spinToX[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); spinToX[i]->setFixedWidth(80); + spinToY[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); spinToY[i]->setFixedWidth(80); + spinFromX[i]->setFixedHeight(19); + spinFromY[i]->setFixedHeight(19); + spinToX[i]->setFixedHeight(19); + spinToY[i]->setFixedHeight(19); + + spinFromX[i]->setMaximum(myDet->getMaxNumberOfChannels(slsDetectorDefs::X)-1); + spinToX[i]->setMaximum(myDet->getMaxNumberOfChannels(slsDetectorDefs::X)-1); + spinFromY[i]->setMaximum(myDet->getMaxNumberOfChannels(slsDetectorDefs::Y)-1); + spinToY[i]->setMaximum(myDet->getMaxNumberOfChannels(slsDetectorDefs::Y)-1); + spinFromX[i]->setMinimum(-1); + spinToX[i]->setMinimum(-1); + spinFromY[i]->setMinimum(-1); + spinToY[i]->setMinimum(-1); + spinFromX[i]->setValue(-1); + spinFromY[i]->setValue(-1); + spinToX[i]->setValue(-1); + spinToY[i]->setValue(-1); + } + + gridRoi->addWidget(lblFromX[i], i,0,Qt::AlignTop); + gridRoi->addWidget(spinFromX[i],i,1,Qt::AlignTop); + gridRoi->addItem(new QSpacerItem(40,20,QSizePolicy::Expanding,QSizePolicy::Fixed), i,2,Qt::AlignTop); + gridRoi->addWidget(lblToX[i], i,3,Qt::AlignTop); + gridRoi->addWidget(spinToX[i], i,4,Qt::AlignTop); + gridRoi->addItem(new QSpacerItem(40,20,QSizePolicy::Expanding,QSizePolicy::Fixed), i,5,Qt::AlignTop); + gridRoi->addWidget(lblFromY[i], i,6,Qt::AlignTop); + gridRoi->addWidget(spinFromY[i],i,7,Qt::AlignTop); + gridRoi->addItem(new QSpacerItem(40,20,QSizePolicy::Expanding,QSizePolicy::Fixed), i,8,Qt::AlignTop); + gridRoi->addWidget(lblToY[i], i,9,Qt::AlignTop); + gridRoi->addWidget(spinToY[i], i,10,Qt::AlignTop); + + lblFromX[i]->show(); + spinFromX[i]->show(); + lblToX[i]->show(); + spinToX[i]->show(); + lblFromY[i]->show(); + spinFromY[i]->show(); + lblToY[i]->show(); + spinToY[i]->show(); + } + + numRois += num; + + connect(spinFromX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + connect(spinFromY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + connect(spinToX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + connect(spinToY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + +#ifdef VERYVERBOSE + cout<<"ROI Inputs added " << num << endl; +#endif +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::clearROI(){ +#ifdef VERYVERBOSE + cout<<"in clearROI() " << endl; +#endif + if((int)lblFromX.size()){ + disconnect(spinFromX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinFromY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinToX[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + disconnect(spinToY[numRois], SIGNAL(valueChanged(int)), this, SLOT(AddROIInputSlot())); + + } + + + for (int i=0;isetValue(-1); + spinFromY[i]->setValue(-1); + spinToX[i]->setValue(-1); + spinToY[i]->setValue(-1); + } + + + //hide widget because they are still visible even when removed and layout deleted + QLayoutItem *item; + while((item = gridRoi->takeAt(0))) { + if (item->widget()){ + item->widget()->hide(); + gridRoi->removeWidget(item->widget()); + } + //if (item->spacerItem()) + } + + numRois = 0; + AddROIInput(0); + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::setROI(){ +#ifdef VERYVERBOSE + cout<<"in setROI() " << endl; +#endif + + slsDetectorDefs::ROI allroi[MAX_ROIS]; + + for (int i=0;ivalue(); + allroi[i].ymin = spinFromY[i]->value(); + allroi[i].xmax = spinToX[i]->value(); + allroi[i].ymax = spinToY[i]->value(); + } + + myDet->setROI(numRois,allroi); + //qDefs::checkErrorMessage(myDet); + cout<<"ROIs set" << endl; + //get the correct list back + updateROIList(); + //configuremac + myDet->configureMAC(); + qDefs::checkErrorMessage(myDet); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::clearROIinDetector(){ +#ifdef VERYVERBOSE + cout<<"in clearROIinDetector() " << endl; +#endif + + if (QMessageBox::warning(this, "Clear ROI", + "Are you sure you want to clear all the ROI in detector?", + QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes){ + + clearROI(); + setROI(); +#ifdef VERBOSE + cout << "ROIs cleared" << endl; +#endif + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + void qTabAdvanced::Refresh(){ + + #ifdef VERBOSE cout << endl << "**Updating Advanced Tab" << endl; #endif @@ -744,7 +955,6 @@ void qTabAdvanced::Refresh(){ if(detType==slsDetectorDefs::GOTTHARD){ //disconnect - disconnect(comboADC, SIGNAL(currentIndexChanged(int)), this, SLOT(SetADCReadout(int))); disconnect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int))); disconnect(spinUDPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrUDPPort(int))); disconnect(comboRxrOnline, SIGNAL(currentIndexChanged(int)), this, SLOT(SetReceiverOnline(int))); @@ -770,7 +980,6 @@ void qTabAdvanced::Refresh(){ dispUDPMAC->setText(QString(myDet->getNetworkParameter(slsDetectorDefs::RECEIVER_UDP_MAC))); //connect - connect(comboADC, SIGNAL(currentIndexChanged(int)), this, SLOT(SetADCReadout(int))); connect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int))); connect(spinUDPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrUDPPort(int))); connect(comboRxrOnline, SIGNAL(currentIndexChanged(int)), this, SLOT(SetReceiverOnline(int))); @@ -810,6 +1019,8 @@ void qTabAdvanced::Refresh(){ } + //roi + updateROIList(); #ifdef VERBOSE diff --git a/slsDetectorGui/src/qTabSettings.cpp b/slsDetectorGui/src/qTabSettings.cpp index 1ce307e04..961a42de5 100644 --- a/slsDetectorGui/src/qTabSettings.cpp +++ b/slsDetectorGui/src/qTabSettings.cpp @@ -39,7 +39,9 @@ void qTabSettings::SetupWidgetWindow(){ // Settings SetupDetectorSettings(); - comboSettings->setCurrentIndex(myDet->getSettings()); + int sett = (int)myDet->getSettings(); + if(sett==-1) sett = slsDetectorDefs::UNDEFINED; + comboSettings->setCurrentIndex(sett); //threshold spinThreshold->setValue(myDet->getThresholdEnergy()); @@ -69,6 +71,7 @@ void qTabSettings::SetupWidgetWindow(){ void qTabSettings::SetupDetectorSettings(){ // Get detector settings from detector slsDetectorDefs::detectorSettings sett = myDet->getSettings(); + if(sett==-1) sett = slsDetectorDefs::UNDEFINED; // To be able to index items on a combo box model = qobject_cast(comboSettings->model()); if (model) { @@ -145,7 +148,9 @@ void qTabSettings::setSettings(int index){ if((index==Undefined)||(index==Uninitialized)){ qDefs::Message(qDefs::WARNING,"Cannot change settings to Undefined or Uninitialized.","Settings"); disconnect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int))); - comboSettings->setCurrentIndex((int)myDet->getSettings()); + int sett = (int)myDet->getSettings(); + if(sett==-1) sett = slsDetectorDefs::UNDEFINED; + comboSettings->setCurrentIndex(sett); connect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int))); } @@ -268,12 +273,14 @@ void qTabSettings::Refresh(){ cout << "Getting settings" << endl; #endif disconnect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int))); - comboSettings->setCurrentIndex((int)myDet->getSettings()); + int sett = (int)myDet->getSettings(); + if(sett==-1) sett = slsDetectorDefs::UNDEFINED; + comboSettings->setCurrentIndex(sett); connect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int))); //threshold - int sett = comboSettings->currentIndex(); + sett = comboSettings->currentIndex(); if((detType==slsDetectorDefs::MYTHEN)||(detType==slsDetectorDefs::EIGER)){ if((sett==Undefined)||(sett==Uninitialized)){ lblThreshold->setEnabled(false);