1435 Commits
Author SHA1 Message Date
appleb_mandClaude Opus 4.8 bfa9bf04a9 Bump version to 0.3.3 for PyPI publish
Build and Publish / Build and Deploy Docs (push) Successful in 40s
Build and Publish / test (push) Successful in 2m23s
Build and Publish / build (push) Successful in 18s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0.3.3
2026-06-26 17:04:06 +02:00
appleb_m 64e054f9d8 Merge branch 'ml_zoom'
Build and Publish / test (push) Successful in 2m12s
Build and Publish / build (push) Failing after 17s
Build and Publish / Build and Deploy Docs (push) Skipped
# Conflicts:
#	src/aare/daq/operations/raster/service.py
2026-06-26 16:45:20 +02:00
appleb_m 07bff1e37e Merge remote-tracking branch 'origin/raster_score' 2026-06-26 16:43:28 +02:00
appleb_m ad44acabc0 DAQ: have the get xtal size, best res, get best b factor added 2026-06-26 16:37:16 +02:00
appleb_m f33aa8c91a yaml update 2026-06-26 11:19:18 +02:00
appleb_m 929b9aee8d Raster_grid_manager: renabled load from file 2026-06-26 11:19:10 +02:00
appleb_mandClaude Opus 4.8 b8dd3756cc raster auto-center: allow extra grid padding at the bottom of the y scan
Make the first-grid y padding asymmetric: the bottom (far end of the n_y scan)
can be padded more than the top via daq.auto_raster.grid_padding_fraction_y_
bottom (defaults to grid_padding_fraction_y, so symmetric unless set higher).
The top padding still shifts smargon_top_left; the extra bottom padding only
grows n_y.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 11:08:02 +02:00
appleb_m 6420709114 Smargon_panel: Russell added z-axis smargon buttons to the GUI, already tested! 2026-06-26 10:52:29 +02:00
appleb_m 88d17d6b33 status_bar: shutter renamed fast shutter 2026-06-26 10:50:56 +02:00
appleb_mandClaude Opus 4.8 5377e7d489 raster auto-center: unified first-grid padding in x and y (shifts top-left)
Replace the loop_face-only box padding with a single grid padding applied to
the first auto-center grid scan for any loop box (loop_all or loop_face). It
pads each side by a fraction of the grid size (daq.auto_raster.grid_padding_
fraction_x / _y, default 0.15), with a minimum of one cell per side, and
extends *before* cell 0 too so smargon_top_left shifts outward. Manual grid
(get_ml_bounding_box) is unchanged (grid_padding defaults off).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 10:43:12 +02:00
appleb_mandClaude Opus 4.8 0ac948746a raster auto-center: make vertical line-scan Y padding configurable
The 2nd-stage vertical line scan (n_x=1, height from the ML box) padded its
height by a hardcoded 0.10 each side (20% total), which was often too short to
cover the whole loop. Read the per-side fraction from
daq.auto_raster.line_scan_y_padding_fraction (default 0.15) so it can be tuned
per beamline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 10:08:18 +02:00
appleb_mandClaude Opus 4.8 48111e5718 gui: always allow pausing automation; only gate starting/resuming
The play/pause toggle ran its start-time checks (beamline state, busy, baton,
maintenance) before the pause branch, so when running you could be blocked from
pausing if the beamline was in the wrong state or busy.

Handle the pause toggle first and return immediately (unconditional), and run
the start-condition gates only when starting/resuming from paused.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:58:05 +02:00
appleb_mandClaude Opus 4.8 53e29bece3 raster auto-center: zoom-to-fit loop + loop_face padding + optional crystal union
Before the first auto-center raster, zoom so the loop fills at most 1/3 of the
frame, pad loop_face grids, and optionally extend the grid to cover crystals
outside the loop.

- ml_bounding_box: add build_ml_raster_plan() (single prediction via
  predict_all_best) returning the grid request + raw loop_all/loop_face boxes +
  image size. Grid box is loop_face (else loop_all); loop_face is padded by
  daq.auto_raster.loop_face_padding_fraction (15% default); when
  daq.auto_raster.include_crystal is set, the grid is unioned with any crystal
  boxes lying beyond the loop. get_ml_bounding_box (manual button / endpoint)
  is unchanged.
- config: add zoom_for_pixel_to_mm(), the inverse of pixel_to_mm.
- raster service execute_auto_center: after the first detection (reused, no
  re-predict), pick loop_all if detected and not clipped at the frame edge else
  loop_face, compute the zoom that makes its larger side 1/3 of the frame, clamp
  to daq.hardware.zoom_min/max, set zoom and re-expose.
- x06da.yaml: zoom_min/max + daq.auto_raster block.
- tests for box selection, padding, crystal union and the clipped-loop_all rule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 09:45:43 +02:00
duan_jandClaude Opus 4.8 f860e47914 DAQ/GUI: raster score as its own metric + score-based targeting
Build and Publish / test (pull_request) Successful in 2m7s
Build and Publish / build (pull_request) Successful in 17s
Build and Publish / Build and Deploy Docs (pull_request) Successful in 41s
Build and Publish / build (pull_request_target) Cancelled after 0s
Build and Publish / Build and Deploy Docs (pull_request_target) Cancelled after 0s
Build and Publish / test (pull_request_target) Cancelled after 16s
- promote crystal score to its own RasterGridMetric.RASTER_SCORE; first and
  default metric in the GUI dropdown; restore PR to original "Profile Radius"
