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.
Typical workflow
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
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
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-by-widget guide
Microplate Reader
- Click Choose plate image… and pick the plate photo.
- Pick the Format (6/12/24/48/96/384); a regular grid is laid over the image.
- Measure: mean (mean intensity, most robust), or thresholded count / intensity (choose Otsu / manual / per-well Otsu).
- Border margin trims the plate edge; lower Row fill to avoid vertical neighbour bleed.
- Feed Wells to a Data Table, or to Dose-Response Fit once wells are mapped to concentrations.
Coffee-Ring Reader
- Choose the spotted-assay / coffee-ring plate photo.
- Set Rows (replicates) and Columns (column 0 = blank); tick Auto-detect grid to find cells from bright spots.
- Measure: count or intensity; Threshold: manual (default 0.43) / Otsu / per-cell Otsu.
- Tick Divide by blank to normalize each cell by its row's column 0 and average replicate rows; fill in Concentrations for columns 1…
- Feed Cells to Dose-Response Fit for EC50 / LOD.
Dose-Response Fit
- Pick the Concentration and Signal columns; tick log10 when concentrations span orders of magnitude.
- Model: 3PL (y = L/(1+e−k(x−x₀))) or 4PL (with explicit lower/upper asymptotes).
- Read EC50 (= inflection x₀), LOD (concentration where the signal exceeds baseline + 3σ), and R².
- Feed Fit summary to a Data Table; overlay or export the Fitted curve.
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.