leonarski_fandClaude Opus 5 9a50ae5a0f Take the asymptote where it is read, and count a shell's reflections on every core
Five costs in the merge, none of them arithmetic.

The strong-reflection asymptote was estimated twice for every merge and the first
estimate was read by nothing: no statement between the two touches the value, so
wherever the resolution cutoff refits the error model the earlier one was thrown
away. It is now taken once, at the point the number is reported. Its per-group
scatter array was also built fresh on every call - fifty megabytes value-initialised
on one thread and immediately overwritten - and now lives with the object.

The merge accumulator did the same thing on a larger scale: ten arrays and a struct
of accumulators, a quarter of a gigabyte in all, zeroed on one thread before the
device wrote every element of them. The kernel is a grid-stride loop over all
groups and writes all ten outputs unconditionally, so nothing was reading a zero it
had put there. The arrays are kept and resized, and the unpack that follows runs
over the cores instead of one; its only reduction is an integer count, which does
not care in what order it is summed. The host path still clears, because it
accumulates in place.

Dropping collapsed frame scales walked every full at eighty bytes a record to read
two fields of four. Both were already downloaded, so it reads those instead: a
tenth of the traffic for the same answer.

The error model's chi-square median was computed on every fit and printed once. It
now keeps what the last fit used and takes the median where the line is written.

Counting the reflections a resolution shell could hold walked the whole reciprocal
box on one thread and built a vector of the survivors first. The walk is now split
over the outer index with a per-thread tally summed in thread order, and the vector
is gone. On the cells in the rotation test set that is four to eleven milliseconds a
call against three calls a crystal; on a two hundred Angstrom cell it is ninety-three
milliseconds down to five.

A comment claiming the point-group pass is serial to fill the operator cache is no
longer true and is corrected; the cache is filled by a parallel pass before it.

Every reflection file is byte-identical on four crystals, under a pinned resolution
limit and under the automatic cutoff - the latter being the configuration that
actually exercises the moved asymptote, since a pinned limit never made the second
call at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EGpGdgmJ8MyY9pCGWjktyi
2026-08-25 01:08:03 +02: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-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-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%
HTML 7.8%
C 6.2%
TypeScript 4.3%
Cuda 2.3%
Other 4.3%