// Copyright (2019-2023) Paul Scherrer Institute #ifndef HDF5DATAFILE_H #define HDF5DATAFILE_H #include #include #include #include "HDF5Objects.h" #include "../common/SpotToSave.h" #include "../frame_serialize/JFJochMessages.h" #include "HDF5DataFilePlugin.h" struct HDF5DataFileStatistics { std::string filename; size_t max_image_number; uint64_t total_images; }; class HDF5DataFile { std::string filename; std::string tmp_filename; std::unique_ptr data_file = nullptr; std::unique_ptr data_set = nullptr; std::unique_ptr data_set_image_number = nullptr; std::vector> plugins; size_t xpixel; size_t ypixel; size_t max_image_number; size_t nimages; std::string image_units; std::vector timestamp; std::vector exptime; std::vector number; int32_t image_low; bool closed = false; void CreateFile(const DataMessage& msg); public: HDF5DataFile(const std::string& name, const std::vector& rad_int_bin_to_q, int32_t image_low, size_t max_spots = 0); ~HDF5DataFile(); std::optional Close(); void Write(const DataMessage& msg, uint64_t image_number); size_t GetNumImages() const; }; #endif //HDF5DATAFILE_H