Files
Jungfraujoch/viewer/widgets/JFJochViewerSidePanelChart.cpp
leonarski_f 75e401f0e5
Build Packages / Unit tests (push) Successful in 1h31m59s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 8m43s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 10m5s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 9m27s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 8m56s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 9m24s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 10m27s
Build Packages / build:rpm (rocky8) (push) Successful in 9m20s
Build Packages / build:rpm (rocky9) (push) Successful in 10m50s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 9m54s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 8m38s
Build Packages / DIALS test (push) Successful in 12m13s
Build Packages / XDS test (durin plugin) (push) Successful in 7m8s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 7m8s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m50s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / Build documentation (push) Successful in 50s
Build Packages / Create release (push) Skipped
v1.0.0-rc.153 (#63)
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use.

* jfjoch_broker: Add EXPERIMENTAL pixelrefine mode for image processing
* jfjoch_broker: Allow to load user mask from 8-bit and 16-bit TIFF files
* jfjoch_broker: Add ROI calculation in non-FPGA workflow
* jfjoch_broker: Fixes to TCP image pusher
* jfjoch_broker: Remove NUMA bindings
* jfjoch_broker: Improvements to indexing
* jfjoch_broker: For PSI EIGER, trimming energies are taken from the detector configuration (now compulsory) instead of hardcoded values
* jfjoch_writer: Save ROI definitions and the per-pixel ROI bitmap in the master file; azimuthal ROIs support phi (angular) sectors
* jfjoch_viewer: Major redesign with dockable panels and saved layouts, plus on-canvas creation/move/resize of box, circle and azimuthal ROIs
* jfjoch_viewer: Run jfjoch_process reprocessing jobs from inside the GUI and overlay per-run results

Reviewed-on: #63
2026-06-23 20:29:49 +02:00

80 lines
2.7 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#include <QVBoxLayout>
#include "JFJochViewerSidePanelChart.h"
JFJochViewerSidePanelChart::JFJochViewerSidePanelChart(QWidget *parent) : QWidget(parent) {
auto layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
azint_plot = new JFJochSimpleChartView(this);
layout->addWidget(azint_plot);
setLayout(layout);
connect(azint_plot, &JFJochSimpleChartView::writeStatusBar,
[&](QString string, int timeout_ms) { emit writeStatusBar(string, timeout_ms); });
}
QList<QPair<QString, int>> JFJochViewerSidePanelChart::PlotTypes() {
return {
{"Azimuthal integration (1D)", 0},
{"Wilson plot", 1},
{"I/sigma", 2},
{"Spots (count)", 5},
{"Spots (intensity)", 6},
{"X-ray fluorescence spectrum", 4},
};
}
void JFJochViewerSidePanelChart::setPlotType(int code) {
plot_type_ = code;
redrawPlot();
}
void JFJochViewerSidePanelChart::redrawPlot() {
if (!image)
return;
std::vector<float> x, y;
switch (plot_type_) {
case 0:
x = image->GetAzInt1D_BinToQ();
y = image->GetAzInt1D();
azint_plot->UpdateData(x, y, "Q [Å^-1]", "", false);
break;
case 1:
x = image->ImageData().integration_B_one_over_d_square;
y = image->ImageData().integration_B_logI;
azint_plot->UpdateData(x, y, "d [Å]", "ln(&lt;I&gt;)", true);
break;
case 2:
x = image->ImageData().integration_Isigma_one_over_d_square;
y = image->ImageData().integration_Isigma;
azint_plot->UpdateData(x, y, "d [Å]", "I/sigma", true);
break;
case 4:
x = image->Dataset().experiment.GetFluorescenceSpectrum().GetEnergy_eV();
y = image->Dataset().experiment.GetFluorescenceSpectrum().GetData();
for (auto &iter: x)
iter /= 1000.0; // Convert eV to keV
azint_plot->UpdateData(x, y, "E [keV]", "", false);
break;
case 5:
x = image->ImageData().spot_plot_one_over_d_square;
y = image->ImageData().spot_plot_count;
azint_plot->UpdateData(x, y, "d [Å]", "Count", true);
break;
case 6:
x = image->ImageData().spot_plot_one_over_d_square;
y = image->ImageData().spot_plot_intensity;
azint_plot->UpdateData(x, y, "d [Å]", "Count", true);
break;
}
}
void JFJochViewerSidePanelChart::loadImage(std::shared_ptr<const JFJochReaderImage> in_image) {
image = in_image;
redrawPlot();
}