#ifndef SFWRITER_HPP #define SFWRITER_HPP #include #include #include #include "buffer_config.hpp" struct ImageMetadataBuffer { uint64_t pulse_id[core_buffer::WRITER_DATA_CACHE_N_IMAGES]; uint64_t frame_index[core_buffer::WRITER_DATA_CACHE_N_IMAGES]; uint32_t daq_rec[core_buffer::WRITER_DATA_CACHE_N_IMAGES]; uint8_t is_good_frame[core_buffer::WRITER_DATA_CACHE_N_IMAGES]; uint64_t data_n_bytes[core_buffer::WRITER_DATA_CACHE_N_IMAGES]; uint16_t n_pulses_in_buffer; }; struct ImageMetadata { uint64_t pulse_id; uint64_t frame_index; uint32_t daq_rec; uint8_t is_good_frame; uint64_t data_n_bytes; }; class WriterH5Writer { const size_t n_frames_; const size_t n_modules_; size_t current_write_index_; H5::H5File file_; H5::DataSet image_dataset_; H5::DataSet pulse_id_dataset_; H5::DataSet frame_index_dataset_; H5::DataSet daq_rec_dataset_; H5::DataSet is_good_frame_dataset_; public: WriterH5Writer(const std::string& output_file, const size_t n_frames, const size_t n_modules); ~WriterH5Writer(); void write(const ImageMetadataBuffer* metadata, const char* data); void close_file(); }; #endif //SFWRITER_HPP