// 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(data_file, "/entry/jungfrau/debug"); data_set_receiver_aq_dev_delay = std::make_unique(data_file, "/entry/jungfrau/receiverDelay"); data_set_storage_cell = std::make_unique(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(); }