leonarski_f and Claude Opus 5.5
34d5bb5631
stills merge 2.3-2.5x faster, output unchanged: parallel observation passes, hash accumulator, no amplitudes on scaling references
...
The stills scale/merge after the image loop was almost entirely serial:
- every scaling-reference merge (MergeAll: the per-image scaling reference and the two
partiality post-refinement references) ran French-Wilson single-threaded on its export,
about 3 s each, and assigned free-R flags - neither is read by a reference, which uses I
only. MergeAll now exports intensities alone (MergeOnTheFly::ExportIntensities).
- the merge accumulated into a std::map; it is now an unordered_map exported in key order,
which is the std::map order.
- AddImage, the error-model collection and the R_meas pass of MergeStats did the
per-observation work (systematic-absence test, ASU key, filters, error-model sigma,
outlier test, merged-I lookup) in one serial loop. They now reduce a block of images in
parallel and consume it in image order (ReduceImagesInOrder), so every floating-point
sum, half-set choice and hash-map insertion is made in the serial order.
Measured on a 25k-frame XFEL stills run (box loaded, load 9-14): merge P1 19.0 -> 7.1 s,
final-group merge 27.7 -> 13.2 s; on a second run 23.4 -> 7.7 s and 29.7 -> 13.6 s.
mtz/unmerged mtz data, hkl, cif and report identical on both runs, mx and --mode scale.
New test MergeOnTheFly_AddImagesIsTheSerialMerge checks the parallel merge against the
serial loop across a block boundary.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-10-14 10:09:23 +02:00
..
2026-08-13 17:03:10 +02:00
2026-09-29 15:57:32 +02:00
2026-07-19 09:39:28 +02:00
2026-10-08 10:56:34 +02:00
2026-10-08 10:56:34 +02:00
2026-10-08 10:56:34 +02:00
2025-05-05 19:32:22 +02:00
2026-09-29 15:57:32 +02:00
2026-10-08 12:33:34 +02:00
2026-09-02 21:17:31 +02:00
2026-10-11 02:21:32 +02:00
2026-04-29 09:50:50 +02:00
2026-09-29 15:57:32 +02:00
2026-10-09 21:18:12 +02:00
2026-10-07 14:05:37 +02:00
2026-09-15 17:09:31 +02:00
2026-09-15 17:09:31 +02:00
2026-10-06 14:03:18 +02:00
2026-09-29 15:57:32 +02:00
2026-10-06 14:03:18 +02:00
2026-10-11 13:01:23 +02:00
2026-10-06 14:03:18 +02:00
2026-10-06 14:03:18 +02:00
2026-10-08 17:03:09 +02:00
2026-08-13 17:03:10 +02:00
2026-08-13 17:03:10 +02:00
2026-10-13 07:54:56 +02:00
2026-09-02 21:17:31 +02:00
2026-09-29 15:57:32 +02:00
2026-05-28 18:48:35 +02:00
2025-05-05 19:32:22 +02:00
2026-10-13 12:51:34 +02:00
2025-06-10 18:14:04 +02:00
2026-10-06 14:03:18 +02:00
2026-09-02 21:17:31 +02:00
2026-09-29 15:57:32 +02:00
2026-10-10 18:56:00 +02:00
2026-10-13 16:07:33 +02:00
2026-10-08 22:53:01 +02:00
2025-11-19 09:40:50 +01:00
2026-04-29 09:50:50 +02:00
2026-08-25 08:21:39 +02:00
2026-09-02 21:17:31 +02:00
2026-10-13 15:44:04 +02:00
2026-09-02 21:17:31 +02:00
2026-09-02 21:17:31 +02:00
2026-08-13 17:03:10 +02:00
2026-05-08 11:39:51 +02:00
2024-11-22 21:25:20 +01:00
2025-10-20 20:43:44 +02:00
2025-04-14 11:52:06 +02:00
2025-11-09 12:42:27 +01:00
2025-09-08 20:28:59 +02:00
2025-09-08 20:28:59 +02:00
2025-03-24 12:16:33 +01:00
2026-09-22 06:48:37 +02:00
2026-10-06 14:03:18 +02:00
2025-06-18 15:19:18 +02:00
2026-09-02 21:17:31 +02:00
2026-09-09 07:25:13 +02:00
2025-12-12 21:24:20 +01:00
2026-02-01 13:29:33 +01:00
2026-10-12 08:11:05 +02:00
2026-03-03 22:24:44 +01:00
2025-11-19 09:40:50 +01:00
2026-08-25 08:21:39 +02:00
2026-09-29 15:57:32 +02:00
2026-08-13 17:03:10 +02:00
2026-10-10 10:47:55 +02:00
2025-05-05 19:32:22 +02:00
2024-11-22 21:25:20 +01:00
2026-08-25 08:21:39 +02:00
2026-10-09 21:15:01 +02:00
2026-06-15 20:24:15 +02:00
2026-09-29 15:57:32 +02:00
2026-06-23 20:29:49 +02:00
2026-07-19 09:39:28 +02:00
2026-09-15 17:09:31 +02:00
2024-11-22 21:25:20 +01:00
2026-09-29 15:57:32 +02:00
2026-06-23 20:29:49 +02:00
2026-09-29 15:57:32 +02:00
2026-09-09 07:25:13 +02:00
2026-10-08 17:03:09 +02:00
2026-09-29 15:57:32 +02:00
2026-09-29 15:57:32 +02:00
2024-11-22 21:25:20 +01:00
2026-10-14 10:09:23 +02:00
2026-10-09 12:38:37 +02:00
2026-10-12 21:40:54 +02:00
2026-10-10 20:47:04 +02:00
2026-10-13 14:28:51 +02:00
2024-12-04 20:58:51 +01:00
2026-10-12 19:30:22 +02:00
2025-03-02 13:15:28 +01:00
2026-06-08 08:30:35 +02:00
2026-08-25 08:21:39 +02:00
2026-10-08 07:27:25 +02:00
2026-10-11 09:27:32 +02:00
2025-11-09 12:42:27 +01:00
2026-08-13 17:03:10 +02:00
2026-09-29 15:57:32 +02:00
2026-10-11 07:12:05 +02:00
2026-08-27 22:16:54 +02:00
2024-11-22 21:25:20 +01:00
2025-11-09 12:42:27 +01:00
2026-10-13 12:51:34 +02:00
2025-10-01 22:54:40 +02:00
2026-10-10 13:35:49 +02:00
2026-09-02 21:17:31 +02:00
2026-10-12 22:20:36 +02:00
2026-09-22 06:48:37 +02:00
2026-09-02 21:17:31 +02:00
2026-06-23 20:29:49 +02:00
2026-06-23 20:29:49 +02:00
2026-06-23 20:29:49 +02:00
2026-10-10 18:56:00 +02:00
2026-10-12 22:46:16 +02:00
2026-10-13 19:42:25 +02:00
2026-09-29 15:57:32 +02:00
2026-10-13 19:42:33 +02:00
2026-10-13 14:43:44 +02:00
2026-09-15 17:09:31 +02:00
2026-10-12 08:11:05 +02:00
2026-09-29 15:57:32 +02:00
2026-09-09 07:25:13 +02:00
2026-10-07 14:05:37 +02:00
2026-08-13 17:03:10 +02:00
2026-10-06 14:03:18 +02:00
2026-10-12 16:11:14 +02:00
2026-09-29 15:57:32 +02:00
2026-03-02 15:57:12 +01:00
2026-10-13 05:21:33 +02:00
2026-10-13 12:27:08 +02:00
2026-09-02 21:17:31 +02:00
2026-09-29 15:57:32 +02:00
2026-08-13 17:03:10 +02:00
2026-10-13 12:51:34 +02:00
2026-06-23 20:29:49 +02:00
2026-04-16 11:59:59 +02:00
2026-06-23 20:29:49 +02:00
2025-11-02 13:45:57 +01:00
2025-12-12 21:24:20 +01:00
2026-09-22 06:48:37 +02:00
2026-10-09 19:40:22 +02:00
2026-05-28 18:48:35 +02:00
2026-10-08 07:07:32 +02:00
2026-10-09 18:51:56 +02:00
2026-10-08 12:36:40 +02:00
2026-09-02 21:17:31 +02:00
2026-10-06 14:03:18 +02:00
2026-10-06 14:03:18 +02:00
2026-10-13 12:51:34 +02:00
2026-03-26 20:50:33 +01:00
2024-11-22 21:25:20 +01:00
2026-09-29 15:57:32 +02:00