// 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 "HDF5DataFilePluginAzInt.h" #include "HDF5DataFilePluginMX.h" #include "HDF5DataFilePluginXFEL.h" #include "HDF5DataFilePluginJUNGFRAU.h" struct HDF5DataFileStatistics { std::string filename; size_t max_image_number; uint64_t total_images; }; class HDF5DataFile { std::string filename; std::unique_ptr data_file = nullptr; std::unique_ptr data_set = 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::chrono::time_point last_flush; std::chrono::microseconds swmr_flush_period = std::chrono::seconds(5); void CreateFile(const DataMessage& msg); void SetupSWMRFile(const DataMessage& msg); public: HDF5DataFile(const std::string& name, const std::vector& rad_int_bin_to_q, size_t max_spots = 0); ~HDF5DataFile(); void Write(const DataMessage& msg, uint64_t image_number); HDF5DataFileStatistics GetStatistics() const; size_t GetNumImages() const; }; #endif //HDF5DATAFILE_H