// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "HDF5DataFilePluginReflection.h" #include "../include/spdlog/fmt/fmt.h" #include "../common/Reflection.h" void HDF5DataFilePluginReflection::OpenFile(HDF5File &data_file, const DataMessage &msg) { reflection_group = std::make_unique(data_file, "/entry/reflections"); reflection_group->NXClass("NXcollection"); } void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_number) { if (!reflection_group || msg.reflections.empty()) return; std::vector h, k, l; std::vector I, sigma, d; std::vector image, pred_x, pred_y, bkg; for (const auto &refl : msg.reflections) { image.emplace_back(refl.image_number); h.emplace_back(refl.h); k.emplace_back(refl.k); l.emplace_back(refl.l); I.emplace_back(refl.I); sigma.emplace_back(refl.sigma); d.emplace_back(refl.d); pred_x.emplace_back(refl.predicted_x); pred_y.emplace_back(refl.predicted_y); bkg.emplace_back(refl.bkg); } std::string image_group_name = fmt::format("image_{:06d}", image_number); HDF5Group image_group(*reflection_group, image_group_name); image_group.NXClass("NXreflections"); image_group.SaveVector("h", h); image_group.SaveVector("k", k); image_group.SaveVector("l", l); image_group.SaveVector("d", d)->Units("Angstrom"); image_group.SaveVector("predicted_x", pred_x); image_group.SaveVector("predicted_y", pred_y); image_group.SaveVector("int_sum", I); image_group.SaveVector("int_err", sigma); image_group.SaveVector("background_mean", bkg); image_group.SaveVector("observed_frame", image); } void HDF5DataFilePluginReflection::WriteFinal(HDF5File &data_file) { }