I am currently implementing some features for working with logarithmic flow cytometry data in python and have been using the flowCore library and the FCS3.1 specification as guidelines.

The linearization of logarithmic channels depend on the $PnE parameter, which contains f1 and f2. F1 specifies the log range and f2 the minimal value on the linearized scale matching the zero value on the log scale. (This can be referenced in the FCS3.1 documentation.)

Thus a sample value can be calculated via 10^(x*f1/range) * f2. This is also given as an example in the FCS3.1 documentation.

In flowCore this is implemented as 10^((x*f1/range)*f2). This would - in my understanding - wrongly scale the obtained log scale values. Eg an f2 minimum of 0.1 could only map to 1 on the scale. Which does not seem correct.

Here the source code snipplet for reference: dat[,i] <- 10^((dat[,i]/range[i])*ampli[i,1])

Is the implementation in flowCore wrong or are the examples in the FCS3.1 guidelines wrong?

I am not sure, whether this is the correct place for a bug report. I would be glad for any help in this issue.