Cappi *RSL_new_cappi(Sweep *sweep, float height) { /* Modeled after a sweep structure. */ int a; Cappi *c; float grange; Ray *ray; int num_bin; float start_bin, size_bin; if((c = (Cappi *)calloc(1, sizeof(Cappi))) == NULL) { fprintf(stderr,"RSL_new_cappi: Calloc failed for Cappi data structure.\n"); return(NULL); } c->height = height; ray = RSL_get_first_ray_of_sweep(sweep); num_bin = ray->h.nbins; start_bin = ray->h.range_bin1/1000.0; size_bin = ray->h.gate_size/1000.0; /* Allocate space for elev angle,range array */ if((c->loc =(Er_loc *)calloc(num_bin,sizeof(Er_loc))) == NULL) { fprintf(stderr,"RSL_new_cappi: Calloc failed for er_loc array. \n"); free(c); return(NULL); } /* Calculate elevation angle verse range array */ for(a=0;a<num_bin;a++) { grange = start_bin + (a * size_bin); RSL_get_slantr_and_elev(grange,height, &c->loc[a].srange,&c->loc[a].elev); } /* Allocate Space for the data */ c->sweep = RSL_copy_sweep(sweep); RSL_clear_sweep(c->sweep); /* This maintains header info. */ return c; }
main (int argc, char **argv) { Radar *new_radar, *tmp_radar, *radar; Sweep *s, *new_sweep; float min_range, max_range, low_azim, hi_azim; int j, i; char type; Volume *new_volume, *v; /* RSL_radar_verbose_on(); */ if (argc < 8) { fprintf(stderr, "%s type(r|v|s) min_range max_range low_azim hi_azim ref_uf_file out_file\n", argv[0]); exit(-1); } i = 1; type = argv[i++][0]; min_range = (float) atoi(argv[i++]); max_range = (float) atoi(argv[i++]); low_azim = (float) atoi(argv[i++]); hi_azim = (float) atoi(argv[i++]); radar = RSL_uf_to_radar(argv[i++]); if (!radar) exit(-1); RSL_load_refl_color_table(); switch(type) { case 'r': case 'v': v = RSL_copy_volume(radar->v[DZ_INDEX]); if (!v) exit(-1); if ((v = RSL_clear_volume(v)) == NULL) exit(-1); printf("volume's nsweeps - %d\n", v->h.nsweeps); for (j = 0; j < v->h.nsweeps; j++) { printf("loading sweep %d\n", j); v->sweep[j] = load_sweep(v->sweep[j]); } /* test get*from radar */ if (type == 'r') { if ((tmp_radar = RSL_new_radar(radar->h.nvolumes)) == NULL) exit (-1); tmp_radar->h = radar->h; tmp_radar->v[DZ_INDEX] = v; new_radar = RSL_get_window_from_radar(tmp_radar,min_range, max_range, low_azim, hi_azim); if (new_radar == NULL) { printf("null new radar\n"); exit(-1); } RSL_volume_to_gif(new_radar->v[DZ_INDEX], argv[i], 500, 500, max_range); RSL_free_radar(tmp_radar); RSL_free_radar(new_radar); } else { new_volume = RSL_get_window_from_volume(v, min_range, max_range, low_azim, hi_azim); if (new_volume != NULL) RSL_volume_to_gif(new_volume, argv[i], 500, 500, max_range); /* RSL_bscan_volume(new_volume); */ RSL_free_volume(new_volume); } break; case 's': s = RSL_copy_sweep(radar->v[DZ_INDEX]->sweep[0]); s = RSL_clear_sweep(s); s = load_sweep(s); if (!s) { printf("null sweep\n"); exit(-1); } new_sweep = RSL_get_window_from_sweep(s, min_range, max_range, low_azim, hi_azim ); RSL_sweep_to_gif(new_sweep, argv[i], 500, 500, max_range); /* RSL_bscan_sweep(new_sweep); */ RSL_free_sweep(new_sweep); break; default: break; } RSL_free_radar(radar); printf("done\n"); exit (0); }