LTR ships with a set of I/O clases in LFM-para/src/startup. We can use the "Io" and "Hdf4" classes to read LFM or MIX data. See below for example code.
#include <iostream>
#include <map>
#include <string>
#include "Hdf4.h"
using namespace std;
int main(int argc, char **argv)
{
// Open the file for reading
Hdf4 io;
io.open(string("z_mhd_0000000.hdf"), IO::READ);
// Allocate & read a variable. You can do this in two ways:
// 1. Use A++:
floatArray bx;
io.readVariable(string("bx_"), bx);
// 2. Use C++:
int dims[3] = {bx.getLength(0), bx.getLength(1), bx.getLength(2)};
float *by = new float[dims[0]*dims[1]*dims[2]];
int inRank;
int *inDims;
io.readVariable(string("by_"), by, inRank, inDims);
// If you want to get fancy, you can read attributes like so:
map<string, double> inMetaDoubles;
map<string, float> inMetaFloats;
map<string, int> inMetaInts;
map<string, string> inMetaStrings;
io.readMetaData(inMetaDoubles, inMetaFloats, inMetaInts, inMetaStrings);
// now you can access the attributes like so:
cout << "Modified Julian Date is: " << inMetaFloats["mjd"] << endl;
// Don't forget to close a file when you're done with it!
io.close();
return 0;
}
Note you'll need to compile this somehow. Here's an example Makefile to give you some ideas:
# Include compiler information
include ../../../env/Make.${MACHINE}
CXXFLAGS= -DAPLUSPLUS \
-I$(A++)/include \
-I$(HDF)/include
LIBS= -L$(A++)/lib -lApp -lApp_static \
-L$(HDF)/lib -lmfhdf -ldf -ljpeg -lz
ioDemo: Hdf4.o ioDemo.o
$(CXX) -o $@ Hdf4.o ioDemo.o $(EXTRA_LIBS) $(LIBS)