diff --git a/sf-writer/CMakeLists.txt b/sf-writer/CMakeLists.txt index 2ef7444..ec2f24e 100644 --- a/sf-writer/CMakeLists.txt +++ b/sf-writer/CMakeLists.txt @@ -1,7 +1,10 @@ file(GLOB SOURCES *.cpp) -add_executable(sf-writer sf_h5_writer.cpp BufferMultiReader.cpp) +add_executable(sf-writer + sf_h5_writer.cpp + BufferMultiReader.cpp + SFWriter.cpp) set_target_properties(sf-writer PROPERTIES OUTPUT_NAME sf_h5_writer) target_link_libraries(sf-writer diff --git a/sf-writer/SFWriter.cpp b/sf-writer/SFWriter.cpp new file mode 100644 index 0000000..1f508dd --- /dev/null +++ b/sf-writer/SFWriter.cpp @@ -0,0 +1,71 @@ +#include "SFWriter.hpp" +#include "buffer_config.hpp" + +using namespace std; +using namespace core_buffer; + +SFWriter::SFWriter( + const string& output_file, + const size_t n_frames, + const size_t n_modules) +{ + file_ = H5::H5File(output_file, H5F_ACC_TRUNC); + + hsize_t image_dataset_dims[3] = + {n_frames, n_modules * MODULE_Y_SIZE, MODULE_X_SIZE}; + + H5::DataSpace image_dataspace(3, image_dataset_dims); + + hsize_t image_dataset_chunking[3] = + {1, n_modules * MODULE_Y_SIZE, MODULE_X_SIZE}; + H5::DSetCreatPropList image_dataset_properties; + image_dataset_properties.setChunk(3, image_dataset_chunking); + + image_dataset_ = file_.createDataSet( + "image", + H5::PredType::NATIVE_UINT16, + image_dataspace, + image_dataset_properties); + + hsize_t metadata_dataset_dims[2] = {n_frames, 1}; + H5::DataSpace metadata_dataspace(2, metadata_dataset_dims); + + pulse_id_dataset_ = file_.createDataSet( + "pulse_id", + H5::PredType::NATIVE_UINT64, + metadata_dataspace); + + pulse_id_dataset_ = file_.createDataSet( + "frame_index", + H5::PredType::NATIVE_UINT64, + metadata_dataspace); + + pulse_id_dataset_ = file_.createDataSet( + "daq_rec", + H5::PredType::NATIVE_UINT32, + metadata_dataspace); + + pulse_id_dataset_ = file_.createDataSet( + "n_received_packets", + H5::PredType::NATIVE_UINT16, + metadata_dataspace); +} + +SFWriter::~SFWriter() +{ + close_file(); +} + +void SFWriter::close_file() +{ + image_dataset_.close(); + pulse_id_dataset_.close(); + frame_index_dataset_.close(); + daq_rec_dataset_.close(); + n_received_packets_dataset_.close(); + + file_.close(); +} + +//void write(char* data, std::shared_ptr metadata); +//void close_file(); \ No newline at end of file diff --git a/sf-writer/SFWriter.hpp b/sf-writer/SFWriter.hpp new file mode 100644 index 0000000..6b6fe75 --- /dev/null +++ b/sf-writer/SFWriter.hpp @@ -0,0 +1,30 @@ +#ifndef SFWRITER_HPP +#define SFWRITER_HPP + +#include +#include +#include +#include "RingBuffer.hpp" + +class SFWriter { + + H5::H5File file_; + + H5::DataSet image_dataset_; + H5::DataSet pulse_id_dataset_; + H5::DataSet frame_index_dataset_; + H5::DataSet daq_rec_dataset_; + H5::DataSet n_received_packets_dataset_; + +public: + SFWriter( + const std::string& output_file, + const size_t n_frames, + const size_t n_modules); + ~SFWriter(); + void write(char* data, std::shared_ptr metadata); + void close_file(); +}; + + +#endif //SFWRITER_HPP