ocssw  1.0
/disk01/web/ocssw/build/inc/swfinc/readL2scan.h (r8218/r7819)
Go to the documentation of this file.
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