The Odin/OSIRIS data products are distributed as HDFEOS-5 data files.  We have used a filenaming convention and internal structure modelled upon the AURA satellite data products. If you can read (official) AURA data products it should not be a big jump to read Odin-OSIRIS data products.  The Odin mission is one of ESA's third party missions and we recommend users employ ESA's CODA software to read our data products. Make sure you are using CODA version 2.4 (Feb 2012) or higher as we have seen a few issues with earlier versions. The Odin-OSIRIS processing center has very limited resources to help users debug any software issues but the CODA developers are very helpful. CODA is designed to be easy to use. For example in MATLAB (that's what we use at the OSIRIS Processing Center) an Odin-OSIRIS HDFEOS file is read with the following code,

MATLAB>> fhd = coda_open(filename);
MATLAB>> data = coda_fetch(fhd);
MATLAB>> coda_close(fhd);

Matlab Reader

If you use Matlab and are looking for a native Odin-OSIRIS HDFEOS file reader then we have the solution for you.The code snippet below uses the builtin HDF5 support to read the data in the swaths. Give it the name of a Odin-OSIRIS HDFEOS file and it will load the swaths. Examine variable data upon return and it should be self evident how the function works. You can also get the source code here.

function [data] = LoadHDFEOSFile( filename )

    swathinfo =  h5info(filename, '/HDFEOS/SWATHS');
    variables = L_LoadGroupVariables( filename, swathinfo);
    nvar  = numel(variables);
    data = [];
    if (nvar > 0)
        for i = 1:nvar
            name = variables{i}.name;
            data.(name) = variables{i}.value;
            bad = (data.(name) == -9999.0);
            data.(name)(bad) = NaN;

function [v] = L_LoadDataSet( filename, groupname, dataset )

    entry       = [];
    datasetname = [ groupname, '/',dataset.Name];
    value       = h5read( filename, datasetname );  = dataset.Name;
    entry.value = value;
    v           = {entry};

function [variables] = L_LoadGroupVariables( filename, group)

    variables = {};
    for i = 1: numel(group.Groups)
        [v] = L_LoadGroupVariables( filename, group.Groups(i));   
        variables = [variables; v];
    for i = 1: numel(group.Datasets)
        v = L_LoadDataSet( filename, group.Name, group.Datasets(i) );
        variables = [variables; v];

Fortran, C/C++, IDL, Python (and Matlab)

IDL and Python have support for HDF5 and it should be possible to write generic readers similar to the Matlab example above. Fortran and C users can get the HDF5 and the HDFEOS APIs directly  and code away. Alternatively you can use the CODA software which is supported by ESA.


You might want to check out HDFView as it is a useful diagnostic tool to make sure you have read file correctly. We use it all the time.