# CytoR
Author: Marcel Costa-Garcia
Date: 2024-04-10

#### Marcel Costa-Garcia

#### 2024-04-10

First we load the required libreries and import functions from `functionsCyto.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):

    fs<-read.ncdfFlowSet(files=list.files("BcellPhenotype-Files/",".LMD", full.names = T), readonly = F, dataset=2)
    gs <- GatingSet(fs)
    gs

    ## A GatingSet with 2 samples

Next, we will compensate with the compensation matrix of the adquisition, which is embed into the file. We can import another compensation matrix:

    comp<-spillover(fs[[1]])$`$SPILLOVER`
    colnames(comp)<-colnames(gs)[5:14]
    rownames(comp)<-colnames(gs)[5:14]
    comp

    ##        FL1-A FL2-A FL3-A FL4-A FL5-A FL6-A FL7-A FL8-A FL9-A FL10-A
    ## FL1-A  1.000 0.699 0.118 0.000 0.000 0.000 0.000 0.000 0.000  0.265
    ## FL2-A  0.002 1.000 0.542 0.000 0.000 0.000 0.000 0.000 0.000  0.000
    ## FL3-A  0.000 0.036 1.000 0.949 0.000 0.000 0.000 0.000 0.000  0.000
    ## FL4-A  0.000 0.000 0.003 1.000 0.182 0.168 0.161 0.000 0.000  0.000
    ## FL5-A  0.000 0.000 0.000 0.002 1.000 0.000 0.006 0.000 0.000  0.000
    ## FL6-A  0.000 0.000 0.000 0.000 0.000 1.000 0.293 0.000 0.000  0.000
    ## FL7-A  0.000 0.000 0.000 0.000 0.000 0.027 1.000 0.166 0.000  0.000
    ## FL8-A  0.000 0.000 0.000 0.000 0.000 0.000 0.090 1.000 0.000  0.000
    ## FL9-A  0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000  0.136
    ## FL10-A 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.055  1.000

    gs<-compensate(gs, comp)

To transform the axis in an interactive and visual way, I have created the following function:

    trans_params<-transform_gs(gs)

    trans_params$`FL3-A`

    ## $channel
    ## [1] "FL3-A"
    ##
    ## $scale
    ## [1] "biexp"
    ##
    ## $maxvalue
    ## [1] 250000
    ##
    ## $pos
    ## [1] 5
    ##
    ## $widthBasis
    ## [1] -400
    ##
    ## $max
    ## [1] 5011.872
    ##
    ## $min
    ## [1] 956

We can save the transformation params in a file and latter we can import and apply directly (including in other experiments):

    saveRDS(trans_params, "BcellPhenotype-trans_params.rds")

    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:

    markers<-colnames(gs)
    markers[c(7,13)]<-c("CD19","L&D")
    names(markers)<-colnames(gs)
    markernames(gs)<-markers
    markernames(gs)

    ##     FS-H     FS-A     FS-W     SS-A    FL1-A    FL2-A    FL3-A    FL4-A
    ##   "FS-H"   "FS-A"   "FS-W"   "SS-A"  "FL1-A"  "FL2-A"   "CD19"  "FL4-A"
    ##    FL5-A    FL6-A    FL7-A    FL8-A    FL9-A   FL10-A
    ##  "FL5-A"  "FL6-A"  "FL7-A"  "FL8-A"    "L&D" "FL10-A"

Finally, we will clean a bit the sample names:

    sampleNames(gs)

    ## [1] "FC20339 2020.09.14 LD CD19PECF594 aCDE19 002.LMD"
    ## [2] "FC20339 2020.09.14 LD CD19PECF594 Unst 001.LMD"

    sampleNames(gs)<-gsub("\\s[0-9]*.LMD","",sampleNames(gs))
    sampleNames(gs)<-gsub(".*\\s","",sampleNames(gs))
    pData(gs)$name<-rownames(pData(gs))
    sampleNames(gs)

    ## [1] "aCDE19" "Unst"

And we are ready to gate! We will be using the `gs_interactive_gate` function from `flowGate` package.

    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"))

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):

    gates<-gates_save(gs, file = "BcellPhenotype-gates.rds")

    gates<-readRDS("BcellPhenotype-gates.rds")
    gs<-gates_apply(gs, gates)

    plot(gs)

We can rapidly explore the results using the `autoplot` function:

    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:

    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:

    stats<-gs_pop_get_stats(gs, nodes=gs_get_pop_paths(gs, path = "auto")[3:6], type="perc")
    stats

    ##    sample       pop     percent
    ##    <char>    <char>       <num>
    ## 1: aCDE19 CD19-L&D+ 0.013749535
    ## 2: aCDE19 CD19+L&D+ 0.101820884
    ## 3: aCDE19 CD19+L&D- 0.880936455
    ## 4: aCDE19 CD19-L&D- 0.003493125
    ## 5:   Unst CD19-L&D+ 0.069043075
    ## 6:   Unst CD19+L&D+ 0.119411123
    ## 7:   Unst CD19+L&D- 0.373977644
    ## 8:   Unst CD19-L&D- 0.437568157

    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:

    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)