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);