leonarski_fandClaude Opus 5 e0e429ae2f Rotation: pass 2 divides partiality by the width pass 2 measured
The second pass of the two-pass rotation loop widens its prediction window to
the frame-order-smoothed mosaicity the first pass fitted, taking the max with
this frame's own estimate so no reflection is dropped. That widened value was
then reported onward as the frame's mosaicity, so it also became the divisor
RotationScaleMerge recomputes every partiality from - a number chosen for
prediction safety, applied to the intensities.

The two uses are not symmetric. Prediction only decides membership: a
reflection just inside a generous window arrives with a partiality near zero
and is weighted as such, and widening the window by 28% was measured to move
the merged statistics by under half a percent. The divisor multiplies every
partial, and forcing it 34% wide on a rotation crystal cost ISa 10.7 -> 8.0 and
R_meas 12.7 -> 14.5%. Pass 2 has also just re-measured the rocking width
against the post-refined cell, which is the better of the two numbers - the
literature's own remedy for a mosaicity fitted against a stale cell is exactly
to re-estimate it after post-refinement (XDS documents this as a manual second
INTEGRATE/CORRECT round).

So keep the widened value where it was wanted, on the prediction window, and
let the partiality divide by what the frame measured. The predicted reflection
population is unchanged.

Measured on three rotation crystals at their XDS resolution limits, identical
partial counts in every arm: a weak monoclinic ISa 6.3 -> 6.7, R_meas
19.1 -> 18.7%, <I/sigma> 3.3 -> 3.5; tetragonal lysozyme ISa 27.1 -> 27.4,
R_meas unchanged at 4.5%; a second monoclinic ISa 13.9 -> 13.8, R_meas
unchanged at 12.3%.

The full 38-crystal rotation battery then says the defect was almost never
active: 36 of 38 crystals are untouched, and the reported per-image mosaicity
moves on exactly one of them (0.3380 -> 0.3385 deg). The three-crystal probe
above does not reproduce against the current baseline - lysozyme reads
27.81 -> 27.80 - because the max() rarely bites: pass 1's per-frame width is
already smooth in frame order, its median frame-to-frame step being 0.0005 deg
against a run spread of 0.028, so it seldom exceeds what pass 2 measures for
itself. The two crystals that do move are marginal ones whose two-pass lattice
search takes a different branch (validation frames 25/60 -> 26/60 and
48/60 -> 49/60); on that evidence their merge numbers measure the branch, not
this change. No space group moves.

So this lands as a correctness fix with no measurable effect on today's data,
not as an improvement: the widened window must not become the divisor, whether
or not the two happen to coincide on the crystals we have.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 01:18:08 +02:00
2026-07-11 07:19:11 +02:00
2026-07-19 09:39:28 +02:00
2025-12-04 11:56:14 +01:00
2026-07-13 13:54:03 +02:00
2026-07-12 19:42:29 +02:00
2026-03-26 20:50:33 +01:00
2026-06-23 20:29:49 +02:00
2026-07-19 09:39:28 +02:00
2026-07-19 09:39:28 +02:00
2026-06-13 21:27:41 +02:00
2026-06-23 20:29:49 +02:00
2024-11-22 21:25:20 +01:00
2024-12-02 21:17:14 +01:00
2025-10-25 22:05:47 +02:00
2026-07-03 19:18:56 +02:00
2026-06-23 20:29:49 +02:00
2024-12-02 21:17:14 +01:00
2026-07-28 21:58:00 +02:00

Jungfraujoch

Application to receive data from the PSI JUNGFRAU and EIGER detectors.

All documentation is now placed in docs/ subdirectory and for the current version hosted on Jungfraujoch Read The Docs page.

S
Description
Jungfraujoch Data Acquisition System
Readme GPL-3.0
3 GiB
Languages
C++ 73.7%
HTML 8.8%
C 7%
TypeScript 4.8%
Tcl 2.5%
Other 3.1%