Plaque counts → PFU/mL, in a single self-contained HTML file.
Live: https://mbaffour.github.io/pfu-calculator/
- Quick table (the default): one row per lysate — name, plaques, dilution (any factor, any step), volume plated, PFU/mL.
Enterin a plaques box adds the next row and focuses it, so a titration types straight down the column. New rows inherit the previous row's dilution and volume. - Replicates & stats is one chip away, for several plates per lysate. A lysate with multiple replicates shows its mean in the quick table with its inputs locked, so the two views can never disagree about the same data.
- Per-sample mean ± SD and CV% across countable replicates.
- Counts outside the countable window (30–300 per plate, 3–30 per spot) are flagged; mark a plate TNTC or Excl to drop it from the stats.
- All-zero samples report a detection limit (
< 1 plaque at the least-diluted plate) instead of a bogus mean. - Export a real .xlsx workbook (Raw counts + Summary sheets, numbers stay numeric) or CSV — no libraries, the OOXML writer is built in.
- Zero dependencies, no network, autosaves to your browser's local storage. Works from
file://.
PFU/mL = plaques × dilution factorstep ÷ volume plated (mL).
Spot assays plate far less than a full plate — set the volume to the drop you actually spotted (often 5–10 µL), not 100.
The phage twin of the CFU Calculator — same code and the same export schema, plaques instead of colonies.
For host conditions, EOP against a switchable reference, Welch's t on log₁₀ titers and publication-ready charts, use the Titering & EOP module in Dilution Designer. This tool is the quick bench arithmetic; that one is the full experiment.