Compensation
Compute spillover from single-stain controls, apply it to your samples, and check the matrix against the controls before you trust a single gate.
The Compensate view


The view has three parts: Compute from controls on the left; the workspace's Matrices and the selected one's editor; and Diagnostics for the selected matrix. Each sample uses one matrix at a time: the one from its file ($SPILLOVER, SPILL, $SPILL or $COMP), one of the workspace's, or none. The inspector shows a sample's matrix, and the sample list's Compensation menu changes it for a selection.
Computing spillover from controls
- Add the single-stain controls (cells or beads) and an unstained control to the workspace, and set their roles.
- In Compute from controls, check each control's Stained channel. CytoWeave guesses it from the file name; Set stained channel corrects it.
- Choose the Events used: a scatter gate excludes debris.
- Choose the Negative reference: the dim events of each control, or the unstained sample. Use a negative of the same kind as the positives (beads with beads, cells with cells).
- Choose the Method: Median difference (FACSDiva, FlowJo), or Robust regression (AutoSpill-style), the slope of a robust fit of each detector on the stained channel, as AutoSpill computes it.
- Click Compute spillover. The new matrix appears under Matrices, with a warning for any control that needs attention: fewer than 200 positive events, positives that are dim or not brighter than the negatives, or many events off scale.
- Click Apply to… and choose all samples, the current sample, the selected samples or a group.
Against the true spillover of the PBMC example, computed matrices are within 0.02 of the truth; on 15 real single-stain controls from a BD LSRFortessa, every entry is within 0.015 of FACSDiva's.
Checking a matrix against the controls
A spillover matrix can look plausible and still be wrong, and a wrong value bends every population that expresses that marker. Check against the controls is the definitive test: it compensates each single-stain control with the selected matrix and measures how far its positive events still sit above (or below) its negatives in every other detector.
- A residual means the spillover value is off by about that much. The table lists each pair with its residual and the suggested value.
- For a matrix you made, Apply corrects the value in place.
- A matrix that came from a file does not change. Fix in a copy makes a corrected copy and moves every sample that used the file's matrix onto it, in one undoable step.
- When a control's positives are brighter in several detectors at once, the check marks the pairs autofluorescence? instead of offering a correction. That is the signature of positive cells more autofluorescent than the negatives (dead cells in a viability control, beads against cells), not of a wrong value: compute that control against a negative of the same kind.
When every control is clean, the check says so: no residual above 0.5% in any other detector.
Try it. The PBMC example's file matrix under-compensates APC into Alexa Fluor 700 (CD8 into CD4). The check finds that pair first and suggests about 15.8%; the true value is 15.7%.
Hint from the current sample is a weaker check for when there are no controls: it compares bright and dim events of each channel in the current sample. Biology differs between those events too, so treat its suggestions as hints.
Spreading and pair plots
- Spillover spreading matrix (Nguyen et al. 2013), after computing from controls: how much each fluorochrome widens the negative population in every other detector, the price paid for compensation. Large values in a column mean that detector will have wide negatives when those fluorochromes are bright; pair dim markers with detectors that receive little spreading. The instrument's noise fitted to the controls' spread is kept with the computed matrix, for virtual FMO controls.
- Pairs: every pair of channels of the selected population, Uncompensated or Compensated. Populations should sit square to the axes after compensation; a diagonal lean means a spillover value is off.
- The condition number of a matrix shows how much compensation can amplify noise.
- Optimize the panel…, for a matrix computed from controls: which of their dyes each marker should carry, from the spillover and the spread fitted to the controls, the unstained control's background, each marker's expression and the markers found on the same cells. It works as for spectral panels, with each dye read in its own detector.
Editing a matrix
New matrix starts from the identity; Duplicate and Edit a copy start from an existing one. Values are percent spillover, row fluorochrome into column detector. Type a value, or focus a cell and use the mouse wheel (⇧ for 1% steps); plots follow live, and every edit can be undone. Matrices also come from FlowJo workspaces and Gating-ML files, and travel with exported workspaces and Gating-ML.