broker: serve the placed model and its maps of the last rugnux live run (/rugnux/model.cif, /rugnux/map.ccp4)
A rugnux live run that placed a model keeps it, with a copy of its map coefficients, beside the live status (RugnuxStructure), for as long as /rugnux/status keeps the run. Made in memory on the first request and cached, never written to disk: - GET /rugnux/model.cif: the placed model as mmCIF, labelled as WritePlacedModel labels _model.cif (PlacedModelMmcif, the labelling factored out of WritePlacedModel; the file output is unchanged). - GET /rugnux/map.ccp4?type=2fofc|fofc: the 2mFo-DFc / mFo-DFc map as a CCP4 map, FFT of the FWT/PHWT or DELFWT/PHDELWT coefficients (get_f_phi_on_grid + MapFromFPhi, sampled as ModelValidation samples), cut to the box around the model plus 5 A, with the whole cell's mean and RMS in the header. - 404 without a placed model or maps, 400 for an unknown map type; both routes protected by the dataset bearer token like /rugnux/status. rugnux_live_status gets placed_model. C++ model, python client docs, TypeScript client and redoc regenerated. Tests: a point's coefficients give a map peaking at the atom in a cropped box; the mmCIF; the structure is cleared at the next start; the auth test covers the new routes. End to end (myoglobin 2M replay with an AlphaFold model): the maps equal gemmi's FFT of the written _maps.mtz to 2.5e-6 rms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit 33124c3288ba112def3f51c0d91f5206886f3495)
This commit is contained in:
1 parent
ae1169072a
commit
15ca4b329f
26 files changed
+835
-55
No files matched your search
@@ -70,7 +70,7 @@ TEST_CASE("JFJochBrokerHttp_BearerTokens", "[broker]") {
|
||||
"/image_buffer/image.cbor?id=0", "/image_buffer/image.tiff?id=0",
|
||||
"/image_buffer/image.jpeg?id=0", "/preview/plot?type=bkg_estimate",
|
||||
"/preview/plot.bin?type=bkg_estimate", "/live/events",
|
||||
"/rugnux/status"}) {
|
||||
"/rugnux/status", "/rugnux/model.cif", "/rugnux/map.ccp4?type=2fofc"}) {
|
||||
INFO(path);
|
||||
auto res = client.Get(path);
|
||||
REQUIRE(res);
|
||||
@@ -93,6 +93,11 @@ TEST_CASE("JFJochBrokerHttp_BearerTokens", "[broker]") {
|
||||
REQUIRE(client.Get("/statistics/data_collection", other)->status == 200);
|
||||
REQUIRE(client.Get("/preview/plot?type=bkg_estimate", good)->status == 200);
|
||||
REQUIRE(client.Get("/rugnux/status", good)->status == 200);
|
||||
// No live run placed a model: nothing to serve, but the token is accepted.
|
||||
REQUIRE(client.Get("/rugnux/model.cif", good)->status == 404);
|
||||
REQUIRE(client.Get("/rugnux/map.ccp4", good)->status == 404);
|
||||
REQUIRE(client.Get("/rugnux/map.ccp4?type=fofc", good)->status == 404);
|
||||
REQUIRE(client.Get("/rugnux/map.ccp4?type=anomalous", good)->status == 400);
|
||||
}
|
||||
|
||||
SECTION("the aggregate statistics drop the measurement block instead of refusing") {
|
||||
|
||||
Reference in new issue
Block a user