* Enhancements for EIGER * Writer is more flexible and capable of handling DECTRIS data
47 lines
1.2 KiB
C++
47 lines
1.2 KiB
C++
// Copyright (2019-2024) Paul Scherrer Institute
|
|
|
|
#include "HDF5ImagePusher.h"
|
|
#include "MakeDirectory.h"
|
|
#include "HDF5NXmx.h"
|
|
|
|
void HDF5ImagePusher::StartDataCollection(const StartMessage &message) {
|
|
std::unique_lock<std::mutex> ul(m);
|
|
start_message = message;
|
|
for (auto &i: start_message.pixel_mask)
|
|
i.Save();
|
|
for (auto &i: start_message.calibration)
|
|
i.Save();
|
|
CheckPath(start_message.file_prefix);
|
|
MakeDirectory(start_message.file_prefix);
|
|
writer = std::make_unique<HDF5Writer>(start_message);
|
|
}
|
|
|
|
bool HDF5ImagePusher::EndDataCollection(const EndMessage &message) {
|
|
std::unique_lock<std::mutex> ul(m);
|
|
if (!writer)
|
|
return false;
|
|
else {
|
|
writer.reset();
|
|
try {
|
|
if (!message.write_master_file || message.write_master_file.value())
|
|
HDF5Metadata::NXmx(start_message, message);
|
|
} catch (...) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool HDF5ImagePusher::SendImage(const DataMessage &message) {
|
|
std::unique_lock<std::mutex> ul(m);
|
|
if (writer) {
|
|
try {
|
|
writer->Write(message);
|
|
} catch (...) {
|
|
return false;
|
|
}
|
|
return true;
|
|
} else
|
|
return false;
|
|
}
|