From c72e4e97c7d82d704064b547421752682beb2080 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 15 Oct 2026 16:58:38 +0200 Subject: [PATCH] Viewer: a run's results shown leave "Known unit cell" unticked too When a finished job's _process.h5 becomes the active run (or the user switches runs), the settings panel shows the run's cell and space group but no longer ticks "Known unit cell", so the next run determines the crystal from the data as a bare rugnux does, unless the user ticks it. Before, the run's crystal - P1 for a run that ended there - was used by every later run until cleared. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- rugnux/RugnuxDefaults.h | 2 +- viewer/JFJochViewerWindow.cpp | 5 ++++- viewer/widgets/JFJochViewerSettingsDock.cpp | 2 +- viewer/widgets/JFJochViewerSettingsDock.h | 6 +++--- viewer/windows/JFJochProcessingJobsWindow.cpp | 7 +++---- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/rugnux/RugnuxDefaults.h b/rugnux/RugnuxDefaults.h index 2f2442f03..a94b687eb 100644 --- a/rugnux/RugnuxDefaults.h +++ b/rugnux/RugnuxDefaults.h @@ -46,7 +46,7 @@ void ApplyRugnuxExperimentDefaults(DiffractionExperiment &experiment); // it to that lattice, and a stored space group skips the search outright. The CLI calls this and then // applies -C / -S (or a reference MTZ) on top; the viewer instead takes the crystal straight from its // settings panel, which clears both fields when "Unit cell known" is unticked - as it is when a file is -// opened. +// opened or a run's results are shown. void ClearStoredCrystal(DiffractionExperiment &experiment); // Scaling/merging defaults for the workflow. Several differ between rotation and stills because the diff --git a/viewer/JFJochViewerWindow.cpp b/viewer/JFJochViewerWindow.cpp index 2f85ebd3b..6fb7d2481 100644 --- a/viewer/JFJochViewerWindow.cpp +++ b/viewer/JFJochViewerWindow.cpp @@ -627,8 +627,11 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString reading_worker, &JFJochImageReadingWorker::FindCenter); connect(this, &JFJochViewerWindow::datasetReady, settingsPanel, &JFJochViewerSettingsDock::datasetLoaded); + // Both arrive after the datasetLoaded that fills the panel from the new file / run. connect(reading_worker, &JFJochImageReadingWorker::fileOpened, - settingsPanel, &JFJochViewerSettingsDock::fileOpened); + settingsPanel, &JFJochViewerSettingsDock::forgetStoredCrystal); + connect(reading_worker, &JFJochImageReadingWorker::snapshotsChanged, + settingsPanel, &JFJochViewerSettingsDock::forgetStoredCrystal); connect(this, &JFJochViewerWindow::imageReady, settingsPanel, &JFJochViewerSettingsDock::loadImage); connect(settingsPanel, &JFJochViewerSettingsDock::ringsFromCalibration, diff --git a/viewer/widgets/JFJochViewerSettingsDock.cpp b/viewer/widgets/JFJochViewerSettingsDock.cpp index 1a7dc456a..b953a1d5d 100644 --- a/viewer/widgets/JFJochViewerSettingsDock.cpp +++ b/viewer/widgets/JFJochViewerSettingsDock.cpp @@ -1022,7 +1022,7 @@ void JFJochViewerSettingsDock::datasetLoaded(std::shared_ptrsetChecked(false); // a change emits the experiment without the crystal } diff --git a/viewer/widgets/JFJochViewerSettingsDock.h b/viewer/widgets/JFJochViewerSettingsDock.h index f6f9faf58..3bed5212f 100644 --- a/viewer/widgets/JFJochViewerSettingsDock.h +++ b/viewer/widgets/JFJochViewerSettingsDock.h @@ -42,9 +42,9 @@ public: public slots: void datasetLoaded(std::shared_ptr dataset); - // A new file: the crystal it stores is shown but not used until "Known unit cell" is ticked, as a - // bare `rugnux` forgets it (ClearStoredCrystal). - void fileOpened(); + // A new file, or a run's results shown: the crystal they store is shown but not used until "Known + // unit cell" is ticked, as a bare `rugnux` forgets it (ClearStoredCrystal). + void forgetStoredCrystal(); void loadImage(std::shared_ptr image); void referenceLoaded(ReferenceMtzInfo info); // worker reports a (un)loaded reference MTZ // Dataset re-processing reads a stored HDF5 file, so it is unavailable on a live HTTP stream: diff --git a/viewer/windows/JFJochProcessingJobsWindow.cpp b/viewer/windows/JFJochProcessingJobsWindow.cpp index 9ff12cdb2..0ba1ddbe4 100644 --- a/viewer/windows/JFJochProcessingJobsWindow.cpp +++ b/viewer/windows/JFJochProcessingJobsWindow.cpp @@ -432,10 +432,9 @@ void JFJochProcessingJobsWindow::newJob(ProcessMode mode, CalibrationSelection c // // The cell and space group come from the settings panel and nowhere else: with "Unit cell known" // ticked they are indexed and merged with, unticked the panel clears both and the run determines - // them from the data (-C / -S versus bare `rugnux`). A newly opened file starts unticked - its stored - // crystal is shown but not used, as `rugnux` forgets it - so what a run uses is always the crystal - // shown on screen. A finished job's _process.h5 becoming the active snapshot does tick it with the - // run's crystal (a run that ended in P1 shows P1), which can be cleared before the next run. + // them from the data (-C / -S versus bare `rugnux`). A newly opened file, and a run's results when + // they are shown, start unticked - the crystal they store is shown but not used, as `rugnux` forgets + // it - so what a run uses is always the crystal ticked on screen. DiffractionExperiment experiment = inputs.experiment; const auto polarization = experiment.GetPolarizationFactor(); ApplyRugnuxExperimentDefaults(experiment);