- send per-cell raster score to AareDB via RasterPayloadModel
- split raster_highest_score (compute_crystal_score_array) from
  raster_centre_of_mass (restored to ndimage.center_of_mass); use score-based
  targeting for where-to-collect in both simulation and real mode
- add tests covering compute_crystal_score_array and raster_highest_score

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 18:05:29 +02:00
appleb_m c85bc347d1 bec_worker: reinitisiale config file added 2026-06-25 17:10:07 +02:00
appleb_m 1e9e5ae9a7 bec_worker: reinitisiale config file added 2026-06-25 17:06:02 +02:00
appleb_mandClaude Opus 4.8 ec45bf3729 daq: send commanded dtz (not live readback) to JFJoch/DB + wait for arrival
Build and Publish / test (push) Failing after 2m10s
Build and Publish / build (push) Skipped
Build and Publish / Build and Deploy Docs (push) Skipped
The detector_distance_mm sent to JFJoch and written to the DB came from the
live detector readback (diffraction.dtz_mm) captured before the detector
finished moving, so a scan requested at e.g. 100 mm could be recorded at the
old position (e.g. 800 mm).

- JFJoch + DB now read the validated request target (request.dtz) instead of
  the live diffraction.dtz_mm; diffraction.dtz_mm stays live for the
  local-contact readout.
- jfjoch: raise if request.dtz is unset (setup_datacollection must validate it
  first) instead of silently falling back to the live readback.
- raster + rotation services: wait for the detector to reach request.dtz
  (set_dtz wait=True) right before triggering the scan, since the sa2dc move is
  non-blocking. (Raster setup-before-measure reorder landed earlier in daq.py.)
- tests: request.dtz now required in jfjoch/aaredb tests; xtal-snapshot exposure
  assertion updated to 1 ms.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 16:39:06 +02:00
appleb_m f7b5008be5 workflows.py: up the exposure time on xtal snapshot to 1 ms. 2026-06-25 16:28:49 +02:00
appleb_m 4d075eb79a GUI: reactivated show coordinates
Build and Publish / test (push) Successful in 2m8s
Build and Publish / build (push) Successful in 17s
Build and Publish / Build and Deploy Docs (push) Successful in 40s
2026-06-25 11:07:56 +02:00
appleb_m 09080b4227 PSS: removed annoying log statement
Build and Publish / test (push) Successful in 2m15s
Build and Publish / build (push) Successful in 18s
Build and Publish / Build and Deploy Docs (push) Successful in 40s
2026-06-25 09:59:07 +02:00
appleb_m 14e8ef4bdf DAQ/GUI: updated beam location to use fixed exp and gain. This can be set now from teh GUi and stored in REDIS. 2026-06-25 09:58:55 +02:00
appleb_m 8c9f594d24 DAQ/GUI: updated beam location to use fixed exp and gain. This can be set now from teh GUi and stored in REDIS. 2026-06-25 09:58:47 +02:00
appleb_mandClaude Opus 4.8 a205d6422f gui: surface "beamline busy" errors quietly, not as a modal
BeamlineBusyException / TellCommandWhileBusyException fire when a user triggers
an action while the beamline or robot is busy. These are blocking-but-benign
("you can't do that right now"), so route them to the log + status bar instead
of a modal pop-up (and without the defensive automation pause), regardless of
the exception's critical flag. Genuine failures (e.g. No Pin in Gripper) still
get the modal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 16:26:18 +02:00
appleb_m bba2f8a4c4 Merge remote-tracking branch 'origin/operation_standardisation' into operation_standardisation
Build and Publish / test (push) Successful in 2m22s
Build and Publish / build (push) Successful in 20s
Build and Publish / Build and Deploy Docs (push) Successful in 42s
2026-06-24 15:34:52 +02:00
appleb_mandClaude Opus 4.8 5370c0f168 tell_client: restore "No Pin in Gripper" detection on empty-gripper mount
Commit 071b4ab made mount() return SUCCESS as soon as it saw the intermediate
TELL "state"/Busy event, before the later "Gripper detection" event is read,
so an empty-gripper mount completed silently with no MountingFailed/pop-up.

check_command_ok blocks (wait_not_busy) until the mount sequence finishes, so
after it returns the robot's own record is authoritative: if get_mounted_sample()
is None the gripper was empty -> return NO_PIN_IN_GRIPPER, which the mounting
service maps to MountingFailed("No Pin in Gripper"). Covers manual and automation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 15:30:08 +02:00
appleb_mandClaude Opus 4.8 47e05dc28c GUI/DAQ: hutch-safety gating, error pop-ups, and automation pause-and-wait
Fix the GUI pop-up path and add personnel-safety-system (PSS) gating so
door-open / beam-down / shutter-closed conditions are surfaced and acted on.

