forked from RGLab/CytoML
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
224 lines (155 loc) · 7.26 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
---
output: github_document
editor_options:
chunk_output_type: inline
---
# CytoML: Cross-Platform Cytometry Data Sharing.
This package is designed to import/export the hierarchical gated cytometry data to and from R (specifically the [openCyto](https://github.com/RGLab/openCyto) framework) using the [`gatingML2.0`](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4874733/) and [`FCS3.0`](http://isac-net.org/Resources/Standards/FCS3-1.aspx) cytometry data standards. This package makes use of the `GatingSet` R object and data model so that imported data can easily be manipulated and visualized in R using tools like [openCyto](https://github.com/RGLab/openCyto) and [ggCyto](https://github.com/RGLab/ggcyto).
## What problems does CytoML solve?
CytoML allows you to:
- Import manually gated data into R from [Diva](http://www.bdbiosciences.com/us/instruments/clinical/software/flow-cytometry-acquisition/bd-facsdiva-software/m/333333/overview), [FlowJo](https://www.flowjo.com/) and [Cytobank](https://cytobank.org/).
- Combine manual gating strategies with automated gating strategies in R.
- Export data gated manually, auto-gated, or gated using a combination of manual and automated strategies from R to [Diva](http://www.bdbiosciences.com/us/instruments/clinical/software/flow-cytometry-acquisition/bd-facsdiva-software/m/333333/overview), [FlowJo](https://www.flowjo.com/) and [Cytobank](https://cytobank.org/).
- Share computational flow analyses with users on other platforms.
- Perform comparative analyses between computational and manual gating approaches.
## INSTALLATION
CytoML can be installed in several ways:
### For all versions:
For all versions, you must have dependencies installed
```r
library(BiocManager)
# This should pull all dependencies.
BiocManager::install("openCyto")
# Then install latest dependencies from github, using devtools.
install.packages("devtools")
library(devtools) #load it
install_github("RGLab/flowWorkspace")
install_github("RGLab/openCyto")
```
### Installing from [BioConductor](https://www.bioconductor.org).
- [Current BioConductor Relase](https://doi.org/doi:10.18129/B9.bioc.CytoML)
```r
library(BiocManager)
#this should pull all dependencies.
BiocManager::install("CytoML", version = "devel")
```
- [Current BioConductor Development Version](http://bioconductor.org/packages/devel/bioc/html/CytoML.html)
```r
library(BiocManager)
#this should pull all dependencies.
BiocManager::install("CytoML", version = "devel")
```
### Installing from GitHub
- [Latest GitHub Version](https://github.com/RGLab/CytoML)
```r
install.packges("devtools")
devtools::install_github("RGLab/CytoML")
```
- [Latest GitHub Release](https://github.com/RGLab/CytoML/releases)
```r
install.packges("devtools")
devtools::install_github("RGLab/CytoML@*release")
```
## Reproducible examples from the CytoML paper
- A reproducible workflow can be found at the [RGLab site](http://www.rglab.org/CytoML), and was prepared with version 1.7.10 of CytoML, R v3.5.0, and dependencies that can be installed by:
```r
# We recomend using R version 3.5.0
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
devtools::install_github("RGLab/[email protected]")
```
## Examples
### Import data
To import data you need the xml workspace and the raw FCS files.
#### Import `gatingML` generated from [Cytobank](https://cytobank.org/).
```{r, message = FALSE, warning = FALSE, error = FALSE}
library(CytoML)
acsfile <- system.file("extdata/cytobank_experiment.acs", package = "CytoML")
ce <- open_cytobank_experiment(acsfile)
xmlfile <- ce$gatingML
fcsFiles <- list.files(ce$fcsdir, full.names = TRUE)
gs <- cytobank_to_gatingset(xmlfile, fcsFiles)
```
#### Import a [Diva](http://www.bdbiosciences.com/us/instruments/clinical/software/flow-cytometry-acquisition/bd-facsdiva-software/m/333333/overview) workspace.
```{r, message = FALSE, warning = FALSE, error = FALSE}
ws <- open_diva_xml(system.file('extdata/diva/PE_2.xml', package = "flowWorkspaceData"))
# The path to the FCS files is stored in ws@path.
# It can also be passed in to parseWorksapce via the `path` argument.
gs <- diva_to_gatingset(ws, name = 2, subset = 1, swap_cols = FALSE)
```
#### Interact with the gated data (`GatingSet`)
We need `flowWorkspace` to interact with the imported data.
```{r, message = FALSE, warning = FALSE, error = FALSE}
library(flowWorkspace)
```
We can visualize the gating tree as follows:
```{r}
#get the first sample
gh <- gs[[1]]
#plot the hierarchy tree
plot(gh)
```
For more information see the [flowWorkspace](http://www.github.com/RGLab/flowWorkspace) package.
We can print all the cell populations defined in the gating tree.
```{r}
#show all the cell populations(/nodes)
gs_get_pop_paths(gh)
```
We can extract the cell population statistics.
```{r}
#show the population statistics
gh_pop_compare_stats(gh)
```
The `openCyto.count` column shows the cell counts computed via the import.
The `xml.count` column shows the cell counts computed by FlowJo (note not all platforms report cell counts in the workspace). It is normal for these to differ by a few cells due to numerical differences in the implementation of data transformations. CytoML and openCyto are *reproducing* the data analysis from the raw data based on the information in the workspace.
We can plot all the gates defined in the workspace.
```{r}
#plot the gates
plotGate(gh)
```
#### Access information about cells in a specific population.
Because CytoML and flowWorkspace reproduce the entire analysis in a workspace in R, we have access to information about which cells are part of which cell popualtions.
flowWorkspace has convenience methods to extract the cells from specific cell populations:
```{r}
gh_pop_get_data(gh,"P3")
```
This returns a `flowFrame` with the cells in gate P3 (70% of the cells according to the plot).
The matrix of expression can be extracted from a `flowFrame` using the `exprs()` method from the `flowCore` package:
```{r}
library(flowCore)
e <- exprs(gh_pop_get_data(gh,"P3"))
class(e)
dim(e)
colnames(e)
#compute the MFI of the fluorescence channels.
colMeans(e[,8:15])
```
### Export gated data to other platforms.
In order to export gated data, it must be in `GatingSet` format.
#### Export a `GatingSet` from R to [Cytobank](https://cytobank.org/) or [FlowJo](https://www.flowjo.com/)
Load something to export.
```{r}
dataDir <- system.file("extdata",package="flowWorkspaceData")
gs <- load_gs(list.files(dataDir, pattern = "gs_manual",full = TRUE))
```
##### Export to Cytobank
```{r}
#Cytobank
outFile <- tempfile(fileext = ".xml")
gatingset_to_cytobank(gs, outFile)
```
##### Export to FlowJo
```{r}
#flowJo
outFile <- tempfile(fileext = ".wsp")
gatingset_to_flowjo(gs, outFile)
```
## Next Steps
See the [flowWorskspace](http://www.github.com/RGLab/flowWorkspace) and [openCyto](http://www.github.com/RGLab/openCyto] packages to learn more about what can be done with `GatingSet` objects.
## Code of conduct
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
By participating in this project you agree to abide by its terms.