diff --git a/CLAUDE.md b/CLAUDE.md index 48e59478..acc50bcf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -101,6 +101,18 @@ class). Per-image arrays (one entry per frame) are written to the **data** files `HDF5DataFilePlugin` subclasses in `writer/`. Put shared metadata in `NXmx`, not in a data-file plugin. +The HDF5 master/data layout is one of three `FileWriterFormat`s (`common/JFJochMessages.h`), +all NXmx: **`NXmxLegacy`** (master + `_data_NNNNNN.h5` joined by external links), +**`NXmxVDS`** (master + data joined by HDF5 virtual datasets — the default), and +**`NXmxIntegrated`** (a single self-contained file, no separate data files). Per-image plugins +must work for all three; with `NXmxIntegrated` "master" and "data" are the same file. + +**Two acquisition workflows:** the FPGA-accelerated path (JUNGFRAU at PSI; FPGA does masking, +summation, spot finding, ROI/azimuthal integration, compression) and the DECTRIS SIMPLON path +(EIGER), which has no FPGA — masking/ROI/azimuthal analysis then runs on CPU through the shared +`image_analysis/` library. Treat ROI and azimuthal features as available in **both** workflows, +not FPGA-only. + **`jfjoch_broker`** (`broker/`) is the central online service: HTTP/REST + OpenAPI control plane, FPGA configuration, image building, ZeroMQ output. `JFJochStateMachine` drives acquisition state; `JFJochServices` wires the pieces; `OpenAPIConvert`/`JFJochBrokerParser` translate between the diff --git a/docs/FPGA_DATA_ANALYSIS.md b/docs/FPGA_DATA_ANALYSIS.md index 493ca232..772fd84f 100644 --- a/docs/FPGA_DATA_ANALYSIS.md +++ b/docs/FPGA_DATA_ANALYSIS.md @@ -36,6 +36,9 @@ This way 2D azimuthal integration, as needed for example by SAS-TT, cannot be cu One needs to be careful with per-pixel corrections - their acceptable range is constrained by 16-bit pixed point integer implementation and is tuned for standard SAXS/WAXS range. +As with ROIs, azimuthal integration is also available on CPU through the shared analysis library, +so it applies to both the FPGA-accelerated (JUNGFRAU/PSI) and the DECTRIS-driven (EIGER) workflows. + ## Spot finding Jungfraujoch FPGA implements a built-in spot finder. Spot finder allows to apply the following criteria for finding strong pixels: 1. Resolution criterion - pixels only within a provided resolution range can be considered as strong pixels (calculating resolution map needs to happen on CPU before data collection run). @@ -58,6 +61,11 @@ Given very large box size, approximation are made, for example that `N ≈ N-1` Each pixel in a module can be assigned to one of 64 ROIs. For each ROIs, sum, sum of squares, max count, and number of valid pixels will be calculated. Jungfraujoch also calculates X and Y values weighted by pixel values, though this feature is not properly tested at the moment and not integrated in downstream analysis. +ROIs are not specific to the FPGA path. The same ROI definitions — box, circle, and azimuthal +(Q-range with an optional φ-sector) — are also evaluated on CPU by the shared `image_analysis/roi/` +engine, so ROI statistics are produced both for the FPGA-accelerated JUNGFRAU/PSI workflow and for +detectors driven through DECTRIS SIMPLON (e.g. EIGER), which have no FPGA acquisition path. + ## Pixel statisitics The following statistics are collected for each module: * Number of masked pixels