ImageXpress Pico#

The Molecular Devices ImageXpress Pico is an automated cell imaging system. PyLabRobot communicates with it over SiLA 2 / gRPC.

Requirements#

  • The Pico must be running the SiLA 2 server (default port 8091).

  • pip install grpcio numpy Pillow

Setup#

from pylabrobot.plate_reading import Imager, ImagingMode, Objective
from pylabrobot.microscopes.molecular_devices.pico.backend import ExperimentalPicoBackend

Create the backend, specifying which objectives and filter cubes are physically installed on your instrument. The keys are 0-indexed turret / filter-wheel positions.

backend = ExperimentalPicoBackend(
  host="192.168.1.100",
  objectives={0: Objective.O_4X_PL_FL},
  filter_cubes={0: ImagingMode.DAPI, 1: ImagingMode.BRIGHTFIELD},
)
pico = Imager(name="pico", size_x=0, size_y=0, size_z=0, backend=backend)
await pico.setup()

Assign a plate#

The plate geometry is used to derive the labware parameters sent to the Pico. Any PLR Plate definition works.

from pylabrobot.resources import CellVis_96_wellplate_350uL_Fb

plate = CellVis_96_wellplate_350uL_Fb(name="plate")
pico.assign_child_resource(plate)

Loading a plate#

Open the plate drawer, place the plate, and close it.

await pico.backend.open_door()
# Place the plate in the drawer, then close it.
await pico.backend.close_door()

Capture an image#

Supported objectives:

  • O_2_5X_N_PLAN — N PLAN 2.5x/0.07

  • O_4X_PL_FL — PL FLUOTAR 4x/0.13

  • O_10X_PL_FL — PL FLUOTAR 10x/0.30

  • O_20X_PL_FL — PL FLUOTAR 20x/0.40

  • O_40X_PL_FL — PL FLUOTAR 40x/0.60

Supported imaging modes:

  • BRIGHTFIELD

  • DAPI

  • GFP

  • RFP

  • TEXAS_RED

  • CY5

res = await pico.capture(
  well=(0, 0),  # A1
  mode=ImagingMode.BRIGHTFIELD,
  objective=Objective.O_4X_PL_FL,
  exposure_time=10.0,  # ms
  focal_height=1.0,    # mm
  gain=0,
)
import matplotlib.pyplot as plt

plt.imshow(res.images[0], cmap="gray")
plt.title(f"Exposure: {res.exposure_time:.1f} ms")
plt.axis("off")
plt.show()

You can also pass a Well object directly:

res = await pico.capture(
  well=plate.get_well("B3"),
  mode=ImagingMode.DAPI,
  objective=Objective.O_4X_PL_FL,
  exposure_time=15.0,
  focal_height=1.0,
  gain=0,
)

Cleanup#

await pico.stop()