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:
+38
-25
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user