|
ocssw
1.0
|
00001 #include "hdf.h" 00002 #include "mfhdf.h" 00003 00004 #define byte unsigned char 00005 00006 #define MAXNFILES 800 /* Increase to 544 09/25/06 JMG - 800 WDR */ 00007 00008 00009 typedef struct cache_struct { 00010 int32 bscan; 00011 int32 escan ; 00012 int32 dataSize; 00013 VOIDP data; 00014 } cache_str; 00015 00016 00017 typedef struct l2prod_struct { 00018 00019 int32 fileindex; 00020 00021 char filename[128]; 00022 00023 int32 nrec; 00024 int32 nsamp; 00025 00026 int16 syear; 00027 int16 sday; 00028 int32 smsec; 00029 int16 eyear; 00030 int16 eday; 00031 int32 emsec; 00032 int32 orbit; 00033 char dtype[8]; 00034 00035 int32 ntilts; 00036 int16 tilt_flags[20]; 00037 int16 tilt_ranges[2][20]; 00038 00039 char *flagnames; 00040 int32 flagmask; 00041 00042 int32 year; 00043 int32 day; 00044 int32 msec; 00045 00046 int32 *year_cache; 00047 int32 *day_cache; 00048 int32 *msec_cache; 00049 00050 float32 *geoloc; 00051 float32 *longitude; 00052 float32 *latitude; 00053 float32 *geonav[6]; 00054 00055 float32 *lon_cntl; 00056 float32 *lat_cntl; 00057 float32 *cntl_pnts; 00058 float32 *cntl_pnts_cache; 00059 float32 *spline_arr; 00060 00061 int32 nprod; 00062 char *prodname[1000]; 00063 float32 bv_unscaled[1000]; 00064 int16 bv_scaled[1000]; 00065 00066 float32 *l2_data; 00067 int32 *l2_flags; 00068 00069 byte eng_qual[4]; 00070 byte s_flags[4]; 00071 int32 nflag[8]; 00072 00073 int32 geointerp; 00074 00075 int32 *mside; 00076 int32 *detnum; 00077 int32 *pixnum; 00078 00079 00080 } l2_prod; 00081 00082 00083 typedef struct meta_l2Struct { 00084 char *product_name; /* ATTR Product name(file name) */ 00085 char *title; 00086 char *data_center; /* ATTR data_center, processing center */ 00087 char *station; /* ATTR station */ 00088 float station_lat; /* ATTR station latitude */ 00089 float station_lon; /* ATTR station longitude */ 00090 char *mission; /* ATTR mission */ 00091 char *mission_char; /* ATTR Mission Characteristics */ 00092 char *sensor_name; /* ATTR sensor name */ 00093 char *sensor; /* ATTR sensor */ 00094 char *sensor_char; /* ATTR Sensor Characteristics */ 00095 char *sw_id; /* ATTR Software ID */ 00096 char *infiles; /* ATTR Input files */ 00097 char *stime; /* ATTR Start time */ 00098 char *etime; /* ATTR End time */ 00099 char *ctime; /* ATTR scene center time */ 00100 char *ntime; /* ATTR Node crossing time */ 00101 char *snode; /* ATTR Start Node */ 00102 char *enode; /* ATTR End Node */ 00103 int orbnum; /* ATTR orbit number */ 00104 char *norad1; /* ATTR NORAD elements, first line */ 00105 char *norad2; /* ATTR NORAD elements, second line */ 00106 int pix_start; /* ATTR LAC Pixel Start Number */ 00107 int pix_sub; /* ATTR LAC Pixel Subsampling */ 00108 int ncrec; /* ATTR scene center scan line */ 00109 int nfrec; /* ATTR number of filled scan line */ 00110 byte ff_mis; /* ATTR FF missing frames */ 00111 byte sd_mis; /* ATTR SDPS missing frames */ 00112 float flags_pc[32]; /* MFSD % data for each quality flag */ 00113 char *lat_units; /* ATTR Latitude units */ 00114 char *lon_units; /* ATTR Longitude units */ 00115 float sclat; /* ATTR scene center latitude */ 00116 float sclon; /* ATTR scene center longitude */ 00117 float scsol_z; /* ATTR scene center solar zenith angle */ 00118 float ullat; /* ATTR scene upper left latitude */ 00119 float ullon; /* ATTR scene upper left longitude */ 00120 float urlat; /* ATTR scene upper right latitude */ 00121 float urlon; /* ATTR scene upper right longitude */ 00122 float lllat; /* ATTR scene lower left latitude */ 00123 float lllon; /* ATTR scene lower left longitude */ 00124 float lrlat; /* ATTR scene lower right latitude */ 00125 float lrlon; /* ATTR scene lower right longitude */ 00126 float northlat; /* ATTR Northernmost latitude */ 00127 float southlat; /* ATTR Southernmost latitude */ 00128 float westlon; /* ATTR Westernmost longitude */ 00129 float eastlon; /* ATTR Easternmost longitude */ 00130 float startclat; /* ATTR Start Center Latitude */ 00131 float startclon; /* ATTR Start Center Longitude */ 00132 float endclat; /* ATTR End Center Latitude */ 00133 float endclon; /* ATTR End Center Longitude */ 00134 float nodel; /* ATTR Orbit node longitude */ 00135 int ntilts; /* MFSD Sensor Tilt */ 00136 /* Calibration Vgroup */ 00137 short entry_year; 00138 short entry_day; 00139 short ref_year; 00140 short ref_day; 00141 short ref_minute; 00142 } meta_l2Type; 00143 00144 00145 #define PNAME "Product Name" 00146 #define TITLE "Title" 00147 #define LEGEND "Legend" 00148 #define DCENTER "Data Center" 00149 #define MISSION "Mission" 00150 #define MSNCHAR "Mission Characteristics" 00151 #define SENNME "Sensor Name" 00152 #define SENSOR "Sensor" 00153 #define SNSCHAR "Sensor Characteristics" 00154 #define REPLACES "Replacement Flag" 00155 #define SOFTID "Software ID" 00156 #define PTIME "Processing Time" 00157 #define INFILES "Input Files" 00158 #define PROC_CON "Processing Control" 00159 #define PROC_LOG "Processing Log" 00160 00161 /* Constants defined for attributes defined in sec.5.3.2 of product specs */ 00162 00163 #define STATION "Station Name" 00164 #define STLAT "Station Latitude" 00165 #define STLON "Station Longitude" 00166 #define DTYPE "Data Type" 00167 #define NPIX "Pixels per Scan Line" 00168 #define NSAMP "Parent Pixels per Scan Line" 00169 #define NSCAN "Number of Scan Lines" 00170 #define NREC "Parent Number of Scan Lines" 00171 #define SNCNTR "Scene Center Scan Line" 00172 #define NFREC "Filled Scan Lines" 00173 #define FFLAG1 "FF Missing Frames" 00174 #define FFLAG2 "SDPS Missing Frames" 00175 #define MASKNAMES "Mask Names" 00176 #define PCTFLAG "Flag Percentages" 00177 #define FLAGNAMES "EPSILON1,LAND1,ANCIL1,SUNGLINT1,HIGHLT1,SATZEN1,COASTZ1,NEGLW1,STRAYLIGHT1,CLDICE1,COCCOLITH1,TRUBIDW1,SOLZEN1,HIGHTAU1,LOWLW1,CHLOR1" 00178 00179 /* Constants defined for attributes defined in sec.5.3.3 of product specs */ 00180 #define STIME "Start Time" 00181 00182 #ifdef ETIME 00183 #undef ETIME 00184 #endif 00185 00186 #define ETIME "End Time" 00187 #define CTIME "Scene Center Time" 00188 #define NTIME "Node Crossing Time" 00189 #define SYEAR "Start Year" 00190 #define SDAY "Start Day" 00191 #define SMSEC "Start Millisec" 00192 #define EYEAR "End Year" 00193 #define EDAY "End Day" 00194 #define EMSEC "End Millisec" 00195 #define SNODE "Start Node" 00196 #define ENODE "End Node" 00197 #define ORBNUM "Orbit Number" 00198 #define NORAD1 "NORAD Line 1" 00199 #define NORAD2 "NORAD Line 2" 00200 00201 /* Constants defined for attributes defined in sec.5.3.4 of product specs */ 00202 #define LATUNITS "Latitude Units" 00203 #define LONUNITS "Longitude Units" 00204 #define ULLAT "Upper Left Latitude" 00205 #define ULLON "Upper Left Longitude" 00206 #define URLAT "Upper Right Latitude" 00207 #define URLON "Upper Right Longitude" 00208 #define LLLAT "Lower Left Latitude" 00209 #define LLLON "Lower Left Longitude" 00210 #define LRLAT "Lower Right Latitude" 00211 #define LRLON "Lower Right Longitude" 00212 #define CLAT "Scene Center Latitude" 00213 #define CLON "Scene Center Longitude" 00214 #define SCSOL_Z "Scene Center Solar Zenith" 00215 #define NLAT "Northernmost Latitude" 00216 #define SLAT "Southernmost Latitude" 00217 #define WLON "Westernmost Longitude" 00218 #define ELON "Easternmost Longitude" 00219 #define STCLAT "Start Center Latitude" 00220 #define STCLON "Start Center Longitude" 00221 #define ENDCLAT "End Center Latitude" 00222 #define ENDCLON "End Center Longitude" 00223 #define NODEL "Orbit Node Longitude" 00224 00225 /* Constants defined for attributes defined in sec.5.3.4 of product specs */ 00226 #define PARAM "Parameter" 00227 #define UNITS "Units" 00228 #define PX_START "Start Pixel" 00229 #define LAC_PX_ST "LAC Pixel Start Number" 00230 #define PX_SUBSAMP "Pixel Subsampling Rate" 00231 #define LAC_PX_SUBSAMP "LAC Pixel Subsampling" 00232 #define PX_NUM "Pixels per Scan Line" 00233 #define SC_START "Start Scan" 00234 #define SC_SUBSAMP "Scan Subsampling Rate" 00235 #define SC_NUM "Number of Scan Lines" 00236 #define PX_LL_NUM "Pixel Coordinates" 00237 #define SC_LL_NUM "Scan Coordinates" 00238 #define SC_TYPE "Scaling" 00239 #define SC_EQN "Scaling Equation" 00240 #define BASE "Base" 00241 #define SLOPE "Slope" 00242 #define INTERCEPT "Intercept" 00243 #define SCALE_OFF "Scale Offset" 00244 00245 /* Constants defined for attributes defined in sec.5.4.1 of product specs */ 00246 #define PX_LL_FIRST "px_ll_first" 00247 #define PX_LL_FST_ATTR "Lat/lon of pixels along first scan line" 00248 #define PX_LL_LAST "px_ll_last" 00249 #define PX_LL_LST_ATTR "Lat/lon of pixels along last scan line" 00250 #define SC_LL_FIRST "sc_ll_first" 00251 #define SC_LL_FST_ATTR "Lat/lon of starts of scan lines" 00252 #define SC_LL_LAST "sc_ll_last" 00253 #define SC_LL_LST_ATTR "Lat/lon of ends of scan lines" 00254 00255 /* Constants defined for attributes defined in sec.5.4.2 of product specs */ 00256 #define NTILTS "ntilts" 00257 #define NTILTS_NAME "Number of scene tilt states" 00258 #define T_FLAGS "tilt_flags" 00259 #define T_FLAGS_NAME "Tilt indicators" 00260 #define T_RANGES "tilt_ranges" 00261 #define T_RANGES_NAME "Scan-line number ranges of scene tilt states" 00262 #define T_LATS "tilt_lats" 00263 #define T_LATS_NAME "Latitudes of tilt-range scan line end points" 00264 #define T_LONS "tilt_lons" 00265 #define T_LONS_NAME "Longitudes of tilt-range scan line end points" 00266 00267 /* Constants defined for navigation data */ 00268 #define ORBVEC "orb_vec" 00269 #define ORBVEC_NAME "Orbit position vector at scan line time" 00270 #define ORBVEC_UNITS "kilometers" 00271 #define LVERT "l_vert" 00272 #define LVERT_NAME "Local vertical vector in ECEF frame" 00273 #define SUNREF "sun_ref" 00274 #define SUNREF_NAME "Reference Sun vector in ECEF frame" 00275 #define ATTANG "att_ang" 00276 #define ATTANG_NAME "Computed yaw, roll, pitch" 00277 #define SENMAT "sen_mat" 00278 #define SENMAT_NAME "ECEF-to-sensor-frame matrix" 00279 #define SCANELL "scan_ell" 00280 #define SCANELL_NAME "Scan-track ellipse coefficients" 00281 #define NFLAG "nflag" 00282 #define NFLAG_NAME "Navigation flags" 00283 00284 00285 #define NTILTS "ntilts" 00286 #define TILT_FLAGS "tilt_flags" 00287 #define TILT_RANGES "tilt_ranges" 00288 #define TILT_LATS "tilt_lats" 00289 #define TILT_LONS "tilt_lons" 00290 #define MSEC "msec" 00291 #define ENG_QUAL "eng_qual" 00292 #define S_FLAGS "s_flags" 00293 #define NDVI_DATA "NDVI" 00294 #define L2_FLAGS "l2_flags" 00295 #define ORBVEC "orb_vec" 00296 #define LVERT "l_vert" 00297 #define SUNREF "sun_ref" 00298 #define ATTANG "att_ang" 00299 #define SENMAT "sen_mat" 00300 #define SCANELL "scan_ell" 00301 #define NFLAG "nflag" 00302 00303 00304 /* Prototypes */ 00305 void free_rowgroup_cache(); 00306 void init_rowgroup_cache(); 00307 int32 openL2(char *, char *, l2_prod *); 00308 int32 reopenL2(int32, l2_prod *); 00309 int32 readL2(l2_prod *l2_str, int32 ifile, int32 recnum, int32 iprod, 00310 unsigned char *scan_in_rowgroup); 00311 int32 readlonlat(l2_prod *l2_str, int32 ifile, int32 *start, int32 *edges, 00312 unsigned char *scan_in_rowgroup); 00313 int32 closeL2(l2_prod *, int32); 00314 int32 freeL2(l2_prod *); 00315 int32 findprod(l2_prod *, char* ); 00316 int32 readL2meta(meta_l2Type *, int32); 00317 int32 freeL2meta(meta_l2Type *); 00318 int32 getL3units(l2_prod *, int32, char *, char *); 00319
1.7.6.1