{ "cells": [ { "cell_type": "markdown", "id": "63d8a7a6-1107-4334-8b73-598aa1ca97c4", "metadata": {}, "source": [ "# Byonoy Luminescence 96 Automate\n", "\n", "- [OEM Link](https://byonoy.com/luminescence-automate/)\n", "- **Communication Protocol / Hardware:** HID / USB-A/C\n", "- **Communication Level:** Firmware\n", "- VID:PID `16d0:119b`\n", "- Takes a single SLAS-format 96-wellplate on the base unit, enables movement of the reader unit over it, and reads all 96 wells simultaneously." ] }, { "cell_type": "markdown", "id": "840adda3-0ea1-4e7c-b0cb-34dd2244de69", "metadata": {}, "source": [ "---\n", "## Setup Instructions (Physical)\n", "\n", "The Byonoy Luminescence 96 Automate (L96A) is a luminescence plate reader consisting of...\n", "1. a `base_unit` which holds the plate,\n", "2. a `reader_unit` containing the light sensors that sits on top of the base unit.\n", "\n", "### Communication\n", "It requires only one cable connection to be operational:\n", "1. USB cable (USB-C at `reader_unit` end; USB-A at control PC end)" ] }, { "cell_type": "markdown", "id": "e4aa8066-9eb5-4f8a-8d69-372712bdb3b5", "metadata": {}, "source": [ "---\n", "## Setup Instructions (Programmatic)" ] }, { "cell_type": "code", "execution_count": 1, "id": "4907224e", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "38a9cf2d-840c-49ce-a886-da29c67fb124", "metadata": {}, "outputs": [], "source": [ "from pylabrobot.plate_reading.byonoy import byonoy_l96a" ] }, { "cell_type": "code", "execution_count": 3, "id": "ad91bfca", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ByonoyLuminescence96Automate(name='Luminescence96 Automate_reader', location=Coordinate(000.000, 000.000, 006.300), size_x=138, size_y=97.5, size_z=41.7, category=plate_reader)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_unit, reader_unit = byonoy_l96a(\"Luminescence96 Automate\")\n", "reader_unit" ] }, { "cell_type": "code", "execution_count": 4, "id": "0f86d997", "metadata": {}, "outputs": [], "source": [ "await reader_unit.setup()" ] }, { "cell_type": "markdown", "id": "fc15c1b4-be77-4180-a5ce-d8a31480d0d4", "metadata": {}, "source": [ "### Measure Luminescence" ] }, { "cell_type": "markdown", "id": "9c1d898e", "metadata": {}, "source": [ "Before you can do a plate reading measurement in PLR, you need to assign a plate to the reader." ] }, { "cell_type": "code", "execution_count": 5, "id": "34f54968", "metadata": {}, "outputs": [], "source": [ "from pylabrobot.resources.corning.plates import Cor_96_wellplate_360ul_Fb\n", "demo_plate = Cor_96_wellplate_360ul_Fb(name=\"plate\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "8f6a50bd", "metadata": {}, "outputs": [], "source": [ "reader_unit.assign_child_resource(demo_plate)" ] }, { "cell_type": "code", "execution_count": 7, "id": "e5a1d2e2-7b2c-4077-bde6-338f257b1993", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time: 1770236622.314785\n", "Temperature: None\n", "Data\n", "[[200552272.0, 201907664.0, 218108208.0, 234161952.0, 251950976.0, 8104904.0, 1781678.0, 1690456.0, 2708988.0, 2377269.0, 5855379.0, 289570432.0], [183959648.0, 183223568.0, 186845840.0, 187736528.0, 3184948.0, 1934996.0, 1431882.0, 1225921.0, 1186311.0, 1238371.0, 1392693.0, 3190326.0], [209724544.0, 200640128.0, 4695649.0, 2133116.0, 2067423.0, 1974764.0, 1769515.0, 1576723.0, 1396270.0, 1392762.0, 1163494.0, 1340111.0], [8631671.0, 2948252.0, 1878185.0, 1944314.0, 1928056.0, 1818789.0, 1538142.0, 1391728.0, 1203908.0, 1180876.0, 1094184.0, 1385255.0], [2561222.0, 2007909.0, 2202352.0, 2187162.0, 2016595.0, 1628429.0, 1532333.0, 1342909.0, 1310737.0, 1187646.0, 1123093.0, 1284595.0], [2612154.0, 2109698.0, 2374385.0, 2376566.0, 2073923.0, 1862185.0, 1761917.0, 1637089.0, 1429714.0, 1279758.0, 937221.0, 1471533.0], [3401529.0, 2545716.0, 2582033.0, 2696296.0, 2458846.0, 2448346.0, 2106862.0, 1956427.0, 1705456.0, 1578239.0, 1126263.0, 1378166.0], [6511548.0, 5467399.0, 6249315.0, 6408278.0, 5996644.0, 5163665.0, 5879837.0, 5222682.0, 4798715.0, 4238464.0, 3052718.0, 1889772.0]]\n" ] } ], "source": [ "data = await reader_unit.read_luminescence(\n", " focal_height=1,\n", " use_new_return_type=True,\n", ")\n", "\n", "print(f\"Time: {data[0]['time']}\")\n", "print(f\"Temperature: {data[0]['temperature']}\")\n", "print(\"Data\")\n", "print(data[0]['data'])" ] }, { "cell_type": "markdown", "id": "1a33230d-8243-4d21-88e1-4a4eb6cba7c8", "metadata": {}, "source": [ "## Disconnect from Reader" ] }, { "cell_type": "code", "execution_count": 8, "id": "21a72488", "metadata": {}, "outputs": [], "source": [ "await reader_unit.stop()" ] }, { "cell_type": "markdown", "id": "ad4bdba5", "metadata": {}, "source": [ "## Resource model" ] }, { "cell_type": "markdown", "id": "a2f610f3", "metadata": {}, "source": [ "In the example above, we instantiated the Byonoy Luminescence 96 Automate reader using the `byonoy_l96a` function, which automatically creates the necessary resources for the reader." ] }, { "cell_type": "code", "execution_count": 9, "id": "5e58d4ef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_unit.reader_unit_holder.resource is reader_unit" ] } ], "metadata": { "kernelspec": { "display_name": "env", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.25" } }, "nbformat": 4, "nbformat_minor": 5 }