It is possible to process the data using custom scripts, as I show here: https://github.com/kevinblighe/cytofNet
Other than that, from what I can see, the majority of people use CytoBank, which was recently sold by its co-founders. So, I don't know what that means for those users who wish to use CytoBank in the future. Neither do I know what it means for those users whose data has been deposited in CytoBank in good faith.
reading in data
Arguably the most important R package that you'll need is flowCore, which can read the FCS files for you. Everything after that really can be done manually.
normalising data
After reading in the data, you need to normalise it and eliminate junk cells. As you know, CyTOF data is typically normalised by hyperbolic arc-sine with a factor of 5.
# Set background noise threshold - values below this are set to 0
BackgroundNoiseThreshold <- 1
# Euclidean norm threshold - this is the square root of the sum of all the squares
EuclideanNormThreshold <- 1
# Choose a transformation function (any mathematical function)
transFun <- function (x) asinh(x)
# Set hyperbolic arc-sine factor (NB - asinh(x/5) is recommended for CyTOF and FACS data)
asinhFactor <- 5
x <- x[apply(x, 1, FUN=function(x) sqrt(sum(x^2)))>EuclideanNormThreshold,]
NoiseCorrected <- x
NoiseCorrected[NoiseCorrected<BackgroundNoiseThreshold] <- 0
x <- transFun(NoiseCorrected/asinhFactor)
downstream
Once you read in and normalise your data, you can bind samples together that are representing common conditions. The World, after that, really is your oyster:
- tSNE (Rtsne)
- UMAP (umap)
- PhenoGraph (Rphenograph)
clustering and heatmaps
et cetera
You can even utilise Seurat functionality to identify clusters in your data, specifically FindNeighbors
and FindClusters
.
Here are some products of my own CyTOF scripts:

Kevin