mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-12 09:15:36 +02:00
Add new SF writer with basic operations
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<DetectorFrame> metadata);
|
||||
//void close_file();
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef SFWRITER_HPP
|
||||
#define SFWRITER_HPP
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <H5Cpp.h>
|
||||
#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<DetectorFrame> metadata);
|
||||
void close_file();
|
||||
};
|
||||
|
||||
|
||||
#endif //SFWRITER_HPP
|
||||
Reference in New Issue
Block a user