6 static int merge_split_cuts = 1;
8 void RSL_wsr88d_merge_split_cuts_on()
13 void RSL_wsr88d_merge_split_cuts_off()
18 void RSL_wsr88d_keep_short_refl()
20 RSL_wsr88d_merge_split_cuts_off();
23 int wsr88d_merge_split_cuts_is_set()
25 return merge_split_cuts;
28 void wsr88d_remove_extra_refl(Radar *radar)
30 /* This function removes any extra reflectivity for an elevation angle.
31 * I.e., only keep reflectivity from the surveillance sweep of a split cut.
37 prev_elev = radar->v[DZ_INDEX]->sweep[0]->h.elev;
39 for (i=1; i < radar->v[DZ_INDEX]->h.nsweeps; i++) {
40 if (radar->v[DZ_INDEX]->sweep[i]) {
41 if (fabsf(radar->v[DZ_INDEX]->sweep[i]->h.elev - prev_elev) < .2) {
42 RSL_free_sweep(radar->v[DZ_INDEX]->sweep[i]);
43 radar->v[DZ_INDEX]->sweep[i] = NULL;
45 else prev_elev = radar->v[DZ_INDEX]->sweep[i]->h.elev;
50 void wsr88d_move_vcp121_extra_velsweeps(Radar *radar)
52 /* Move the extra velocity and spectrum-width sweeps in VCP 121 split cuts
53 * to other volume indexes. We do this in order to allow all data moments
54 * at a particular split cut elevation to later be moved to the same sweep
55 * level in the radar structure.
60 if (radar->v[VR_INDEX] != NULL) {
61 if (radar->v[V2_INDEX] == NULL) {
62 radar->v[V2_INDEX] = RSL_new_volume(radar->v[VR_INDEX]->h.nsweeps);
63 radar->v[V2_INDEX]->h.type_str = "Velocity 2";
64 radar->v[V2_INDEX]->h.f = VR_F;
65 radar->v[V2_INDEX]->h.invf = VR_INVF;
67 if (radar->v[V3_INDEX] == NULL) {
68 radar->v[V3_INDEX] = RSL_new_volume(radar->v[VR_INDEX]->h.nsweeps);
69 radar->v[V3_INDEX]->h.type_str = "Velocity 3";
70 radar->v[V3_INDEX]->h.f = VR_F;
71 radar->v[V3_INDEX]->h.invf = VR_INVF;
74 if (radar->v[SW_INDEX] != NULL) {
75 if (radar->v[S2_INDEX] == NULL) {
76 radar->v[S2_INDEX] = RSL_new_volume(radar->v[SW_INDEX]->h.nsweeps);
77 radar->v[S2_INDEX]->h.type_str = "Spectrum width 2";
78 radar->v[S2_INDEX]->h.f = SW_F;
79 radar->v[S2_INDEX]->h.invf = SW_INVF;
81 if (radar->v[S3_INDEX] == NULL) {
82 radar->v[S3_INDEX] = RSL_new_volume(radar->v[SW_INDEX]->h.nsweeps);
83 radar->v[S3_INDEX]->h.type_str = "Spectrum width 3";
84 radar->v[S3_INDEX]->h.f = SW_F;
85 radar->v[S3_INDEX]->h.invf = SW_INVF;
89 for (iswp=2; iswp < 16; iswp++) {
91 case 2: case 6: case 9: case 12: case 15:
92 if (radar->v[VR_INDEX] == NULL) break;
93 if (radar->v[VR_INDEX]->sweep[iswp] == NULL) break;
94 radar->v[V2_INDEX]->sweep[iswp] = radar->v[VR_INDEX]->sweep[iswp];
95 radar->v[VR_INDEX]->sweep[iswp] = NULL;
96 if (radar->v[SW_INDEX] == NULL) break;
97 if (radar->v[SW_INDEX]->sweep[iswp] == NULL) break;
98 radar->v[S2_INDEX]->sweep[iswp] = radar->v[SW_INDEX]->sweep[iswp];
99 radar->v[SW_INDEX]->sweep[iswp] = NULL;
101 case 3: case 7: case 10: case 13:
102 if (radar->v[VR_INDEX] == NULL) break;
103 if (radar->v[VR_INDEX]->sweep[iswp] == NULL) break;
104 radar->v[V3_INDEX]->sweep[iswp] = radar->v[VR_INDEX]->sweep[iswp];
105 radar->v[VR_INDEX]->sweep[iswp] = NULL;
106 if (radar->v[SW_INDEX] == NULL) break;
107 if (radar->v[SW_INDEX]->sweep[iswp] == NULL) break;
108 radar->v[S3_INDEX]->sweep[iswp] = radar->v[SW_INDEX]->sweep[iswp];
109 radar->v[SW_INDEX]->sweep[iswp] = NULL;
116 Radar *wsr88d_merge_split_cuts(Radar *radar)
118 /* Move the split-cut sweeps so that all sweeps of an elevation angle
119 * are at the same sweep index in the Radar structure.
122 if (!wsr88d_merge_split_cuts_is_set()) RSL_wsr88d_merge_split_cuts_on();
124 wsr88d_remove_extra_refl(radar);
125 if (radar->h.vcp == 121) wsr88d_move_vcp121_extra_velsweeps(radar);
126 radar = RSL_prune_radar(radar);