NXmx: the unit cell's e.s.d.s are saved as /entry/sample/unit_cell_esd

Rugnux measured the cell's e.s.d.s (CellEsd) but they only reached the mmCIF's _cell.*_esd, the .ins's
ZERR and the report. They now travel in the END message (EndMessage::unit_cell_esd, CBOR key
unit_cell_esd, same layout as unit_cell), are written beside the cell in NXsample as unit_cell_esd
(float[6]: a b c alpha beta gamma, A and degrees) and are read back into
JFJochReaderDataset::unit_cell_esd. rugnux's _process.h5 and, through AddToEndMessage, the broker's
live master file get them. Rotation only; absent on stills and where nothing was measured.
Optional CBOR field, no version bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu
(cherry picked from commit 6902b5637aa92c27565f22bcf3fe11b5d2536038)
This commit is contained in:
leonarski_f committed 2026-10-26 15:50:40 +01:00
1 parent d50b3d7034
commit 2461d67e14
12 files changed
+98

No files matched your search

+2
View File
@@ -944,6 +944,8 @@ HDF5MetadataSource::OpenResult HDF5MetadataSource::Open(const std::string &filen
.beta = tmp[4],
.gamma = tmp[5]
});
if (const auto e = master_file->ReadOptVector<float>("/entry/sample/unit_cell_esd"); e.size() == 6)
dataset->unit_cell_esd = UnitCell{.a = e[0], .b = e[1], .c = e[2], .alpha = e[3], .beta = e[4], .gamma = e[5]};
// The name carries the setting, the number cannot ("R 3:R" reads back as "R 3:H"), so the
// name is preferred; the number is the fallback for a file written before it was recorded.
if (const auto *sg = gemmi::find_spacegroup_by_name(master_file->GetString("/entry/sample/space_group")))