From dce9d651911361d621234d9f5deb66d033c816ea Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 22 Sep 2025 10:03:47 +0200 Subject: [PATCH] jfjoch_viewer: There is central place for default DiffractionExperiment in both reader classes --- reader/JFJochHDF5Reader.cpp | 3 +-- reader/JFJochHttpReader.cpp | 3 +-- reader/JFJochReader.cpp | 6 ++++++ reader/JFJochReader.h | 6 +++++- viewer/JFJochImageReadingWorker.cpp | 25 ++++++++++++++----------- viewer/JFJochImageReadingWorker.h | 4 ++-- viewer/JFJochViewerWindow.cpp | 13 +++++++------ 7 files changed, 36 insertions(+), 24 deletions(-) diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index 39a941f9..a1a2e8f5 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -52,8 +52,7 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) { try { auto dataset = std::make_shared(); master_file = std::make_unique(filename); - dataset->experiment.DetectIceRings(true); - dataset->experiment.IndexingAlgorithm(IndexingAlgorithmEnum::Auto); + dataset->experiment = default_experiment; std::filesystem::path fsPath(filename); dataset->experiment.FilePrefix(dataset_name(filename)); diff --git a/reader/JFJochHttpReader.cpp b/reader/JFJochHttpReader.cpp index 08bc17bc..2ae98a53 100644 --- a/reader/JFJochHttpReader.cpp +++ b/reader/JFJochHttpReader.cpp @@ -57,8 +57,7 @@ std::shared_ptr JFJochHttpReader::UpdateDataset_i() { return {}; auto dataset = std::make_shared(); - dataset->experiment.DetectIceRings(true); - dataset->experiment.IndexingAlgorithm(IndexingAlgorithmEnum::Auto); + dataset->experiment = default_experiment; // JFJochReader is always using int32_t dataset->experiment.BitDepthImage(32); diff --git a/reader/JFJochReader.cpp b/reader/JFJochReader.cpp index bf57ef56..49a8fbf0 100644 --- a/reader/JFJochReader.cpp +++ b/reader/JFJochReader.cpp @@ -4,6 +4,12 @@ #include "JFJochReader.h" #include +JFJochReader &JFJochReader::Experiment(const DiffractionExperiment &experiment) { +std::unique_lock ul(m); + default_experiment = experiment; + return *this; +} + void JFJochReader::SummationThread(int64_t image0, int64_t n_image, int64_t image_jump, JFJochReaderImage &image) { std::vector buffer; DataMessage msg; diff --git a/reader/JFJochReader.h b/reader/JFJochReader.h index d7e5cc9a..9e8e0649 100644 --- a/reader/JFJochReader.h +++ b/reader/JFJochReader.h @@ -11,14 +11,15 @@ #include "../common/JFJochMessages.h" #include "../common/Plot.h" #include "../common/ROIBox.h" +#include "../common/DiffractionExperiment.h" #include "JFJochReaderDataset.h" #include "JFJochReaderImage.h" class JFJochReader { -private: mutable std::mutex m; std::shared_ptr dataset; + virtual bool LoadImage_i(std::shared_ptr &dataset, DataMessage& message, std::vector &buffer, @@ -32,9 +33,12 @@ private: JFJochReaderImage &image); protected: void SetStartMessage(const std::shared_ptr &val); + DiffractionExperiment default_experiment; public: virtual ~JFJochReader() = default; + JFJochReader& Experiment(const DiffractionExperiment& experiment); + std::shared_ptr GetDataset() const; [[nodiscard]] virtual uint64_t GetNumberOfImages() const = 0; diff --git a/viewer/JFJochImageReadingWorker.cpp b/viewer/JFJochImageReadingWorker.cpp index 3fe81ea6..a85ac63b 100644 --- a/viewer/JFJochImageReadingWorker.cpp +++ b/viewer/JFJochImageReadingWorker.cpp @@ -10,11 +10,12 @@ #include JFJochImageReadingWorker::JFJochImageReadingWorker(const SpotFindingSettings& settings, - const IndexingSettings& in_indexing_settings, - QObject *parent) : QObject(parent) { - spot_finding_settings = settings; - indexing_settings = in_indexing_settings; + const DiffractionExperiment& experiment, QObject *parent) : QObject(parent), indexing_settings(experiment.GetIndexingSettings()) { + spot_finding_settings = settings;; + indexing = std::make_unique(indexing_settings); + http_reader.Experiment(experiment); + file_reader.Experiment(experiment); } void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_number, qint64 summation) { @@ -38,9 +39,9 @@ void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_nu emit setToolbarMode(JFJochViewerToolbar::ToolbarMode::None); } else { http_mode = false; - reader.ReadFile(filename.toStdString()); - total_images = reader.GetNumberOfImages(); - dataset = reader.GetDataset(); + file_reader.ReadFile(filename.toStdString()); + total_images = file_reader.GetNumberOfImages(); + dataset = file_reader.GetDataset(); emit setToolbarMode(JFJochViewerToolbar::ToolbarMode::None); } current_image.reset(); @@ -66,7 +67,7 @@ void JFJochImageReadingWorker::CloseFile() { if (http_mode) http_reader.Close(); else - reader.Close(); + file_reader.Close(); current_image_ptr.reset(); current_image.reset(); @@ -118,7 +119,7 @@ void JFJochImageReadingWorker::LoadImage_i(int64_t image_number, int64_t summati } else { if (image_number < 0) return; - current_image_ptr = reader.LoadImage(image_number, summation); + current_image_ptr = file_reader.LoadImage(image_number, summation); } if (!current_image_ptr) { @@ -180,8 +181,8 @@ void JFJochImageReadingWorker::UpdateDataset_i(const DiffractionExperiment &expe http_reader.UpdateGeomMetadata(experiment); dataset = http_reader.GetDataset(); } else { - reader.UpdateGeomMetadata(experiment); - dataset = reader.GetDataset(); + file_reader.UpdateGeomMetadata(experiment); + dataset = file_reader.GetDataset(); } UpdateAzint_in(dataset.get()); emit datasetLoaded(dataset); @@ -204,6 +205,7 @@ void JFJochImageReadingWorker::ReanalyzeImage_i() { auto new_image = std::make_shared(*current_image_ptr); auto new_image_dataset = new_image->CreateMutableDataset(); + new_image_dataset->experiment.ImportIndexingSettings(indexing_settings); new_image_dataset->az_int_bin_to_phi = azint_mapping->GetBinToPhi(); new_image_dataset->az_int_bin_to_q = azint_mapping->GetBinToQ(); new_image_dataset->azimuthal_bins = azint_mapping->GetAzimuthalBinCount(); @@ -290,6 +292,7 @@ void JFJochImageReadingWorker::FindCenter() { void JFJochImageReadingWorker::UpdateSpotFindingSettings(const SpotFindingSettings &settings, const IndexingSettings &indexing, bool reanalyze) { QMutexLocker locker(&m); spot_finding_settings = settings; + // "local" indexing settings indexing_settings.Tolerance(indexing.GetTolerance()); indexing_settings.ViableCellMinSpots(indexing.GetViableCellMinSpots()); diff --git a/viewer/JFJochImageReadingWorker.h b/viewer/JFJochImageReadingWorker.h index 07989e63..9a119206 100644 --- a/viewer/JFJochImageReadingWorker.h +++ b/viewer/JFJochImageReadingWorker.h @@ -29,7 +29,7 @@ class JFJochImageReadingWorker : public QObject { mutable QMutex m; bool http_mode = false; - JFJochHDF5Reader reader; + JFJochHDF5Reader file_reader; JFJochHttpReader http_reader; QString current_file; @@ -63,7 +63,7 @@ signals: void setToolbarMode(JFJochViewerToolbar::ToolbarMode input); void setRings(const QVector &v); public: - JFJochImageReadingWorker(const SpotFindingSettings &settings, const IndexingSettings &indexing, QObject *parent = nullptr); + JFJochImageReadingWorker(const SpotFindingSettings &settings, const DiffractionExperiment& experiment, QObject *parent = nullptr); ~JFJochImageReadingWorker() override = default; public slots: void LoadFile(const QString &filename, qint64 image_number, qint64 summation); diff --git a/viewer/JFJochViewerWindow.cpp b/viewer/JFJochViewerWindow.cpp index 5b617da1..04a2042f 100644 --- a/viewer/JFJochViewerWindow.cpp +++ b/viewer/JFJochViewerWindow.cpp @@ -32,13 +32,18 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString resize(1200, 1200); SpotFindingSettings spot_finding_settings = DiffractionExperiment::DefaultDataProcessingSettings(); - IndexingSettings indexing_settings; + spot_finding_settings.high_resolution_limit = 0.5; spot_finding_settings.indexing = false; + IndexingSettings indexing_settings; indexing_settings.IndexingThreads(1); indexing_settings.Algorithm(IndexingAlgorithmEnum::Auto); + DiffractionExperiment experiment; + experiment.ImportIndexingSettings(indexing_settings); + experiment.DetectIceRings(true); + auto v_splitter = new QSplitter(this); setCentralWidget(v_splitter); v_splitter->setOrientation(Qt::Vertical); @@ -64,7 +69,7 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString dataset_info->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); v_splitter->addWidget(dataset_info); - reading_worker = new JFJochImageReadingWorker(spot_finding_settings, indexing_settings); + reading_worker = new JFJochImageReadingWorker(spot_finding_settings, experiment); reading_thread = new QThread(this); reading_worker->moveToThread(reading_thread); reading_thread->start(); @@ -257,10 +262,6 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString connect(side_panel, &JFJochViewerSidePanel::highlightIceRings, viewer, &JFJochViewerImage::highlightIceRings); - - - - if (!file.isEmpty()) LoadFile(file, 0, 1); }