]> Pileus Git - ~andy/rsl/blob - examples/print_header_info.c
Initial import
[~andy/rsl] / examples / print_header_info.c
1
2 #include <stdio.h>
3 #include <getopt.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 #include "rsl.h"
8
9 int qprint_ray;
10
11 usage(char **argv)
12 {
13   fprintf(stderr,"Usage: %s [-v] [-f nexrad_id] [infile]\n", argv[0]);
14   exit(-1);
15 }
16
17 process_args(int argc, char **argv,
18                          char **in_file, int *qprint_ray,
19                          char **site)
20 {
21   
22   int c;
23   
24   while ((c = getopt(argc, argv, "vf:")) != -1)
25         switch (c) {
26         case 'v': *qprint_ray = 1;  break;
27         case 'f': *site = strdup(optarg); break;
28         case '?': usage(argv); break;
29         default:  break;
30         }
31   
32   if ((argc-optind) == 0) {
33         *in_file = NULL;
34   } else if ((argc-optind) == 1) {
35         *in_file = strdup(argv[optind]);
36   } else {
37         usage(argv);
38   }
39 }
40
41 void print_ray_values(Ray *ray)
42 {
43   int i,j;
44
45   if (ray == NULL) {
46         printf("Ray = NULL\n");
47         return;
48   }
49
50   for (i=0; i<ray->h.nbins; i+=10) {
51         for (j=i; j<(i+10)&&j<ray->h.nbins; j++)
52           printf("%10.2f", ray->h.f(ray->range[j]));
53         printf("\n");
54   }
55   return;
56 }
57
58 void print_header_for_ray(Ray *ray)
59 {
60   if (ray==NULL) {printf("NULL."); return;}
61
62 printf("   month %d\n",   ray->h.month); /* Time for this ray; month (1-12). */
63 printf("     day %d\n",   ray->h.day);   /* Time for this ray; day (1-31).   */
64 printf("    year %d\n",   ray->h.year);  /* Time for this ray; year (eg. 1993). */
65 printf("    hour %d\n",   ray->h.hour);  /* Date for this ray; hour (0-23). */
66 printf("  minute %d\n",   ray->h.minute);/* Date for this ray; minute (0-59).*/
67 printf("     sec %f\n", ray->h.sec);   /* Date for this ray; second + fraction of second. */
68 printf("    unam %f\n", ray->h.unam_rng);  /* Unambiguous range. (KM). */
69 printf(" azimuth %f\n", ray->h.azimuth);   /* Azimuth angle. (degrees). 0=North, 90=east, -90=west. */
70 printf(" ray_num %d\n",   ray->h.ray_num);   /* Ray no. within elevation scan. */
71 printf("    elev %f\n", ray->h.elev);       /* Elevation angle. (degrees). */
72 printf("elev_num %d\n",   ray->h.elev_num);   /* Elevation no. within volume scan. */
73   
74 printf(" range_bin1 %d\n",   ray->h.range_bin1); /* Range to first gate.(meters) */
75 printf("  gate_size %d\n",   ray->h.gate_size);  /* Data gate size (meters)*/
76   
77 printf("    vel_res %f\n",  ray->h.vel_res);    /* Doppler velocity resolution */
78 printf(" sweep_rate %f\n", ray->h.sweep_rate);   /* Sweep rate. Full sweeps/min. */
79   
80 printf("        prf %f\n", ray->h.prf);          /* Pulse repitition frequency, in Hz. */
81 printf("  azim_rate %f\n", ray->h.azim_rate);
82 printf("  fix_angle %f\n", ray->h.fix_angle);
83 printf("pulse_count %f\n", ray->h.pulse_count);
84 printf("pulse_width %f\n", ray->h.pulse_width); /* Pulse width (micro-sec). */
85 printf(" beam_width %f\n", ray->h.beam_width);  /* Beamwidth in degrees. */
86 printf("  frequency %f\n", ray->h.frequency);   /* Bandwidth MHz. */
87 printf(" wavelength %f\n", ray->h.wavelength);  /* Wavelength. Meters. */
88 printf("    nyq_vel %f\n", ray->h.nyq_vel);    /* Nyquist velocity. m/s */
89 printf("   latitude %f\n", ray->h.lat);    /* Latitude (decimal) */
90 printf("  longitude %f\n", ray->h.lon);    /* Longitude (decimal) */
91 printf("      nbins %d\n", ray->h.nbins);               /* Number of array elements for 'Range'. */
92
93 if (!qprint_ray) return;
94
95 print_ray_values(ray);
96
97 }
98
99 void print_header_for_sweep(Sweep *s)
100 {
101   int i;
102
103   if (s==NULL) return;
104   for (i=0; i<s->h.nrays; i++) {
105         printf("ray[%d] ",i );
106         print_header_for_ray(s->ray[i]);
107         printf("\n");
108   }
109
110 }
111
112 void print_header_for_volume(Volume *v)
113 {
114   int i;
115   if (v==NULL) return;
116   for (i=0; i<v->h.nsweeps; i++) {
117         printf("-------- Sweep %d ---------\n", i);
118         print_header_for_sweep(v->sweep[i]);
119   }
120 }
121
122
123 main(int argc, char **argv)
124 {
125   char *infile;
126
127   Radar *radar;
128   char *site = NULL;
129   int i;
130
131   qprint_ray = 0; /* Global flag for printing ray values. */
132   process_args(argc, argv, &infile, &qprint_ray, &site); /* malloc for in/outfile */
133
134   RSL_radar_verbose_on();
135   RSL_read_these_sweeps("all", NULL);
136
137   radar = RSL_anyformat_to_radar(infile, site);
138
139   printf("Radar date: %2.2d/%2.2d/%2.2d\n", radar->h.month, radar->h.day, radar->h.year);
140   printf("Radar time: %2.2d:%2.2d:%f\n", radar->h.hour, radar->h.minute, radar->h.sec);
141
142   printf("Radar file: %s\n", infile);
143   printf("Radar site: %c%c%c%c\n",
144                  radar->h.name[0],
145                  radar->h.name[1],
146                  radar->h.name[2],
147                  radar->h.name[3]);
148   printf("Radar date: %2.2d/%2.2d/%2.2d\n", radar->h.month, radar->h.day, radar->h.year);
149   printf("Radar time: %2.2d:%2.2d:%f\n", radar->h.hour, radar->h.minute, radar->h.sec);
150
151
152 printf("Radar sec       : %f\n", radar->h.sec); /* Second plus fractional part. */
153 printf("Radar radar_type: %s\n", radar->h.radar_type);
154                        /* Type of radar.  Use for QC-ing the data.
155                             * Supported types are:
156                         * "wsr88d", "lassen", "uf",
157                         * "nsig", "mcgill",
158                             * "kwajalein", "rsl", "toga".
159                         * Set by appropriate ingest routine.
160                         */
161 printf("Radar nvolumes  : %d\n", radar->h.nvolumes);
162 printf("Radar number    : %d\n", radar->h.number);
163 printf("Radar name      : %s\n", radar->h.name);
164 printf("Radar radar_name: %s\n", radar->h.radar_name);
165 printf("Radar city      : %s\n",  radar->h.city);
166 printf("Radar state     : %s\n", radar->h.state);
167 printf("Radar latd: %d\n", radar->h.latd);
168 printf("Radar latm: %d\n", radar->h.latm);
169 printf("Radar lats: %d\n", radar->h.lats);
170 printf("Radar lond: %d\n", radar->h.lond);
171 printf("Radar lonm: %d\n", radar->h.lonm);
172 printf("Radar lons: %d\n", radar->h.lons);
173 printf("Radar height: %d\n", radar->h.height);
174 printf("Radar spulse: %d\n", radar->h.spulse);
175 printf("Radar lpulse: %d\n", radar->h.lpulse);
176 printf("Radar lpulse: %d\n", radar->h.lpulse);
177
178
179 for (i=0; i<radar->h.nvolumes; i++) {
180
181   if (radar->v[i]) {
182         printf("PRINT_HEADER_FOR_VOLUME, %d, ... nsweeps = %d\n", i, radar->v[i]->h.nsweeps);
183         print_header_for_volume(radar->v[i]);
184   }
185 }
186 exit(0);
187
188 }