NASA Logo
Ocean Color Science Software

ocssw V2022
l2brsgen.h
Go to the documentation of this file.
1 #ifndef L2BRSGEN_H /* avoid re-inclusion */
2 #define L2BRSGEN_H
3 
4 #include <stdio.h>
5 #include <string.h>
6 #include <time.h>
7 
8 #include "hdf.h"
9 #include "mfhdf.h"
10 
11 #include <clo.h>
12 #include <readL2scan.h>
13 #include <get_product_table.h>
14 
15 //#include "hdfhdr.h"
16 //#include "hdfmac.h"
17 //#include "usrhdr.h"
18 #ifdef BUILD_HISTORICAL
19 #include "usrmac.h"
20 #endif
21 #define VERSION "2.0"
22 
23 #define IOERR -1
24 #define RDERR -2
25 #define MEMERR -3
26 
27 #define MAXVAL 255
28 
29 #define CHL_START (l2_data + 8*nsamp)
30 #define CHL_END (l2_data + 9*nsamp)
31 #define LAT_START (l2_str.latitude)
32 #define LAT_END (l2_str.latitude + max_samp_used+1)
33 #define LON_START (l2_str.longitude)
34 #define LON_END (l2_str.longitude + max_samp_used+1)
35 
36 #define MAXTILTS 20
37 #define NFLAGS 16
38 
39 /* Time Conversion Constants */
40 #define MSECHOUR 3600000
41 #define MSECMIN 60000
42 #define MSECSEC 1000
43 
44 #define LONGNAME "long_name"
45 #define RANGE "valid_range"
46 
47 /* Global (file-level) Attributes */
48 /* Constants defined for attributes defined in sec.5.3.1 of product specs */
49 
50 #define L2B_PNAME "Product Name"
51 #define L2B_TITLE "Title"
52 #define LEGEND "Legend"
53 #define TITLE_VAL " Level-2 Browse Data"
54 #define DCENTER "Data Center"
55 #define DCENTER_VAL "NASA/GSFC SeaWiFS Data Processing Center"
56 #define L2BRS_MISSION "Mission"
57 #define MSNCHAR "Mission Characteristics"
58 #define SENSOR_NAME "Sensor Name"
59 #define SENSOR "Sensor"
60 #define SNSCHAR "Sensor Characteristics"
61 
62 
63 #define REPLACES "Replacement Flag"
64 #define SOFTID "Software ID"
65 #define SOFTID_VAL "?????"
66 #define SOFT_NAME "Software Name"
67 #define SOFT_VER "Software Version"
68 #define PTIME "Processing Time"
69 #define L2BRS_INFILES "Input Files"
70 #define PROC_CON "Processing Control"
71 #define PROC_LOG "Processing Log"
72 
73 /* Constants defined for attributes defined in sec.5.3.2 of product specs */
74 
75 #define PINFILES "Parent Input Files"
76 #define PPNAME "Parent Product Name"
77 #define DTYPE "Data Type"
78 #define NSAMP "Parent Pixels per Scan Line"
79 #define NREC "Parent Number of Scan Lines"
80 #define SNCNTR "Scene Center Scan Line"
81 #define NFREC "Filled Scan Lines"
82 #define FFLAG1 "FF Missing Frames"
83 #define FFLAG2 "SDPS Missing Frames"
84 #define L2BRS_PCTFLAG "Flag Percentages"
85 
86 /* Constants defined for attributes defined in sec.5.3.3 of product specs */
87 #define STIME "Start Time"
88 #define END_TIME "End Time"
89 #define CTIME "Scene Center Time"
90 #define NTIME "Node Crossing Time"
91 #define SYEAR "Start Year"
92 #define SDAY "Start Day"
93 #define SMSEC "Start Millisec"
94 #define EYEAR "End Year"
95 #define EDAY "End Day"
96 #define EMSEC "End Millisec"
97 #define SNODE "Start Node"
98 #define ENODE "End Node"
99 #define ORBNUM "Orbit Number"
100 #define NORAD1 "NORAD Line 1"
101 #define NORAD2 "NORAD Line 2"
102 
103 /* Constants defined for attributes defined in sec.5.3.4 of product specs */
104 #define LATUNITS "Latitude Units"
105 #define LATUNITS_VAL "degrees North"
106 #define LONUNITS "Longitude Units"
107 #define LONUNITS_VAL "degrees East"
108 #define CLAT "Scene Center Latitude"
109 #define CLON "Scene Center Longitude"
110 #define SCSOL_Z "Scene Center Solar Zenith"
111 #define ULLAT "Upper Left Latitude"
112 #define ULLON "Upper Left Longitude"
113 #define URLAT "Upper Right Latitude"
114 #define URLON "Upper Right Longitude"
115 #define LLLAT "Lower Left Latitude"
116 #define LLLON "Lower Left Longitude"
117 #define LRLAT "Lower Right Latitude"
118 #define LRLON "Lower Right Longitude"
119 #define NLAT "Northernmost Latitude"
120 #define SLAT "Southernmost Latitude"
121 #define WLON "Westernmost Longitude"
122 #define ELON "Easternmost Longitude"
123 #define STCLAT "Start Center Latitude"
124 #define STCLON "Start Center Longitude"
125 #define ENDCLAT "End Center Latitude"
126 #define ENDCLON "End Center Longitude"
127 #define NODEL "Orbit Node Longitude"
128 
129 /* Constants defined for attributes defined in sec.5.3.4 of product specs */
130 #define PARAM "Parameter"
131 #define PARAM_VAL "Chlorophyll a concentration"
132 #define UNITS "Units"
133 #define UNITS_VAL "mg m^-3"
134 #define PX_START "Start Pixel"
135 #define PX_END "End Pixel"
136 #define LAC_PX_ST "LAC Pixel Start Number"
137 #define PX_SUBSAMP "Pixel Subsampling Rate"
138 #define LAC_PX_SUBSAMP "LAC Pixel Subsampling"
139 #define PX_NUM "Pixels per Scan Line"
140 #define SC_START "Start Scan"
141 #define SC_END "End Scan"
142 #define SC_SUBSAMP "Scan Subsampling Rate"
143 #define SC_NUM "Number of Scan Lines"
144 #define PX_LL_NUM "Pixel Coordinates"
145 #define SC_LL_NUM "Scan Coordinates"
146 #define SC_TYPE "Scaling"
147 #define SC_TY_VAL "logarithmic"
148 #define SC_EQN "Scaling Equation"
149 #define SC_EQN_VAL "Base**((Slope*brs_data) + Intercept) = chlorophyll a"
150 #define BASE "Base"
151 #define BASE_VAL 10.0
152 #define SLOPE "Slope"
153 #define SLOPE_VAL 0.015
154 #define INTERCEPT "Intercept"
155 #define INTERCEPT_VAL -2.0
156 #define SCALE_OFF "Scale Offset"
157 
158 /* Constants defined for attributes defined in sec.5.4.1 of product specs */
159 #define PX_LL_FIRST "px_ll_first"
160 #define PX_LL_FST_ATTR "Lat/lon of pixels along first scan line"
161 #define PX_LL_LAST "px_ll_last"
162 #define PX_LL_LST_ATTR "Lat/lon of pixels along last scan line"
163 #define SC_LL_FIRST "sc_ll_first"
164 #define SC_LL_FST_ATTR "Lat/lon of starts of scan lines"
165 #define SC_LL_LAST "sc_ll_last"
166 #define SC_LL_LST_ATTR "Lat/lon of ends of scan lines"
167 
168 /* Constants defined for attributes defined in sec.5.4.2 of product specs */
169 #define NTILTS "ntilts"
170 #define NTILTS_NAME "Number of scene tilt states"
171 #define T_FLAGS "tilt_flags"
172 #define T_FLAGS_NAME "Tilt indicators"
173 #define T_RANGES "tilt_ranges"
174 #define T_RANGES_NAME "Scan-line number ranges of scene tilt states"
175 #define T_LATS "tilt_lats"
176 #define T_LATS_NAME "Latitudes of tilt-range scan line end points"
177 #define T_LONS "tilt_lons"
178 #define T_LONS_NAME "Longitudes of tilt-range scan line end points"
179 
180 /* Constants defined for navigation data */
181 #define ORBVEC "orb_vec"
182 #define ORBVEC_NAME "Orbit position vector at scan line time"
183 #define ORBVEC_UNITS "kilometers"
184 #define LVERT "l_vert"
185 #define LVERT_NAME "Local vertical vector in ECEF frame"
186 #define SUNREF "sun_ref"
187 #define SUNREF_NAME "Reference Sun vector in ECEF frame"
188 #define ATTANG "att_ang"
189 #define ATTANG_NAME "Computed yaw, roll, pitch"
190 #define SENMAT "sen_mat"
191 #define SENMAT_NAME "ECEF-to-sensor-frame matrix"
192 #define SCANELL "scan_ell"
193 #define SCANELL_NAME "Scan-track ellipse coefficients"
194 #define NFLAG "nflag"
195 #define NFLAG_NAME "Navigation flags"
196 #define CNTLPTCOLS "cntl_pt_cols"
197 #define CNTLPTCOLS_NAME "Control point column values"
198 
199 #define CNTLPTLAT "latitude"
200 #define CNTLPTLAT_NAME "Latitude values"
201 #define CNTLPTLON "longitude"
202 #define CNTLPTLON_NAME "Longitude values"
203 
204 
205 extern char ERR_MSG[1024];
206 
207 
209 int l2brsgen_read_options(clo_optionList_t* list, int argc, char* argv[],
210  l2_prod *l2_str, meta_l2Type *meta_l2);
211 int32 put_l2brs(char *l2brs_path, char *replaces, char *ptime, char *infiles,
212  int32 px_start, int32 px_end, int32 px_subsamp, int32 brs_nsamp,
213  int32 sc_start, int32 sc_end, int32 sc_subsamp, int32 brs_nrec,
214  char *l2brs_name, float32 *l2brs_data, int32 *l2brs_flags,
215  char *flag_names, int32_t * l2_bits, char *mskflg, unsigned char *palette,
216  float32 *px_ll_first, float32 *px_ll_last, float32 *sc_ll_first,
217  float32 *sc_ll_last, char *proc_con, int16 syear, int16 sday,
218  int32 smsec, int16 eyear, int16 eday, int32 emsec, char *dtype,
219  int32 nrec, int32 nsamp, int32 ntilts, short *tilt_flags,
220  int16 *tilt_ranges, int16 *cntl_pt_lat, int16 *cntl_pt_lon,
221  meta_l2Type *meta_l2, product_table_t *ptable_rec, const char* oformat, int32 apply_pal);
222 
223 void write_attrs(int32 sdfid, char *l2brs_path, char *replaces, char *ptime,
224  char *infiles, int32 px_start, int32 px_end, int32 px_subsamp,
225  int32 brs_nsamp, int32 sc_start, int32 sc_end, int32 sc_subsamp,
226  int32 brs_nrec, char *l2brs_name, char *proc_con, int16 syear,
227  int16 sday, int32 smsec, int16 eyear, int16 eday, int32 emsec,
228  char *dtype, int32 nrec, int32 nsamp, meta_l2Type *meta_l2);
229 
230 int32 write_image(char *l2brs_path, unsigned char *l2brs_data, int32 brs_nsamp,
231  int32 brs_nrec, uint8 *palette);
232 
233 int32 write_SDS(int32 sdfid, char *label, int32 ntype, int32 rank,
234  int32 *dimsizes, int32 *start, void *buf);
235 
236 int32 write_tilt_sets(int32 fid, int32 sdfid, int32 ntilts, int16 *tilt_flags,
237  int16 *tilt_ranges);
238 
239 int32 write_nav_sets(int32 fid, int32 sdfid, int32 brs_nrec, int32 brs_nsamp,
240  int16 *cntl_pt_lat, int16 *cntl_pt_lon);
241 
242 
243 #endif /* L2BRSGEN_H */
void write_attrs(int32 sdfid, char *l2brs_path, char *replaces, char *ptime, char *infiles, int32 px_start, int32 px_end, int32 px_subsamp, int32 brs_nsamp, int32 sc_start, int32 sc_end, int32 sc_subsamp, int32 brs_nrec, char *l2brs_name, char *proc_con, int16 syear, int16 sday, int32 smsec, int16 eyear, int16 eday, int32 emsec, char *dtype, int32 nrec, int32 nsamp, meta_l2Type *meta_l2)
Definition: put_l2brs.c:466
integer, parameter int16
Definition: cubeio.f90:3
int l2brsgen_read_options(clo_optionList_t *list, int argc, char *argv[], l2_prod *l2_str, meta_l2Type *meta_l2)
int32 put_l2brs(char *l2brs_path, char *replaces, char *ptime, char *infiles, int32 px_start, int32 px_end, int32 px_subsamp, int32 brs_nsamp, int32 sc_start, int32 sc_end, int32 sc_subsamp, int32 brs_nrec, char *l2brs_name, float32 *l2brs_data, int32 *l2brs_flags, char *flag_names, int32_t *l2_bits, char *mskflg, unsigned char *palette, float32 *px_ll_first, float32 *px_ll_last, float32 *sc_ll_first, float32 *sc_ll_last, char *proc_con, int16 syear, int16 sday, int32 smsec, int16 eyear, int16 eday, int32 emsec, char *dtype, int32 nrec, int32 nsamp, int32 ntilts, short *tilt_flags, int16 *tilt_ranges, int16 *cntl_pt_lat, int16 *cntl_pt_lon, meta_l2Type *meta_l2, product_table_t *ptable_rec, const char *oformat, int32 apply_pal)
Definition: put_l2brs.c:137
char ERR_MSG[1024]
Definition: extract_sub.c:119
int32 write_nav_sets(int32 fid, int32 sdfid, int32 brs_nrec, int32 brs_nsamp, int16 *cntl_pt_lat, int16 *cntl_pt_lon)
Definition: put_l2brs.c:756
int32 write_image(char *l2brs_path, unsigned char *l2brs_data, int32 brs_nsamp, int32 brs_nrec, uint8 *palette)
list(APPEND LIBS ${NETCDF_LIBRARIES}) find_package(GSL REQUIRED) include_directories($
Definition: CMakeLists.txt:8
int32 write_SDS(int32 sdfid, char *label, int32 ntype, int32 rank, int32 *dimsizes, int32 *start, void *buf)
Definition: put_l2brs.c:710
int l2brsgen_init_options(clo_optionList_t *list)
dtype
Definition: DDataset.hpp:31
char * flag_names[]
Definition: l2lists.h:46
Extra metadata that will be written to the HDF4 file l2prod rank
int32 write_tilt_sets(int32 fid, int32 sdfid, int32 ntilts, int16 *tilt_flags, int16 *tilt_ranges)