Files
Jungfraujoch/viewer/windows/JFJochMergeStatsWindow.h
T
leonarski_f a395f358ef
Build Packages / Create release (push) Successful in 17s
Build Packages / build:viewer:macos-arm64:nocuda (push) Successful in 3m22s
Build Packages / build:rugnux:macos-arm64:nocuda (push) Successful in 2m37s
Build Packages / build:rugnux:linux-aarch64:cuda (push) Successful in 9m33s
Build Packages / build:rugnux:linux-x86_64:cuda (push) Successful in 10m39s
Build Packages / build:viewer:linux-x86_64:nocuda (push) Successful in 11m4s
Build Packages / build:viewer:linux-x86_64:cuda (push) Successful in 13m19s
Build Packages / build:jfjoch:rocky8:nocuda (push) Successful in 17m37s
Build Packages / build:jfjoch:rocky9:nocuda (push) Successful in 18m49s
Build Packages / build:viewer:windows-x86_64:nocuda (push) Successful in 19m10s
Build Packages / build:viewer:windows-x86_64:cuda (push) Successful in 24m26s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 25m31s
Build Packages / build:jfjoch:ubuntu2404:nocuda (push) Successful in 18m54s
Build Packages / build:jfjoch:ubuntu2204:nocuda (push) Successful in 20m45s
Build Packages / Generate python client (push) Successful in 37s
Build Packages / build:jfjoch:rocky8:cuda-sls9 (push) Successful in 20m20s
Build Packages / Build documentation (push) Successful in 1m32s
Build Packages / build:rugnux:windows-x86_64:cuda (push) Successful in 14m37s
Build Packages / build:jfjoch:rocky9:cuda-sls9 (push) Successful in 21m6s
Build Packages / build:jfjoch:rocky8:cuda (push) Successful in 19m49s
Build Packages / build:jfjoch:rocky9:cuda (push) Successful in 20m29s
Build Packages / build:jfjoch:ubuntu2204:cuda (push) Successful in 17m2s
Build Packages / build:jfjoch:ubuntu2404:cuda (push) Successful in 14m27s
Build Packages / Unit tests (push) Successful in 1h18m12s
1.0.0-rc.174 (#84)
* Rugnux: Performance improvements on GPU and CPU (more of the pre-scan and of scaling on the GPU, faster CPU spot finding and crystal refinement), with unchanged results.
* Rugnux: More robust processing - patches of persistently hot pixels are masked, an inconsistent merge triggers a retry at the measured beam centre, and builds targeting different CPU levels give the same results.
* Rugnux: Improved scaling and merging - reflections with an overloaded pixel are dropped, as in XDS, sparse rotation sweeps are scaled more reliably, and French-Wilson amplitudes use an anisotropic Wilson prior.
* Rugnux: Improved space-group determination - glide planes in groups without a centre of symmetry, screw axes from short or weak axial rows kept when a higher group is adopted, and more reliable decisions on twinned and pseudo-symmetric crystals.
* Rugnux: Improved small-molecule processing - spots that grow wider than the integration disk and split spots are integrated over their measured footprint, sparse lattices are integrated on every frame, and the `.hkl` file holds unmerged scaled reflections (SHELX HKLF 4).
* Rugnux: Reads Rigaku d*TREK SMV images (Saturn CCD), including detector 2theta and encoded pixel overflows; home-source (rotating-anode) datasets were added to the validation battery.
* jfjoch_viewer: Fixed processing failing at the end with "Wrong JPEG library version" on Linux; the merge window shows the space group with proper subscripts and a checklist of crystal pathologies.

Reviewed-on: #84
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
2026-10-06 14:03:18 +02:00

60 lines
2.6 KiB
C++

// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#pragma once
#include <QWidget>
#include <cstdint>
#include <optional>
#include <utility>
#include <vector>
#include "../../image_analysis/scale_merge/Merge.h" // MergeStatistics
#include "../../image_analysis/scale_merge/TwinningAnalysis.h" // TwinningAnalysisResult
#include "../../image_analysis/scale_merge/SearchSpaceGroup.h" // SearchSpaceGroupResult
#include "../../rugnux/ReportDocument.h" // ReportCheck
class QComboBox;
class QLabel;
class QStackedWidget;
class QTableWidget;
class JFJochSimpleChartView;
// Pop-up analysis window for a finished scaling/merging run: a row of eye-catching overall numbers
// (ISa, CC1/2, R-meas, completeness, multiplicity, the Wilson B and the radiation-damage Delta-B, and
// CCref when a reference was used) and the report's pathology checklist above a per-resolution-shell plot whose metric is chosen from a
// combo, a per-shell table, and an ISa diagnostic scatter. Opened automatically when a merge job
// finishes and on demand from the processing-jobs dock. Modeless; deletes on close.
class JFJochMergeStatsWindow : public QWidget {
Q_OBJECT
public:
// `report` is the rugnux result report text (<prefix>_report.txt), shown as its own view.
JFJochMergeStatsWindow(const QString &title, const MergeStatistics &stats,
double isa, bool has_reference,
const TwinningAnalysisResult &twinning,
const std::optional<gemmi::SpaceGroup> &space_group,
const std::optional<SearchSpaceGroupResult> &space_group_search,
const std::vector<std::pair<float, float>> &merged_i_sigma,
const QString &report,
const std::vector<ReportCheck> &checks,
QWidget *parent = nullptr);
private:
MergeStatistics stats_;
bool has_reference_;
QComboBox *metric_ = nullptr;
QLabel *metricLabel_ = nullptr; // "Metric:" — hidden in table view
QStackedWidget *stack_ = nullptr; // page 0: plot, page 1: table, page 2: ISa, page 3: report
JFJochSimpleChartView *chart_ = nullptr;
QTableWidget *table_ = nullptr;
QWidget *isa_page_ = nullptr;
QWidget *report_page_ = nullptr;
void updatePlot();
void buildTable();
// Merged I/sigma against I, with the reported ISa drawn as its asymptote. Returns nullptr when
// there is nothing to draw.
QWidget *buildIsaDiagnostic(const std::vector<std::pair<float, float>> &i_sigma, double isa);
};