- exception pop-ups: connect the previously-orphaned http_error signal;
  failed user operations now raise a modal dialog, background/polling errors
  a non-modal banner.
- PSS device (devices/pss_state.py) reading EH1-PSYS PROHIBITED-STATE /
  ALARM-STATE; new critical DoorSafetyError + DOOR_SAFETY_ERROR code.
- mounting service blocks mount/unmount when the hutch is not prohibited or
  an alarm is active; /status now publishes pss_prohibited / pss_alarm.
- GUI blocks manual mount/unmount and the automation Run button immediately
  (pop-up) on door-open, and shows a warning banner while an alarm is active.
- centralise per-action precondition checks (ring current, safety shutter,
  hutch door) into one combined "continue?" dialog with a session-global
  "don't ask again for 1 hour" snooze, applied to all data-collection buttons.
- live automation pauses and auto-resumes on bad conditions (beam, shutter,
  door, robot) with continue-now / stop overrides, gated by a default-on
  "Pause on bad conditions" checkbox replacing the dead CHECK_ENABLED constant.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 15:30:08 +02:00
appleb_m a8855bfbba DAQ: added bbackup default_detector dsitances 2026-06-24 15:30:08 +02:00
appleb_m cf6c5894e0 BEC: changed the initialisation function in bec_worker.py and how certain PVS are handled: including ring_current backlight_brightness frontlight_brightness and zoom 2026-06-24 15:30:08 +02:00
appleb_mandClaude Opus 4.8 476aa69d70 data collection settings: panel-level Database/User-values toggle
Add DbOverrideLineEdit: a numeric field holding both a database value and
the user's value, driven by a per-tab Database/User-values toggle. The
user's value persists across samples, can be reverted to the database
value, and recovered again - replacing the clunky per-field checkboxes.

Fix the dtz<->resolution coupling so editing one updates the other in both
Database and User modes (previously it broke whenever a value was
overridden). Wire resolution, detector distance, transmission, exposure,
rotation total/image angle and the raster grid element size through the
new widget; other panels are untouched.

Add tests covering persist/revert/recover, the toggle's downstream emit,
the dtz/resolution coupling in both modes, and cross-sample persistence.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 15:30:08 +02:00
appleb_m 23290f9e49 daq: fixed dtecetor min and max bug if llm or hlm si missing in epics 2026-06-24 15:30:07 +02:00
appleb_m ef7d3cf157 Tell_client: fix state event handling, update tests 2026-06-24 15:30:07 +02:00
appleb_m d43218eb19 raster_grid_manager.py: fixed lag with large grid, now generates a single bitmap 2026-06-24 15:30:07 +02:00
appleb_m 8be1b0a0b5 tell: added door and remote check. 2026-06-24 15:30:07 +02:00
appleb_m ea3629d7b5 reminder to add tests for tell status chcks and other functions 2026-06-24 15:30:07 +02:00
appleb_m 8869fb26b9 update test cases for workflows, server and daq_server 2026-06-24 15:30:06 +02:00
appleb_m fab41cd40c workflows: when going to dewar transfer if tell is in pPark and get_moutn_sample is Noone don't dry. Untested! 2026-06-24 15:30:06 +02:00
appleb_m c6ac739548 portrait_mode: added a loop button to rerun the queue for debugging 2026-06-24 15:30:06 +02:00
appleb_m 746bc147a2 server: added mount checks to mount and autoamtion 2026-06-24 15:30:06 +02:00
appleb_m 50a0a4938b tell_client.py: added validate_mount_start_conditions method 2026-06-24 15:30:05 +02:00
appleb_m 680e1561e7 daq: automation log message split between success and error 2026-06-24 15:30:05 +02:00
appleb_m 7e78433974 bec_motors differ in some cases between beamline,s only a problem for logging/scilog messages 2026-06-24 15:30:05 +02:00
appleb_m c1edacc9c3 Added style sheet options - protrait style needs to be added to more places. 2026-06-24 15:30:05 +02:00
appleb_m 2fbb86df84 config, added lens_magnfiication to alter pixel_to_mm calculation 2026-06-24 15:30:05 +02:00
appleb_m 7c8e3e78a8 added portrait_mode.py 2026-06-24 15:30:04 +02:00
appleb_m f5f53a29ca operations refactor: standardised operations, added rotation operation, updated tests. 2026-06-24 15:30:04 +02:00
appleb_m 497241bb82 beamlin: renamed second BeamlineConfig to BeamlineYAMLCOnfig 2026-06-24 15:30:03 +02:00
appleb_m b4b82a59fd devices: fix on bec det_z device 2026-06-24 15:30:03 +02:00
appleb_m 793864bd39 pyproject.toml: should be sseclient not sseclient-py 2026-06-24 15:30:03 +02:00
appleb_m 454cd60825 tell: debuging. 2026-06-24 15:30:03 +02:00
appleb_m 0ad42f7f71 updated workflows test 2026-06-24 15:30:03 +02:00