float max_vel, sweep_rate, azim_rate;
float ray_data;
float az1, az2;
+ float elev1, elev2;
double tmp;
float sqi, log, csr, sig, cal_dbz;
- char radar_type[50], state[2], city[15];
+ char radar_type[50], state[4], city[15];
char site_name[16];
NSIG_Product_file *prod_file;
short id;
twob nsig_twob;
Sweep *sweep;
int msec;
+ const unsigned short low10bits = 0x3ff;
float azm, elev, pitch, roll, heading, azm_rate, elev_rate,
pitch_rate, roll_rate, heading_rate,
lat, lon;
sweep_day = NSIG_I2(nsig_sweep[itype]->idh.time.day);
sweep_sec = NSIG_I4(nsig_sweep[itype]->idh.time.sec);
#ifdef NSIG_VER2
- msec = NSIG_I2(nsig_sweep[itype]->idh.time.msec);
+ msec = NSIG_I2(nsig_sweep[itype]->idh.time.msec) & low10bits;
/* printf("....... msec == %d\n", msec); */
#endif
/* converting seconds since mid to time of day */
ifield = HC_INDEX;
f = HC_F;
invf = HC_INVF;
+ break;
case NSIG_DTB_DBZ2:
ifield = CZ_INDEX;
f = CZ_F;
invf = CZ_INVF;
+ break;
case NSIG_DTB_ZDRC2:
ifield = ZD_INDEX;
f = ZD_F;
invf = ZD_INVF;
break;
+ case NSIG_DTB_DBTE8:
+ ifield = ET_INDEX;
+ f = ZT_F;
+ invf = ZT_INVF;
+ break;
+ case NSIG_DTB_DBZE8:
+ ifield = EZ_INDEX;
+ f = DZ_F;
+ invf = DZ_INVF;
+ break;
default:
fprintf(stderr,"Unknown field type: %d Skipping it.\n", data_type);
continue;
ray->h.wavelength = wave/100.0; /* meters */
ray->h.nyq_vel = max_vel; /* m/s */
if (elev == 0.) elev = sweep->h.elev;
- ray->h.elev = (nsig_from_bang(ray_p->h.end_elev)+nsig_from_bang(ray_p->h.beg_elev))/2.0;
+
/* Compute mean azimuth angle for ray. */
az1 = nsig_from_bang(ray_p->h.beg_azm);
az2 = nsig_from_bang(ray_p->h.end_azm);
if (az1 > 360) az1 -= 360;
ray->h.azimuth = az1;
+ /* Compute mean elevation angle for ray. */
+ elev1 = nsig_from_bang(ray_p->h.beg_elev);
+ elev2 = nsig_from_bang(ray_p->h.end_elev);
+ /* printf("elev1, %f, elev2 %f\n", elev1, elev2); */
+ if(elev1 > elev2)
+ if((elev1 - elev2) > 180.0) elev2 += 360.0;
+ else
+ ;
+ else
+ if((elev2 - elev1) > 180.0) elev2 -= 360.0;
+
+ elev1 = (elev1 + elev2) / 2.0;
+ if (elev1 > 360) elev1 -= 360;
+ ray->h.elev = elev1;
+
/* From the extended header information, we learn the following. */
ray->h.pitch = pitch;
ray->h.roll = roll;
switch(data_type) {
case NSIG_DTB_UCR:
case NSIG_DTB_CR:
+ case NSIG_DTB_DBTE8:
+ case NSIG_DTB_DBZE8:
if (ray_p->range[k] == 0) ray_data = NSIG_NO_ECHO;
else ray_data = (float)((ray_p->range[k]-64.0)/2.0);
break;