Multi lattice search: WIP - Integration added by Claude Opus (doesn't work :) )
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user