// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include #include #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 dataset) { this->dataset = dataset; if (dataset) { UpdatePlot(); } else { chart_view->loadValues({}, 0, false); grid_scan_image->clear(); } } void JFJochViewerDatasetInfo::imageLoaded(std::shared_ptr 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 tmp; if (dataset) { int64_t image_number = 0; if (image) image_number = image->ImageData().number; bool one_over_d2 = false; std::vector 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; one_over_d2 = true; } else if (val == 8) data = dataset->b_factor; chart_view->loadValues(data, image_number, one_over_d2); if (dataset->experiment.GetGridScan()) { stack->setCurrentWidget(grid_scan_image); grid_scan_image->loadData(data, dataset->experiment.GetGridScan().value(), one_over_d2); 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(); }