|
ocssw
1.0
|
00001 #include "PGS_MODIS_35251.h" 00002 #include "GEO_input.h" 00003 #include "GEO_product.h" 00004 #include "L1a_data.h" 00005 #include "smfio.h" 00006 00007 int GEO_read_L1AECS_metadata( 00008 MODFILE * const l1a_file, 00009 ECS_metadata_struct * const ECS_metadata 00010 ) 00011 00012 /* 00013 !C************************************************************************** 00014 !Description: 00015 Routine in the input group of the Level-1A geolocation 00016 software to read ECS Inventory metadata from the 00017 L1A product file. 00018 00019 Reads ECS Inventory Metadata: 00020 RANGEBEGINNINGDATE 00021 RANGEBEGINNINGTIME 00022 RANGEENDINGDATE 00023 RANGEENDINGTIME 00024 DAYNIGHTFLAG 00025 LOCALGRANULEID 00026 PARAMETERVALUE.1 ("GRANULENUMBER") 00027 ASSOCIATEDPLATFORMSHORTNAME.1 00028 PRODUCTIONHISTORY 00029 00030 !Input Parameters: 00031 MODFILE *l1a_file - MAPI structure for Level 1A file 00032 00033 !Output Parameters: 00034 ECS_metadata - structure for ECS metadata inputs 00035 00036 Returns: 00037 SUCCEED if all metadatea are retrieved 00038 FAIL otherwise. 00039 00040 Global variables: 00041 None. 00042 00043 Called by: 00044 GEO_prepare_l1a_data() 00045 00046 Routines Called: 00047 getMODISECSinfo - Reads an ECS metadata attribute from an 00048 HDF global attribute. 00049 modsmf - writes error status messages to log 00050 00051 !Revision History: 00052 * $Log: GEO_read_L1AECS_metadata.c,v $ 00053 * Revision 4.1 2003/02/21 22:49:42 kuyper 00054 * Corrected to use void* pointers with %p format code. 00055 * 00056 * Revision 3.1 2002/06/13 22:51:29 kuyper 00057 * Removed unnecessary NCSA acknowledgement. 00058 * 00059 * Revision 2.4 2001/01/17 16:06:37 vlin 00060 * PRODUCTIONHISTORY is added per CCR 507 00061 * 00062 * Revision 2.3 2000/08/12 23:02:24 fhliang 00063 * Added AssociatedPlatformShortName to the metadata list. 00064 * Changed return type to 'int'. 00065 * Cleaned up messages. 00066 * Changed 'rtval' to 'retval'. 00067 * Added static char filefunc and used it in calls to modsmf(). 00068 * Removed an extra PDL paragraph. 00069 * 00070 * Revision 2.2 1998/03/04 00:48:51 jjb 00071 * Bug Fix MODxl00638: Initialized ECS_metadata ingest strings 00072 * to prevent writing uninitialized metadata strings 00073 * into the MOD03 product's metadata. 00074 * 00075 * Revision 2.1 1997/10/21 18:16:22 kuyper 00076 * Returned from ClearCase 00077 * 00078 * Revision /main/GEO_V2_DEV/3 1997/10/06 kuyper 00079 * Changed MECS_CORE to L1A_COREMETADATA. 00080 * 00081 * Revision /main/GEO_V2_DEV/2 1997/09/3 Ding 00082 * Modified the code to read V2 input data. 00083 * ding@ltpmail.gsfc.nasa.gov 00084 * 00085 * Revision 1.6.1.1 1997/07/21 22:20:17 kuyper 00086 * Merged in out-of-sequence changes. 00087 * 00088 * Revision 1.6 1997/07/21 16:24:34 kuyper 00089 * Baselined Version 1 00090 * 00091 *Parallel development: 00092 * Revision 1.5 1997/06/02 17:51:51 kuyper 00093 * Merged seed files. 00094 * 00095 * Revision 1.5 1997/03/26 18:12:56 fhliang 00096 * Initial revision of SDST delivery of GEO_read_L1AECS_metadata.c. 00097 * 00098 Revision 1.4 1997/03/11 22:05:34 fshaw 00099 *** empty log message *** 00100 00101 Revision 1.3 1997/02/13 23:25:11 kuyper 00102 Fixed typo in error message. 00103 00104 Revision 1.2 1997/01/13 19:41:15 kuyper 00105 Adjusted #include file list. 00106 James Kuyper Jr. <kuyper@ltpmail.gsfc.nasa.gov> 00107 00108 Revision 1.1 1997/01/08 16:06:27 mikej 00109 Initial revision 00110 00111 00112 Requirements: 00113 PR03-F-2.1-1 00114 PR03-F-2.1-2 00115 PR03-F-2.1-3 00116 00117 00118 !Team-unique Header: 00119 This software is developed by the MODIS Science Data Support 00120 Team for the National Aeronautics and Space Administration, 00121 Goddard Space Flight Center, under contract NAS5-32373. 00122 00123 !END*************************************************************************** 00124 */ 00125 00126 { 00127 00128 #define N_ELEMENTS(foo) ((int) (sizeof(foo) / sizeof(foo[0]))) 00129 #define STRMAX 120 00130 #define ARGMAX 80 00131 const char ECSINITSTRING[] = "NOT SET"; /* metadata output initialization*/ 00132 00133 /* 00134 Warning: The order and sequence of the initilizations can not 00135 be changed. We finish the initilization later and count on this order 00136 */ 00137 struct ECSmeta{ 00138 char *attrNameStr; /* name of metadata */ 00139 char *hdfAttrname; /* name of HDF global attribute */ 00140 char datatype[DATATYPELENMAX]; /* metadata data type */ 00141 int32 n_elements; /* Number of metadata elements to retrieve */ 00142 void * data; /* pointer to the data */ 00143 } ECS_input_metadata[] = { 00144 {CORE_RANGE_BEG_DATE, L1A_COREMETADATA, TXT, 00145 (int32) sizeof(ECS_metadata->rangebeginningdate), NULL}, 00146 {CORE_RANGE_BEG_TIME, L1A_COREMETADATA, TXT, 00147 (int32) sizeof(ECS_metadata->rangebeginningtime), NULL}, 00148 {CORE_RANGE_ENDING_DATE, L1A_COREMETADATA, TXT, 00149 (int32) sizeof(ECS_metadata->rangeendingdate), NULL}, 00150 {CORE_RANGE_ENDING_TIME, L1A_COREMETADATA, TXT, 00151 (int32) sizeof(ECS_metadata->rangeendingtime), NULL}, 00152 {CORE_DAYNIGHTFLAG, L1A_COREMETADATA, TXT, 00153 (int32) sizeof(ECS_metadata->operationmode), NULL}, 00154 {CORE_LOCALGRANULEID, L1A_COREMETADATA, TXT, 00155 (int32) sizeof(ECS_metadata->localinputgranuleid), NULL}, 00156 {CORE_PARAMETERVALUE ".1", L1A_COREMETADATA, TXT, 00157 (int32) sizeof(ECS_metadata->granulenumber), NULL}, 00158 {CORE_ASSOCIATEDPLATFORMSHORTNAME ".1", L1A_COREMETADATA, TXT, 00159 (int32) sizeof(ECS_metadata->platformshortname), NULL}, 00160 {MECS_PRODHISTORY, ARCHIVEMETADATA, TXT, (int32) sizeof( \ 00161 (ECS_metadata->version_metadata).productionhistory), NULL} 00162 }; 00163 00164 int i, retval=SUCCEED; /* loop index */ 00165 int sameattr; 00166 char msgbuf[STRMAX]; /* scratch string buffer */ 00167 00168 static char filefunc[] = __FILE__", GEO_read_L1AECS_metadata"; 00169 00170 00171 if((l1a_file == NULL) || (ECS_metadata == NULL) ) 00172 { 00173 sprintf(msgbuf, " l1a_file = %p, ECS_metadata = %p", 00174 (void*)l1a_file, (void*)ECS_metadata); 00175 modsmf(MODIS_E_BAD_INPUT_ARG, msgbuf, filefunc); 00176 00177 return FAIL; 00178 } 00179 00180 /* Initialize ECS_metadata output */ 00181 (void)memset(ECS_metadata,0,sizeof(ECS_metadata_struct)); 00182 (void)strncpy(ECS_metadata->rangebeginningdate,ECSINITSTRING, 00183 sizeof(ECS_metadata->rangebeginningdate)-1); 00184 (void)strncpy(ECS_metadata->rangebeginningtime,ECSINITSTRING, 00185 sizeof(ECS_metadata->rangebeginningtime)-1); 00186 (void)strncpy(ECS_metadata->rangeendingdate,ECSINITSTRING, 00187 sizeof(ECS_metadata->rangeendingdate)-1); 00188 (void)strncpy(ECS_metadata->rangeendingtime,ECSINITSTRING, 00189 sizeof(ECS_metadata->rangeendingtime)-1); 00190 (void)strncpy(ECS_metadata->operationmode,ECSINITSTRING, 00191 sizeof(ECS_metadata->operationmode)-1); 00192 (void)strncpy(ECS_metadata->localinputgranuleid,ECSINITSTRING, 00193 sizeof(ECS_metadata->localinputgranuleid)-1); 00194 (void)strncpy(ECS_metadata->granulenumber,ECSINITSTRING, 00195 sizeof(ECS_metadata->granulenumber)-1); 00196 (void)strncpy(ECS_metadata->platformshortname,ECSINITSTRING, 00197 sizeof(ECS_metadata->platformshortname)-1); 00198 (void)strncpy((ECS_metadata->version_metadata).productionhistory,ECSINITSTRING,\ 00199 sizeof((ECS_metadata->version_metadata).productionhistory)-1); 00200 00201 /* Finish initializing the ECS_input_metadata array with the contents 00202 defined above. 00203 00204 See warning about sequence in declaration section 00205 */ 00206 ECS_input_metadata[0].data = &ECS_metadata->rangebeginningdate; 00207 ECS_input_metadata[1].data = &ECS_metadata->rangebeginningtime; 00208 ECS_input_metadata[2].data = &ECS_metadata->rangeendingdate; 00209 ECS_input_metadata[3].data = &ECS_metadata->rangeendingtime; 00210 ECS_input_metadata[4].data = &ECS_metadata->operationmode; 00211 ECS_input_metadata[5].data = &ECS_metadata->localinputgranuleid; 00212 ECS_input_metadata[6].data = &ECS_metadata->granulenumber; 00213 ECS_input_metadata[7].data = &ECS_metadata->platformshortname; 00214 ECS_input_metadata[8].data = &ECS_metadata->version_metadata.productionhistory; 00215 00216 for (i = 0; i < N_ELEMENTS(ECS_input_metadata); i++) 00217 { 00218 sameattr = (i > 0 && !(strncmp(ECS_input_metadata[i].hdfAttrname, 00219 ECS_input_metadata[i-1].hdfAttrname, 00220 sizeof(ECS_input_metadata[i].hdfAttrname)))); 00221 if (getMODISECSinfo(l1a_file, (sameattr ? NULL : 00222 ECS_input_metadata[i].hdfAttrname), 00223 ECS_input_metadata[i].attrNameStr, ECS_input_metadata[i].datatype, 00224 &ECS_input_metadata[i].n_elements, ECS_input_metadata[i].data) != MAPIOK && 00225 strcmp(ECS_input_metadata[i].attrNameStr, MECS_PRODHISTORY) != 0) { 00226 sprintf(msgbuf, "getMODISECSinfo(%.*s)", ARGMAX, 00227 ECS_input_metadata[i].attrNameStr); 00228 modsmf(MODIS_E_GEO, msgbuf, filefunc); 00229 00230 retval = FAIL; 00231 } 00232 } 00233 00234 return retval; 00235 }
1.7.6.1