JinmiaoChenLab / cytofkit

cytofkit: an integrated flow/mass cytometry data analysis pipeline
http://jinmiaochenlab.github.io/cytofkit/
57 stars 24 forks source link

cytofkit analyzed FCS files corrupted #67

Open cjcostoya opened 5 years ago

cjcostoya commented 5 years ago

Hey guys,

I'm having problems with the analyzed FCS files generated by cytofkit. When I load them into FlowJo, around a 1/3 of the files will crash the FlowJo software. If I try to concatenate the corrupted fcs files with healthy fcs files, the new concatenated fcs will have some channels with a range of 1. The corrupted files will still have all the channels and can see their plots (dot plots, tsne, etc) with no problems. Any ideas?

SamGG commented 5 years ago

Hi, Could you share one corrupted FCS and one not corrupted? Best.

cjcostoya commented 5 years ago

Thanks for looking into this. KO1-> Healthy KO3-> Corrupted

Cheers.

cytofpipe_analyzedFCS.zip

SamGG commented 5 years ago

No crash with FlowJO 10.5.3 Some few warnings with http://bioinformin.cesnet.cz/flowIO/. Eyes examination seems also OK. Let me know if KO3 is really crashing FJ when you open the exact files you shared. Best.

cjcostoya commented 5 years ago

Sorry Sam, I didn't mention in the original issue that FlowJo crashes only when you try to inspect the corrupted file. Let me know if it happens to you as well. Cheers.

SamGG commented 5 years ago

Hi, Right, the inspect call crashes FJ in my version as well. I tried to check what's going wrong, but I have no clue. No problem with flowCore. I conclue that this an error specific to FlowJo. You should contact the support of FlowJo. Best.

library(flowCore)

setwd("c:/demo/cytofkit_bug/")

ko1 = read.FCS("cytofkit_Tube_001_KO1.fcs", transformation = F, 
truncate_max_range = F, min.limit = NULL)
ko1

ko3 = read.FCS("cytofkit_Tube_003_KO3.fcs", transformation = F, 
truncate_max_range = F, min.limit = NULL)
ko3

# print description keywords that are different
idx = sapply(Map(rbind,ko1@description, ko3@description), function(x) x[[1]] == x[[2]])
Map(rbind,ko1@description, ko3@description)[!idx]

# check the range of each channel
res = cbind(cbind(fcs = "ko1", as.data.frame(summary(exprs(ko1)))), 
cbind(fcs = "ko3", as.data.frame(summary(exprs(ko3)))))
View(res)