Skip to content

Add native Celigo image cytometer support - #1189

Open
rickwierenga wants to merge 7 commits into
mainfrom
celigo
Open

Add native Celigo image cytometer support#1189
rickwierenga wants to merge 7 commits into
mainfrom
celigo

Conversation

@rickwierenga

@rickwierenga rickwierenga commented Jul 28, 2026

Copy link
Copy Markdown
Member

Summary

Adds native PyLabRobot support for the Revvity Celigo image cytometer (formerly sold by Nexcelom/Cyntellect) without requiring the vendor application.

  • Organizes the device under pylabrobot.revvity.celigo, with Celigo and CeligoConfig available from pylabrobot.revvity
  • Loads complete per-instrument configuration through CeligoConfig.from_install()
  • Communicates directly with the controller over FTDI USB
  • Controls the Lumenera camera through its SDK
  • Exposes axes, filter wheels, galvo, and laser as dedicated components
  • Uses millimeters and seconds in public APIs, with controller-unit conversion kept internal
  • Supports PyLabRobot plate resources through explicit celigo.set_plate()
  • Provides high-level acquisition, image autofocus, auto-exposure, multichannel imaging, and galvo FOV scans
  • Adds a Revvity manufacturer guide plus Celigo Hello World, Advanced Imaging, and Components/Diagnostics notebooks

Safety and reliability

  • Encoder-verified movement and homing
  • Configured motion limits, currents, and timeouts
  • Typed controller and galvo status results
  • Acquisition-scoped illumination with safe cleanup on success or failure
  • Correct handling of inverted digital and analog outputs
  • Serialized, time-bounded camera and controller communication
  • Explicit laser opt-in with controller interlock checks
  • USB-topology FTDI selection with kernel-driver detach/reattach support

Validation

  • 142 Celigo tests pass
  • Ruff passes
  • mypy passes
  • All Celigo notebooks parse and compile
  • Celigo API autosummary builds with warnings treated as errors

Live hardware verification covers controller setup/status/self-test, XYZ and filter homing, drawer motion, galvo calibration and centering, native and calibrated camera capture, image autofocus, machine auto-exposure, all five configured illumination channels, camera-trigger diagnostics, and a 16-FOV galvo scan.

Hardware-displacement autofocus is not implemented. Laser firing and externally triggered frame acquisition have not been exercised.

@rickwierenga
rickwierenga force-pushed the v1b1 branch 2 times, most recently from 6af085c to 1ae9dc6 Compare August 1, 2026 20:32
@rickwierenga
rickwierenga changed the base branch from v1b1 to main August 24, 2026 23:18
rickwierenga and others added 6 commits August 24, 2026 18:29
Native PyLabRobot driver for the Nexcelom/Cyntellect Celigo image cytometer,
talking directly to the instrument over USB.

- packets: USB-IO board wire protocol (framing, opcodes, transact)
- transport: SerialTransport and FtdiTransport
- controller: board commands (status, galvo, analog/digital IO, autofocus,
  motor query, barcode)
- ezstepper: AllMotion EZStepper command formatting + OEM/WLEN framing
- config: typed loaders for the ConfigFiles XML
- transforms / coordinates: encoder-tick, galvo DAC, and pixel/sample/stage math
- navigation: plate/well navigation + galvo FOV grid
- device: high-level Celigo facade
- demo + 101 tests against a simulated board

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rickwierenga
rickwierenga force-pushed the celigo branch 2 times, most recently from de0d4fe to 2e7e26e Compare August 26, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant