From ff3596a6395de46d986652b6097c53e278015d73 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 22 Nov 2025 20:35:28 +0100 Subject: [PATCH] jfjoch_writer: Use NaN for MX analysis results --- writer/HDF5DataFilePluginMX.cpp | 76 +++++++++++++++------------------ writer/HDF5DataFilePluginMX.h | 2 +- 2 files changed, 35 insertions(+), 43 deletions(-) diff --git a/writer/HDF5DataFilePluginMX.cpp b/writer/HDF5DataFilePluginMX.cpp index c25d30f7..29ca00ff 100644 --- a/writer/HDF5DataFilePluginMX.cpp +++ b/writer/HDF5DataFilePluginMX.cpp @@ -47,7 +47,7 @@ inline std::string to_bravais_code(const std::optional &lm_opt) } HDF5DataFilePluginMX::HDF5DataFilePluginMX(const StartMessage &msg) - : max_spots(msg.max_spot_count) { + : max_spots(msg.max_spot_count), indexing(msg.indexing_algorithm != IndexingAlgorithmEnum::None) { } void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg) { @@ -96,14 +96,16 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number) spot_x.resize(max_spots * (max_image_number + 1)); spot_y.resize(max_spots * (max_image_number + 1)); spot_int.resize(max_spots * (max_image_number + 1)); - spot_indexed.resize(max_spots * (max_image_number + 1)); spot_ice_ring.resize(max_spots * (max_image_number + 1)); spot_h.resize(max_spots * (max_image_number + 1)); spot_k.resize(max_spots * (max_image_number + 1)); spot_l.resize(max_spots * (max_image_number + 1)); spot_dist_ewald.resize(max_spots * (max_image_number + 1)); - indexed_lattice.resize((max_image_number + 1) * 9); + if (indexing) + spot_indexed.resize(max_spots * (max_image_number + 1)); + if (indexing) + indexed_lattice.resize((max_image_number + 1) * 9); } uint32_t spot_cnt = std::min(msg.spots.size(), max_spots); @@ -112,7 +114,8 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number) spot_x[max_spots * image_number + i] = msg.spots[i].x; spot_y[max_spots * image_number + i] = msg.spots[i].y; spot_int[max_spots * image_number + i] = msg.spots[i].intensity; - spot_indexed[max_spots * image_number + i] = msg.spots[i].indexed; + if (indexing) + spot_indexed[max_spots * image_number + i] = msg.spots[i].indexed; spot_ice_ring[max_spots * image_number + i] = msg.spots[i].ice_ring; spot_h[max_spots * image_number + i] = msg.spots[i].h; spot_k[max_spots * image_number + i] = msg.spots[i].k; @@ -121,48 +124,37 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number) } npeaks[image_number] = spot_cnt; - if (msg.strong_pixel_count.has_value()) - strong_pixel_count[image_number] = msg.strong_pixel_count.value(); + strong_pixel_count[image_number] = msg.strong_pixel_count.value_or(0); + spot_count_total[image_number] = msg.spot_count.value_or(0); + spot_count_ice[image_number] = msg.spot_count_ice_rings.value_or(0); + spot_count_low_res[image_number] = msg.spot_count_low_res.value_or(0); - if (msg.indexing_result.has_value()) - indexed[image_number] = msg.indexing_result.value(); + if (indexing) { + indexed[image_number] = msg.indexing_result.value_or(0); + profile_radius[image_number] = msg.profile_radius.value_or(NAN); + b_factor[image_number] = msg.b_factor.value_or(NAN); + resolution_estimate[image_number] = msg.resolution_estimate.value_or(NAN); + beam_corr_x[image_number] = msg.beam_corr_x.value_or(NAN); + beam_corr_y[image_number] = msg.beam_corr_y.value_or(NAN); + spot_count_indexed[image_number] = msg.spot_count_indexed.value_or(0); - if (msg.profile_radius.has_value()) - profile_radius[image_number] = msg.profile_radius.value(); + if (msg.indexing_lattice) { + auto tmp = msg.indexing_lattice->GetVector(); - if (msg.b_factor.has_value()) - b_factor[image_number] = msg.b_factor.value(); + for (int i = 0; i < 9; i++) + indexed_lattice[image_number * 9 + i] = tmp[i]; + } else { + for (int i = 0; i < 9; i++) + indexed_lattice[image_number * 9 + i] = NAN; + } - if (msg.resolution_estimate.has_value()) - resolution_estimate[image_number] = msg.resolution_estimate.value(); - - if (msg.beam_corr_x) - beam_corr_x[image_number] = msg.beam_corr_x.value(); - if (msg.beam_corr_y) - beam_corr_y[image_number] = msg.beam_corr_y.value(); - - if (msg.spot_count) - spot_count_total[image_number] = msg.spot_count.value(); - - if (msg.spot_count_ice_rings) - spot_count_ice[image_number] = msg.spot_count_ice_rings.value(); - - if (msg.spot_count_low_res) - spot_count_low_res[image_number] = msg.spot_count_low_res.value(); - - if (msg.spot_count_indexed) - spot_count_indexed[image_number] = msg.spot_count_indexed.value(); - - if (msg.indexing_lattice) { - auto tmp = msg.indexing_lattice->GetVector(); - - for (int i = 0; i < 9; i++) - indexed_lattice[image_number * 9 + i] = tmp[i]; - } - - if (msg.lattice_type) { - bravais_lattice[image_number] = to_bravais_code(msg.lattice_type); - niggli_class[image_number] = msg.lattice_type->niggli_class; + if (msg.lattice_type) { + bravais_lattice[image_number] = to_bravais_code(msg.lattice_type); + niggli_class[image_number] = msg.lattice_type->niggli_class; + } else { + bravais_lattice[image_number] = ""; + niggli_class[image_number] = 0; + } } } diff --git a/writer/HDF5DataFilePluginMX.h b/writer/HDF5DataFilePluginMX.h index bb41d3df..bf9f2fea 100644 --- a/writer/HDF5DataFilePluginMX.h +++ b/writer/HDF5DataFilePluginMX.h @@ -9,7 +9,7 @@ class HDF5DataFilePluginMX : public HDF5DataFilePlugin { const size_t max_spots; - + const bool indexing; // spots std::vector spot_x; std::vector spot_y;