* Enhancements for XFEL

* Enhancements for EIGER
* Writer is more flexible and capable of handling DECTRIS data
This commit is contained in:
2024-03-05 20:41:47 +01:00
parent 71d862b706
commit d315506633
165 changed files with 5440 additions and 2230 deletions
+52
View File
@@ -0,0 +1,52 @@
// Copyright (2019-2024) Paul Scherrer Institute
#include "HDF5DataFilePluginXFEL.h"
void HDF5DataFilePluginXFEL::SetupSWMRFile(HDF5File &data_file, const DataMessage &msg) {
if (msg.xfel_pulse_id.has_value() && msg.xfel_event_code.has_value())
enable = true;
else
return;
HDF5Group(data_file, "/entry/xfel").NXClass("NXcollection");
HDF5DataSpace data_space_linear({2}, {H5S_UNLIMITED});
HDF5Dcpl dcpl_linear;
dcpl_linear.SetChunking({1});
HDF5DataSet(data_file, "/entry/xfel/pulseID", HDF5DataType(8, false), data_space_linear, dcpl_linear).SetExtent({1});
HDF5DataSet(data_file, "/entry/xfel/eventCode", HDF5DataType(4, false), data_space_linear, dcpl_linear).SetExtent({1});
}
void HDF5DataFilePluginXFEL::OpenFile(HDF5File &data_file, const DataMessage &msg) {
if (!enable)
return;
data_set_xfel_event_code = std::make_unique<HDF5DataSet>(data_file, "/entry/xfel/eventCode");
data_set_xfel_pulseid = std::make_unique<HDF5DataSet>(data_file, "/entry/xfel/pulseID");
}
void HDF5DataFilePluginXFEL::Write(const DataMessage &msg) {
if (!enable
|| !msg.xfel_pulse_id.has_value()
|| !msg.xfel_event_code.has_value())
return;
size_t image_number = msg.number;
if (image_number >= max_image_number) {
max_image_number = image_number;
data_set_xfel_pulseid->SetExtent({max_image_number + 1});
data_set_xfel_event_code->SetExtent({max_image_number + 1});
}
data_set_xfel_event_code->WriteScalar(msg.xfel_event_code.value(), {image_number});
data_set_xfel_pulseid->WriteScalar(msg.xfel_pulse_id.value(), {image_number});
}
void HDF5DataFilePluginXFEL::Flush() {
if (!enable)
return;
data_set_xfel_event_code->Flush();
data_set_xfel_pulseid->Flush();
}