00001
00002
00003 #ifndef FILTERNETCDF_H
00004 #define FILTERNETCDF_H
00005
00006 #include <qstring.h>
00007 #include <qstringlist.h>
00008
00009 #include <netcdf.h>
00010
00011 struct ncdim {
00012 char name[NC_MAX_NAME];
00013 size_t size;
00014 };
00015
00016 struct ncvar {
00017 char name[NC_MAX_NAME];
00018 nc_type type;
00019 int ndims;
00020 int dims[MAX_VAR_DIMS];
00021 int natts;
00022 bool has_fillval;
00023 double fillval;
00024 };
00025
00026 struct ncatt {
00027 int var;
00028 char name[NC_MAX_NAME];
00029 nc_type type;
00030 size_t len;
00031 char *string;
00032 double *vals;
00033 };
00034
00035 class FilterNETCDF
00036 {
00037 public:
00038 FilterNETCDF(QString filename=0);
00039 bool fileOK() { return fileok; }
00040 QString version() { return QString(nc_inq_libvers());}
00041 int NDims() { return ndims; }
00042 int NVars() { return nvars; }
00043 int NAtts() { return natts; }
00044 int DimId() { return xdimid; }
00045 QString Dim(int dimid);
00046 QString Var(int varid);
00047 QString VarName(int varid);
00048 QString Att(int aid) { return pr_att(ncid, NC_GLOBAL, "", aid); }
00049 int VarLen(QString var);
00050 QStringList DataString(int varid);
00051 double Data(QString var,const size_t index);
00052 protected:
00053 QString typeName(nc_type type);
00054 QString pr_att_string(size_t len,const char *string);
00055 QString pr_att_vals(nc_type type,size_t len,const double *vals);
00056 QString pr_att(int ncid,int varid,const char *varname, int ia);
00057 private:
00058 QString filename;
00059 bool fileok;
00060 int ncid, ndims, nvars, natts, xdimid;
00061 ncdim dims[NC_MAX_DIMS];
00062 };
00063
00064 #endif //FILTERNETCDF_H