Skip to content

Commit

Permalink
add fluorescence to cytation5
Browse files Browse the repository at this point in the history
  • Loading branch information
rickwierenga committed Sep 14, 2024
1 parent 5826c73 commit dc8a44b
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 5 deletions.
33 changes: 32 additions & 1 deletion docs/cytation5.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pylab as plt\n",
"import matplotlib.pyplot as plt\n",
"from pylabrobot.plate_reading import PlateReader, Cytation5Backend"
]
},
Expand Down Expand Up @@ -164,6 +164,37 @@
"plt.imshow(data)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x120d3ed00>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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8uQ45ZRTYsuWLVlPy5VVq1ZFfX19rF69OlasWBHvv/9+nHzyydHW1pb1tNxqamqK2267LSZNmpT1lFx66623Ytq0afGpT30qHnzwwXj++efjZz/7Wey5555ZT8uVa665JhYuXBg333xz/OUvf4lrrrkmrr322rjpppuyntbvtbW1xeTJk+OWW2752F+/9tpr48Ybb4xbb701nnrqqRgyZEiccsop8W4//4DNXaKYY1OnTi3W19d3fd3R0VGsra0tNjY2Zrgq/7Zs2VKMiOKqVauynpJLW7duLR5wwAHFFStWFI877rji3Llzs56UO5dccknx2GOPzXpG7p122mnF8847r9ttX/3qV4szZ87MaFE+RURx+fLlXV93dnYWR48eXfzpT3/addvbb79dLBQKxbvuuiuDhf1Lbp+xeO+992LNmjUxffr0rtsGDBgQ06dPjyeffDLDZfnX0tISERF77bVXxkvyqb6+Pk477bRu/29Snvvvvz+mTJkSZ511VowcOTIOO+ywuP3227OelTvHHHNMrFy5Ml544YWIiPjTn/4UTzzxRMyYMSPjZfn28ssvx+bNm7v9Ga+pqYmjjjrK95/I4EPIUnnzzTejo6MjRo0a1e32UaNGxV//+teMVuVfZ2dnzJs3L6ZNmxYTJ07Mek7u3H333bF27dpoamrKekquvfTSS7Fw4cKYP39+/OAHP4impqa46KKLYuDAgTFr1qys5+XGpZdeGq2trXHQQQdFZWVldHR0xFVXXRUzZ87Melqubd68OSLiY7//fPhrn2S5DQv6Rn19faxfvz6eeOKJrKfkTnNzc8ydOzdWrFgRgwYNynpOrnV2dsaUKVPi6quvjoiIww47LNavXx+33nqrsCjDPffcE3feeWcsXbo0JkyYEOvWrYt58+ZFbW2tx5E+k9uXQoYPHx6VlZXx+uuvd7v99ddfj9GjR2e0Kt/mzJkTDzzwQDz66KN98tH2u7s1a9bEli1b4vDDD4+qqqqoqqqKVatWxY033hhVVVXR0dGR9cTcGDNmTBxyyCHdbjv44INj06ZNGS3Kp+9///tx6aWXxje+8Y049NBD45vf/GZcfPHF0djYmPW0XPvwe4zvPx8vt2ExcODAOOKII2LlypVdt3V2dsbKlSvj6KOPznBZ/hSLxZgzZ04sX748fv/738e4ceOynpRLJ554Yjz33HOxbt26rmPKlCkxc+bMWLduXVRWVmY9MTemTZv2kR95fuGFF2KfffbJaFE+vfPOOzFgQPe/5isrK6OzszOjRbuHcePGxejRo7t9/2ltbY2nnnrK95/I+Ush8+fPj1mzZsWUKVNi6tSpcf3110dbW1vMnj0762m5Ul9fH0uXLo377rsvqquru14jrKmpicGDB2e8Lj+qq6s/8r6UIUOGxLBhw7xfpUwXX3xxHHPMMXH11VfH17/+9Xj66adj0aJFsWjRoqyn5coZZ5wRV111VYwdOzYmTJgQf/zjH+O6666L8847L+tp/d62bdti48aNXV+//PLLsW7duthrr71i7NixMW/evPjJT34SBxxwQIwbNy4uu+yyqK2tjTPPPDO70f1F1j+WsrNuuumm4tixY4sDBw4sTp06tbh69eqsJ+VORHzssXjx4qyn5Z4fN+293/72t8WJEycWC4VC8aCDDiouWrQo60m509raWpw7d25x7NixxUGDBhX322+/4g9/+MNie3t71tP6vUcfffRj/16cNWtWsVj8/z9yetlllxVHjRpVLBQKxRNPPLG4YcOGbEf3Ez42HQBIJrfvsQAA+h9hAQAkIywAgGSEBQCQjLAAAJIRFgBAMsICAEhGWAAAyQgLACAZYQEAJCMsAIBkhAUAkMz/A2c0yL/w6ZmSAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data = await pr.read_luminescence(focal_height=4.5)\n",
"plt.imshow(data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand Down
34 changes: 31 additions & 3 deletions pylabrobot/plate_reading/biotek_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@

