From dec9b727918c98e5704d87eb5b0d63b10ea0556f Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 29 Apr 2020 14:26:30 +0200 Subject: [PATCH] Buffer should be moved in front of writer --- core-buffer/include/SFWriter.hpp | 5 +--- core-buffer/src/SFWriter.cpp | 41 ++++++++++++++------------------ 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/core-buffer/include/SFWriter.hpp b/core-buffer/include/SFWriter.hpp index 366d0d4..fca8b4b 100644 --- a/core-buffer/include/SFWriter.hpp +++ b/core-buffer/include/SFWriter.hpp @@ -28,16 +28,13 @@ class SFWriter { H5::DataSet daq_rec_dataset_; H5::DataSet n_received_packets_dataset_; - std::unique_ptr image_buffer_; - size_t image_buffer_count_; - public: SFWriter( const std::string& output_file, const size_t n_frames, const size_t n_modules); ~SFWriter(); - void write(const DetectorFrame* metadata, char* data); + void write(const DetectorFrame* metadata, const char* data); void close_file(); }; diff --git a/core-buffer/src/SFWriter.cpp b/core-buffer/src/SFWriter.cpp index e71a253..958aa3e 100644 --- a/core-buffer/src/SFWriter.cpp +++ b/core-buffer/src/SFWriter.cpp @@ -15,8 +15,7 @@ SFWriter::SFWriter( const size_t n_modules) : n_frames_(n_frames), n_modules_(n_modules), - current_write_index_(0), - image_buffer_count_(0) + current_write_index_(0) { file_ = H5::H5File(output_file, H5F_ACC_TRUNC); @@ -58,10 +57,6 @@ SFWriter::SFWriter( "n_received_packets", H5::PredType::NATIVE_UINT16, metadata_dataspace); - - image_buffer_ = make_unique( - n_modules_ * MODULE_N_BYTES * WRITER_BUFFER_SIZE); - image_buffer_count_ = 0; } SFWriter::~SFWriter() @@ -80,24 +75,26 @@ void SFWriter::close_file() file_.close(); } -void SFWriter::write(const DetectorFrame* metadata, char* data) { +void SFWriter::write(const DetectorFrame* metadata, const char* data) { auto pulse_id = metadata->pulse_id; auto frame_index = metadata->frame_index; auto daq_rec = metadata->daq_rec; auto n_received_packets = metadata->n_received_packets; - if (image_buffer_count_ < WRITER_BUFFER_SIZE) { - char *buffer = image_buffer_.get(); +// hsize_t buff_dim[2] = {n_modules_*MODULE_Y_SIZE, MODULE_X_SIZE}; +// H5::DataSpace buffer_space (2, buff_dim); +// +// hsize_t disk_dim[3] = {n_frames_, n_modules_*MODULE_Y_SIZE, MODULE_X_SIZE}; +// H5::DataSpace disk_space(3, disk_dim); +// +// hsize_t count[] = {1, n_modules_*MODULE_Y_SIZE, MODULE_X_SIZE}; +// hsize_t start[] = {current_write_index_, 0, 0}; +// disk_space.selectHyperslab(H5S_SELECT_SET, count, start); +// +// image_dataset_.write(data, H5::PredType::NATIVE_UINT16, +// buffer_space, +// disk_space); - memcpy( - (buffer + image_buffer_count_), - data, - MODULE_N_BYTES * n_modules_); - - image_buffer_count_++; - } - - if (image_buffer_count_ == WRITER_BUFFER_SIZE) { hsize_t offset[] = {current_write_index_, 0, 0}; @@ -106,8 +103,8 @@ void SFWriter::write(const DetectorFrame* metadata, char* data) { H5P_DEFAULT, 0, offset, - MODULE_N_BYTES * n_modules_ * WRITER_BUFFER_SIZE, - image_buffer_.get())) + MODULE_N_BYTES * n_modules_, + data)) { stringstream error_message; using namespace date; @@ -118,7 +115,5 @@ void SFWriter::write(const DetectorFrame* metadata, char* data) { throw runtime_error(error_message.str()); } - current_write_index_ += WRITER_BUFFER_SIZE; - image_buffer_count_ = 0; - } + current_write_index_ += 1; }