Re: formula log to linear??

From: Eric Van Buren (aa9080@wayne.edu)
Date: Thu Jul 01 1999 - 10:59:35 EST


>Hello to All,
>
>There is a simple formula for converting log data to linear, and I have
>forgotten.  If anyone remembers this I would appreciate a quick note.
>Thanks.
>
>Jim Phillips
>University of Miami School  of Medicine
>Miami, Fla.

Jim Phillips,

I always forget this formula, too, so I re-derive it everytime I need it.

Correct me if I'm wrong, but when you say "log data" I assume you mean
signals that were logarithmically amplified electronically before
digitization, and is now represented on a linear (!) "channel numbers"
scale. The point of the conversion is to replace the misleading channel
numbers with "linear values" or "linear equivalents" that properly relate
the log distribution, i.e., channel 20 is not twice as bright as channel
10, but 20 linear values is twice as bright as 10 linear values.

<-0-----256-----512-----768----1024-> channel numbers
<-+-------+-------+-------+-------+->
<-1------10-----100----1000---10000-> linear values

The first step is to normalize the channel numbers scale. Divide your log
data (in channel numbers), c,  by the maximum number of channels, M: c/M.
(M is usually 256 or 1024 for most cytometers.) Since c can be any integer
between 0 and M, including 0 but excluding M, written [0,M), c/M is a
rational number on the range [0,1).

Next, multiply by the number of "decades", D, used in the logarithmic
amplifier. (D is usually 3 or 4 for most cytometers.) Each "power of ten"
on the log scale is another decade, for example 10^0 to 10^1 is one decade,
10^1 to 10^2 is another decade, and 10^0 to 10^4 is 4 decades. Our function
is now D*(c/M), which has a range of [0,D).

Last, take the antilog base 10 to end up in linear values, v: v=10^(D*c/M).
Since 10^0=1, our range is now [1,10^D).

Let's plug in some numbers to see how this works. I'll use M=1024 maximum
channels and D=4 decades.

c=0,    v=10^(4*0/1024)=10^0=1
c=256,  v=10^(4*256/1024)=10^1=10
c=512,  v=10^(4*512/1024)=10^2=100
c=1024, v=10^(4*1024/1024)=10^4=10,000
(c is never equal to M, as in this last example, but using c=1023 gets messy.)

>From the middle two conversions, we see that comparing c=256 to c=512 in
linear values (v=10 and v=100, respectively) results in a 10-fold
difference (100/10), whereas 512/256 incorrectly shows only a 2-fold
difference.

The inverse function that converts linear values to channel numbers can be
readily derived from the function above, or similarly derived "from
scratch" as above. It is c=(M/D)*log(v), where log() represents log base 10.

In summary,
v=10^(D*c/M), c=(M/D)*log(v)
c=channel number, v=linear value, D=decades, M=maximum channels

These converstion formulas assume that your log amplifier and ADC are both
properly calibrated. Don't compare two sets of data if they were acquired
with different instrument settings, like PMT voltage, compensation, or log
offset; these formulas do not account for these changes. I think Abe
Schwartz from Flow Cytometry Standards Corporation best explained how to
derive the actual formula for how your particular system is performing
using beads, but I don't have the reference handy.

/\/\/\_ Eric Van Buren, aa9080@wayne.edu
\ \ \   Karmanos Cancer Institute and Immunology & Microbiology
 \_^_/  Wayne State University, Detroit, Michigan, USA



This archive was generated by hypermail 2b29 : Wed Apr 03 2002 - 11:53:40 EST