All checks were successful
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 8m7s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 6m52s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 7m53s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 8m56s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 8m7s
Build Packages / build:rpm (rocky8) (push) Successful in 7m43s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / Build documentation (push) Successful in 35s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 7m56s
Build Packages / build:rpm (rocky9) (push) Successful in 8m56s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m3s
Build Packages / Unit tests (push) Successful in 1h10m8s
This is an UNSTABLE release. * jfjoch_viewer: Allow for multiple dataset info plots * jfjoch_viewer: Highlight current element in grid Reviewed-on: #11 Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch> Co-committed-by: Filip Leonarski <filip.leonarski@psi.ch>
160 lines
5.1 KiB
C++
160 lines
5.1 KiB
C++
// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#include <QGridLayout>
|
|
#include <QPushButton>
|
|
|
|
#include "JFJochViewerDatasetInfo.h"
|
|
|
|
JFJochViewerDatasetInfo::JFJochViewerDatasetInfo(QWidget *parent) : QWidget(parent) {
|
|
auto layout = new QGridLayout(this);
|
|
combo_box = new QComboBox(this);
|
|
|
|
combo_box->addItem("Background estimate", 0);
|
|
combo_box->addItem("Resolution estimate", 7);
|
|
combo_box->addItem("Spot count", 1);
|
|
combo_box->addItem("Spot count (indexed)", 2);
|
|
combo_box->addItem("Spot count (ice rings)", 3);
|
|
combo_box->addItem("Spot count (low res.)", 4);
|
|
combo_box->addItem("Indexing result", 5);
|
|
combo_box->addItem("Profile radius", 6);
|
|
combo_box->addItem("B-factor", 8);
|
|
combo_box->setCurrentIndex(0);
|
|
|
|
layout->addWidget(combo_box, 0, 0);
|
|
|
|
auto reset_button = new QPushButton("Reset zoom", this);
|
|
reset_button->setFixedWidth(100);
|
|
|
|
grid_button = new QPushButton("Grid", this);
|
|
grid_button->setFixedWidth(100);
|
|
grid_button->setCheckable(true);
|
|
grid_button->setEnabled(false);
|
|
|
|
layout->addWidget(reset_button, 0, 2);
|
|
layout->addWidget(grid_button, 0, 3);
|
|
|
|
stack = new QStackedWidget(this);
|
|
chart_view = new JFJochChartView(this);
|
|
grid_scan_image = new JFJochGridScanImage(this);
|
|
|
|
stack->addWidget(chart_view);
|
|
stack->addWidget(grid_scan_image);
|
|
|
|
layout->addWidget(stack, 1, 0, 1, 4);
|
|
|
|
connect(chart_view, &JFJochChartView::imageSelected,
|
|
this, &JFJochViewerDatasetInfo::imageSelectedInChart);
|
|
|
|
connect(reset_button, &QPushButton::clicked,
|
|
this, &JFJochViewerDatasetInfo::resetZoomButtonPressed);
|
|
|
|
connect(combo_box, &QComboBox::currentIndexChanged,
|
|
this, &JFJochViewerDatasetInfo::comboBoxSelected);
|
|
|
|
connect(grid_scan_image, &JFJochGridScanImage::imageSelected,
|
|
this, &JFJochViewerDatasetInfo::imageSelectedInChart);
|
|
|
|
connect(chart_view, &JFJochChartView::writeStatusBar,
|
|
[this](QString string, int timeout_ms) {
|
|
emit writeStatusBar(string, timeout_ms);
|
|
});
|
|
|
|
connect(grid_scan_image, &JFJochGridScanImage::writeStatusBar,
|
|
[this](QString string, int timeout_ms) {
|
|
emit writeStatusBar(string, timeout_ms);
|
|
});
|
|
|
|
connect(grid_button, &QPushButton::clicked,
|
|
[this] () {
|
|
if (grid_button->isChecked() && dataset && dataset->experiment.GetGridScan())
|
|
stack->setCurrentWidget(grid_scan_image);
|
|
else
|
|
stack->setCurrentWidget(chart_view);
|
|
});
|
|
setLayout(layout);
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::datasetLoaded(std::shared_ptr<const JFJochReaderDataset> dataset) {
|
|
this->dataset = dataset;
|
|
if (dataset) {
|
|
UpdatePlot();
|
|
} else {
|
|
chart_view->loadValues<float>({}, 0);
|
|
grid_scan_image->clear();
|
|
}
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::imageLoaded(std::shared_ptr<const JFJochReaderImage> image) {
|
|
this->image = image;
|
|
if (image) {
|
|
chart_view->setImage(image->ImageData().number);
|
|
grid_scan_image->setImage(image->ImageData().number);
|
|
}
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::imageSelectedInChart(int64_t number) {
|
|
emit imageSelected(number, 1);
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::UpdatePlot() {
|
|
int index = combo_box->currentIndex();
|
|
int val = combo_box->itemData(index).toInt();
|
|
|
|
std::vector<float> tmp;
|
|
if (dataset) {
|
|
int64_t image_number = 0;
|
|
if (image)
|
|
image_number = image->ImageData().number;
|
|
|
|
std::vector<float> data;
|
|
if (val == 0)
|
|
data = dataset->bkg_estimate;
|
|
else if (val == 1)
|
|
data = dataset->spot_count;
|
|
else if (val == 2)
|
|
data = dataset->spot_count_indexed;
|
|
else if (val == 3)
|
|
data = dataset->spot_count_ice_rings;
|
|
else if (val == 4)
|
|
data = dataset->spot_count_low_res;
|
|
else if (val == 5)
|
|
data = dataset->indexing_result;
|
|
else if (val == 6)
|
|
data = dataset->profile_radius;
|
|
else if (val == 7)
|
|
data = dataset->resolution_estimate;
|
|
else if (val == 8)
|
|
data = dataset->b_factor;
|
|
|
|
chart_view->loadValues(data, image_number);
|
|
if (dataset->experiment.GetGridScan()) {
|
|
stack->setCurrentWidget(grid_scan_image);
|
|
grid_scan_image->loadData(data, dataset->experiment.GetGridScan().value());
|
|
grid_button->setEnabled(true);
|
|
grid_button->setChecked(true);
|
|
} else {
|
|
grid_scan_image->clear();
|
|
stack->setCurrentWidget(chart_view);
|
|
grid_button->setEnabled(false);
|
|
}
|
|
} else {
|
|
grid_button->setEnabled(false);
|
|
}
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::comboBoxSelected(int index) {
|
|
UpdatePlot();
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::setColorMap(int color_map) {
|
|
grid_scan_image->setColorMap(color_map);
|
|
}
|
|
|
|
void JFJochViewerDatasetInfo::resetZoomButtonPressed() {
|
|
if (stack->currentWidget() == grid_scan_image)
|
|
grid_scan_image->fitToView();
|
|
else
|
|
chart_view->resetZoom();
|
|
}
|