The live run refines a placed model as `rugnux` does (ProcessConfig::refine), after every decision and before the end message; a cut before it starts leaves it out, as the model. The writer still gets the placed model; the refined one stays with the broker. API (broker/jfjoch_api.yaml): - rugnux_live_model.refinement (rugnux_live_refinement): performed, reason, on_gpu, seconds, r_work, r_free, rmsd_bonds_A, rmsd_angles_deg, blob_count, blobs (at most 50, rugnux_live_blob: kind, x, y, z, peak_sigma, volume_A3, nearest_atom, nearest_atom_distance_A) - rugnux_live_status.refined_model - /rugnux/model.cif and /rugnux/map.ccp4 take stage=placed|refined, by default the refined model where there is one; the anomalous map stays on the placed model's phases (the refined coefficients carry none). Regenerated broker/gen, frontend/src/client, redoc, and the python client docs (which also brings the hero fields and rugnux_live_model it was missing). Frontend: the model card keeps its green/red and gets "R-free 0.xx (refined)" as its context line, "refining..." while the step runs; the model section adds refined R-free and blob tiles; Mol* shows the refined model and maps, with the blobs as small spheres coloured by reading (switch, off at first). The Refinement step is in the timeline like any other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit 3b47fb9a53b7dfad1c1ed289e169094c8d3d9d3e)
3.2 KiB
3.2 KiB
RugnuxLiveModel
What the run made of the model it was given, as the report's MODEL VALIDATION section states it. The R-factors here are those of the placed model with its own coordinates and B factors; what refinement made of it is in refinement. A value that is absent was not computed - the model was not placed, or not by molecular replacement.
Properties
| Name | Type | Description | Notes |
|---|---|---|---|
| placement | str | RIGID_BODY (the model fits where it is), MR (molecular replacement placed it) or NOT_PLACED | |
| model_name | str | ||
| predicted | bool | Searched for as a predicted model | |
| reason | str | Why the model could not be searched for or validated; empty otherwise | |
| r_work | float | [optional] | |
| r_free | float | [optional] | |
| cc_model | float | Correlation of the merged intensities with the placed model's, over all reflections | [optional] |
| fit_sigma | float | How far R-work stands below that of the same model in random orientations, in standard deviations | [optional] |
| map_atom_sigma | float | Mean 2mFo-DFc value at the atom centres, in map sigma | [optional] |
| rigid_body_angle_deg | float | [optional] | |
| rigid_body_shift_a | float | [optional] | |
| mr_decision | str | Molecular replacement's decision (AGREES, ENANTIOMORPH, SPACE_GROUP, TWIN_SUBGROUP, or why it placed nothing); empty where it did not run | |
| mr_space_group | str | The group molecular replacement placed the model in; empty where it placed none | |
| copies | int | Copies placed by molecular replacement | [optional] |
| tf_z | float | Translation-function Z-score, the highest of the copies' | [optional] |
| rf_z | float | Rotation-function Z-score of the first copy's orientation | [optional] |
| llg_z | float | Likelihood Z-score after the rigid body, where a copy's translation function did not stand out | [optional] |
| mr_d_min | float | High-resolution limit of the molecular-replacement search, in Angstrom | [optional] |
| anomalous_site | str | Atom with the strongest anomalous difference density, e.g. "SG CYS A7"; empty where there is no anomalous map | |
| anomalous_site_sigma | float | Anomalous difference density at that atom, in map sigma | [optional] |
| refinement | RugnuxLiveRefinement | [optional] |
Example
from jfjoch_client.models.rugnux_live_model import RugnuxLiveModel
# TODO update the JSON string below
json = "{}"
# create an instance of RugnuxLiveModel from a JSON string
rugnux_live_model_instance = RugnuxLiveModel.from_json(json)
# print the JSON string representation of the object
print(RugnuxLiveModel.to_json())
# convert the object into a dict
rugnux_live_model_dict = rugnux_live_model_instance.to_dict()
# create an instance of RugnuxLiveModel from a dict
rugnux_live_model_from_dict = RugnuxLiveModel.from_dict(rugnux_live_model_dict)