>jane*

Amplify

Droplet gating → concentration

Turn a ddPCR amplitude export into a concentration you can defend. Give it the `_Amplitude.csv` files your droplet reader wrote — one per well, raw fluorescence for every droplet it measured — and it decides which droplets held template and which held nothing, in four steps you can see and change: which wells are usable at all, which droplets are junk, where empty ends, and what concentration that empty fraction implies through the Poisson zero term. Every cutoff it used is reported with the number it produced. Nothing is uploaded: the gating runs in the browser.

The real qPCR corpus: ΔΔCt (separate + same-tube), a standard curve, a significance table, Vandesompele 2002 geNorm in wide and long form, real amplification curves. Opens on the human GAPDH and MYC transcripts those experiments actually measure, plus a 72 bp miRNA precursor that walks Design right up to its length limit

01

What it does

  1. 01Reads QuantaSoft `<name>_<well>_Amplitude.csv` exports directly — one file per well, tens of thousands of droplets each — and gates them in the browser rather than trusting the instrument software’s own call
  2. 02A four-step plate pipeline in the only order it means anything in: reject unusable wells, pool an outlier cutoff across the wells that passed, fit each well’s empty population, then invert the empty fraction through Poisson
  3. 03A usability verdict per well that names WHICH check rejected it — clusters not separable, too few droplets, empty fraction below the floor, or above the ceiling — with both cluster centres and the gap between them, so the verdict can be checked rather than taken
  4. 04One outlier cutoff per channel computed from the accepted wells pooled together, reported rather than assumed, because rejecting a well moves it
  5. 05A two-component normal mixture fitted per well and per channel by expectation-maximisation, with the empty cutoff placed a settable number of standard deviations above the lower component’s mean
  6. 06A full droplet accounting per well — unclassified, failed, outlier, empty — that sums to the number of droplets read, which is what makes it an accounting rather than a summary
  7. 07Every parameter of the run is a control: both channel names, droplet volume, random seed, the fewest droplets a well may have, the empty-fraction band, the brightest slice and IQR multiplier behind the outlier cutoff, and the standard deviations that decide the concentration
  8. 08A rejected well keeps EMPTY cells for its cutoff, empty fraction and concentration — never zeros, because a well that was never classified has not been measured to be zero
  9. 09The random seed is re-applied before every cluster fit and every mixture fit, so a re-run reproduces a previous answer rather than resembling it
02

What it runs on

A port of the R package ddpcr 1.16.0 (Dean Attali, MIT), validated against ddpcr running in R over the same wells. Three upstream behaviours are reproduced deliberately rather than corrected, because each one is in the number a user reads: the cluster centres are truncated to integers before the failure verdict compares them, the reader swaps the two amplitude columns so the empty cutoffs are computed on the axis upstream computes them on, and the final concentration truncates toward zero after the empty fraction has already been rounded to three significant figures. The panel runs on @ports/discover, @ports/eds, @ports/melt, @ports/qpcr, @ports/rdml, @ports/workflow.

Everything runs client-side. Files are parsed in the browser and projects are saved on this machine, so an unpublished sequence is never uploaded.

03

Questions

Why not just use the count the instrument reports?
Because the count is the output of a threshold somebody chose, and it arrives without it. Here the threshold is a parameter of the result and is reported beside it, so two plates gated differently can be told apart instead of being compared as though they agree.
Why is the well identifier taken from the file name?
Because that is where the reader puts it — the amplitude file’s body has the two amplitude columns and a cluster column and no well id. A body pasted on its own is refused rather than assigned to a guessed well.
What happens to droplets between the two populations?
They are exactly what the cutoff decides, and that is the point of exposing it. Moving the standard-deviation control and watching the concentration move tells you how much of the answer rests on the choice rather than on the data.
Can it classify a two-target reaction into four populations?
No — that is a different question with a different shape of answer, and it has its own tab. This one asks whether a droplet is empty, per channel, and ends in a concentration.
Does a plate of one well work?
Yes, but the outlier cutoff is then computed from that one well, which is the thing pooling exists to avoid. The cutoff is printed either way so you can see what it was computed from.

Also searched as

ddPCR droplet gating · droplet amplitude analysis · QuantaSoft amplitude CSV reader · absolute quantification from droplets · copies per microlitre from ddPCR · Poisson correction digital PCR · empty droplet cutoff · ddpcr R package in the browser · QX200 amplitude export · rain in droplet digital PCR · droplet failure detection · ddPCR well rejection