File writer and spot finding improvements
This commit is contained in:
@@ -2,51 +2,30 @@
|
||||
|
||||
#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::OpenFile(HDF5File &data_file, const DataMessage &msg) {}
|
||||
|
||||
void HDF5DataFilePluginXFEL::Write(const DataMessage &msg) {
|
||||
if (!enable
|
||||
|| !msg.xfel_pulse_id.has_value()
|
||||
if (!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) {
|
||||
if (image_number >= pulseid.size()) {
|
||||
max_image_number = image_number;
|
||||
data_set_xfel_pulseid->SetExtent({max_image_number + 1});
|
||||
data_set_xfel_event_code->SetExtent({max_image_number + 1});
|
||||
pulseid.resize(image_number + 1);
|
||||
event_code.resize(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});
|
||||
pulseid[image_number] = msg.xfel_pulse_id.value();
|
||||
event_code[image_number] = msg.xfel_event_code.value();
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginXFEL::Flush() {
|
||||
if (!enable)
|
||||
return;
|
||||
|
||||
data_set_xfel_event_code->Flush();
|
||||
data_set_xfel_pulseid->Flush();
|
||||
void HDF5DataFilePluginXFEL::WriteFinal(HDF5File &data_file) {
|
||||
if (!pulseid.empty()) {
|
||||
HDF5Group group(data_file, "/entry/xfel");
|
||||
group.NXClass("NXcollection");
|
||||
group.SaveVector("pulseID", pulseid);
|
||||
group.SaveVector("eventCode", event_code);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user