* Enhancements for XFEL
* Enhancements for EIGER * Writer is more flexible and capable of handling DECTRIS data
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
// Copyright (2019-2024) Paul Scherrer Institute
|
||||
|
||||
#include "HDF5DataFilePluginJUNGFRAU.h"
|
||||
|
||||
void HDF5DataFilePluginJUNGFRAU::SetupSWMRFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
if (msg.jf_info.has_value() && msg.storage_cell.has_value() && msg.receiver_aq_dev_delay.has_value())
|
||||
enable = true;
|
||||
else
|
||||
return;
|
||||
|
||||
HDF5Group(data_file, "/entry/jungfrau").NXClass("NXcollection");
|
||||
|
||||
HDF5DataSpace data_space_linear({2}, {H5S_UNLIMITED});
|
||||
HDF5Dcpl dcpl_linear;
|
||||
dcpl_linear.SetChunking({1});
|
||||
HDF5DataSet(data_file, "/entry/jungfrau/debug", HDF5DataType(4, false), data_space_linear, dcpl_linear).SetExtent({1});
|
||||
HDF5DataSet(data_file, "/entry/jungfrau/storageCell", HDF5DataType(2, false), data_space_linear, dcpl_linear).SetExtent({1});
|
||||
HDF5DataSet(data_file, "/entry/jungfrau/receiverDelay", HDF5DataType(4, false), data_space_linear, dcpl_linear).SetExtent({1});
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginJUNGFRAU::OpenFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
if (!enable)
|
||||
return;
|
||||
|
||||
data_set_jf_info = std::make_unique<HDF5DataSet>(data_file, "/entry/jungfrau/debug");
|
||||
data_set_receiver_aq_dev_delay = std::make_unique<HDF5DataSet>(data_file, "/entry/jungfrau/receiverDelay");
|
||||
data_set_storage_cell = std::make_unique<HDF5DataSet>(data_file, "/entry/jungfrau/storageCell");
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginJUNGFRAU::Write(const DataMessage &msg) {
|
||||
if (!enable
|
||||
|| !msg.jf_info.has_value()
|
||||
|| !msg.receiver_aq_dev_delay.has_value()
|
||||
|| !msg.storage_cell.has_value())
|
||||
return;
|
||||
|
||||
size_t image_number = msg.number;
|
||||
|
||||
if (image_number >= max_image_number) {
|
||||
max_image_number = image_number;
|
||||
data_set_jf_info->SetExtent({max_image_number + 1});
|
||||
data_set_receiver_aq_dev_delay->SetExtent({max_image_number + 1});
|
||||
data_set_storage_cell->SetExtent({max_image_number + 1});
|
||||
}
|
||||
|
||||
data_set_jf_info->WriteScalar(msg.jf_info.value(), {image_number});
|
||||
data_set_receiver_aq_dev_delay->WriteScalar(msg.receiver_aq_dev_delay.value(), {image_number});
|
||||
data_set_storage_cell->WriteScalar(msg.storage_cell.value(), {image_number});
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginJUNGFRAU::Flush() {
|
||||
if (!enable)
|
||||
return;
|
||||
|
||||
data_set_jf_info->Flush();
|
||||
data_set_receiver_aq_dev_delay->Flush();
|
||||
data_set_storage_cell->Flush();
|
||||
}
|
||||
Reference in New Issue
Block a user