Kodak documents the Cineon file quite carefully. Each number in the file is supposed to represent .002 times the base-10 logarithim of the density of the film. They also document that the negative's density is proportional to the amount of light that struck the film raised to a power called the "gamma" of the film, which is about .6. There is also a "base" density that is added to this value (unexposed film does not have zero density) but normally the Cineon scanner or software is adjusted to subtract this during scanning. There is also very non-proportional roll-off sections of the transfer function at the top and bottom, but I will ignore them here, it turns out that you can't do much better with them anyway.

Therefore you should be able to recreate the original light levels by converting each number x in the file with pow(10.0,(x-W)*.002/gamma). In this function W is the "whitepoint" which is the value from the file that you want to turn into 1.0 on the screen. Kodak also recommends a value of 685 for this. Since zero exposure cannot be represented, the lowest value in the file turns into a non-zero value.

Lots of software tries to convert straight to sRGB by a power function. This cannot match, as the slope at the low end is zero, while the slope of the exposure that produced the Cineon file is always positive:

*Green: "correct" Cineon conversion followed by sRGB:*
to_sRGB(pow(10,(x-685)*.002/.6))
*Red: typical conversion:* pow(x/685,1/.6)