netcdf-java icon indicating copy to clipboard operation
netcdf-java copied to clipboard

[v7.x]: BUFR: Negative and unknown enum value

Open lesserwhirls opened this issue 4 years ago • 5 comments

Versions impacted by the bug

v5.x, v6.x, v7.x

What went wrong?

Report from mailing list:

Hi,

I am using netcdf-java 5.3.3 to read various bufr-files. It works very well, but 2 things are strange:

  1. Compared to other tools, I got sometimes different values for the variable obs.Radiosonde_type, -114 in this case. This is a invalid value, since the values of this enum are only positive.

  2. I also got Unknown enum value for several enums, for example obs.Radiosonde_type. In netcdf-java 5.4.1 these values are NULL. I am not sure, if this a problem with your library, since many (not all) enums can be transformed to string (NetcdfDatasets does this job) and only BUFRdisplay was able to transform obs.Radiosonde_type for me.

Here are my test results:

  • BUFR Viewer

    LSSW    0 02 011    RADIOSONDE TYPE    CODE_TABLE    10**  0    0    8 bits    142    [ 142.000 ]
    DWSG    0 02 011    RADIOSONDE TYPE    CODE_TABLE    10**  0    0    8 bits    124    [ 124.000 ]
    
  • [toolsUI](5.3.3 https://www.unidata.ucar.edu/downloads/netcdf-java/)

    LSSW    Radiosonde_type =   "Unknown enum value=-114" CodeTable 0-2-11
    DWSG    Radiosonde_type =   "Unknown enum value=124" CodeTable 0-2-11
    
  • toolsUI-5.4.1 Only NULL for both files

  • BUFRdisplay

    LSSW    8,"Radiosonde type","Code table","0-02-011",142 -> Vaisala RS41 with pressure derived from GPS 
    height/AUTOSONDE (Finland)
    DWSG    8,"Radiosonde type","Code table","0-02-011",124 -> Vaisala RS41/AUTOSONDE (Finland)
    
  • ecCodes

    LSSW    "key" : "radiosondeType", "value" : 142, "units" : "CODE TABLE"
    DWSG    "key" : "radiosondeType", "value" : 124, "units" : "CODE TABLE"
    

After searching for Vaisala RS41/AUTOSONDE (Finland) in your repository, I found this:

https://github.com/Unidata/netcdf-java/blob/94e4415435e4d1acc2de658297592c7518b1bdf4/cdm-core/src/main/resources/resources/wmo/Common_C02_20181107_en.xml#L948-L955

This file is or should be used here:

https://github.com/Unidata/netcdf-java/blob/94e4415435e4d1acc2de658297592c7518b1bdf4/cdm-core/src/main/java/ucar/nc2/internal/wmo/CommonCodeTable.java#L72

Unfortunately only C1, C3 and C12 are active at the moment. C2 is commented out. This explains the Unknown enum value.

Relevant stack trace

No response

Relevant log messages

No response

If you have an example file that you can share, please attach it to this issue.

If so, may we include it in our test datasets to help ensure the bug does not return once fixed? Note: the test datasets are publicly accessible without restriction.

Yes

Code of Conduct

  • [X] I agree to follow the UCAR/Unidata Code of Conduct

lesserwhirls avatar Jul 12 '21 21:07 lesserwhirls

Thank you for your report @netty-jawn!

lesserwhirls avatar Jul 12 '21 21:07 lesserwhirls

Thanks!

ghost avatar Jul 14 '21 11:07 ghost

Any progress in this issue?

Regarding the negative number: The -114 is not so wrong at all. The Windows calculator gave me this binary representation of both values:

 142 =                                                         10001110
-114 = 1111111111111111111111111111111111111111111111111111111110001110

ghost avatar Sep 08 '21 18:09 ghost

@JP95Git

JP95Git avatar Jun 22 '22 18:06 JP95Git