diff --git a/viewer/JFJochViewerSidePanelChart.cpp b/viewer/JFJochViewerSidePanelChart.cpp index f13dbc98..f58916e1 100644 --- a/viewer/JFJochViewerSidePanelChart.cpp +++ b/viewer/JFJochViewerSidePanelChart.cpp @@ -87,8 +87,8 @@ void JFJochViewerSidePanelChart::redrawPlot() { 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); + if (az_bins > 0 && q_bins > 0 && profile.size() == static_cast(az_bins * q_bins)) { + azint_image->SetData(profile, ds.az_int_bin_to_phi, ds.az_int_bin_to_q, az_bins); } else { azint_image->Clear(); } diff --git a/viewer/widgets/JFJochAzIntImageView.cpp b/viewer/widgets/JFJochAzIntImageView.cpp index 936eecd3..389bf907 100644 --- a/viewer/widgets/JFJochAzIntImageView.cpp +++ b/viewer/widgets/JFJochAzIntImageView.cpp @@ -4,6 +4,8 @@ #include "JFJochAzIntImageView.h" #include +#include "../../common/JFJochException.h" + JFJochAzIntImageView::JFJochAzIntImageView(QWidget *parent) : QWidget(parent), label(new QLabel(this)) { label->setAlignment(Qt::AlignCenter); @@ -22,12 +24,22 @@ void JFJochAzIntImageView::Clear() { // data: size = azimuthal_bins * q_bins // Layout: q varies fastest (i % q_bins == q index) -void JFJochAzIntImageView::SetData(const std::vector &data, int azimuthal_bins, int q_bins) { - if (azimuthal_bins <= 0 || q_bins <= 0 || - data.size() != static_cast(azimuthal_bins * q_bins)) { +void JFJochAzIntImageView::SetData(const std::vector &data, + const std::vector &phi, + const std::vector &q, + int azimuthal_bins) { + if (azimuthal_bins <= 0) { Clear(); - return; - } + throw std::runtime_error("azimuthal_bins <= 0"); + } + + int q_bins = data.size() / azimuthal_bins; + + if (q_bins <= 0 || phi.size() != data.size() || q.size() != data.size()) { + Clear(); + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, + "Mismatch in input size"); + } float local_min = range_min, local_max = range_max; if (auto_range) { diff --git a/viewer/widgets/JFJochAzIntImageView.h b/viewer/widgets/JFJochAzIntImageView.h index 9cefe25e..a74ac763 100644 --- a/viewer/widgets/JFJochAzIntImageView.h +++ b/viewer/widgets/JFJochAzIntImageView.h @@ -27,7 +27,11 @@ class JFJochAzIntImageView : public QWidget { public: explicit JFJochAzIntImageView(QWidget *parent = nullptr); void Clear(); - void SetData(const std::vector& data, int azimuthal_bins, int q_bins); + + void SetData(const std::vector &data, + const std::vector &phi, + const std::vector &q, + int azimuthal_bins); void SetColorScale(ColorScaleEnum map); void SetRangeAuto();