]> Pileus Git - ~andy/rsl/blob - mcgill.h
RSL v1.44
[~andy/rsl] / mcgill.h
1 /**********************************************************************
2  *    Structure and parameter definitions for Mcgill format
3  * radar data processing.
4  *
5  *   Kolander
6  *
7  **********************************************************************/
8
9 #include <stdio.h>
10
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 */
14
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 */
24
25 /* Mcgill segment identifiers */
26 #define MCG_UNDEFINED_SEG 0
27 #define MCG_DATA_SEG      1
28 #define MCG_ELEV_SEG      2
29 #define MCG_EOD_SEG       3
30
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 */
35
36 typedef unsigned short word;
37 typedef unsigned char byte;
38 typedef int mcgSegmentID;
39
40 typedef struct
41    {
42    word unused[40];
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 */
51    word unused1[3];
52    /* Word 51 */
53    word vol_scan_format; /*  1: 24 sweeps, normal
54                              2: 24 sweeps, compressed
55                              3: 12 sweeps, normal
56                              4: 12 sweeps, compressed */
57    word unused2[4];
58    /* Word 56 */
59    word csp_rec;   /* 0: No CSP block     1: CSP block */
60    }
61 mcgHeader_t;
62
63 typedef struct
64    {
65    FILE *fp;            /* Pointer to Mcgill file */
66    int site;
67    int *num_bins;       /* Points to array of 24 bin_counts,
68                                                    one bin_count per sweep. */
69    mcgHeader_t head;
70    }
71 mcgFile_t;
72
73 /* Structure to contain a Mcgill logical record (2048 bytes) */
74 typedef struct
75    {
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 */
80    byte unused[9];
81    byte segment[107][19]; /* 107 elevation and data segments, 
82                              19 bytes each. */
83    byte unused1;
84    }
85 mcgRecord_t;
86
87 /* Structure to contain Mcgill reflectivity data from 1 ray */
88 typedef struct
89    {
90    float elev;
91    float azm;
92    int sweep_num;
93    int num_bins;   /* no. of bins for this ray */
94    char data[240]; /* reflectivity data value for each bin */
95    }
96 mcgRay_t;
97
98
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);
103
104 int mcgRecordRead(mcgRecord_t *record, mcgFile_t *file);
105
106 mcgSegmentID mcgSegmentKeyIdentify(int key);
107
108 int mcgRayBuild(mcgRay_t *ray, mcgFile_t *file);
109