#define F_DZ_RANGE_OFFSET 32
#endif
+/* #define F_VR_OFFSET 63.5 */
+#define F_VR_OFFSET 127.0
+#define F_DR_OFFSET 12.0
+
/* IMPORTANT: This is the offset from reserved values. This
* number must be exactly (or >=) the number of
* reserved values in XX_F and XX_INVF.
float VR_F(Range x) {
float val;
if (x >= F_OFFSET) { /* This test works when Range is unsigned. */
- val = (((float)x-F_OFFSET)/F_FACTOR - 63.5); /* Default wsr88d coding. */
+ val = (((float)x-F_OFFSET)/F_FACTOR - F_VR_OFFSET); /* Default wsr88d coding. */
/* fprintf(stderr, "x=%d, val=%f\n", x, val); */
return val;
}
float DR_F(Range x) { /* Differential reflectivity */
float val;
if (x >= F_OFFSET) { /* This test works when Range is unsigned. */
- val = (((float)x-F_OFFSET)/F_DR_FACTOR - 12.0);
+ val = (((float)x-F_OFFSET)/F_DR_FACTOR - F_DR_OFFSET);
return val;
}
if (x == 0) return BADVAL;
return BADVAL;
}
+float HC_F(Range x) { /* HydroClass (Sigmet) */
+ if (x == 0) return BADVAL;
+ return (float)x;
+}
+
/****************************
Sigmet RhoHV : one_byte values
> RohHV = sqrt((N-1)/253)
*******************************/
float RH_F(Range x) {
if (x == 0) return BADVAL;
- return (float)(sqrt((double)((x-1.0)/253.0)));
- }
+ /* return (float)(sqrt((double)((x-1.0)/253.0))); */
+ return (float)(x-1) / 65533.;
+}
/*****************************
Sigmet PhiDP : one_byte values
******************************/
float PH_F(Range x) {
if (x == 0) return BADVAL;
- return (float)(180.0*((x-1.0)/254.0));
+ /*return (float)(180.0*((x-1.0)/254.0));*/
+ return (360.*(x-1.))/65534.;
}
+/* TODO: Should this be 5. cm. instead of 0.5? Or maybe 10. cm.? */
float rsl_kdp_wavelen = 0.5; /* Default radar wavelen = .5 cm. See
* nsig_to_radar.c for the code that sets this.
- */
+ */
+/* KD_F for 1 or 2 byte. */
float KD_F(Range x)
{
+/****** Commented-out code for 1-byte Sigmet native data format.
if (x >= F_OFFSET) {
- x -= F_OFFSET;
- if (rsl_kdp_wavelen == 0.0) return BADVAL;
- if (x < 128)
- return (float)(
- -0.25 * pow((double)600.0,(double)((127-x)/126.0))
- )/rsl_kdp_wavelen;
- else if (x > 128)
- return (float)(
- 0.25 * pow((double)600.0,(double)((x-129)/126.0))
- )/rsl_kdp_wavelen;
- else
- return 0.0;
+ x -= F_OFFSET;
+ if (rsl_kdp_wavelen == 0.0) return BADVAL;
+ if (x < 128)
+ return (float)(
+ -0.25 * pow((double)600.0,(double)((127-x)/126.0))
+ )/rsl_kdp_wavelen;
+ else if (x > 128)
+ return (float)(
+ 0.25 * pow((double)600.0,(double)((x-129)/126.0))
+ )/rsl_kdp_wavelen;
+ else
+ return 0.0;
}
- if (x == 0) return BADVAL;
if (x == 1) return RFVAL;
if (x == 2) return APFLAG;
if (x == 3) return NOECHO;
return BADVAL;
+******/
+
+ if (x == 0) return BADVAL;
+ return (x-32768.)/100.;
+}
+
+float NP_F(Range x) { /* Normalized Coherent Power (DORADE) */
+ if (x == 0) return BADVAL;
+ return (float)x / 100.;
}
+/* Signal Quality Index */
float SQ_F(Range x) {
- if (x >= F_OFFSET) return (float)((x - F_OFFSET)/10000.);
if (x == 0) return BADVAL;
- if (x == 1) return RFVAL;
- if (x == 2) return APFLAG;
- if (x == 3) return NOECHO;
- return BADVAL; /* Can't get here, but quiets the compiler. */
+ return (float)(x-1) / 65533.;
}
float TI_F(Range x)
float AH_F(Range x) { return DZ_F(x); }
float CV_F(Range x) { return DZ_F(x); }
float AV_F(Range x) { return DZ_F(x); }
+float VS_F(Range x) { return VR_F(x); }
+float VL_F(Range x) { return VR_F(x); }
+float VG_F(Range x) { return VR_F(x); }
+float VT_F(Range x) { return VR_F(x); }
+float VC_F(Range x) { return VR_F(x); }
if (x == RFVAL) return (Range)1;
if (x == APFLAG) return (Range)2;
if (x == NOECHO) return (Range)3;
+ if (x < -F_DZ_RANGE_OFFSET) return (Range)0;
return (Range)(F_FACTOR*(x+F_DZ_RANGE_OFFSET)+.5 + F_OFFSET); /* Default wsr88d. */
}
if (x == RFVAL) return (Range)1;
if (x == APFLAG) return (Range)2;
if (x == NOECHO) return (Range)3;
- return (Range)(F_FACTOR*(x+63.5)+.5 + F_OFFSET); /* Default wsr88d coding. */
+ if (x < -F_VR_OFFSET) return (Range)0;
+ return (Range)(F_FACTOR*(x+F_VR_OFFSET)+.5 + F_OFFSET); /* Default wsr88d coding. */
}
Range DR_INVF(float x) /* Differential reflectivity */
if (x == RFVAL) return (Range)1;
if (x == APFLAG) return (Range)2;
if (x == NOECHO) return (Range)3;
- return (Range)(F_DR_FACTOR*(x + 12.0) + F_OFFSET + 0.5);
+ if (x < -F_DR_OFFSET) return (Range)0;
+ return (Range)(F_DR_FACTOR*(x + F_DR_OFFSET) + F_OFFSET + 0.5);
+}
+
+Range HC_INVF(float x) /* HydroClass (Sigmet) */
+{
+ if (x == BADVAL) return (Range)0;
+ return (Range)(x + 0.5); /* Round */
}
Range LR_INVF(float x) /* MCTEX */
> 253 0.9980
> 254 1.0000
****************************/
+/* RH_INVF for 1 or 2 byte data. */
Range RH_INVF(float x) {
if (x == BADVAL) return (Range)0;
- return (Range)(x * x * 253.0 + 1.0 + 0.5);
+ /* return (Range)(x * x * 253.0 + 1.0 + 0.5); */
+ return (Range)(x * 65533. + 1. +.5);
}
/******************************
*******************************/
Range PH_INVF(float x) {
if (x == BADVAL) return (Range)0;
- return (Range)((x / 180.0) * 254.0 + 1.0 + 0.5);
+ /* return (Range)((x / 180.0) * 254.0 + 1.0 + 0.5); */
+ return (Range)(x*65534./360. + 1.0 + 0.5);
}
+
+/* KD_INVF for 1 or 2 byte data. */
Range KD_INVF(float x) {
if (x == BADVAL) return (Range)0;
+/****** Commented-out code for 1-byte Sigmet native data format.
if (x == RFVAL) return (Range)1;
if (x == APFLAG) return (Range)2;
if (x == NOECHO) return (Range)3;
x = 128;
}
x += F_OFFSET;
- return (Range) x;
+******/
+ return (Range)(x * 100. + 32768. + 0.5);
}
-Range SQ_INVF(float x) /* Signal Quality Index */
+/* Signal Quality Index */
+Range SQ_INVF(float x)
{
if (x == BADVAL) return (Range)0;
- if (x == RFVAL) return (Range)1;
- if (x == APFLAG) return (Range)2;
- if (x == NOECHO) return (Range)3;
- return (Range)(x * 10000. + F_OFFSET);
+ return (Range)(x * 65533. + 1. +.5);
+}
+
+
+Range NP_INVF(float x) /* Normalized Coherent Power (DORADE) */
+{
+ if (x == BADVAL) return (0);
+ return (Range)(x * 100.);
}
Range TI_INVF(float x) /* MCTEX */
Range AH_INVF(float x) { return DZ_INVF(x); }
Range CV_INVF(float x) { return DZ_INVF(x); }
Range AV_INVF(float x) { return DZ_INVF(x); }
+Range VS_INVF(float x) { return VR_INVF(x); }
+Range VL_INVF(float x) { return VR_INVF(x); }
+Range VG_INVF(float x) { return VR_INVF(x); }
+Range VT_INVF(float x) { return VR_INVF(x); }
+Range VC_INVF(float x) { return VR_INVF(x); }
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
+ 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1,
+ 1, 1
};