ocssw  1.0
/disk01/web/ocssw/build/src/l2brsgen/l2brsgen.h (r8218/r6127)
Go to the documentation of this file.
00001 #ifndef L2BRSGEN_H /* avoid re-inclusion */
00002 #define L2BRSGEN_H
00003 
00004 #include    <stdio.h>
00005 #include    <string.h>
00006 #include        <time.h>
00007 
00008 #include        "hdf.h"
00009 #include        "mfhdf.h" 
00010 #include        "hdfhdr.h"
00011 #include        "hdfmac.h"
00012 #include        "usrhdr.h"
00013 #include        "usrmac.h"
00014 
00015 #include <clo.h>
00016 #include <readL2scan.h>
00017 #include <get_product_table.h>
00018 
00019 #define VERSION "1.9"
00020 
00021 #define IOERR           -1
00022 #define RDERR           -2
00023 #define MEMERR          -3
00024 
00025 #define MAXVAL  255
00026 
00027 #define CHL_START       (l2_data + 8*nsamp)
00028 #define CHL_END         (l2_data + 9*nsamp)
00029 #define LAT_START       (l2_str.latitude)
00030 #define LAT_END         (l2_str.latitude + max_samp_used+1)
00031 #define LON_START       (l2_str.longitude)
00032 #define LON_END         (l2_str.longitude + max_samp_used+1)
00033 
00034 #define MAXTILTS 20
00035 #define NFLAGS   16
00036 
00037 /*  Time Conversion Constants  */
00038 #define MSECHOUR 3600000
00039 #define MSECMIN  60000
00040 #define MSECSEC  1000
00041 
00042 #define LONGNAME    "long_name"
00043 #define RANGE       "valid_range"
00044 
00045 /*  Global (file-level) Attributes  */
00046 /*  Constants defined for attributes defined in sec.5.3.1 of product specs */
00047 
00048 #define PNAME           "Product Name"
00049 #define TITLE       "Title"
00050 #define LEGEND      "Legend"
00051 #define TITLE_VAL   " Level-2 Browse Data"
00052 #define DCENTER     "Data Center"
00053 #define DCENTER_VAL     "NASA/GSFC SeaWiFS Data Processing Center"
00054 #define MISSION     "Mission"
00055 #define MSNCHAR         "Mission Characteristics"
00056 #define SENSOR_NAME     "Sensor Name"
00057 #define SENSOR      "Sensor"
00058 #define SNSCHAR     "Sensor Characteristics"
00059 
00060 
00061 #define REPLACES    "Replacement Flag"
00062 #define SOFTID      "Software ID"
00063 #define SOFTID_VAL  "?????"
00064 #define SOFT_NAME       "Software Name"
00065 #define SOFT_VER        "Software Version"
00066 #define PTIME       "Processing Time"
00067 #define L2BRS_INFILES       "Input Files"
00068 #define PROC_CON    "Processing Control"
00069 #define PROC_LOG    "Processing Log"
00070 
00071 /*  Constants defined for attributes defined in sec.5.3.2 of product specs */
00072 
00073 #define PINFILES   "Parent Input Files"
00074 #define PPNAME     "Parent Product Name"
00075 #define STATION    "Station Name"
00076 #define STLAT      "Station Latitude"
00077 #define STLON      "Station Longitude"
00078 #define DTYPE      "Data Type"
00079 #define NSAMP      "Parent Pixels per Scan Line"
00080 #define NREC       "Parent Number of Scan Lines"
00081 #define SNCNTR     "Scene Center Scan Line"
00082 #define NFREC      "Filled Scan Lines"
00083 #define FFLAG1     "FF Missing Frames"
00084 #define FFLAG2     "SDPS Missing Frames"
00085 #define PCTFLAG    "Flag Percentages"
00086 
00087 /*  Constants defined for attributes defined in sec.5.3.3 of product specs */
00088 #define STIME       "Start Time"
00089 #define ETIME       "End Time"
00090 #define CTIME       "Scene Center Time"
00091 #define NTIME       "Node Crossing Time"
00092 #define SYEAR       "Start Year"
00093 #define SDAY        "Start Day"
00094 #define SMSEC       "Start Millisec"
00095 #define EYEAR       "End Year"
00096 #define EDAY        "End Day"
00097 #define EMSEC       "End Millisec"
00098 #define SNODE       "Start Node"
00099 #define ENODE       "End Node"
00100 #define ORBNUM      "Orbit Number"
00101 #define NORAD1      "NORAD Line 1"
00102 #define NORAD2      "NORAD Line 2"
00103 
00104 /*  Constants defined for attributes defined in sec.5.3.4 of product specs */
00105 #define LATUNITS            "Latitude Units"
00106 #define LATUNITS_VAL        "degrees North"
00107 #define LONUNITS            "Longitude Units"
00108 #define LONUNITS_VAL        "degrees East"
00109 #define CLAT                "Scene Center Latitude"
00110 #define CLON                "Scene Center Longitude"
00111 #define SCSOL_Z         "Scene Center Solar Zenith"
00112 #define ULLAT           "Upper Left Latitude"
00113 #define ULLON           "Upper Left Longitude"
00114 #define URLAT           "Upper Right Latitude"
00115 #define URLON           "Upper Right Longitude"
00116 #define LLLAT           "Lower Left Latitude"
00117 #define LLLON           "Lower Left Longitude"
00118 #define LRLAT           "Lower Right Latitude"
00119 #define LRLON           "Lower Right Longitude"
00120 #define NLAT                "Northernmost Latitude"
00121 #define SLAT                "Southernmost Latitude"
00122 #define WLON                "Westernmost Longitude"
00123 #define ELON                "Easternmost Longitude"
00124 #define STCLAT          "Start Center Latitude"
00125 #define STCLON          "Start Center Longitude"
00126 #define ENDCLAT         "End Center Latitude"
00127 #define ENDCLON         "End Center Longitude"
00128 #define NODEL               "Orbit Node Longitude"
00129 
00130 /*  Constants defined for attributes defined in sec.5.3.4 of product specs */
00131 #define PARAM           "Parameter"
00132 #define PARAM_VAL       "Chlorophyll a concentration"
00133 #define UNITS           "Units"
00134 #define UNITS_VAL       "mg m^-3"
00135 #define PX_START        "Start Pixel"
00136 #define PX_END          "End Pixel"
00137 #define LAC_PX_ST       "LAC Pixel Start Number"
00138 #define PX_SUBSAMP      "Pixel Subsampling Rate"
00139 #define LAC_PX_SUBSAMP      "LAC Pixel Subsampling"
00140 #define PX_NUM          "Pixels per Scan Line"
00141 #define SC_START        "Start Scan"
00142 #define SC_END          "End Scan"
00143 #define SC_SUBSAMP      "Scan Subsampling Rate"
00144 #define SC_NUM          "Number of Scan Lines"
00145 #define PX_LL_NUM       "Pixel Coordinates"
00146 #define SC_LL_NUM       "Scan Coordinates"
00147 #define SC_TYPE         "Scaling"
00148 #define SC_TY_VAL       "logarithmic"
00149 #define SC_EQN          "Scaling Equation"
00150 #define SC_EQN_VAL  "Base**((Slope*brs_data) + Intercept) = chlorophyll a"
00151 #define BASE            "Base"
00152 #define BASE_VAL        10.0
00153 #define SLOPE           "Slope"
00154 #define SLOPE_VAL       0.015
00155 #define INTERCEPT       "Intercept"
00156 #define INTERCEPT_VAL       -2.0
00157 #define SCALE_OFF       "Scale Offset"
00158 
00159 /*  Constants defined for attributes defined in sec.5.4.1 of product specs */
00160 #define PX_LL_FIRST         "px_ll_first"
00161 #define PX_LL_FST_ATTR      "Lat/lon of pixels along first scan line"
00162 #define PX_LL_LAST          "px_ll_last"
00163 #define PX_LL_LST_ATTR      "Lat/lon of pixels along last scan line"
00164 #define SC_LL_FIRST         "sc_ll_first"
00165 #define SC_LL_FST_ATTR      "Lat/lon of starts of scan lines"
00166 #define SC_LL_LAST          "sc_ll_last"
00167 #define SC_LL_LST_ATTR      "Lat/lon of ends of scan lines"
00168 
00169 /*  Constants defined for attributes defined in sec.5.4.2 of product specs */
00170 #define NTILTS          "ntilts"
00171 #define NTILTS_NAME     "Number of scene tilt states"
00172 #define T_FLAGS             "tilt_flags"
00173 #define T_FLAGS_NAME        "Tilt indicators"
00174 #define T_RANGES            "tilt_ranges"
00175 #define T_RANGES_NAME       "Scan-line number ranges of scene tilt states"
00176 #define T_LATS              "tilt_lats"
00177 #define T_LATS_NAME     "Latitudes of tilt-range scan line end points"
00178 #define T_LONS              "tilt_lons"
00179 #define T_LONS_NAME     "Longitudes of tilt-range scan line end points"
00180 
00181 /* Constants defined for navigation data */
00182 #define ORBVEC           "orb_vec"
00183 #define ORBVEC_NAME      "Orbit position vector at scan line time"
00184 #define ORBVEC_UNITS     "kilometers"
00185 #define LVERT            "l_vert"
00186 #define LVERT_NAME       "Local vertical vector in ECEF frame"
00187 #define SUNREF           "sun_ref"
00188 #define SUNREF_NAME      "Reference Sun vector in ECEF frame"
00189 #define ATTANG           "att_ang"
00190 #define ATTANG_NAME      "Computed yaw, roll, pitch"
00191 #define SENMAT           "sen_mat"
00192 #define SENMAT_NAME      "ECEF-to-sensor-frame matrix"
00193 #define SCANELL          "scan_ell"
00194 #define SCANELL_NAME     "Scan-track ellipse coefficients"
00195 #define NFLAG            "nflag"
00196 #define NFLAG_NAME       "Navigation flags"
00197 #define CNTLPTCOLS       "cntl_pt_cols"
00198 #define CNTLPTCOLS_NAME  "Control point column values"
00199 
00200 #define CNTLPTLAT        "latitude"
00201 #define CNTLPTLAT_NAME   "Latitude values"
00202 #define CNTLPTLON        "longitude"
00203 #define CNTLPTLON_NAME   "Longitude values"
00204 
00205 
00206 extern char ERR_MSG[1024];
00207 
00208 
00209 int l2brsgen_init_options(clo_optionList_t* list);
00210 int l2brsgen_read_options(clo_optionList_t* list, int argc, char* argv[]);
00211 
00212 int32 put_l2brs(char *l2brs_path, char *replaces, char *ptime, char *infiles,
00213         int32 px_start, int32 px_end, int32 px_subsamp, int32 brs_nsamp,
00214         int32 sc_start, int32 sc_end, int32 sc_subsamp, int32 brs_nrec,
00215         char *l2brs_name, float32 *l2brs_data, int32 *l2brs_flags,
00216         char *flag_names, char *mskflg, unsigned char *palette,
00217         float32 *px_ll_first, float32 *px_ll_last, float32 *sc_ll_first,
00218         float32 *sc_ll_last, char *proc_con, int16 syear, int16 sday,
00219         int32 smsec, int16 eyear, int16 eday, int32 emsec, char *dtype,
00220         int32 nrec, int32 nsamp, int32 ntilts, short *tilt_flags,
00221         int16 *tilt_ranges, int16 *cntl_pt_lat, int16 *cntl_pt_lon,
00222         meta_l2Type *meta_l2, product_table_t *ptable_rec, int32 outmode, int32 apply_pal);
00223 
00224 void write_attrs(int32 sdfid, char *l2brs_path, char *replaces, char *ptime,
00225         char *infiles, int32 px_start, int32 px_end, int32 px_subsamp,
00226         int32 brs_nsamp, int32 sc_start, int32 sc_end, int32 sc_subsamp,
00227         int32 brs_nrec, char *l2brs_name, char *proc_con, int16 syear,
00228         int16 sday, int32 smsec, int16 eyear, int16 eday, int32 emsec,
00229         char *dtype, int32 nrec, int32 nsamp, meta_l2Type *meta_l2);
00230 
00231 int32 write_image(char *l2brs_path, unsigned char *l2brs_data, int32 brs_nsamp,
00232         int32 brs_nrec, uint8 *palette);
00233 
00234 int32 write_SDS(int32 sdfid, char *label, int32 ntype, int32 rank,
00235         int32 *dimsizes, int32 *start, void *buf);
00236 
00237 int32 write_tilt_sets(int32 fid, int32 sdfid, int32 ntilts, int16 *tilt_flags,
00238         int16 *tilt_ranges);
00239 
00240 int32 write_nav_sets(int32 fid, int32 sdfid, int32 brs_nrec, int32 brs_nsamp,
00241         int16 *cntl_pt_lat, int16 *cntl_pt_lon);
00242 
00243 
00244 #endif /* L2BRSGEN_H */