jungfrauandClaude Opus 5 484a0e162a Give the predicted reflections an order of their own
The GPU predictors claim their output slot with atomicAdd(counter, 1), so a reflection's position
in the array is whatever order the blocks happened to finish in. That position is not private to
the predictor. BraggOwnerKey packs it into the owner map as the tie-break between two centres
equidistant from a shared pixel - the map's atomicMin is order-independent, but the number it
compares is not - and the ingest and post-refine bucket sorts, whose comparators are deliberately
not total, resolve their ties by the order they are handed.

So two runs of the same binary on the same images integrated a different set of reflections.
Measured on a large-cell rotation dataset: 63301112 observations against 63301139, and 89% of the
merged intensities differing by more than 1% of themselves, median 1.8%. Single-threaded as well as
at -N 48, which is what ruled out thread ordering and pointed here.

Order the downloaded list by (h, k, l, delta_phi) before TruncateToOutput, whose own pick is then
reproducible as well. hkl is a property of the reflection rather than of the schedule, and delta_phi
separates the two rocking solutions one hkl can have. The CPU predictors already emit in hkl order,
so the two paths now agree on it.

Sorting a 20-byte key and gathering once, rather than sorting the 88-byte reflections in place,
keeps this off the clock: on a crystal predicting some 35000 reflections a frame the run measures
52.2 s against 52.3 s before.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011n8riB6X59oRjkrSHzNPAU
2026-08-23 10:55:37 -04:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-07-19 09:39:28 +02:00
2025-12-04 11:56:14 +01:00
2026-08-22 18:35:47 +02:00
2026-07-13 13:54:03 +02:00
2026-07-12 19:42:29 +02:00
2026-08-13 17:03:10 +02:00
2026-03-26 20:50:33 +01:00
2026-06-23 20:29:49 +02:00
2026-08-13 17:03:10 +02:00
2026-07-19 09:39:28 +02:00
2026-08-13 17:03:10 +02:00
2026-08-23 13:05:31 +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
2026-08-13 17:03:10 +02: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
2026-08-13 17:03:10 +02:00
2024-12-02 21:17:14 +01:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-08-22 18:35:47 +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++ 75.2%
HTML 7.6%
C 6.1%
TypeScript 4.2%
Cuda 2.2%
Other 4.6%