cytoqc – A QC tool for openCyto

cytoqc performs pre-cleaning, pre-gating and post-gating QC checks.

library(flowCore)
library(flowWorkspace)
library(cytoqc)

Load the FCS

files <- list.files(data_dir, ".fcs", full.names = TRUE)
cq_data <- cq_load_fcs(files)
cq_data
## cytoqc data: 
## 21  samples

Determine the reference

reference <- cq_params_find_reference(cq_data, type = "channel")
paste(reference, collapse = ", ")
## [1] "FL1-H, FL2-A, FL2-H, FL3-H, FL4-H, FSC-H, SSC-H, Time"

QC check

check_results <- cq_params_check(cq_data, reference, type = "channel")
format(check_results)

FCS

unknown

missing

s6a01.fcs

fsc-h

FSC-H,Time

s6a02.fcs

SSC1-H,channelA

SSC-H

s6a03.fcs

fsc-h,SSC1-H

FSC-H,SSC-H

Recommend the fix

solution <- cq_param_fix_solution(check_results) 
format(solution)

Proposed change

fsc-h –> FSC-H

SSC1-H –> SSC-H

Show the itemized details

format(solution, itemize = TRUE)

FCS

Proposed change

s6a01.fcs

fsc-h –> FSC-H

s6a02.fcs

SSC1-H –> SSC-H

s6a03.fcs

fsc-h –> FSC-H

SSC1-H –> SSC-H

Export/import the solution for revision (if needed)

library(readr)
write_csv(solution, csvfile)
#manually edit csvfile and load it back
solution_revised <- read_csv(csvfile)

Apply the fix

cq_params_fix(cq_data, solution)

Update QC report

check_results <- cq_params_check(cq_data, reference, type = "channel")
format(check_results)

FCS

unknown

missing

s6a01.fcs

Time

s6a02.fcs

channelA

Drop redundant channel

cq_data <- cq_params_drop_redundant(cq_data, check_results)

Refresh QC report and drop the samples that still can not be fixed

check_results <- cq_params_check(cq_data, reference, type = "channel")
format(check_results)

FCS

unknown

missing

s6a01.fcs

Time

cq_data <- cq_drop_samples(cq_data, check_results)
length(cq_data)
## [1] 20

QC for marker

reference <- cq_params_find_reference(cq_data, type = "marker")
check_results <- cq_params_check(cq_data, reference, type = "marker")
format(check_results)