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