suppressMessages(library(ggcyto))
## Warning: replacing previous import by 'ncdfFlow::rbind2' when loading
## 'ggcyto'
suppressMessages(library(flowIncubator))

Parse gatingML file graphGML object (population tree)

path <- "~/rglab/workspace/flowWorkspace/wsTestSuite/gatingML/"
# xmlfile <- file.path(path, "Merck/CytExp_10623_Gates_v5.xml")
xmlfile <- system.file("extdata/cytotrol_tcell_cytobank.xml", package = "flowIncubator")

g <- read.gatingML.cytobank(xmlfile)
g
## --- Gating hieararchy parsed from GatingML: 
##  with  5  populations defined

Tree accessors

getNodes(g)
## GateSet_686424 GateSet_686425 GateSet_686426 GateSet_686427 GateSet_686428 
##   "not debris"     "singlets"          "CD3"          "CD8"          "CD4"
getParent(g, "GateSet_686425")
## [1] "GateSet_686424"
getChildren(g, "GateSet_686425")
## [1] "GateSet_686426"
plot(g)

Read FCS files

# fcsFiles <- list.files(pattern = "\\.fcs", file.path(path, "Merck"), full = T)
fcsFiles <- list.files(pattern = "CytoTrol", system.file("extdata", package = "flowWorkspaceData"), full = T)
suppressMessages(fs_raw <- read.ncdfFlowSet(fcsFiles))
# save_ncfs(fs_raw, path = "/loc/no-backup/mike/fs_raw")

# fs_raw <- load_ncfs("/loc/no-backup/mike/fs_raw")
suppressMessages(fs <- clone.ncdfFlowSet(fs_raw,isEmpty = F))

compensation

fs <- compensate(fs, g)
## Note: method with signature 'flowSet#graphGML' chosen for function 'compensate',
##  target signature 'ncdfFlowSet#graphGML'.
##  "ncdfFlowSet#ANY" would also be valid
## copying data slice:CytoTrol_CytoTrol_1.fcs
## write CytoTrol_CytoTrol_1.fcs to empty cdf slot...
## copying data slice:CytoTrol_CytoTrol_2.fcs
## write CytoTrol_CytoTrol_2.fcs to empty cdf slot...
## updating CytoTrol_CytoTrol_1.fcs...
## updating CytoTrol_CytoTrol_2.fcs...

transforamation

trans <- getTransformations(g)
fs <- transform(fs, trans)
## copying data slice:CytoTrol_CytoTrol_1.fcs
## write CytoTrol_CytoTrol_1.fcs to empty cdf slot...
## copying data slice:CytoTrol_CytoTrol_2.fcs
## write CytoTrol_CytoTrol_2.fcs to empty cdf slot...
## updating CytoTrol_CytoTrol_1.fcs...
## updating CytoTrol_CytoTrol_2.fcs...
#check the trans and comps outcome
# ggcyto(fs, aes(x = "CD4"), subset = "root") + geom_density()
# ggcyto(fs, aes(x = "CD4", y = "CD8"), subset = "root") + geom_hex()

Construct the GatingSet and apply gates

gs <- GatingSet(fs)
## ..done!
gating(g, gs)
## not debris
## singlets
## CD3
## CD4
## CD8
## ..done!

check the gating results

plotGate(gs[[1]])

verify the stats are correct

#load stats from cytobank
cytobank_counts <- read.csv(system.file("extdata/cytotrol_tcell_cytobank_counts.csv", package = "flowIncubator"), skip = 7, stringsAsFactors = F)
#convert it to the same format
colnames(cytobank_counts)[1] <- "Population"
cytobank_counts <- plyr::arrange(cytobank_counts, Population)

#load openCyto stats
openCyto_counts <- getPopStats(gs, statType = "count")
openCyto_counts <- reshape2::dcast(openCyto_counts, Population ~ name, value.var = "Count")


all.equal(cytobank_counts, openCyto_counts)
## [1] TRUE