Difference between revisions of "Workdocumentation 2018-08-18"
Jump to navigation
Jump to search
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | [[File:sf-history2018-05-30_1650JS.png|400px]][[File:sf-history2018-05-30_1650.png|400px]] | + | {{WorkSequence|prev=2018-04-30|next=2018-08-20}} |
+ | go:[[File:sf-history2018-05-30_1650JS.png|400px]]java:[[File:sf-history2018-05-30_1650.png|400px]] | ||
+ | == go == | ||
+ | <source lang='go'> | ||
+ | // rvp6LittleEndian converts the raw two byte tuple of little endian encoded composite products | ||
+ | // to radar video processor values (rvp-6). NaN may be returned when the no-data flag is set. | ||
+ | func (c *Composite) rvp6LittleEndian(tuple [2]byte) float32 { | ||
+ | var value int = 0x0F & int(tuple[1]) | ||
+ | value = (value << 8) + int(tuple[0]) | ||
+ | |||
+ | if tuple[1]&(1<<5) != 0 { // error code: no-data | ||
+ | return NaN | ||
+ | } | ||
+ | |||
+ | if tuple[1]&(1<<6) != 0 { // flag: negative value | ||
+ | value *= -1 | ||
+ | } | ||
+ | |||
+ | conv := c.rvp6Raw(value) // set decimal point | ||
+ | |||
+ | // little endian encoded formats are also used for mm/h | ||
+ | if c.DataUnit != Unit_dBZ { | ||
+ | return conv | ||
+ | } | ||
+ | |||
+ | // Even though this format supports negative values and custom | ||
+ | // precision they do not make use of this and we still have to subtract | ||
+ | // the bias and scale it (RADVOR FX, dBZ) | ||
+ | return toDBZ(conv) | ||
+ | } | ||
+ | |||
+ | // rvp6Raw converts the raw value to radar video processor values (rvp-6) by applying the | ||
+ | // products precision field. | ||
+ | func (c *Composite) rvp6Raw(value int) float32 { | ||
+ | return float32(value) * float32(math.Pow10(c.precision)) | ||
+ | } | ||
+ | </source> | ||
+ | == Java == | ||
+ | <source lang='java'> | ||
+ | // rvp6LittleEndian converts the raw two byte tuple of little endian encoded | ||
+ | // composite products | ||
+ | // to radar video processor values (rvp-6). NaN may be returned when the | ||
+ | // no-data flag is set. | ||
+ | public static float rvp6LittleEndian(Composite c, byte... tuple) { | ||
+ | int value = 0x0F & tuple[1]; | ||
+ | value = (value << 8) | (tuple[0]&0x0f); | ||
+ | |||
+ | if ((tuple[1] & (1 << 5)) != 0) { // error code: no-data | ||
+ | return Float.NaN; | ||
+ | } | ||
+ | |||
+ | if ((tuple[1] & (1 << 6)) != 0) { // flag: negative value | ||
+ | value *= -1; | ||
+ | } | ||
+ | |||
+ | float conv = (float) c.rvp6Raw(value); // set decimal point | ||
+ | |||
+ | // little endian encoded formats are also used for mm/h | ||
+ | if (c.getDataUnit() != Unit.Unit_dBZ) { | ||
+ | return conv; | ||
+ | } | ||
+ | |||
+ | // Even though this format supports negative values and custom | ||
+ | // precision they do not make use of this and we still have to subtract | ||
+ | // the bias and scale it (RADVOR FX, dBZ) | ||
+ | return Conversion.toDBZ(conv); | ||
+ | } | ||
+ | |||
+ | // rvp6Raw converts the raw value to radar video processor values (rvp-6) by applying the | ||
+ | // products precision field. | ||
+ | public static double rvp6Raw(Composite c, int value) { | ||
+ | double rvalue=value * c.getPrecisionFactor(); | ||
+ | return rvalue; | ||
+ | } | ||
+ | </source> | ||
+ | == Difference Examples == | ||
+ | first column: Java - second column: go third colum difference * 10 | ||
+ | <pre> | ||
+ | ... | ||
+ | 518, 32: 0,9 != 18,5 d*10=176,0 | ||
+ | 519, 32: 0,8 != 16,8 d*10=160,0 | ||
+ | 520, 32: 0,7 != 15,1 d*10=144,0 | ||
+ | 517, 33: 0,9 != 15,3 d*10=144,0 | ||
+ | 518, 33: 1,3 != 22,1 d*10=208,0 | ||
+ | 519, 33: 1,1 != 20,3 d*10=192,0 | ||
+ | </pre> | ||
+ | Cause: 0x0F mask needs to be 0xFF for tuple[0]! |
Latest revision as of 06:55, 1 September 2018
go
// rvp6LittleEndian converts the raw two byte tuple of little endian encoded composite products
// to radar video processor values (rvp-6). NaN may be returned when the no-data flag is set.
func (c *Composite) rvp6LittleEndian(tuple [2]byte) float32 {
var value int = 0x0F & int(tuple[1])
value = (value << 8) + int(tuple[0])
if tuple[1]&(1<<5) != 0 { // error code: no-data
return NaN
}
if tuple[1]&(1<<6) != 0 { // flag: negative value
value *= -1
}
conv := c.rvp6Raw(value) // set decimal point
// little endian encoded formats are also used for mm/h
if c.DataUnit != Unit_dBZ {
return conv
}
// Even though this format supports negative values and custom
// precision they do not make use of this and we still have to subtract
// the bias and scale it (RADVOR FX, dBZ)
return toDBZ(conv)
}
// rvp6Raw converts the raw value to radar video processor values (rvp-6) by applying the
// products precision field.
func (c *Composite) rvp6Raw(value int) float32 {
return float32(value) * float32(math.Pow10(c.precision))
}
Java
// rvp6LittleEndian converts the raw two byte tuple of little endian encoded
// composite products
// to radar video processor values (rvp-6). NaN may be returned when the
// no-data flag is set.
public static float rvp6LittleEndian(Composite c, byte... tuple) {
int value = 0x0F & tuple[1];
value = (value << 8) | (tuple[0]&0x0f);
if ((tuple[1] & (1 << 5)) != 0) { // error code: no-data
return Float.NaN;
}
if ((tuple[1] & (1 << 6)) != 0) { // flag: negative value
value *= -1;
}
float conv = (float) c.rvp6Raw(value); // set decimal point
// little endian encoded formats are also used for mm/h
if (c.getDataUnit() != Unit.Unit_dBZ) {
return conv;
}
// Even though this format supports negative values and custom
// precision they do not make use of this and we still have to subtract
// the bias and scale it (RADVOR FX, dBZ)
return Conversion.toDBZ(conv);
}
// rvp6Raw converts the raw value to radar video processor values (rvp-6) by applying the
// products precision field.
public static double rvp6Raw(Composite c, int value) {
double rvalue=value * c.getPrecisionFactor();
return rvalue;
}
Difference Examples
first column: Java - second column: go third colum difference * 10
... 518, 32: 0,9 != 18,5 d*10=176,0 519, 32: 0,8 != 16,8 d*10=160,0 520, 32: 0,7 != 15,1 d*10=144,0 517, 33: 0,9 != 15,3 d*10=144,0 518, 33: 1,3 != 22,1 d*10=208,0 519, 33: 1,1 != 20,3 d*10=192,0
Cause: 0x0F mask needs to be 0xFF for tuple[0]!