Files
Jungfraujoch/docs/RUGNUX_OVERVIEW.md
T
leonarski_f 30b6800289
Build Packages / build:windows:nocuda (push) Successful in 17m20s
Build Packages / build:windows:cuda (push) Successful in 19m52s
Build Packages / build:viewer-tgz:cpu (push) Successful in 9m38s
Build Packages / build:viewer-tgz:cuda (push) Successful in 11m18s
Build Packages / build:rugnux-tgz (x86_64) (push) Successful in 9m34s
Build Packages / build:rugnux:aarch64 (cross) (push) Successful in 5m42s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 20m33s
Build Packages / Create release (push) Successful in 33s
Build Packages / build:rugnux:windows (push) Successful in 12m0s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 15m42s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m59s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 16m8s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 14m35s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m55s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m58s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / build:rpm (rocky8) (push) Successful in 15m21s
Build Packages / Build documentation (push) Successful in 54s
Build Packages / build:rpm (rocky9) (push) Successful in 16m23s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 12m2s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m6s
Build Packages / Unit tests (push) Successful in 1h10m26s
v1.0.0-rc.171 (#81)
* Rugnux: basic support for CCD images (marCCD, SMV) and for gzipped miniCBF.
* `jfjoch_viewer`: opens the CCD formats, and fixes to the dataset plots.
* Documentation updates.

Reviewed-on: #81
Co-authored-by: Filip Leonarski <filip.leonarski@psi.ch>
2026-09-17 14:42:52 +02:00

64 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# What Rugnux does
The map of a run, in the order it happens — one paragraph per stage, each linking into the
[data-analysis reference](CPU_DATA_ANALYSIS.md) where the algorithm lives. The walk-through is a
rotation run with the defaults; stills differences are at the end.
**Open the dataset.** The geometry, wavelength and goniometer come from the file
([What Rugnux reads](RUGNUX_FORMATS.md)). A goniometer axis makes it a rotation run, none makes it
serial stills — nothing is asked of the user.
**Pre-scan.** A projection of the first frames (60 by default) finds the beam-stop shadow and masks
it ([§1.5](CPU_DATA_ANALYSIS_IMAGE.md)), measures the beam centre from the isotropy of the
scattered background and compares it with the file's ([§1.4](CPU_DATA_ANALYSIS_IMAGE.md)), and
reads how wide this crystal's spots are, which sets the integration radius
([§9.5](CPU_DATA_ANALYSIS_INTEGRATION.md)).
**Spots.** Every image is decoded — on the GPU straight from the compressed chunk
([§0](CPU_DATA_ANALYSIS_IMAGE.md)) — and one fused pass computes the azimuthal profile and finds
the spots against each image's own per-resolution-ring noise
([§2–§3](CPU_DATA_ANALYSIS_IMAGE.md)). The ice-ring score is read off the same profile.
**Indexing.** The spots of a sample of frames are rotated back to a common crystal frame and the
FFT search looks for periodicity over thousands of directions; candidate cells are
Niggli-reduced, classified by Bravais lattice, refined both constrained and triclinic, and decided
on how many validation frames each actually indexes
([§4–§7](CPU_DATA_ANALYSIS_INDEXING.md)). A failed pass triggers the discrete rescues — the
rotation-axis sign, the beam-centre search — before anything is given up on.
**First integration pass.** At the geometry in the file, every frame is predicted
([§8](CPU_DATA_ANALYSIS_INTEGRATION.md)) and profile-fit integrated
([§9](CPU_DATA_ANALYSIS_INTEGRATION.md)); partials are combined into fulls, scaled and merged
([§10](CPU_DATA_ANALYSIS_INTEGRATION.md)).
**Geometry post-refinement.** From those reflections the detector distance, beam centre and the
cell scale / rotation axis are refined over all frames at once, each step committed only if it
improves a held-out residual ([§7.5](CPU_DATA_ANALYSIS_INDEXING.md)).
**Second pass.** The sweep is re-indexed de novo and re-integrated at the refined geometry; this
pass is the canonical output, and a guard compares the two passes and keeps the better one
(reported as `PASS=` / `PASS_DECISION=` in [the report](RUGNUX_REPORT.md)).
**Space group.** On the P1 merge of the final pass, the point group is scored operator by operator
on resolution-normalised intensities and the screw axes, glide planes and centring are read from the
systematic absences ([§13.1](CPU_DATA_ANALYSIS_DECISIONS.md)); twinning and translational
pseudo-symmetry are checked beside it ([§13.2](CPU_DATA_ANALYSIS_DECISIONS.md)). `CANNOT_DETERMINE` and an enantiomorphic pair are real
answers here, not evasions.
**Scale and merge.** In the determined group: per-frame scales, the cross-validated correction
surfaces (decay, absorption, modulation), the error model and ISa, outlier rejection, the
CC1/2-based resolution cut, the anisotropy description, FrenchWilson amplitudes and the R-free
flags ([§10](CPU_DATA_ANALYSIS_INTEGRATION.md),
[§13.3–§13.5](CPU_DATA_ANALYSIS_DECISIONS.md)).
**Write.** The merged `.mtz` / `.cif` / `.hkl`, the unmerged MTZ, the P1 cross-check and the
results report land next to each other ([Output files](RUGNUX_TUTORIAL.md#output-files)); with
`--model`, validation runs first and the maps and the placed model are written too
([§14](CPU_DATA_ANALYSIS_DECISIONS.md)).
**Stills instead.** Serial data skip the two-pass machinery: each image is indexed independently
(with the known-cell `ffbidx` indexer where a cell is given), partiality comes from a per-crystal
orientation-tilt post-refinement rather than a rocking curve, and a merohedral indexing ambiguity
has to be broken per image, at integration time, against a reference or a model
([Advanced ▸ the indexing ambiguity](RUGNUX_ADVANCED.md#the-indexing-ambiguity)).