OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
GEO_write_ECS_metadata.c
Go to the documentation of this file.
1 #include "SDST_TK.h"
2 #include "GEO_main.h"
3 #include "GEO_output.h"
4 #include "GEO_product.h"
5 #include "GEO_geo.h"
6 #include "L1a_data.h"
7 #include "GEO_parameters.h"
8 #include "PGS_MODIS_35251.h"
9 
10 PGSt_SMF_status GEO_write_ECS_metadata(
11  MODFILE * const geo_file,
12  ECS_metadata_struct * const ECS_metadata,
13  EPH_metadata_struct * const EPH_metadata,
14  GEO_bcoord_struct * const bounding_coords,
15  GEO_GRing_struct * const GRing_points,
16  pointer_metadata_struct * const pointer_metadata,
17  qa_metadata_struct * const qa_metadata,
18  char * const sci_state,
19  char * const sci_abnorm
20  )
21 /*
22 !C******************************************************************************
23 !Description:
24  Routine in Output group of the Level-1A geolocation software to set ECS
25  Inventory and Archive metadata in MCF memory. The metadata are written
26  to the geolocation product just before the end of the routine.
27 
28  Warning messages will be recorded (to the SMF) if metadata inputs are
29  missing, but the routine will not abort, which may result in
30  geolocation products with incomplete or missing ECS metadata.
31 
32 !Input Parameters:
33  geo_file the MAPI structure for the product
34  ECS_metadata ECS Core Metadata from l1a file
35  EPH_metadata Spacecraft ephemeris metadata
36  bounding_coords granule's bounding coordinates
37  GRing_points granule's GRing vertice's data
38  pointer_metadata universal references of geolocation data
39  sources and sinks
40  qa_metadata Granule-level quality assurance metadata.
41  sci_abnorm spacecraft in unusual state during granule
42  (i.e. maneuver) flag
43  "0" = maneuver
44  "1" = normal
45  sci_state instrument test mode during granule flag
46  "0" = MODIS test mode
47  "1" = normal
48 
49 !Output Parameters:
50  none
51 
52 Return parameter:
53  MODIS_E_BAD_INPUT_ARG If geo_file is null (the other pointer
54  arguments are all allowed to be null)
55  MODIS_E_GEO If any subroutine failed.
56  PGS_S_SUCCESS Otherwise
57 
58 Externally Defined:
59  ADDITIONALATTRIBUTENAME "GEO_product.h"
60  ARCHIVEMETADATA "GEO_product.h"
61  ARCHIVED_METADATA "mapi.h"
62  AUTOMATICQUALITYFLAG "GEO_product.h"
63  AUTOMATICQUALIFYFLAGEXPLANATION "GEO_product.h"
64  COREMETADATA "GEO_product.h"
65  DAYNIGHTFLAG "GEO_product.h"
66  DOIAUTHORITY "GEO_product.h"
67  EASTBOUNDINGCOORDINATE "GEO_product.h"
68  EQUATORCROSSINGLONGITUDE "GEO_product.h"
69  EQUATORCROSSINGDATE "GEO_product.h"
70  EQUATORCROSSINGTIME "GEO_product.h"
71  EXCLUSIONGRINGFLAG "GEO_product.h"
72  geo_MCFID "GEO_main.h"
73  GRINGPOINTLATITUDE "GEO_product.h"
74  GRINGPOINTLONGITUDE "GEO_product.h"
75  GRINGPOINTSEQUENCENO "GEO_product.h"
76  IDENTIFIERPRODDOI "GEO_product.h"
77  IDENTIFIERPRODDOIAUTH "GEO_product.h"
78  INPUTPOINTER "GEO_product.h"
79  INVENTORY_METADATA "mapi.h"
80  LOCALGRANULEID "GEO_product.h"
81  LOCALINPUTGRANULEID "GEO_product.h"
82  LOCALVERSIONID "GEO_product.h"
83  MODIS_E_BAD_INPUT_ARG "PGS_MODIS_35251.h"
84  MODIS_E_GEO "PGS_MODIS_35251.h"
85  NORTHBOUNDINGCOORDINATE "GEO_product.h"
86  ORBITNUM "GEO_product.h"
87  PARAMETERNAME "GEO_product.h"
88  PARAMETERVALUE "GEO_product.h"
89  PGS_S_SUCCESS "PGS_SMF.h"
90  PGEVERSION "GEO_product.h"
91  PROCESSINGENVIRONMENT "GEO_product.h"
92  PRODUCTIONHISTORY "GEO_product.h"
93  QAPERCENTMISSINGDATA "GEO_product.h"
94  QAPERCENTOUTOFBOUNDSDATA "GEO_product.h"
95  RANGEBEGINNINGDATE "GEO_product.h"
96  RANGEBEGINNINGTIME "GEO_product.h"
97  RANGEENDINGDATE "GEO_product.h"
98  RANGEENDINGTIME "GEO_product.h"
99  REPROCESSINGACTUAL "GEO_product.h"
100  REPROCESSINGPLANNED "GEO_product.h"
101  SOUTHBOUNDINGCOORDINATE "GEO_product.h"
102  WESTBOUNDINGCOORDINATE "GEO_product.h"
103 
104 Called by:
105  GEO_write_granule_metadata
106 
107 Routines Called:
108  modsmf "smfio.h"
109  PGS_MET_GetSetAttr "PGS_MET.h"
110  PGS_MET_Init "PGS_MET.h"
111  PGS_MET_Remove "PGS_MET.h"
112  PGS_MET_SetAttr "PGS_MET.h"
113  PGS_MET_Write "PGS_MET.h"
114  putMODISfileinfo "mapi.h"
115 
116 !Revision History:
117 $Log: GEO_write_ECS_metadata.c,v $
118 Revision 6.3 2014/10/22 21:59:23 jkuyper
119 Changed to insert ".NRT" in DOI metadata if running on the Near Real Time
120  system.
121 
122 Revision 6.2 2012/06/28 21:42:15 kuyper
123 Corrected format specifier for versionid.
124 
125 Revision 6.1 2012/06/27 19:16:18 kuyper
126 Changed to write DOI metadata to Geolocation product.
127 
128 Revision 5.1 2004/06/23 20:44:42 vlin
129 QAPercent items set to 100 when number of pixels is zero.
130 
131 Revision 4.2 2003/08/20 18:02:14 kuyper
132 Corrected to handle the increased number of input pointers.
133 
134 Revision 4.1 2003/08/12 20:46:02 kuyper
135 Changed to write ReprocessingActual from version_metadata.
136 Added ReprocessingPlanned and ProcessingEnvironment.
137 Change to write ProductionHistory based upon the PGE and PGE version,
138  rather than upon the process and the LocalVersionID.
139 Changed to return status codes.
140 
141 Revision 3.2 2002/07/08 21:32:52 kuyper
142 Change to use SDST toolkit to write LocaleGranuleID.
143 
144 Revision 3.1 2001/04/07 22:56:43 kuyper
145 Changed to check L1A productionhistory for "NOT SET".
146 Made productionhistory length checks more flexible.
147 
148 James Kuyper - kuyper@ltpmail.gsfc.nasa.gov
149 
150 Requirements:
151  PR03-F-4.1-1
152  PR03-F-4.1-2
153 
154 !Team-unique Header:
155  This software is developed by the MODIS Science Data Support
156  Team for the National Aeronautics and Space Administration,
157  Goddard Space Flight Center, under contract NAS5-32373.
158 !END****************************************************************************
159 */
160 
161 {
162 #define NUM_GRING_PTS 4
163 #define NUM_IVALS (NUM_GRING_PTS + 3)
164 #define NUM_DVALS (2 * NUM_GRING_PTS + 5)
165 #define NUM_STRVALS (36 + INPUTPOINTERS)
166 
167  PGSt_integer ivals[NUM_IVALS];
168  PGSt_double dvals[NUM_DVALS];
169  char *strings[NUM_STRVALS];
170  int obj=0, str=0, ival=0, dval=0;
171  int i;
172  PGSt_SMF_status retval = PGS_S_SUCCESS;
173  PGSt_MET_all_handles mdHandles;
174  ECSattr_names_for_all_handles HDFattrNames;
175  char productionhistory[64] = "";
176  char shortname[9], *pshort=shortname;
177  PGSt_integer versionid;
178  char doi[64];
179  char msgbuf[128] = "";
180  char *valid_flag = msgbuf;
181  /* value of valid_flag is not important, so long as not NULL */
182  char filefunc[] = __FILE__ ", GEO_write_ECS_metadata";
183 
184  struct {
185  char *attrNameStr;
186  /* handle number of the metadata group to write the parameter to */
187  int metadata_group;
188  void *attrValue;
189  /* Note: only the following are permitted: PGSt_integer *attrValue,
190  * PGSt_double *attrValue, PGSt_real *attrValue, and char **attrValue
191  */
192  } MCF_object[NUM_IVALS + NUM_DVALS + NUM_STRVALS];
193 
194  /* handle numbers to the metadata groups accessed through mdHandles */
195 #define INVENTORY_METADATA 1
196 #define ARCHIVED_METADATA 2
197 #define min(x,y) ((x) < (y) ? (x) : (y))
198 
199 #define STROBJ(name, handle, base, value) { MCF_object[obj].attrNameStr=name; \
200  MCF_object[obj].metadata_group = handle; \
201  if(base!=NULL){ \
202  strings[str] = value; MCF_object[obj++].attrValue = &strings[str++]; \
203  } else MCF_object[obj++].attrValue = NULL;}
204 
205 #define INTOBJ(name, handle, base, value) { MCF_object[obj].attrNameStr=name; \
206  MCF_object[obj].metadata_group = handle; \
207  if(base!=NULL){ \
208  ivals[ival] = (PGSt_integer)(value); \
209  MCF_object[obj++].attrValue = &ivals[ival++]; \
210  } else MCF_object[obj++].attrValue = NULL;}
211 
212 #define DBLOBJ(name, handle, base, value) { MCF_object[obj].attrNameStr=name; \
213  MCF_object[obj].metadata_group = handle; \
214  if(base!=NULL){ \
215  dvals[dval] = (PGSt_double)(value); \
216  MCF_object[obj++].attrValue = &dvals[dval++]; \
217  } else MCF_object[obj++].attrValue = NULL;}
218 
219  if( geo_file == NULL)
220  {
221  modsmf(MODIS_E_BAD_INPUT_ARG,".", filefunc);
222  return MODIS_E_BAD_INPUT_ARG;
223  }
224 
225  sprintf(productionhistory, "PGE01:%.*s",
226  (int)(sizeof(productionhistory)-sizeof("PGE01:")),
227  ECS_metadata->version_metadata.pgeversion);
228 
229  /* WARNING: do not add any *OBJ() macros below, without first checking that
230  strings[], ivals[], or dvals[] is big enough. */
231 
232  STROBJ(PGEVERSION, INVENTORY_METADATA, valid_flag,
233  ECS_metadata->version_metadata.pgeversion);
235  ECS_metadata->version_metadata.localversionid);
237  ECS_metadata->rangebeginningdate);
239  ECS_metadata->rangebeginningtime);
240  STROBJ(RANGEENDINGDATE, INVENTORY_METADATA, ECS_metadata,
241  ECS_metadata->rangeendingdate);
242  STROBJ(RANGEENDINGTIME, INVENTORY_METADATA, ECS_metadata,
243  ECS_metadata->rangeendingtime);
244  STROBJ(DAYNIGHTFLAG, INVENTORY_METADATA, ECS_metadata,
245  ECS_metadata->operationmode);
246  STROBJ(EQUATORCROSSINGDATE ".1", INVENTORY_METADATA, EPH_metadata,
247  EPH_metadata->equatorcrossingdate);
248  STROBJ(EQUATORCROSSINGTIME ".1", INVENTORY_METADATA, EPH_metadata,
249  EPH_metadata->equatorcrossingtime);
251  GRing_points->exclusionflag);
252  STROBJ(INPUTPOINTER, INVENTORY_METADATA, pointer_metadata,
253  pointer_metadata->inputpointer[0]);
254  for(i=1; i<INPUTPOINTERS && pointer_metadata->inputpointer[i][0]; i++)
255  strings[str++] = pointer_metadata->inputpointer[i];
256  if(i<INPUTPOINTERS)
257  strings[str++] = NULL;
259  ECS_metadata->version_metadata.reprocessingactual);
261  ECS_metadata->version_metadata.reprocessingplanned);
262 
264  ECS_metadata->localinputgranuleid);
266  productionhistory);
270  bounding_coords->eastcoord*RAD2DEG);
272  bounding_coords->northcoord*RAD2DEG);
274  bounding_coords->southcoord * RAD2DEG);
276  bounding_coords->westcoord * RAD2DEG);
278  EPH_metadata->equatorcrossinglongitude * RAD2DEG);
279 
280  /* The following are arrays, so will require different treatment. */
281  if(GRing_points==NULL)
282  {
283  MCF_object[obj].attrNameStr = GRINGPOINTLATITUDE;
284  MCF_object[obj].metadata_group = INVENTORY_METADATA;
285  MCF_object[obj++].attrValue = NULL;
286 
287  MCF_object[obj].attrNameStr = GRINGPOINTLONGITUDE;
288  MCF_object[obj].metadata_group = INVENTORY_METADATA;
289  MCF_object[obj++].attrValue = NULL;
290 
291  MCF_object[obj].attrNameStr = GRINGPOINTSEQUENCENO;
292  MCF_object[obj].metadata_group = INVENTORY_METADATA;
293  MCF_object[obj++].attrValue = NULL;
294  }
295  else
296  {
297  MCF_object[obj].attrNameStr = GRINGPOINTLATITUDE;
298  MCF_object[obj].metadata_group = INVENTORY_METADATA;
299  MCF_object[obj++].attrValue = &dvals[dval];
300  for(i=0; i<NUM_GRING_PTS ; i++)
301  dvals[dval++] = (PGSt_double)GRing_points->latitude[i];
302 
303  MCF_object[obj].attrNameStr = GRINGPOINTLONGITUDE;
304  MCF_object[obj].metadata_group = INVENTORY_METADATA;
305  MCF_object[obj++].attrValue = &dvals[dval];
306  for(i=0; i<NUM_GRING_PTS ; i++)
307  dvals[dval++] = (PGSt_double)GRing_points->longitude[i];
308 
309  MCF_object[obj].attrNameStr = GRINGPOINTSEQUENCENO;
310  MCF_object[obj].metadata_group = INVENTORY_METADATA;
311  MCF_object[obj++].attrValue = &ivals[ival];
312  for(i=0; i<NUM_GRING_PTS ; i++)
313  ivals[ival++] = (PGSt_integer)GRing_points->sequenceno[i];
314  }
315 
316  INTOBJ(ORBITNUMBER".1", INVENTORY_METADATA, EPH_metadata,
317  EPH_metadata->orbitnumber);
319  "GRANULENUMBER");
320  STROBJ(PARAMETERVALUE".1", INVENTORY_METADATA, ECS_metadata,
321  ECS_metadata->granulenumber);
323  "SCI_STATE");
324  STROBJ(PARAMETERVALUE".2", INVENTORY_METADATA, sci_state,
325  sci_state);
327  "SCI_ABNORM");
328  STROBJ(PARAMETERVALUE".3", INVENTORY_METADATA, sci_abnorm,
329  sci_abnorm);
330  STROBJ(PARAMETERVALUE".5", INVENTORY_METADATA, ECS_metadata,
331  ECS_metadata->version_metadata.processversion);
332 
333  /* added elements. */
334 
335  if(qa_metadata==NULL){
337  "Failed");
338  INTOBJ(QAPERCENTMISSINGDATA".1", INVENTORY_METADATA, valid_flag, 0);
340  STROBJ(PARAMETERVALUE".4", INVENTORY_METADATA, valid_flag, "");
341  }
342  else
343  {
344  if(qa_metadata->retval == SUCCESS)
346  "Passed")
347  else
349  "Failed")
350 
351  if(qa_metadata->no_of_pixels != 0)
352  {
354  (int)floor(0.5+100.0*(double)qa_metadata->missingdata/
355  (double)qa_metadata->no_of_pixels));
357  (int)floor(0.5+100.0*(double)qa_metadata->outofboundsdata/
358  (double)qa_metadata->no_of_pixels));
359  }else {
361  100);
363  100);
364  }
365  STROBJ(PARAMETERVALUE".4", INVENTORY_METADATA, valid_flag,
366  qa_metadata->rms_error);
367  }
368 
370  "GEO_EST_RMS_ERROR");
372  "PROCESSVERSION");
373 
376  STROBJ(PARAMETERVALUE".6", INVENTORY_METADATA, valid_flag, doi);
377 
381 
382  STROBJ(PARAMETERNAME".1", INVENTORY_METADATA, valid_flag, "Geolocation");
384  "Set to 'Failed' if processing error occurred, set to 'Passed' otherwise");
385 
386  if(PGS_MET_Init(geo_MCFID, mdHandles) != PGS_S_SUCCESS)
387  {
388  sprintf(msgbuf, "PGS_MET_Init(%ld)", (long)geo_MCFID);
389  modsmf(MODIS_E_GEO, msgbuf, filefunc);
390  return MODIS_E_GEO;
391  }
392 
393  if(PGS_MET_GetSetAttr(mdHandles[INVENTORY_METADATA], SHORTNAME, &pshort)
394  != PGS_S_SUCCESS)
395  {
396  sprintf(msgbuf, "PGS_MET_GetSetAttr(\"%s\",\"" SHORTNAME "\")",
397  mdHandles[INVENTORY_METADATA]);
398  modsmf(MODIS_E_GEO, msgbuf, filefunc);
399  return MODIS_E_GEO;
400  }
401 
402  if(PGS_MET_GetSetAttr(mdHandles[INVENTORY_METADATA], VERSIONID, &versionid)
403  != PGS_S_SUCCESS)
404  {
405  sprintf(msgbuf, "PGS_MET_GetSetAttr(\"%s\",\"" VERSIONID "\")",
406  mdHandles[INVENTORY_METADATA]);
407  modsmf(MODIS_E_GEO, msgbuf, filefunc);
408  return MODIS_E_GEO;
409  }
410 
411  sprintf(doi, "10.5067/MODIS/%s%s.%03ld", shortname,
412  strcmp(ECS_metadata->version_metadata.reprocessingactual,
413  "Near Real Time") ? "" : ".NRT", (long)versionid);
414  if(putMODISfileinfo(geo_file, IDENTIFIERPRODDOI, TXT, strlen(doi), doi)
415  != MAPIOK)
416  {
417  sprintf(msgbuf, "putMODISfileinfo(\"%s\",\"" IDENTIFIERPRODDOI "\", \""
418  TXT ", %d, \"%s\")", geo_file->filename, (int)strlen(doi), doi);
419  modsmf(MODIS_E_GEO, msgbuf, filefunc);
420  return MODIS_E_GEO;
421  }
422 
423  if(putMODISfileinfo(geo_file, IDENTIFIERPRODDOIAUTH, TXT,
424  sizeof(DOIAUTHORITY)-1, DOIAUTHORITY)
425  != MAPIOK)
426  {
427  sprintf(msgbuf, "putMODISfileinfo(\"%s\",\"" IDENTIFIERPRODDOIAUTH
428  "\", \"" TXT ", %d, \"" DOIAUTHORITY "\")",
429  geo_file->filename, (int)sizeof(DOIAUTHORITY)-1);
430  modsmf(MODIS_E_GEO, msgbuf, filefunc);
431  return MODIS_E_GEO;
432  }
433  /* Set each parameter with its value
434  in the designated metadata group */
435  for(i=0; i<obj; i++)
436  {
437  if(MCF_object[i].attrValue == NULL)
438  modsmf(MODIS_W_MISSING_OUTPUT, MCF_object[i].attrNameStr, filefunc);
439  else if(PGS_MET_SetAttr(mdHandles[MCF_object[i].metadata_group],
440  MCF_object[i].attrNameStr, MCF_object[i].attrValue) != PGS_S_SUCCESS)
441  {
442  sprintf(msgbuf, "PGS_MET_SetAttr(%s)", MCF_object[i].attrNameStr);
443  modsmf(MODIS_E_GEO, msgbuf, filefunc);
444  retval = MODIS_E_GEO;
445  }
446  } /* END FOR each MCF_object */
447 
448  if(SDST_SetLocalGranId(GEO, mdHandles)!=MODIS_S_SDST_SUCCESS)
449  {
450  modsmf(MODIS_E_GEO, "SDST_SetLocalGranId", filefunc);
451  retval = MODIS_E_GEO;
452  }
453 
454  (void)strncpy(HDFattrNames[INVENTORY_METADATA], COREMETADATA,
455  sizeof(HDFattrNames[0]));
456  (void)strncpy(HDFattrNames[ARCHIVED_METADATA], ARCHIVEMETADATA,
457  sizeof(HDFattrNames[0]));
458 
459  if(PGS_MET_Write(mdHandles[INVENTORY_METADATA],
460  HDFattrNames[INVENTORY_METADATA], (PGSt_integer)geo_file->sd_id)
461  != PGS_S_SUCCESS)
462  {
463  sprintf(msgbuf, "PGS_MET_Write(%s)",COREMETADATA);
464  modsmf(MODIS_E_GEO, msgbuf, filefunc);
465  retval = MODIS_E_GEO;
466  }
467 
468  if(PGS_MET_Write(mdHandles[ARCHIVED_METADATA],
469  HDFattrNames[ARCHIVED_METADATA], (PGSt_integer)geo_file->sd_id)
470  != PGS_S_SUCCESS)
471  {
472  sprintf(msgbuf, "PGS_MET_Write(%s)",ARCHIVEMETADATA);
473  modsmf(MODIS_E_GEO, msgbuf, filefunc);
474  retval = MODIS_E_GEO;
475  }
476 
477  PGS_MET_Remove();
478 
479  return retval;
480 }
#define GRINGPOINTSEQUENCENO
Definition: GEO_product.h:116
#define PARAMETERNAME
Definition: GEO_product.h:124
#define COREMETADATA
Definition: GEO_product.h:106
#define SUCCESS
Definition: ObpgReadGrid.h:15
#define ARCHIVED_METADATA
#define DOIAUTHORITY
Definition: GEO_product.h:143
PGSt_integer orbitnumber
#define RANGEENDINGTIME
Definition: GEO_product.h:134
#define DAYNIGHTFLAG
Definition: GEO_product.h:107
#define INVENTORY_METADATA
#define QAPERCENTOUTOFBOUNDSDATA
Definition: GEO_product.h:130
#define GRINGPOINTLONGITUDE
Definition: GEO_product.h:115
PGSt_SMF_status GEO_write_ECS_metadata(MODFILE *const geo_file, ECS_metadata_struct *const ECS_metadata, EPH_metadata_struct *const EPH_metadata, GEO_bcoord_struct *const bounding_coords, GEO_GRing_struct *const GRing_points, pointer_metadata_struct *const pointer_metadata, qa_metadata_struct *const qa_metadata, char *const sci_state, char *const sci_abnorm)
char equatorcrossingdate[11]
#define geo_MCFID
Definition: GEO_main.h:71
#define INPUTPOINTER
Definition: GEO_product.h:117
char equatorcrossingtime[16]
#define NULL
Definition: decode_rs.h:63
#define MODIS_E_BAD_INPUT_ARG
#define INPUTPOINTERS
#define QAPERCENTMISSINGDATA
Definition: GEO_product.h:129
#define ADDITIONALATTRIBUTENAME
Definition: GEO_product.h:101
#define SHORTNAME
Definition: GEO_product.h:137
#define IDENTIFIERPRODDOI
Definition: GEO_product.h:141
char processingenvironment[PGSd_PC_VALUE_LENGTH_MAX]
#define EQUATORCROSSINGLONGITUDE
Definition: GEO_product.h:110
#define MECS_PRODHISTORY
Definition: L1a_data.h:138
char reprocessingplanned[PGSd_PC_VALUE_LENGTH_MAX]
#define AUTOMATICQUALITYFLAGEXPLANATION
Definition: GEO_product.h:105
#define GEO
Definition: proj_define.h:36
#define IDENTIFIERPRODDOIAUTH
Definition: GEO_product.h:142
#define NUM_DVALS
#define MODIS_E_GEO
double westcoord
Definition: GEO_geo.h:185
#define NORTHBOUNDINGCOORDINATE
Definition: GEO_product.h:122
#define GRINGPOINTLATITUDE
Definition: GEO_product.h:114
#define NUM_STRVALS
#define EASTBOUNDINGCOORDINATE
Definition: GEO_product.h:108
#define PARAMETERVALUE
Definition: GEO_product.h:125
#define RANGEBEGINNINGDATE
Definition: GEO_product.h:131
#define LOCALINPUTGRANULEID
Definition: GEO_product.h:120
#define REPROCESSINGACTUAL
Definition: GEO_product.h:135
#define ARCHIVEMETADATA
Definition: GEO_product.h:102
#define RANGEBEGINNINGTIME
Definition: GEO_product.h:132
#define RAD2DEG
Definition: GEO_geo.h:173
#define MODIS_W_MISSING_OUTPUT
#define EXCLUSIONGRINGFLAG
Definition: GEO_product.h:112
#define NUM_GRING_PTS
PGSt_double equatorcrossinglongitude
#define EQUATORCROSSINGDATE
Definition: GEO_product.h:109
double southcoord
Definition: GEO_geo.h:184
#define WESTBOUNDINGCOORDINATE
Definition: GEO_product.h:140
#define STROBJ(name, handle, base, value)
#define DBLOBJ(name, handle, base, value)
#define LOCALVERSIONID
Definition: GEO_product.h:121
double eastcoord
Definition: GEO_geo.h:183
const char * str
Definition: l1c_msi.cpp:35
#define PGEVERSION
Definition: GEO_product.h:126
#define VERSIONID
Definition: GEO_product.h:139
PARAM_TYPE_NONE Default value No parameter is buried in the product name name_prefix is case insensitive string compared to the product name PARAM_TYPE_VIS_WAVE The visible wavelength bands from the sensor are buried in the product name The product name is compared by appending and name_suffix ie aph_412_giop where prod_ix will be set to PARAM_TYPE_IR_WAVE same search method as PARAM_TYPE_VIS_WAVE except only wavelength above are looped through but prod_ix is still based ie aph_2_giop for the second and prod_ix set to PARAM_TYPE_INT name_prefix is compared with the beginning of the product name If name_suffix is not empty the it must match the end of the product name The characters right after the prefix are read as an integer and prod_ix is set to that number strncpy(l2prod->name_prefix, "myprod", UNITLEN)
double northcoord
Definition: GEO_geo.h:182
#define EQUATORCROSSINGTIME
Definition: GEO_product.h:111
char localinputgranuleid[PGSd_PC_FILE_PATH_MAX]
char inputpointer[INPUTPOINTERS][PGSd_PC_UREF_LENGTH_MAX]
char reprocessingactual[PGSd_PC_VALUE_LENGTH_MAX]
#define NUM_IVALS
#define AUTOMATICQUALITYFLAG
Definition: GEO_product.h:104
int i
Definition: decode_rs.h:71
#define REPROCESSINGPLANNED
Definition: GEO_product.h:136
version_metadata_struct version_metadata
#define PROCESSINGENVIRONMENT
Definition: GEO_product.h:127
#define RANGEENDINGDATE
Definition: GEO_product.h:133
#define SOUTHBOUNDINGCOORDINATE
Definition: GEO_product.h:138
#define ORBITNUMBER
Definition: GEO_product.h:123
#define INTOBJ(name, handle, base, value)