Multi lattice search: WIP - Integration added by Claude Opus (doesn't work :) )

This commit is contained in:
2026-06-05 16:22:35 +02:00
parent c1e9babe13
commit 4c45d1c835
11 changed files with 286 additions and 117 deletions
+26 -6
View File
@@ -46,7 +46,9 @@ inline std::string to_bravais_code(const std::optional<LatticeMessage> &lm_opt)
}
HDF5DataFilePluginMX::HDF5DataFilePluginMX(const StartMessage &msg)
: max_spots(msg.max_spot_count), indexing(msg.indexing_algorithm != IndexingAlgorithmEnum::None) {
: max_spots(msg.max_spot_count),
max_extra_lattices(msg.max_extra_lattices),
indexing(msg.indexing_algorithm != IndexingAlgorithmEnum::None) {
}
void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
@@ -74,11 +76,11 @@ void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg,
spot_l.reserve(max_spots * images_per_file);
spot_lattice.reserve(max_spots * images_per_file);
spot_dist_ewald.reserve(max_spots * images_per_file);
if (indexing)
if (indexing) {
spot_indexed.reserve(max_spots * images_per_file);
if (indexing)
indexed_lattice.reserve(images_per_file * 9);
extra_lattices.reserve(images_per_file * max_extra_lattices * 9);
}
beam_corr_x.reserve(images_per_file);
beam_corr_y.reserve(images_per_file);
@@ -122,10 +124,11 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number)
spot_lattice.resize(max_spots * (max_image_number + 1), -1);
spot_dist_ewald.resize(max_spots * (max_image_number + 1), NAN);
if (indexing)
if (indexing) {
spot_indexed.resize(max_spots * (max_image_number + 1));
if (indexing)
indexed_lattice.resize((max_image_number + 1) * 9, NAN);
extra_lattices.resize((max_image_number + 1) * max_extra_lattices * 9, NAN);
}
}
uint32_t spot_cnt = std::min(msg.spots.size(), max_spots);
@@ -172,6 +175,18 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number)
indexed_lattice[image_number * 9 + i] = NAN;
}
for (size_t li = 0; li < max_extra_lattices; li++) {
const size_t base = (image_number * max_extra_lattices + li) * 9;
if (li < msg.extra_lattices.size()) {
auto tmp = msg.extra_lattices[li].GetVector();
for (int i = 0; i < 9; i++)
extra_lattices[base + i] = tmp[i];
} else {
for (int i = 0; i < 9; i++)
extra_lattices[base + i] = NAN;
}
}
if (msg.lattice_type) {
bravais_lattice[image_number] = to_bravais_code(msg.lattice_type);
niggli_class[image_number] = msg.lattice_type->niggli_class;
@@ -228,6 +243,11 @@ void HDF5DataFilePluginMX::WriteFinal(HDF5File &data_file) {
if (!indexed_lattice.empty())
data_file.SaveVector("/entry/MX/latticeIndexed", indexed_lattice, {(hsize_t) (max_image_number + 1), 9})
->Units("Angstrom");
if (!extra_lattices.empty())
data_file.SaveVector("/entry/MX/extraLattices", extra_lattices,
{(hsize_t) (max_image_number + 1), (hsize_t) max_extra_lattices, 9})
->Units("Angstrom");
if (!bkg_estimate.empty())
data_file.SaveVector("/entry/MX/bkgEstimate", bkg_estimate.vec());
if (!profile_radius.empty())