// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "JFJochViewerImageStatistics.h" #include JFJochViewerImageStatistics::JFJochViewerImageStatistics(JFJochReader &in_reader, QWidget *parent) : QWidget(parent), reader(in_reader) { QFormLayout* layout = new QFormLayout(this); dataset_name = new QLabel(this); layout->addRow(new QLabel("Dataset:"), dataset_name); detector_name = new QLabel(this); layout->addRow(new QLabel("Detector:"), detector_name); error_pixels = new QLabel(this); layout->addRow(new QLabel("Error pixels:"), error_pixels); sat_pixels = new QLabel(this); layout->addRow(new QLabel("Sat. pixels:"), sat_pixels); valid_values = new QLabel(this); layout->addRow(new QLabel("Valid values:"), valid_values); spots = new QLabel(this); layout->addRow(new QLabel("Spots:"), spots); bkg_estimate = new QLabel(this); layout->addRow(new QLabel("Background:"), bkg_estimate); indexed = new QLabel(this); layout->addRow(new QLabel("Indexing:"), indexed); roi_sum = new QLabel(this); layout->addRow(new QLabel("ROI sum:"), roi_sum); roi_mean = new QLabel(this); layout->addRow(new QLabel("ROI mean:"), roi_mean); roi_stddev = new QLabel(this); layout->addRow(new QLabel("ROI st. dev.:"), roi_stddev); roi_max = new QLabel(this); layout->addRow(new QLabel("ROI max:"), roi_max); } void JFJochViewerImageStatistics::noImage() { dataset_name->setText(""); detector_name->setText(""); error_pixels->setText(""); sat_pixels->setText(""); valid_values->setText(""); spots->setText(""); bkg_estimate->setText(""); indexed->setText(""); roi_sum->setText(""); roi_mean->setText(""); roi_stddev->setText(""); roi_max->setText(""); } void JFJochViewerImageStatistics::loadImage() { auto image = reader.CopyImage(); QString text; text = QString("%1").arg(QString::fromStdString(image->dataset->name)); dataset_name->setText(text); text = QString("%1").arg(QString::fromStdString(image->dataset->detector_name)); detector_name->setText(text); text = QString("%1").arg(image->error_pixel.size()); error_pixels->setText(text); text = QString("%1").arg(image->saturated_pixel.size()); sat_pixels->setText(text); text = QString("%1").arg(image->spots.size()); spots->setText(text); text = QString("%1 - %2") .arg(image->valid_pixel.begin()->first) .arg(image->valid_pixel.rbegin()->first); valid_values->setText(text); if (image->dataset->bkg_estimate.size() > image->number) { text = QString("%1").arg(image->dataset->bkg_estimate[image->number]); bkg_estimate->setText(text); } else { bkg_estimate->setText("N/A"); } if (image->dataset->indexing_result.size() > image->number) { if (image->dataset->indexing_result[image->number] != 0) text = QString("Lattice found"); else text = QString("No lattice"); indexed->setText(text); } else { indexed->setText("N/A"); } if (image->roi && image->roi->pixels > 0) { text = QString("%1").arg(image->roi->sum); roi_sum->setText(text); auto roi_npixel = static_cast(image->roi->pixels); double roi_mean_val = static_cast(image->roi->sum) / roi_npixel; text = QString("%1").arg(QString::number(roi_mean_val, 'f', 3)); roi_mean->setText(text); double variance = static_cast(image->roi->sum_square) / roi_npixel - roi_mean_val * roi_mean_val; text = QString("%1").arg(QString::number(sqrt(variance), 'f', 3)); roi_stddev->setText(text); text = QString("%1").arg(image->roi->max_count); roi_max->setText(text); } else { roi_sum->setText("N/A"); roi_mean->setText("N/A"); roi_stddev->setText("N/A"); roi_max->setText("N/A"); } }