This commit is contained in:
2019-06-11 11:19:07 +02:00
parent 1bab010d0b
commit d2d25cdd69
4 changed files with 98 additions and 201 deletions

View File

@@ -138,7 +138,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Readout:</string> <string>Module:</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -1,87 +1,36 @@
#pragma once #pragma once
#include "qDefs.h"
#include "ui_form_tab_debugging.h" #include "ui_form_tab_debugging.h"
class multiSlsDetector; class multiSlsDetector;
class slsDetector;
#include <QTreeWidget> class QTreeWidget;
class QTreeWidgetItem;
/**
*@short sets up the Debugging parameters
*/
class qTabDebugging:public QWidget, private Ui::TabDebuggingObject{ class qTabDebugging:public QWidget, private Ui::TabDebuggingObject{
Q_OBJECT Q_OBJECT
public: public:
/**
* The constructor
* @param parent is the parent tab widget
* @param detector is the detector returned from the detector tab
*/
qTabDebugging(QWidget *parent, multiSlsDetector* detector); qTabDebugging(QWidget *parent, multiSlsDetector* detector);
/**
* Destructor
*/
~qTabDebugging(); ~qTabDebugging();
/**
* To refresh and update widgets
*/
void Refresh(); void Refresh();
private slots: private slots:
void GetDetectorStatus();
/** void GetInfo();
* Updates the status depending on current detector
*/
void UpdateStatus();
/**
* Gets id and versions etc
*/
void
GetInfo();
/**
* Sets id and versions on the display widget
*/
void SetParameters(QTreeWidgetItem *item); void SetParameters(QTreeWidgetItem *item);
/**
* Test detector
*/
void TestDetector(); void TestDetector();
private: private:
/**
* Sets up the widget
*/
void SetupWidgetWindow(); void SetupWidgetWindow();
/**
* Sets up all the slots and signals
*/
void Initialization(); void Initialization();
void PopulateDetectors();
/** The multi sls detector object */
multiSlsDetector *myDet; multiSlsDetector *myDet;
/** detector type */
slsDetectorDefs::detectorType detType;
/** Tree Widget displaying the detectors, modules */ /** Tree Widget displaying the detectors, modules */
QTreeWidget *treeDet; QTreeWidget *treeDet;
/** Widget displaying the serial numbers, mac addresses etc */ QLabel *lblDetectorHostname;
QLabel *lblDetectorId;
QLabel *lblDetectorFirmware; QLabel *lblDetectorFirmware;
QLabel *lblDetectorSoftware; QLabel *lblDetectorSoftware;
QPalette *blue;
}; };

View File

@@ -343,10 +343,11 @@ void qDetectorMain::LoadConfigFile(const std::string fName) {
"qDetectorMain::LoadConfigFile"); "qDetectorMain::LoadConfigFile");
FILE_LOG(logWARNING) << "File not recognized"; FILE_LOG(logWARNING) << "File not recognized";
} else { } else {
qDefs::IgnoreNonCriticalExceptions(myDet, try {
"Could not load config file.", myDet->readConfigurationFile(fName);
"qDetectorMain::LoadConfigFile", } catch (const sls::NonCriticalError &e) {
&multiSlsDetector::readConfigurationFile, fName); qDefs::ExceptionMessage("Could not load config file.", e.what(), "qDetectorMain::LoadConfigFile");
}
} }
} }

View File

