Bead-based normalization corrects CyTOF instrument sensitivity drift using EQ four-element beads as a physical internal standard, while cross-batch normalization (CytoNorm) harmonizes staining/acquisition batches using a shared reference sample. The key expert distinction this skill encodes: these are two different layers - beads fix within/between-run drift, CytoNorm fixes batch effects - and they are not interchangeable. It also covers why the anchor/reference sample is the design element everything depends on, why normalization is per-cluster with many quantiles, and the over-correction risk that argues for modeling batch in the statistical design rather than cleaning it out of the data.
# R/Bioconductor
BiocManager::install(c('CATALYST', 'flowCore'))
# CytoNorm (cross-batch)
# remotes::install_github('saeyslab/CytoNorm')
Tell your AI agent what you want to do: - "Normalize my CyTOF run with EQ beads and remove the bead events" - "Harmonize my multi-batch study using my reference PBMC sample" - "Plot bead signal over acquisition time to check for drift" - "Should I normalize batch out or model it in my statistics?"
"Run CATALYST normCytof on this CyTOF SCE using the DVS EQ bead masses, correct the drift, remove the beads, and tell me what fraction were bead events." "Plot the Ce140 bead-channel median over Time before and after normalization to confirm the drift is gone."
"Train CytoNorm on my reference sample that was run in all four batches, then normalize the experimental samples - and run testCV first so I know the per-cluster splines are safe." "One of my batches doesn't have the reference aliquot - what are my options?"
"I'm going to do differential abundance downstream - should I CytoNorm the data or put batch in the diffcyt design? Explain the over-correction tradeoff."
normCytof()$data.testCV() to verify FlowSOM clustering is batch-stable, then train and apply CytoNorm per-cluster.normCytof() returns a list - the normalized SCE is in $data; beads="dvs" is the EQ four-element mass set.testCV() first - if per-cluster CV is high the FlowSOM model is batch-unstable and splines will distort (fall back to nClus=1).