Structure
Flow Cytometry Standard files are read and parsed
into a flowstate (S3 object). A flowstate is
primarily comprised of the following parsed (named list) elements – each
a data.table::data.table():
| Name | Value |
|---|---|
data |
expression values |
parameters |
instrument-specific measurement parameters |
keywords |
instrument/sample-specific metadata |
spill |
instrument/sample-specific spillover matrix (if encoded in the file) |
Included with the package – for the purpose of example(s) – are a few (subsampled) .fcs files acquired on a Cytek Aurora (5L) using SpectroFlo software.
Read/parse them as a flowstate using
flowstate::read.flowstate().
##paths to example .fcs files
fcs.files <- system.file("extdata", package = "flowstate") |>
list.files(full.names = T) |>
grep(pattern = "BLOCK.*.fcs",value = T)
fcs.files |> basename() |> print()
#> [1] "COVAIL_002_CYTOKINE_BLOCK1_1.fcs" "COVAIL_002_CYTOKINE_BLOCK1_2.fcs"
#> [3] "COVAIL_002_CYTOKINE_BLOCK1_3.fcs"
##read them in and concatenate; a flowstate object
fs <- flowstate::read.flowstate(
fcs.file.paths = fcs.files,
colnames.type = "S_N",
concatenate = TRUE
)
#> COVAIL_002_CYTOKINE_BLOCK1_1.fcs --> flowstate
#> COVAIL_002_CYTOKINE_BLOCK1_2.fcs --> flowstate
#> COVAIL_002_CYTOKINE_BLOCK1_3.fcs --> flowstate
#> Concatenating 'flowstate.ojects'...
##S3 object of class "flowstate"
class(fs)
#> [1] "flowstate"
##flowstate structure
names(fs)
#> [1] "data" "parameters" "keywords" "spill"
[['data']]
Data can be accessed by name via: fs$data or
fs[['data']].
[['data']] contains events as rows and scatter, time,
and fluorescent measurements as columns. By design, no transformation is
applied to the linear measurement values during reading. In addition, a
unique sample identifier (factored) is added for workflow purposes.
##
fs$data |> head()
#> Time SSC_W SSC_H SSC_A FSC_W FSC_H FSC_A SSCB_W SSCB_H
#> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#> 1: 0 730290.7 759933 924953.4 774044.6 997371 1286682.8 714389.4 873960
#> 2: 1 753766.8 453137 569266.0 714706.8 444274 529209.4 749070.4 411951
#> 3: 4 768520.5 599195 767489.4 729628.4 827274 1006004.3 730502.3 579392
#> 4: 4 707174.8 516909 609241.7 719956.1 819074 982828.9 700778.6 463030
#> 5: 5 743404.2 484976 600888.7 764667.1 754833 961993.2 726898.2 419073
#> 6: 8 724696.1 464423 560942.6 729720.8 794040 965712.5 703710.8 401969
#> SSCB_A CD45RA_BUV395 CD45RO_BUV496 TCRgd_BUV563 CD45BC1_SBUV605
#> <num> <num> <num> <num> <num>
#> 1: 1040579.6 17400.736 6296.233 3487.889 1056.3926
#> 2: 514300.5 6299.763 1073.582 2427.801 21505.0137
#> 3: 705412.0 -1247.931 37782.598 2189.499 146.5772
#> 4: 540802.5 3424.521 6541.122 10304.088 31037.8750
#> 5: 507705.7 -1692.568 43001.797 5568.431 55248.4922
#> 6: 471449.8 26003.760 3743.393 2530.474 -219.0977
#> IL2_BUV737 CD8_BUV805 CD197_BV421 CD45BC2_PacificBlue CD45BC3_SBV475
#> <num> <num> <num> <num> <num>
#> 1: -2868.07104 219290.2812 1701.1161 25329.0879 20529.553
#> 2: 666.11395 260.5484 18941.9355 14742.9941 4324.678
#> 3: 14.37641 -377.2223 699.3767 1116.3433 21791.977
#> 4: -1450.19849 1130.0894 1627.6073 -303.3068 3377.251
#> 5: -638.63544 236.9170 2753.4761 -910.3435 5274.306
#> 6: 135.40210 1106.0740 1290.4441 23654.0664 3429.047
#> CD57_BV605 CD193_BV650 CD45BC4_BV711 CD127_BV750 CD56_BV785
#> <num> <num> <num> <num> <num>
#> 1: 2525.726 1695.80396 23593.2891 1343.0120 6162.3535
#> 2: 4230.007 162.88908 410.2411 -642.7087 990.9473
#> 3: 2767.279 930.13574 30529.1172 2044.4512 -1573.5216
#> 4: 4663.360 84.06442 31405.3887 3629.7041 -1813.6000
#> 5: 7930.704 172.67607 1022.8995 5814.7285 1465.7168
#> 6: 3077.539 74.12897 335.7986 1104.4130 1660.5831
#> CD199_KIRAVIABlue520 CD49a_RB545 GranzymeB_RB613 CD45BC5_PerCP
#> <num> <num> <num> <num>
#> 1: 1315.519 1071.0972 54200.477 -6.487877
#> 2: 1259.631 1404.4385 1982.248 -114.808891
#> 3: 1891.648 512.3239 2113.995 15245.500000
#> 4: 1058.180 217.9938 5147.355 19775.552734
#> 5: 3178.108 -758.9792 1842.105 16411.826172
#> 6: 1381.134 684.5980 30221.033 390.726471
#> CD95_PerCPeFluor710 CD3_RB744 CD4_PerCPFire806 CD69_RB780 TNFa_PE
#> <num> <num> <num> <num> <num>
#> 1: 942.84930 36690.11719 8299.1494 4737.0107 993.0143
#> 2: 2869.56348 94.28096 634.6076 912.6633 683.6307
#> 3: 922.26361 26607.62500 52088.1602 1719.4734 816.6953
#> 4: -233.85599 51053.93750 5741.3486 6392.7744 544.5918
#> 5: 4008.57715 39481.12891 41355.3477 1742.8635 2127.6262
#> 6: 62.77901 254.06075 6056.9761 31786.8047 939.8767
#> CD183_RY586 IFNg_PEDazzle594 CD103_PEFire640 CD45BC6_SBY720 CD122_PECy7
#> <num> <num> <num> <num> <num>
#> 1: 473.1266 -256.25250 166.61444 821.8005 735.8677
#> 2: -478.1163 -109.60402 -21.77036 12146.9199 713.9467
#> 3: -402.7975 395.29520 -83.91235 1955.8750 -1774.0292
#> 4: -881.3683 -160.21269 -994.53149 1735.5421 -477.2218
#> 5: -3175.0767 27.80499 155.62851 -825.0389 -652.5281
#> 6: -854.2112 63.90987 636.24811 3377.4231 -126.8232
#> ia4b7_AlexaFluor647 CD45BC7_SparkNIR685 Viability_LIVEDEADScarlet CD27_APCH7
#> <num> <num> <num> <num>
#> 1: 4871.1104 1030.7883 1429.1698 -7657.7598
#> 2: 1420.3256 -409.5166 21949.6270 744.8879
#> 3: -321.3192 478.2293 543.1359 -448.9456
#> 4: 487.7629 -924.2852 1028.7167 332.4514
#> 5: -1965.0686 15285.1455 795.2957 -447.1280
#> 6: -1043.0923 18769.6777 1230.0640 -1377.2864
#> KLRG1_APCFire810 sample.id
#> <num> <fctr>
#> 1: 5408.6689 COVAIL_002_CYTOKINE_BLOCK1_1
#> 2: 3665.4756 COVAIL_002_CYTOKINE_BLOCK1_1
#> 3: 8486.8936 COVAIL_002_CYTOKINE_BLOCK1_1
#> 4: 14109.1025 COVAIL_002_CYTOKINE_BLOCK1_1
#> 5: 729.1112 COVAIL_002_CYTOKINE_BLOCK1_1
#> 6: 7417.7949 COVAIL_002_CYTOKINE_BLOCK1_1
##variable names
names(fs$data)
#> [1] "Time" "SSC_W"
#> [3] "SSC_H" "SSC_A"
#> [5] "FSC_W" "FSC_H"
#> [7] "FSC_A" "SSCB_W"
#> [9] "SSCB_H" "SSCB_A"
#> [11] "CD45RA_BUV395" "CD45RO_BUV496"
#> [13] "TCRgd_BUV563" "CD45BC1_SBUV605"
#> [15] "IL2_BUV737" "CD8_BUV805"
#> [17] "CD197_BV421" "CD45BC2_PacificBlue"
#> [19] "CD45BC3_SBV475" "CD57_BV605"
#> [21] "CD193_BV650" "CD45BC4_BV711"
#> [23] "CD127_BV750" "CD56_BV785"
#> [25] "CD199_KIRAVIABlue520" "CD49a_RB545"
#> [27] "GranzymeB_RB613" "CD45BC5_PerCP"
#> [29] "CD95_PerCPeFluor710" "CD3_RB744"
#> [31] "CD4_PerCPFire806" "CD69_RB780"
#> [33] "TNFa_PE" "CD183_RY586"
#> [35] "IFNg_PEDazzle594" "CD103_PEFire640"
#> [37] "CD45BC6_SBY720" "CD122_PECy7"
#> [39] "ia4b7_AlexaFluor647" "CD45BC7_SparkNIR685"
#> [41] "Viability_LIVEDEADScarlet" "CD27_APCH7"
#> [43] "KLRG1_APCFire810" "sample.id"
##sample identifiers
fs$data[,levels(sample.id)]
#> [1] "COVAIL_002_CYTOKINE_BLOCK1_1" "COVAIL_002_CYTOKINE_BLOCK1_2"
#> [3] "COVAIL_002_CYTOKINE_BLOCK1_3"
[['parameters']]
Parameters can be accessed by name via: fs$parameters or
fs[['parameters']].
[['parameters']] contains instrument-specific
measurement…parameters.
##
fs$parameters
#> par B DISPLAY E N R S
#> <char> <char> <char> <char> <char> <char> <char>
#> 1: $P1 32 LOG 0,0 Time 7593375 <NA>
#> 2: $P2 32 LIN 0,0 SSC-W 4194304 <NA>
#> 3: $P3 32 LIN 0,0 SSC-H 4194304 <NA>
#> 4: $P4 32 LIN 0,0 SSC-A 4194304 <NA>
#> 5: $P5 32 LIN 0,0 FSC-W 4194304 <NA>
#> 6: $P6 32 LIN 0,0 FSC-H 4194304 <NA>
#> 7: $P7 32 LIN 0,0 FSC-A 4194304 <NA>
#> 8: $P8 32 LIN 0,0 SSC-B-W 4194304 <NA>
#> 9: $P9 32 LIN 0,0 SSC-B-H 4194304 <NA>
#> 10: $P10 32 LIN 0,0 SSC-B-A 4194304 <NA>
#> 11: $P11 32 LOG 0,0 BUV395-A 4194304 CD45RA
#> 12: $P12 32 LOG 0,0 BUV496-A 4194304 CD45RO
#> 13: $P13 32 LOG 0,0 BUV563-A 4194304 TCRgd
#> 14: $P14 32 LOG 0,0 SBUV605-A 4194304 CD45BC1
#> 15: $P15 32 LOG 0,0 BUV737-A 4194304 IL2
#> 16: $P16 32 LOG 0,0 BUV805-A 4194304 CD8
#> 17: $P17 32 LOG 0,0 BV421-A 4194304 CD197
#> 18: $P18 32 LOG 0,0 Pacific Blue-A 4194304 CD45BC2
#> 19: $P19 32 LOG 0,0 SBV475-A 4194304 CD45BC3
#> 20: $P20 32 LOG 0,0 BV605-A 4194304 CD57
#> 21: $P21 32 LOG 0,0 BV650-A 4194304 CD193
#> 22: $P22 32 LOG 0,0 BV711-A 4194304 CD45BC4
#> 23: $P23 32 LOG 0,0 BV750-A 4194304 CD127
#> 24: $P24 32 LOG 0,0 BV785-A 4194304 CD56
#> 25: $P25 32 LOG 0,0 KIRAVIA Blue 520-A 4194304 CD199
#> 26: $P26 32 LOG 0,0 RB545-A 4194304 CD49a
#> 27: $P27 32 LOG 0,0 RB613-A 4194304 GranzymeB
#> 28: $P28 32 LOG 0,0 PerCP-A 4194304 CD45BC5
#> 29: $P29 32 LOG 0,0 PerCP-eFluor 710-A 4194304 CD95
#> 30: $P30 32 LOG 0,0 RB744-A 4194304 CD3
#> 31: $P31 32 LOG 0,0 PerCP-Fire 806-A 4194304 CD4
#> 32: $P32 32 LOG 0,0 RB780-A 4194304 CD69
#> 33: $P33 32 LOG 0,0 PE-A 4194304 TNFa
#> 34: $P34 32 LOG 0,0 RY586-A 4194304 CD183
#> 35: $P35 32 LOG 0,0 PE-Dazzle 594-A 4194304 IFNg
#> 36: $P36 32 LOG 0,0 PE-Fire 640-A 4194304 CD103
#> 37: $P37 32 LOG 0,0 SBY720-A 4194304 CD45BC6
#> 38: $P38 32 LOG 0,0 PE-Cy7-A 4194304 CD122
#> 39: $P39 32 LOG 0,0 Alexa Fluor 647-A 4194304 ia4b7
#> 40: $P40 32 LOG 0,0 Spark NIR 685-A 4194304 CD45BC7
#> 41: $P41 32 LOG 0,0 LIVE DEAD Scarlet-A 4194304 Viability
#> 42: $P42 32 LOG 0,0 APC-H7-A 4194304 CD27
#> 43: $P43 32 LOG 0,0 APC-Fire 810-A 4194304 KLRG1
#> par B DISPLAY E N R S
#> <char> <char> <char> <char> <char> <char> <char>
#> TYPE V PROJ N.alias
#> <char> <char> <fctr> <char>
#> 1: Time <NA> COVAIL_002_CYTOKINE_2025-02-27 Time
#> 2: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSC_W
#> 3: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSC_H
#> 4: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSC_A
#> 5: Forward_Scatter 40 COVAIL_002_CYTOKINE_2025-02-27 FSC_W
#> 6: Forward_Scatter 40 COVAIL_002_CYTOKINE_2025-02-27 FSC_H
#> 7: Forward_Scatter 40 COVAIL_002_CYTOKINE_2025-02-27 FSC_A
#> 8: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSCB_W
#> 9: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSCB_H
#> 10: Side_Scatter 220 COVAIL_002_CYTOKINE_2025-02-27 SSCB_A
#> 11: Unmixed_Fluorescence 258 COVAIL_002_CYTOKINE_2025-02-27 BUV395
#> 12: Unmixed_Fluorescence 523 COVAIL_002_CYTOKINE_2025-02-27 BUV496
#> 13: Unmixed_Fluorescence 535 COVAIL_002_CYTOKINE_2025-02-27 BUV563
#> 14: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 SBUV605
#> 15: Unmixed_Fluorescence 904 COVAIL_002_CYTOKINE_2025-02-27 BUV737
#> 16: Unmixed_Fluorescence 1087 COVAIL_002_CYTOKINE_2025-02-27 BUV805
#> 17: Unmixed_Fluorescence 301 COVAIL_002_CYTOKINE_2025-02-27 BV421
#> 18: Unmixed_Fluorescence 347 COVAIL_002_CYTOKINE_2025-02-27 PacificBlue
#> 19: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 SBV475
#> 20: Unmixed_Fluorescence 330 COVAIL_002_CYTOKINE_2025-02-27 BV605
#> 21: Unmixed_Fluorescence 306 COVAIL_002_CYTOKINE_2025-02-27 BV650
#> 22: Unmixed_Fluorescence 254 COVAIL_002_CYTOKINE_2025-02-27 BV711
#> 23: Unmixed_Fluorescence 327 COVAIL_002_CYTOKINE_2025-02-27 BV750
#> 24: Unmixed_Fluorescence 539 COVAIL_002_CYTOKINE_2025-02-27 BV785
#> 25: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 KIRAVIABlue520
#> 26: Unmixed_Fluorescence 639 COVAIL_002_CYTOKINE_2025-02-27 RB545
#> 27: Unmixed_Fluorescence 369 COVAIL_002_CYTOKINE_2025-02-27 RB613
#> 28: Unmixed_Fluorescence 401 COVAIL_002_CYTOKINE_2025-02-27 PerCP
#> 29: Unmixed_Fluorescence 479 COVAIL_002_CYTOKINE_2025-02-27 PerCPeFluor710
#> 30: Unmixed_Fluorescence 253 COVAIL_002_CYTOKINE_2025-02-27 RB744
#> 31: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 PerCPFire806
#> 32: Unmixed_Fluorescence 616 COVAIL_002_CYTOKINE_2025-02-27 RB780
#> 33: Unmixed_Fluorescence 312 COVAIL_002_CYTOKINE_2025-02-27 PE
#> 34: Unmixed_Fluorescence 312 COVAIL_002_CYTOKINE_2025-02-27 RY586
#> 35: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 PEDazzle594
#> 36: Unmixed_Fluorescence 358 COVAIL_002_CYTOKINE_2025-02-27 PEFire640
#> 37: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 SBY720
#> 38: Unmixed_Fluorescence 296 COVAIL_002_CYTOKINE_2025-02-27 PECy7
#> 39: Unmixed_Fluorescence 159 COVAIL_002_CYTOKINE_2025-02-27 AlexaFluor647
#> 40: Unmixed_Fluorescence 159 COVAIL_002_CYTOKINE_2025-02-27 SparkNIR685
#> 41: Unmixed_Fluorescence 0 COVAIL_002_CYTOKINE_2025-02-27 LIVEDEADScarlet
#> 42: Unmixed_Fluorescence 388 COVAIL_002_CYTOKINE_2025-02-27 APCH7
#> 43: Unmixed_Fluorescence 264 COVAIL_002_CYTOKINE_2025-02-27 APCFire810
#> TYPE V PROJ N.alias
#> <char> <char> <fctr> <char>
#> S.alias S_N.alias
#> <char> <char>
#> 1: Time Time
#> 2: SSC_W SSC_W
#> 3: SSC_H SSC_H
#> 4: SSC_A SSC_A
#> 5: FSC_W FSC_W
#> 6: FSC_H FSC_H
#> 7: FSC_A FSC_A
#> 8: SSCB_W SSCB_W
#> 9: SSCB_H SSCB_H
#> 10: SSCB_A SSCB_A
#> 11: CD45RA CD45RA_BUV395
#> 12: CD45RO CD45RO_BUV496
#> 13: TCRgd TCRgd_BUV563
#> 14: CD45BC1 CD45BC1_SBUV605
#> 15: IL2 IL2_BUV737
#> 16: CD8 CD8_BUV805
#> 17: CD197 CD197_BV421
#> 18: CD45BC2 CD45BC2_PacificBlue
#> 19: CD45BC3 CD45BC3_SBV475
#> 20: CD57 CD57_BV605
#> 21: CD193 CD193_BV650
#> 22: CD45BC4 CD45BC4_BV711
#> 23: CD127 CD127_BV750
#> 24: CD56 CD56_BV785
#> 25: CD199 CD199_KIRAVIABlue520
#> 26: CD49a CD49a_RB545
#> 27: GranzymeB GranzymeB_RB613
#> 28: CD45BC5 CD45BC5_PerCP
#> 29: CD95 CD95_PerCPeFluor710
#> 30: CD3 CD3_RB744
#> 31: CD4 CD4_PerCPFire806
#> 32: CD69 CD69_RB780
#> 33: TNFa TNFa_PE
#> 34: CD183 CD183_RY586
#> 35: IFNg IFNg_PEDazzle594
#> 36: CD103 CD103_PEFire640
#> 37: CD45BC6 CD45BC6_SBY720
#> 38: CD122 CD122_PECy7
#> 39: ia4b7 ia4b7_AlexaFluor647
#> 40: CD45BC7 CD45BC7_SparkNIR685
#> 41: Viability Viability_LIVEDEADScarlet
#> 42: CD27 CD27_APCH7
#> 43: KLRG1 KLRG1_APCFire810
#> S.alias S_N.alias
#> <char> <char>
##internal flowstate functions add a few 'alias' columns;
##they serve the purpose of renaming the columns in [['data']];
##the colnames.type argument in read.flowstate uses these alias columns;
##some combination of N and S -- made syntactically valid
##original (encoded) parameters: N and S
fs$parameters[,.(N,S)]
#> N S
#> <char> <char>
#> 1: Time <NA>
#> 2: SSC-W <NA>
#> 3: SSC-H <NA>
#> 4: SSC-A <NA>
#> 5: FSC-W <NA>
#> 6: FSC-H <NA>
#> 7: FSC-A <NA>
#> 8: SSC-B-W <NA>
#> 9: SSC-B-H <NA>
#> 10: SSC-B-A <NA>
#> 11: BUV395-A CD45RA
#> 12: BUV496-A CD45RO
#> 13: BUV563-A TCRgd
#> 14: SBUV605-A CD45BC1
#> 15: BUV737-A IL2
#> 16: BUV805-A CD8
#> 17: BV421-A CD197
#> 18: Pacific Blue-A CD45BC2
#> 19: SBV475-A CD45BC3
#> 20: BV605-A CD57
#> 21: BV650-A CD193
#> 22: BV711-A CD45BC4
#> 23: BV750-A CD127
#> 24: BV785-A CD56
#> 25: KIRAVIA Blue 520-A CD199
#> 26: RB545-A CD49a
#> 27: RB613-A GranzymeB
#> 28: PerCP-A CD45BC5
#> 29: PerCP-eFluor 710-A CD95
#> 30: RB744-A CD3
#> 31: PerCP-Fire 806-A CD4
#> 32: RB780-A CD69
#> 33: PE-A TNFa
#> 34: RY586-A CD183
#> 35: PE-Dazzle 594-A IFNg
#> 36: PE-Fire 640-A CD103
#> 37: SBY720-A CD45BC6
#> 38: PE-Cy7-A CD122
#> 39: Alexa Fluor 647-A ia4b7
#> 40: Spark NIR 685-A CD45BC7
#> 41: LIVE DEAD Scarlet-A Viability
#> 42: APC-H7-A CD27
#> 43: APC-Fire 810-A KLRG1
#> N S
#> <char> <char>
##alias columns used to rename [['data']] columns
fs$parameters[,.(N.alias,S.alias)]
#> N.alias S.alias
#> <char> <char>
#> 1: Time Time
#> 2: SSC_W SSC_W
#> 3: SSC_H SSC_H
#> 4: SSC_A SSC_A
#> 5: FSC_W FSC_W
#> 6: FSC_H FSC_H
#> 7: FSC_A FSC_A
#> 8: SSCB_W SSCB_W
#> 9: SSCB_H SSCB_H
#> 10: SSCB_A SSCB_A
#> 11: BUV395 CD45RA
#> 12: BUV496 CD45RO
#> 13: BUV563 TCRgd
#> 14: SBUV605 CD45BC1
#> 15: BUV737 IL2
#> 16: BUV805 CD8
#> 17: BV421 CD197
#> 18: PacificBlue CD45BC2
#> 19: SBV475 CD45BC3
#> 20: BV605 CD57
#> 21: BV650 CD193
#> 22: BV711 CD45BC4
#> 23: BV750 CD127
#> 24: BV785 CD56
#> 25: KIRAVIABlue520 CD199
#> 26: RB545 CD49a
#> 27: RB613 GranzymeB
#> 28: PerCP CD45BC5
#> 29: PerCPeFluor710 CD95
#> 30: RB744 CD3
#> 31: PerCPFire806 CD4
#> 32: RB780 CD69
#> 33: PE TNFa
#> 34: RY586 CD183
#> 35: PEDazzle594 IFNg
#> 36: PEFire640 CD103
#> 37: SBY720 CD45BC6
#> 38: PECy7 CD122
#> 39: AlexaFluor647 ia4b7
#> 40: SparkNIR685 CD45BC7
#> 41: LIVEDEADScarlet Viability
#> 42: APCH7 CD27
#> 43: APCFire810 KLRG1
#> N.alias S.alias
#> <char> <char>
[['keywords']]
Keywords can be accessed by name via: fs$keywords or
fs[['keywords']].
[['keywords']] contains instrument/sample-specific
metadata. The information contained here is leveraged for a number of
different actions, such as: platform/cytometer identification;
extracting and adding unique identifiers to [['data']];
adding/constructing new keywords for the purpose of analysis/workflow;
QC/diagnostics.
Following best practices as laid out by the Flow Cytometry Standard,
a series of keywords are added to mark any flowstate
object(s) as being modified – no longer source data. The inclusion of
these keywords ('$LAST_MODIFIED',
'$LAST_MODIFIER', '$ORIGINALITY') ensures
transparency and the indication that they are explicitly modified.
##
fs$keywords
#> $BTIM $CYT $CYTSN $DATE $ETIM
#> <char> <char> <char> <char> <char>
#> 1: 09:22:51.62 Aurora V0299 27-Feb-2025 09:33:47.32
#> 2: 09:38:12.18 Aurora V0299 27-Feb-2025 09:49:40.92
#> 3: 09:50:46.94 Aurora V0299 27-Feb-2025 10:03:26.16
#> $FIL $FLOWRATE $INST $LAST_MODIFIED
#> <char> <char> <char> <char>
#> 1: COVAIL_002_CYTOKINE_BLOCK1_1.fcs Medium Cytekbio 16-JAN-2026 18:46:36.80
#> 2: COVAIL_002_CYTOKINE_BLOCK1_2.fcs Medium Cytekbio 16-JAN-2026 18:46:36.82
#> 3: COVAIL_002_CYTOKINE_BLOCK1_3.fcs Medium Cytekbio 16-JAN-2026 18:46:36.84
#> $LAST_MODIFIER $OP $ORIGINALITY $PAR
#> <char> <char> <char> <char>
#> 1: aurora user DataModified 43
#> 2: aurora user DataModified 43
#> 3: aurora user DataModified 43
#> $PROJ $TIMESTEP $TOT $VOL APPLY COMPENSATION
#> <char> <char> <char> <char> <char>
#> 1: COVAIL_002_CYTOKINE_2025-02-27 0.0001 2000 326.86 FALSE
#> 2: COVAIL_002_CYTOKINE_2025-02-27 0.0001 2000 346.31 FALSE
#> 3: COVAIL_002_CYTOKINE_2025-02-27 0.0001 2000 350.19 FALSE
#> CHARSET CREATOR FSC ASF GROUPNAME
#> <char> <char> <char> <char>
#> 1: utf-8 SpectroFlo 3.3.0 1.26 BarcodedPool
#> 2: utf-8 SpectroFlo 3.3.0 1.26 BarcodedPool
#> 3: utf-8 SpectroFlo 3.3.0 1.26 BarcodedPool
#> GUID LASER1ASF LASER1DELAY LASER1NAME
#> <char> <char> <char> <char>
#> 1: 0fffcae2-2163-49f9-98a3-8f17bb4ecc13 1.14 -41.7 YellowGreen
#> 2: 6ff1ded1-96f6-4784-8a70-3cbef2e01427 1.14 -41.7 YellowGreen
#> 3: 2c9682b4-473f-4375-a851-48f9f2fe3bf7 1.14 -41.7 YellowGreen
#> LASER2ASF LASER2DELAY LASER2NAME LASER3ASF LASER3DELAY LASER3NAME LASER4ASF
#> <char> <char> <char> <char> <char> <char> <char>
#> 1: 1.26 -20.375 Violet 1.18 0 Blue 1.14
#> 2: 1.26 -20.375 Violet 1.18 0 Blue 1.14
#> 3: 1.26 -20.375 Violet 1.18 0 Blue 1.14
#> LASER4DELAY LASER4NAME LASER5ASF LASER5DELAY LASER5NAME
#> <char> <char> <char> <char> <char>
#> 1: 20.675 Red 1.08 41.675 UV
#> 2: 20.675 Red 1.08 41.675 UV
#> 3: 20.675 Red 1.08 41.675 UV
#> THRESHOLD TUBENAME USERSETTINGNAME
#> <char> <char> <char>
#> 1: (FSC,150000)And(SSC,75000) COVAIL_002_CYTOKINE_BLOCK1_1 *COVAIL_CYTOKINE
#> 2: (FSC,150000)And(SSC,75000) COVAIL_002_CYTOKINE_BLOCK1_2 *COVAIL_CYTOKINE
#> 3: (FSC,150000)And(SSC,75000) COVAIL_002_CYTOKINE_BLOCK1_3 *COVAIL_CYTOKINE
#> WINDOW EXTENSION
#> <char>
#> 1: 3
#> 2: 3
#> 3: 3
##some identifiers
fs$keywords[,.(`$CYT`,TUBENAME)]
#> $CYT TUBENAME
#> <char> <char>
#> 1: Aurora COVAIL_002_CYTOKINE_BLOCK1_1
#> 2: Aurora COVAIL_002_CYTOKINE_BLOCK1_2
#> 3: Aurora COVAIL_002_CYTOKINE_BLOCK1_3
##keywords to indicate/track modification
fs$keywords[,.(`$LAST_MODIFIED`,`$LAST_MODIFIER`,`$ORIGINALITY`)]
#> $LAST_MODIFIED $LAST_MODIFIER $ORIGINALITY
#> <char> <char> <char>
#> 1: 16-JAN-2026 18:46:36.80 DataModified
#> 2: 16-JAN-2026 18:46:36.82 DataModified
#> 3: 16-JAN-2026 18:46:36.84 DataModified
[['spill']]
Spill can be accessed by name via: fs$spill or
fs[['spill']].
[['spill']] contains an instrument/sample-specific
spill(over) matrix – if encoded. It can be modified with correction
values that are then applied to [['data']] to (try to) fix
unmixing/compensation errors. Unless explicitly modified by a user, the
default matrix should not contain any correction values.
N.B.: software manufacturers – at least SpectroFlo – write a small value (1E-6) to the first matrix pair; I think this is to overcome a bug with how FlowJo handles the matrix…
##
fs$spill |> head()
#> CD45RA_BUV395 CD45RO_BUV496 TCRgd_BUV563 CD45BC1_SBUV605 IL2_BUV737
#> <num> <num> <num> <num> <num>
#> 1: 1e+00 0 0 0 0
#> 2: 1e-06 1 0 0 0
#> 3: 0e+00 0 1 0 0
#> 4: 0e+00 0 0 1 0
#> 5: 0e+00 0 0 0 1
#> 6: 0e+00 0 0 0 0
#> CD8_BUV805 CD197_BV421 CD45BC2_PacificBlue CD45BC3_SBV475 CD57_BV605
#> <num> <num> <num> <num> <num>
#> 1: 0 0 0 0 0
#> 2: 0 0 0 0 0
#> 3: 0 0 0 0 0
#> 4: 0 0 0 0 0
#> 5: 0 0 0 0 0
#> 6: 1 0 0 0 0
#> CD193_BV650 CD45BC4_BV711 CD127_BV750 CD56_BV785 CD199_KIRAVIABlue520
#> <num> <num> <num> <num> <num>
#> 1: 0 0 0 0 0
#> 2: 0 0 0 0 0
#> 3: 0 0 0 0 0
#> 4: 0 0 0 0 0
#> 5: 0 0 0 0 0
#> 6: 0 0 0 0 0
#> CD49a_RB545 GranzymeB_RB613 CD45BC5_PerCP CD95_PerCPeFluor710 CD3_RB744
#> <num> <num> <num> <num> <num>
#> 1: 0 0 0 0 0
#> 2: 0 0 0 0 0
#> 3: 0 0 0 0 0
#> 4: 0 0 0 0 0
#> 5: 0 0 0 0 0
#> 6: 0 0 0 0 0
#> CD4_PerCPFire806 CD69_RB780 TNFa_PE CD183_RY586 IFNg_PEDazzle594
#> <num> <num> <num> <num> <num>
#> 1: 0 0 0 0 0
#> 2: 0 0 0 0 0
#> 3: 0 0 0 0 0
#> 4: 0 0 0 0 0
#> 5: 0 0 0 0 0
#> 6: 0 0 0 0 0
#> CD103_PEFire640 CD45BC6_SBY720 CD122_PECy7 ia4b7_AlexaFluor647
#> <num> <num> <num> <num>
#> 1: 0 0 0 0
#> 2: 0 0 0 0
#> 3: 0 0 0 0
#> 4: 0 0 0 0
#> 5: 0 0 0 0
#> 6: 0 0 0 0
#> CD45BC7_SparkNIR685 Viability_LIVEDEADScarlet CD27_APCH7 KLRG1_APCFire810
#> <num> <num> <num> <num>
#> 1: 0 0 0 0
#> 2: 0 0 0 0
#> 3: 0 0 0 0
#> 4: 0 0 0 0
#> 5: 0 0 0 0
#> 6: 0 0 0 0
##small value; there in the source data
fs$spill[2,1]
#> CD45RA_BUV395
#> <num>
#> 1: 1e-06