@@ -1,24 +1,18 @@
#include "qTabDebugging.h" #include "qTabDebugging.h"
#include "qDefs.h"
#include "multiSlsDetector.h" #include "multiSlsDetector.h"
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QGridLayout> #include <QGridLayout>
#include <QTreeWidget>
#include <iostream> #include <iostream>
//------------------------------------------------------------------------------------------------------------------------------------------------- qTabDebugging::qTabDebugging(QWidget *parent, multiSlsDetector *detector) :
QWidget(parent), myDet(detector), treeDet(0), lblDetectorHostname(0), lblDetectorFirmware(0), lblDetectorSoftware(0) {
qTabDebugging::qTabDebugging(QWidget *parent, multiSlsDetector *detector) : QWidget(parent),
myDet(detector),
detType(slsDetectorDefs::GENERIC),
treeDet(0),
lblDetectorId(0),
lblDetectorFirmware(0),
lblDetectorSoftware(0) {
setupUi(this); setupUi(this);
SetupWidgetWindow(); SetupWidgetWindow();
Initialization();
FILE_LOG(logDEBUG) << "Debugging ready"; FILE_LOG(logDEBUG) << "Debugging ready";
} }
@@ -26,97 +20,80 @@ qTabDebugging::~qTabDebugging() {}
void qTabDebugging::SetupWidgetWindow() { void qTabDebugging::SetupWidgetWindow() {
// enabling according to det type
blue = new QPalette(); if (myDet->getDetectorTypeAsEnum() == slsDetectorDefs::EIGER) {
blue->setColor(QPalette::Active, QPalette::WindowText, Qt::darkBlue);
// Detector Type
detType = myDet->getDetectorTypeAsEnum();
// rename label and disable tests
if (detType == slsDetectorDefs::EIGER) {
lblDetector->setText("Half Module:"); lblDetector->setText("Half Module:");
chkDetectorFirmware->setEnabled(false); chkDetectorFirmware->setEnabled(false);
chkDetectorBus->setEnabled(false); chkDetectorBus->setEnabled(false);
btnTest->setEnabled(false); btnTest->setEnabled(false);
} }
//add detectors PopulateDetectors();
for (int i = 0; i < myDet->getNumberOfDetectors(); ++i) {
comboDetector->addItem(QString(myDet->getHostname(i).c_str()));
}
UpdateStatus(); Initialization();
qDefs::checkErrorMessage(myDet, "qTabDebugging::SetupWidgetWindow"); Refresh();
} }
void qTabDebugging::Initialization() { void qTabDebugging::Initialization() {
connect(comboDetector, SIGNAL(currentIndexChanged(int)), this, SLOT(GetDetectorStatus()));
connect(comboDetector, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateStatus()));
connect(btnGetInfo, SIGNAL(clicked()), this, SLOT(GetInfo())); connect(btnGetInfo, SIGNAL(clicked()), this, SLOT(GetInfo()));
if (btnTest ->isEnabled()) if (btnTest ->isEnabled()) {
connect(btnTest, SIGNAL(clicked()), this, SLOT(TestDetector())); connect(btnTest, SIGNAL(clicked()), this, SLOT(TestDetector()));
}
} }
void qTabDebugging::PopulateDetectors() {
FILE_LOG(logDEBUG) << "Populating detectors";
void qTabDebugging::UpdateStatus() { comboDetector->clear();
for (int i = 0; i < myDet->getNumberOfDetectors(); ++i) {
comboDetector->addItem(QString(myDet->getHostname(i).c_str()));
}
}
void qTabDebugging::GetDetectorStatus() {
FILE_LOG(logDEBUG) << "Getting Status"; FILE_LOG(logDEBUG) << "Getting Status";
auto moduleId = comboDetector->currentIndex(); try {
int detStatus = (int)myDet->getRunStatus(moduleId); std::string status = slsDetectorDefs::runStatusType(myDet->getRunStatus(comboDetector->currentIndex()));
std::string status = slsDetectorDefs::runStatusType(slsDetectorDefs::runStatus(detStatus)); lblStatus->setText(QString(status.c_str()).toUpper());
lblStatus->setText(QString(status.c_str()).toUpper()); } catch (const sls::NonCriticalError &e) {
qDefs::ExceptionMessage("Could not get detector status.", e.what(), "qTabDebugging::GetDetectorStatus");
qDefs::checkErrorMessage(myDet, comboDetector->currentIndex(), "qTabDebugging::UpdateStatus"); }
} }
void qTabDebugging::GetInfo() { void qTabDebugging::GetInfo() {
FILE_LOG(logDEBUG) << "Getting Readout Info"; FILE_LOG(logDEBUG) << "Getting Readout Info";
//window // open info in a new popup
QFrame *popup1 = new QFrame(this, Qt::Popup | Qt::SubWindow); QFrame *popup1 = new QFrame(this, Qt::Popup | Qt::SubWindow);
QList<QTreeWidgetItem *> items; QList<QTreeWidgetItem *> items;
//layout
QGridLayout *layout = new QGridLayout(popup1); QGridLayout *layout = new QGridLayout(popup1);
//treewidget
treeDet = new QTreeWidget(popup1); treeDet = new QTreeWidget(popup1);
layout->addWidget(treeDet, 0, 0); layout->addWidget(treeDet, 0, 0);
//display the details
QFrame *dispFrame = new QFrame(popup1); QFrame *dispFrame = new QFrame(popup1);
QGridLayout *formLayout = new QGridLayout(dispFrame); QGridLayout *formLayout = new QGridLayout(dispFrame);
// hostname lblDetectorHostname = new QLabel("");
lblDetectorId = new QLabel("");
lblDetectorId->setPalette(*blue);
// firmware version
lblDetectorFirmware = new QLabel(""); lblDetectorFirmware = new QLabel("");
lblDetectorFirmware->setPalette(*blue);
// software version
lblDetectorSoftware = new QLabel(""); lblDetectorSoftware = new QLabel("");
lblDetectorSoftware->setPalette(*blue);
//to make sure the size is constant //to make sure the size is constant
lblDetectorFirmware->setFixedWidth(100); lblDetectorFirmware->setFixedWidth(100);
layout->addWidget(dispFrame, 0, 1); layout->addWidget(dispFrame, 0, 1);
QString detName = QString(myDet->getDetectorTypeAsString().c_str()); QString detName = QString(myDet->getDetectorTypeAsString().c_str());
switch (detType) { switch (myDet->getDetectorTypeAsEnum()) {
case slsDetectorDefs::EIGER: case slsDetectorDefs::EIGER:
//display widget
formLayout->addWidget(new QLabel("Half Module:"), 0, 0); formLayout->addWidget(new QLabel("Half Module:"), 0, 0);
formLayout->addItem(new QSpacerItem(15, 20, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 1); formLayout->addItem(new QSpacerItem(15, 20, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 1);
formLayout->addWidget(lblDetectorId, 0, 2); formLayout->addWidget(lblDetectorHostname, 0, 2);
formLayout->addWidget(new QLabel("Half Module Firmware Version:"), 1, 0); formLayout->addWidget(new QLabel("Half Module Firmware Version:"), 1, 0);
formLayout->addWidget(lblDetectorFirmware, 1, 2); formLayout->addWidget(lblDetectorFirmware, 1, 2);
formLayout->addWidget(new QLabel("Half Module Software Version:"), 2, 0); formLayout->addWidget(new QLabel("Half Module Software Version:"), 2, 0);
formLayout->addWidget(lblDetectorSoftware, 2, 2); formLayout->addWidget(lblDetectorSoftware, 2, 2);
//tree widget
treeDet->setHeaderLabel("Eiger Detector"); treeDet->setHeaderLabel("Eiger Detector");
//get num modules //get num modules
for (int i = 0; i < comboDetector->count() / 2; ++i) for (int i = 0; i < comboDetector->count() / 2; ++i)
@@ -131,22 +108,18 @@ void qTabDebugging::GetInfo() {
break; break;
default: default:
//display widget
formLayout->addWidget(new QLabel("Module:"), 0, 0); formLayout->addWidget(new QLabel("Module:"), 0, 0);
formLayout->addItem(new QSpacerItem(15, 20, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 1); formLayout->addItem(new QSpacerItem(15, 20, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 1);
formLayout->addWidget(lblDetectorId, 0, 2); formLayout->addWidget(lblDetectorHostname, 0, 2);
formLayout->addWidget(new QLabel("Module Firmware Version:"), 1, 0); formLayout->addWidget(new QLabel("Module Firmware Version:"), 1, 0);
formLayout->addWidget(lblDetectorFirmware, 1, 2); formLayout->addWidget(lblDetectorFirmware, 1, 2);
formLayout->addWidget(new QLabel("Module Software Version:"), 2, 0); formLayout->addWidget(new QLabel("Module Software Version:"), 2, 0);
formLayout->addWidget(lblDetectorSoftware, 2, 2); formLayout->addWidget(lblDetectorSoftware, 2, 2);
//tree widget
treeDet->setHeaderLabel(QString(detName + " Detector")); treeDet->setHeaderLabel(QString(detName + " Detector"));
//gets det names //gets det names
for (int i = 0; i < comboDetector->count(); ++i) for (int i = 0; i < comboDetector->count(); ++i)
items.append(new QTreeWidgetItem((QTreeWidget *)0, QStringList(QString("Module (%1)").arg(comboDetector->itemText(i))))); items.append(new QTreeWidgetItem((QTreeWidget *)0, QStringList(QString("Module (%1)").arg(comboDetector->itemText(i)))));
treeDet->insertTopLevelItems(0, items); treeDet->insertTopLevelItems(0, items);
break; break;
} }
@@ -162,109 +135,83 @@ void qTabDebugging::GetInfo() {
//put the first parameters //put the first parameters
SetParameters(treeDet->topLevelItem(0)); SetParameters(treeDet->topLevelItem(0));
//initializations // connect to slots
connect(treeDet, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(SetParameters(QTreeWidgetItem *))); connect(treeDet, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(SetParameters(QTreeWidgetItem *)));
} }
void qTabDebugging::SetParameters(QTreeWidgetItem *item) { void qTabDebugging::SetParameters(QTreeWidgetItem *item) {
char value[200]; // eiger: if half module clicked, others: true always
int i; bool ignoreOrHalfModuleClicked = true;
if (myDet->getDetectorTypeAsEnum() == slsDetectorDefs::EIGER) {
auto moduleId = comboDetector->currentIndex(); if (!(item->text(0).contains("Half Module"))) {
switch (detType) { ignoreOrHalfModuleClicked = false;
case slsDetectorDefs::EIGER:
//only if half module clicked
if (item->text(0).contains("Half Module")) {
//find index
for (i = 0; i < comboDetector->count(); ++i)
if (item == treeDet->topLevelItem(i))
break;
sprintf(value, "%lx", (long long unsigned int)myDet->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION, moduleId));
lblDetectorFirmware->setText(QString(value));
sprintf(value, "%lx", (long long unsigned int)myDet->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION, moduleId));
lblDetectorSoftware->setText(QString(value));
qDefs::checkErrorMessage(myDet, comboDetector->currentIndex(), "qTabDebugging::SetParameters");
} }
break; }
default: if (ignoreOrHalfModuleClicked) {
//find index // find index
for (i = 0; i < comboDetector->count(); ++i) for (int i = 0; i < comboDetector->count(); ++i) {
if (item == treeDet->topLevelItem(i)) if (item == treeDet->topLevelItem(i))
break; break;
}
sprintf(value, "%lx", (long long unsigned int)myDet->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION, moduleId)); try {
lblDetectorFirmware->setText(QString(value)); auto retval = std::string("0x") + std::to_string((unsigned long)myDet->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION, comboDetector->currentIndex()));
sprintf(value, "%lx", (long long unsigned int)myDet->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION, moduleId)); lblDetectorFirmware->setText(QString(retval.c_str()));
lblDetectorSoftware->setText(QString(value)); retval = std::string("0x") + std::to_string((unsigned long)myDet->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION, comboDetector->currentIndex()));
lblDetectorSoftware->setText(QString(retval.c_str()));
qDefs::checkErrorMessage(myDet, comboDetector->currentIndex(), "qTabDebugging::SetParameters"); } catch (const sls::NonCriticalError &e) {
break; qDefs::ExceptionMessage("Could not get versions.", e.what(), "qTabDebugging::SetParameters");
}
} }
} }
void qTabDebugging::TestDetector() { void qTabDebugging::TestDetector() {
FILE_LOG(logINFO) << "Testing Readout"; FILE_LOG(logINFO) << "Testing Readout";
try {
int retval = slsDetectorDefs::FAIL; QString moduleName = "Module";
QString message; if (myDet->getDetectorTypeAsEnum() == slsDetectorDefs::EIGER) {
QString Detector = "Detector"; moduleName = "Half Module";
//main messagebox title
switch (detType) {
case slsDetectorDefs::EIGER:
Detector = "Half Module";
break;
default:
Detector = "Module";
break;
}
// construct message
message = QString("<nobr>Test Results for %1:</nobr><br><br>").arg(comboDetector->currentText());
auto moduleId = comboDetector->currentIndex();
//detector firmware
if (chkDetectorFirmware->isChecked()) {
retval = myDet->digitalTest(slsDetectorDefs::DETECTOR_FIRMWARE_TEST, moduleId);
if (retval == slsDetectorDefs::FAIL) {
message.append(QString("<nobr>%1 Firmware: FAIL</nobr><br>").arg(Detector));
FILE_LOG(logERROR) << "Firmware fail";
} }
else
message.append(QString("<nobr>%1 Firmware: %2</nobr><br>").arg(Detector, QString::number(retval)));
FILE_LOG(logINFO) << "Detector Firmware Test: " << retval;
}
//detector CPU-FPGA bus // construct message
if (chkDetectorBus->isChecked()) { QString message = QString("<nobr>Test Results for %1:</nobr><br><br>").arg(comboDetector->currentText());
retval = myDet->digitalTest(slsDetectorDefs::DETECTOR_BUS_TEST, moduleId);
if (retval == slsDetectorDefs::FAIL) {
message.append(QString("<nobr>%1 Bus: &nbsp;&nbsp;&nbsp;&nbsp;FAIL</nobr><br>").arg(Detector));
FILE_LOG(logERROR) << "Bus Test fail";
} else
message.append(QString("<nobr>%1 Bus: &nbsp;&nbsp;&nbsp;&nbsp;%2</nobr><br>").arg(Detector, QString::number(retval)));
FILE_LOG(logINFO) << "Detector Bus Test: " << retval;
}
//display message //detector firmware
qDefs::Message(qDefs::INFORMATION, message.toAscii().constData(), "qTabDebugging::TestDetector"); if (chkDetectorFirmware->isChecked()) {
auto retval = myDet->digitalTest(slsDetectorDefs::DETECTOR_FIRMWARE_TEST, comboDetector->currentIndex());
if (retval == slsDetectorDefs::FAIL) {
message.append(QString("<nobr>%1 Firmware: FAIL</nobr><br>").arg(moduleName));
FILE_LOG(logERROR) << "Firmware fail";
}
else
message.append(QString("<nobr>%1 Firmware: %2</nobr><br>").arg(moduleName, QString::number(retval)));
FILE_LOG(logINFO) << "Detector Firmware Test: " << retval;
}
qDefs::checkErrorMessage(myDet, comboDetector->currentIndex(), "qTabDebugging::TestDetector"); //detector CPU-FPGA bus
if (chkDetectorBus->isChecked()) {
auto retval = myDet->digitalTest(slsDetectorDefs::DETECTOR_BUS_TEST, comboDetector->currentIndex());
if (retval == slsDetectorDefs::FAIL) {
message.append(QString("<nobr>%1 Bus: &nbsp;&nbsp;&nbsp;&nbsp;FAIL</nobr><br>").arg(moduleName));
FILE_LOG(logERROR) << "Bus Test fail";
} else
message.append(QString("<nobr>%1 Bus: &nbsp;&nbsp;&nbsp;&nbsp;%2</nobr><br>").arg(moduleName, QString::number(retval)));
FILE_LOG(logINFO) << "Detector Bus Test: " << retval;
}
//display message
qDefs::Message(qDefs::INFORMATION, message.toAscii().constData(), "qTabDebugging::TestDetector");
} catch (const sls::NonCriticalError &e) {
qDefs::ExceptionMessage("Could not execute digital test.", e.what(), "qTabDebugging::TestDetector");
}
} }
void qTabDebugging::Refresh() { void qTabDebugging::Refresh() {
FILE_LOG(logDEBUG) << "\n**Updating Debugging Tab"; FILE_LOG(logDEBUG) << "**Updating Debugging Tab";
UpdateStatus(); GetDetectorStatus();
FILE_LOG(logDEBUG) << "**Updated Debugging Tab"; FILE_LOG(logDEBUG) << "**Updated Debugging Tab";
} }