MISR Toolkit  1.5.1
MtkFileGridFieldToDataType.c
Go to the documentation of this file.
1 /*===========================================================================
2 = =
3 = MtkFileGridFieldToDataType =
4 = =
5 =============================================================================
6 
7  Jet Propulsion Laboratory
8  MISR
9  MISR Toolkit
10 
11  Copyright 2005, California Institute of Technology.
12  ALL RIGHTS RESERVED.
13  U.S. Government Sponsorship acknowledged.
14 
15 ============================================================================*/
16 
17 #include "MisrFileQuery.h"
18 #include "MisrUtil.h"
19 #include "MisrError.h"
20 #include <stdlib.h>
21 #include <mfhdf.h>
22 #include <HdfEosDef.h>
23 
38  const char *filename,
39  const char *gridname,
40  const char *fieldname,
42 {
43  MTKt_status status; /* Return status */
44 
45  status = MtkFileGridFieldToDataTypeNC(filename, gridname, fieldname, datatype); // try netCDF
46  if (status != MTK_NETCDF_OPEN_FAILED) return status;
47 
48  return MtkFileGridFieldToDataTypeHDF(filename, gridname, fieldname, datatype); // try HDF
49 }
50 
52  const char *filename,
53  const char *gridname,
54  const char *fieldname,
56 {
57  MTKt_status status;
58  MTKt_status status_code;
59  int ncid = 0;
60 
61  if (filename == NULL) MTK_ERR_CODE_JUMP(MTK_NULLPTR);
62 
63  /* Open file */
64  {
65  int nc_status = nc_open(filename, NC_NOWRITE, &ncid);
67  }
68 
69  /* Read data type for the field. */
70  status = MtkFileGridFieldToDataTypeNcid(ncid, gridname, fieldname, datatype);
71  MTK_ERR_COND_JUMP(status);
72 
73  /* Close file */
74  {
75  int nc_status = nc_close(ncid);
77  }
78  ncid = 0;
79 
80  return MTK_SUCCESS;
81 
82  ERROR_HANDLE:
83  if (ncid != 0) nc_close(ncid);
84  return status_code;
85 }
86 
88  const char *filename,
89  const char *gridname,
90  const char *fieldname,
92 {
93  MTKt_status status_code; /* Return status of this function */
94  intn status; /* HDF-EOS return status */
95  int32 fid = FAIL; /* HDF-EOS file identifier */
96 
97  if (filename == NULL)
99 
100  fid = GDopen((char *)filename, DFACC_READ);
102 
103  /* Read data type for the field. */
104  status = MtkFileGridFieldToDataTypeFid(fid, gridname, fieldname, datatype);
105  MTK_ERR_COND_JUMP(status);
106 
107  status = GDclose(fid);
109 
110  return MTK_SUCCESS;
111 
112 ERROR_HANDLE:
113  if (fid != FAIL) GDclose(fid);
114  return status_code;
115 }
116 
123  int32 fid,
124  const char *gridname,
125  const char *fieldname,
127 {
128  MTKt_status status_code; /* Return status of this function */
129  intn status; /* HDF-EOS return status */
130  int32 gid = FAIL; /* HDF-EOS grid identifier */
131  int32 hdf_datatype; /* HDF-EOS datatype number */
132  int32 rank; /* Not used */
133  int32 dims[10]; /* Not used */
134  char dimlist[80]; /* Not used */
135  char *basefield = NULL; /* Base fieldname */
136  int nextradims; /* Number of extra dimensions */
137  int *extradims = NULL; /* Extra dimension list */
138 
139  if (gridname == NULL ||
140  fieldname == NULL || datatype == NULL)
142 
143  gid = GDattach(fid, (char *)gridname);
145 
146  status = MtkParseFieldname(fieldname, &basefield, &nextradims, &extradims);
147  MTK_ERR_COND_JUMP(status);
148 
149  status = GDfieldinfo(gid, basefield, &rank, dims, &hdf_datatype, dimlist);
151 
152  status = GDdetach(gid);
154 
155  status = MtkHdfToMtkDataTypeConvert(hdf_datatype, datatype);
156  MTK_ERR_COND_JUMP(status);
157 
158  free(basefield);
159  free(extradims);
160  return MTK_SUCCESS;
161 
162 ERROR_HANDLE:
163  if (gid != FAIL) GDdetach(gid);
164  if (basefield != NULL) free(basefield);
165  if (extradims != NULL) free(extradims);
166  return status_code;
167 }
168 
170  int ncid,
171  const char *gridname,
172  const char *fieldname,
174 {
175  MTKt_status status_code; /* Return status of this function */
176  intn status; /* HDF-EOS return status */
177  char *basefield = NULL; /* Base fieldname */
178  int nextradims; /* Number of extra dimensions */
179  int *extradims = NULL; /* Extra dimension list */
180 
181  if (gridname == NULL ||
182  fieldname == NULL || datatype == NULL)
184 
185  status = MtkParseFieldname(fieldname, &basefield, &nextradims, &extradims);
186  MTK_ERR_COND_JUMP(status);
187 
188  int group_id;
189  {
190  int nc_status = nc_inq_grp_ncid(ncid, gridname, &group_id);
192  }
193 
194  MTKt_ncvarid var;
195  status = MtkNCVarId(group_id, basefield, &var);
196  MTK_ERR_COND_JUMP(status);
197 
198  nc_type nc_datatype;
199  {
200  int nc_status = nc_inq_vartype(var.gid, var.varid, &nc_datatype);
202  }
203 
204  status = MtkNcToMtkDataTypeConvert(nc_datatype, datatype);
205  MTK_ERR_COND_JUMP(status);
206 
207  free(basefield);
208  free(extradims);
209  return MTK_SUCCESS;
210 
211 ERROR_HANDLE:
212  if (basefield != NULL) free(basefield);
213  if (extradims != NULL) free(extradims);
214  return status_code;
215 }
MTKt_status MtkFileGridFieldToDataTypeHDF(const char *filename, const char *gridname, const char *fieldname, MTKt_DataType *datatype)
MTKt_status MtkNcToMtkDataTypeConvert(nc_type nc_datatype, MTKt_DataType *datatype)
nc_type
Definition: netcdf.h:253
HDFFCLIBAPI _fcd _fcd intf intf * datatype
int32 GDattach(int32, char *)
#define DFACC_READ
Definition: hdf.h:44
char * filename
Definition: cdjpeg.h:133
intn GDclose(int32)
MTKt_DataType
Definition: MisrUtil.h:36
HDFFCLIBAPI void intf dims[]
MTKt_status MtkParseFieldname(const char *fieldname, char **basefieldname, int *ndim, int **dimlist)
Parses extra dimensions from fieldnames.
#define MTK_ERR_CODE_JUMP(code)
Definition: MisrError.h:175
intn GDdetach(int32)
MTKt_status MtkFileGridFieldToDataType(const char *filename, const char *gridname, const char *fieldname, MTKt_DataType *datatype)
Find data type for a particular field.
MTKt_status MtkHdfToMtkDataTypeConvert(int32 hdf_datatype, MTKt_DataType *datatype)
Convert HDF data type to MISR Toolkit data type.
#define NC_NOERR
Definition: netcdf.h:313
EXTERNL int nc_inq_vartype(int ncid, int varid, nc_type *xtypep)
intn GDfieldinfo(int32, char *, int32 *, int32 [], int32 *, char *)
MTKt_status MtkFileGridFieldToDataTypeNC(const char *filename, const char *gridname, const char *fieldname, MTKt_DataType *datatype)
#define NC_NOWRITE
Definition: netcdf.h:201
#define MTK_ERR_COND_JUMP(code)
Definition: MisrError.h:188
MTKt_status MtkFileGridFieldToDataTypeNcid(int ncid, const char *gridname, const char *fieldname, MTKt_DataType *datatype)
MTKt_status
Definition: MisrError.h:11
HDFFCLIBAPI intf * rank
int32 GDopen(char *, intn)
EXTERNL int nc_close(int ncid)
MTKt_status MtkNCVarId(int Ncid, const char *Name, MTKt_ncvarid *Var)
Definition: MtkNCVarId.c:21
MTKt_status MtkFileGridFieldToDataTypeFid(int32 fid, const char *gridname, const char *fieldname, MTKt_DataType *datatype)
Version of MtkFileGridFieldToDataType that takes an HDF-EOS file id rather than a filename...
EXTERNL int nc_inq_grp_ncid(int ncid, const char *grp_name, int *grp_ncid)
EXTERNL int nc_open(const char *path, int mode, int *ncidp)
#define FAIL
Definition: hdf.h:94

MISR Toolkit - Copyright © 2005 - 2020 Jet Propulsion Laboratory
Generated on Fri Jun 19 2020 22:49:51