PeakWright / Guides / Reading .uv DAD data
Reading .uv DAD data without a licence
This is the hard one. A .uv file holds a full spectrum at every time point, and it
is the Agilent file that free tools handle worst. If your diode array question has gone
unanswered on a forum for years, this is why.
What a .uv file is
A normal chromatogram is a list: one signal value per time point. A diode array detector does
not measure one wavelength, it measures a range of them at once. So a .uv stores,
for every time point, the absorbance across every wavelength that was recorded.
That makes it a surface rather than a line. Time on one axis, wavelength on the other,
absorbance as the height. It is the reason a .uv is often several megabytes where
the equivalent .ch is a few hundred kilobytes.
This is also why diode array data is worth keeping. A single wavelength trace answers one question. The full array lets you ask later whether two peaks that co-eluted are actually the same compound, which you cannot do once someone has exported you a single channel.
Why it is harder than a .ch
Two reasons, and both are about the shape of the data rather than any protection on it.
- It is two dimensional. A reader has to work out the wavelength axis as well as the time axis: where it starts, where it ends, and the step between points. Get that wrong and every spectrum is labelled with the wrong wavelengths.
- It is big. An 8 MB file holds roughly a million values. Anything that reads it carelessly is slow, and anything that holds several of them at once runs out of memory.
Because of that, most free tooling started with .ch and got to .uv
later. Several projects still describe their diode array support as experimental, which is an
honest label rather than a criticism.
Which versions exist
| Version | Header | From |
|---|---|---|
| 31 | Short header, single byte strings | Legacy ChemStation. |
| 131 | Longer header, UTF-16 strings | Later ChemStation and OpenLab. |
Both are read by open tools today. The layout of each, including the offsets that were measured rather than published, is written down in the format reference.
What works today
A browser viewer, for a look
The viewer on this site reads .uv versions 31 and 131 and draws
the trace, in your own tab, with the file never leaving your machine. That last part matters
more with diode array data than with anything else, because these files are large and people
are reluctant to upload them.
Be honest about what a viewer gives you: a picture and the numbers behind it. It is not a replacement for a data system.
rainbow, for Python
rainbow reads Agilent
.uv data along with .ch and .ms, and installs with
pip install rainbow-api. If you want the full array as a matrix to work on, this
is the most direct route and nothing here improves on it.
chromConverter, for R
chromConverter handles ChemStation
and OpenLab .uv files in versions 131 and 31. Some of its formats go through
external tools you install separately, so check which route yours takes.
OpenChrom, for a full application
OpenChrom imports Agilent diode array data through a converter plugin. Its own documentation has described DAD and UV support as experimental, so treat it as promising rather than settled, and check your result against something else before you rely on it.
The thing you probably want
Most of the time the question is not "give me the whole array", it is "show me the trace at 254
nanometres". Once a .uv is decoded, any recorded wavelength can be pulled out and
read as an ordinary chromatogram. That is exactly what ChemStation does when it shows you one
trace from diode array data.
If that is your situation, check the .D folder first. Many methods write a
.ch for the wavelengths of interest alongside the .uv, and reading
the .ch is simpler and faster. See
what is inside a .D folder.
One caution about size. A multi hour run at a fine wavelength step produces
a very large array, and any tool that holds all of it in memory will feel it. If a
.uv is slow to open, that is the shape of the file rather than something being
wrong.
Getting the numbers out
Exporting a two dimensional array to CSV needs a decision about layout: one row per time point with a column per wavelength, or a long format with three columns. Which one you want depends entirely on what reads it next. There is more on this in getting ChemStation data into CSV.
Try it on your .uv
Drop the file in and see whether it reads. It runs in your browser, so nothing is uploaded, and if the file is a version we do not handle you get a clear message rather than a wrong chromatogram.
PeakWright is not affiliated with or endorsed by Agilent Technologies. "ChemStation" and "OpenLab" are their trademarks.