Cell hashing pools several samples into one microfluidic run by tagging every cell in sample i with an antibody-conjugated hashtag oligo (HTOi) before mixing. After sequencing, each droplet's cDNA library carries a small UMI count for every HTO channel — high in the cell's own channel, low "ambient" bleed-through in the others.
Droplet occupancy: P(k cells) = e^(-λ) λ^k / k! (Poisson, λ = cells loaded / droplets)
HTO(own sample): count ~ Poisson(μ_signal) μ_signal ≈ 120
HTO(other sample): count ~ Poisson(μ_ambient·noise) μ_ambient ≈ 4
Threshold: τ_j = mean(background_j) + k·σ(background_j) (per-channel, k tunable)
Call: #{HTO_j > τ_j} = 0 → Negative | = 1 → Singlet | ≥ 2 → Doublet
- Cells loaded — sets the Poisson mean λ = N/10,000 droplets; more cells per droplet means more real co-encapsulation doublets, which the classifier must still catch from HTO counts alone.
- Ambient HTO noise — scales background bleed-through into the "wrong" channels; too much noise pushes negatives and singlets above threshold and creates false doublet/positive calls.
- Threshold k·σ — the same statistic Seurat's
HTODemux-style classifiers use: a channel counts as "positive" once its UMIs clear k standard deviations above the fitted background distribution. Raise k to cut false positives at the cost of missing true low-signal singlets.
- The main panel scatters every cell at (log₁₀ HTO-A, log₁₀ HTO-B) — drag to pan, scroll/pinch to zoom, exactly like panning around the 3D version's log-count cube but in 2D. The side panel shows the full UMI-count histogram for one channel at a time (pick A/B/C/D) with its fitted threshold line, so you can see directly why raising k·σ moves the cut past more of the ambient bump.
- Fix vs. the 3D source: the original engine never generated a data point for a truly empty droplet (it explicitly skips
k===0), so "Negative" was a classifier outcome that could never actually occur — the stat box always read 0 regardless of sliders, contradicting the legend and theory text. This 2D version samples a realistic small fraction of ambient-only droplets (droplets that clear a naive UMI cutoff by chance but hold no real cell) so "Called negative" is a real, slider-reactive category, matching the classifier definition above.
Real-world relevance: cell hashing (Stoeckius et al. 2018) and MULTI-seq let a single 10x Chromium lane process several patient samples at once, cutting per-sample library cost while giving an in-silico way to flag and discard doublets that would otherwise corrupt downstream clustering.