jfjoch_viewer: ROI panel (work in progress)
This commit is contained in:
@@ -176,47 +176,6 @@ TEST_CASE("PixelMask_SCs","[PixelMask]") {
|
||||
CHECK(mask.GetStatistics().error_pixel == 3);
|
||||
}
|
||||
|
||||
TEST_CASE("PixelMask_CalculateNexusMask_UserMaskRaw","[PixelMask]") {
|
||||
DiffractionExperiment experiment(DetJF(4, 1, 8, 36, false));
|
||||
experiment.MaskModuleEdges(false).MaskChipEdges(false);
|
||||
|
||||
PixelMask mask(experiment);
|
||||
|
||||
std::vector<uint32_t> v(4 * RAW_MODULE_SIZE, 0);
|
||||
v[2] = 1;
|
||||
v[4] = 1;
|
||||
v[5] = 1;
|
||||
|
||||
REQUIRE_NOTHROW(mask.LoadUserMask(experiment, v));
|
||||
|
||||
auto mask_v = mask.GetMask(experiment);
|
||||
|
||||
REQUIRE(mask_v.size() == experiment.GetPixelsNum() );
|
||||
REQUIRE(mask_v[0] == 0);
|
||||
REQUIRE(mask_v[1] == 0);
|
||||
REQUIRE(mask_v[2] == (1 << PixelMask::UserMaskedPixelBit));
|
||||
REQUIRE(mask_v[3] == 0);
|
||||
REQUIRE(mask_v[4] == (1 << PixelMask::UserMaskedPixelBit));
|
||||
REQUIRE(mask_v[5] == (1 << PixelMask::UserMaskedPixelBit));
|
||||
REQUIRE(mask_v[6] == 0);
|
||||
REQUIRE(mask_v[1030 * 700 + 300] == 0);
|
||||
REQUIRE(mask_v[(1030+8)*514] == (1 << PixelMask::ModuleGapPixelBit));
|
||||
|
||||
auto user_mask_v = mask.GetUserMask(experiment);
|
||||
|
||||
REQUIRE(user_mask_v.size() == experiment.GetPixelsNum() );
|
||||
REQUIRE(user_mask_v[0] == 0);
|
||||
REQUIRE(user_mask_v[1] == 0);
|
||||
REQUIRE(user_mask_v[2] == 1);
|
||||
REQUIRE(user_mask_v[3] == 0);
|
||||
REQUIRE(user_mask_v[4] == 1);
|
||||
REQUIRE(user_mask_v[5] == 1);
|
||||
REQUIRE(user_mask_v[6] == 0);
|
||||
REQUIRE(user_mask_v[1030 * 700 + 300] == 0);
|
||||
|
||||
REQUIRE(user_mask_v[(1030+8)*514] == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("PixelMask_CalculateNexusMask_UserMaskConv","[PixelMask]") {
|
||||
DiffractionExperiment experiment(DetJF(4, 1, 8, 36, false));
|
||||
experiment.MaskModuleEdges(false).MaskChipEdges(false);
|
||||
|
||||
@@ -152,6 +152,10 @@ void JFJochImageReadingWorker::LoadImage_i(int64_t image_number, int64_t summati
|
||||
|
||||
void JFJochImageReadingWorker::SetROIBox(QRect box) {
|
||||
QMutexLocker ul(&m);
|
||||
|
||||
if (box.width() * box.height() == 0)
|
||||
roi.reset();
|
||||
|
||||
roi = std::make_unique<ROIBox>("roi1", box.left(), box.right(), box.bottom(), box.top());
|
||||
|
||||
if (current_image_ptr) {
|
||||
|
||||
@@ -9,16 +9,24 @@ JFJochViewerImageROIStatistics::JFJochViewerImageROIStatistics(QWidget *parent)
|
||||
: QWidget(parent) {
|
||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||
|
||||
roi_pos = new QLabel("None", this);
|
||||
roi_label = new QLabel("", this);
|
||||
box_radio = new QRadioButton("Box", this);
|
||||
box_radio->setChecked(true);
|
||||
layout->addWidget(box_radio);
|
||||
|
||||
layout->addWidget(roi_pos);
|
||||
circle_radio = new QRadioButton("Circle", this);
|
||||
layout->addWidget(circle_radio);
|
||||
|
||||
radio_group = new QButtonGroup(this);
|
||||
radio_group->addButton(box_radio, 1);
|
||||
radio_group->addButton(circle_radio, 2);
|
||||
|
||||
layout->addWidget(new QLabel("", this));
|
||||
roi_label = new QLabel("", this);
|
||||
layout->addWidget(roi_label);
|
||||
}
|
||||
|
||||
void JFJochViewerImageROIStatistics::loadImage(std::shared_ptr<const JFJochReaderImage> image) {
|
||||
if (!image) {
|
||||
roi_pos->setText("None");
|
||||
roi_label->setText("");
|
||||
} else {
|
||||
auto roi = image->GetROI();
|
||||
@@ -34,10 +42,17 @@ void JFJochViewerImageROIStatistics::loadImage(std::shared_ptr<const JFJochReade
|
||||
.arg(QString::number(variance, 'f', 3))
|
||||
.arg(roi->max_count);
|
||||
roi_label->setText(text);
|
||||
roi_pos->setText(QString::fromStdString(image->GetROIDescription()));
|
||||
} else {
|
||||
roi_label->setText("");
|
||||
roi_pos->setText("None");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JFJochViewerImageROIStatistics::SetROIBox(QRect box) {
|
||||
box_radio->setChecked(true);
|
||||
}
|
||||
|
||||
void JFJochViewerImageROIStatistics::SetROICircle(double x, double y, double radius) {
|
||||
circle_radio->setChecked(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,17 +6,31 @@
|
||||
#define JFJOCH_JFJOCHVIEWERIMAGEROISTATISTICS_H
|
||||
|
||||
#include <QLabel>
|
||||
#include <QRadioButton>
|
||||
#include <QButtonGroup>
|
||||
|
||||
#include "JFJochImageReadingWorker.h"
|
||||
#include "../reader/JFJochReaderImage.h"
|
||||
|
||||
class JFJochViewerImageROIStatistics : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
QRadioButton *box_radio;
|
||||
QRadioButton *circle_radio;
|
||||
QRadioButton *azim_radio;
|
||||
QButtonGroup *radio_group;
|
||||
|
||||
QLabel *roi_pos;
|
||||
QLabel *roi_label;
|
||||
public:
|
||||
JFJochViewerImageROIStatistics(QWidget *parent);
|
||||
public slots:
|
||||
void loadImage(std::shared_ptr<const JFJochReaderImage> image);
|
||||
void SetROIBox(QRect box);
|
||||
void SetROICircle(double x, double y, double radius);
|
||||
signals:
|
||||
void ROIBoxConfigured(QRect box); // Signal emitted when Box ROI is set
|
||||
void ROICircleConfigured(double center_x, double center_y, double radius); // Signal emitted when Circle ROI is set
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ JFJochViewerSidePanel::JFJochViewerSidePanel(QWidget *parent) : QWidget(parent)
|
||||
|
||||
layout->addWidget(new TitleLabel("ROI", this));
|
||||
|
||||
auto roi = new JFJochViewerImageROIStatistics(this);
|
||||
roi = new JFJochViewerImageROIStatistics(this);
|
||||
layout->addWidget(roi);
|
||||
connect(this, &JFJochViewerSidePanel::imageLoaded, roi, &JFJochViewerImageROIStatistics::loadImage);
|
||||
|
||||
@@ -287,3 +287,11 @@ void JFJochViewerSidePanel::saturatedPixelsToggled(bool input) {
|
||||
void JFJochViewerSidePanel::highlightIceRingsToggled(bool input) {
|
||||
emit highlightIceRings(input);
|
||||
}
|
||||
|
||||
void JFJochViewerSidePanel::SetROIBox(QRect box) {
|
||||
roi->SetROIBox(box);
|
||||
}
|
||||
|
||||
void JFJochViewerSidePanel::SetROICircle(double x, double y, double radius) {
|
||||
roi->SetROICircle(x, y, radius);
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <QLineEdit>
|
||||
#include <QCheckBox>
|
||||
|
||||
#include "JFJochViewerImageROIStatistics.h"
|
||||
#include "../reader/JFJochReader.h"
|
||||
#include "widgets/JFJochSimpleChartView.h"
|
||||
#include "JFJochViewerSidePanelChart.h"
|
||||
@@ -24,6 +25,7 @@ class JFJochViewerSidePanel : public QWidget {
|
||||
QCheckBox *resRingsCheckBox;
|
||||
QComboBox* calibrantCombo{nullptr}; // stores current calibrant selection
|
||||
JFJochViewerSidePanelChart *chart = nullptr;
|
||||
JFJochViewerImageROIStatistics *roi = nullptr;
|
||||
signals:
|
||||
void showSpots(bool input);
|
||||
void autoResRings();
|
||||
@@ -42,6 +44,8 @@ public:
|
||||
JFJochViewerSidePanel(QWidget *parent);
|
||||
public slots:
|
||||
void loadImage(std::shared_ptr<const JFJochReaderImage> image);
|
||||
void SetROIBox(QRect box);
|
||||
void SetROICircle(double x, double y, double radius);
|
||||
private slots:
|
||||
void editingFinished();
|
||||
void enableResRings(bool input);
|
||||
|
||||
@@ -170,6 +170,12 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString
|
||||
connect(viewer, &JFJochViewerImage::roiCircleUpdated,
|
||||
reading_worker, &JFJochImageReadingWorker::SetROICircle);
|
||||
|
||||
connect(viewer, &JFJochViewerImage::roiBoxUpdated,
|
||||
side_panel, &JFJochViewerSidePanel::SetROIBox);
|
||||
|
||||
connect(viewer, &JFJochViewerImage::roiCircleUpdated,
|
||||
side_panel, &JFJochViewerSidePanel::SetROICircle);
|
||||
|
||||
connect(reading_worker, &JFJochImageReadingWorker::datasetLoaded,
|
||||
dataset_info, &JFJochViewerDatasetInfo::datasetLoaded);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user