Orange Data Mining × Assay imaging

Orange Assay Widgets

Three widgets that turn assay plate photos into data and fit dose-response curves — a microplate reader, a coffee-ring reader and 3PL/4PL curve fitting (EC50 / LOD). The image core reuses coffee-ring-analyzer, so results match its Streamlit / mobile / CLI versions. All drag-and-drop, no code.

Overview

Three widgets, an end-to-end assay analysis

After installing, an Assay category appears in the Orange toolbox. Every output is an ordinary Orange table, so it plugs into Data Table, scatter plots, PCA, and orange-spectra's PLS-DA.

Microplate Reader

Read a microtitre-plate photo (6–384 wells) into a per-well table: mean intensity or thresholded area, with A1…H12 well labels.

Coffee-Ring Reader

Quantify a spotted (coffee-ring) plate: per-cell area/intensity, divide by the blank, average replicate rows → concentration/ratio table.

Dose-Response Fit

Fit a 3PL/4PL logistic curve to any concentration/signal table, reporting EC50, LOD, R², with the curve overlaid on the points.

Workflow

Typical workflow

Microplate Reader ─wells──┐ ├──► Dose-Response Fit ──► EC50 / LOD / curve Coffee-Ring Reader ─cells─┘ (also: PCA · PLS-DA · Data Table)

Dose-Response Fit is the shared widget: it accepts either reader's output, or any colorimetric / ELISA data you already have in a spreadsheet.

Install

Install

Runs on Windows, macOS (Apple Silicon & Intel), and Linux — pure Python (numpy / scipy / matplotlib / Pillow / Orange3).

A. Desktop App

Options ▸ Add-ons… ▸ Add more…, type orange-assay → tick → OK → restart. On macOS, download the Mac .dmg from orangedatamining.com.

B. pip Orange

pip install orange-assay
python -m Orange.canvas
Traditional-Chinese Windows: if Add-ons crashes (UnicodeDecodeError: 'cp950' codec…), install from a command prompt instead: "…\Programs\Orange\python.exe" -m pip install orange-assay, then restart Orange (or set the PYTHONUTF8=1 environment variable). See the orange-spectra FAQ.

After restarting, an Assay category (3 widgets) appears. Each widget has an ℹ How to use box, and F1 opens its help page.

Widget guide

Widget-by-widget guide

Microplate Reader

Output: Wells (one row per well: value, row, col; well label meta e.g. A1)
  1. Click Choose plate image… and pick the plate photo.
  2. Pick the Format (6/12/24/48/96/384); a regular grid is laid over the image.
  3. Measure: mean (mean intensity, most robust), or thresholded count / intensity (choose Otsu / manual / per-well Otsu).
  4. Border margin trims the plate edge; lower Row fill to avoid vertical neighbour bleed.
  5. Feed Wells to a Data Table, or to Dose-Response Fit once wells are mapped to concentrations.
Wells sit on a regular grid; measuring mean is the most robust, with thresholded area as an option.

Coffee-Ring Reader

Output: Cells (normalized: concentration, ratio, se, col; or per-cell value when raw)
  1. Choose the spotted-assay / coffee-ring plate photo.
  2. Set Rows (replicates) and Columns (column 0 = blank); tick Auto-detect grid to find cells from bright spots.
  3. Measure: count or intensity; Threshold: manual (default 0.43) / Otsu / per-cell Otsu.
  4. Tick Divide by blank to normalize each cell by its row's column 0 and average replicate rows; fill in Concentrations for columns 1…
  5. Feed Cells to Dose-Response Fit for EC50 / LOD.
Reproduces coffee-ring-analyzer: ITU-R 601 grayscale, integral-image per-cell measurement, blank normalization — matching its Streamlit / mobile / CLI results. The default grid and concentrations are that project's thrombin-assay setup.

Dose-Response Fit

Input: any Table with a concentration column and a signal column Outputs: Fit summary, Fitted curve
  1. Pick the Concentration and Signal columns; tick log10 when concentrations span orders of magnitude.
  2. Model: 3PL (y = L/(1+e−k(x−x₀))) or 4PL (with explicit lower/upper asymptotes).
  3. Read EC50 (= inflection x₀), LOD (concentration where the signal exceeds baseline + 3σ), and .
  4. Feed Fit summary to a Data Table; overlay or export the Fitted curve.
The shared widget: it accepts either reader's output, or any colorimetric / ELISA data.
FAQ

FAQ

Which image formats are supported?

PNG / JPG / TIFF / BMP (read with Pillow). Colour images are converted to grayscale with ITU-R 601 luma.

Why do ratios come out as inf or NaN?

The Coffee-Ring blank (column 0) measured 0 (e.g. threshold too high, or no signal in the blank) → division by zero. Lower the manual threshold, or make sure column 0 really has a blank spot.

What units are EC50 / LOD in?

The same units as the concentrations you supply. If log10 is ticked, the widget converts the results back to linear concentration for display.

Can I connect it to the orange-spectra widgets?

Yes — the outputs are ordinary Orange tables, so they feed PLS-DA, PCA, Data Table, etc. The two packages complement each other.