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.07O_4X_PL_FL— PL FLUOTAR 4x/0.13O_10X_PL_FL— PL FLUOTAR 10x/0.30O_20X_PL_FL— PL FLUOTAR 20x/0.40O_40X_PL_FL— PL FLUOTAR 40x/0.60
Supported imaging modes:
BRIGHTFIELDDAPIGFPRFPTEXAS_REDCY5
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()