// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include #include "JFJochViewerSidePanelChart.h" JFJochViewerSidePanelChart::JFJochViewerSidePanelChart(QWidget *parent) : QWidget(parent) { auto layout = new QVBoxLayout(this); combo_box = new QComboBox(this); combo_box->addItem("Azimuthal integration (1D)", 0); combo_box->addItem("Azimuthal integration (2D)", 3); combo_box->addItem("Wilson plot", 1); combo_box->addItem("I/sigma", 2); combo_box->addItem("Spots (count)", 5); combo_box->addItem("Spots (intensity)", 6); combo_box->addItem("X-ray fluorescence spectrum", 4); layout->addWidget(combo_box); connect(combo_box, &QComboBox::currentIndexChanged, this, &JFJochViewerSidePanelChart::comboBoxSelected); azint_plot = new JFJochSimpleChartView(this); azint_image = new JFJochAzIntImageView(this); one_over_d_sq_plot = new JFJochOneOverResSqChartView(this); stack = new QStackedWidget(this); stack->addWidget(azint_plot); // index 0 stack->addWidget(azint_image); // index 1 stack->addWidget(one_over_d_sq_plot); // index 2 layout->addWidget(stack); setLayout(layout); } void JFJochViewerSidePanelChart::comboBoxSelected(int val) { redrawPlot(); } void JFJochViewerSidePanelChart::redrawPlot() { std::vector x, y; if (image) { auto index = combo_box->currentIndex(); switch (combo_box->itemData(index).toInt()) { case 0: x = image->GetAzInt1D_BinToQ(); y = image->GetAzInt1D(); azint_plot->UpdateData(x, y, "Q [Å^-1]", ""); stack->setCurrentWidget(azint_plot); break; case 1: x = image->ImageData().integration_B_one_over_d_square; y = image->ImageData().integration_B_logI; one_over_d_sq_plot->UpdateData(x, y, "d [Å]", "ln(<I>)"); stack->setCurrentWidget(one_over_d_sq_plot); break; case 2: x = image->ImageData().integration_Isigma_one_over_d_square; y = image->ImageData().integration_Isigma; one_over_d_sq_plot->UpdateData(x, y, "d [Å]", "I/sigma"); stack->setCurrentWidget(one_over_d_sq_plot); break; case 4: x = image->Dataset().experiment.GetFluorescenceSpectrum().GetEnergy_eV(); y = image->Dataset().experiment.GetFluorescenceSpectrum().GetData(); azint_plot->UpdateData(x, y, "E [eV]", ""); stack->setCurrentWidget(azint_plot); break; case 5: x = image->ImageData().spot_plot_one_over_d_square; y = image->ImageData().spot_plot_count; one_over_d_sq_plot->UpdateData(x, y, "d [Å]", "Count"); stack->setCurrentWidget(one_over_d_sq_plot); break; case 6: x = image->ImageData().spot_plot_one_over_d_square; y = image->ImageData().spot_plot_intensity; one_over_d_sq_plot->UpdateData(x, y, "d [Å]", "Count"); stack->setCurrentWidget(one_over_d_sq_plot); break; case 3: { // Render 2D azimuthal integration as an image const auto &profile = image->ImageData().az_int_profile; const auto &ds = image->Dataset(); int az_bins = ds.azimuthal_bins; int q_bins = ds.q_bins; if (az_bins > 1 && q_bins > 0 && profile.size() == static_cast(az_bins * q_bins)) { azint_image->SetData(profile, az_bins, q_bins); } else { azint_image->Clear(); } stack->setCurrentWidget(azint_image); break; } } } } void JFJochViewerSidePanelChart::loadImage(std::shared_ptr in_image) { image = in_image; redrawPlot(); }