Reading a CFSE Proliferation Assay: Division Index, Proliferation Index, and % Divided
Two colleagues analyze the same CFSE plate. One reports a Division Index of 0.9 and calls the response weak; the other counts the proliferating peaks, reports a Proliferation Index of 1.9, and calls it robust. Both numbers are correct. They measure different things, and a reader who doesn’t know which is which will draw the wrong conclusion from your figure.
CFSE proliferation metrics are arithmetic, not interpretation—but the arithmetic hinges on one move that’s easy to skip: converting observed events back to the original precursor cells they came from. This works a single sample end to end, computing Division Index, Proliferation Index, and percent divided from the generation peaks, so you can see exactly what each number counts.
The method: why you can’t just count events
CFSE (and CellTrace dyes) halve in fluorescence at every division, so each generation appears as a peak one halving dimmer than the last. The problem: one precursor cell that divided three times produces eight daughters in generation 3. If you count raw events, heavily-divided cells dominate the histogram and overstate proliferation.
The fix is to normalize each generation back to precursors. A peak in generation \(i\) holds \(N_i\) events that descended from \(N_i / 2^i\) original cells. Every metric below is built on that precursor count, not the raw event count.
Step 1 — Get the per-generation event counts
After gating live singlets and fitting the generation peaks, read off the events in each peak. For this sample:
| Generation (i) | Events (N⃗i) | Precursors (N⃗i / 2i) |
|---|---|---|
| 0 (undivided) | 10,000 | 10,000 |
| 1 | 8,000 | 4,000 |
| 2 | 12,000 | 3,000 |
| 3 | 16,000 | 2,000 |
| 4 | 8,000 | 500 |
Notice generation 3 has the most events but only 2,000 precursors—exactly the distortion the normalization corrects.
Step 2 — Sum the precursors and the divisions
Total precursors (every original cell, divided or not):
\(10000 + 4000 + 3000 + 2000 + 500 = 19{,}500\)
Precursors that divided at least once (exclude generation 0):
\(4000 + 3000 + 2000 + 500 = 9{,}500\)
Total number of divisions (weight each precursor count by its generation number):
\((0 \times 10000) + (1 \times 4000) + (2 \times 3000) + (3 \times 2000) + (4 \times 500)\)
\(= 0 + 4000 + 6000 + 6000 + 2000 = 18{,}000\)
Step 3 — Compute the three metrics
Division Index = 18,000 ÷ 19,500 = 0.92. Average divisions across the whole starting population, including cells that never divided.
Proliferation Index = 18,000 ÷ 9,500 = 1.89. Average divisions among only the cells that divided at least once.
% Divided = 9,500 ÷ 19,500 × 100 = 48.7%. Fraction of the original population that entered division.
Step 4 — Sanity-check the result
The Proliferation Index (1.89) must be greater than or equal to the Division Index (0.92), always—they share a numerator, and PI divides by the smaller denominator. If your software ever reports DI above PI, something is mislabeled. Here, fewer than half the cells divided, but those that did averaged nearly two divisions. That gap is the whole story: a moderate fraction responded, and they responded strongly.
This is the trap Mario Roederer flagged in his often-cited caution on these metrics—reporting one index alone hides whether a low number means few responders or weak responders. Report Division Index and percent divided together, or the reader can’t tell which.
Where this breaks
The math assumes every peak is correctly assigned to a generation. If the undivided peak isn’t anchored to an unstimulated control, the model can shift all assignments by one generation and every metric moves. Dye dilution also stops being readable past 7–8 divisions, when peaks merge into the autofluorescence floor—CellTrace Violet on the Pacific Blue channel is especially prone to this. And the metrics say nothing about why cells divided; pair them with a clean gating strategy so you’re measuring the population you think you are, as in building a sequential gating strategy and doublet discrimination.
Cytomaton fits CFSE and CellTrace generations with a Gaussian mixture model and reports Division Index, Proliferation Index, and percent divided as ISAC-standard metrics—with a goodness-of-fit badge so you can see when peak assignment is shaky. The definitive discussion of interpreting these numbers is Roederer’s “Interpretation of cellular proliferation data” in Cytometry Part A (2011).
Try Cytomaton
AI-assisted flow cytometry analysis that learns your gating style. Free during beta.
Join the beta