Add FileIO.jl integration for flow cytometry FCS files.
| Stable release | Repo status |
|---|---|
FCS files can be loaded by using the FileIO interface.
julia> using FileIO
julia> flowrun = load("example.fcs")
FCS.FlowSample{Float32}
Machine: LSRFortessa
Begin Time: 14:12:03
End Time: 14:12:25
Date: 17-MAR-2017
File: Specimen_001_Tube_002_002.fcs
Axes:
FSC-A
FSC-H
FSC-W
SSC-A
SSC-H
SSC-W
B_530-30-A
TimeOnce loaded the parameters of the FCS file are available as properties.
julia> flowrun.last_modified
"2019-Oct-03 15:35:15"
julia> flowrun.p1n
"FSC-A"
There are many ways to index into the FCS file. You can index the FCS file as a matrix (actually an AxisArray).
julia> flowrun[:, 1]
1-dimensional AxisArray{Float32,1,...} with axes:
:param, ["FSC-A", "FSC-H", "SSC-A", "SSC-H", "B1-A", "B1-H", "B2-A", "B2-H", "HDR-CE", "HDR-SE" … "V2-A", "V2-H", "Y1-A", "Y1-H", "Y2-A", "Y2-H", "Y3-A", "Y3-H", "Y4-A", "Y4-H"]
And data, a 23-element Vector{Float32}:
19.319384
12.838199
44.391308
20.214031
0.01834727
0.72980446
-0.25282443
0.4430968
⋮
0.54869235
-0.027989198
0.48970717
4.498265
5.900927
0.02512901
0.3956769
This retrieves the values of all the parameters for the first event in the FCS file.
Similarly you can get the values of a single parameter for all events.
julia> flowrun[1, :]
1-dimensional AxisArray{Float32,1,...} with axes:
:event, 1:83562
And data, a 83562-element Vector{Float32}:
19.319384
22.961153
36.157864
30.91769
5.644829
14.188097
34.42944
4.4080987
⋮
23.391977
-4.813841
-1.2413055
11.075016
13.712906
23.54529
5.740017
You can also take ranges of events.
julia> flowrun[1, end-99:end]
1-dimensional AxisArray{Float32,1,...} with axes:
:event, 83463:83562
And data, a 100-element Vector{Float32}:
4.576562
2.553804
10.608879
-6.4025674
-18.626959
6.1649327
24.049818
21.735662
⋮
23.391977
-4.813841
-1.2413055
11.075016
13.712906
23.54529
5.740017
If you know the name of a parameter you can use that name to index.
julia> flowrun["FSC-A"]
1-dimensional AxisArray{Float32,1,...} with axes:
:event, 1:83562
And data, a 83562-element Vector{Float32}:
19.319384
22.961153
36.157864
30.91769
5.644829
14.188097
34.42944
4.4080987
⋮
23.391977
-4.813841
-1.2413055
11.075016
13.712906
23.54529
5.740017
Or you can get multiple parameters at the same time.
julia> flowrun[["FSC-A", "FSC-H"]]
2-dimensional AxisArray{Float32,2,...} with axes:
:param, ["FSC-A", "FSC-H"]
:event, 1:83562
And data, a 2×83562 Matrix{Float32}:
19.3194 22.9612 36.1579 30.9177 … 11.075 13.7129 23.5453 5.74002
12.8382 3.40729 17.4995 14.0875 8.80171 5.29686 13.0893 11.3576
In general, any indexing that works with AxisArrays should work the same with FCS files.
Here is an example which constructs a 2D histogram visualisation of a FCS file.
julia> using Gadfly
julia> p = plot(x=flowrun["FSC-A"], y=flowrun["SSC-A"], Geom.histogram2d,
Guide.xlabel("FSC-A"), Guide.ylabel("SSC-A"), Coord.cartesian(xmin=0, ymin=0))
julia> draw(PNG("example.png", 10cm, 7cm, dpi=300), p)
