Files
Jungfraujoch/reader/JFJochReader.h
2025-06-20 09:52:26 +02:00

60 lines
1.7 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#ifndef JFJOCHIMAGEREADER_H
#define JFJOCHIMAGEREADER_H
#include <unordered_set>
#include <map>
#include <mutex>
#include "../common/JFJochMessages.h"
#include "../common/Plot.h"
#include "../common/ROIBox.h"
#include "JFJochReaderDataset.h"
#include "JFJochReaderImage.h"
class JFJochReader {
private:
std::unique_ptr<ROIElement> roi;
mutable std::mutex current_image_mutex;
std::shared_ptr<JFJochReaderImage> current_image;
mutable std::mutex start_message_mutex;
std::shared_ptr<JFJochReaderDataset> start_message;
BraggIntegrationSettings bragg_integration_settings;
// The following functions assume that current_image is protected via mutex
void CalcROI();
void BraggIntegrate();
virtual std::shared_ptr<JFJochReaderImage> LoadImageInternal(int64_t image_number) = 0;
protected:
void SetStartMessage(const std::shared_ptr<JFJochReaderDataset> &val);
public:
virtual ~JFJochReader() = default;
std::shared_ptr<const JFJochReaderDataset> GetStartMessage() const;
[[nodiscard]] virtual uint64_t GetNumberOfImages() const = 0;
virtual void Close() = 0;
void LoadImage(int64_t image_number, int64_t summation_factor = 1);
std::shared_ptr<const JFJochReaderImage> CopyImage();
void SetBraggIntegrationSettings(const BraggIntegrationSettings& settings);
BraggIntegrationSettings GetBraggIntegrationSettings() const;
// Analysis functions
void SetROI(const ROIBox& input);
void SetROI(const ROICircle& input);
void ClearROI();
void UpdateExperiment(const DiffractionExperiment& experiment);
};
#endif //JFJOCHIMAGEREADER_H