docs: compress the rc.160 changelog entries to one-line summaries
The rc.160 entries were multi-sentence explanations; rewrite each as a short statement of what changed (feature / flag / behaviour), roughly under 200 characters, matching a normal changelog. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+31
-31
@@ -3,38 +3,38 @@
|
||||
### 1.0.0-rc.160
|
||||
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.
|
||||
|
||||
* rugnux: Report **ISa** at its asymptotic definition - the $I\to\infty$ signal-to-noise limit, i.e. the reproducibility of the strongest reflections (Diederichs, *Acta Cryst.* D66 (2010) 733). It was taken as `1/b` of the whole-intensity-range error-model fit, whose intensity-proportional term `b` is raised by a mild excess of scatter at intermediate intensity, so it understated that limit. ISa is now read directly from the strong symmetry equivalents - the counting-subtracted fractional scatter of well-measured reflection groups, a robust median over strong groups. The reported ISa and the merged-intensity systematic floor both use this asymptotic value, so a high-multiplicity merged I/sigma approaches ISa; the whole-range `(a, b)` fit and the per-observation sigmas are left unchanged, so CC1/2, R-meas and the anomalous statistics are bit-identical. The `I/sigma` threshold that selects "strong" is relaxed on weak or radiation-damaged data with few strong reflections, so those recover the asymptote their own reflections support instead of falling back to the conservative whole-range value. Across the rotation battery ISa rises to the true asymptote of each dataset with no space-group or accuracy change (reaching parity with the reference on several crystals - e.g. a strong lysozyme 19->24, and a room-temperature radiation-damage series 5->11 whose CC1/2 and R-meas already exceeded the reference).
|
||||
* Frontend: Make the numeric-input decimal precision configurable and raise the azimuthal-integration **Q fields** (Q spacing / Low Q / High Q) to 5 decimals. The number field quantised every float input to 3 decimals, so the finest reachable `q_spacing` was 0.001 - capping the azint q-bin count around 200 regardless of the CPU/FPGA backend; those fields now match the `q_spacing` minimum of 1e-5 (all other fields keep the 3-decimal default).
|
||||
* rugnux: Add a dataset-wide **Wilson B-factor** estimate to the merged output (mmCIF `_reflns.B_iso_Wilson_estimate`, the printed merge statistics and the log) - the analogue of XDS's Wilson-line B, which was not exported. Fitted from the shell-averaged intensity vs 1/d^2 over the meaningful resolution range; diagnostic only, not fed back into scaling. The per-image Wilson B (viewer plot) now emits NaN for an implausible fit instead of the spurious hundreds-of-A^2 value a bad frame used to produce.
|
||||
* rugnux: Veto a merohedral-twin over-promotion in the de-novo space-group search. A partial twin whose merged chi^2 looks self-consistent could be promoted to the holohedral group even though merging its non-equivalent reflections balloons the error-model b; a chi^2-passing promotion whose systematic b balloons past a calibrated bound is now kept in its true lower symmetry (an R3 case previously merged as R32; battery space-group match 20->21/25, no change to any genuine high-symmetry crystal).
|
||||
* rugnux: De-novo space-group search - decide lattice **centering** from the strength of the systematically-absent class instead of a per-reflection violation count. A real centering cancels structure factors, so its absent class is systematically weak (its mean I/sigma sits well below the present class); the previous test - how many absent reflections individually cleared I/sigma>3 - was brittle on noisy or obverse/reverse-twinned data, where enough genuinely-absent reflections cross the threshold to trip the bound although the class is several-fold weaker. A rhombohedral (R) lattice whose absent class ran to ~13% individual violations was wrongly kept primitive (P) and is now correctly centered (with lower R-meas and higher ISa, matching the reference); the false-centering cases stay rejected because their absent class is as strong as the present one. Screw/glide axes keep the count test - their predicted-absent class is a handful of axial reflections, too few to average. Battery space-group match 21->22/25.
|
||||
* rugnux: De-novo space-group search - recover lattice **centering** on weak / low-energy data whose absent-class mean I/sigma carries a positive floor. The strength test above compares the mean signed I/sigma of the systematically-absent class against the present class, but weak reflections carry a small positive intensity bias (background/profile leakage) that lifts the absent-class mean to ~1.5-2.3 rather than ~0; when the present class is itself weak this additive floor inflates the ratio past its bound and the true centering is missed. An I-centred cubic crystal recorded at 5 and 13 keV was kept primitive, while the same crystal form at 6 keV (stronger data) was correctly I-centred - an energy-dependent space group for one physical crystal. A second, floor-independent acceptance path is now OR'd with the mean ratio: the absent class's rate of individually-significant reflections versus the present class's own significant rate. A false centering fails both tests (its absent class is as strong as the present one), whereas a true weak centering passes the rate test; the low-energy datasets are now correctly centred with no crystal newly over-centred.
|
||||
* rugnux: Report the anomalous signal-to-noise **SigAno** = <|I(+)-I(-)|> / <sigma(I(+)-I(-))> per resolution shell and overall, computed from the full-multiplicity Bijvoet split. It is written to the mmCIF with the standard wwPDB PDBx items `_reflns.pdbx_absDiff_over_sigma_anomalous` and `_reflns_shell.pdbx_absDiff_over_sigma_anomalous` (no local item is needed, unlike ISa), and appears as a new `SigAno` column in the printed merge-statistics table; it is emitted only for an anomalous merge, so a non-anomalous merge is unchanged. SigAno approaches ~0.8 for pure noise and rises above 1 with real anomalous signal. A half-set anomalous CC is deliberately not used: its two half estimates are complementary partitions of one observation pool, so subtracting the two Bijvoet hands cancels the large common intensity that keeps CC1/2 non-negative and, on weak shells, drives the correlation strongly negative rather than to zero - misrepresenting a weak-but-real signal - whereas SigAno has no such floor.
|
||||
* rugnux: De-novo space-group search - recover a genuine high-symmetry point group on weak, low-resolution data whose merged error model is badly miscalibrated. When even the best subgroup's reduced chi^2 is far above 1 (merged sigmas badly under-estimated), the fixed-sigma chi^2 ratio grows with point-group order for real symmetry too and wrongly rejects it (a true cubic group reached a chi^2 ratio of ~14). The systematic-b test re-fits its own error and stays valid under a broken sigma model, so once the chi^2 ratio is shown untrustworthy the promotion is confirmed on the b-test alone - a genuine step's b barely moves, whereas a twin's balloons and is still vetoed. Restores a weak low-resolution cubic (F432) crystal that had fallen to a tetragonal subgroup, with no change to any other crystal in the battery. (This is the gap left when the earlier log10(chi2_ref) chi^2 widening was removed in favour of the b-veto; the b-test now covers it without re-admitting the twin.)
|
||||
* rugnux: Print the adopted **space group and unit cell** as a one-line summary at the end of the run (`Space group: <name> (No. N)` alongside `Unit cell:`), for both a de-novo determination and a user-fixed `-S` space group - previously the determined space group appeared only inside the de-novo search diagnostics or in the mmCIF.
|
||||
* rugnux: Score the radiation-damage **decay** cross-validation on the same sigma-independent (R-meas-like) metric as the absorption/modulation surfaces, so a spurious decay slope can no longer pass the gate by reshaping the sigmas rather than tightening the intensities.
|
||||
* rugnux: Fix de-novo rotation indexing occasionally committing a spurious axis-multiple supercell (a true axis reported at 2x/3x its length), which collapsed the whole dataset to P1. Two-pass indexing scored its first-pass schemes by how many validation frames each indexes, but an axis multiple indexes every frame its true cell does, so both schemes saturate and the tie fell to whichever ran first; when that scheme's full-rotation FFT resolved a true axis only as its harmonic, the multiplied cell was committed. A cross-scheme tie-break now prefers the smaller cell whenever the two schemes' cell volumes are related by a near-integer factor (the signature of a spurious axis multiple, independent of scheme order), while a genuine centering relation (a non-integer volume ratio) is left untouched; the same axis-doubling is additionally unmasked when selecting among a single scheme's own candidate cells, where a sub-cell that still indexes essentially as many spots overrides a cell more than 1.5x larger (its own primitive).
|
||||
* rugnux: Widen the refined-cell angle bounds to [30, 150] degrees for both rotation candidate refinement and per-frame stills cell refinement, so a genuinely oblique lattice is no longer clamped towards 90 degrees, and check a refined candidate's angles against the reference cell in `Refine()` when a reference is supplied.
|
||||
* rugnux: `-S`/`--space-group` now accepts a Hermann-Mauguin symbol (e.g. `P43212`, `P 43 21 2`) as well as a space-group number (`92`). A non-numeric argument was previously parsed as 0 and aborted the run.
|
||||
* rugnux: Warn when the chosen cell/space group carries an indexing (merohedral) ambiguity, so the operator knows a reference MTZ or model is needed to fix the twin-law relabelling.
|
||||
* Indexing: Selecting the FFTW (CPU) indexer on a node with a GPU now fails with a clear, actionable message instead of an opaque "no indexer available" raised deep inside a worker thread. Rotation indexing always uses the GPU FFT indexer when a GPU is present (never FFBIDX), so a CPU-indexer request cannot be served there; the message states this and points to the alternatives (FFT/Auto, or a CPU-only node).
|
||||
* rugnux: Stills geometry refinement `--refine-geometry[=N|off]` - an extra first pass that bundle-adjusts the shared beam centre, detector distance and cell from N strongly-indexed frames (default 200) and then re-indexes, lifting weak-stills indexing. It defaults ON for stills whenever a reference cell is available (`-C` or a reference MTZ) and is turned off with `--refine-geometry=off`. A reference MTZ's plain amplitude columns (`F`/`FP`) are now accepted as the reference, not only calculated-structure-factor columns.
|
||||
* rugnux: Per-image geometry refinement `-r flex` tries all three refinement algorithms (orientation, beam-and-lattice, and both together) on each image and keeps whichever indexes the most spots; the previous name `multi` is kept as a back-compatible alias.
|
||||
* rugnux: Add experimental stills partiality `--still-partiality` - weight each stills reflection by a Gaussian excitation-error partiality `exp(-dist_ewald^2 / 2 sigma^2)` instead of treating it as a full - and a companion merge term `--partiality-uncertainty <num>` that adds an intensity- and (1-partiality)-proportional sigma to partials, down-weighting the least-complete reflections (auto-gated to an error model that shows a real systematic - b>1, i.e. ISa<1; default 0, ~2.5 recommended).
|
||||
* rugnux: Report **ISa** as the counting-subtracted strong-reflection asymptote, not `1/b` of the whole-range fit; it also sets the merged-sigma floor. CC1/2, R-meas and per-obs sigmas unchanged.
|
||||
* Frontend: Azimuthal-integration Q fields (Q spacing / Low Q / High Q) accept 5 decimals (was 3), matching the 1e-5 `q_spacing` minimum; number-field precision is now configurable.
|
||||
* rugnux: Add a dataset-wide **Wilson B-factor** estimate to the merged output (mmCIF, stats table, log); the per-image viewer Wilson B emits NaN for implausible fits.
|
||||
* rugnux: De-novo space-group search vetoes a merohedral-twin over-promotion whose systematic error-model `b` balloons past a calibrated bound (keeps R3 as R3, not R32).
|
||||
* rugnux: De-novo space-group search decides lattice **centering** from the strength (mean I/sigma) of the systematically-absent class, not a per-reflection violation count.
|
||||
* rugnux: Recover lattice **centering** on weak / low-energy data via a floor-independent test (rate of significant absent vs present reflections), fixing a missed I-centring at 5/13 keV.
|
||||
* rugnux: Report anomalous signal-to-noise **SigAno** = <|I(+)-I(-)|>/<sigma> per shell and overall (mmCIF PDBx items + stats-table column); anomalous merges only.
|
||||
* rugnux: De-novo space-group search recovers a genuine high-symmetry group on weak data with a broken sigma model by confirming on the systematic-`b` test alone (restores an F432 case).
|
||||
* rugnux: Print the adopted **space group and unit cell** as a one-line summary at the end of the run (de-novo or user-fixed `-S`).
|
||||
* rugnux: Score the radiation-damage **decay** cross-validation on a sigma-independent (R-meas-like) metric, so a spurious slope can't pass by reshaping sigmas.
|
||||
* rugnux: Fix de-novo rotation indexing committing a spurious axis-multiple supercell (collapsing to P1) via a cross-scheme smaller-cell tie-break on near-integer volume ratios.
|
||||
* rugnux: Widen refined-cell angle bounds to [30, 150] deg (rotation candidate and per-frame stills refinement); check refined angles against the reference cell.
|
||||
* rugnux: `-S`/`--space-group` now accepts a Hermann-Mauguin symbol (e.g. `P43212`) as well as a space-group number.
|
||||
* rugnux: Warn when the chosen cell/space group carries an indexing (merohedral) ambiguity needing a reference to resolve.
|
||||
* Indexing: Requesting the FFTW (CPU) indexer on a GPU node now fails with a clear, actionable message (rotation always uses the GPU FFT indexer there).
|
||||
* rugnux: Stills `--refine-geometry[=N|off]` - first-pass bundle-adjust of beam/distance/cell then re-index (default ON with a reference cell); accepts reference `F`/`FP` columns.
|
||||
* rugnux: Per-image geometry refinement `-r flex` tries all three algorithms per image and keeps the best (old name `multi` kept as an alias).
|
||||
* rugnux: Experimental stills partiality `--still-partiality` (Gaussian excitation-error) and `--partiality-uncertainty <num>` down-weighting the least-complete partials.
|
||||
* rugnux: Default the stills Bragg-integration box to r=6 (integration radii 6, 8, 12).
|
||||
* rugnux: Scaling correctness for self-referenced stills and for reference-fixed merges. Self-referenced stills now scale in a single pass, fixing a weak-data collapse where a second pass drove weak reflections towards zero. A reference MTZ (`-z`) fixes the space group, cell and indexing ambiguity but is never used as a scale anchor - for both stills and rotation - so the merge stays self-consistent, and the stills indexing-ambiguity resolution was moved out of the on-the-fly scaler and is now resolved per image against the reference.
|
||||
* rugnux: Reject second-lattice overlaps in the de-novo space-group search with a normalised-intensity (E^2) cap, so a handful of very strong overlap reflections from a second lattice no longer skew the symmetry decision.
|
||||
* rugnux: Fix `--scale` on a self-contained `_process.h5` - the stored reflections and error model are now reloaded correctly.
|
||||
* rugnux: Add `--spot-low-resolution <num>` (default 50 A; lower it, e.g. 24, to exclude the direct-beam halo on weakly-diffracting serial data) and `--min-pix-per-spot <num>` (default 2; serial data can index better with 1 plus a higher spot threshold).
|
||||
* jfjoch_viewer: Expose the stills processing settings in the settings dock, rename the geometry-refinement `multi` option to `flex`, and retry a deferred initial image fit on resize so a grid-scan opens at the correct zoom.
|
||||
* jfjoch_writer: Remove the CBF and TIFF image writers - only NXmx HDF5 is written now (all three HDF5 layouts remain: legacy, VDS, integrated).
|
||||
* Reader: Treat a negative `total_flux` in a stored dataset as unknown/absent rather than a real (invalid) flux.
|
||||
* Packaging: Build the self-contained Linux viewer against a static libdbus with glib disabled, so the `.tgz` no longer drags a tail of system `.so` dependencies; add parallel image-build and in-container viewer-verification scripts.
|
||||
* rugnux: Write anomalous data as a standard CCP4 anomalous MTZ - one row per reflection with `IMEAN`, `I(+)`/`I(-)` (and the matching `F`/`F(+)`/`F(-)` amplitudes) - instead of two `IMEAN` rows per Bijvoet pair, so `aimless`/`mtz2sca`/ANODE read it directly. The non-anomalous MTZ output is unchanged.
|
||||
* rugnux: Always write the merged reflections as both `<prefix>.mtz` and `<prefix>.cif` (each has its uses downstream - MTZ for the CCP4/phenix tools, mmCIF for deposition). The `--scaling-output` format selector and the plain-text `.hkl` output are removed.
|
||||
* rugnux: Add a detector-plane **modulation** (flat-field) correction surface to rotation scaling - a smooth multiplicative factor over where a reflection lands on the detector, fitted against the merged reference and cross-validated. It corrects detector-response/geometric systematics that inflate R-meas (a several-to-tens-of-percent R-meas drop across the rotation battery, CC1/2 held or improved, anomalous preserved). On by default with decay/absorption (`--no-scaling-corrections` disables all). The correction-surface cross-validation scores a sigma-independent R-meas-like agreement, not a studentized chi^2, so a surface cannot pass by reshaping the sigmas.
|
||||
* rugnux: Add an optional **stills detector-plane modulation** (flat-field) correction (`--stills-modulation`, default off) - the same 16x16 cross-validated surface as rotation, for the ScaleOnTheFly/MergeOnTheFly stills path, which otherwise has no correction surfaces. Applies in both full analysis and `--scale`.
|
||||
* Bragg integration: The local background under each Bragg spot is now a **symmetric trimmed mean** of the background ring rather than the plain mean, on by default for monochromatic data - rotation AND still (`--background-trim <f>`, default 0.10; 0 restores the plain mean). Neighbour-spot wings, tails and zingers are one-sided contaminants that bias the plain mean high and make it over-subtract weak high-angle reflections (fractionally worst at the resolution edge); dropping the extreme ring pixels removes that bias while a clean Poisson ring is essentially unchanged. On the rotation battery <I/sigma> improved on every crystal and resolution-edge R-meas fell several-fold, rescuing the high-resolution CC1/2 where the plain mean had collapsed it. Broadband (non-zero bandwidth) data keep their high-side sigma-clip instead. Implemented identically in the CPU and GPU integrators; the dead `Reflection.completeness` field was removed.
|
||||
* rugnux: Self-referenced stills scale in a single pass (fixing a weak-data collapse); a reference MTZ (`-z`) fixes SG/cell/ambiguity but never anchors the scale (stills and rotation).
|
||||
* rugnux: Cap normalised intensity (E^2) on second-lattice overlaps in the de-novo space-group search, so strong overlaps don't skew the symmetry decision.
|
||||
* rugnux: Fix `--scale` on a self-contained `_process.h5` (stored reflections and error model reload correctly).
|
||||
* rugnux: Add `--spot-low-resolution <num>` (default 50 A) and `--min-pix-per-spot <num>` (default 2) to tune spot finding on weak serial data.
|
||||
* jfjoch_viewer: Expose stills processing settings in the settings dock, rename geometry-refinement `multi` to `flex`, and refit the initial image on resize.
|
||||
* jfjoch_writer: Remove the CBF and TIFF image writers - only NXmx HDF5 is written (all three layouts remain).
|
||||
* Reader: Treat a negative `total_flux` in a stored dataset as unknown/absent rather than a valid flux.
|
||||
* Packaging: Build the self-contained Linux viewer against a static libdbus with glib disabled; add parallel image-build and in-container viewer-verification scripts.
|
||||
* rugnux: Write anomalous data as a standard CCP4 anomalous MTZ (one row per reflection: `IMEAN`, `I(+)`/`I(-)`, `F`/`F(+)`/`F(-)`), readable by aimless/mtz2sca/ANODE.
|
||||
* rugnux: Always write merged reflections as both `<prefix>.mtz` and `<prefix>.cif`; the `--scaling-output` selector and text `.hkl` output are removed.
|
||||
* rugnux: Add a detector-plane **modulation** (flat-field) correction surface to rotation scaling (cross-validated, on by default; `--no-scaling-corrections` disables all), dropping R-meas.
|
||||
* rugnux: Add optional **stills detector-plane modulation** (`--stills-modulation`, default off) - the same cross-validated surface for the on-the-fly stills path.
|
||||
* Bragg integration: Local background is now a **symmetric trimmed mean** of the ring (`--background-trim <f>`, default 0.10; monochromatic), improving <I/sigma> and resolution-edge CC1/2.
|
||||
|
||||
### 1.0.0-rc.159
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user