jfjoch_viewer: There is central place for default DiffractionExperiment in both reader classes

This commit is contained in:
2025-09-22 10:03:47 +02:00
parent 0ddea1b143
commit dce9d65191
7 changed files with 36 additions and 24 deletions
+1 -2
View File
@@ -52,8 +52,7 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) {
try {
auto dataset = std::make_shared<JFJochReaderDataset>();
master_file = std::make_unique<HDF5ReadOnlyFile>(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));
+1 -2
View File
@@ -57,8 +57,7 @@ std::shared_ptr<JFJochReaderDataset> JFJochHttpReader::UpdateDataset_i() {
return {};
auto dataset = std::make_shared<JFJochReaderDataset>();
dataset->experiment.DetectIceRings(true);
dataset->experiment.IndexingAlgorithm(IndexingAlgorithmEnum::Auto);
dataset->experiment = default_experiment;
// JFJochReader is always using int32_t
dataset->experiment.BitDepthImage(32);
+6
View File
@@ -4,6 +4,12 @@
#include "JFJochReader.h"
#include <future>
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<uint8_t> buffer;
DataMessage msg;
+5 -1
View File
@@ -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<JFJochReaderDataset> dataset;
virtual bool LoadImage_i(std::shared_ptr<JFJochReaderDataset> &dataset,
DataMessage& message,
std::vector<uint8_t> &buffer,
@@ -32,9 +33,12 @@ private:
JFJochReaderImage &image);
protected:
void SetStartMessage(const std::shared_ptr<JFJochReaderDataset> &val);
DiffractionExperiment default_experiment;
public:
virtual ~JFJochReader() = default;
JFJochReader& Experiment(const DiffractionExperiment& experiment);
std::shared_ptr<const JFJochReaderDataset> GetDataset() const;
[[nodiscard]] virtual uint64_t GetNumberOfImages() const = 0;
+14 -11
View File
@@ -10,11 +10,12 @@
#include <QMutexLocker>
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<IndexerThreadPool>(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<JFJochReaderImage>(*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());
+2 -2
View File
@@ -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<float> &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);
+7 -6
View File
@@ -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);
}