docs: the rc.166 changelog collapsed into a release note

The section had grown one line per commit, 38 entries, a development log.
It is now twelve statements a user of rugnux or the broker can act on,
each folding the lines that shared a user-visible consequence:

- the model work is two entries (the hypothesis gate; the outputs, now
  including <prefix>_model.pdb) plus its report keys.
- reading foreign data - miniCBF, Eiger 1.x, third-party NXmx, rugnux and
  viewer alike - is one entry.
- lattice, indexing-on-the-true-cell, point group, setting, absences and
  the -S refusal are one entry; beam centre, tilt and the 2theta arm are
  one; the unmerged-MTZ lines are one; the reflection-file conventions
  (FreeR direction, HKL_base, _refln.status) are one.
- the six report lines and both REPORT_VERSION bumps are one entry that
  says what the report carries and states the version once.
- the calibration mode's .json, its refusal to return a non-measurement
  (non-zero exit) and --no-refine-tilt are one entry.
- the recorded-metadata lines (direct_beam, incident_beam_size,
  peakCountUnfiltered, smargon.chi_deg) are one; the two documentation
  lines are one.

Kept standalone, because holders of existing files need it: the
snake-grid mirroring fix. Kept explicit inside their entries: the
FreeR_flag direction and the DETERMINED_FROM_MODEL -> ASSUMED_FROM_MODEL
rename.

