|
@ -0,0 +1,193 @@ |
|
|
|
|
|
--- |
|
|
|
|
|
title: "CytoR" |
|
|
|
|
|
author: "Marcel Costa-Garcia" |
|
|
|
|
|
date: "`r Sys.Date()`" |
|
|
|
|
|
output: html_document |
|
|
|
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
```{r setup, include=FALSE} |
|
|
|
|
|
knitr::opts_chunk$set(echo = TRUE, warning=FALSE, message=FALSE) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
First we load the required libreries and import functions from `functionsCyto.R`: |
|
|
|
|
|
```{r} |
|
|
|
|
|
library(tidyverse) |
|
|
|
|
|
library(flowWorkspace) |
|
|
|
|
|
library(Biobase) |
|
|
|
|
|
library(flowGate) |
|
|
|
|
|
source("functionsCyto.R") |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
We import the .LMD or .fcs files to a FlowSet object that we convert into a GatingSet (in the case of LMD files, they include both the format FCS2 and FCS3, which is accessed as dataset=2): |
|
|
|
|
|
```{r} |
|
|
|
|
|
fs<-read.ncdfFlowSet(files=list.files("BcellPhenotype-Files/",".LMD", full.names = T), readonly = F, dataset=2) |
|
|
|
|
|
gs <- GatingSet(fs) |
|
|
|
|
|
gs |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Next, we will compensate with the compensation matrix of the adquisition, which is embed into the file. We can import another compensation matrix: |
|
|
|
|
|
|
|
|
|
|
|
```{r} |
|
|
|
|
|
comp<-spillover(fs[[1]])$`$SPILLOVER` |
|
|
|
|
|
colnames(comp)<-colnames(gs)[5:14] |
|
|
|
|
|
rownames(comp)<-colnames(gs)[5:14] |
|
|
|
|
|
comp |
|
|
|
|
|
gs<-compensate(gs, comp) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
To transform the axis in an interactive and visual way, I have created the following function: |
|
|
|
|
|
```{r, eval=FALSE} |
|
|
|
|
|
trans_params<-transform_gs(gs) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
![](trans_params.jpg) |
|
|
|
|
|
|
|
|
|
|
|
```{r, include=F} |
|
|
|
|
|
trans_params<-readRDS("BcellPhenotype-trans_params.rds") |
|
|
|
|
|
trans_apply(gs, trans_params = trans_params) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```{r} |
|
|
|
|
|
trans_params$`FL3-A` |
|
|
|
|
|
``` |
|
|
|
|
|
We can save the transformation params in a file and latter we can import and apply directly (including in other experiments): |
|
|
|
|
|
```{r, eval=F} |
|
|
|
|
|
saveRDS(trans_params, "BcellPhenotype-trans_params.rds") |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```{r, eval=F} |
|
|
|
|
|
trans_params<-readRDS("BcellPhenotype-trans_params.rds") |
|
|
|
|
|
trans_apply(gs, trans_params = trans_params) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
As it wasn't done during the acquisition, we will define the marker name for the channels of interest: |
|
|
|
|
|
```{r} |
|
|
|
|
|
markers<-colnames(gs) |
|
|
|
|
|
markers[c(7,13)]<-c("CD19","L&D") |
|
|
|
|
|
names(markers)<-colnames(gs) |
|
|
|
|
|
markernames(gs)<-markers |
|
|
|
|
|
markernames(gs) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Finally, we will clean a bit the sample names: |
|
|
|
|
|
```{r} |
|
|
|
|
|
sampleNames(gs) |
|
|
|
|
|
sampleNames(gs)<-gsub("\\s[0-9]*.LMD","",sampleNames(gs)) |
|
|
|
|
|
sampleNames(gs)<-gsub(".*\\s","",sampleNames(gs)) |
|
|
|
|
|
pData(gs)$name<-rownames(pData(gs)) |
|
|
|
|
|
sampleNames(gs) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
And we are ready to gate! We will be using the `gs_interactive_gate` function from `flowGate` package. |
|
|
|
|
|
```{r, include=F} |
|
|
|
|
|
gates<-readRDS("BcellPhenotype-gates.rds") |
|
|
|
|
|
gs<-gates_apply(gs, gates) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```{r, eval=F} |
|
|
|
|
|
gs_gate_interactive(gs, |
|
|
|
|
|
filterId = "Leukocytes", |
|
|
|
|
|
dims = list("FS-A", "SS-A")) |
|
|
|
|
|
``` |
|
|
|
|
|
![](Gates.jpg) |
|
|
|
|
|
|
|
|
|
|
|
```{r, eval=F} |
|
|
|
|
|
gs_gate_interactive(gs, |
|
|
|
|
|
subset = "Leukocytes", |
|
|
|
|
|
filterId = "CD19 L&D", |
|
|
|
|
|
dims = list("CD19", "L&D")) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
We can save the created gates into a file to import latter on (which may be also used to apply the gating strategy into a new experiment): |
|
|
|
|
|
```{r, eval=F} |
|
|
|
|
|
gates<-gates_save(gs, file = "BcellPhenotype-gates.rds") |
|
|
|
|
|
|
|
|
|
|
|
gates<-readRDS("BcellPhenotype-gates.rds") |
|
|
|
|
|
gs<-gates_apply(gs, gates) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
```{r} |
|
|
|
|
|
plot(gs) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
We can rapidly explore the results using the `autoplot` function: |
|
|
|
|
|
```{r} |
|
|
|
|
|
autoplot(gs, "Leukocytes", bins=128, nrow=1) |
|
|
|
|
|
autoplot(gs[["aCDE19"]], bins=128, nrow=1) |
|
|
|
|
|
``` |
|
|
|
|
|
We can further personalize the plot with similar sintaxis as `ggplot` with the `ggcyto` package: |
|
|
|
|
|
```{r} |
|
|
|
|
|
g<-ggcyto(gs, subset = "Leukocytes", bins=128, aes(CD19,`L&D`))+ |
|
|
|
|
|
facet_grid(.~factor(name, levels=c("Unst","aCDE19")))+ |
|
|
|
|
|
geom_hex(bins=128)+ |
|
|
|
|
|
geom_gate()+ |
|
|
|
|
|
geom_stats()+ |
|
|
|
|
|
scale_fill_gradient(low="black", high="violet") |
|
|
|
|
|
g |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Finally, we can export the stats and plot them: |
|
|
|
|
|
```{r, fig.width=4} |
|
|
|
|
|
stats<-gs_pop_get_stats(gs, nodes=gs_get_pop_paths(gs, path = "auto")[3:6], type="perc") |
|
|
|
|
|
stats |
|
|
|
|
|
|
|
|
|
|
|
g2<-ggplot(stats, aes(factor(sample, levels=c("Unst","aCDE19")), percent, fill=pop))+ |
|
|
|
|
|
geom_bar(stat="identity", color="black")+xlab("Samples") |
|
|
|
|
|
|
|
|
|
|
|
ggpubr::ggarrange(as.ggplot(g), g2, ncol=1) |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Code: |
|
|
|
|
|
```r |
|
|
|
|
|
library(tidyverse) |
|
|
|
|
|
library(flowWorkspace) |
|
|
|
|
|
library(Biobase) |
|
|
|
|
|
library(flowGate) |
|
|
|
|
|
source("functionsCyto.R") |
|
|
|
|
|
|
|
|
|
|
|
fs<-read.ncdfFlowSet(files=list.files("BcellPhenotype-Files/",".LMD", full.names = T), readonly = F, dataset=2) |
|
|
|
|
|
gs <- GatingSet(fs) |
|
|
|
|
|
|
|
|
|
|
|
comp<-spillover(fs[[1]])$`$SPILLOVER` |
|
|
|
|
|
colnames(comp)<-colnames(gs)[5:14] |
|
|
|
|
|
rownames(comp)<-colnames(gs)[5:14] |
|
|
|
|
|
gs<-compensate(gs, comp) |
|
|
|
|
|
|
|
|
|
|
|
trans_params<-transform_gs(gs) |
|
|
|
|
|
|
|
|
|
|
|
markers<-colnames(gs) |
|
|
|
|
|
markers[c(7,13)]<-c("CD19","L&D") |
|
|
|
|
|
names(markers)<-colnames(gs) |
|
|
|
|
|
markernames(gs)<-markers |
|
|
|
|
|
|
|
|
|
|
|
sampleNames(gs)<-gsub("\\s[0-9]*.LMD","",sampleNames(gs)) |
|
|
|
|
|
sampleNames(gs)<-gsub(".*\\s","",sampleNames(gs)) |
|
|
|
|
|
pData(gs)$name<-rownames(pData(gs)) |
|
|
|
|
|
|
|
|
|
|
|
gs_gate_interactive(gs, |
|
|
|
|
|
filterId = "Leukocytes", |
|
|
|
|
|
dims = list("FS-A", "SS-A")) |
|
|
|
|
|
|
|
|
|
|
|
gs_gate_interactive(gs, |
|
|
|
|
|
subset = "Leukocytes", |
|
|
|
|
|
filterId = "CD19 L&D", |
|
|
|
|
|
dims = list("CD19", "L&D")) |
|
|
|
|
|
|
|
|
|
|
|
g<-ggcyto(gs, subset = "Leukocytes", bins=128, aes(CD19,`L&D`))+ |
|
|
|
|
|
facet_grid(.~factor(name, levels=c("Unst","aCDE19")))+ |
|
|
|
|
|
geom_hex(bins=128)+ |
|
|
|
|
|
geom_gate()+ |
|
|
|
|
|
geom_stats()+ |
|
|
|
|
|
scale_fill_gradient(low="black", high="violet") |
|
|
|
|
|
|
|
|
|
|
|
stats<-gs_pop_get_stats(gs, nodes=gs_get_pop_paths(gs, path = "auto")[3:6], type="perc") |
|
|
|
|
|
stats |
|
|
|
|
|
|
|
|
|
|
|
g2<-ggplot(stats, aes(factor(sample, levels=c("Unst","aCDE19")), percent, fill=pop))+ |
|
|
|
|
|
geom_bar(stat="identity", color="black")+xlab("Samples") |
|
|
|
|
|
|
|
|
|
|
|
ggpubr::ggarrange(as.ggplot(g), g2, ncol=1) |
|
|
|
|
|
``` |