smargon: write chi/phi goniometer position into NXmx transformations
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m15s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m13s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 15m9s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 15m11s
Build Packages / build:rpm (rocky8) (push) Successful in 15m14s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m30s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 15m52s
Build Packages / build:windows:nocuda (push) Successful in 15m54s
Build Packages / build:windows:cuda (push) Successful in 17m32s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m30s
Build Packages / Generate python client (push) Successful in 30s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 8m31s
Build Packages / Create release (push) Skipped
Build Packages / XDS test (durin plugin) (push) Successful in 8m47s
Build Packages / Build documentation (push) Successful in 58s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 11m37s
Build Packages / build:rpm (rocky9) (push) Successful in 12m37s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m44s
Build Packages / DIALS test (push) Successful in 12m55s
Build Packages / Unit tests (push) Successful in 1h0m54s

Add an optional Smargon static positioner (chi/phi angles + rotation axes)
that is reconstructed into the NXmx sample transformation chain. Chi/phi are
appended at the innermost end of the chain (closest to the sample) for both
the goniometer and grid-scan branches, with axes defaulting to chi {0,0,1}
and phi = omega default {1,0,0}.

- SmargonPosition gains chi_axis/phi_axis (common/JFJochMessages.h)
- OpenAPI: optional phi_axis/chi_axis arrays; clients regenerated
- OpenAPIConvert wires Dataset_settings.smargon -> DatasetSettings
- CBOR serializer/deserializer round-trip the axes
- tests: CBORSerialize_Start_Smargon

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-01 11:45:08 +02:00
co-authored by Claude Opus 4.8
parent 35607057d9
commit b7613c559c
20 changed files with 619 additions and 4 deletions
@@ -1161,7 +1161,28 @@ namespace {
else
message.geom_refinement_algorithm = GeomRefinementAlgorithmEnum::None;
}
if (j.contains("smargon")
&& j["smargon"].is_object()
&& j["smargon"].contains("chi_deg")
&& j["smargon"].contains("phi_deg")
&& j["smargon"]["chi_deg"].is_number()
&& j["smargon"]["phi_deg"].is_number()) {
SmargonPosition smargon;
smargon.phi_deg = j["smargon"]["phi_deg"].get<float>();
smargon.chi_deg = j["smargon"]["chi_deg"].get<float>();
if (j["smargon"].contains("chi_axis") && j["smargon"]["chi_axis"].is_array()
&& j["smargon"]["chi_axis"].size() == 3)
smargon.chi_axis = {j["smargon"]["chi_axis"][0].get<float>(),
j["smargon"]["chi_axis"][1].get<float>(),
j["smargon"]["chi_axis"][2].get<float>()};
if (j["smargon"].contains("phi_axis") && j["smargon"]["phi_axis"].is_array()
&& j["smargon"]["phi_axis"].size() == 3)
smargon.phi_axis = {j["smargon"]["phi_axis"][0].get<float>(),
j["smargon"]["phi_axis"][1].get<float>(),
j["smargon"]["phi_axis"][2].get<float>()};
message.smargon_position = smargon;
}
if (j.contains("ring_current_mA"))
message.ring_current_mA = j["ring_current_mA"];
if (j.contains("sample_temperature_K"))