OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
GEO_update_L1A_metadata.c
Go to the documentation of this file.
1 #include "PGS_MET.h"
2 #include "GEO_product.h"
3 #include "GEO_main.h"
4 #include "GEO_output.h"
5 #include "GEO_geo.h"
6 #include "L1a_data.h"
7 
8 PGSt_SMF_status GEO_update_L1A_metadata(
9  MODFILE * const l1a_file,
10  GEO_GRing_struct * const GRing_points,
11  EPH_metadata_struct * const EPH_metadata,
12  GEO_bcoord_struct * const bounding_coords
13  )
14 
15 /*
16 !C******************************************************************************
17 !Description:
18  Routine in Output group of the Level-1A geolocation software to write
19  the geolocated metadata to the L1A product file. Writing GRing equator
20  crossing, and orbitnumber metadata to the ECS Core Inventory Metadata
21  requires re-writing the entire Core Metadata content back to the file.
22 
23  Writes ECS Inventory Metadata:
24  ECSDataGranule
25  LOCALGRANULEID
26  DAYNIGHTFLAG
27  REPROCESSINGACTUAL
28  LOCALVERSIONID
29  REPROCESSINGPLANNED
30  OrbitCalculatedSpatialDomain
31  OrbitCalculatedSpatialDomainContainer
32  EQUATORCROSSINGDATE
33  EQUATORCROSSINGTIME
34  ORBITNUMBER
35  EQUATORCROSSINGLONGITUDE
36  InputGranule
37  INPUTPOINTER
38  SpatialDomainContainer
39  HorizontalSpatialDomainContainer
40  GPolygon
41  GPolygonContainer
42  GRingPoint
43  GRINGPOINTLATITUDE
44  GRINGPOINTLONGITUDE
45  GRINGPOINTSEQUENCENO
46  EXCLUSIONGRINGFLAG
47  RangeDateTime
48  RANGEENDINGDATE
49  RANGEENDINGTIME
50  RANGEBEGINNINGDATE
51  RANGEBEGINNINGTIME
52  AdditionalAttributes
53  AdditionalAttributesContainer
54  ADDITIONALATTRIBUTENAME.1
55  ADDITIONALATTRIBUTENAME.2
56  ADDITIONALATTRIBUTENAME.3
57  ADDITIONALATTRIBUTENAME.4
58  PARAMETERVALUE.1
59  PARAMETERVALUE.2
60  PARAMETERVALUE.3
61  PARAMETERVALUE.4
62  PGEVersionClass
63  PGEVERSION
64 
65  Writing the East, North, South, and West BoundingCoordinate fields to
66  the Archived Metadata requires copying over all of the other
67  Source = "PGE" archived metadata:
68  ProductionHistory
69  ProcessingEnvironment
70 
71 
72 
73 !Input Parameters:
74  l1a_file MAPI structure for Level 1A file
75  GRing_points G-Ring polygon latitudes and longitudes
76  EPH_metadata Spacecraft ephemeris metadata.
77  bounding_coords Bounding values for granule in latitude and longitude
78 
79 !Output Parameters:
80  None
81 
82 Return values:
83  MODIS_E_BAD_INPUT_ARG If any input pointer is null
84  MODIS_E_GEO If certain subroutines fail
85  PGS_S_SUCCESS Otherwise
86 
87 Externally Defined:
88  ADDITIONALATTRIBUTENAME "GEO_product.h"
89  DATATYPELENMAX "mapi.h"
90  DAYNIGHTFLAG "GEO_product.h"
91  DOIAUTHORITY "GEO_product.h"
92  EQUATORCROSSINGDATE "GEO_product.h"
93  EQUATORCROSSINGLONGITUDE "GEO_product.h"
94  EQUATORCROSSINGTIME "GEO_product.h"
95  EXCLUSIONGRINGFLAG "GEO_product.h"
96  GRINGPOINTLATITUDEG "GEO_product.h"
97  GRINGPOINTLONGITUDEG "GEO_product.h"
98  GRINGPOINTSEQUENCENO "GEO_product.h"
99  IDENTIFIERPRODDOI "GEO_product.h"
100  IDENTIFIERPRODDOIAUTH "GEO_product.h"
101  INPUTPOINTER "GEO_product.h"
102  LOCALGRANULEID "GEO_product.h"
103  LOCALVERSIONID "GEO_product.h"
104  MAPIOK "mapi.h"
105  MECS_ARCHIVE "mapi.h"
106  MECS_CORE "mapi.h"
107  MECS_PRODHISTORY "L1a_data.h"
108  MODIS_E_BAD_INPUT_ARG "PGS_MODIS_35251.h"
109  MODIS_E_GEO "PGS_MODIS_35251.h"
110  MODIS_W_MISSING_OUTPUT "PGS_MODIS_35251.h"
111  ORBITNUMBER "GEO_product.h"
112  PARAMETERVALUE "GEO_product.h"
113  PGS_S_SUCCESS "PGS_SMF.h"
114  PGEVERSION "GEO_product.h"
115  PROCESSINGENVIRONMENT "GEO_product.h"
116  PRODUCTIONDATETIME "GEO_product.h"
117  RAD2DEG "GEO_geo.h"
118  RANGEBEGINNINGDATE "GEO_product.h"
119  RANGEBEGINNINGTIME "GEO_product.h"
120  RANGEENDINGDATE "GEO_product.h"
121  RANGEENDINGTIME "GEO_product.h"
122  REPROCESSINGPLANNED "GEO_product.h"
123  REPROCESSINGACTUAL "GEO_product.h"
124  TXT "mapi.h"
125 
126 Routines called:
127  getMODISECSinfo "mapi.h"
128  MODISsizeof "mapi.h"
129  modsmf "smfio.h"
130  PGS_MET_GetSetAttr "PGS_MET.h"
131  PGS_MET_Init "PGS_MET.h"
132  PGS_MET_Remove "PGS_MET.h"
133  PGS_MET_SetAttr "PGS_MET.h"
134  PGS_MET_Write "PGS_MET.h"
135  putMODISfileinfo "mapi.h"
136  substrMODISECSinfo "mapi.h"
137 
138 Called by:
139  GEO_write_granule_metadata
140 
141 !Revision History:
142 $Log: GEO_update_L1A_metadata.c,v $
143 Revision 6.4 2014/12/12 21:45:13 jkuyper
144 Corrected check for NRT processing.
145 
146 Revision 6.3 2014/10/23 20:21:51 jkuyper
147 Corrected assignment operator to equality operator.
148 
149 Revision 6.2 2014/10/22 21:57:53 jkuyper
150 Changed to insert ".NRT" in DOI metadata of L1A file if it was produced on
151  the Near Real Time system.
152 
153 Revision 6.1 2012/06/28 21:40:25 kuyper
154 Changed to write DOI metadata to the L1A product.
155 
156 Revision 5.4 2004/11/18 22:26:24 kuyper
157 Corrected use of NULL attribute arguments for getMODISECSinfo(), and handling
158  of error returns.
159 
160 Revision 5.3 2004/11/05 01:05:16 kuyper
161 Corrected to write bounding coordinate values in degrees, not radians.
162 
163 Revision 5.2 2004/10/20 19:14:52 seaton
164 Made walkthrough changes
165 ,
166 
167 Revision 5.1 2004/10/07 18:55:20 seaton
168 Added metadata for Collection 5 processing.
169 This includes Bounding Coordinates, ProductionHistory and ProcessingEnvironment.
170 seaton@saicmodis.com
171 
172 Revision 4.5 2003/11/12 18:31:15 kuyper
173 Updated MAX_STRINGS to accomodate excess value of NUM_VALS for InputPointer
174 in MYD01.mcf.
175 
176 Revision 4.4 2003/10/27 01:24:47 vlin
177 message buffer size expanded.
178 
179 Revision 4.3 2003/10/01 18:19:53 kuyper
180 Changed to update missing metadata with "Missing value".
181 
182 Revision 4.2 2003/08/01 21:37:56 kuyper
183 Corrected several typos.
184 
185 Revision 4.1 2003/07/28 22:10:02 kuyper
186 Added new metadata fields.
187 Changed to return a status code.
188 Cleaned up messaging.
189 Simplified by recognising that all fields currently used have a data type
190  of TXT.
191 
192 
193 Requirements:
194  PR03-F-4.1-1
195  PR03-F-4.1-2
196 
197 !Team-unique Header:
198  This software is developed by the MODIS Science Data Support
199  Team for the National Aeronautics and Space Administration,
200  Goddard Space Flight Center, under contract NAS5-32373.
201 
202 !END****************************************************************************
203 */
204 
205 #define INVENTORY_METADATA 1
206 
207 /* MAX_STRINGS is set to one more than the maximum number of INPUTPOINTERs
208  documented in the L1A product spec. to ensure that the INPUTPOINTER
209  metadata are terminated with a NULL pointer. */
210 
211 #define MAX_STRINGS 6
212 #define META_BUF_SIZE ((MAX_STRINGS-1) * PGSd_PC_UREF_LENGTH_MAX)
213 
214 {
215  char shortname[9], *pshort=shortname;
216  PGSt_integer versionid;
217  char *pident = IDENTIFIERPRODDOI;
218  char doi[64], *pdoi = doi;
219  char *pident_auth = IDENTIFIERPRODDOIAUTH;
220  char *pdoi_auth = DOIAUTHORITY;
221  const char *NRT_infix = ".NRT";
222 
223  struct {
224  char *attribute;
225  char *object;
226 
227  } echoed_metadata[] = {
234  {MECS_CORE, PARAMETERVALUE".1"},
235  {MECS_CORE, PARAMETERVALUE".2"},
242 #define ACTUAL_META 14
245 #define ARCHIVE_META 16
246  {MECS_ARCHIVE, MECS_PRODHISTORY},
247  {MECS_ARCHIVE, PROCESSINGENVIRONMENT}
248  };
249 
250  struct {
251  char *attribute;
252  char *object;
253  void *data;
254  }geo_metadata[] = {
255 #define EQUAT_META 0 /* Starting index for equator metadata. */
257  {MECS_CORE, ORBITNUMBER".1", NULL},
260 #define GRING_META 4 /* Starting index for GRing metadata. */
265 #define BOUND_META 8 /* starting index for bounding coords metadata */
266  {MECS_ARCHIVE, EASTBOUNDINGCOORDINATE, NULL},
267  {MECS_ARCHIVE, WESTBOUNDINGCOORDINATE, NULL},
268  {MECS_ARCHIVE, NORTHBOUNDINGCOORDINATE, NULL},
269  {MECS_ARCHIVE, SOUTHBOUNDINGCOORDINATE, NULL},
270 #define DOI_META 12
271  {MECS_CORE, ADDITIONALATTRIBUTENAME".3", &pident},
272  {MECS_CORE, PARAMETERVALUE".3", &pdoi},
273  {MECS_CORE, ADDITIONALATTRIBUTENAME".4", &pident_auth},
274  {MECS_CORE, PARAMETERVALUE".4", &pdoi_auth}
275  };
276 
277  PGSt_MET_all_handles mdHandles;
278  const char* lastattribute="";
279  /* to transfer metadata from the L1A to the MCF file */
280  /* needed for proper alignment */
281  int retval = PGS_S_SUCCESS; /* routine state return value */
282  int i, handle;
283  char *metadata_strings[MAX_STRINGS]={NULL};
284  char msgbuf[256];
285  char filefunc[] = __FILE__ ", GEO_update_L1A_metadata";
286 
287  if(l1a_file == NULL) {
288  modsmf(MODIS_E_BAD_INPUT_ARG, "", filefunc);
289  return MODIS_E_BAD_INPUT_ARG;
290  }
291 
292  if(PGS_MET_Init(l1a_MCFID, mdHandles) != PGS_S_SUCCESS)
293  {
294  modsmf(MODIS_E_GEO, "PGS_MET_Init()", filefunc);
295  return MODIS_E_GEO;
296  }
297 
298  for(i=0; i<(int)(sizeof(echoed_metadata)/sizeof(echoed_metadata[0])); i++)
299  {
300  char datatype[DATATYPELENMAX];
301  float64 metadata_buffer[(META_BUF_SIZE/sizeof(float64)) + 1];
302  long n_strings;
303  long n_elements = META_BUF_SIZE / MODISsizeof(TXT);
304 
305  /* Pass NULL for i!=0 to avoid rebuilding of PVL table */
306  strncpy(datatype, TXT, sizeof(datatype));
307  if(getMODISECSinfo(l1a_file, strncmp(echoed_metadata[i].attribute,
308  lastattribute, sizeof echoed_metadata[i].attribute) ?
309  echoed_metadata[i].attribute : NULL,
310  echoed_metadata[i].object, datatype, &n_elements, metadata_buffer)
311  != MAPIOK)
312  {
313  sprintf(msgbuf, "getMODISECSinfo(\"%s\",\"%s\",\"%s\")",
314  l1a_file->filename, echoed_metadata[i].attribute, echoed_metadata[i].object);
315  modsmf(MODIS_E_GEO, msgbuf, filefunc);
316 
317  /* It is not an error for non-mandatory metadata to be missing, and
318  * PGS_MET_Write() will take care of complaining about the absence
319  * of mandatory metadata. Therefore, we fail at this point only if
320  * there's some other kind of problem.
321  */
322  if(n_elements!=0 && n_elements != META_BUF_SIZE / MODISsizeof(TXT))
323  retval = MODIS_E_GEO;
324  /* getMODISECSinfo has failed for some reason other than
325  not finding echoed_metadata.attrNameStr */
326 
327  /* Setting an invalid value at this point allows PGE01B 4.1.0+ to
328  * run on input MOD01 files created by earlier versions of PGE01.
329  * The output MOD01 file would fail to ingest due to not having
330  * a valid value for the metadata, but the MOD01 file isn't
331  * ingested from PGE01B.
332  */
333  strncpy((char*)metadata_buffer, "Missing value",
334  sizeof(metadata_buffer));
335  n_elements = (long)strlen((char*)metadata_buffer)+1L;
336  }
337  else
338  lastattribute = echoed_metadata[i].attribute;
339  /* Break up the text metadata into its component strings before
340  re-writing it to the MCF: */
341  n_strings = MAX_STRINGS;
342 
343  if(substrMODISECSinfo((char *)metadata_buffer, n_elements,
344  &n_strings, metadata_strings)!= MAPIOK)
345  {
346  sprintf(msgbuf, "substrMODISECSinfo(\"%s\")",
347  echoed_metadata[i].object);
348  modsmf(MODIS_E_GEO, msgbuf, filefunc);
349  retval = MODIS_E_GEO;
350 
351  }
352  else
353  {
354  int str;
355  for(str=(int)n_strings; str<MAX_STRINGS; str++)
356  metadata_strings[str] = NULL;
357 
358  if (i == ACTUAL_META && strcmp(metadata_strings[0], "Near Real Time"))
359  NRT_infix = "";
360  if (i < ARCHIVE_META)
361  handle = INVENTORY_METADATA;
362  else
363  handle = ARCHIVED_METADATA;
364 
365  if(PGS_MET_SetAttr(mdHandles[handle],
366  echoed_metadata[i].object, metadata_strings) != PGS_S_SUCCESS)
367  {
368  sprintf(msgbuf, "PGS_MET_SetAttr(\"%s\")",
369  echoed_metadata[i].object);
370  modsmf(MODIS_E_GEO, msgbuf, filefunc);
371  retval = MODIS_E_GEO;
372  }
373  }
374  } /* for each Inventory metadata */
375 
376  /* Release memory ocupied by PVL tree stucture. */
377  if(getMODISECSinfo(l1a_file, NULL, NULL, NULL, NULL, NULL) != MAPIOK)
378  {
379  sprintf(msgbuf, "getMODISECSinfo(\"%s\",NULL)", l1a_file->filename);
380  modsmf(MODIS_E_GEO, msgbuf, filefunc);
381  }
382 
383  if ( retval == PGS_S_SUCCESS)
384  {
385  double equat_crossing, longitude[4], latitude[4], bound_coord[4];
386  int orb_num;
387  char *p_flag, *time, *date;
388 
389  if( EPH_metadata != NULL)
390  {
391  i = EQUAT_META;
392  equat_crossing =
393  (double)(EPH_metadata->equatorcrossinglongitude * RAD2DEG);
394  geo_metadata[i++].data = &equat_crossing;
395  orb_num = (int)EPH_metadata->orbitnumber;
396  geo_metadata[i++].data = &orb_num;
397  date = EPH_metadata->equatorcrossingdate;
398  geo_metadata[i++].data = &date;
399  time = EPH_metadata->equatorcrossingtime;
400  geo_metadata[i++].data = &time;
401  }else
402  modsmf(MODIS_W_MISSING_OUTPUT, "EPH_metadata", filefunc);
403 
404  if( GRing_points != NULL)
405  {
406  int j;
407 
408  i = GRING_META;
409  p_flag = GRing_points->exclusionflag;
410  geo_metadata[i++].data = &p_flag;
411  for (j = 0; j < 4; j++){
412  latitude[j] = (double)GRing_points->latitude[j];
413  longitude[j] = (double)GRing_points->longitude[j];
414  }
415  geo_metadata[i++].data = latitude;
416  geo_metadata[i++].data = longitude;
417  geo_metadata[i++].data = GRing_points->sequenceno;
418 
419  }else
420  modsmf(MODIS_W_MISSING_OUTPUT, "GRing_points", filefunc);
421 
422  if ( bounding_coords != NULL )
423  {
424  i = BOUND_META;
425  bound_coord[0] = (double)bounding_coords->eastcoord * RAD2DEG;
426  geo_metadata[i++].data = &bound_coord[0];
427  bound_coord[1] = (double)bounding_coords->westcoord * RAD2DEG;
428  geo_metadata[i++].data = &bound_coord[1];
429  bound_coord[2] = (double)bounding_coords->northcoord * RAD2DEG;
430  geo_metadata[i++].data = &bound_coord[2];
431  bound_coord[3] = (double)bounding_coords->southcoord * RAD2DEG;
432  geo_metadata[i++].data = &bound_coord[3];
433  }else
434  modsmf(MODIS_W_MISSING_OUTPUT, "bounding_coords", filefunc);
435 
436  if(PGS_MET_GetSetAttr(mdHandles[INVENTORY_METADATA], SHORTNAME,
437  &pshort) != PGS_S_SUCCESS)
438  {
439  sprintf(msgbuf, "PGS_MET_GetSetAttr(\"%s\",\"" SHORTNAME "\")",
440  mdHandles[INVENTORY_METADATA]);
441  modsmf(MODIS_E_GEO, msgbuf, filefunc);
442  return MODIS_E_GEO;
443  }
444 
445  if(PGS_MET_GetSetAttr(mdHandles[INVENTORY_METADATA], VERSIONID,
446  &versionid) != PGS_S_SUCCESS)
447  {
448  sprintf(msgbuf, "PGS_MET_GetSetAttr(\"%s\",\"" VERSIONID "\")",
449  mdHandles[INVENTORY_METADATA]);
450  modsmf(MODIS_E_GEO, msgbuf, filefunc);
451  return MODIS_E_GEO;
452  }
453 
454  sprintf(doi, "10.5067/MODIS/%s%s.%03ld",
455  shortname, NRT_infix, (long)versionid);
456  if(putMODISfileinfo(l1a_file, IDENTIFIERPRODDOI, TXT, strlen(doi), doi)
457  != MAPIOK)
458  {
459  sprintf(msgbuf, "putMODISfileinfo(\"%s\",\"" IDENTIFIERPRODDOI
460  "\", \"" TXT ", %d, \"%s\")",
461  l1a_file->filename, (int)strlen(doi), doi);
462  modsmf(MODIS_E_GEO, msgbuf, filefunc);
463  return MODIS_E_GEO;
464  }
465 
466  if(putMODISfileinfo(l1a_file, IDENTIFIERPRODDOIAUTH, TXT,
467  sizeof(DOIAUTHORITY)-1, DOIAUTHORITY)
468  != MAPIOK)
469  {
470  sprintf(msgbuf, "putMODISfileinfo(\"%s\",\"" IDENTIFIERPRODDOIAUTH
471  "\", \"" TXT ", %d, \"" DOIAUTHORITY "\")",
472  l1a_file->filename, (int)sizeof(DOIAUTHORITY)-1);
473  modsmf(MODIS_E_GEO, msgbuf, filefunc);
474  return MODIS_E_GEO;
475  }
476 
477  for(i=0; i<(int)(sizeof(geo_metadata)/sizeof(geo_metadata[0])); i++)
478  {
479  if(strncmp(geo_metadata[i].attribute, MECS_CORE, sizeof(MECS_CORE))
480  == 0)
481  handle = INVENTORY_METADATA;
482  else
483  handle = ARCHIVED_METADATA;
484 
485  if(geo_metadata[i].data != NULL &&
486  PGS_MET_SetAttr(mdHandles[handle],
487  geo_metadata[i].object, geo_metadata[i].data)
488  != PGS_S_SUCCESS)
489  {
490  sprintf(msgbuf, "PGS_MET_SetAttr(\"%s\")",
491  geo_metadata[i].object);
492  modsmf(MODIS_E_GEO, msgbuf, filefunc);
493  retval = MODIS_E_GEO;
494  break;
495  }
496  } /* for each geo_metadata */
497 
498  if(PGS_MET_Write(mdHandles[INVENTORY_METADATA], MECS_CORE,
499  (PGSt_integer)l1a_file->sd_id) != PGS_S_SUCCESS)
500  {
501  modsmf(MODIS_E_GEO, "PGS_MET_Write(\"" MECS_CORE "\")", filefunc);
502  retval = MODIS_E_GEO;
503  }
504 
505  if(PGS_MET_Write(mdHandles[ARCHIVED_METADATA], MECS_ARCHIVE,
506  (PGSt_integer)l1a_file->sd_id) != PGS_S_SUCCESS)
507  {
508  modsmf(MODIS_E_GEO, "PGS_MET_Write(\"" MECS_ARCHIVE "\")", filefunc);
509  retval = MODIS_E_GEO;
510  }
511 
512  }
513 
514  PGS_MET_Remove();
515 
516  return retval;
517 }
518 
#define GRINGPOINTSEQUENCENO
Definition: GEO_product.h:116
#define ACTUAL_META
int j
Definition: decode_rs.h:73
#define ARCHIVED_METADATA
#define DOIAUTHORITY
Definition: GEO_product.h:143
#define L(lambda, T)
Definition: PreprocessP.h:185
PGSt_integer orbitnumber
#define RANGEENDINGTIME
Definition: GEO_product.h:134
#define DAYNIGHTFLAG
Definition: GEO_product.h:107
#define GRINGPOINTLONGITUDE
Definition: GEO_product.h:115
char equatorcrossingdate[11]
#define INPUTPOINTER
Definition: GEO_product.h:117
real(single), dimension(:,:), allocatable longitude
char equatorcrossingtime[16]
#define NULL
Definition: decode_rs.h:63
#define MODIS_E_BAD_INPUT_ARG
#define ADDITIONALATTRIBUTENAME
Definition: GEO_product.h:101
#define SHORTNAME
Definition: GEO_product.h:137
real(single), dimension(:,:), allocatable latitude
#define PRODUCTIONDATETIME
Definition: GEO_product.h:128
#define IDENTIFIERPRODDOI
Definition: GEO_product.h:141
#define INVENTORY_METADATA
#define EQUATORCROSSINGLONGITUDE
Definition: GEO_product.h:110
#define MECS_PRODHISTORY
Definition: L1a_data.h:138
#define META_BUF_SIZE
#define IDENTIFIERPRODDOIAUTH
Definition: GEO_product.h:142
PGSt_SMF_status GEO_update_L1A_metadata(MODFILE *const l1a_file, GEO_GRing_struct *const GRing_points, EPH_metadata_struct *const EPH_metadata, GEO_bcoord_struct *const bounding_coords)
#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 EASTBOUNDINGCOORDINATE
Definition: GEO_product.h:108
#define PARAMETERVALUE
Definition: GEO_product.h:125
#define RANGEBEGINNINGDATE
Definition: GEO_product.h:131
#define BOUND_META
#define REPROCESSINGACTUAL
Definition: GEO_product.h:135
#define RANGEBEGINNINGTIME
Definition: GEO_product.h:132
#define RAD2DEG
Definition: GEO_geo.h:173
#define MECS_CORE
Definition: Metadata.c:60
#define MODIS_W_MISSING_OUTPUT
#define EXCLUSIONGRINGFLAG
Definition: GEO_product.h:112
PGSt_double equatorcrossinglongitude
#define EQUATORCROSSINGDATE
Definition: GEO_product.h:109
integer, parameter double
double southcoord
Definition: GEO_geo.h:184
#define WESTBOUNDINGCOORDINATE
Definition: GEO_product.h:140
#define MAX_STRINGS
no change in intended resolving MODur00064 Corrected handling of bad ephemeris attitude data
Definition: HISTORY.txt:356
#define LOCALVERSIONID
Definition: GEO_product.h:121
double eastcoord
Definition: GEO_geo.h:183
#define LOCALGRANULEID
Definition: GEO_product.h:119
const char * str
Definition: l1c_msi.cpp:35
#define PGEVERSION
Definition: GEO_product.h:126
#define VERSIONID
Definition: GEO_product.h:139
this program makes no use of any feature of the SDP Toolkit that could generate such a then geolocation is calculated at that and then aggregated up to Resolved feature request Bug by adding three new int8 SDSs for each high resolution offsets between the high resolution geolocation and a bi linear interpolation extrapolation of the positions This can be used to reconstruct the high resolution geolocation Resolved Bug by delaying cumulation of gflags until after validation of derived products Resolved Bug by setting Latitude and Longitude to the correct fill resolving to support Near Real Time because they may be unnecessary if use of entrained ephemeris and attitude data is turned resolving bug report Corrected to filter out Aqua attitude records with missing status helping resolve bug MOD_PR03 will still correctly write scan and pixel data that does not depend upon the start time
Definition: HISTORY.txt:248
#define EQUAT_META
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
#define ARCHIVE_META
int i
Definition: decode_rs.h:71
#define REPROCESSINGPLANNED
Definition: GEO_product.h:136
#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 GRING_META
#define l1a_MCFID
Definition: GEO_main.h:70