/*********************************************************************** scvdr.h Data structures for SCVDR product. We must take care that the C compiler doesn't insert unexpected pads into the data structures to make fields align to certain boundaries. Each element must begin on an offset that is an integral number of 'words' from the beginning of the structure, where a 'word' is the size of the element. That is, a 'double' element will be padded to begin on an offset divisible by 8. Similarly, any nested structures must begin on an offset divisible by the size of the largest primitive element within the nested structure. (A 'primitive element' is a data type that is pre-defined by C, like char, int, double.) Also, the total structure size will be padded to be a multiple of the largest constituent intrinsic type, e.g. 8 if the record contains a double. (All this is for efficient array indexing and register offsets.) This file is part of the STARLab Magellan Altimeter Data Processing Software. Michael Maurer and Joe Twicken, March 1992. ***********************************************************************/ /* $Log: scvdr.h,v $ * Revision 1.1 1992/08/24 23:11:04 joe * Added "max" fields to nh_rec, ih_rec, gh_rec; * Added new fields to eh_rec, er_rec. * * Revision 1.0 1992/06/26 23:58:31 maurer * Initial revision * */ #ifndef SCVDR_H #define SCVDR_H #define FN_VHF "%s/vhf%05d.%d" #define FN_OHF "%s/ohf%05d.%d" #define FN_ANF "%s/anf%05d.%d" #define FN_NFF "%s/nff%05d.%d" #define FN_SIF "%s/sif%05d.%d" #define FN_OIF "%s/oif%05d.%d" #define FN_EDF "%s/edf%05d.%d" #define FN_GMF "%s/gmf%05d.%d" #define FN_VTF "%s/vtf%05d.%d" #define FN_LOG "%s/log.%05d-%05d.%d" #define FN_OV "%s/ov%05d.%d" #define FN_GTAB "%s/gtab%05d.%d" #define FN_ID "%s/nav_update_ids.txt" #define FN_POLN "%s/poln.txt" #define FN_IR "%s/ir_flags.txt" #define FN_GMAT "%s/%s.fold" #include "types.h" typedef struct { /* based on mgm.h 1.13 4/10/90 */ char ctrl[4]; /* Control authority */ char vers; /* 1/2=ASCII/binary */ char class; /* SFDU type */ char spare[2]; /* Spares: 00 */ char ddid[4]; /* Data definition ID */ union { char alen[8]; /* ASCII aggregate length */ uchar blen[8]; /* Binary integer aggregate length */ } length; } sfdu; typedef struct { sfdu hr_sfdu; /* SFDU label/length */ int hr_orb; /* Orbit number */ int hr_ninv; /* Number altimetry inversion recs */ int hr_nfit; /* Number inversion fit recs */ int hr_nismg; /* Number SIN image data recs */ int hr_niomg; /* Number OBL image data recs */ int hr_nems; /* Number emissivity data recs */ uchar hr_pad1[4]; /* Pad */ double hr_inv_start; /* 1st inversion footprint time */ double hr_inv_end; /* Last inversion footprint time */ double hr_fit_start; /* 1st fit footprint time */ double hr_fit_end; /* Last fit footprint time */ double hr_simg_start; /* 1st SIN image footprint time */ double hr_simg_end; /* Last SIN image footprint time */ double hr_oimg_start; /* 1st OBL image footprint time */ double hr_oimg_end; /* Last OBL image footprint time */ double hr_ems_start; /* 1st emissivity footprint time */ double hr_ems_end; /* Last emissivity footprint time */ char hr_avg_sclk[15];/* Average orbit periapsis time */ char hr_avg_sma[23]; /* Average semi-major axis */ char hr_avg_ecc[23]; /* Average eccentricity */ char hr_avg_incl[23];/* Average inclination */ char hr_avg_lon[23]; /* Average ascending node longitude */ char hr_avg_arg[23]; /* Average argument of periapsis */ uchar hr_pad2[6]; /* Pad */ uchar hr_spare[16]; /* Spares */ } hr_rec; typedef struct { sfdu nh_sfdu; /* Altimetry inversion SFDU */ int nh_orb; /* Orbit number */ int nh_ver; /* Orbit version */ short nh_altinv_major;/* altinv major version number */ short nh_altinv_minor;/* altinv minor version number */ short nh_alt_major; /* alt major version number */ short nh_alt_minor; /* alt minor version number */ uchar nh_cvmf; /* Covariance matrix flag */ uchar nh_meth_inv; /* Inversion method ID */ uchar nh_meth_sig; /* Variance estimation method ID */ uchar nh_meth_Gamsig; /* Constraint variance method ID */ uchar nh_meth_thermal;/* Thermal noise method ID */ uchar nh_specf; /* Non-delta spectral filter flag */ uchar nh_meth_frot; /* Doppler rotation method ID */ uchar nh_pad; /* Pad */ int nh_nrec; /* Number of data records */ uchar nh_meth_echo; /* Range echo processing ID */ uchar nh_meth_bmax; /* Maximum angle method ID */ short nh_hid; /* Pulse compression ID */ short nh_comp_major; /* Comp major version ID */ short nh_comp_minor; /* Comp minor version ID */ short nh_maxB; /* Max number of solution angles */ short nh_maxN; /* Max number of elements in cvm */ uchar nh_spare[12]; /* Spares */ } nh_rec; typedef struct { float tn_sol; /* Inversion solution */ float tn_solv; /* Estimated variance of thnsol */ float tn_min; /* Smallest range-Doppler array value */ float tn_avg; /* Average of small values */ float tn_r; /* Minimum in range echo */ float tn_spare[4]; /* Spares */ } thn_t; typedef struct { uchar cl_TXA; /* Transmitter A flag */ uchar cl_RXA; /* Receiver A flag */ uchar cl_pad1[2]; /* Pad */ float cl_Cpt0; /* End-to-end system correction */ float cl_xstrap; /* Cross-strapping correction */ float cl_dCTX; /* Transmitter power correction */ float cl_TT1; /* Transmitter stage 1 temperature */ float cl_TOA; /* ONU altimeter temperature */ float cl_atmos; /* Atmospheric attenuation */ float cl_ant; /* Antenna pattern */ float cl_TRX; /* Receiver temperature */ float cl_dCT; /* Receiver temperature attenuation */ uchar cl_rac; /* Commandable attenuation code */ uchar cl_pad2[3]; /* Pad */ float cl_dCA; /* Receiver commandable attenuation */ float cl_CALT; /* Total amplitude correction */ } nr_calib_t; typedef struct { sfdu nr_sfdu; /* SFDU aggregate header label/length */ ulong nr_nfoot; /* Footprint number */ ulong nr_burst; /* Burst number */ ulong nr_flags; /* Flag fields */ double nr_scet; /* Footprint time */ double nr_gdopp; /* Gross doppler shift */ double nr_scpos[3]; /* Spacecraft position vector */ double nr_scvel[3]; /* Spacecraft velocity vector */ double nr_sspos[3]; /* Sub-spacecraft position vector */ double nr_alta[3]; /* Altimetry antenna boresight vector */ double nr_sara[3]; /* SAR antenna boresight vector */ double nr_rt0; /* Bin 0 round trip time */ double nr_rpk; /* Incremental round trip time */ float nr_lat; /* Latitude of nadir */ float nr_lon; /* Longitude of nadir */ float nr_xfoot; /* Along-track altimetry footprint */ float nr_yfoot; /* Cross-track altimetry footprint */ float nr_pvrad; /* Pioneer-Venus radius at nadir */ ulong nr_blo; /* First ALT burst used */ ulong nr_bhi; /* Last ALT burst used */ ushort nr_bav; /* Number of bursts averaged */ ushort nr_Gnum; /* G-matrix ID number */ ushort nr_blen; /* Number of angles in solution */ ushort nr_ncvm; /* Number of elements saved in cvm */ float nr_gamma; /* Smoothing factor */ float nr_chisq; /* Chi-square residual from solution */ float nr_rmss; /* RMS surface tilt from data */ thn_t nr_thn; /* Thermal noise estimates */ float nr_dcent; /* Doppler centroid */ float nr_dcentv; /* Variance of Doppler centroid */ float nr_frot; /* Doppler rotation used for solution */ nr_calib_t nr_calib; /* Calibration details */ sab_hdr_t nr_SAB; /* SAB header */ uchar nr_pad[2]; /* Pad */ uchar nr_spare[16]; /* Spares */ float *nr_sig0; /* Scattering function */ float *nr_ang; /* Solution angles */ float *nr_cvm; /* Covariance matrix */ } nr_rec; typedef struct { sfdu fh_sfdu; /* Inversion fit SFDU header/length */ int fh_orb; /* Orbit number */ int fh_ver; /* Orbit version */ short fh_sslfit_major;/* sslfit major version number */ short fh_sslfit_minor;/* sslfit minor version number */ short fh_altinv_major;/* altinv major version number */ short fh_altinv_minor;/* altinv minor version number */ short fh_alt_major; /* alt major version number */ short fh_alt_minor; /* alt minor version number */ int fh_nrec; /* # of records in file */ short fh_nlaw; /* # of synthetic scattering laws */ uchar fh_meth_inv; /* Inversion method ID */ uchar fh_meth_sig; /* Variance estimation method ID */ uchar fh_meth_Gamsig; /* Constraint variance method ID */ uchar fh_meth_thermal;/* Thermal noise method ID */ uchar fh_meth_frot; /* Doppler rotation method ID */ uchar fh_meth_echo; /* Range echo processing ID */ uchar fh_meth_bmax; /* Maximum angle method ID */ uchar fh_specf; /* Non-delta spectral filter flag */ uchar fh_pad[2]; /* Pad */ uchar fh_spare[16]; /* Spares */ } fh_rec; typedef struct { char fr_slaw[4]; /* Scattering law ID */ ulong fr_flags; /* Flag fields for fit */ float fr_p1; /* Fit parameter #1 */ float fr_p1v; /* Fit parameter #1 variance */ float fr_p2; /* Fit parameter #2 */ float fr_p2v; /* Fit parameter #2 variance */ float fr_rmss; /* RMS slope for fr_p1, fr_p2 */ float fr_rmsv; /* RMS slope variance */ float fr_resid; /* Residual error in fit */ } fr_sslf_t; typedef struct { sfdu fr_sfdu; /* SFDU aggregate header label/length */ ulong fr_nfoot; /* Footprint number */ ulong fr_nlaw; /* Number of scattering laws */ uchar fr_spare[4]; /* Spare */ fr_sslf_t *fr_sslf; /* Pointer to sets of fit results */ } fr_rec; typedef struct { sfdu ih_sfdu; /* SFDU aggregate header label/length */ int ih_orb; /* Orbit number */ int ih_ver; /* Version number */ int ih_nrec; /* Number of image data records */ int ih_sqlside; /* Number of image lines per record */ uchar ih_bidrf; /* Source data type */ uchar ih_lsqr; /* Fitting method flag */ short ih_rmap_major; /* RMAP major software version */ short ih_rmap_minor; /* RMAP minor software version */ short ih_maxB; /* Max number of angles */ short ih_maxI; /* Max histogram size */ uchar ih_pad[2]; /* Pad */ uchar ih_spare[12]; /* Spares */ } ih_rec; typedef struct { sfdu ir_sfdu; /* SFDU aggregate header label/length */ ulong ir_nfoot; /* Footprint number */ ulong ir_burst; /* Burst count for closest burst */ ulong ir_flags; /* Flag fields */ double ir_scet; /* Footprint time */ float ir_scpos[3]; /* Spacecraft position vector */ float ir_scvel[3]; /* Spacecraft velocity vector */ float ir_bpv[3]; /* SAR antenna unit boresight vector */ float ir_bip[3]; /* Boresight intercept point */ float ir_lat; /* Footprint latitude */ float ir_lon; /* Footprint longitude */ float ir_azimuth; /* Azimuth from footprint to s/c */ char ir_poln[2]; /* Polarization */ uchar ir_pad1[2]; /* Pad */ float ir_xfoot; /* Along-track footprint size */ float ir_yfoot; /* Cross-track footprint size */ float ir_mrp_lat; /* Mid-range point latitude */ float ir_mrp_lon; /* Mid-range point longitude */ float ir_mrp_inc; /* Mid-range point incidence angle */ int ir_mrp_C1; /* Mid-range point C1 coordinate */ int ir_mrp_C2; /* Mid-range point C2 coordinate */ float ir_bip_lat; /* BIP latitude */ float ir_bip_lon; /* BIP longitude */ float ir_bip_inc; /* BIP incidence angle */ float ir_bip_elev; /* BIP elevation */ float ir_bip_range; /* Apparent range s/c to BIP */ float ir_mrp_bs_coef; /* Normalizing factor for pixels */ float ir_theta_offset;/* Lowest incidence angle */ float ir_theta_max; /* Highest incidence angle */ float ir_thlo; /* Lowest angle for fit */ float ir_thhi; /* Highest angle for fit */ uchar ir_bmin; /* Lowest valid bin for angle fit */ uchar ir_bmax; /* Highest valid bin for angle fit */ uchar ir_nth; /* Number of angles in ir_bins */ uchar ir_polysize; /* Size of polynomial fit */ float ir_chisq; /* Chi square value from linear fit */ float ir_coefs[3]; /* Coefficients for polynomial fit */ uchar ir_Imin; /* Lowest valid intensity bin */ uchar ir_Imax; /* Highest valid intensity bin */ uchar ir_nI; /* Number of levels in ir_I_count */ uchar ir_pad2[5]; /* Pad */ uchar ir_spare[8]; /* Spares */ bin_t *ir_bins; /* Backscatter data */ ulong *ir_I_count; /* Histogram of pixel values */ } ir_rec; typedef struct { sfdu eh_sfdu; /* SFDU header label and length */ int eh_orb; /* Orbit number */ int eh_ver; /* Version number */ short eh_radi_major; /* RADI major version number */ short eh_radi_minor; /* RADI minor version number */ int eh_nrec; /* Number of data records */ short eh_radp_major; /* RADP major version number */ short eh_radp_minor; /* RADP minor version number */ short eh_engex_major; /* ENGEX major version number */ short eh_engex_minor; /* ENGEX minor version number */ short eh_sabex_major; /* SABEX major version number */ short eh_sabex_minor; /* SABEX minor version number */ short eh_rcomp_major; /* RCOMP module major version */ short eh_rcomp_minor; /* RCOMP module minor version */ short eh_ratm_major; /* Radiative transfer model ID */ uchar eh_meth_quat; /* Quaternion computation method */ uchar eh_meth_Tsky; /* Tsky computation method */ uchar eh_meth_Tvenus; /* Venus disk brightness comp method */ uchar eh_meth_beam_eff;/* Beam efficiency comp method */ uchar eh_meth_rho; /* Reflectivity comp method */ uchar eh_meth_var; /* Variance estimation comp method */ uchar eh_meth_syst; /* S systematic error correction meth */ uchar eh_meth_geom; /* Geometry computation method */ uchar eh_meth_telem; /* Source of telemetry info */ uchar eh_pad; /* Pad */ float eh_Tvenus; /* Venus temperature, K */ float eh_Tcosmic; /* Cosmic background temperature */ float eh_beam_eff; /* Beam efficiency */ float eh_rad_eff; /* Antenna radiation efficiency */ uchar eh_spare[12]; /* Spares */ } eh_rec; typedef struct { sfdu er_sfdu; /* SFDU aggregate header label/length */ ulong er_nfoot; /* Footprint number */ ulong er_burst; /* SAB number */ ulong er_flags; /* Flags */ double er_scet; /* S/C radiometry epoch */ float er_scpos[3]; /* S/C position vector */ float er_alta[3]; /* Altimeter pointing vector */ float er_sara[3]; /* SAR pointing vector */ float er_lat; /* Footprint latitude */ float er_lon; /* Footprint longitude */ float er_azimuth; /* Azimuth from footprint to s/c */ char er_poln[2]; /* Polarization */ uchar er_pad1[2]; /* Pad */ float er_radius; /* Footprint planetary radius */ float er_inc; /* Footprint incidence angle */ uchar er_ss_prev[10]; /* SAR status for preceding burst */ uchar er_ss_ant[10]; /* SAR status for antenna burst */ uchar er_ss_cal[10]; /* SAR status for calibration burst */ uchar er_xmtA; /* Transmitter A flag */ uchar er_rcvA; /* Receiver A flag */ uchar er_onuA; /* ONU A flag */ uchar er_pad2[3]; /* Pad */ float er_S; /* Calibrated radiometry signal */ float er_Sprime; /* Corrected radiometry signal */ float er_CAL; /* Compensated calib measurement */ float er_Trcv; /* Receiver physical temperature */ float er_Tsi; /* Sensor input noise temperature */ float er_Tsen[5]; /* Cable temperature sensors */ float er_Tant; /* HGA antenna noise temperature */ float er_Thga; /* HGA reflector physical temp */ float er_TSfeed; /* S-band feed physical temp */ float er_Tsky; /* Reflected sky temperature */ float er_OmegaV; /* Solid angle subtended by Venus */ float er_alpha; /* 1-way transmission ray path to BIP */ float er_Tsurf; /* Surface physical temp */ float er_Tup; /* Upwelling atmospheric emission t */ float er_Tdn; /* Downwelling atmospheric emission t */ float er_Tb; /* Surface brightness temp */ float er_Tbv; /* Surface brightness temp variance */ float er_emiss; /* Emissivity */ float er_emissv; /* Emissivity variance */ uchar er_pad3[4]; /* Pad */ uchar er_spare[8]; /* Spares */ } er_rec; typedef struct { sfdu gh_sfdu; /* SFDU aggregate header label/length */ short gh_ng; /* Number of G-matrices */ short gh_maxB; /* Max dim angle vector */ short gh_maxR; /* Max dim range vector */ short gh_maxF; /* Max dim frequency vector */ int gh_maxBR; /* Max dim angle-range G-matrix */ int gh_maxBF; /* Max dim angle-frequency G-matrix */ uchar gh_spare[8]; /* Spares */ } gh_rec; typedef struct { sfdu gr_sfdu; /* SFDU aggregate header label/length */ short gr_Gnum; /* G-matrix ID number */ short gr_orb; /* Orbit number */ ulong gr_burst; /* Burst number within orbit */ uchar gr_pad1[4]; /* Pad */ double gr_scet; /* Burst time */ float gr_lat; /* Nadir latitude */ float gr_lon; /* Nadir longitude */ double gr_scpos[3]; /* Spacecraft position */ double gr_scvel[3]; /* Spacecraft velocity */ double gr_alta[3]; /* Altimeter pointing vector */ double gr_sara[3]; /* SAR pointing vector */ short gr_blen; /* Number of angles */ short gr_rlen; /* Number of ranges */ short gr_flen; /* Number of frequencies */ short gr_ralias; /* Highest range aliasing included */ short gr_falias; /* Highest freq aliasing included */ uchar gr_pad2[2]; /* Pad */ uchar gr_spare[16]; /* Spares */ float *gr_b; /* Angle vector */ float *gr_r; /* Range vector */ float *gr_f; /* Frequency vector */ float *gr_gbr; /* Angle-range G-matrix */ float *gr_gbf; /* Angle-Doppler G-matrix */ } gr_rec; #endif SCVDR_H