jfjoch_writer updates

* Writer can send a PUB message with information on closed file
* Writer uses getopt to format input parameters
* DiffractionExperiment: Add frame number limit
This commit is contained in:
2024-05-03 15:46:21 +02:00
parent 932ccce2e8
commit f1472a5fe1
11 changed files with 321 additions and 57 deletions
+38 -25
View File
@@ -31,25 +31,43 @@ HDF5DataFile::HDF5DataFile(const std::string &in_filename,
plugins.emplace_back(std::make_unique<HDF5DataFilePluginMX>(in_max_spots));
}
std::optional<HDF5DataFileStatistics> HDF5DataFile::Close() {
if (!data_file)
return {};
HDF5Group group_exp(*data_file, "/entry/detector");
group_exp.NXClass("NXcollection");
group_exp.SaveVector("timestamp", timestamp);
group_exp.SaveVector("exptime", exptime);
group_exp.SaveVector("number", number);
for (auto &p: plugins)
p->WriteFinal(*data_file);
if (data_set) {
data_set
->Attr("image_nr_low", (int32_t) (image_low + 1))
.Attr("image_nr_high", (int32_t) (image_low + 1 + max_image_number));
data_set.reset();
}
data_file.reset();
std::rename(tmp_filename.c_str(), filename.c_str());
closed = true;
HDF5DataFileStatistics ret;
ret.max_image_number = max_image_number;
ret.total_images = nimages;
ret.filename = filename;
return ret;
}
HDF5DataFile::~HDF5DataFile() {
if (data_file) {
HDF5Group group_exp(*data_file, "/entry/detector");
group_exp.NXClass("NXcollection");
group_exp.SaveVector("timestamp", timestamp);
group_exp.SaveVector("exptime", exptime);
group_exp.SaveVector("number", number);
for (auto &p: plugins)
p->WriteFinal(*data_file);
if (data_set) {
data_set
->Attr("image_nr_low", (int32_t) (image_low + 1))
.Attr("image_nr_high", (int32_t) (image_low + 1 + max_image_number));
data_set.reset();
}
data_file.reset();
std::rename(tmp_filename.c_str(), filename.c_str());
try {
Close();
} catch (...) {}
}
}
@@ -82,6 +100,9 @@ void HDF5DataFile::CreateFile(const DataMessage& msg) {
}
void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) {
if (closed)
return;
bool new_file = false;
if (!data_file) {
@@ -108,14 +129,6 @@ void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) {
number[image_number] = (msg.original_number) ? msg.original_number.value() : msg.number;
}
HDF5DataFileStatistics HDF5DataFile::GetStatistics() const {
HDF5DataFileStatistics ret;
ret.max_image_number = max_image_number;
ret.total_images = nimages;
ret.filename = filename;
return ret;
}
size_t HDF5DataFile::GetNumImages() const {
return nimages;
}