Files
Jungfraujoch/stills_datasets.tsv
T
leonarski_fandClaude Opus 5 39a0b067a4 Add a stills validation harness, the analogue of rugnux_vs_xds.py
rugnux_vs_xds.py gates every rotation change in this project. Nothing
gates a stills change, so until now one could not be validated at all -
which is why the background-ring width below had to be measured before it
could be argued about.

The rotation harness does not transfer. A stills dataset is one file of
100k-500k images with no per-crystal reference, the space group is known
in advance and never in question, and what a change moves is the merge.
So this asks a different question - did this make stills data better or
worse - by running rugnux over the same fixed image subset under two or
more argument sets and tabulating the merge per resolution shell.

Three things it does on purpose. It pins the resolution range per dataset
so both arms share shell edges: without that the automatic cut-off moves
between arms and the columns are not the same shells, which happened on
two of seven datasets. It fixes and prints the image subset, contiguous
rather than strided because a stride turns one sequential read into ten
thousand seeks. And --repeat measures the control floor, which on six of
seven datasets is bit-identical in every column of every shell.

It reads the stable interfaces - the report's KEY= value lines and the
mmCIF _reflns block and _reflns_shell. loop. The one console-log number,
how many predicted reflections lost their background ring, is labelled as
such; it is there because it is the only place the price of a wider ring
is counted. A CrystFEL stream can be scored alongside as an optional
reference, keyed on the global image serial number - Event: //N restarts
at zero in every file and silently multiplies the count.

No dataset list is shipped. A dataset directory name identifies a
sample, and so does a run label or a pump-probe parameter in a filename,
so the table committed here is a template carrying the reasoning and no
paths. A real one belongs in a config kept outside the repository, which
is why --config is required and has no default.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CHMmeM1d489zvNFT7ZMN2P
2026-08-26 11:26:02 +02:00

1.8 KiB

1# Dataset table for rugnux_stills_ab.py -- TEMPLATE.
2#
3# Columns:
4# alias master.h5 start end stride dmin dmax [extra rugnux args]
5#
6# This file ships with NO real dataset paths, and none should be added to it. A dataset
7# directory name identifies a sample, and so does a run label or a pump-probe parameter in a
8# filename. Keep your own table outside the repository and point the harness at it:
9#
10# ./rugnux_stills_ab.py --config ~/my_stills_datasets.tsv --workdir /somewhere ...
11#
12# --config is a required argument with no default, so nothing depends on this file existing.
13#
14# Filling a row:
15# alias a neutral label; it is what appears in the results table. Not the sample.
16# dmin pin it, do not leave it to the automatic cut-off. Run a calibration pass on the
17# exact subset first and take the FINER of the two arms' cc-logistic cut-offs, so the
18# pin clips neither arm and the shell edges - uniform in 1/d^2 between dmax and dmin -
19# are identical in both. Without this the cut moves between arms and the columns being
20# compared are not the same shells.
21# dmax 50, the value XDS configurations use and rugnux's own --scaling-low-resolution default.
22# subset contiguous (stride 1), not strided: on a spinning disk a stride turns one sequential
23# read into ten thousand seeks.
24# -C/-S pin the cell and space group so neither arm can differ by having indexed a different
25# lattice. For plain lysozyme, the field's standard test specimen, the reference cell
26# 79.1,79.1,37.9,90,90,90 in P4(3)2(1)2 (-S 96) is the usual choice.
27#
28# Example row, with the path left as a placeholder to be filled in locally:
29#
30# still_a /path/to/your/dataset_master.h5 0 10000 1 1.66 50 -C 79.1,79.1,37.9,90,90,90 -S 96