Dropped entirely: the goniometer-axis direction-vs-length line (internal
consistency of the first pass) and the viewer merge-plot label fix; the
null-replicate cost work, tests, regenerated python-client docs and
review-fix internals never earned lines.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EFEJG6WBQv8th4UJFNe53N
This commit is contained in:
2026-09-02 15:38:27 +02:00
co-authored by Claude Opus 5
parent 232fd649ae
commit ea07d7c9dd
+12 -38
View File
@@ -3,44 +3,18 @@
### 1.0.0-rc.166
* `rugnux --model` writes the model as it was placed against the data to `<prefix>_model.cif`, in the cell and space group of the reflection files beside it.
* `rugnux --model` places the model against the data as a rigid body before scoring it, keeping the move only if R-free improves, and writes sigma_A-weighted 2mFo-DFc and mFo-DFc maps in place of the unweighted 2Fo-Fc and Fo-Fc.
* `rugnux --model` lets the model decide the enantiomorph and the indexing only where its R-work beats that of the same model in random orientations; a model the data reject leaves the reflection files byte for byte what a run with no model writes, and a model that claims neither is not put to that test at all.
* The rugnux results report says whether the model was accepted, rejected or never tested and what it was allowed to decide as `MODEL_FIT`, `MODEL_FIT_SIGMA` and `MODEL_DECISIONS_TAKEN`, `MODEL_VALIDATION= PERFORMED` is written on success, and `SPACE_GROUP_ENANTIOMORPH= DETERMINED_FROM_MODEL` becomes `ASSUMED_FROM_MODEL`; `REPORT_VERSION` is 6.
* `rugnux` reads PILATUS miniCBF sweeps natively, and opens masters written at other facilities, including Eiger 1.x and third-party NXmx.
* `rugnux` measures the beam centre on every run, and indexes with it when the file's value indexes nothing.
* `rugnux` places a detector swung out on a 2theta arm where the file says it stands.
* `rugnux` writes the unmerged MTZ by default, with a P1 merge beside it, so a wrong space group can be re-merged without reprocessing.
* `rugnux` writes a batch header in the unmerged MTZ for every image the observations span, not only for the images that produced one, so a scaling program reads one run per sweep.
* `rugnux` leaves an event out of the unmerged MTZ when less of its rocking curve was captured than `--min-captured-fraction`, as the merge does, since the exported rows are declared full.
* `rugnux` writes `FreeR_flag` with 0 for the test set and 1 for the working set, the CCP4 convention REFMAC5 defaults to; it was the other way round.
* `rugnux` writes the merged and P1 MTZ with the reserved `HKL_base` dataset ahead of its own, so a CCP4 program reads the wavelength from the file instead of falling back to 1.54187 A.
* `rugnux` marks the free set in the merged mmCIF as `_refln.status` = `f`, and no longer writes a `_refln.status_free` column.
* `rugnux -S` refuses or re-seats a fixed space group whose symmetry axes the indexed cell does not carry, not only one whose centring differs; `--mode scale` refuses it too.
* The rugnux results report names the groups the data cannot separate, the enantiomorph state and any refused higher point group as `SPACE_GROUP_ALTERNATIVES`, `SPACE_GROUP_ENANTIOMORPH`, `SPACE_GROUP_REFUSED_POINT_GROUP` and `SPACE_GROUP_REFUSED_REASON`; `REPORT_VERSION` is 5.
* `rugnux` handles symmetry better: the lattice, the point group, the setting and the systematic absences.
* `rugnux` fits the direction of the goniometer axis and not its length, so the cell chosen by the first pass is the one its own refinement scored.
* `rugnux` settles two first-pass cells whose volumes differ by a whole-number factor on which of them accounts for more of the found spots, so a crystal with a real pseudo-translation keeps its full-length axis.
* `rugnux` runs a second first-pass indexing hypothesis with a lowered shortest-axis bound, so a small molecule whose cell is shorter than the protein floor is indexed on its true cell rather than a multiple of it.
* `rugnux` reports the detector geometry it measured - the direct beam, the tilt and the beam centre - and what a single sweep can and cannot determine.
* `rugnux` reports the resolution the CC1/2 fit reached and the strong-direction diffraction limit.
* The rugnux anisotropy warning says which reciprocal axis each of the two diffraction limits it quotes belongs to.
* `rugnux` reports twinning measured before and after the space group was decided, and no longer reports it when the L-test contradicts it.
* `rugnux --mode calibration` writes `<prefix>.json` beside the `.poni`, holding the geometry as a `jfjoch_broker` `dataset_settings` body.
* `rugnux --mode calibration` says when a fit is not a measurement: it writes no `.poni`, exits non-zero, and records `converged` in the `.json`.
* `rugnux --no-refine-tilt` holds the detector tilt at the value in the file instead of zeroing it.
* `rugnux` refines only the detector-tilt component the data determine, holding the one along the rotation axis, so a beam-centre error is no longer reported as a tilt.
* `jfjoch_writer` writes `direct_beam_x`/`direct_beam_y` in the HDF5 master - where the undeflected beam lands - beside the `beam_center_x`/`beam_center_y` PONI.
* `jfjoch_writer` writes `/entry/MX/peakCountUnfiltered` in the HDF5 master beside the other per-image spot counts, instead of only in the data files.
* A snake grid scan with a negative slow step and an even number of rows no longer has its positions mirrored along the fast axis in the HDF5 master and the grid map, so the positions recorded for that configuration change.
* `jfjoch_broker` sends `direct_beam_x`/`direct_beam_y` on the CBOR start message.
* `dataset_settings` takes `beam_size_x_um`/`beam_size_y_um`, the size of the X-ray beam at the sample, and `jfjoch_writer` writes them as `incident_beam_size` in the HDF5 master.
* `dataset_settings` accepts any `smargon.chi_deg`, which was restricted to 0-90 degrees.
* `jfjoch_viewer` reads PILATUS miniCBF sweeps natively, and draws grid scan cells in the proportion of the scan steps.
* The HDF5 and API documentation say how a grid scan records the angle its spindle stood at: send the goniometer axis with a step of 0.
* The rugnux manual is reorganised into task pages with a run overview, and gains worked phenix / REFMAC5 / POINTLESS-AIMLESS / careless examples.
* The rugnux manual gains worked Phaser and SHELXC/D/E examples, and says how to hand each of them the space groups the merged intensities could not separate.
* `jfjoch_viewer` labels the merge-statistics plot over the range the axis is drawn on, so the CC1/2 curve is no longer read against tick labels covering only part of it.
* `rugnux --model` treats the model as a hypothesis: it decides the enantiomorph and the indexing only where its R-work beats that of the same model in random orientations, and a model the data reject is still scored, placed and mapped, but leaves the reflection files byte for byte what a run with no model writes.
* `rugnux --model` places the model against the data as a rigid body before scoring it, writes sigma_A-weighted 2mFo-DFc and mFo-DFc maps in place of the unweighted 2Fo-Fc and Fo-Fc, and writes the model as it was placed - `<prefix>_model.cif`, and `<prefix>_model.pdb` where the PDB format can express the cell - in the cell and space group of the reflection files beside it.
* `rugnux` and `jfjoch_viewer` read PILATUS miniCBF sweeps natively, and open masters written at other facilities, including Eiger 1.x and third-party NXmx.
* `rugnux` determines the lattice and the space group more reliably - the true cell where the first pass offers a whole-number multiple of it, so a pseudo-translated crystal keeps its full-length axis and a small molecule is indexed on its own cell rather than a protein-sized one, and the point group, the setting and the systematic absences - and `-S` refuses or re-seats a fixed space group whose symmetry axes the indexed cell does not carry.
* `rugnux` measures the beam centre on every run and indexes with it when the file's value indexes nothing, refines only the detector-tilt component the data determine - a beam-centre error is no longer reported as a tilt - and places a detector swung out on a 2theta arm where the file says it stands.
* `rugnux` writes the unmerged MTZ by default, with a P1 merge beside it, a batch header for every image the observations span, and events kept to the same `--min-captured-fraction` as the merge, so a wrong space group can be re-merged in a scaling program without reprocessing.
* `rugnux` writes reflection files in the conventions downstream programs read: `FreeR_flag` is 0 for the test set and 1 for the working set - it was the other way round - the merged and P1 MTZ carry the reserved `HKL_base` dataset so a CCP4 program reads the wavelength instead of falling back to 1.54187 A, and the merged mmCIF marks the free set as `_refln.status` = `f`.
* The rugnux results report carries the space groups the data cannot separate and the enantiomorph state, the model's verdict and what it was allowed to decide, the detector geometry measured and what a single sweep cannot determine, the resolution the CC1/2 fit reached, which reciprocal axis each anisotropic diffraction limit belongs to, and twinning measured before and after the space group was decided; `REPORT_VERSION` is 6, and `SPACE_GROUP_ENANTIOMORPH= DETERMINED_FROM_MODEL` is now `ASSUMED_FROM_MODEL`.
* `rugnux --mode calibration` writes `<prefix>.json` beside the `.poni`, holding the geometry as a `jfjoch_broker` `dataset_settings` body, and refuses a fit that is not a measurement - no `.poni`, a non-zero exit, `converged` recorded in the `.json`; `--no-refine-tilt` holds the detector tilt at the file's value instead of zeroing it.
* A snake grid scan with a negative slow step and an even number of rows no longer has its positions mirrored along the fast axis in the HDF5 master and the grid map, so the positions recorded for that configuration change; `jfjoch_viewer` draws grid scan cells in the proportion of the scan steps.
* The HDF5 master records `direct_beam_x`/`direct_beam_y` - where the undeflected beam lands, sent on the CBOR start message too - the beam size at the sample as `incident_beam_size` from the new `dataset_settings` `beam_size_x_um`/`beam_size_y_um`, and `/entry/MX/peakCountUnfiltered`; `dataset_settings` accepts any `smargon.chi_deg`, which was restricted to 0-90 degrees.
* The rugnux manual is reorganised into task pages with a run overview and worked phenix / REFMAC5 / Phaser / SHELXC/D/E / POINTLESS-AIMLESS / careless examples, and the HDF5 and API documentation say how a grid scan records the angle its spindle stood at: the goniometer axis with a step of 0.
### 1.0.0-rc.165
This is an UNSTABLE release. It includes many experimental features, as well as many AI generated fixes. We recommend using rc.152 for production use.