2 * Ingest NEXRAD (wsr88d) data and print the azimuth hash table created.
4 * This example is the most minimum of coding that you need to do
5 * to achieve good results from using the RSL code.
7 * This is short and sweet to demonstrate the simplicity of use for
15 void print_link_list(Azimuth_hash *list)
21 printf("ray# %d azim %f, hi# %d lo# %d|", list->ray->h.ray_num, list->ray->h.azimuth, list->ray_high->ray->h.ray_num, list->ray_low->ray->h.ray_num);
22 print_link_list(list->next);
27 * Cannot compile if the hash table is static in volume.c. For
28 * testing we make it globally known.
36 extern int RSL_max_sweeps; /* Initial allocation for sweep_list.
37 * RSL_new_sweep will allocate the space first
40 extern int RSL_nsweep_addr; /* A count of sweeps in the table. */
41 extern Sweep_list *RSL_sweep_list;
42 extern int RSL_nextents;
44 void print_hash_table (Sweep *s)
52 if (s == NULL) return;
53 sweep_index = SWEEP_INDEX(s);
54 res = 360.0/RSL_sweep_list[sweep_index].hash->nindexes;
55 printf("Azimuth resolution = %f for %d bins.\n", res, RSL_sweep_list[sweep_index].hash->nindexes);
56 for (i=0; i<RSL_sweep_list[sweep_index].hash->nindexes; i++) {
57 index = RSL_sweep_list[sweep_index].hash->indexes[i];
59 printf("RSL_sweep_list[%d].hash->indexes[%d] = ", sweep_index, i);
64 print_link_list(index);
68 void poke_about_sweep(Sweep *s)
70 /* This routine demonstrates that the azimuth we want is the azimuth
76 ray = RSL_get_first_ray_of_sweep(s);
77 res = 360.0/s->h.nrays;
78 for (azim=0; azim<360; azim+=res) {
79 ray = RSL_get_ray_from_sweep(s, azim);
81 printf("Azimuth %f matched in ray # %d, h.azimuth= %f, diff=%f\n",
82 azim, ray->h.ray_num, ray->h.azimuth,
85 printf("Azimuth %f NOT FOUND within 1/2 beamwidth; 1/2beam=%f\n",
86 azim, s->h.horz_half_bw);
91 int main(int argc, char **argv)
96 if (argc != 3) {fprintf(stderr, "Usage: %s infile callid_or_firstfile\n", argv[0]); exit(-1);}
97 RSL_radar_verbose_on();
98 radar = RSL_wsr88d_to_radar(argv[1], argv[2]);
99 if (radar == NULL) exit(-1);
100 /***********************************************************************/
102 /* You now have a pointer to Radar. */
103 /* Now use *radar all you like. */
105 /***********************************************************************/
107 /* Use radar->v[DZ_INDEX] for REFELECTIVITY
108 * radar->v[VR_INDEX] for VELOCITY
109 * radar->v[SW_INDEX] for SPECTRUM_WIDTH
112 sweep = RSL_get_first_sweep_of_volume(radar->v[DZ_INDEX]);
113 print_hash_table(sweep);
115 poke_about_sweep(sweep);