Exporting FCS from FlowJo for flowCore & cytofkit analysis
Entering edit mode
vsmuir ▴ 10
Last seen 5.6 years ago

Scientists that perform the benchwork and acquisition of flow cytometry data at my institute export FCS files from FlowJo after both compensating the data and removing dead cells/populations that are not of interest.  This data is then delivered to our computational group for additional analysis.  I'm a relative novice when it comes to flow data, and I have a couple of general questions about shifting the data from FlowJo to R and performing the pre-processing steps. 

The biexponential transformation is applied to some of the data when our wet-lab folks open and start gating the data.  The exported FCS files then often end up with some markers being transformed (sometimes this affects the most recently opened marker alone, sometimes this affects nearly all of the markers).  When the analysts receive the data, we generally want one transformation (typically either logicle or asinh with b=1/150) applied to each of the markers.  Clearly, we do not want to double-transform any of the data.

1.  Does transformation = "linearize" in read.FCS only act on data that are stored with different exponentiation?  I've received some compensated and compensated + transformed files that are identical when read in with transformation = F.  These files' expression values differ when imported using transformation = "linearize", but the output of keyword($P¡n¿E) looks the same for both files.  

2.  Is there a way to remove FlowJo's transformations from the exported FCS files?  Alternatively, is there a way to select the portion of the data for export and then remove all transformations in FlowJo?

3.  Are there best practices when exporting from FlowJo before importing with flowCore or analyzing with the core cytofkit function (i.e. options which should always be checked or methods cleaning/prepping data that won't change just a subset of the data)?  We'd like to avoid bringing in partially-transformed data with boundary events and other noise, but we would like to be able to hone in on our population of interest without asking a whole new set of people to apply gates to the data (particularly since we occasionally work with rare populations that aren't amenable to automatic gating).

4.  Can we trust that the compensation has been appropriately applied to all of the markers in FlowJo, or should we (re)apply compensation once the data is in R?

5.  I've read that, at least for CyTOF data, it's important to standardize marker values to z-scores or something similar in order to prevent markers with a higher dynamic range from dominating downstream clustering/dimension reduction.  Is this also true for flow data?


flowcore flow cytometry cytofkit • 2.2k views
Entering edit mode

I recently encountered a very similar situation, where my fcs files were exported from FlowJo after some pre-gating, supposedly without transformation. When i use FlowCore's read.fcs(), it linearized some of my markers but not others. My keyword output looks like this:

$P1E "0,0"

$P2E "0,0"

$P3E "0,0"

$P4E "5.22472,100"

And after linearization, the values got very small, e.g. from 794205 to 1.7

As you can imagine, the markers that got transformed had very tight distribution, mostly under 1 with a few outliners around 10. 

I was wondering if anyone can tell me how exactly the P2E linearization is done... and in may case, should I skip the linearization? thanks


Entering edit mode
SamGG ▴ 300
Last seen 7 days ago


I will give you quick answers, letting place for improvements by others more qualified than I am.

1. IIRC, linearize transform data linearly such that minimal value is zero and maximal is one. I always set transformation to FALSE.

2. If export is FCS v2, data are usually compensated and transformed. Use export in FCS 3, that preserves raw data with high definition and compensation matrix. Then you will have do compensate the data and transform them.

3. You can ask experimentalists to do data cleaning (ie pre-gating) in order to get confident with the rest of the pipeline you are going to develop, but OpenCyto is a very good alternative. As OpenCyto aims at reproducing and automating a manual gating strategy, it should be able to gate correctly rare populations.

4. I think commercial software do a good job at computing compensation. Their graphical interface allows experimentalists to check the coefficients and modify them if it is really necessary. I trust such compensations unless I have the feeling that I observe very strange patterns in 2D plots.

5. IMHO this is true also, but probably not too a large extent, as it's to me that nobody correct it. z-scores (ie subtract mean, divide by sd) is not a good correction, and I would prefer a linearize transformation (after compensation of course).

If you are interesting in exporting FCS from FlowJo you should consider reading the documentation of flowWorkspace and OpenCyto.


Entering edit mode

Here is the related post regarding to linearization https://github.com/RGLab/flowCore/issues/99

Entering edit mode

Regarding your #1, i think you are talking about scaling that change data to 0-1. 

Transformation = "linearize" in read.FCS is changing data to linear, which doesnt have to be in the range of 0-1


Login before adding your answer.

Traffic: 412 users visited in the last hour
Help About
Access RSS

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6