---
title: "How to import Cytobank into a GatingSet"
author: "Mike Jiang"
output: 
  html_document: 
    number_sections: yes
    toc: yes
    toc_float: true
vignette: >    
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteIndexEntry{How to import Cytobank into a GatingSet}
---


```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, results = "markup", message = FALSE, warning = FALSE)
```

This vignette demonstrates how the gatingML files exported from Cytobank can be imported into R as a GatingSet object.

```{r}
library(flowWorkspace)
library(CytoML)
acs <- system.file("extdata/cytobank_experiment.acs", package = "CytoML")
```

Create `cytobank_experiment` object from the ACS bundle exported from Cytobank
```{r}
ce <- open_cytobank_experiment(acs)
ce
```

**cytobank_experiment** is a wrapper around the `ACS` file, which can be inspected by various accessors.
```{r}
sampleNames(ce)
ce_get_panels(ce)
ce_get_compensations(ce)
ce_get_samples(ce)
ce_get_channels(ce)
ce_get_markers(ce)
pData(ce)
```
Then import `cytobank_experiment` into **GatingSet**
```{r}
gs <- cytobank_to_gatingset(ce)
```
By default, the first `panel` (i.e. `panel_id = 1`) will be imported. Change `panel_id` argument to select different panel (if there are more than one , which can be inspected by `ce_get_panels`   )

Alternatively, the import can be done by `gatingML` and `fcs` files that are downloaded separately form Cytobank without `ACS`.
```{r, eval=FALSE}
xmlfile <- ce$gatingML
fcsFiles <- list.files(ce$fcsdir, full.names = TRUE)
gs <- cytobank_to_gatingset(xmlfile, fcsFiles)
```
However, it doesn't have the information from `yaml` file (part of `ACS`). E.g. sample tags (i.e. `pData`) and customized markernames. So it is recommended to import `ACS`.

Inspect the results
```{r}
library(ggcyto)
## Plot the gates
autoplot(gs[[1]])
# Extract the population statistics
gs_pop_get_count_fast(gs, statType = "count")
```