diff --git a/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.ipynb b/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.ipynb
new file mode 100644
index 00000000000..070ad68f00e
--- /dev/null
+++ b/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.ipynb
@@ -0,0 +1,324 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "18708b66",
+ "metadata": {},
+ "source": [
+ "# BMG Labtech CLARIOstar (Plus)\n",
+ "\n",
+ "| Summary | Photo |\n",
+ "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|\n",
+ "| - [OEM Link](https://www.bmglabtech.com/en/clariostar-plus/)
- **Communication Protocol / Hardware**: Serial (FTDI)/ USB-A
- **Communication Level**: Firmware
- **Measurement Modes**: Absorbance, Luminescence, Fluorescence
- **Plate Delivery**: Loading tray
- **Additional Standard Features**: Temperature sontrol, Shaking
- **Additional Upgrades**: Injector system, increased max temperature, plate stacking system, ... |  |\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "80e2e5dc",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Setup Instructions (Physical)\n",
+ "\n",
+ "The CLARIOstar and CLARIOstar Plus require a minimum of two cable connections to be operational:\n",
+ "1. Power cord (standard IEC C13)\n",
+ "2. USB cable (USB-B with security screws at CLARIOstar end; USB-A at control PC end)\n",
+ "\n",
+ "Optional:\n",
+ "If you have a plate stacking unit to use with the CLARIOstar (Plus), an additional RS-232 port is available on the CLARIOstar (Plus).\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "adb29364",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "## Setup Instructions (Programmatic)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "34531f2c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%load_ext autoreload\n",
+ "%autoreload 2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e7a179e9",
+ "metadata": {},
+ "source": [
+ "To control the BMG Labtech CLARIOstar (Plus), generate a `PlateReader` frontend instance that uses a `CLARIOstarBackend` instance as its backend.\n",
+ "\n",
+ "To access the CLARIOstar-specific machine features you can still use the backend directly.\n",
+ "For convenience, it is useful to therefore store the backend instance as a separate `clariostar_backend` variable."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "363b8144",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pylabrobot.plate_reading import PlateReader\n",
+ "\n",
+ "from pylabrobot.plate_reading.clario_star_backend import CLARIOstarBackend\n",
+ "clariostar_backend = CLARIOstarBackend()\n",
+ "\n",
+ "pr = PlateReader(\n",
+ " name=\"CLARIOstar\",\n",
+ " backend=clariostar_backend,\n",
+ " size_x=0.0, # TODO: generate new handling for resources with loading tray \n",
+ " size_y=0.0,\n",
+ " size_z=0.0\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "30720acb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "await pr.setup()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "65555028",
+ "metadata": {},
+ "source": [
+ "```{note}\n",
+ "Expected behaviour: the machine should perform its initialization routine.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7d2e9ed2",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "\n",
+ "## Usage / Machine Features\n",
+ "\n",
+ "### Loading Tray"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c0834a6e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "await pr.open()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "77c3406b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# perform arm movement to move your plate of interest onto the CLARIOstar's loading tray\n",
+ "# this movement can be performed by a human\n",
+ "# or it can be performed by a robotic arm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "092a02fa",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "await pr.close()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9c4d21b7",
+ "metadata": {},
+ "source": [
+ "### Set Temperature\n",
+ "\n",
+ "The CLARIOstar offers a temperature control feature.\n",
+ "Reaching a set temperature is relatively slow compared to standalone temperature controllers.\n",
+ "We therefore recommend setting the temperature early on in your automated Protocol (aP)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "bb2de16b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature exposure in active development"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bf4840ea",
+ "metadata": {},
+ "source": [
+ "### Set Shaking\n",
+ "\n",
+ "The CLARIOstar offers a shaking feature."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "60b71bea",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c4be6218",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "### Measuring Absorbance\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e23acc3d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development including\n",
+ "# reading subsets of wells\n",
+ "# specifying orbital diameter\n",
+ "# specifying number of technical replicate measurements per well\n",
+ "# specifying start position for reading: topleft, topright, bottomleft, bottomright\n",
+ "# ...\n",
+ "\n",
+ "results_absorbance = await pr.read_absorbance()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d9a13de2",
+ "metadata": {},
+ "source": [
+ "`results` will be a width x height array of absorbance values.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e57e55de",
+ "metadata": {},
+ "source": [
+ "\n",
+ "#### Performing a Spectral Scan\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8cae50a6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c7a70d7e",
+ "metadata": {},
+ "source": [
+ "### Measuring Luminescence\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c8656ef6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development\n",
+ "\n",
+ "results_luminescence = await pr.read_luminescence()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8554a66c",
+ "metadata": {},
+ "source": [
+ "### Measuring Fluorescence\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "637f06a7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "362dd696",
+ "metadata": {},
+ "source": [
+ "### Using the Injector Needles\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cd676c58",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# WIP: feature in active development"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "plr",
+ "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.12.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.rst b/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.rst
deleted file mode 100644
index f3e7d37c947..00000000000
--- a/docs/user_guide/02_analytical/plate-reading/bmg-clariostar.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-BMG ClarioSTAR
-==============
-
-PyLabRobot supports the following plate readers:
-
-- :ref:`BMG Clariostar `
-
-Plate readers are controlled by the :class:`~pylabrobot.plate_reading.plate_reader.PlateReader` class. This class takes a backend as an argument. The backend is responsible for communicating with the plate reader and is specific to the hardware being used.
-
-.. code-block:: python
-
- from pylabrobot.plate_reading import PlateReader
- backend = SomePlateReaderBackend()
- pr = PlateReader(backend=backend)
- await pr.setup()
-
-The :meth:`~pylabrobot.plate_reading.plate_reader.PlateReader.setup` method is used to initialize the plate reader. This is where the backend will connect to the plate reader and perform any necessary initialization.
-
-The :class:`~pylabrobot.plate_reading.plate_reader.PlateReader` class has a number of methods for controlling the plate reader. These are:
-
-- :meth:`~pylabrobot.plate_reading.plate_reader.PlateReader.open`: Open the plate reader and make the plate accessible to robotic arms.
-- :meth:`~pylabrobot.plate_reading.plate_reader.PlateReader.close`: Close the plate reader and prepare the machine for reading.
-- :meth:`~pylabrobot.plate_reading.plate_reader.PlateReader.read_luminescence`: Read luminescence from the plate.
-- :meth:`~pylabrobot.plate_reading.plate_reader.PlateReader.read_absorbance`: Read absorbance from the plate.
-
-Read a plate:
-
-.. code-block:: python
-
- await pr.open()
- move_plate_to_reader()
- await pr.close()
- results = await pr.read_absorbance()
-
-`results` will be a width x height array of absorbance values.
-
-.. _clariostar:
-
-BMG ClarioSTAR
---------------
-
-The BMG CLARIOStar plate reader is controlled by the :class:`~pylabrobot.plate_reading.clario_star_backend.CLARIOStarBackend` class.
-
-.. code-block:: python
-
- from pylabrobot.plate_reading.clario_star import CLARIOStarBackend
- c = CLARIOStarBackend()
-
-
diff --git a/docs/user_guide/02_analytical/plate-reading/img/bmg-labtech-clariostar-plus.png b/docs/user_guide/02_analytical/plate-reading/img/bmg-labtech-clariostar-plus.png
new file mode 100644
index 00000000000..b66172bf41f
Binary files /dev/null and b/docs/user_guide/02_analytical/plate-reading/img/bmg-labtech-clariostar-plus.png differ
diff --git a/docs/user_guide/02_analytical/plate-reading/plate-reading.rst b/docs/user_guide/02_analytical/plate-reading/plate-reading.rst
index 59214badbcd..85c02c85f3d 100644
--- a/docs/user_guide/02_analytical/plate-reading/plate-reading.rst
+++ b/docs/user_guide/02_analytical/plate-reading/plate-reading.rst
@@ -3,8 +3,9 @@ Plate Readers
PyLabRobot supports the following plate readers:
-- :ref:`BMG Clariostar `
+- `BMG Labtech CLARIOstar`
+Plate readers are controlled by the :class:`~pylabrobot.plate_reading.plate_reader.PlateReader` class. This class takes a backend as an argument. The backend is responsible for communicating with the plate reader and is specific to the hardware being used.
.. toctree::
diff --git a/docs/user_guide/machines.md b/docs/user_guide/machines.md
index ccab1b191dc..92a1fc83633 100644
--- a/docs/user_guide/machines.md
+++ b/docs/user_guide/machines.md
@@ -144,7 +144,7 @@ tr > td:nth-child(5) { width: 15%; }
| Manufacturer | Machine | Features | PLR-Support | Links |
|--------------|---------|----------|-------------|--------|
-| BMG Labtech | CLARIOstar | absorbancefluorescenceluminescence | Full | [PLR](https://docs.pylabrobot.org/user_guide/02_analytical/plate-reading/bmg-clariostar.html) / [OEM](https://www.bmglabtech.com/en/clariostar-plus/) |
+| BMG Labtech | CLARIOstar (Plus) | absorbancefluorescenceluminescence | Full | [PLR](https://docs.pylabrobot.org/user_guide/02_analytical/plate-reading/bmg-clariostar.html) / [OEM](https://www.bmglabtech.com/en/clariostar-plus/) |
| Agilent (BioTek) | Cytation 1 | absorbancefluorescenceluminescencemicroscopy | Full | [PLR](https://docs.pylabrobot.org/user_guide/02_analytical/plate-reading/cytation5.html) / [OEM](https://www.agilent.com/en/product/cell-analysis/cell-imaging-microscopy/cell-imaging-multimode-readers/biotek-cytation-1-cell-imaging-multimode-reader-1623200) |
| Agilent (BioTek) | Cytation 5 | absorbancefluorescenceluminescencemicroscopy | Full | [PLR](https://docs.pylabrobot.org/user_guide/02_analytical/plate-reading/cytation5.html) / [OEM](https://www.agilent.com/en/product/cell-analysis/cell-imaging-microscopy/cell-imaging-multimode-readers/biotek-cytation-5-cell-imaging-multimode-reader-1623202) |
| Byonoy | Absorbance 96 Automate | absorbance | WIP | [OEM](https://byonoy.com/absorbance-96-automate/) |
diff --git a/pylabrobot/plate_reading/__init__.py b/pylabrobot/plate_reading/__init__.py
index a80f03d029f..ce4966f7fb2 100644
--- a/pylabrobot/plate_reading/__init__.py
+++ b/pylabrobot/plate_reading/__init__.py
@@ -1,5 +1,5 @@
from .biotek_backend import Cytation5Backend, Cytation5ImagingConfig
-from .clario_star_backend import CLARIOStarBackend
+from .clario_star_backend import CLARIOstarBackend
from .image_reader import ImageReader
from .imager import Imager
from .plate_reader import PlateReader
diff --git a/pylabrobot/plate_reading/clario_star_backend.py b/pylabrobot/plate_reading/clario_star_backend.py
index 85e0727faf6..9f8c0c1db7b 100644
--- a/pylabrobot/plate_reading/clario_star_backend.py
+++ b/pylabrobot/plate_reading/clario_star_backend.py
@@ -20,7 +20,7 @@
logger = logging.getLogger("pylabrobot")
-class CLARIOStarBackend(PlateReaderBackend):
+class CLARIOstarBackend(PlateReaderBackend):
"""A plate reader backend for the Clario star. Note that this is not a complete implementation
and many commands and parameters are not implemented yet."""
@@ -349,3 +349,10 @@ async def read_fluorescence(
class CLARIOStar:
def __init__(self, *args, **kwargs):
raise RuntimeError("`CLARIOStar` is deprecated. Please use `CLARIOStarBackend` instead.")
+
+
+class CLARIOStarBackend:
+ def __init__(self, *args, **kwargs):
+ raise RuntimeError(
+ "`CLARIOStarBackend` (capital 'S') is deprecated. Please use `CLARIOstarBackend` instead."
+ )