We recently got our CyFlow Space flow cytometer in the lab and have been working out the kinks. From a flow cytometry perspective the California coastal environment is pretty different from the western Antarctic Peninsula where I’ve done most of my flow cytometry work. Getting my eyes calibrated to a new flow cytometer and a the coastal California environment has been an experience. Helping me on this task is Tia Rabsatt, a SURF REU student from the US Virgin Islands. Tia will be heading home in a couple of weeks which presents a challenge; once she leaves she won’t have access to the proprietary software that came with the flow cytometer. To continue analyzing the data she collected over the summer as part of her project she’ll need a different solution.
To give her a way to work with the FCS files I put together a quick R script that reads in the file, sets some event limits, and produces a nice plot. With a little modification one could “gate” and count different regions. The script uses the flowCore package to read in the FCS format files, and the hist2d command in gplots to make a reasonably informative plot.
library('flowCore') library('gplots') #### parameters #### f.name <- 'file.name.goes.here' # name of the file you want to analyze, file must have extension ".FCS" sample.size <- 1e5 # number of events to plot, use "max" for all points fsc.ll <- 1 # FSC lower limit ssc.ll <- 1 # SSC lower limit fl1.ll <- 1 # FL1 lower limit (ex488/em536) #### functions #### ## plotting function plot.events <- function(fcm, x.param, y.param){ hist2d(log10(fcm[,x.param]), log10(fcm[,y.param]), col = c('grey', colorRampPalette(c('white', 'lightgoldenrod1', 'darkgreen'))(100)), nbins = 200, bg = 'grey', ylab = paste0('log10(', y.param, ')'), xlab = paste0('log10(', x.param, ')')) box() } #### read in file #### fcm <- read.FCS(paste0(f.name, '.FCS')) fcm <- as.data.frame((exprs(fcm))) #### analyze file and make plot #### ## eliminate values that are below or equal to thresholds you ## defined above fcm$SSC[fcm$SSC <= ssc.ll|fcm$FSC <= fsc.ll|fcm$FL1 == fl1.ll] <- NA fcm <- na.omit(fcm) fcm.sample <- fcm if(sample.size != 'max'){ try({fcm.sample <- fcm[sample(length(fcm$SSC), sample.size),]}, silent = T) } ## plot events in a couple of different ways plot.events(fcm, 'FSC', 'SSC') plot.events(fcm, 'FSC', 'FL1') ## make a presentation quality figure png(paste0(f.name, '_FSC', '_FL1', '.png'), width = 2000, height = 2000, pointsize = 50) plot.events(fcm, 'FSC', 'FL1') dev.off()
And here’s the final plot: