Files
70aaa1c26a
Build on RHEL8 docker image / build (push) Successful in 5m40s
Build on RHEL9 docker image / build (push) Successful in 5m50s
Build and Deploy on local RHEL9 / build (push) Successful in 2m5s
Build and Deploy on local RHEL8 / build (push) Successful in 5m12s
Run Simulator Tests on local RHEL9 / build (push) Successful in 20m41s
Run Simulator Tests on local RHEL8 / build (push) Successful in 24m6s
Dev/jf online display gui (#1627)
* created jf online display gui with gating, need to change naming from new_online_ZMQ inside

* jf_online_display_gui: single-process Jungfrau online display + event finder

Merge the old two-process chain (onlinedisp_zmq + jf_event_finder_*) and the
ROI-save writer into one multi-threaded program: Qt5 GUI, ROOT plots, raw ZMQ
input, HDF5/JSON output.  Renamed from new_online_ZMQ - directory, binary,
Makefile target, README/NOTES and the agent notes all carry the new name; the
legacy sources are left in place for reference.

Pipeline
- acq thread (zmq_poll) -> analysis -> worker pool -> ROOT, decoupled by frame
  and image mailboxes so a slow stage can never stall the receiver; HDF5 writer
  thread; per-socket ZMQ monitors so an idle-but-alive receiver is not called
  "stopped".  Multi-interface mode stacks N slabs bottom -> top.

Gates
- storage cell (detSpec3 bits 8-11) and the signal gate in series, so frames
  from other cells cost no CPU; optional contiguity (N px within a circle) and
  "ROI only".  Cumulative/current counters plus fps and MB/s rates.

Pedestal
- load/read/save/acquire, Pede/Raw toggle, and live dr

* jf_online_display_gui: image plots, palettes, zoom coordination, save-time locking

Build
- `make` now produces both executables: jf_online_display_gui and
  jf_online_display_gui_JFSTRX (same sources with -DJFSTRX into their own
  objects, decoder header declared as a dependency); `make normal` / `make
  jfstrx` still build one.  The strip-xel build zooms four times deeper
  (kMinViewport = 2 image pixels) and no longer dumps the decoder header on
  every displayed frame.

Display
- the image windows are plots: frame, X/Y axes with the tick labels outside,
  dotted grid, per-pixel outlines from 16 screen px and in-pixel values from
  50 px (whole numbers for counts, one decimal otherwise), all clipped to the
  plot area so a zoom cannot spill over the axes.
- the colour bar is replaced by a thin scale panel: solid-bin histogram with
  the range markers pinned at 1/4 and 3/4 (draggable, applied on release),
  18 palettes (viridis/plasma/inferno/magma/cividis/turbo/hot/greys/diverging/
  Brewer/Tol) and two lin/log switches (image intensity and histogram bars,
  log capping values <= 0 at 1e-2).
- the gain window has no scale panel at all: four valid values, fixed muted
  blue/green/yellow/red code, range pinned to 0..3.
- "zoom coordination" in the Display panel: any window zooms all of them
  (default on); off means every window is independent.

Saving
- the photon-counting threshold follows the gain stage (ADU when it is off,
  keV when it is on, both remembered), with the unit in --stats and the JSON.
- a running save locks the settings that would change the file; the gate
  threshold and min-pixels stay live but ask first, and the JSON gets
  gate_settings_modified_during_run plus a note.
- counters report frames or maps, the start-up default is no longer added to
  the previous-destinations list, and the status explains the dropped count.

ROI and flow
- "Unset ROI" button; the ROI is fed by the Gain for frames and by the virtual
  photon counting for the maps, always orange, and the arrow into Save always
  leaves the ROI; the diagram's colours follow the display-vs-save pedestal
  split while its geometry stays fixed; the signal gate is drawn as a funnel
  on the line with a control arrow.

* jf_online_display_gui: alignment, gate and display fixes from live tests

- dual interface: one-frame lookahead pairing, drain to newest, catch-up reads
  from the lagging socket, manual decimation, [perf]/[align] audit lines
- gate: contiguity circle test fixed (+ unit test), hot-pixel mask taken from
  the photon map and applied to the gate, PH plots and ADC display
- display: histogram frozen while dragging and binned over the visible scale,
  "Current" counters fixed, ROI editor (drag the yellow box), "Edit as new"
- build: CMakeLists.txt (both variants, test, feeder), local .gitignore

* jf_online_display_gui: photon map cadence counts analysed (gated) frames

Rename the spinbox to "write plot every N (gated) images" and drop the false
"independent of the ADC image decimation" claim from the tooltip and the
publish-site comment: it ticks on frames that survived the gate and the
decimation, so rejecting/skipping frames stretches the interval.

* jf_online_display_gui: strixel Z scale, plot visibility toggles

- the six strixel panels follow the ADC colour range and palette (they have
  no scale of their own) and show a "Z scale" legend
- Display panel: "show gain image" and "show ROOT plots", both off at startup;
  the ROOT canvases are parked off-screen and restored on demand
- silence the per-frame "data struct created" print in the strixel decoder

* jf_online_display_gui: "Edit as new" ROI fix, single-interface placement

- the ROI dialog's Apply button never closed it (QDialogButtonBox emits
  accepted() only for AcceptRole, Apply has ApplyRole); the edited rectangle is
  now also written to the ROI list as a new entry
- port specs accept ":top" / ":bottom" (e.g. 30027:top) so a single ZMQ stream
  lands in the correct half of the module; the stream header carries port, shape
  and flipRows but no row offset.  One log line reports the choice.

* jf_online_display_gui: receiver ROI as the union of the interfaces

Each interface reports only its own slice, so translate every slice by its row
offset and draw the union (a box crossing the boundary used to stop at it). A
single stream is drawn exactly as reported.

---------

Co-authored-by: Aldo Mozzanica <aldo.mozzanica@psi.ch>
Co-authored-by: Erik Fröjdh <erik.frojdh@gmail.com>
2026-11-03 09:39:20 +01:00
..
2024-01-12 14:01:06 +01:00
2024-01-12 14:01:06 +01:00
2023-03-31 11:56:09 +02:00
2023-03-31 11:56:09 +02:00