1 /**********************************************************************
2 * Structure and parameter definitions for Mcgill format
3 * radar data processing.
7 **********************************************************************/
11 #define MCG_RECORD 2048 /* Mcgill record size (bytes) */
12 #define MCG_CSP 12288 /* Mcgill CSP block size (bytes) */
13 #define MCG_MAX_SEG_NUM 107 /* 107 segments per Mcgill logical record */
15 /* Mcgill method return codes */
16 #define MCG_EOD 1 /* End_Of_Data flag */
17 #define MCG_OK 0 /* Successful return */
18 #define MCG_OPEN_FILE_ERR -1 /* Couldn't open Mcgill data file */
19 #define MCG_CLOSE_FILE_ERR -2 /* Couldn't close Mcgill data file */
20 #define MCG_EOF -3 /* Reached end of Mcgill data file */
21 #define MCG_READ_ERR -4 /* Error occurred reading data file */
22 #define MCG_FORMAT_ERR -5 /* Unidentified radar site or format error*/
23 #define SYS_NO_SPACE -6 /* Memory allocation problem */
25 /* Mcgill segment identifiers */
26 #define MCG_UNDEFINED_SEG 0
27 #define MCG_DATA_SEG 1
28 #define MCG_ELEV_SEG 2
31 /* Radar site/format codes */
32 #define MCG_PAFB_3_4 0 /* Patrick Air Force Base, format 3 or 4 */
33 #define MCG_PAFB_1_2 1 /* Patrick Air Force Base, format 1 or 2 */
34 #define MCG_SAOP 2 /* Sao Paulo */
36 typedef unsigned short word;
37 typedef unsigned char byte;
38 typedef int mcgSegmentID;
43 /* Word 41 of Mcgill header record. A word is 2 (unsigned) bytes. */
44 word hour; /* 0 to 23 */
45 word min; /* 0 to 59 */
46 word sec; /* 0 to 59 */
47 word day; /* 1 to 31 */
48 word month; /* 1 to 12 */
49 word year; /* 0 to 99 */
50 word num_records; /* No. logical records in volume scan */
53 word vol_scan_format; /* 1: 24 sweeps, normal
54 2: 24 sweeps, compressed
56 4: 12 sweeps, compressed */
59 word csp_rec; /* 0: No CSP block 1: CSP block */
65 FILE *fp; /* Pointer to Mcgill file */
67 int *num_bins; /* Points to array of 24 bin_counts,
68 one bin_count per sweep. */
73 /* Structure to contain a Mcgill logical record (2048 bytes) */
76 word record_num; /* No. of this logical record in volume scan */
77 byte last_record_flag; /* 1 if last record in vol_scan, 0 otherwise */
78 byte start_elev_num; /* Starting elev no. of data in this record */
79 byte end_elev_num; /* End elev no. of data in this record */
81 byte segment[107][19]; /* 107 elevation and data segments,
87 /* Structure to contain Mcgill reflectivity data from 1 ray */
93 int num_bins; /* no. of bins for this ray */
94 char data[240]; /* reflectivity data value for each bin */
99 /*************** Function Prototypes **********************/
100 /* Grouped by object operated on and/or returned. */
101 mcgFile_t *mcgFileOpen(int *code, char *filename);
102 int mcgFileClose(mcgFile_t *file);
104 int mcgRecordRead(mcgRecord_t *record, mcgFile_t *file);
106 mcgSegmentID mcgSegmentKeyIdentify(int key);
108 int mcgRayBuild(mcgRay_t *ray, mcgFile_t *file);