|
ocssw
1.0
|
00001 #ifndef __CZCS_DEFINED 00002 #define __CZCS_DEFINED 1 00003 /* 00004 Name: l1czcs.h 00005 00006 This file contains structures and typedef's for czcs lever 1 data. 00007 Also, function prototypes are defined 00008 00009 The typedefs: 00010 00011 HEADER2_TYPE : typedef for a czcs level 1 tape 00012 document record; 00013 DATA_REC_TYPE : typdef for a czcs level 1 data record. 00014 00015 JPB 20 Jun 95 00016 00017 W. Robinson, SAIC, 5 Mar 2004 adapt for use in l1czcs program, to 00018 update for Watson Gregg's Algorithm 00019 Improvement 00020 00021 */ 00022 00023 #define NCZCS_PIX 1968 00024 /* 00025 * definition of document record: 00026 */ 00027 #include "hdf.h" 00028 #include "mfhdf.h" 00029 00030 struct bit_field_1 /* a bit field used in document record */ { 00031 #ifdef __DEC_MACHINE 00032 unsigned p_rec_num : 12; 00033 unsigned sp1 : 4; 00034 unsigned rec_id : 6; 00035 unsigned file :2; 00036 unsigned valid_data_flg : 8; 00037 #else 00038 unsigned p_rec_num : 12; 00039 unsigned sp1 : 4; 00040 unsigned file :2; 00041 unsigned rec_id : 6; 00042 unsigned valid_data_flg : 8; 00043 #endif 00044 }; 00045 00046 typedef struct bit_field_1 BIT_FLD_1_TYPE; 00047 00048 struct line_long { 00049 int slope; 00050 int intercept; 00051 }; 00052 00053 typedef struct line_long LINE_TYPE_LONG; 00054 00055 struct line_short { 00056 short slope; 00057 short intercept; 00058 }; 00059 00060 typedef struct line_short LINE_TYPE_SHORT; 00061 struct hdr2 { 00062 BIT_FLD_1_TYPE file_info; 00063 00064 unsigned char target_area_code[3]; 00065 unsigned char file_no; 00066 00067 int tape_seq_no; 00068 int film_frame_no; 00069 short starting_yr; 00070 00071 short starting_day; 00072 00073 int start_msec; 00074 int inc_in_msec; 00075 short orbit; 00076 short no_of_scans; 00077 short lat_cntr; 00078 short long_cntr; 00079 short lat_crnr_fitl; 00080 short long_crnr_fitl; 00081 short lat_crnr_fitr; 00082 short long_crnr_fitr; 00083 short lat_crnr_litl; 00084 short long_crnr_litl; 00085 short lat_crnr_litr; 00086 short long_crnr_litr; 00087 unsigned char ilt_flags; 00088 unsigned char parameter_presence; 00089 short no_of_missing_scans_all; 00090 short no_of_missing_scans[6]; 00091 unsigned char alg_id_chan[6]; 00092 unsigned char alg_id_location; 00093 char spare2; 00094 int decom_run_no; 00095 int decom_reel_no; 00096 short no_of_hdt_sync_losses; 00097 short no_of_hdt_parity_errs; 00098 short no_of_wbvt_sync_losses; 00099 short no_of_wbvt_bit_slips; 00100 short ave_subcomputed_data[32]; 00101 char spare3; 00102 unsigned char bp_flag; 00103 short baseplate_temp; 00104 int spare4[134]; 00105 unsigned char gain; 00106 unsigned char threshold; 00107 short tilt; 00108 short scene_cntr_yr; 00109 short scene_cntr_doy; 00110 int scene_cntr_msec; 00111 short solar_el_cntr; 00112 short solar_az_cntr; 00113 short cntr_roll; 00114 short cntr_pitch; 00115 short cntr_yaw; 00116 unsigned char top_bot_tick_label_flag; 00117 unsigned char lft_rgt_tick_label_flag; 00118 short top_lft_tick_label; 00119 short top_rgt_tick_label; 00120 short bot_lft_tick_label; 00121 short bot_rgt_tick_label; 00122 short lft_top_tick_label; 00123 short lft_bot_tick_label; 00124 short rgt_top_tick_label; 00125 short rgt_bot_tick_label; 00126 unsigned char top_tick_inc; 00127 unsigned char bot_tick_inc; 00128 unsigned char lft_tick_inc; 00129 unsigned char rgt_tick_inc; 00130 short top_tick_loc[27]; 00131 short bot_tick_loc[27]; 00132 short lft_tick_loc[27]; 00133 short rgt_tick_loc[27]; 00134 LINE_TYPE_LONG chan_line[6]; 00135 short conversion_tab_chan6[256]; 00136 LINE_TYPE_SHORT enhancement_eqs[6]; 00137 int spare5[2]; 00138 int czcs_1lt[945]; 00139 unsigned char dummy[304]; /* rounded out record to 512 blk boundary */ 00140 } ; 00141 00142 typedef struct hdr2 HEADER2_TYPE; 00143 00144 00145 00146 00147 /* 00148 * definition of data record: 00149 */ 00150 00151 00152 00153 struct bit_field_2 { /* bit field used in data record */ 00154 #ifdef __DEC_MACHINE 00155 unsigned p_rec_num : 12; 00156 unsigned sp1 : 4; 00157 unsigned rec_id : 6; 00158 unsigned file :2; 00159 unsigned undefined : 3; 00160 unsigned volt_outside_range : 1; 00161 unsigned cal_outside_range : 1; 00162 unsigned channel_not_present : 1; 00163 unsigned qstnble_attitude : 1; 00164 unsigned qstnble_ephemeris : 1; 00165 #else 00166 unsigned p_rec_num : 12; 00167 unsigned sp1 : 4; 00168 unsigned file :2; 00169 unsigned rec_id : 6; 00170 unsigned qstnble_ephemeris : 1; 00171 unsigned qstnble_attitude : 1; 00172 unsigned channel_not_present : 1; 00173 unsigned cal_outside_range : 1; 00174 unsigned volt_outside_range : 1; 00175 unsigned undefined : 3; 00176 #endif 00177 }; 00178 00179 typedef struct bit_field_2 BIT_FLD_2_TYPE; 00180 00181 00182 00183 struct voltage_step { /* a component of voltage staircase */ 00184 unsigned char whole; 00185 unsigned char fraction; 00186 } ; 00187 00188 typedef struct voltage_step VOLTAGE_STEP; 00189 00190 00191 00192 struct data_record_struct { 00193 BIT_FLD_2_TYPE info; 00194 short seq_no; 00195 unsigned char spare1; 00196 unsigned char time_update_flag; 00197 short year; 00198 short doy; 00199 int msec_of_day; 00200 short subcommuted_data_val_cnt; 00201 unsigned char subcom_id; 00202 unsigned char spare2; 00203 VOLTAGE_STEP volt_stair[6][16]; /* one 16 step staircase per channel */ 00204 short cal_lamp_rad[6]; 00205 short blk_bdy_tmp_cnt; 00206 short wbvt_bit_slips_summary; 00207 short hdt_sync_losses; 00208 short hdt_parity_errs; 00209 short wbvt_bit_slips; 00210 int lat_anchr_pts[77]; 00211 int long_anchr_pts[77]; 00212 unsigned short pxl_no_nadir; 00213 unsigned char cal_qual[6]; /* one per channel */ 00214 unsigned char radiance_cnts[6][1968]; /* 1968 counts per channel */ 00215 int spare3[28]; 00216 unsigned char dummy[20]; /* round out record to 512 block boundary */ 00217 }; 00218 00219 typedef struct data_record_struct DATA_REC_TYPE; 00220 00221 00222 /* 00223 * Definition of VAX header rec : 00224 */ 00225 00226 struct VAX_header_struct { 00227 unsigned short magic1; 00228 unsigned short magic2; 00229 unsigned short data_rec_len; 00230 unsigned short num_of_doc_recs; 00231 unsigned short offset_1st_data_rec; 00232 unsigned short type_code; 00233 unsigned short num_of_data_recs; 00234 unsigned short orbit; 00235 unsigned short year; 00236 unsigned short header_rec_offset; 00237 unsigned short header_rec_len; 00238 unsigned short doc_rec_len; 00239 unsigned short dummy1; 00240 unsigned short dummy2; 00241 unsigned short dummy3; 00242 unsigned short scanner_tilt; 00243 char text[480]; 00244 } ; 00245 00246 typedef struct VAX_header_struct HEADER1_TYPE; 00247 00248 /* 00249 * structure to contain l1 and lat, lon anchor point data 00250 */ 00251 00252 struct l1_data_struc_def { 00253 unsigned char *counts[6]; /* counts for 6 bands in form pix x line x band */ 00254 /* with pixels running fastest */ 00255 int *msec; 00256 float *ctl_pt_lat; 00257 float *ctl_pt_lon; 00258 int *ctl_pt_cols; /* control pint columns and rows, evenly spaced */ 00259 int *ctl_pt_rows; /* and lastpoint on the line */ 00260 float *tilt; /* tilt / line */ 00261 float *slat; /* start, center, end lat, lon per line */ 00262 float *slon; 00263 float *clat; 00264 float *clon; 00265 float *elat; 00266 float *elon; 00267 unsigned char *cal_sum; /* calibration quality summary and */ 00268 unsigned char *cal_scan; /* quality per scan */ 00269 float *orb_vec; 00270 float *att_ang; 00271 float *pos_err; 00272 float *slope; 00273 float *intercept; 00274 short *gain; 00275 #ifdef GEOM_CAL 00276 float *sen_zen; /* geometry and calibrated radiances for test */ 00277 float *sen_az; 00278 float *sol_zen; 00279 float *sol_az; 00280 float *all_lat; 00281 float *all_lon; 00282 float *Lt_443; 00283 float *Lt_520; 00284 float *Lt_550; 00285 float *Lt_670; 00286 float *Lt_750; 00287 float *Lt_11500; 00288 #endif 00289 }; 00290 00291 typedef struct l1_data_struc_def l1_data_struc; 00292 00293 /* 00294 * Global attributes for output to the hdf file 00295 */ 00296 00297 struct gattr_struc_def { 00298 char prod_name[40]; /* Product Name */ 00299 char f_title[40]; /* Title */ 00300 char datatype[16]; /* Data Type */ 00301 char datacenter[256]; /* Data Center */ 00302 char stn_name[256]; /* Station Name */ 00303 float stn_lat; /* Station Latitude */ 00304 float stn_lon; /* Station Longitude */ 00305 char mission[40]; /* Mission */ 00306 char mission_char[256]; /* Mission Characteristics */ 00307 char sensor[40]; /* Sensor */ 00308 char sensor_char[256]; /* Sensor Characteristics */ 00309 char repl_flg[40]; /* Replacement Flag */ 00310 char soft_id[128]; /* Software ID */ 00311 char process_time[17]; /* Processing Time */ 00312 char input_files[1280]; /* Input Files */ 00313 char proc_ctl[1024]; /* Processing Controls */ 00314 char start_time[17]; /* Start Time */ 00315 char end_time[17]; /* End Time */ 00316 char center_time[17]; /* Scene Center Time */ 00317 short start_year; /* Start Year */ 00318 short start_day; /* Start Day */ 00319 int start_msec; /* Start Milisec */ 00320 short end_year; /* End Year */ 00321 short end_day; /* End Day */ 00322 int end_msec; /* End Milisec */ 00323 char start_node[11]; /* Start Node */ 00324 char end_node[11]; /* End Node */ 00325 int orbit; /* Orbit Number */ 00326 int gain; /* Scene Gain */ 00327 int thresh; /* Thresh */ 00328 float tilt; /* Sensor Tilt */ 00329 char lat_unit[15]; /* Latitude Units */ 00330 char lon_unit[15]; /* Longitude Units */ 00331 float center_lat; /* Scene Center Latitude */ 00332 float center_lon; /* Scene Center Longitude */ 00333 float cntr_sol_zen; /* Scene Center Solar Zenith */ 00334 float up_lft_lat; /* Upper Left Latitude */ 00335 float up_lft_lon; /* Upper Left Longitude */ 00336 float lo_lft_lat; /* Lower Left Latitude */ 00337 float lo_lft_lon; /* Lower Left Longitude */ 00338 float up_rgt_lat; /* Upper Right Latitude */ 00339 float up_rgt_lon; /* Upper Right Longitude */ 00340 float lo_rgt_lat; /* Lower Right Latitude */ 00341 float lo_rgt_lon; /* Lower Right Longitude */ 00342 float start_cntr_lat; /* Start Center Latitude */ 00343 float start_cntr_lon; /* Start Center Longitude */ 00344 float end_cntr_lat; /* End Center Latitude */ 00345 float end_cntr_lon; /* End Center Longitude */ 00346 int pix_per_scan; /* Pixels per Scan Line */ 00347 int scan_lines; /* Number of Scan Lines */ 00348 int lac_pixl_start_no; /* LAC Pixel Start Number */ 00349 int lac_pixl_subsample; /* LAC Pixel Subsampling */ 00350 int cntr_scn_line; /* Scene Center Scan Line */ 00351 int filled_lines; /* Filled Scan Lines */ 00352 float limits[4]; /* Northernmost Latitude, Southernmost 00353 Latitude, Westernmost Longitude, Easternmost Longitude */ 00354 float slope[6]; /* calibration slope and intercept from 2nd */ 00355 float intercept[6]; /* header = derived from voltage staircase */ 00356 /* Calibration Slope and Calibration Intercept */ 00357 float roll; /* Center Roll S/C roll, pitch and yaw at scene center */ 00358 float pitch; /* Center Pitch */ 00359 float yaw; /* Center Yaw */ 00360 int ctl_pt_incr; 00361 int n_ctl_pt; /* Number of Pixel Control Points */ 00362 int n_ctl_lin; /* Number of Scan Control Points */ 00363 unsigned char ilt_flags; /* ILT Flags */ 00364 unsigned char parm_presence; /* Parameter Presence Code */ 00365 short n_miss_scans; /* Number of Missing Scan Lines */ 00366 short n_scan_mis_chan[6]; /* Number of Scans with Missing Channels */ 00367 short n_hdt_sync_loss; /* Number of HDT Sync Losses */ 00368 short n_hdt_parity_err; /* Number of HDT Parity Errors */ 00369 short n_wbvt_sync_loss; /* Number of WBVT Sync Losses */ 00370 short n_wbvt_slips; /* Number of WBVT Slip Occurrences */ 00371 }; 00372 00373 typedef struct gattr_struc_def gattr_struc; 00374 00375 struct timqual_struc_d 00376 { 00377 int nscan; /* # scan lines */ 00378 int n_ctl_pt; /* # pixel ctl points - needed to set up out file */ 00379 int *qual; /* quality - 0 good, 1 bad */ 00380 int32_t *msec; /* msec from the file */ 00381 }; 00382 00383 typedef struct timqual_struc_d timqual_struc; 00384 00385 struct mstr_struc_d 00386 { 00387 int32_t *msec; /* time tag */ 00388 short *exist; /* does this scan exist? 1 = yes */ 00389 short *qual; /* quality 0 = good, 1 bad */ 00390 short *ds_num; /* dataset # in file list to take scan from */ 00391 int32_t *out_scan; /* output scan line to place the data */ 00392 short *scan; /* scan # to use */ 00393 int32_t *in_msec; /* the in_ values are for new candidate scans */ 00394 short *in_exist; 00395 short *in_qual; 00396 short *in_scan; 00397 }; 00398 00399 typedef struct mstr_struc_d mstr_struc; 00400 00401 #endif 00402 00403 /* 00404 * the function prototypes 00405 */ 00406 int main( int, char *[] ); 00407 int read_crtt( char *, gattr_struc *, l1_data_struc * ); 00408 void get_record_info( HEADER1_TYPE, short *, short *, short *, short *, 00409 short * ); 00410 short reverse_short_int( short ); 00411 int32_t reverse_long_int( int32_t ); 00412 void hdr_2_gattr( HEADER2_TYPE, gattr_struc * ); 00413 float fixed_pt_2_floating_pt( int, int ); 00414 int czcs_l1_write( char *, l1_data_struc, gattr_struc ); 00415 int create_global_attribute( char *, int, gattr_struc ); 00416 int create_band_sds( int, int, unsigned char *[], int, int ); 00417 void czcs_ctl_pt( DATA_REC_TYPE, gattr_struc *, int, l1_data_struc * ); 00418 void lonlat_( float[], float[], float[], float[] ); 00419 void lladjust_( float *, float *, float *, float *, float[], float[], float[] ); 00420 void satang_( double *, double *, float *, float *, float *, float *, float *, 00421 float *, float *, float * ); 00422 void sunangs_( int *, int *, float *, float *, float *, float *, float * ); 00423 int time_str( short, short, int, char * ); 00424 void cz_ll_upd( l1_data_struc *, gattr_struc * ); 00425 int wrt_czcs_sla( int32, int32, int, l1_data_struc ); 00426 int wrt_czcs_qual( int32, int32, int, l1_data_struc ); 00427 int32 set_czcs_ctl_data( int32, int32, gattr_struc, l1_data_struc ); 00428 int cz_clean( gattr_struc *, l1_data_struc * ); 00429 /* new for the merge program */ 00430 int read_file_list (char *, char **, int ); 00431 void usage( char * ); 00432 void olap_resolve( mstr_struc *, int, int, int, int ); 00433 void fill_mstr( int *, mstr_struc *, timqual_struc *, int, int, int ); 00434 int cztimqual( char *, timqual_struc *, int * ); 00435 int cz_l1_read( char *, int, gattr_struc *, l1_data_struc * ); 00436 int cz_dat_alloc( int, int, int, l1_data_struc * ); 00437 void cz_dat_free( l1_data_struc *, int ); 00438 int cz_mov_scn( int, int, char *, mstr_struc *, int, int, gattr_struc *, 00439 l1_data_struc * ); 00440 void cz_meta_adj( l1_data_struc *, gattr_struc * ); 00441 void cz_sd_set( l1_data_struc *, gattr_struc * ); 00442 int fill_orb_dat( l1_data_struc *l1_data, gattr_struc *gattr ); 00443 #ifdef __DEC_MACHINE 00444 void convert_data_rec_to_dec( DATA_REC_TYPE * ); 00445 void convert_header_rec_to_dec( HEADER2_TYPE * ); 00446 #endif
1.7.6.1