Stills: the run's rocking curve goes to _process.h5 and --mode scale merges with it; MeasureRunWidth takes the window at each reflection's resolution

--mode scale re-measured the rocking width on the stored reflections, so on any file whose frames were
predicted through the run's curve it merged with a different curve than the mx run did. The curve the
post-refinement used (formula, table, radial scale) is now carried in the EndMessage (StillsRunWidth) and
written to the master: /entry/MX/stillsRockingWidthFormula [gamma0 1/A, gamma_e rad, bandwidth sigma],
/entry/MX/stillsRadialScale, /entry/MX/stillsRockingWidthTableDstar and /entry/MX/stillsRockingWidthTable
(1/A). The reader returns it, and --mode scale passes it to the post-refinement. A file without it is
re-measured as before.

MeasureRunWidth grouped each frame's reflections by the frame's window, taken as the largest excitation
error it predicted. With a window that follows sigma(d*) that is the high-resolution window, applied to the
frame's low-resolution reflections too. Given the curve the frames were predicted through, the window is now
that curve at the reflection's own resolution; without one, the frame's largest excitation error as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu
(cherry picked from commit 992343d0206489991880bb927efc79131134a1d9)
This commit is contained in:
leonarski_f committed 2026-10-26 14:09:32 +01:00
1 parent 00662c4110
commit 8a123e794d
9 files changed
+89 -20

No files matched your search

+12
View File
@@ -957,6 +957,18 @@ HDF5MetadataSource::OpenResult HDF5MetadataSource::Open(const std::string &filen
if (const auto m = master_file->ReadOptVector<int32_t>("/entry/MX/reindexMatrix"); m.size() == 9)
dataset->reindex_matrix = std::array<int32_t, 9>{m[0], m[1], m[2], m[3], m[4],
m[5], m[6], m[7], m[8]};
if (const auto f = master_file->ReadOptVector<double>("/entry/MX/stillsRockingWidthFormula"); f.size() == 3) {
StillsRunWidth w{.gamma0 = f[0], .gamma_e = f[1], .bandwidth_sigma = f[2]};
if (const auto r = master_file->ReadOptVector<double>("/entry/MX/stillsRadialScale"); r.size() == 1)
w.radial_scale = r[0];
w.table_dstar = master_file->ReadOptVector<double>("/entry/MX/stillsRockingWidthTableDstar");
w.table_s = master_file->ReadOptVector<double>("/entry/MX/stillsRockingWidthTable");
if (w.table_dstar.size() != w.table_s.size()) {
w.table_dstar.clear();
w.table_s.clear();
}
dataset->stills_run_width = w;
}
dataset->experiment.SampleName(master_file->GetString("/entry/sample/name"));