v1.0.0-rc.148 (#58)
Build Packages / Unit tests (push) Skipped
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 9m28s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 10m9s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 9m47s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 10m58s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 11m39s
Build Packages / build:rpm (rocky8) (push) Successful in 11m43s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 12m59s
Build Packages / Generate python client (push) Successful in 35s
Build Packages / Build documentation (push) Successful in 59s
Build Packages / Create release (push) Skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 11m48s
Build Packages / build:rpm (rocky9) (push) Successful in 12m32s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m24s
Build Packages / XDS test (durin plugin) (push) Successful in 7m35s
Build Packages / XDS test (neggia plugin) (push) Successful in 6m50s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 7m40s
Build Packages / DIALS test (push) Successful in 11m19s

This is an UNSTABLE release. The release has significant modifications for data processing - in case of troubles go back to 1.0.0-rc.144.

* jfjoch_broker: Improve azimuthal integration (add <I^2> calculation)
* jfjoch_broker: Fixes around indexing, aiming to handle multi-lattice crystals (work in progress, it is not fully integrated)
* jfjoch_writer: Save mean(I), stddev(I), and count(I) for each azimuthal bin

Reviewed-on: #58
This commit was merged in pull request #58.
This commit is contained in:
2026-06-08 08:30:35 +02:00
parent 75de40f52b
commit cc3eb8352c
390 changed files with 1730 additions and 1251 deletions
+35 -16
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) {
@@ -58,26 +60,18 @@ void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg,
spot_x.reserve(max_spots * images_per_file);
spot_y.reserve(max_spots * images_per_file);
spot_int.reserve(max_spots * images_per_file);
spot_indexed.reserve(max_spots * images_per_file);
spot_ice_ring.reserve(max_spots * images_per_file);
spot_h.reserve(max_spots * images_per_file);
spot_k.reserve(max_spots * images_per_file);
spot_l.reserve(max_spots * images_per_file);
spot_dist_ewald.reserve(max_spots * images_per_file);
spot_x.reserve(max_spots * images_per_file);
spot_y.reserve(max_spots * images_per_file);
spot_int.reserve(max_spots * images_per_file);
spot_ice_ring.reserve(max_spots * images_per_file);
spot_h.reserve(max_spots * images_per_file);
spot_k.reserve(max_spots * images_per_file);
spot_l.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)
spot_lattice.reserve(max_spots * images_per_file);
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);
@@ -118,12 +112,14 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number)
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));
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);
@@ -134,6 +130,7 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number)
spot_int[max_spots * image_number + i] = msg.spots[i].intensity;
if (indexing) {
spot_indexed[max_spots * image_number + i] = msg.spots[i].indexed;
spot_lattice[max_spots * image_number + i] = msg.spots[i].lattice;
spot_h[max_spots * image_number + i] = msg.spots[i].h;
spot_k[max_spots * image_number + i] = msg.spots[i].k;
spot_l[max_spots * image_number + i] = msg.spots[i].l;
@@ -150,6 +147,8 @@ void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number)
if (indexing) {
indexed[image_number] = msg.indexing_result.value_or(0);
// Fallback value is indexing result (1 or 0 lattices)
indexing_lattice_count[image_number] = msg.indexing_lattice_count.value_or(indexed[image_number]);
profile_radius[image_number] = msg.profile_radius.value_or(NAN);
mosaicity_deg[image_number] = msg.mosaicity_deg.value_or(NAN);
b_factor[image_number] = msg.b_factor.value_or(NAN);
@@ -169,6 +168,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.indexing_extra_lattices.size()) {
auto tmp = msg.indexing_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;
@@ -204,6 +215,7 @@ void HDF5DataFilePluginMX::WriteFinal(HDF5File &data_file) {
data_file.SaveVector("/entry/MX/peakDistEwaldSphere", spot_dist_ewald,
{(hsize_t) (max_image_number + 1), max_spots});
data_file.SaveVector("/entry/MX/peakIndexed", spot_indexed, {(hsize_t) (max_image_number + 1), max_spots});
data_file.SaveVector("/entry/MX/peakLattice", spot_lattice, {(hsize_t) (max_image_number + 1), max_spots});
}
}
@@ -221,9 +233,16 @@ void HDF5DataFilePluginMX::WriteFinal(HDF5File &data_file) {
if (!indexed.empty())
data_file.SaveVector("/entry/MX/imageIndexed", indexed.vec());
if (!indexing_lattice_count.empty())
data_file.SaveVector("/entry/MX/indexingLatticeCount", indexing_lattice_count.vec());
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/latticeIndexedExtra", 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())