Files
Jungfraujoch/reader/JFJochReader.h
2025-06-10 18:14:04 +02:00

52 lines
1.4 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;
// Following functions assume that current_image is protected via mutex
void CalcROI();
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<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<JFJochReaderImage> CopyImage();
// Analysis functions
void SetROI(const ROIBox& input);
void SetROI(const ROICircle& input);
void ClearROI();
};
#endif //JFJOCHIMAGEREADER_H