class Cytation5Backend(PlateReaderBackend):
""" Backend for biotek cytation 5 image reader """
def __init__(self, timeout: float = 60) -> None:
def __init__(self, timeout: float = 20) -> None:
super().__init__()
self.timeout = timeout
self.dev = Device(lazy_open=True)

async def setup(self) -> None:
logger.info("[cytation5] setting up")
self.dev.open()
self.dev.baudrate = 9600
# self.dev.baudrate = 9600 # worked in the past
self.dev.baudrate = 38400
self.dev.ftdi_fn.ftdi_set_line_property(8, 2, 0) # 8 bits, 2 stop bits, no parity
SIO_RTS_CTS_HS = 0x1 << 8
self.dev.ftdi_fn.ftdi_setflowctrl(SIO_RTS_CTS_HS)
Expand Down Expand Up @@ -52,6 +53,7 @@ async def _read_until(self, char: bytes, timeout: Optional[float] = None) -> byt
res += x

if time.time() - t0 > timeout:
logger.debug("[cytation5] received incomplete %s", res)
raise TimeoutError("Timeout while waiting for response")

if x == b"":
Expand Down Expand Up @@ -146,7 +148,33 @@ async def read_absorbance(self, wavelength: int) -> List[List[float]]:
return self._parse_body(body)

async def read_luminescence(self, focal_height: float) -> List[List[float]]:
raise NotImplementedError("Not implemented yet")
if not 4.5 <= focal_height <= 13.88:
raise ValueError("Focal height must be between 4.5 and 13.88")

resp = await self.send_command("t", wait_for_char=b"\x06")
assert resp == b"\x06"

cmd = f"3{14220 + int(1000*focal_height)}\x03".encode()
await self.send_command(cmd, purge=False)

resp = await self.send_command("y", wait_for_char=b"\x06")
assert resp == b"\x06"
await self.send_command(b"08120112207434014351135308559127881772\x03", purge=False)

resp = await self.send_command("D", wait_for_char=b"\x06")
assert resp == b"\x06"
cmd = (b"008401010108120001200100001100100000123000500200200"
b"-001000-00300000000000000000001351092")
await self.send_command(cmd, purge=False)

resp1 = await self.send_command("O", wait_for_char=b"\x06")
assert resp1 == b"\x06"
resp2 = await self._read_until(b"\x03")
assert resp2 == b"0000\x03"

body = await self._read_until(b"\x03", timeout=60*3)
assert body is not None
return self._parse_body(body)

async def read_fluorescence(
self,
Expand Down
2 changes: 1 addition & 1 deletion pylabrobot/plate_reading/biotek_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ async def asyncSetUp(self):
async def test_setup(self):
await self.backend.setup()
assert self.backend.dev.open.called
assert self.backend.dev.baudrate == 9600
assert self.backend.dev.baudrate == 38400
self.backend.dev.ftdi_fn.ftdi_set_line_property.assert_called_with(8, 2, 0)
self.backend.dev.ftdi_fn.ftdi_setflowctrl.assert_called_with(0x100)
self.backend.dev.ftdi_fn.ftdi_setrts.assert_called_with(1)
Expand Down

0 comments on commit dc8a44b

Please sign in to comment.